diff --git a/app/models/tag_group.rb b/app/models/tag_group.rb
index 484619793..8f3f9c185 100644
--- a/app/models/tag_group.rb
+++ b/app/models/tag_group.rb
@@ -9,7 +9,7 @@ class TagGroup < ActiveRecord::Base
   belongs_to :parent_tag, class_name: 'Tag'
 
   def tag_names=(tag_names_arg)
-    DiscourseTagging.add_or_create_tags_by_name(self, tag_names_arg)
+    DiscourseTagging.add_or_create_tags_by_name(self, tag_names_arg, unlimited: true)
   end
 
   def parent_tag_name=(tag_names_arg)
diff --git a/lib/discourse_tagging.rb b/lib/discourse_tagging.rb
index f2bb69921..f2dcb6b14 100644
--- a/lib/discourse_tagging.rb
+++ b/lib/discourse_tagging.rb
@@ -166,7 +166,7 @@ module DiscourseTagging
     tag_diff.present? ? tag_diff : nil
   end
 
-  def self.tags_for_saving(tags, guardian)
+  def self.tags_for_saving(tags, guardian, opts={})
 
     return [] unless guardian.can_tag_topics?
 
@@ -181,11 +181,11 @@ module DiscourseTagging
       tag_names = Tag.where(name: tag_names).pluck(:name)
     end
 
-    return tag_names[0...SiteSetting.max_tags_per_topic]
+    return opts[:unlimited] ? tag_names : tag_names[0...SiteSetting.max_tags_per_topic]
   end
 
-  def self.add_or_create_tags_by_name(taggable, tag_names_arg)
-    tag_names = DiscourseTagging.tags_for_saving(tag_names_arg, Guardian.new(Discourse.system_user)) || []
+  def self.add_or_create_tags_by_name(taggable, tag_names_arg, opts={})
+    tag_names = DiscourseTagging.tags_for_saving(tag_names_arg, Guardian.new(Discourse.system_user), opts) || []
     if taggable.tags.pluck(:name).sort != tag_names.sort
       taggable.tags = Tag.where(name: tag_names).all
       if taggable.tags.size < tag_names.size