diff --git a/app/builders/collection_builder.rb b/app/builders/collection_builder.rb
new file mode 100644
index 0000000000000000000000000000000000000000..e096cf6896a143370e59946b999906a08c9ea85f
--- /dev/null
+++ b/app/builders/collection_builder.rb
@@ -0,0 +1,40 @@
+class CollectionBuilder
+  extend RepositoriesProxy
+
+  ##
+  # receive a list of ids and return a list of collections
+  def self.build(objects = [])
+    lo = []
+    objects.each do |object|
+      unless object['rid'].blank?
+        o = Rails.cache.fetch(cache_key(object['rid'], object['last_modified']))
+        o = collection_repository.find object['rid'] if o.nil?
+        lo << o
+      end
+    end
+    lo
+  end
+
+  def self.build_from_orientdb(args = {})
+    lo = nil
+    unless args.nil?
+      # cache object when build
+      lo = Rails.cache.fetch(cache_key(args['@rid'], args['last_modified']), expires_in: 12.hours) do
+        obj = Collection.new(
+            learning_objects: LearningObjectBuilder.build(args['learning_objects'] || []),
+            privacy: args['privacy'],
+            name: args['name'],
+            id: args['@rid']
+        )
+        obj.created_at = DateTime.strptime(args['created_at'], "%Y-%m-%d %H:%M:%S") unless args['created_at'].nil?
+        obj.last_modified = DateTime.strptime(args['last_modified'], "%Y-%m-%d %H:%M:%S") unless args['last_modified'].nil?
+        obj
+      end
+    end
+    lo
+  end
+
+  def self.cache_key(rid, last_modified)
+    rid + '/' + last_modified
+  end
+end
diff --git a/app/repositories/orient_db/collection_repository.rb b/app/repositories/orient_db/collection_repository.rb
index 9a2eb5a90104321651b6f5da5c8a990ebdd9a382..c64c4a7088999f28f31ced9053434f95b05eb7b1 100644
--- a/app/repositories/orient_db/collection_repository.rb
+++ b/app/repositories/orient_db/collection_repository.rb
@@ -4,7 +4,7 @@ module OrientDb
     include OrientDb::Methods::FinderMethods
 
     def build_object(args={})
-      Collection.new(map_object_hash(args))
+      CollectionBuilder.build_from_orientdb args
     end
 
     def save(collection = Collection.new)
@@ -85,17 +85,6 @@ module OrientDb
 
     private
 
-    def map_object_hash(hash={})
-      {
-          created_at: hash['created_at'],
-          last_modified: hash['last_modified'],
-          learning_objects: hash['created_at'],
-          privacy: hash['privacy'],
-          name: hash['name'],
-          id: hash['@rid']
-      }
-    end
-
     def odb_class
       'Collection'
     end