diff --git a/resources/qml/RoomList.qml b/resources/qml/RoomList.qml
index a0009174ff582a0664aad83f1b09c06d0297d1e3..fcb2644e221b90f95927d313b6ce59ee9f756ada 100644
--- a/resources/qml/RoomList.qml
+++ b/resources/qml/RoomList.qml
@@ -143,6 +143,8 @@ Page {
             required property int notificationCount
             required property bool hasLoudNotification
             required property bool hasUnreadMessages
+            required property int roomMemberCount
+            required property string directChatAvatarMxid
 
             color: background
             height: avatarSize + 2 * Nheko.paddingMedium
@@ -237,6 +239,7 @@ Page {
                     width: avatarSize
                     url: avatarUrl.replace("mxc://", "image://MxcImage/")
                     displayName: roomName
+                    userid: roomMemberCount < 3 ?  directChatAvatarMxid : roomId
 
                     Rectangle {
                         id: collapsedNotificationBubble
diff --git a/resources/qml/TopBar.qml b/resources/qml/TopBar.qml
index 7f67c028dc4bf94d0361f335acb7c14b6a2a90b5..0b50f7c67798fe65e151b06760a29cab1c963553 100644
--- a/resources/qml/TopBar.qml
+++ b/resources/qml/TopBar.qml
@@ -65,6 +65,7 @@ Rectangle {
             width: Nheko.avatarSize
             height: Nheko.avatarSize
             url: avatarUrl.replace("mxc://", "image://MxcImage/")
+            userid: room.roomMemberCount < 3 ? room.directChatAvatarMxid : room.roomId
             displayName: roomName
             onClicked: {
                 if (room)
diff --git a/src/timeline/RoomlistModel.cpp b/src/timeline/RoomlistModel.cpp
index 942a4b05c61fa3aa6002fe4df436d5af8daa925c..88411236d1b70729373f155176d4970bc9349f40 100644
--- a/src/timeline/RoomlistModel.cpp
+++ b/src/timeline/RoomlistModel.cpp
@@ -76,6 +76,8 @@ RoomlistModel::roleNames() const
           {IsSpace, "isSpace"},
           {Tags, "tags"},
           {ParentSpaces, "parentSpaces"},
+          {RoomMemberCount, "roomMemberCount"},
+          {DirectChatAvatarMxid, "directChatAvatarMxid"},
         };
 }
 
@@ -129,6 +131,10 @@ RoomlistModel::data(const QModelIndex &index, int role) const
                                         list.push_back(QString::fromStdString(t));
                                 return list;
                         }
+                        case Roles::RoomMemberCount:
+                                return room->roomMemberCount();
+                        case Roles::DirectChatAvatarMxid:
+                                return room->directChatAvatarMxid();
                         default:
                                 return {};
                         }
diff --git a/src/timeline/RoomlistModel.h b/src/timeline/RoomlistModel.h
index 6ac6da18694ace471402caf4f3976744580ef6e1..aca74ea197d4dbe656177e4a768ff04402d44a99 100644
--- a/src/timeline/RoomlistModel.h
+++ b/src/timeline/RoomlistModel.h
@@ -65,6 +65,8 @@ public:
                 IsPreviewFetched,
                 Tags,
                 ParentSpaces,
+                RoomMemberCount,
+                DirectChatAvatarMxid,
         };
 
         RoomlistModel(TimelineViewManager *parent = nullptr);
diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp
index 78409e1dcd849687d9e548c1de732aeedb666051..4daf44f3e28f3a9e99d1d0843c68b3f806b4bb60 100644
--- a/src/timeline/TimelineModel.cpp
+++ b/src/timeline/TimelineModel.cpp
@@ -2073,3 +2073,16 @@ TimelineModel::roomMemberCount() const
 {
         return (int)cache::client()->memberCount(room_id_.toStdString());
 }
+
+QString
+TimelineModel::directChatAvatarMxid() const
+{
+        if (roomMemberCount() < 3) {
+                QString id;
+                for (auto member : cache::getMembers(room_id_.toStdString()))
+                        if (member.user_id != UserSettings::instance()->userId())
+                                id = member.user_id;
+                return id;
+        } else
+                return "";
+}
diff --git a/src/timeline/TimelineModel.h b/src/timeline/TimelineModel.h
index 417fbb7fbf9d5739837e6663a2c93d9b71b2c6f8..8c34fc1da57a5d78fe1909a4ebe03dd44cc5e1a9 100644
--- a/src/timeline/TimelineModel.h
+++ b/src/timeline/TimelineModel.h
@@ -176,6 +176,8 @@ class TimelineModel : public QAbstractListModel
         Q_PROPERTY(bool isEncrypted READ isEncrypted NOTIFY encryptionChanged)
         Q_PROPERTY(bool isSpace READ isSpace CONSTANT)
         Q_PROPERTY(int trustlevel READ trustlevel NOTIFY trustlevelChanged)
+        Q_PROPERTY(
+          QString directChatAvatarMxid READ directChatAvatarMxid NOTIFY directChatAvatarMxidChanged)
         Q_PROPERTY(InputBar *input READ input CONSTANT)
         Q_PROPERTY(Permissions *permissions READ permissions NOTIFY permissionsChanged)
 
@@ -292,6 +294,7 @@ public:
         bool isEncrypted() const { return isEncrypted_; }
         crypto::Trust trustlevel() const;
         int roomMemberCount() const;
+        QString directChatAvatarMxid() const;
 
         std::optional<mtx::events::collections::TimelineEvents> eventById(const QString &id)
         {
@@ -391,6 +394,7 @@ signals:
         void roomTopicChanged();
         void roomAvatarUrlChanged();
         void roomMemberCountChanged();
+        void directChatAvatarMxidChanged();
         void permissionsChanged();
         void forwardToRoom(mtx::events::collections::TimelineEvents *e, QString roomId);