diff --git a/ksmserver/org.kde.KWin.Session.xml b/ksmserver/org.kde.KWin.Session.xml
index e0f303826..8ecf3215e 100644
--- a/ksmserver/org.kde.KWin.Session.xml
+++ b/ksmserver/org.kde.KWin.Session.xml
@@ -19,5 +19,8 @@
+
+
+
diff --git a/startkde/plasma-shutdown/CMakeLists.txt b/startkde/plasma-shutdown/CMakeLists.txt
index 2393d7363..86f401e7e 100644
--- a/startkde/plasma-shutdown/CMakeLists.txt
+++ b/startkde/plasma-shutdown/CMakeLists.txt
@@ -8,6 +8,7 @@ ecm_qt_declare_logging_category(plasma_shutdown_SRCS HEADER debug.h IDENTIFIER
qt5_add_dbus_adaptor(plasma_shutdown_SRCS org.kde.Shutdown.xml shutdown.h Shutdown)
qt5_add_dbus_interface(plasma_shutdown_SRCS org.kde.Shutdown.xml shutdown_interface)
qt5_add_dbus_interface( plasma_shutdown_SRCS ../../ksmserver/org.kde.KSMServerInterface.xml ksmserver_interface )
+qt5_add_dbus_interface( plasma_shutdown_SRCS ../../ksmserver/org.kde.KWin.Session.xml kwin_interface )
add_executable(plasma-shutdown ${plasma_shutdown_SRCS})
diff --git a/startkde/plasma-shutdown/shutdown.cpp b/startkde/plasma-shutdown/shutdown.cpp
index 2ed40795d..ad21b622a 100644
--- a/startkde/plasma-shutdown/shutdown.cpp
+++ b/startkde/plasma-shutdown/shutdown.cpp
@@ -9,6 +9,7 @@
#include "sessionmanagementbackend.h"
#include "ksmserver_interface.h"
+#include "kwin_interface.h"
#include "debug.h"
@@ -66,6 +67,12 @@ void Shutdown::logoutCancelled()
void Shutdown::logoutComplete() {
runShutdownScripts();
+
+ // technically this isn't needed in the systemd managed mode, but it seems harmless for now. Guard if it becomes an issue
+ OrgKdeKWinSessionInterface kwinInterface(QStringLiteral("org.kde.KWin"), QStringLiteral("/Session"), QDBusConnection::sessionBus());
+ QDBusPendingReply<> reply = kwinInterface.quit();
+ reply.waitForFinished();
+
if (m_shutdownType == KWorkSpace::ShutdownTypeHalt) {
SessionBackend::self()->shutdown();
} else if (m_shutdownType == KWorkSpace::ShutdownTypeReboot) {