diff --git a/app/models/users_group.rb b/app/models/users_group.rb
index 5f8b832d51e1f151327447b685d2c168097d2fd6..242c8abb3cae1eae7dde932659d64526009518ae 100644
--- a/app/models/users_group.rb
+++ b/app/models/users_group.rb
@@ -33,6 +33,9 @@ class UsersGroup < ActiveRecord::Base
   scope :with_group, ->(group) { where(group_id: group.id) }
   scope :with_user, ->(user) { where(user_id: user.id) }
 
+  after_create :notify_create
+  after_update :notify_update
+
   validates :group_access, inclusion: { in: UsersGroup.group_access_roles.values }, presence: true
   validates :user_id, presence: true
   validates :group_id, presence: true
@@ -43,4 +46,18 @@ class UsersGroup < ActiveRecord::Base
   def access_field
     group_access
   end
+
+  def notify_create
+    notification_service.new_group_member(self)
+  end
+
+  def notify_update
+    if group_access_changed?
+      notification_service.update_group_member(self)
+    end
+  end
+
+  def notification_service
+    NotificationService.new
+  end
 end
diff --git a/app/observers/users_group_observer.rb b/app/observers/users_group_observer.rb
deleted file mode 100644
index 42a05b5e177e55a5acfc29f57e41932eec1805d8..0000000000000000000000000000000000000000
--- a/app/observers/users_group_observer.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-class UsersGroupObserver < BaseObserver
-  def after_create(membership)
-    notification.new_group_member(membership)
-  end
-
-  def after_update(membership)
-    notification.update_group_member(membership) if membership.group_access_changed?
-  end
-end
diff --git a/config/application.rb b/config/application.rb
index 43fcb4bcf7e4d66bfc000c796e6519d3c196bdbb..1283c8b78efbbc11f869f8827b20d4c2f975a505 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -23,7 +23,6 @@ module Gitlab
                                      :project_observer,
                                      :system_hook_observer,
                                      :user_observer,
-                                     :users_group_observer,
                                      :users_project_observer
 
     # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
diff --git a/spec/models/users_group_spec.rb b/spec/models/users_group_spec.rb
index acecae0714672f91ea16c97ca152eb9913e604b4..05dd97d92d47712070cf56ffe6d39f71eda5ae12 100644
--- a/spec/models/users_group_spec.rb
+++ b/spec/models/users_group_spec.rb
@@ -37,4 +37,32 @@ describe UsersGroup do
     it { should respond_to(:user_name) }
     it { should respond_to(:user_email) }
   end
+
+  context 'notification' do
+    describe "#after_create" do
+      it "should send email to user" do
+        membership = build(:users_group)
+        membership.stub(notification_service: double('NotificationService').as_null_object)
+        membership.should_receive(:notification_service)
+        membership.save
+      end
+    end
+
+    describe "#after_update" do
+      before do
+        @membership = create :users_group
+        @membership.stub(notification_service: double('NotificationService').as_null_object)
+      end
+
+      it "should send email to user" do
+        @membership.should_receive(:notification_service)
+        @membership.update_attribute(:group_access, UsersGroup::MASTER)
+      end
+
+      it "does not send an email when the access level has not changed" do
+        @membership.should_not_receive(:notification_service)
+        @membership.update_attribute(:group_access, UsersGroup::OWNER)
+      end
+    end
+  end
 end
diff --git a/spec/observers/users_group_observer_spec.rb b/spec/observers/users_group_observer_spec.rb
deleted file mode 100644
index 2ab99c33b7869c8a57927e586b5be5aa838148b4..0000000000000000000000000000000000000000
--- a/spec/observers/users_group_observer_spec.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-require 'spec_helper'
-
-describe UsersGroupObserver do
-  before(:each) { enable_observers }
-  after(:each) { disable_observers }
-
-  subject { UsersGroupObserver.instance }
-  before { subject.stub(notification: double('NotificationService').as_null_object) }
-
-  describe "#after_create" do
-    it "should send email to user" do
-      subject.should_receive(:notification)
-      create(:users_group)
-    end
-  end
-
-  describe "#after_update" do
-    before do
-      @membership = create :users_group
-    end
-
-    it "should send email to user" do
-      subject.should_receive(:notification)
-      @membership.update_attribute(:group_access, UsersGroup::MASTER)
-    end
-
-    it "does not send an email when the access level has not changed" do
-      subject.should_not_receive(:notification)
-      @membership.update_attribute(:group_access, UsersGroup::OWNER)
-    end
-  end
-end