diff --git a/CMakeLists.txt b/CMakeLists.txt
index 88a4bde1b0a411940727a15bab3fea4c0e168761..a6af90d64f7826847a28c4638dbd6f3989721bde 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -576,7 +576,7 @@ if(USE_BUNDLED_MTXCLIENT)
 	FetchContent_Declare(
 		MatrixClient
 		GIT_REPOSITORY https://github.com/Nheko-Reborn/mtxclient.git
-		GIT_TAG        754800d226f71864d8b6925e47542d509333e998
+		GIT_TAG        a6ca9714490ad0bb0c032e00be4f7d7ebd683378
 		)
 	set(BUILD_LIB_EXAMPLES OFF CACHE INTERNAL "")
 	set(BUILD_LIB_TESTS OFF CACHE INTERNAL "")
diff --git a/io.github.NhekoReborn.Nheko.yaml b/io.github.NhekoReborn.Nheko.yaml
index 44350c6da5b93583398cf1862a1a0b4fa25bdc53..3d4880006ff55a0cd200884cb072630175fdf91b 100644
--- a/io.github.NhekoReborn.Nheko.yaml
+++ b/io.github.NhekoReborn.Nheko.yaml
@@ -203,7 +203,7 @@ modules:
     buildsystem: cmake-ninja
     name: mtxclient
     sources:
-      - commit: 754800d226f71864d8b6925e47542d509333e998
+      - commit: a6ca9714490ad0bb0c032e00be4f7d7ebd683378
         #tag: v0.7.0
         type: git
         url: https://github.com/Nheko-Reborn/mtxclient.git
diff --git a/src/Cache.cpp b/src/Cache.cpp
index c651b61bffa3f9f6e849c54dd2b7f774b3ff293e..90c04e6199cb548ac0c4060dcb95ff47d0615a1c 100644
--- a/src/Cache.cpp
+++ b/src/Cache.cpp
@@ -1728,8 +1728,17 @@ Cache::saveState(const mtx::responses::Sync &res)
                 Receipts receipts;
 
                 for (const auto &[event_id, userReceipts] : receiptsEv->content.receipts) {
-                    for (const auto &[user_id, receipt] : userReceipts.users) {
-                        receipts[event_id][user_id] = receipt.ts;
+                    if (auto r = userReceipts.find(mtx::events::ephemeral::Receipt::Read);
+                        r != userReceipts.end()) {
+                        for (const auto &[user_id, receipt] : r->second.users) {
+                            receipts[event_id][user_id] = receipt.ts;
+                        }
+                    }
+                    if (userReceipts.count(mtx::events::ephemeral::Receipt::ReadPrivate)) {
+                        auto ts = userReceipts.at(mtx::events::ephemeral::Receipt::ReadPrivate)
+                                    .users.at(local_user_id);
+                        if (ts.ts != 0)
+                            receipts[event_id][local_user_id] = ts.ts;
                     }
                 }
                 updateReadReceipt(txn, room.first, receipts);
@@ -1761,12 +1770,15 @@ Cache::saveState(const mtx::responses::Sync &res)
                 std::vector<QString> receipts;
 
                 for (const auto &[event_id, userReceipts] : receiptsEv->content.receipts) {
-                    for (const auto &[user_id, receipt] : userReceipts.users) {
-                        (void)receipt;
-
-                        if (user_id != local_user_id) {
-                            receipts.push_back(QString::fromStdString(event_id));
-                            break;
+                    if (auto r = userReceipts.find(mtx::events::ephemeral::Receipt::Read);
+                        r != userReceipts.end()) {
+                        for (const auto &[user_id, receipt] : r->second.users) {
+                            (void)receipt;
+
+                            if (user_id != local_user_id) {
+                                receipts.push_back(QString::fromStdString(event_id));
+                                break;
+                            }
                         }
                     }
                 }
diff --git a/src/UserSettingsPage.cpp b/src/UserSettingsPage.cpp
index 932c3bebd890370440ef0b0f75ec41688bb43f34..025d66815b9e33aba4de55298b01c3ef15c06a37 100644
--- a/src/UserSettingsPage.cpp
+++ b/src/UserSettingsPage.cpp
@@ -1172,7 +1172,9 @@ UserSettingsModel::data(const QModelIndex &index, int role) const
               "Show buttons to quickly reply, react or access additional options next to each "
               "message.");
         case ReadReceipts:
-            return tr("Show if your message was read.\nStatus is displayed next to timestamps.");
+            return tr(
+              "Show if your message was read.\nStatus is displayed next to timestamps.\nWarning: "
+              "If your homeserver does not support this, your rooms will never be marked as read!");
         case DesktopNotifications:
             return tr("Notify about received messages when the client is not currently focused.");
         case AlertOnNotification: