diff --git a/resources/qml/InviteDialog.qml b/resources/qml/InviteDialog.qml
index 50287ad5c90a49dcbd01091b71ce10c1e364f4ad..2c0e15a7f6a1a52bf9cb5f268162917f055d141b 100644
--- a/resources/qml/InviteDialog.qml
+++ b/resources/qml/InviteDialog.qml
@@ -30,12 +30,12 @@ ApplicationWindow {
     }
 
     title: qsTr("Invite users to %1").arg(plainRoomName)
-    x: MainWindow.x + (MainWindow.width / 2) - (width / 2)
-    y: MainWindow.y + (MainWindow.height / 2) - (height / 2)
     height: 380
     width: 340
     palette: Nheko.colors
     color: Nheko.colors.window
+    flags: Qt.Dialog | Qt.WindowCloseButtonHint
+    Component.onCompleted: Nheko.reparent(inviteDialogRoot)
 
     Shortcut {
         sequence: "Ctrl+Enter"
diff --git a/resources/qml/MessageInput.qml b/resources/qml/MessageInput.qml
index 8bc8ac625eed9b398dd82ae440ef12542f342043..7fb0968419b576708919cd671d0720f230010a8a 100644
--- a/resources/qml/MessageInput.qml
+++ b/resources/qml/MessageInput.qml
@@ -7,7 +7,7 @@ import "./voip"
 import QtQuick 2.12
 import QtQuick.Controls 2.3
 import QtQuick.Layouts 1.2
-import QtQuick.Window 2.2
+import QtQuick.Window 2.13
 import im.nheko 1.0
 
 Rectangle {
diff --git a/resources/qml/MessageView.qml b/resources/qml/MessageView.qml
index 9ba5e2d0d509f7109cd178a0c11d91e1a03541fb..f3e15d846efe19d3eaabc43b1cb8b43d2d7b6a11 100644
--- a/resources/qml/MessageView.qml
+++ b/resources/qml/MessageView.qml
@@ -10,7 +10,7 @@ import QtGraphicalEffects 1.0
 import QtQuick 2.15
 import QtQuick.Controls 2.15
 import QtQuick.Layouts 1.2
-import QtQuick.Window 2.2
+import QtQuick.Window 2.13
 import im.nheko 1.0
 
 ScrollView {
diff --git a/resources/qml/RawMessageDialog.qml b/resources/qml/RawMessageDialog.qml
index 231e2f6d4e4d5f761bedcd3945f6764e72e40d16..e2a476cdd68a598715ad091ed571effbf54238da 100644
--- a/resources/qml/RawMessageDialog.qml
+++ b/resources/qml/RawMessageDialog.qml
@@ -11,13 +11,12 @@ ApplicationWindow {
 
     property alias rawMessage: rawMessageView.text
 
-    x: MainWindow.x + (MainWindow.width / 2) - (width / 2)
-    y: MainWindow.y + (MainWindow.height / 2) - (height / 2)
     height: 420
     width: 420
     palette: Nheko.colors
     color: Nheko.colors.window
-    flags: Qt.Tool | Qt.WindowStaysOnTopHint
+    flags: Qt.Tool | Qt.WindowStaysOnTopHint | Qt.WindowCloseButtonHint
+    Component.onCompleted: Nheko.reparent(rawMessageRoot)
 
     Shortcut {
         sequence: StandardKey.Cancel
@@ -40,6 +39,7 @@ ApplicationWindow {
             background: Rectangle {
                 color: Nheko.colors.base
             }
+
         }
 
     }
@@ -48,4 +48,5 @@ ApplicationWindow {
         standardButtons: DialogButtonBox.Ok
         onAccepted: rawMessageRoot.close()
     }
+
 }
diff --git a/resources/qml/ReadReceipts.qml b/resources/qml/ReadReceipts.qml
index 8869d8131564a224ed84159abd8b7a21c89707c3..9adbfd5c352515cc673647ee0f4c54d9fbfce9d2 100644
--- a/resources/qml/ReadReceipts.qml
+++ b/resources/qml/ReadReceipts.qml
@@ -13,15 +13,14 @@ ApplicationWindow {
     property ReadReceiptsProxy readReceipts
     property Room room
 
-    x: MainWindow.x + (MainWindow.width / 2) - (width / 2)
-    y: MainWindow.y + (MainWindow.height / 2) - (height / 2)
     height: 380
     width: 340
     minimumHeight: 380
     minimumWidth: headerTitle.width + 2 * Nheko.paddingMedium
     palette: Nheko.colors
     color: Nheko.colors.window
-    flags: Qt.Dialog
+    flags: Qt.Dialog | Qt.WindowCloseButtonHint
+    Component.onCompleted: Nheko.reparent(readReceiptsRoot)
 
     Shortcut {
         sequence: StandardKey.Cancel
diff --git a/resources/qml/RoomMembers.qml b/resources/qml/RoomMembers.qml
index 641a08be2aed2cce3763601c59ff2b7cc7191a55..447e6fd1edfdeefb8d0562da18d1551f32d61cad 100644
--- a/resources/qml/RoomMembers.qml
+++ b/resources/qml/RoomMembers.qml
@@ -6,7 +6,7 @@ import "./ui"
 import QtQuick 2.12
 import QtQuick.Controls 2.12
 import QtQuick.Layouts 1.12
-import QtQuick.Window 2.12
+import QtQuick.Window 2.13
 import im.nheko 1.0
 
 ApplicationWindow {
@@ -15,13 +15,13 @@ ApplicationWindow {
     property MemberList members
 
     title: qsTr("Members of %1").arg(members.roomName)
-    x: MainWindow.x + (MainWindow.width / 2) - (width / 2)
-    y: MainWindow.y + (MainWindow.height / 2) - (height / 2)
     height: 650
     width: 420
     minimumHeight: 420
     palette: Nheko.colors
     color: Nheko.colors.window
+    flags: Qt.Dialog | Qt.WindowCloseButtonHint
+    Component.onCompleted: Nheko.reparent(roomMembersRoot)
 
     Shortcut {
         sequence: StandardKey.Cancel
diff --git a/resources/qml/RoomSettings.qml b/resources/qml/RoomSettings.qml
index b8e527a5cbb04ab3d85731ee582cb6f31fa52d94..6ba080c4bb96e2cadc7bd6c3297b508a4797339f 100644
--- a/resources/qml/RoomSettings.qml
+++ b/resources/qml/RoomSettings.qml
@@ -7,7 +7,7 @@ import Qt.labs.platform 1.1 as Platform
 import QtQuick 2.15
 import QtQuick.Controls 2.3
 import QtQuick.Layouts 1.2
-import QtQuick.Window 2.3
+import QtQuick.Window 2.13
 import im.nheko 1.0
 
 ApplicationWindow {
@@ -15,14 +15,13 @@ ApplicationWindow {
 
     property var roomSettings
 
-    x: MainWindow.x + (MainWindow.width / 2) - (width / 2)
-    y: MainWindow.y + (MainWindow.height / 2) - (height / 2)
     minimumWidth: 420
     minimumHeight: 650
     palette: Nheko.colors
     color: Nheko.colors.window
     modality: Qt.NonModal
-    flags: Qt.Dialog
+    flags: Qt.Dialog | Qt.WindowCloseButtonHint
+    Component.onCompleted: Nheko.reparent(roomSettingsDialog)
     title: qsTr("Room Settings")
 
     Shortcut {
diff --git a/resources/qml/Root.qml b/resources/qml/Root.qml
index 70cfbda509aeea27e46245ad2bf97bc0c1e194d9..b229acda70c70fa7f5da9c958c478313313bd65b 100644
--- a/resources/qml/Root.qml
+++ b/resources/qml/Root.qml
@@ -9,10 +9,10 @@ import "./emoji"
 import "./voip"
 import Qt.labs.platform 1.1 as Platform
 import QtGraphicalEffects 1.0
-import QtQuick 2.9
-import QtQuick.Controls 2.5
+import QtQuick 2.15
+import QtQuick.Controls 2.15
 import QtQuick.Layouts 1.3
-import QtQuick.Window 2.2
+import QtQuick.Window 2.15
 import im.nheko 1.0
 import im.nheko.EmojiModel 1.0
 
diff --git a/resources/qml/TimelineRow.qml b/resources/qml/TimelineRow.qml
index 755ab5039c8daa2bdd0c1fe021ddd1da715908cd..6345f44ca971127ed5bcd4e108448c703bbf97ee 100644
--- a/resources/qml/TimelineRow.qml
+++ b/resources/qml/TimelineRow.qml
@@ -7,7 +7,7 @@ import "./emoji"
 import QtQuick 2.12
 import QtQuick.Controls 2.3
 import QtQuick.Layouts 1.2
-import QtQuick.Window 2.2
+import QtQuick.Window 2.13
 import im.nheko 1.0
 
 Item {
diff --git a/resources/qml/TimelineView.qml b/resources/qml/TimelineView.qml
index e4036eb7668ca603fd5cdc17951b7b66878e07b4..6fc9d51bba88c19346d34f4dd0ec1331d7c5dba6 100644
--- a/resources/qml/TimelineView.qml
+++ b/resources/qml/TimelineView.qml
@@ -13,7 +13,7 @@ import QtGraphicalEffects 1.0
 import QtQuick 2.9
 import QtQuick.Controls 2.5
 import QtQuick.Layouts 1.3
-import QtQuick.Window 2.2
+import QtQuick.Window 2.13
 import im.nheko 1.0
 import im.nheko.EmojiModel 1.0
 
diff --git a/resources/qml/UserProfile.qml b/resources/qml/UserProfile.qml
index d138060bf8649112a675e70a19d762368da8c73a..767d23173a81da598e5a2d7514d9d38ba1e27a47 100644
--- a/resources/qml/UserProfile.qml
+++ b/resources/qml/UserProfile.qml
@@ -4,19 +4,20 @@
 
 import "./device-verification"
 import "./ui"
-import QtQuick 2.9
-import QtQuick.Controls 2.3
+import QtQuick 2.15
+import QtQuick.Controls 2.15
 import QtQuick.Layouts 1.2
-import QtQuick.Window 2.3
+import QtQuick.Window 2.13
 import im.nheko 1.0
 
 ApplicationWindow {
+    // this does not work in ApplicationWindow, just in Window
+    //transientParent: Nheko.mainwindow()
+
     id: userProfileDialog
 
     property var profile
 
-    x: MainWindow.x + (MainWindow.width / 2) - (width / 2)
-    y: MainWindow.y + (MainWindow.height / 2) - (height / 2)
     height: 650
     width: 420
     minimumHeight: 420
@@ -24,7 +25,8 @@ ApplicationWindow {
     color: Nheko.colors.window
     title: profile.isGlobalUserProfile ? qsTr("Global User Profile") : qsTr("Room User Profile")
     modality: Qt.NonModal
-    flags: Qt.Dialog
+    flags: Qt.Dialog | Qt.WindowCloseButtonHint
+    Component.onCompleted: Nheko.reparent(userProfileDialog)
 
     Shortcut {
         sequence: StandardKey.Cancel
diff --git a/resources/qml/delegates/Reply.qml b/resources/qml/delegates/Reply.qml
index 75e3d617d79fc97036dd535e1e36a96c50cb0b9f..3e02a940cff5df7c83e8d0b6c87b2908a493b0c4 100644
--- a/resources/qml/delegates/Reply.qml
+++ b/resources/qml/delegates/Reply.qml
@@ -5,7 +5,7 @@
 import QtQuick 2.12
 import QtQuick.Controls 2.3
 import QtQuick.Layouts 1.2
-import QtQuick.Window 2.2
+import QtQuick.Window 2.13
 import im.nheko 1.0
 
 Item {
diff --git a/resources/qml/device-verification/DeviceVerification.qml b/resources/qml/device-verification/DeviceVerification.qml
index e2c66c5aca1d8fb2f277d9751b1175d5180483a8..8e0271d689de8457ff1782116eb2199a6d568c60 100644
--- a/resources/qml/device-verification/DeviceVerification.qml
+++ b/resources/qml/device-verification/DeviceVerification.qml
@@ -4,7 +4,7 @@
 
 import QtQuick 2.10
 import QtQuick.Controls 2.3
-import QtQuick.Window 2.10
+import QtQuick.Window 2.13
 import im.nheko 1.0
 
 ApplicationWindow {
@@ -14,13 +14,12 @@ ApplicationWindow {
 
     onClosing: TimelineManager.removeVerificationFlow(flow)
     title: stack.currentItem.title
-    flags: Qt.Dialog
     modality: Qt.NonModal
     palette: Nheko.colors
     height: stack.implicitHeight
     width: stack.implicitWidth
-    x: MainWindow.x + (MainWindow.width / 2) - (width / 2)
-    y: MainWindow.y + (MainWindow.height / 2) - (height / 2)
+    flags: Qt.Dialog | Qt.WindowCloseButtonHint
+    Component.onCompleted: Nheko.reparent(dialog)
 
     StackView {
         id: stack
diff --git a/resources/qml/dialogs/ImagePackSettingsDialog.qml b/resources/qml/dialogs/ImagePackSettingsDialog.qml
index c4b4a8854c2b81f8e07dead52df5281bc753d08e..3d830bf73c31747d8d9a4676f10500602d3f1225 100644
--- a/resources/qml/dialogs/ImagePackSettingsDialog.qml
+++ b/resources/qml/dialogs/ImagePackSettingsDialog.qml
@@ -20,14 +20,13 @@ ApplicationWindow {
     readonly property int stickerDimPad: 128 + Nheko.paddingSmall
 
     title: qsTr("Image pack settings")
-    x: MainWindow.x + (MainWindow.width / 2) - (width / 2)
-    y: MainWindow.y + (MainWindow.height / 2) - (height / 2)
     height: 400
     width: 600
     palette: Nheko.colors
     color: Nheko.colors.base
     modality: Qt.NonModal
-    flags: Qt.Dialog
+    flags: Qt.Dialog | Qt.WindowCloseButtonHint
+    Component.onCompleted: Nheko.reparent(win)
 
     AdaptiveLayout {
         id: adaptiveView
@@ -202,6 +201,12 @@ ApplicationWindow {
                 color: Nheko.colors.window
 
                 ColumnLayout {
+                    //Button {
+                    //    Layout.alignment: Qt.AlignHCenter
+                    //    text: qsTr("Edit")
+                    //    enabled: currentPack.canEdit
+                    //}
+
                     id: packinfo
 
                     property string packName: currentPack ? currentPack.packname : ""
diff --git a/resources/qml/dialogs/InputDialog.qml b/resources/qml/dialogs/InputDialog.qml
index 134b78a3c3b5b672bcb8073aa976989b938c5a2f..e0f1785170d9ec131e6a654ba9657769c0c3a59a 100644
--- a/resources/qml/dialogs/InputDialog.qml
+++ b/resources/qml/dialogs/InputDialog.qml
@@ -16,6 +16,7 @@ ApplicationWindow {
 
     modality: Qt.NonModal
     flags: Qt.Dialog
+    Component.onCompleted: Nheko.reparent(inputDialog)
     width: 350
     height: fontMetrics.lineSpacing * 7
 
diff --git a/src/ui/NhekoGlobalObject.cpp b/src/ui/NhekoGlobalObject.cpp
index fea10839343b968745e5f8efcef61f2241d37dc5..9e0d706bd35d61dae522567b7b78b5af0b44a6f5 100644
--- a/src/ui/NhekoGlobalObject.cpp
+++ b/src/ui/NhekoGlobalObject.cpp
@@ -6,6 +6,7 @@
 
 #include <QDesktopServices>
 #include <QUrl>
+#include <QWindow>
 
 #include "Cache_p.h"
 #include "ChatPage.h"
@@ -140,3 +141,9 @@ Nheko::openJoinRoomDialog() const
         MainWindow::instance()->openJoinRoomDialog(
           [](const QString &room_id) { ChatPage::instance()->joinRoom(room_id); });
 }
+
+void
+Nheko::reparent(QWindow *win) const
+{
+        win->setTransientParent(MainWindow::instance()->windowHandle());
+}
diff --git a/src/ui/NhekoGlobalObject.h b/src/ui/NhekoGlobalObject.h
index cfe982c5f5e3790f38c34b460331d47fce855330..d4d119dc6be062853b8c2f32a9d13dd52792073f 100644
--- a/src/ui/NhekoGlobalObject.h
+++ b/src/ui/NhekoGlobalObject.h
@@ -11,6 +11,8 @@
 #include "Theme.h"
 #include "UserProfile.h"
 
+class QWindow;
+
 class Nheko : public QObject
 {
         Q_OBJECT
@@ -49,6 +51,7 @@ public:
         Q_INVOKABLE void openLogoutDialog() const;
         Q_INVOKABLE void openCreateRoomDialog() const;
         Q_INVOKABLE void openJoinRoomDialog() const;
+        Q_INVOKABLE void reparent(QWindow *win) const;
 
 public slots:
         void updateUserProfile();