diff --git a/app/builders/attribute_builder.rb b/app/builders/attribute_builder.rb
index 379453c23e9a354fa9373dfbe11b3a247c3a81df..2e6526c3de74377e4a5a3f5385f054f99c8c21a8 100644
--- a/app/builders/attribute_builder.rb
+++ b/app/builders/attribute_builder.rb
@@ -1,6 +1,4 @@
 class AttributeBuilder < Builder
-  extend RepositoriesProxy
-
   ##
   # receive a list of ids and return a list of attributes
   #
diff --git a/app/builders/builder.rb b/app/builders/builder.rb
index 280eebdb45bd20b5a7d8c07f25cc2b5bceefdf2c..b43a5cdbe995ab04c9164e525955a90dda0bbe44 100644
--- a/app/builders/builder.rb
+++ b/app/builders/builder.rb
@@ -1,4 +1,5 @@
 class Builder
+  extend RepositoriesProxy
 
   protected
 
diff --git a/app/builders/collection_builder.rb b/app/builders/collection_builder.rb
index 165135322d8fc4deb743cf674b1318a98a302e56..ad218588d8e2534485a29626169ebee8d002706e 100644
--- a/app/builders/collection_builder.rb
+++ b/app/builders/collection_builder.rb
@@ -1,6 +1,4 @@
 class CollectionBuilder < Builder
-  extend RepositoriesProxy
-
   ##
   # Receive a list of ids and return a list of collections
   # Each element, must be a Hash with rid and last_modified
diff --git a/app/builders/complaint_builder.rb b/app/builders/complaint_builder.rb
index 3dc987fa9b5733e988db5dd0120042d53e9996bf..ea434a24bbc8a18f3fa46cdf4332928b02ff950a 100644
--- a/app/builders/complaint_builder.rb
+++ b/app/builders/complaint_builder.rb
@@ -1,6 +1,4 @@
 class ComplaintBuilder < Builder
-  extend RepositoriesProxy
-
   ##
   # receive a list of ids and return a list of complaints
   #
diff --git a/app/builders/generic_builder.rb b/app/builders/generic_builder.rb
new file mode 100644
index 0000000000000000000000000000000000000000..99bf26934c4459c54d3c0697e98897b0a502e086
--- /dev/null
+++ b/app/builders/generic_builder.rb
@@ -0,0 +1,40 @@
+class GenericBuilder < Builder
+  ##
+  # receive a list of ids and return a list of learning objects
+  # useful for search pagination
+  #
+  def self.build(objects = [])
+    build_array(objects, true, 'rid')
+  end
+
+  private
+
+  def self.build_array(objects = [], cache = true, id = '@rid', last_modified = 'last_modified')
+    array = []
+    objects = [objects] if objects.class == String || objects.class == Hash
+    objects.each do |object|
+      next if object[id].blank?
+
+      if cache && !object[last_modified].blank?
+        o = Rails.cache.fetch(cache_key(object[id], object[last_modified]))
+      end
+      p object.inspect
+      o = repository(object['class']).find object[id] if o.nil?
+      array << o
+    end
+    array
+  end
+
+  def self.repository(klass)
+    case klass
+    when 'Attribute' then attribute_repository
+    when 'Collection' then collection_repository
+    when 'Complaint' then complaint_repository
+    when 'Institution' then institution_repository
+    when 'LearningObject' then learning_object_repository
+    when 'Subject' then subject_repository
+    else nil
+    end
+  end
+
+end
diff --git a/app/builders/institution_builder.rb b/app/builders/institution_builder.rb
index d71072fa20aa041ead6da76626f067b3bd735f4b..e41388c00dfed1e528b3ce2c7353fd3012421319 100644
--- a/app/builders/institution_builder.rb
+++ b/app/builders/institution_builder.rb
@@ -1,6 +1,4 @@
 class InstitutionBuilder < Builder
-  extend RepositoriesProxy
-
   ##
   # receive a list of ids and return a list of institutions
   #
diff --git a/app/builders/learning_object_builder.rb b/app/builders/learning_object_builder.rb
index cc23cb760531803c0985ed60c00a28223b528687..265b37861b6f653b768e30b57739488dedb79b13 100644
--- a/app/builders/learning_object_builder.rb
+++ b/app/builders/learning_object_builder.rb
@@ -1,6 +1,4 @@
 class LearningObjectBuilder < Builder
-  extend RepositoriesProxy
-
   ##
   # receive a list of ids and return a list of learning objects
   # useful for search pagination
diff --git a/app/builders/subject_builder.rb b/app/builders/subject_builder.rb
index 6054f423f8aa53584f56e408e48ef0da79212d75..9a1169b845d0e6dc524ed49b8a2c66ea589d76ef 100644
--- a/app/builders/subject_builder.rb
+++ b/app/builders/subject_builder.rb
@@ -1,6 +1,4 @@
 class SubjectBuilder < Builder
-  extend RepositoriesProxy
-
   ##
   # receive a list of ids and return a list of subjects
   #
diff --git a/app/controllers/search_controller.rb b/app/controllers/search_controller.rb
index 7159d9935c07f49d4ad83f2b016e359b2939a41e..7fdb6e339c359fad57e25a7a2a4cf600631b14ad 100644
--- a/app/controllers/search_controller.rb
+++ b/app/controllers/search_controller.rb
@@ -32,8 +32,7 @@ class SearchController < ApplicationController
     @last_page = (@result.num_pages <= page) ? true : false;
 
     # build objects from one page only
-    results = @result.partition { |r| r["class"] == "Collection" }
-    @objects = CollectionBuilder.build(results[0]) + LearningObjectBuilder.build(results[1])
+    @objects = GenericBuilder.build(@result)
 
     render partial: 'search/fetch'
   end
diff --git a/app/repositories/orient_db/attribute_repository.rb b/app/repositories/orient_db/attribute_repository.rb
index 6d05df8a8d3a94746306c105d8acc2d21329c356..674ff4d6febce68d6803818269f8c54e30fcb477 100644
--- a/app/repositories/orient_db/attribute_repository.rb
+++ b/app/repositories/orient_db/attribute_repository.rb
@@ -13,11 +13,5 @@ module OrientDb
       build_objects get_edges_end("HasAttr", "out", learning_object.id)
     end
 
-    protected
-
-    def build_object(args={})
-      AttributeBuilder.build_from_orientdb args
-    end
-
   end
-end
\ No newline at end of file
+end
diff --git a/app/repositories/orient_db/base.rb b/app/repositories/orient_db/base.rb
index 4d1016f39cd08a4f9bc39e69b3933bc80d02435a..586ab50455e5f42d353e9697ae26554683f062da 100644
--- a/app/repositories/orient_db/base.rb
+++ b/app/repositories/orient_db/base.rb
@@ -61,7 +61,8 @@ class OrientDb::Base
   end
 
   def build_object(args={})
-    raise NoMethodError, "You must implement this method"
+    builder = "#{args['@class']}Builder".constantize
+    builder.build_from_orientdb args unless args['@class'].blank? || builder.nil?
   end
 
   def accepted_properties
diff --git a/app/repositories/orient_db/collection_repository.rb b/app/repositories/orient_db/collection_repository.rb
index 064b5c0108ba3ab17ea141c6ef801e8283dc6cf5..780733a8fc69056750ffb3b90597b52f95fc77c1 100644
--- a/app/repositories/orient_db/collection_repository.rb
+++ b/app/repositories/orient_db/collection_repository.rb
@@ -114,10 +114,6 @@ module OrientDb
 
     protected
 
-    def build_object(args={})
-      CollectionBuilder.build_from_orientdb args
-    end
-
     def accepted_properties
       ['privacy']
     end
diff --git a/app/repositories/orient_db/complaint_repository.rb b/app/repositories/orient_db/complaint_repository.rb
index 678a91bc2c28fd205d7ee04853feb1d4ebe556f4..f6a200b74a92cb6439a79e400ebec12b30892f69 100644
--- a/app/repositories/orient_db/complaint_repository.rb
+++ b/app/repositories/orient_db/complaint_repository.rb
@@ -32,11 +32,5 @@ module OrientDb
       false
     end
 
-    protected
-
-    def build_object(args={})
-      ComplaintBuilder.build_from_orientdb args
-    end
-
   end
 end
diff --git a/app/repositories/orient_db/institution_repository.rb b/app/repositories/orient_db/institution_repository.rb
index 6c03fa646f1c367ef9394799429f77dbe51681e1..441f5f2412a8073db3f9bb745d03eb64b3e47b8b 100644
--- a/app/repositories/orient_db/institution_repository.rb
+++ b/app/repositories/orient_db/institution_repository.rb
@@ -47,9 +47,5 @@ module OrientDb
       end
     end
 
-    def build_object(args={})
-      InstitutionBuilder.build_from_orientdb args
-    end
-
   end
 end
diff --git a/app/repositories/orient_db/learning_object_repository.rb b/app/repositories/orient_db/learning_object_repository.rb
index 25051f15a2f6a8104c6c5edb2795b5910a3128fb..2dc9cb19cae4d7b8951b931e273f2e0292fdccc9 100644
--- a/app/repositories/orient_db/learning_object_repository.rb
+++ b/app/repositories/orient_db/learning_object_repository.rb
@@ -85,10 +85,6 @@ module OrientDb
       end
     end
 
-    def build_object(args={})
-      LearningObjectBuilder.build_from_orientdb args
-    end
-
     def build_hash(object)
       hash = super(object)
       # Remove relation attributes
diff --git a/app/repositories/orient_db/subject_repository.rb b/app/repositories/orient_db/subject_repository.rb
index 823e2ccf20e72d17590627232565fb71be39c122..4aa8497313f46b7fe45172b554085e7f7d4e2cb0 100644
--- a/app/repositories/orient_db/subject_repository.rb
+++ b/app/repositories/orient_db/subject_repository.rb
@@ -53,9 +53,5 @@ module OrientDb
       hash
     end
 
-    def build_object(args={})
-      SubjectBuilder.build_from_orientdb args
-    end
-
   end
 end