diff --git a/gajim/notify.py b/gajim/notify.py
index dc3c742d7c7b6f61f714428d425ce1c45aa597a4..f88e26bd4d2a1fcc0313ba8a21de778d5dd6b77f 100644
--- a/gajim/notify.py
+++ b/gajim/notify.py
@@ -75,31 +75,10 @@ class Notification:
     Handle notifications
     """
     def __init__(self):
+        self._dbus_available = False
         self.daemon_capabilities = ['actions']
 
-        # Detect if actions are supported by the notification daemon
-        if sys.platform not in ('win32', 'darwin'):
-            def on_proxy_ready(source, res, data=None):
-                try:
-                    proxy = Gio.DBusProxy.new_finish(res)
-                    self.daemon_capabilities = proxy.GetCapabilities()
-                except GLib.Error as e:
-                    if e.domain == 'g-dbus-error-quark':
-                        log.info('Notifications D-Bus connection failed: %s',
-                                 e.message)
-                    else:
-                        raise
-                else:
-                    log.debug('Notifications D-Bus connected')
-
-            log.debug('Connecting to Notifications D-Bus')
-            Gio.DBusProxy.new_for_bus(Gio.BusType.SESSION,
-                                      Gio.DBusProxyFlags.DO_NOT_CONNECT_SIGNALS,
-                                      None,
-                                      'org.freedesktop.Notifications',
-                                      '/org/freedesktop/Notifications',
-                                      'org.freedesktop.Notifications',
-                                      None, on_proxy_ready)
+        self._detect_dbus_caps()
 
         app.ged.register_event_handler(
             'notification', ged.GUI2, self._nec_notification)
@@ -107,6 +86,30 @@ class Notification:
             'our-show', ged.GUI2, self._nec_our_status)
         app.events.event_removed_subscribe(self._on_event_removed)
 
+    def _detect_dbus_caps(self):
+        if sys.platform in ('win32', 'darwin'):
+            return
+
+        def on_proxy_ready(_source, res, _data=None):
+            try:
+                proxy = Gio.DBusProxy.new_finish(res)
+                self.daemon_capabilities = proxy.GetCapabilities()
+            except GLib.Error:
+                log.exception('Notifications D-Bus connection failed')
+            else:
+                self._dbus_available = True
+                log.info('Notifications D-Bus connected')
+
+        log.info('Connecting to Notifications D-Bus')
+        Gio.DBusProxy.new_for_bus(Gio.BusType.SESSION,
+                                  Gio.DBusProxyFlags.DO_NOT_CONNECT_SIGNALS,
+                                  None,
+                                  'org.freedesktop.Notifications',
+                                  '/org/freedesktop/Notifications',
+                                  'org.freedesktop.Notifications',
+                                  None,
+                                  on_proxy_ready)
+
     def _nec_notification(self, obj):
         if obj.do_popup:
             icon_name = self._get_icon_name(obj)
@@ -170,6 +173,9 @@ class Notification:
             app.interface.roster.popup_notification_windows.append(instance)
             return
 
+        if not self._dbus_available:
+            return
+
         scale = gtkgui_helpers.get_monitor_scale_factor()
         icon_pixbuf = gtkgui_helpers.gtk_icon_theme.load_icon_for_scale(
             icon_name, 48, scale, 0)
@@ -220,8 +226,9 @@ class Notification:
         app.app.send_notification(notif_id, notification)
 
     def withdraw(self, *args):
-        if sys.platform != 'win32':
-            app.app.withdraw_notification(self._id(*args))
+        if not self._dbus_available:
+            return
+        app.app.withdraw_notification(self._id(*args))
 
     def _id(self, *args):
         return ','.join(args)