diff --git a/resources/qml/RoomList.qml b/resources/qml/RoomList.qml
index ac4f8c3a4515363c8bfbea547d1146bcb60b6cf7..615c67faf571ba6cbd0dd9d8fd3fff05d1851111 100644
--- a/resources/qml/RoomList.qml
+++ b/resources/qml/RoomList.qml
@@ -546,66 +546,73 @@ Page {
                     visible: !collapsed
                     width: roomItem.width - avatar.width
 
-                    NotificationBubble {
-                        id: notificationBubble
-
-                        Layout.alignment: Qt.AlignRight
-                        Layout.leftMargin: Nheko.paddingSmall
-                        Layout.preferredHeight: implicitHeight
-                        Layout.preferredWidth: implicitWidth
-                        bubbleBackgroundColor: roomItem.bubbleBackground
-                        bubbleTextColor: roomItem.bubbleText
-                        hasLoudNotification: roomItem.hasLoudNotification
-                        mayBeVisible: !collapsed && (isSpace ? Settings.spaceNotifications : true)
-                        notificationCount: roomItem.notificationCount
-                        parent: isSpace ? titleRow : subtextRow
-                    }
-                    RowLayout {
+                    Item {
                         id: titleRow
 
                         Layout.alignment: Qt.AlignTop
-                        Layout.preferredWidth: roomItem.width - avatar.width
-                        spacing: Nheko.paddingSmall
-
-                        Item {
-                            Layout.alignment: Qt.AlignBottom
-                            Layout.fillWidth: true
-
-                            ElidedLabel {
-                                anchors.bottom: parent.bottom
-                                color: roomItem.importantText
-                                elideWidth: parent.width
-                                fullText: TimelineManager.htmlEscape(roomName)
-                                textFormat: Text.RichText
-                            }
+                        Layout.fillWidth: true
+                        Layout.preferredHeight: subtitleText.implicitHeight
+
+                        ElidedLabel {
+                            id: titleText
+
+                            anchors.left: parent.left
+                            color: roomItem.importantText
+                            elideWidth: parent.width - (timestamp.visible ? timestamp.implicitWidth : 0) - (spaceNotificationBubble.visible ? spaceNotificationBubble.implicitWidth : 0)
+                            fullText: TimelineManager.htmlEscape(roomName)
+                            textFormat: Text.RichText
                         }
                         Label {
                             id: timestamp
 
-                            Layout.alignment: Qt.AlignRight | Qt.AlignBottom
+                            anchors.baseline: titleText.baseline
+                            anchors.right: parent.right
                             color: roomItem.unimportantText
                             font.pixelSize: fontMetrics.font.pixelSize * 0.9
                             text: time
                             visible: !isInvite && !isSpace
                         }
+                        NotificationBubble {
+                            id: spaceNotificationBubble
+
+                            anchors.right: parent.right
+                            bubbleBackgroundColor: roomItem.bubbleBackground
+                            bubbleTextColor: roomItem.bubbleText
+                            hasLoudNotification: roomItem.hasLoudNotification
+                            mayBeVisible: !collapsed && (isSpace ? Settings.spaceNotifications : false)
+                            notificationCount: roomItem.notificationCount
+                            parent: isSpace ? titleRow : subtextRow
+                        }
                     }
-                    RowLayout {
+                    Item {
                         id: subtextRow
 
                         Layout.alignment: Qt.AlignBottom
                         Layout.fillWidth: true
-                        height: visible ? 0 : undefined
-                        spacing: 0
+                        Layout.preferredHeight: subtitleText.implicitHeight
                         visible: !isSpace
 
                         ElidedLabel {
-                            Layout.fillWidth: true
+                            id: subtitleText
+
+                            anchors.left: parent.left
                             color: roomItem.unimportantText
-                            elideWidth: width
+                            elideWidth: subtextRow.width - (subtextNotificationBubble.visible ? subtextNotificationBubble.implicitWidth : 0)
                             font.pixelSize: fontMetrics.font.pixelSize * 0.9
                             fullText: TimelineManager.htmlEscape(lastMessage)
                             textFormat: Text.RichText
                         }
+                        NotificationBubble {
+                            id: subtextNotificationBubble
+
+                            anchors.baseline: subtitleText.baseline
+                            anchors.right: parent.right
+                            bubbleBackgroundColor: roomItem.bubbleBackground
+                            bubbleTextColor: roomItem.bubbleText
+                            hasLoudNotification: roomItem.hasLoudNotification
+                            mayBeVisible: !collapsed
+                            notificationCount: roomItem.notificationCount
+                        }
                     }
                 }
             }
diff --git a/resources/qml/components/NotificationBubble.qml b/resources/qml/components/NotificationBubble.qml
index f0a526d033099029445fbcdfb6fb2924263ecb4d..d4838e9259390aba2e58e1c763e74b64d53bde27 100644
--- a/resources/qml/components/NotificationBubble.qml
+++ b/resources/qml/components/NotificationBubble.qml
@@ -15,6 +15,7 @@ Rectangle {
     required property color bubbleTextColor
     property bool mayBeVisible: true
     property alias font: notificationBubbleText.font
+    baselineOffset: notificationBubbleText.baseline - bubbleRoot.top
 
     visible: mayBeVisible && notificationCount > 0
     implicitHeight: notificationBubbleText.height + Nheko.paddingMedium