diff --git a/app/services/notification_service.rb b/app/services/notification_service.rb
index 4d6616b969df655912c564e0bb03612f7fa5de57..dc5f4aa88224cbf00780182e43b20293d72ed28e 100644
--- a/app/services/notification_service.rb
+++ b/app/services/notification_service.rb
@@ -178,28 +178,28 @@ class NotificationService
 
   # Get project users with WATCH notification level
   def project_watchers(project)
-    # Gather all user that have WATCH notification setting for project and group
-    project_uids, group_uids = project_and_group_watchers(project,  Notification::N_WATCH)
+    project_members = project_notification_list(project)
 
-    # Gather all user that have WATCH as their GLOBAL setting
-    global_setting_project, global_setting_group = project_and_group_watchers(project, Notification::N_GLOBAL)
-    global_uids = [global_setting_project, global_setting_group].flatten.uniq
-    global_watchers_ids = User.where(id: global_uids, notification_level: Notification::N_WATCH).pluck(:id)
+    project_global= project_notification_list(project, Notification::N_GLOBAL)
+    group_global = group_notification_list(project, Notification::N_GLOBAL)
+    global_watch = User.where(
+                                      id: [project_global, group_global].flatten.uniq,
+                                      notification_level: Notification::N_WATCH
+                                    ).pluck(:id)
 
-    # Select watchers based on what the project setting is
-    project_watchers, user_ids = select_watchers(global_watchers_ids, global_setting_project, project_uids)
+    project_watch = watch_project(project, project_global, global_watch)
+    group_watch = watch_group(project, project_members, group_global, global_watch)
 
-    # Select watchers based on what the group setting is
-    group_watchers, ids = select_watchers(user_ids, global_setting_group, group_uids)
-
-    project_watchers.concat(group_watchers.concat(ids)).uniq
-    watchers = User.where(id: project_watchers)
-
-    watchers.to_a
+    User.where(id: project_watch.concat(group_watch).uniq).to_a
   end
 
-  def project_notification_list(project, notification_level)
-    project.users_projects.where(notification_level: notification_level).pluck(:user_id)
+  def project_notification_list(project, notification_level=nil)
+    project_members = project.users_projects
+    if notification_level
+      project_members.where(notification_level: notification_level).pluck(:user_id)
+    else
+      project_members.pluck(:user_id)
+    end
   end
 
   def group_notification_list(project, notification_level)
@@ -210,25 +210,34 @@ class NotificationService
     end
   end
 
-  def select_watchers(user_ids, global_setting, setting)
-    watchers = []
-    user_ids.each do |i|
-      if setting.include?(i)
-        watchers << i
-      elsif global_setting.include?(i)
-        watchers << i
-      else
-        user_ids.delete(i)
+  def watch_project(project, global_setting, watch_global)
+    uids = project_notification_list(project, Notification::N_WATCH)
+
+    global_setting.each do |i|
+      if watch_global.include?(i)
+        uids << i
       end
     end
-    [watchers, user_ids]
+    uids.uniq
   end
 
-  def project_and_group_watchers(project, notification_level)
-    [
-      project_notification_list(project,  notification_level),
-      group_notification_list(project, notification_level)
-    ]
+  def watch_group(project, project_members, global_setting, watch_global)
+    uids = group_notification_list(project, Notification::N_WATCH)
+    # Group setting is watch, add to watchers list user is not project member
+    watch = []
+    uids.each do |i|
+      if project_members.exclude?(i)
+        watch << i
+      end
+    end
+
+    global_setting.each do |i|
+      if project_members.exclude?(i) && watch_global.include?(i)
+        watch << i
+      end
+    end
+
+    watch.uniq
   end
 
   # Remove users with disabled notifications from array