diff --git a/gajim/chat_control_base.py b/gajim/chat_control_base.py
index 25ce7ba4a6a75f7af68a85eddd65b0d4cb66b54a..bb4bd4a59d0ae97a6526be96bc62e90ca556801e 100644
--- a/gajim/chat_control_base.py
+++ b/gajim/chat_control_base.py
@@ -1138,7 +1138,7 @@ def add_message(self,
 
         if kind == 'incoming':
             if (not self._type.is_groupchat or
-                    helpers.notify_for_muc(jid) or
+                    self.contact.can_notify() or
                     'marked' in other_tags_for_text):
                 # it's a normal message, or a muc message with want to be
                 # notified about if quitting just after
@@ -1176,7 +1176,7 @@ def add_message(self,
                     event = 'message_received'
                 show_in_roster = get_show_in_roster(event, self.session)
                 show_in_systray = get_show_in_systray(
-                    event_type.type_, self.contact.jid)
+                    event_type.type_, self.account, self.contact.jid)
 
                 event = event_type(text,
                                    subject,
diff --git a/gajim/common/connection_handlers_events.py b/gajim/common/connection_handlers_events.py
index 1619b950263d68db09c9965fbc5da1e6d62389f7..b495ceea7f117233ae9067ff2ce6369eb8598636 100644
--- a/gajim/common/connection_handlers_events.py
+++ b/gajim/common/connection_handlers_events.py
@@ -305,8 +305,9 @@ def handle_incoming_gc_msg_event(self, msg_obj):
             self.control_focused = self.control.has_focus()
 
         if app.config.get('notify_on_new_message'):
-            notify_for_muc = (helpers.notify_for_muc(self.jid) or
-                              sound == 'highlight')
+            contact = app.contacts.get_groupchat_contact(self.account,
+                                                         self.jid)
+            notify_for_muc = sound == 'highlight' or contact.can_notify()
             if not notify_for_muc:
                 self.do_popup = False
 
diff --git a/gajim/common/contacts.py b/gajim/common/contacts.py
index edcb10b159718b881f8da3c79f04060e78aee6a1..5b69917235da0c809822f3d5b5e05dd85be030dd 100644
--- a/gajim/common/contacts.py
+++ b/gajim/common/contacts.py
@@ -243,6 +243,14 @@ def is_transport(self):
         # if not '@' or '@' starts the jid then contact is transport
         return self.jid.find('@') <= 0
 
+    def can_notify(self):
+        if not self.is_groupchat:
+            raise ValueError
+
+        all_ = app.config.get('notify_on_all_muc_messages')
+        room = app.config.get_per('rooms', self.jid, 'notify_on_all_messages')
+        return all_ or room
+
 
 class GC_Contact(CommonContact):
     """
diff --git a/gajim/common/helpers.py b/gajim/common/helpers.py
index c2aa9fba5bc90bfdd98241b95d038240d5585432..631c79c20fbd0a09e3f682ca188e4e8e1616a4cb 100644
--- a/gajim/common/helpers.py
+++ b/gajim/common/helpers.py
@@ -1434,9 +1434,3 @@ def should_log(account, jid):
     no_log_for = no_log_for.split()
 
     return (account not in no_log_for) and (jid not in no_log_for)
-
-
-def notify_for_muc(room):
-    all_ = app.config.get('notify_on_all_muc_messages')
-    room = app.config.get_per('rooms', room, 'notify_on_all_messages')
-    return all_ or room
diff --git a/gajim/groupchat_control.py b/gajim/groupchat_control.py
index 6f7294f70a38819d8516daf22086aa1e6260ec4d..aba80c19595b1e79ebfa2619cbc29ce95bb2c4dc 100644
--- a/gajim/groupchat_control.py
+++ b/gajim/groupchat_control.py
@@ -962,7 +962,7 @@ def add_message(self, text, contact='', tim=None,
 
     def get_nb_unread(self):
         type_events = ['printed_marked_gc_msg']
-        if helpers.notify_for_muc(self.room_jid):
+        if self.contact.can_notify():
             type_events.append('printed_gc_msg')
         nb = len(app.events.get_events(self.account,
                                        self.room_jid,
@@ -984,7 +984,7 @@ def highlighting_for_message(self, text, tim):
         """
         highlight, sound = None, None
 
-        notify = helpers.notify_for_muc(self.room_jid)
+        notify = self.contact.can_notify()
         message_sound_enabled = app.config.get_per('soundevents',
                                                    'muc_message_received',
                                                    'enabled')
diff --git a/gajim/gtk/util.py b/gajim/gtk/util.py
index e598442c5210b7c1bd2f4154d651a0ab7f732961..de48a39dc7797a989b6a95bb2064ac6e32dcf6af 100644
--- a/gajim/gtk/util.py
+++ b/gajim/gtk/util.py
@@ -48,7 +48,6 @@
 from gajim.common import i18n
 from gajim.common.i18n import _
 from gajim.common.helpers import URL_REGEX
-from gajim.common.helpers import notify_for_muc
 from gajim.common.const import MOODS
 from gajim.common.const import ACTIVITIES
 from gajim.common.const import LOCATION_DATA
@@ -497,12 +496,14 @@ def get_show_in_roster(event, session=None):
     return True
 
 
-def get_show_in_systray(type_, jid):
+def get_show_in_systray(type_, account, jid):
     """
     Return True if this event must be shown in systray, else False
     """
-    notify = notify_for_muc(jid)
-    if type_ == 'printed_gc_msg' and not notify:
+    if type_ == 'printed_gc_msg':
+        contact = app.contacts.get_groupchat_contact(account, jid)
+        if contact is not None:
+            return contact.can_notify()
         # it's not an highlighted message, don't show in systray
         return False
     return app.config.get('trayicon_notification_on_events')
diff --git a/gajim/gui_interface.py b/gajim/gui_interface.py
index 4b84e1dadecedb6bc6e43061a6930941bad97952..54b707e8f0be216035da8a35b0f3f1269f64e79a 100644
--- a/gajim/gui_interface.py
+++ b/gajim/gui_interface.py
@@ -1058,7 +1058,7 @@ def add_event(self, account, jid, event):
             'file-completed': 'ft_finished'}
         event_type = event_types.get(event.type_)
         show_in_roster = get_show_in_roster(event_type, jid)
-        show_in_systray = get_show_in_systray(event_type, jid)
+        show_in_systray = get_show_in_systray(event_type, account, jid)
         event.show_in_roster = show_in_roster
         event.show_in_systray = show_in_systray
         app.events.add_event(account, jid, event)
diff --git a/gajim/message_window.py b/gajim/message_window.py
index e3d2413c3a676bd27ead6f02868fd7a37ae5acd5..026f57c95c45ebdb81f0eb83a9dc316370aa4c9d 100644
--- a/gajim/message_window.py
+++ b/gajim/message_window.py
@@ -36,7 +36,6 @@
 from gajim.common import ged
 from gajim.common.i18n import Q_
 from gajim.common.i18n import _
-from gajim.common.helpers import notify_for_muc
 from gajim.common.nec import EventHelper
 
 from gajim import gtkgui_helpers
@@ -492,8 +491,8 @@ def show_title(self, urgent=True, control=None):
         unread = 0
         for ctrl in self.controls():
             if (ctrl.is_groupchat and
-                     not notify_for_muc(ctrl.room_jid) and
-                     not ctrl.attention_flag):
+                    not ctrl.contact.can_notify() and
+                    not ctrl.attention_flag):
                 # count only pm messages
                 unread += ctrl.get_nb_unread_pm()
                 continue
@@ -510,7 +509,7 @@ def show_title(self, urgent=True, control=None):
         if control.is_groupchat:
             name = control.contact.get_shown_name()
             urgent = (control.attention_flag or
-                      notify_for_muc(control.room_jid))
+                      control.contact.can_notify())
         else:
             name = control.contact.get_shown_name()
             if control.resource:
diff --git a/gajim/remote_control.py b/gajim/remote_control.py
index e9345c1f34524f3e2cb50bb24e631aab1d6b6259..f8204e22b48bdaf4db1729e61110d174d6d7d6c6 100644
--- a/gajim/remote_control.py
+++ b/gajim/remote_control.py
@@ -884,8 +884,12 @@ def _contacts_as_dbus_structure(self, contacts):
     def get_unread_msgs_number(self):
         unread = app.events.get_nb_events()
         for event in app.events.get_all_events(['printed_gc_msg']):
-            if not helpers.notify_for_muc(event.jid):
+            contact = app.contacts.get_groupchat_contact(event.account,
+                                                         event.jid)
+            if contact is None or not contact.can_notify():
                 unread -= 1
+                continue
+
         return str(unread)
 
     def start_chat(self, jid=''):
diff --git a/gajim/roster_window.py b/gajim/roster_window.py
index dd6ec3f415361077b960130bd4c5144a6ce6b220..f8bf272223cd5968d8fc54a3e111c139eb12c45e 100644
--- a/gajim/roster_window.py
+++ b/gajim/roster_window.py
@@ -2368,7 +2368,9 @@ def on_continue(message, pep_dict):
             unread = app.events.get_nb_events()
 
             for event in app.events.get_all_events(['printed_gc_msg']):
-                if not helpers.notify_for_muc(event.jid):
+                contact = app.contacts.get_groupchat_contact(event.account,
+                                                             event.jid)
+                if contact is None or not contact.can_notify():
                     unread -= 1
 
             # check if we have recent messages
diff --git a/gajim/session.py b/gajim/session.py
index f9568ad9ed5f590182913addd84c601764cb426e..01805a5e2b479afcd5e2ccabe2d23089fbb4164e 100644
--- a/gajim/session.py
+++ b/gajim/session.py
@@ -218,7 +218,9 @@ def roster_message2(self, obj):
         else:
             # Everything else
             obj.show_in_roster = get_show_in_roster(event_type, self)
-            obj.show_in_systray = get_show_in_systray(event_type, contact.jid)
+            obj.show_in_systray = get_show_in_systray(event_type,
+                                                      obj.conn.name,
+                                                      contact.jid)
             do_event = True
         if do_event:
             kind = obj.properties.type.value
@@ -321,7 +323,9 @@ def roster_message(self, jid, msg, tim, msg_type='',
         event_type = 'message_received'
 
         show_in_roster = get_show_in_roster(event_type, self)
-        show_in_systray = get_show_in_systray(event_type, contact.jid)
+        show_in_systray = get_show_in_systray(event_type,
+                                              self.conn.name,
+                                              contact.jid)
 
         event = event_t(msg, subject, msg_type, tim, resource,
             msg_log_id, session=self,