diff --git a/app/services/tags_importer.rb b/app/services/tags_importer.rb
index fbc4aa238096315afb05d2aab43e4a482f7c7093..e6421553b529253c666580bdd37c60e513c5301c 100644
--- a/app/services/tags_importer.rb
+++ b/app/services/tags_importer.rb
@@ -3,22 +3,33 @@ class TagsImporter
 
   def import
     tags = {}
+    taggings = []
     @items.each do |learning_object|
-      categories = parse_tags learning_object.get_metadata_values_of 'dc.subject.category'
+      publisher = learning_object.publisher
+      categories = parse_categories learning_object.get_metadata_values_of 'dc.subject.category'
       keywords = learning_object.get_metadata_values_of 'dc.subject.keyword'
       (categories + keywords).each do |tag_name|
         unless tag_exists?(tag_name, tags)
           tags[tag_name] = Tag.new(name: tag_name)
+          tag = tags[tag_name]
+        else
+          tag= Tag.find_by_name tag_name
+        end
+
+        unless tagging_exists?(tag, publisher, learning_object)
+          taggings << Tagging.new(tag: tag, tagger: publisher, taggable: learning_object)
         end
       end
     end
 
     Tag.import tags.values
+    Tagging.import taggings
   end
 
+
   private
 
-  def parse_tags(values)
+  def parse_categories(values)
     tags = []
     values.compact.each { |value| tags << value.split('::') }
     tags.flatten.uniq.map(&:strip)
@@ -28,4 +39,8 @@ class TagsImporter
     !Tag.find_by_name(tag_name).nil? || !tags[tag_name].nil?
   end
 
+  def tagging_exists? (tag, tagger, taggable)
+    Tagging.where(tag: tag, tagger: tagger, taggable: taggable).exists?
+  end
+
 end