diff --git a/app/assets/javascripts/application/collections.coffee b/app/assets/javascripts/application/collections.coffee
index 04a4d2015eb8de7fe0a63e9d371fd15ea5396170..46fc726d97a435afe67bfca9934690757b4a6ccf 100644
--- a/app/assets/javascripts/application/collections.coffee
+++ b/app/assets/javascripts/application/collections.coffee
@@ -5,4 +5,4 @@ $ ->
       $('#create_collection_popover_content').html()
     title: ->
       $('#create_collection_popover_title').html()
-  return
\ No newline at end of file
+  return
diff --git a/app/assets/javascripts/application/complaints.coffee b/app/assets/javascripts/application/complaints.coffee
new file mode 100644
index 0000000000000000000000000000000000000000..149f06dc8666751b27ff649bb82eac0f24f352e1
--- /dev/null
+++ b/app/assets/javascripts/application/complaints.coffee
@@ -0,0 +1,10 @@
+$ ->
+  $('.add_to_complaint').popover
+    html: true
+    placement: "left"
+    title: ->
+      $('#complaints_list_popover_title').html()
+    content: ->
+      $('#complaints_list_popover').html()
+
+  return
diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss
index b72a65dddc8db2ab604b9299cb892d25d7271d79..74da17c7a1a381d86975ff7af99f13fc99304fbc 100644
--- a/app/assets/stylesheets/application.scss
+++ b/app/assets/stylesheets/application.scss
@@ -63,6 +63,17 @@ a, a:focus, a:hover {
   top: 45%;
 }
 
+
+.popover{
+	display: none;
+	z-index: 999;
+	max-width: 600px;
+	width: auto;
+}
+
+.radio {
+  margin-left: 20px;
+}
 //// HEADER
 header {
   border: 0;
@@ -188,6 +199,8 @@ header {
 		}
 	}
 
+
+
   // navbar
   .navigation {
     background: $nav-grey;
diff --git a/app/controllers/complaints_controller.rb b/app/controllers/complaints_controller.rb
new file mode 100644
index 0000000000000000000000000000000000000000..26f48b71b69f57068c1b3993cd63448285fb726d
--- /dev/null
+++ b/app/controllers/complaints_controller.rb
@@ -0,0 +1,42 @@
+class ComplaintsController < ApplicationController
+  before_action :set_complaint, only: [:show, :update, :destroy, :like]
+
+  # POST /complaints
+  # POST /complaints.json
+  def create
+    @complaint = Complaint.new(complaint_params)
+    @complaint.user = current_user
+    @complaint.object = params[:object]
+    
+    respond_to do |format|
+      if complaint_repository.report @complaint
+        format.html { redirect_to @complaint, notice: 'complaint was successfully created.' }
+      else
+        format.html { render :new }
+      end
+    end
+  end
+
+  # DELETE /complaints/1
+  # DELETE /complaints/1.json
+  def destroy
+    complaint_repository.destroy @complaint
+
+    respond_to do |format|
+      format.html { redirect_to complaints_url, notice: 'Complaint was successfully destroyed.' }
+    end
+  end
+
+
+  private
+
+  def set_complaint
+    @complaint = complaint_repository.find params[:id]
+  end
+
+  # Never trust parameters from the scary internet, only allow the white list through.
+  def complaint_params
+    params.require(:complaint).permit(:object, :message, :description)
+  end
+
+end
diff --git a/app/controllers/concerns/reportable.rb b/app/controllers/concerns/reportable.rb
new file mode 100644
index 0000000000000000000000000000000000000000..e53469daf34c818bf66be44bec181984a47f26d5
--- /dev/null
+++ b/app/controllers/concerns/reportable.rb
@@ -0,0 +1,14 @@
+module Reportable
+  extend ActiveSupport::Concern
+
+  included do
+    @complaint = Complaint.new
+    @messages = [
+      Complaint.copyrights,
+      Complaint.ofensive_content,
+      Complaint.ofensive_user,
+      Complaint.fake_user
+    ]
+  end
+
+end
diff --git a/app/controllers/learning_objects_controller.rb b/app/controllers/learning_objects_controller.rb
index 8185408d8577a84750cd48f65ac2f8dfa98edf23..52fcf5b9c29c880a4ccb9ea5feed719e97fe125e 100644
--- a/app/controllers/learning_objects_controller.rb
+++ b/app/controllers/learning_objects_controller.rb
@@ -1,4 +1,6 @@
 class LearningObjectsController < ApplicationController
+  include Reportable
+
   before_action :set_learning_object, only: [:show, :edit, :update, :destroy, :like]
   after_action :increment_learning_object_views, only: [:show]
   before_action :authenticate_user!, except: [:index, :show, :like]
@@ -12,6 +14,13 @@ class LearningObjectsController < ApplicationController
   # GET /learning_objects/1
   # GET /learning_objects/1.json
   def show
+    @complaint = Complaint.new
+    @messages = [
+      Complaint.copyrights,
+      Complaint.ofensive_content,
+      Complaint.ofensive_user,
+      Complaint.fake_user
+    ]
   end
 
   # GET /learning_objects/new
@@ -72,6 +81,10 @@ class LearningObjectsController < ApplicationController
     end
   end
 
+  def report_object
+    learning_object_repository.report current_user, @learning_object, message, description
+  end
+
   private
 
   # Use callbacks to share common setup or constraints between actions.
@@ -90,4 +103,5 @@ class LearningObjectsController < ApplicationController
     end
   end
 
-end
\ No newline at end of file
+
+end
diff --git a/app/controllers/search_controller.rb b/app/controllers/search_controller.rb
index 47abcf8da59da31342ab60074b7346ce1123b2e6..6c462ae0406d09989f4434af713e390426de8996 100644
--- a/app/controllers/search_controller.rb
+++ b/app/controllers/search_controller.rb
@@ -15,7 +15,7 @@ class SearchController < ApplicationController
       @pagination_limit=params[:page_limit].to_i
     end
 
-    unless params[:qry].empty?
+    unless params[:qry].blank?
       objectsFound = search params[:qry], params[:sort]
       @numFound = objectsFound.length
 
diff --git a/app/helpers/learning_objects_helper.rb b/app/helpers/learning_objects_helper.rb
index 05cbd683fe91cc444b0a36c4477ebf26bd2b926e..26b818e5bca0d9d42c7b4306bf186f3d85457de0 100644
--- a/app/helpers/learning_objects_helper.rb
+++ b/app/helpers/learning_objects_helper.rb
@@ -7,9 +7,7 @@ module LearningObjectsHelper
   def learning_object_thumbnail(learning_object, size = "")
     default = false
 
-    if learning_object.thumbnail.nil?
-      default = true
-    elsif learning_object.thumbnail.empty?
+    if learning_object.thumbnail.blank?
       default = true
     end
 
diff --git a/app/models/complaint.rb b/app/models/complaint.rb
new file mode 100644
index 0000000000000000000000000000000000000000..f5815c162ac3840058331a5ef4c82d971da2b9f8
--- /dev/null
+++ b/app/models/complaint.rb
@@ -0,0 +1,22 @@
+class Complaint
+  include ActiveModel::Model
+
+  attr_accessor :user,:object,:message,:description
+  validates_presence_of :user,:object,:message
+
+  def self.copyrights
+    ComplaintMessage.new("Objeto viola direitos autorais")
+  end
+
+  def self.ofensive_content
+    ComplaintMessage.new "Objeto contém conteúdo ofensivo/abusivo"
+  end
+
+  def self.ofensive_user
+    ComplaintMessage.new "Usuário ofensivo/agressivo"
+  end
+
+  def self.fake_user
+    ComplaintMessage.new "Usuário falso"
+  end
+end
diff --git a/app/models/complaint_message.rb b/app/models/complaint_message.rb
new file mode 100644
index 0000000000000000000000000000000000000000..a87abecbfeac95fbc8431adc9c7ad80fc40dc3f3
--- /dev/null
+++ b/app/models/complaint_message.rb
@@ -0,0 +1,11 @@
+class ComplaintMessage
+  attr_accessor :message
+
+  def initialize(message)
+    @message = message
+  end
+
+  def to_s
+    @message.to_s
+  end
+end
diff --git a/app/repositories/orient_db/base.rb b/app/repositories/orient_db/base.rb
index 8252f320cb41981c567f665c9f78807849ba2bd4..792381900e6f57a06c70f241d1a620c6f0f2de7a 100644
--- a/app/repositories/orient_db/base.rb
+++ b/app/repositories/orient_db/base.rb
@@ -64,7 +64,7 @@ class OrientDb::Base
     raise NoMethodError, "You must implement this method"
   end
 
-  private
+  protected
 
   def odb_class
     raise NoMethodError, "You must implement this method"
diff --git a/app/repositories/orient_db/complaint_repository.rb b/app/repositories/orient_db/complaint_repository.rb
new file mode 100644
index 0000000000000000000000000000000000000000..267b800cd6591b5b4aaac924a16fb93fffe2a5ee
--- /dev/null
+++ b/app/repositories/orient_db/complaint_repository.rb
@@ -0,0 +1,33 @@
+module OrientDb
+  class LearningObjectRepository < Base
+    include OrientDb::Methods::EdgeMethods
+    include RepositoriesProxy
+
+      def report(complaint)
+        if edge_exists?(odb_class, complaint.user.id, complaint.object.id)
+          raise "The user has already been reported"
+        end
+
+        connection.command "CREATE EDGE Complaint FROM #{complaint.user.id} TO #{complaint.object.id} SET message = #{complaint.message}, description = #{complaint.description}"
+      end
+
+      def destroy(object)
+        if !edge_exists?(odb_class, complaint.user.id, complaint.object.id)
+          raise "The user has not already been reported"
+        end
+
+        connection.command "DELETE EDGE Complaint FROM #{complaint.user.id} TO #{complaint.object.id}"
+      end
+
+      def build_object(args={})
+        Complaint.new(args)
+      end
+
+      protected
+
+      def odb_class
+        "Complaint"
+      end
+
+  end
+end
diff --git a/app/repositories/repositories_proxy.rb b/app/repositories/repositories_proxy.rb
index 3fdfe2cbe2e1cc077a3a16fc271f99194a17d1bf..05477b70d2bb68b2d87b9d81bf8d55d02e7c5c48 100644
--- a/app/repositories/repositories_proxy.rb
+++ b/app/repositories/repositories_proxy.rb
@@ -18,6 +18,10 @@ module RepositoriesProxy
     application_repository.for(:collection)
   end
 
+  def complaint_repository
+    application_repository.for(:complaint)
+  end
+
   def institution_repository
     application_repository.for(:institution)
   end
diff --git a/app/views/complaints/_complaints_button.html.erb b/app/views/complaints/_complaints_button.html.erb
new file mode 100644
index 0000000000000000000000000000000000000000..25d6f5669caa9eb37975e096cc1741bdb0268730
--- /dev/null
+++ b/app/views/complaints/_complaints_button.html.erb
@@ -0,0 +1,7 @@
+<button type="button" class="btn btn-default btn-xs add_to_complaint "  data-toggle="button" data-trigger="click" aria-pressed="false" autocomplete="off" title="Denunciar Objeto" border-style: "none" >
+ <%= image_tag "icons/report-circle.png", alt: "Denunciar objeto" %>
+</button>
+
+<div id="complaints_list_popover"  class="popover">
+  <%= render 'complaints/form' %>
+</div>
diff --git a/app/views/complaints/_form.html.erb b/app/views/complaints/_form.html.erb
new file mode 100644
index 0000000000000000000000000000000000000000..6abcde32db89ce3e4cf52d80d6ec781500893bef
--- /dev/null
+++ b/app/views/complaints/_form.html.erb
@@ -0,0 +1,32 @@
+
+<%= form_for @complaint do |f| %>
+  <fieldset>
+
+  <div class="ls-label " >
+
+    <h4 class="ls-title-4"><p><b>Escolha a razão da denúncia:</b></p></h4>
+    <br><br>
+
+    <%= f.collection_radio_buttons :message, @messages, :message, :message do |m| %>
+    <div class="radio" >
+      <%= f.radio_button :message, m.text  %>
+      <%= f.label :message, m.text %>
+    </div>
+    <% end %>
+
+      <br><br>
+      <div align="center">
+        <%= f.text_area :description, placeholder: "mais informações", rows: "10", cols: "30"  %>
+      </div>
+
+  </div>
+
+  <%= f.hidden_field :object, value: @learning_object %>
+  </fieldset>
+
+  <div align="center" class="ls-btn-primary">
+    <%= f.submit "Salvar" %>
+    <%= link_to "Fechar", class:"btn-success" %>
+
+  </div>
+  <%end%>
diff --git a/app/views/learning_objects/_collections_button.html.erb b/app/views/learning_objects/_collections_button.html.erb
index 24ff0d56ec818d514e8ca1889900edcbc49748f2..06d3d88a76c7a8ffdb74e941cb21432a32420833 100644
--- a/app/views/learning_objects/_collections_button.html.erb
+++ b/app/views/learning_objects/_collections_button.html.erb
@@ -5,4 +5,4 @@
 <div id="collections_list_popover" style="display: none; z-index: 999;">
   <a href="#">Segundo ano - B</a>
   <a href="#">Terceiro ano - A</a>
-</div>
\ No newline at end of file
+</div>
diff --git a/app/views/learning_objects/show.html.erb b/app/views/learning_objects/show.html.erb
index 25c0ccd0ff7389b27b2914f1277eca24db9c5b0a..5f87f10d8fd61f54426dd947166baa18912327ed 100644
--- a/app/views/learning_objects/show.html.erb
+++ b/app/views/learning_objects/show.html.erb
@@ -79,7 +79,9 @@
         </div>
         <div class="col-md-3 action"></div>
         <div class="col-md-3 action">
-          <%= image_tag "icons/report-circle.png", alt: "Denunciar objeto" %>
+
+
+          <%= render "complaints/complaints_button" %>
           <h6>denunciar objeto</h6>
         </div>
       </div>
diff --git a/app/views/welcome/index.html.erb b/app/views/welcome/index.html.erb
index 69d4d07acbf46ed76d26b4bd81115f13135ff81e..5144ba23dec6310cb136969db47b82a3c924bad6 100644
--- a/app/views/welcome/index.html.erb
+++ b/app/views/welcome/index.html.erb
@@ -66,7 +66,7 @@
 
 <div class="row mainpage-subjects">
   <div class="col-md-12">
-    <% unless @subjects.nil? || @subjects.empty?%>
+    <% unless @subjects.blank? %>
       <div class="row learning-object-columns">
         <h2>Destaque por assunto</h2>
         <% @subjects.each do |subject|%>
diff --git a/config/initializers/repositories/repositories.rb b/config/initializers/repositories/repositories.rb
index f6666e218bec5ea09b18d95b0217612a57577a43..f7d3c35d3a535fbda79aab1fc23ca0e80bc2451b 100644
--- a/config/initializers/repositories/repositories.rb
+++ b/config/initializers/repositories/repositories.rb
@@ -29,10 +29,12 @@ Repository::Environments.create :development do |repository|
   repository.register :attribute, OrientDb::AttributeRepository.new(OrientDb::Client.instance)
   repository.register :collection, OrientDb::CollectionRepository.new(OrientDb::Client.instance)
   repository.register :carousel, ActiveRecord::CarouselRepository.new
+  repository.register :complaint, OrientDb::ComplaintRepository.new(OrientDb::Client.instance)
 end
 
 Repository::Environments.create :test do |repository|
   repository.register :carousel, ActiveRecord::CarouselRepository.new
+  repository.register :complaint, OrientDb::ComplaintRepository.new(OrientDb::Client.instance)
   repository.register :learning_object, OrientDb::LearningObjectRepository.new(OrientDb::Client.instance)
   repository.register :mainPage, OrientDb::MainPageRepository.new(OrientDb::Client.instance)
   repository.register :user, UserRepositoryProxy.new(OrientDb::UserRepository.new(OrientDb::Client.instance))
@@ -43,6 +45,7 @@ end
 
 Repository::Environments.create :production do |repository|
   repository.register :carousel, ActiveRecord::CarouselRepository.new
+  repository.register :complaint, OrientDb::ComplaintRepository.new(OrientDb::Client.instance)
   repository.register :learning_object, OrientDb::LearningObjectRepository.new(OrientDb::Client.instance)
   repository.register :mainPage, OrientDb::MainPageRepository.new(OrientDb::Client.instance)
   repository.register :user, UserRepositoryProxy.new(OrientDb::UserRepository.new(OrientDb::Client.instance))
diff --git a/config/routes.rb b/config/routes.rb
index 8aba03ba2cab166645195efe7200d600df26c41a..c31c2a4338f6e444a54203c2c526532fee5479d7 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -37,18 +37,17 @@ Rails.application.routes.draw do
   resources :institutions
   resources :collections
   resources :subjects, only: [:index, :show]
+  resources :complaints, only: [:create, :destroy]
 
   resources :users, only: [:show] do
     collection do
       get :me
     end
   end
-  get 'users/:id', to: 'users#show', as: 'users_show'
-
+  
   get '/faq' => 'welcome#faq'
   get '/contact' => 'welcome#contact', as: 'contact'
-  get '/complaint' => 'welcome#complaint', as: 'complaint'
   get '/search' => 'search#index', as: 'search'
   get '/subject/:id' => 'welcome#subject', as:'subject_index'
 
-end
+end
\ No newline at end of file
diff --git a/test/models/complaint_message_test.rb b/test/models/complaint_message_test.rb
new file mode 100644
index 0000000000000000000000000000000000000000..271fe992bb8b77dd005b71ef5559366190fd9e9b
--- /dev/null
+++ b/test/models/complaint_message_test.rb
@@ -0,0 +1,7 @@
+require 'test_helper'
+
+class ComplaintMessageTest < ActiveSupport::TestCase
+  # test "the truth" do
+  #   assert true
+  # end
+end