diff --git a/CMakeLists.txt b/CMakeLists.txt
index 05e5438049f3d9dfef7aec8396ce34a8f6afe9c3..ff0d6a1fa8d1099cada3a4b1621ce1310957ed8d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -358,7 +358,7 @@ if(USE_BUNDLED_MTXCLIENT)
 	FetchContent_Declare(
 		MatrixClient
 		GIT_REPOSITORY https://github.com/Nheko-Reborn/mtxclient.git
-		GIT_TAG        fee5298f068394958c2de935836a2c145f273906
+		GIT_TAG        004d4203ceb441239aafb17e1340cd063139d029
 		)
 	set(BUILD_LIB_EXAMPLES OFF CACHE INTERNAL "")
 	set(BUILD_LIB_TESTS OFF CACHE INTERNAL "")
diff --git a/io.github.NhekoReborn.Nheko.json b/io.github.NhekoReborn.Nheko.json
index 453d6c8a7a5fc4c72a39106bd50394fe8744c150..c014aaead412ad924ef09acbcc3ccf8b12e10e14 100644
--- a/io.github.NhekoReborn.Nheko.json
+++ b/io.github.NhekoReborn.Nheko.json
@@ -220,7 +220,7 @@
       "name": "mtxclient",
       "sources": [
         {
-          "commit": "fee5298f068394958c2de935836a2c145f273906",
+          "commit": "004d4203ceb441239aafb17e1340cd063139d029",
           "type": "git",
           "url": "https://github.com/Nheko-Reborn/mtxclient.git"
         }
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);
diff --git a/src/LoginPage.cpp b/src/LoginPage.cpp
index 26a170c5f94cbccaaf7eadcd183ae45f0a7654cb..cd54431db1eedae03864ce1df550183e69bc62a3 100644
--- a/src/LoginPage.cpp
+++ b/src/LoginPage.cpp
@@ -192,6 +192,11 @@ LoginPage::LoginPage(QWidget *parent)
         connect(sso_login_button_, &RaisedButton::clicked, this, [this]() {
                 onLoginButtonClicked(LoginMethod::SSO);
         });
+        connect(this,
+                &LoginPage::showErrorMessage,
+                this,
+                static_cast<void (LoginPage::*)(QLabel *, const QString &)>(&LoginPage::showError),
+                Qt::QueuedConnection);
         connect(matrixid_input_, SIGNAL(returnPressed()), login_button_, SLOT(click()));
         connect(password_input_, SIGNAL(returnPressed()), login_button_, SLOT(click()));
         connect(deviceName_, SIGNAL(returnPressed()), login_button_, SLOT(click()));
@@ -422,8 +427,8 @@ LoginPage::onLoginButtonClicked(LoginMethod loginMethod)
                                                           : deviceName_->text().toStdString(),
                   [this](const mtx::responses::Login &res, mtx::http::RequestErr err) {
                           if (err) {
-                                  showError(error_label_,
-                                            QString::fromStdString(err->matrix_error.error));
+                                  showErrorMessage(error_label_,
+                                                   QString::fromStdString(err->matrix_error.error));
                                   emit errorOccurred();
                                   return;
                           }
@@ -448,7 +453,7 @@ LoginPage::onLoginButtonClicked(LoginMethod loginMethod)
                         http::client()->login(
                           req, [this](const mtx::responses::Login &res, mtx::http::RequestErr err) {
                                   if (err) {
-                                          showError(
+                                          showErrorMessage(
                                             error_label_,
                                             QString::fromStdString(err->matrix_error.error));
                                           emit errorOccurred();
@@ -467,7 +472,7 @@ LoginPage::onLoginButtonClicked(LoginMethod loginMethod)
                         sso->deleteLater();
                 });
                 connect(sso, &SSOHandler::ssoFailed, this, [this, sso]() {
-                        showError(error_label_, tr("SSO login failed"));
+                        showErrorMessage(error_label_, tr("SSO login failed"));
                         emit errorOccurred();
                         sso->deleteLater();
                 });
diff --git a/src/LoginPage.h b/src/LoginPage.h
index 2341c0ce6c9d26bae47ab5cfcb1d455f4c532098..f6428cbba0405d5bde4e69ef1e8c23dbbb3b766b 100644
--- a/src/LoginPage.h
+++ b/src/LoginPage.h
@@ -59,6 +59,7 @@ signals:
         void versionOkCb(bool passwordSupported, bool ssoSupported);
 
         void loginOk(const mtx::responses::Login &res);
+        void showErrorMessage(QLabel *label, const QString &msg);
 
 protected:
         void paintEvent(QPaintEvent *event) override;
diff --git a/src/RegisterPage.cpp b/src/RegisterPage.cpp
index 44ad7a3d52fb554303024fa49668202b5654edb7..004d5b9891618294bc26f984f9e06af9338129e4 100644
--- a/src/RegisterPage.cpp
+++ b/src/RegisterPage.cpp
@@ -277,6 +277,7 @@ RegisterPage::RegisterPage(QWidget *parent)
                             if (!err) {
                                     http::client()->set_user(res.user_id);
                                     http::client()->set_access_token(res.access_token);
+                                    http::client()->set_device_id(res.device_id);
 
                                     emit registerOk();
                                     return;