diff --git a/app/models/category.rb b/app/models/category.rb
index 40f5791090b..a6c5deb4885 100644
--- a/app/models/category.rb
+++ b/app/models/category.rb
@@ -285,6 +285,7 @@ class Category < ActiveRecord::Base
 
     if slug.present?
       # santized custom slug
+      slug = SiteSetting.slug_generation_method == 'encoded' ? CGI.unescape(self.slug) : self.slug
       self.slug = Slug.sanitize(slug)
       errors.add(:slug, 'is already in use') if duplicate_slug?
     else
diff --git a/spec/models/category_spec.rb b/spec/models/category_spec.rb
index 225b87eeab7..fdf2b7a9e52 100644
--- a/spec/models/category_spec.rb
+++ b/spec/models/category_spec.rb
@@ -316,6 +316,12 @@ describe Category do
         expect(@category.slug).to eq("%E6%B5%8B%E8%AF%95")
         expect(@category.slug_for_url).to eq("%E6%B5%8B%E8%AF%95")
       end
+
+      it "keeps the slug" do
+        @category.save
+        expect(@category.slug).to eq("%E6%B5%8B%E8%AF%95")
+        expect(@category.slug_for_url).to eq("%E6%B5%8B%E8%AF%95")
+      end
     end
   end