diff --git a/gajim/gui_interface.py b/gajim/gui_interface.py
index 96c8b4972ce84906e7a0182c20b503973ec205c7..2cceea57553cc0cd968d151ed2073282e882878e 100644
--- a/gajim/gui_interface.py
+++ b/gajim/gui_interface.py
@@ -2852,8 +2852,7 @@ class Interface:
 
         self.remote_ctrl = None
 
-        if dbus_support.supported:
-            from gajim import logind_listener
+        from gajim import logind_listener
 
         # Handle gnome screensaver
         if dbus_support.supported:
diff --git a/gajim/logind_listener.py b/gajim/logind_listener.py
index 33cd53bf6d3a9bd9f3c8fd48ed500e7899767b10..80c5e1ab9ea7d62330bf18bab6ac7f5d6a77cadd 100644
--- a/gajim/logind_listener.py
+++ b/gajim/logind_listener.py
@@ -25,23 +25,29 @@ Documentation: http://www.freedesktop.org/wiki/Software/systemd/inhibit
 import os
 import logging
 
-from gajim.common import dbus_support
+from gi.repository import Gio, GLib
+
 from gajim.common import app
 
 log = logging.getLogger('gajim.logind_listener')
-supported = False
-fd = -1  # file descriptor of the inhibitor; negative number means we don't
-         # hold any (yet)
+
+# file descriptor of the inhibitor; negative number means we don't
+# hold any (yet)
+fd = -1
 
 
-def on_suspend(active):
+def signal_received(connection, sender_name, object_path,
+                    interface_name, signal_name, parameters, *user_data):
     '''Signal handler for suspend event'''
 
     global fd
 
-    if not active:
-        # we just resumed, we should take another inhibitor
-        get_inhibitor()
+    connected = None
+    log.info('Signal received: %s - %s', interface_name, parameters)
+
+    # signal is sent right before (with the parameter True) and after
+    # (with the parameter False) the system goes down for suspend/hibernate
+    if not parameters[0]:
         return
 
     # we're going for suspend, let's disconnect
@@ -62,53 +68,54 @@ def on_suspend(active):
         # something is wrong, the system is suspending but we don't have
         # a lock file
         log.warning("System suspend detected, but we don't seem to be holding "
-            "a file descriptor for sleep inihibitor")
+                    "a file descriptor for sleep inihibitor")
+
 
-def get_inhibitor():
+def get_inhibitor(connection):
     '''Ask for a suspend delay inhibitor'''
 
-    from gajim.common.dbus_support import system_bus, dbus
-    bus = system_bus.bus()
     global fd
 
     if fd >= 0:
         # someting is wrong, we haven't closed the previous file descriptor
         # and we ask for yet another one
         log.warning('We are about to ask for a sleep inhibitor, but we seem '
-            'to be holding one already')
-
-    login_object = bus.get_object('org.freedesktop.login1',
-        '/org/freedesktop/login1')
-    login_manager = dbus.Interface(login_object,
-        'org.freedesktop.login1.Manager')
-
-    ret = login_manager.Inhibit('sleep', 'Gajim', 'Disconnect from the network',
-        'delay')
-    fd = ret.take()
-
-def set_listener():
-    '''Set up a listener for suspend signals
-
-    @return bool whether it succeeded
-    '''
-    from gajim.common.dbus_support import system_bus
-    bus = system_bus.bus()
-
-    if not 'org.freedesktop.login1' in bus.list_names():
-        # logind is not present
-        log.debug("logind is not on D-Bus, not activating logind listener")
-        return False
-
-    bus.add_signal_receiver(on_suspend, signal_name='PrepareForSleep',
-        bus_name='org.freedesktop.login1',
-        path='/org/freedesktop/login1',
-        dbus_interface='org.freedesktop.login1.Manager')
-    return True
-
-if dbus_support.supported:
-    try:
-        if set_listener():
-            get_inhibitor()
-            supported = True
-    except Exception as ex:
-        log.error("A problem occured while activating logind listener")
+                    'to be holding one already')
+
+    ret = connection.call_sync(
+        'org.freedesktop.login1',
+        '/org/freedesktop/login1',
+        'org.freedesktop.login1.Manager',
+        'Inhibit',
+        GLib.Variant('(ssss)', ('sleep', 'org.gajim.Gajim',
+                                'Disconnect from the network', 'delay')),
+        None,
+        Gio.DBusCallFlags.NONE, -1, None)
+
+    fd = ret[0]
+
+
+def appeared(connection, name, name_owner, *user_data):
+    '''Set up a listener for suspend signals'''
+    global supported
+    supported = True
+    log.info('%s appeared', name)
+    if name == 'org.freedesktop.login1':
+        connection.signal_subscribe(
+            'org.freedesktop.login1',
+            'org.freedesktop.login1.Manager',
+            'PrepareForSleep',
+            '/org/freedesktop/login1',
+            None,
+            Gio.DBusSignalFlags.NONE,
+            signal_received,
+            None)
+        get_inhibitor(connection)
+
+
+Gio.bus_watch_name(
+    Gio.BusType.SYSTEM,
+    'org.freedesktop.login1',
+    Gio.BusNameWatcherFlags.NONE,
+    appeared,
+    None)