diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp
index 9ba2cc8732135f4d03f136b1b969bdfc35f2a030..aae9271dae3383c2e1a1b5a1fd5e6ca432bf6644 100644
--- a/src/ChatPage.cpp
+++ b/src/ChatPage.cpp
@@ -253,6 +253,7 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent)
           this, &ChatPage::updateGroupsInfo, communitiesList_, &CommunitiesList::setCommunities);
 
         connect(this, &ChatPage::leftRoom, this, &ChatPage::removeRoom);
+        connect(this, &ChatPage::newRoom, this, &ChatPage::changeRoom, Qt::QueuedConnection);
         connect(this, &ChatPage::notificationsRetrieved, this, &ChatPage::sendNotifications);
         connect(this,
                 &ChatPage::highlightedNotifsRetrieved,
@@ -967,8 +968,9 @@ ChatPage::createRoom(const mtx::requests::CreateRoom &req)
                           return;
                   }
 
-                  emit showNotification(
-                    tr("Room %1 created.").arg(QString::fromStdString(res.room_id.to_string())));
+                  QString newRoomId = QString::fromStdString(res.room_id.to_string());
+                  emit showNotification(tr("Room %1 created.").arg(newRoomId));
+                  emit newRoom(newRoomId);
           });
 }
 
@@ -989,6 +991,13 @@ ChatPage::leaveRoom(const QString &room_id)
           });
 }
 
+void
+ChatPage::changeRoom(const QString &room_id)
+{
+        view_manager_->setHistoryView(room_id);
+        room_list_->highlightSelectedRoom(room_id);
+}
+
 void
 ChatPage::inviteUser(QString userid, QString reason)
 {
diff --git a/src/ChatPage.h b/src/ChatPage.h
index 917bd7859cff61c7a6298cec78ac32ce7323924c..dc6b82995aca6d4734c912fce527f9c662c96a4c 100644
--- a/src/ChatPage.h
+++ b/src/ChatPage.h
@@ -154,6 +154,7 @@ signals:
         void tryInitialSyncCb();
         void newSyncResponse(const mtx::responses::Sync &res);
         void leftRoom(const QString &room_id);
+        void newRoom(const QString &room_id);
 
         void initializeRoomList(QMap<QString, RoomInfo>);
         void initializeViews(const mtx::responses::Rooms &rooms);
@@ -201,6 +202,7 @@ signals:
 private slots:
         void logout();
         void removeRoom(const QString &room_id);
+        void changeRoom(const QString &room_id);
         void dropToLoginPage(const QString &msg);
 
         void handleSyncResponse(const mtx::responses::Sync &res);