diff --git a/app/controllers/learning_objects_controller.rb b/app/controllers/learning_objects_controller.rb
index 2217721f1267bdf39b40d4fa1b13f9977c47667d..af0edaa22a858eb0d18e65100145a74a8f982b46 100644
--- a/app/controllers/learning_objects_controller.rb
+++ b/app/controllers/learning_objects_controller.rb
@@ -1,7 +1,7 @@
 class LearningObjectsController < ApplicationController
   include Reportable
 
-  before_action :set_learning_object, only: [:show, :edit, :update, :destroy, :like]
+  before_action :set_learning_object, only: [:show, :edit, :update, :destroy, :like, :bookmark]
   after_action :increment_learning_object_views, only: [:show]
   before_action :authenticate_user!, except: [:index, :show, :like]
 
@@ -86,7 +86,14 @@ class LearningObjectsController < ApplicationController
     learning_object_repository.report current_user, @learning_object, message, description
   end
 
-  def bookmark
+  def bookmarks
+    bookmarks = current_user.bookmarks
+    bookmarks.add @learning_object
+    collection_repository.save bookmarks
+
+    if request.xhr?
+      render json: {id: params[:id]}
+    end
   end
 
   private
diff --git a/app/repositories/orient_db/collection_repository.rb b/app/repositories/orient_db/collection_repository.rb
index 63b51407f01b147648c821366956a08d30e9e1a7..6a725450a4c5f54cb0936dd50c913ba14762a770 100644
--- a/app/repositories/orient_db/collection_repository.rb
+++ b/app/repositories/orient_db/collection_repository.rb
@@ -6,6 +6,13 @@ module OrientDb
       Collection.new(map_object_hash(args))
     end
 
+    def save(collection = Collection.new)
+      collection.learning_objects.each do |learning_object|
+        query = sprintf("update %s add learning_objects = %s", collection.id, learning_object.id)
+        connection.command query
+      end
+    end
+
     def create_bookmarks_collection(user)
       bookmarks = Bookmarks.new(owner: user)
       create bookmarks
@@ -30,12 +37,13 @@ module OrientDb
     end
 
     def all(user)
-      objects = build_objects get_edges_end('BelongsTo', 'in', user.rid)
+      query = sprintf("select * from (select expand(in('BelongsTo')) from %s) where name<>'Bookmarks'", user.rid)
+      objects = build_objects connection.query(query)
     end
 
     def bookmarks(user)
-      # TODO: change bookmarks query
-      result = all user
+      query = sprintf("select * from (select expand(in('BelongsTo')) from %s) where name='Bookmarks'", user.rid)
+      result = build_objects(connection.query(query))
       if !result.empty?
         return result.first
       end