diff --git a/Gemfile b/Gemfile
index 70a42ed8baba2aec561d0532c7fd0f359793e343..1039b92c5f9861d60d2bc52222bf0b9db8c93f34 100644
--- a/Gemfile
+++ b/Gemfile
@@ -91,4 +91,8 @@ gem 'rack-mini-profiler'
 gem 'bullet'
 
 # docs
-gem 'rdoc'
\ No newline at end of file
+gem 'rdoc'
+
+#JavaScript runtime
+gem 'execjs'
+gem 'therubyracer'
\ No newline at end of file
diff --git a/Gemfile.lock b/Gemfile.lock
index d45fc6d948b56a4b6fbeabe55ed88e300cbc2e80..3dbd0d2954efd3227c785199a2a06bfd44613b73 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -127,6 +127,7 @@ GEM
       railties (>= 3.1.0)
       turbolinks
     json (1.8.3)
+    libv8 (3.16.14.7)
     locastyle (0.0.1)
     loofah (2.0.3)
       nokogiri (>= 1.5.9)
@@ -190,6 +191,7 @@ GEM
       parser (~> 2.2.0.pre.7)
       rainbow (>= 1.99, < 3.0)
       unparser (~> 0.2.2)
+    ref (1.0.5)
     responders (2.1.0)
       railties (>= 4.2.0, < 5)
     rest-client (1.8.0)
@@ -235,6 +237,9 @@ GEM
       activesupport (>= 3.0)
       sprockets (>= 2.8, < 4.0)
     sqlite3 (1.3.10)
+    therubyracer (0.12.2)
+      libv8 (~> 3.16.14.0)
+      ref
     thor (0.19.1)
     thread_safe (0.3.5)
     tilt (2.0.1)
@@ -285,6 +290,7 @@ DEPENDENCIES
   devise
   devise_token_auth
   dspace_rest_client (~> 1.1.0)
+  execjs
   gruff
   jbuilder (~> 2.0)
   jquery-rails
@@ -308,6 +314,7 @@ DEPENDENCIES
   shoulda-callback-matchers (~> 1.1.1)
   spring
   sqlite3
+  therubyracer
   turbolinks
   uglifier (>= 1.3.0)
   web-console (~> 2.0)
diff --git a/app/models/learning_object.rb b/app/models/learning_object.rb
index 7725479c52ebd507b815b4a6d22c47edf51b3fec..dc7102aeed95b1528c014d30bb4b3c0fd8088851 100644
--- a/app/models/learning_object.rb
+++ b/app/models/learning_object.rb
@@ -11,10 +11,15 @@ class LearningObject
   end
 
   def get_metadata_value_of key
-    values = @metadata.select { |v|  v["key"] == key }
-    unless values.empty?
-      return values.first["value"]
+    get_metadata_values_of(key).first
+  end
+
+  def get_metadata_values_of key
+    values = []
+    @metadata.each do |m|
+      values << m["value"] if m["key"] == key
     end
+    values
   end
 
   private
diff --git a/app/repositories/orient_db/base.rb b/app/repositories/orient_db/base.rb
index b31c12f792f739ec3fae406ba229541d258fe6bd..684778a943b922aa255986ae43ab7b5b73c4aaeb 100644
--- a/app/repositories/orient_db/base.rb
+++ b/app/repositories/orient_db/base.rb
@@ -25,7 +25,7 @@ class OrientDb::Base
   end
 
   def all_after(after_id,limit=-1)
-    objects_hash = connection.query "SELECT FROM #{odb_class} WHERE @rid > #{bigger_than}", :limit => limit
+    objects_hash = connection.query "SELECT FROM #{odb_class} WHERE @rid > #{after_id}", :limit => limit
     objects = build_objects(objects_hash) || []
   end
 
@@ -34,7 +34,6 @@ class OrientDb::Base
     hash.each do |h|
       objects << build_object(h)
     end
-
     objects
   end
 
diff --git a/app/repositories/orient_db/learning_object_repository.rb b/app/repositories/orient_db/learning_object_repository.rb
index e05078398b61f793b45d7e4b30beeddf517110d2..acfa39f7b7abfed834836963a7938b12feeed636 100644
--- a/app/repositories/orient_db/learning_object_repository.rb
+++ b/app/repositories/orient_db/learning_object_repository.rb
@@ -2,10 +2,6 @@ module OrientDb
   class LearningObjectRepository < Base
     include OrientDb::Methods::EdgeMethods
 
-    def odb_class
-      "LearningObject"
-    end
-
     def increment_views(learning_object)
       #learning_object.views = learning_object.views + 1
       #save learning_object
@@ -29,20 +25,24 @@ module OrientDb
 
     def create(learning_object)
       hash = build_hash(learning_object)
-      learning_object.id = connection.create_document(hash)
+      result = connection.create_document(hash)
+      learning_object.id = result["@rid"]
       learning_object
     end
 
-    def get_subjects(id)
-      result = connection.query "SELECT expand(out('IsAbout')) FROM #{id}"
+    def get_subjects(learning_object)
+      result = connection.query "SELECT expand(out('IsAbout')) FROM #{learning_object.id}"
       Portalmec::Application.repository.for(:subject).build_objects(result)
     end
 
     def update_relations(learning_object)
+      edges = []
       learning_object.subjects.each do |s|
         unless edge_exists?("IsAbout", learning_object.id, s.id)
-          create_edge("IsAbout", learning_object.id, s.id)
+          edges << create_edge("IsAbout", learning_object.id, s.id)
+        end
       end
+      edges
     end
 
     # Usage:
@@ -86,26 +86,24 @@ module OrientDb
     end
 
     def build_object(args={})
-      lo = LearningObject.new(:id => args["@rid"],
-                              :id_dspace => args["id_dspace"],
-                              :title => args["title"],
-                              :metadata => args)
-      lo.likes = count_likes lo
-      lo.views = count_views lo
+      lo = nil
+      unless args.nil?
+        lo = LearningObject.new(:id => args["@rid"],
+                                :id_dspace => args["id_dspace"],
+                                :name => args["name"],
+                                :metadata => args["metadata"])
+        lo.likes = args.has_key?("in_Likes") ? args["in_Likes"].size : 0
+        lo.views = args.has_key?("in_Views") ? args["in_Views"].size : 0
+      end
       lo
     end
 
-    def build_objects(hash=[])
-      learning_objects = []
-      hash.each do |h|
-        learning_objects << build_object(h)
-      end
+    private
 
-      learning_objects
+    def odb_class
+      "LearningObject"
     end
 
-    private
-
     def count_likes(learning_object)
       get_in_edges_count "Likes", learning_object.id
     end
diff --git a/app/repositories/orient_db/subject_repository.rb b/app/repositories/orient_db/subject_repository.rb
index ff78b360360cff92fee66eb65c806a640ba0352f..6e8e36afd9fb96fceaf15b81daea1dcc3be0a73c 100644
--- a/app/repositories/orient_db/subject_repository.rb
+++ b/app/repositories/orient_db/subject_repository.rb
@@ -3,30 +3,27 @@ module OrientDb
 
     def find_by_name(name)
       result = select_by_property(odb_class, "name", name)
-      result.first
+      build_object(result.first)
     end
 
     def create(subject)
-      subject.id = connection.create_document(build_hash(subject))
+      result = connection.create_document(build_hash(subject))
+      subject.id = result["@rid"]
       subject
     end
 
     def build_object(args={})
-      subject = Subject.new(:id => args["@rid"])
-      args.each do |var, val|
-        var_name = "@"+var
-        if subject.respond_to?(var)
-          subject.instance_variable_set(var_name, val)
+      subject = nil
+      unless args.nil?
+        subject = Subject.new(:id => args["@rid"])
+        args.each do |var, val|
+          var_name = "@"+var
+          if subject.respond_to?(var)
+            subject.instance_variable_set(var_name, val)
+          end
         end
       end
-    end
-
-    def build_objects(hash=[])
-      subjects = []
-      hash.each do |h|
-        subjects << build_subject(h)
-      end
-      subjects
+      subject
     end
 
     def build_hash(object)
diff --git a/config/initializers/repositories/dspace.rb b/config/initializers/repositories/dspace.rb
index 0324df5606b357ec124134e4f91a664d5ad27abb..48a75aab0f7308207fba630d98dd22130408b31c 100644
--- a/config/initializers/repositories/dspace.rb
+++ b/config/initializers/repositories/dspace.rb
@@ -1,10 +1,10 @@
 require 'yaml'
 
 def set_dspace_config(host, port, rest, solr)
-  Dspace::Config.host = config['host']
-  Dspace::Config.port = config['port']
-  Dspace::Config.rest_webapp_name = env_config['rest_webapp_name']
-  Dspace::Config.solr_webapp_name = env_config['solr_webapp_name']
+  Dspace::Config.host = host
+  Dspace::Config.port = port
+  Dspace::Config.rest_webapp_name = rest
+  Dspace::Config.solr_webapp_name = solr
 end
 
 
@@ -15,4 +15,4 @@ else
   config = dspace_configs.fetch(Rails.env)
 
   set_dspace_config config['host'], config['port'], config['rest_webapp_name'], config['solr_webapp_name']
-end
+end
\ No newline at end of file
diff --git a/config/orientdb.yml b/config/orientdb.yml
index 88e5d0367003e3f9b48b614ec04f7c910eb54769..b87506bb88309668349e5f619dea1863652c67b6 100644
--- a/config/orientdb.yml
+++ b/config/orientdb.yml
@@ -1,6 +1,6 @@
 development: &development
   host: localhost
-  database: portalmec
+  database: PortalMEC
   username: admin
   password: admin
   port: 2480
diff --git a/lib/orient_db/methods/edge_methods.rb b/lib/orient_db/methods/edge_methods.rb
index a2915afc716b120b3877eadfcdf2ad21dea40a39..9a2ea5b2b144e34d05fc6e4e623b2c358bdac188 100644
--- a/lib/orient_db/methods/edge_methods.rb
+++ b/lib/orient_db/methods/edge_methods.rb
@@ -11,8 +11,8 @@ module OrientDb
       end
 
       def edge_exists?(edge_class, from_id, to_id)
-        edge = connection.query sprintf("SELECT outE('%s') FROM %s WHERE out('%s') CONTAINS %s", edge_class, from_id, to_id)
-        edge.empty?
+        edge = connection.query sprintf("SELECT outE('%s') FROM %s WHERE out('%s') CONTAINS %s", edge_class, from_id, edge_class, to_id)
+        !edge.empty?
       end
 
     end
diff --git a/lib/orient_db/methods/generic_methods.rb b/lib/orient_db/methods/generic_methods.rb
index ecb170a47b1a437673f94b5a297799d2f8777939..fe39c0f59a86e6f4bd672ef4186c2dfc632feee6 100644
--- a/lib/orient_db/methods/generic_methods.rb
+++ b/lib/orient_db/methods/generic_methods.rb
@@ -7,7 +7,7 @@ module OrientDb
       end
 
       def select_by_property(from, prop_name, prop_value)
-        connection.query sprintf("SELECT FROM %s WHERE %s = %s", from, prop_name, prop_value)
+        connection.query sprintf("SELECT FROM %s WHERE %s = '%s'", from, prop_name, prop_value)
       end
 
     end
diff --git a/lib/tasks/orientdb.rake b/lib/tasks/orientdb.rake
index adffd53a4d86758645eb24f13853d4ddd08a5212..c7a61c5bb4ef70b64b4c4d66934774f80f29b752 100644
--- a/lib/tasks/orientdb.rake
+++ b/lib/tasks/orientdb.rake
@@ -15,17 +15,17 @@ namespace :orientdb do
     subject_repo = Portalmec::Application.repository.for(:subject)
 
     # Quantity of LearningObjects fetched on each iteration
-    limit = 1000
+    limit = 100
     # Start point from where LearningObjects will be fetched
-    last_id = "#-1:-1"
+    last_id = "#20:74000" # "#-1:-1" # 
 
     loop do
-      puts " --> importing LearningObjects after #{@offset}"
+      puts " --> creating relations for LearningObjects after #{last_id}"
 
       begin
         # Get items from dspace (from offset to offset+limit)
         learning_objects = lo_repo.all_after(last_id,limit)
-        puts learning_objects
+        # puts "learning_objects = "+learning_objects.to_s
       rescue
         # Sleeps for a while to wait database's recovery
         sleep(30.seconds)
@@ -36,19 +36,21 @@ namespace :orientdb do
         break if learning_objects.empty?
 
         learning_objects.each do |lo|
-          subject_name = lo.get_metadata_value_of("dc_subject_category")
-          subject = subject_repo.find_by_name(subject_name)
-          puts subject
-          if subject.nil?
-            subject = Subject.new(:name => subject_name)
-            subject_repo.create(subject)
-          lo.subjects << subject
-          
-          lo_repo.update_relations(lo)
+          subjects = lo.get_metadata_values_of("dc.subject.category")
+          subjects.each do |subject_name|
+            subject = subject_repo.find_by_name(subject_name)
+            if subject.nil?
+              subject = Subject.new(:name => subject_name)
+              subject_repo.create(subject)
+            end
+            lo.subjects << subject
+          end
+          p lo_repo.update_relations(lo)
         end
 
         # Change last id, to get new LearningObjects on next iteration
         last_id = learning_objects.last.id
+      end
     end
   end
 end
\ No newline at end of file