diff --git a/app/assets/javascripts/behaviors/toggler_behavior.js b/app/assets/javascripts/behaviors/toggler_behavior.js
index 2d98fc5a545a94a615fdc1e73d95c0a1903debb4..0726c6c96362ffde31a25883fd6f8a7545227666 100644
--- a/app/assets/javascripts/behaviors/toggler_behavior.js
+++ b/app/assets/javascripts/behaviors/toggler_behavior.js
@@ -21,7 +21,7 @@
     //   %a.js-toggle-button
     //   %div.js-toggle-content
     //
-    $('body').on('click', '.js-toggle-button', function(e) {
+    $('body').on('click', '.js-toggle-button', function() {
       toggleContainer($(this).closest('.js-toggle-container'));
     });
 
diff --git a/app/services/groups/base_service.rb b/app/services/groups/base_service.rb
index a8fa098246a52ce058d2ec581826c71ec51b7a96..eb2abcd3723efa5e77f2a1fde66ada79c1edef34 100644
--- a/app/services/groups/base_service.rb
+++ b/app/services/groups/base_service.rb
@@ -5,5 +5,11 @@ module Groups
     def initialize(group, user, params = {})
       @group, @current_user, @params = group, user, params.dup
     end
+
+    private
+
+    def create_chat_team?
+      @chat_team == "true" && Gitlab.config.mattermost.enabled
+    end
   end
 end
diff --git a/app/services/groups/create_service.rb b/app/services/groups/create_service.rb
index 3028025fc6e3b830f75129fa5ab1c5c6d45b8fac..4ed2cb7c8af90c912e1243a6abc408d9ff9902c6 100644
--- a/app/services/groups/create_service.rb
+++ b/app/services/groups/create_service.rb
@@ -32,11 +32,5 @@ module Groups
       @group.add_owner(current_user)
       @group
     end
-
-    private
-
-    def create_chat_team?
-      @chat_team && Gitlab.config.mattermost.enabled
-    end
   end
 end
diff --git a/app/services/groups/update_service.rb b/app/services/groups/update_service.rb
index aff42ad598cce2410e0d7dee66795c6f21266f87..e8ad6d41ed403c9f85191fc88a20eb893b8a2277 100644
--- a/app/services/groups/update_service.rb
+++ b/app/services/groups/update_service.rb
@@ -1,10 +1,7 @@
 module Groups
   class UpdateService < Groups::BaseService
     def execute
-      if params.delete(:create_chat_team) == '1'
-        chat_name = params[:chat_team_name]
-        options = chat_name ? { name: chat_name } : {}
-      end
+      @chat_team = params.delete(:create_chat_team)
 
       # check that user is allowed to set specified visibility_level
       new_visibility = params[:visibility_level]
@@ -19,6 +16,12 @@ module Groups
 
       group.assign_attributes(params)
 
+      if create_chat_team?
+        Mattermost::CreateTeamService.new(group, current_user).execute
+
+        return group if group.errors.any?
+      end
+
       begin
         group.save
       rescue Gitlab::UpdatePathError => e
@@ -27,5 +30,11 @@ module Groups
         false
       end
     end
+
+    private
+
+    def create_chat_team?
+      super && group.chat_team.nil?
+    end
   end
 end
diff --git a/app/views/groups/_create_chat_team.html.haml b/app/views/groups/_create_chat_team.html.haml
index 8b908e233dcbab89825db2fb82f798185ff6ebcc..b9bf9fe39c2deb5e90bf555966bf57e25dbd02c6 100644
--- a/app/views/groups/_create_chat_team.html.haml
+++ b/app/views/groups/_create_chat_team.html.haml
@@ -13,4 +13,4 @@
         Team URL:
         = Settings.mattermost.host
         %span> /
-        %span{ "data-bind-out" => "create_chat_team"}
+        %span{ "data-bind-out" => "create_chat_team" }
diff --git a/db/migrate/20170120131253_create_chat_teams.rb b/db/migrate/20170120131253_create_chat_teams.rb
index 6476c23915288682d4016e6a73443cd4f04130df..2d9341d235f70f7ca468831d7cf5c2e1dc3839d8 100644
--- a/db/migrate/20170120131253_create_chat_teams.rb
+++ b/db/migrate/20170120131253_create_chat_teams.rb
@@ -1,7 +1,8 @@
 class CreateChatTeams < ActiveRecord::Migration
   include Gitlab::Database::MigrationHelpers
 
-  DOWNTIME = false
+  DOWNTIME = true
+  DOWNTIME_REASON = "Adding a foreign key"
 
   def change
     create_table :chat_teams do |t|
@@ -12,6 +13,6 @@ class CreateChatTeams < ActiveRecord::Migration
       t.timestamps null: false
     end
 
-    add_foreign_key :chat_teams, :namespaces, on_delete: :cascade
+    add_concurrent_foreign_key :chat_teams, :namespaces, on_delete: :cascade
   end
 end
diff --git a/spec/services/groups/create_service_spec.rb b/spec/services/groups/create_service_spec.rb
index d8181f7311068b042fd9b9d5792b167e499e407d..b11483fb4072b1c465e36c02602852cbe54f0010 100644
--- a/spec/services/groups/create_service_spec.rb
+++ b/spec/services/groups/create_service_spec.rb
@@ -40,9 +40,13 @@ describe Groups::CreateService, '#execute', services: true do
   end
 
   describe 'creating a mattermost team' do
-    let!(:params) { group_params.merge(create_chat_team: true) }
+    let!(:params) { group_params.merge(create_chat_team: "true") }
     let!(:service) { described_class.new(user, params) }
 
+    before do
+      Settings.mattermost['enabled'] = true
+    end
+
     it 'triggers the service' do
       expect_any_instance_of(Mattermost::CreateTeamService).to receive(:execute)