diff --git qt5/style/qtcurve.cpp qt5/style/qtcurve.cpp
index ce15754..bba2c3d 100644
--- qt5/style/qtcurve.cpp
+++ qt5/style/qtcurve.cpp
@@ -21,7 +21,6 @@
  *****************************************************************************/
 
 #include "qtcurve_p.h"
-#include "qtcurve_plugin.h"
 #include <qtcurve-utils/qtprops.h>
 
 #include <QDBusConnection>
@@ -347,7 +346,7 @@ Style::Style() :
     m_windowManager(new WindowManager(this)),
     m_blurHelper(new BlurHelper(this)),
     m_shortcutHandler(new ShortcutHandler(this)),
-    m_dbusConnected(nullptr)
+    m_dbusConnected(false)
 {
     const char *env = getenv(QTCURVE_PREVIEW_CONFIG);
 #ifdef QTC_QT5_ENABLE_KDE
@@ -666,9 +665,7 @@ void Style::connectDBus()
 {
     if (m_dbusConnected)
         return;
-    m_dbusConnected = registerCleanup([] (void *data) {
-            reinterpret_cast<Style*>(data)->disconnectDBus();
-        }, this);
+    m_dbusConnected = true;
     auto bus = QDBusConnection::sessionBus();
     bus.connect(QString(), "/KGlobalSettings", "org.kde.KGlobalSettings",
                 "notifyChange", this, SLOT(kdeGlobalSettingsChange(int, int)));
@@ -695,23 +692,28 @@ void Style::disconnectDBus()
 {
     if (!m_dbusConnected)
         return;
-    void *cb = m_dbusConnected;
-    m_dbusConnected = nullptr;
-    unregisterCleanup(cb);
+    m_dbusConnected = false;
     auto bus = QDBusConnection::sessionBus();
     bus.disconnect(QString(), "/KGlobalSettings", "org.kde.KGlobalSettings",
                    "notifyChange",
                    this, SLOT(kdeGlobalSettingsChange(int, int)));
     bus.disconnect("org.kde.kwin", "/KWin", "org.kde.KWin", "compositingToggled",
                    this, SLOT(compositingToggled()));
-    bus.disconnect("org.kde.kwin", "/QtCurve", "org.kde.QtCurve",
-                   "borderSizesChanged", this, SLOT(borderSizesChanged()));
-    bus.disconnect("org.kde.kwin", "/QtCurve", "org.kde.QtCurve",
-                   "toggleMenuBar",
-                   this, SLOT(toggleMenuBar(unsigned int)));
-    bus.disconnect("org.kde.kwin", "/QtCurve", "org.kde.QtCurve",
-                   "toggleStatusBar",
-                   this, SLOT(toggleStatusBar(unsigned int)));
+
+    if (!qApp || qApp->arguments()[0] != "kwin") {
+        bus.disconnect("org.kde.kwin", "/QtCurve", "org.kde.QtCurve",
+                    "borderSizesChanged", this, SLOT(borderSizesChanged()));
+        if (opts.menubarHiding & HIDE_KWIN)
+            bus.disconnect("org.kde.kwin", "/QtCurve", "org.kde.QtCurve",
+                           "toggleMenuBar",
+                           this, SLOT(toggleMenuBar(unsigned int)));
+
+        if (opts.statusbarHiding & HIDE_KWIN) {
+            bus.disconnect("org.kde.kwin", "/QtCurve", "org.kde.QtCurve",
+                           "toggleStatusBar",
+                           this, SLOT(toggleStatusBar(unsigned int)));
+        }
+    }
 }
 
 Style::~Style()
diff --git qt5/style/qtcurve.h qt5/style/qtcurve.h
index f4d5b0a..fb6d15c 100644
--- qt5/style/qtcurve.h
+++ qt5/style/qtcurve.h
@@ -515,7 +515,6 @@ private:
                                       const QStyleOption *option,
                                       QPainter *painter,
                                       const QWidget *widget) const;
-    static void dbusCleanupCallback(void*);
 
 private:
     mutable Options opts;
@@ -566,7 +565,7 @@ private:
     WindowManager *m_windowManager;
     BlurHelper *m_blurHelper;
     ShortcutHandler *m_shortcutHandler;
-    void *m_dbusConnected;
+    bool m_dbusConnected;
 #ifdef QTC_QT5_ENABLE_KDE
     KSharedConfigPtr m_configFile;
     KSharedConfigPtr m_kdeGlobals;
diff --git qt5/style/qtcurve_plugin.cpp qt5/style/qtcurve_plugin.cpp
index b8c76ce..500a3ff 100644
--- qt5/style/qtcurve_plugin.cpp
+++ qt5/style/qtcurve_plugin.cpp
@@ -27,7 +27,6 @@
 #include <qtcurve-utils/qtprops.h>
 #include <qtcurve-utils/x11shadow.h>
 #include <qtcurve-utils/x11blur.h>
-#include <qtcurve-utils/log.h>
 
 #include <QApplication>
 
@@ -44,49 +43,6 @@
 
 namespace QtCurve {
 
-// Using a `std::set` somehow result in a segfault in glibc (maybe realated to
-// this function being called in the exit handler?) so use a home made solution
-// instead...
-struct CleanupCallback {
-    void (*func)(void*);
-    void *data;
-    CleanupCallback *next;
-    CleanupCallback **prev;
-};
-
-static CleanupCallback *cleanup_callbacks = nullptr;
-
-void*
-registerCleanup(void (*func)(void*), void *data)
-{
-    auto cb = new CleanupCallback{func, data, cleanup_callbacks,
-                                  &cleanup_callbacks};
-    if (cleanup_callbacks)
-        cleanup_callbacks->prev = &cb->next;
-    cleanup_callbacks = cb;
-    return cb;
-}
-
-void
-unregisterCleanup(void *_cb)
-{
-    auto cb = (CleanupCallback*)_cb;
-    if (cb->next)
-        cb->next->prev = cb->prev;
-    *cb->prev = cb->next;
-    delete cb;
-}
-
-static void
-runAllCleanups()
-{
-    while (cleanup_callbacks) {
-        auto func = cleanup_callbacks->func;
-        auto data = cleanup_callbacks->data;
-        func(data);
-    }
-}
-
 __attribute__((hot)) static void
 polishQuickControl(QObject *obj)
 {
@@ -164,7 +120,6 @@ StylePlugin::create(const QString &key)
 
 StylePlugin::~StylePlugin()
 {
-    runAllCleanups();
     QInternal::unregisterCallback(QInternal::EventNotifyCallback,
                                   qtcEventCallback);
 }
@@ -185,5 +140,4 @@ StylePlugin::init()
 #endif
         });
 }
-
 }
diff --git qt5/style/qtcurve_plugin.h qt5/style/qtcurve_plugin.h
index fc81107..95bbfed 100644
--- qt5/style/qtcurve_plugin.h
+++ qt5/style/qtcurve_plugin.h
@@ -36,10 +36,6 @@ private:
     void init();
     std::once_flag m_ref_flag;
 };
-
-void *registerCleanup(void (*func)(void*), void *data);
-void unregisterCleanup(void *handle);
-
 }
 
 #endif