diff --git a/app/models/project.rb b/app/models/project.rb
index 7ab624eafdf848a193a9d03db29e8f5511d36e18..bc15ca3fc2e64c1f129b665cc2109c71ea4ebfd8 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -733,7 +733,8 @@ class Project < ActiveRecord::Base
 
   def create_labels
     Label.templates.each do |label|
-      self.labels.create!(label.attributes.symbolize_keys.except(:id, :template))
+      params = label.attributes.except('id', 'template', 'created_at', 'updated_at')
+      Labels::CreateService.new(owner, self, params).execute
     end
   end
 
diff --git a/app/services/boards/lists/generate_service.rb b/app/services/boards/lists/generate_service.rb
index d8048f1c67edb1d74a3ee78b4806d1e206f175ea..1d3c7f2071ba251d34d1219a25b5e1ab3b218ed6 100644
--- a/app/services/boards/lists/generate_service.rb
+++ b/app/services/boards/lists/generate_service.rb
@@ -19,8 +19,7 @@ module Boards
       end
 
       def find_or_create_label(params)
-        project.labels.create_with(color: params[:color])
-                      .find_or_create_by(name: params[:name])
+        ::Labels::CreateService.new(current_user, project, params).execute
       end
 
       def label_params
diff --git a/app/services/issuable_base_service.rb b/app/services/issuable_base_service.rb
index deadf1fe2838f5d1bb2d65f6c5d58a9e84537b8d..4554963370ff65600149d202c323a03a1775d7b5 100644
--- a/app/services/issuable_base_service.rb
+++ b/app/services/issuable_base_service.rb
@@ -88,8 +88,8 @@ class IssuableBaseService < BaseService
     return unless labels
 
     params[:label_ids] = labels.split(',').map do |label_name|
-      label = available_labels.find_by(title: label_name)
-      label ||= project.labels.create(title: label_name.strip, color: Label::DEFAULT_COLOR)
+      service = Labels::CreateService.new(current_user, project, title: label_name.strip)
+      label   = service.execute
 
       label.id
     end
diff --git a/app/services/labels/transfer_service.rb b/app/services/labels/transfer_service.rb
index 559d2860d9745d64406b8896078374f51d5253c4..65b4bdbaff95d100425eafc771c3dcb9fc1e9685 100644
--- a/app/services/labels/transfer_service.rb
+++ b/app/services/labels/transfer_service.rb
@@ -41,13 +41,9 @@ module Labels
       LabelLink.where("label_links.id IN (#{union.to_sql})")
     end
 
-    def labels
-      @labels ||= LabelsFinder.new(current_user, project_id: project.id).execute
-    end
-
     def find_or_create_label!(label)
-      new_label = labels.find_by(title: label.title)
-      new_label ||= project.labels.create!(label.attributes.slice("title", "description", "color"))
+      params = label.attributes.slice('title', 'description', 'color')
+      new_label = CreateService.new(current_user, project, params).execute
 
       new_label.id
     end
diff --git a/lib/gitlab/fogbugz_import/importer.rb b/lib/gitlab/fogbugz_import/importer.rb
index 9e926e2681aa832d0e044aedef176f90a742d3b1..f154ee689cf7fe56f5e623f8590bc2f6f9d1c755 100644
--- a/lib/gitlab/fogbugz_import/importer.rb
+++ b/lib/gitlab/fogbugz_import/importer.rb
@@ -74,8 +74,8 @@ module Gitlab
       end
 
       def create_label(name)
-        color = nice_label_color(name)
-        Label.create!(project_id: project.id, title: name, color: color)
+        params = { title: name, color: nice_label_color(name) }
+        ::Labels::CreateService.new(project.owner, project, params).execute
       end
 
       def user_info(person_id)
diff --git a/lib/gitlab/github_import/label_formatter.rb b/lib/gitlab/github_import/label_formatter.rb
index 2cad7fca88e429117c53ee74631fc37c094c001c..3101116a6142c8a0758775c477286e7b1c60ea4a 100644
--- a/lib/gitlab/github_import/label_formatter.rb
+++ b/lib/gitlab/github_import/label_formatter.rb
@@ -14,9 +14,10 @@ module Gitlab
       end
 
       def create!
-        project.labels.find_or_create_by!(title: title) do |label|
-          label.color = color
-        end
+        params  = attributes.except(:project)
+        service = ::Labels::CreateService.new(project.owner, project, params)
+
+        service.execute
       end
 
       private
diff --git a/lib/gitlab/google_code_import/importer.rb b/lib/gitlab/google_code_import/importer.rb
index 79a0eaba1e8c3a97af58b4b4de05e7e8d6ed832a..904a228aeef0a60938fd74c9930feda92472280f 100644
--- a/lib/gitlab/google_code_import/importer.rb
+++ b/lib/gitlab/google_code_import/importer.rb
@@ -233,8 +233,8 @@ module Gitlab
       end
 
       def create_label(name)
-        color = nice_label_color(name)
-        project.labels.create!(name: name, color: color)
+        params = { name: name, color: nice_label_color(name) }
+        ::Labels::CreateService.new(project.owner, project, params).execute
       end
 
       def format_content(raw_content)
diff --git a/lib/gitlab/issues_labels.rb b/lib/gitlab/issues_labels.rb
index 1bec60882925b8d3a129df8676a2b0389ac08ef3..6788eca7146283da6845a5e3dfee390f3c69b0b9 100644
--- a/lib/gitlab/issues_labels.rb
+++ b/lib/gitlab/issues_labels.rb
@@ -18,8 +18,8 @@ module Gitlab
           { title: "enhancement", color: green }
         ]
 
-        labels.each do |label|
-          project.labels.create(label)
+        labels.each do |params|
+          ::Labels::CreateService.new(project.owner, project).execute(params)
         end
       end
     end