diff --git a/resources/qml/ReadReceipts.qml b/resources/qml/ReadReceipts.qml
index b3bca9dbcc9091f7ba78bfb6bf9eb2296e4bfa14..0756a2e78eac7be04476b1f6ee604947e64c8493 100644
--- a/resources/qml/ReadReceipts.qml
+++ b/resources/qml/ReadReceipts.qml
@@ -118,7 +118,6 @@ ApplicationWindow {
     footer: DialogButtonBox {
         standardButtons: DialogButtonBox.Ok
         onAccepted: readReceiptsRoot.close()
-
     }
 
 }
diff --git a/src/ReadReceiptsModel.cpp b/src/ReadReceiptsModel.cpp
index 8ee9cf45bcf0be570796a74c50ae178d1c633a6f..8a371922db18f65c41f1b0aff24745bc2d1b2da7 100644
--- a/src/ReadReceiptsModel.cpp
+++ b/src/ReadReceiptsModel.cpp
@@ -7,6 +7,7 @@
 #include <QLocale>
 
 #include "Cache.h"
+#include "Cache_p.h"
 #include "Logging.h"
 #include "Utils.h"
 
@@ -16,10 +17,26 @@ ReadReceiptsModel::ReadReceiptsModel(QString event_id, QString room_id, QObject
   , room_id_{room_id}
 {
         try {
-                addUsers(cache::readReceipts(event_id, room_id));
+                addUsers(cache::readReceipts(event_id_, room_id_));
         } catch (const lmdb::error &) {
                 nhlog::db()->warn("failed to retrieve read receipts for {} {}",
-                                  event_id.toStdString(),
+                                  event_id_.toStdString(),
+                                  room_id_.toStdString());
+
+                return;
+        }
+
+        connect(cache::client(), &Cache::newReadReceipts, this, &ReadReceiptsModel::update);
+}
+
+void
+ReadReceiptsModel::update()
+{
+        try {
+                addUsers(cache::readReceipts(event_id_, room_id_));
+        } catch (const lmdb::error &) {
+                nhlog::db()->warn("failed to retrieve read receipts for {} {}",
+                                  event_id_.toStdString(),
                                   room_id_.toStdString());
 
                 return;
@@ -59,7 +76,9 @@ void
 ReadReceiptsModel::addUsers(
   const std::multimap<uint64_t, std::string, std::greater<uint64_t>> &users)
 {
-        beginInsertRows(QModelIndex{}, readReceipts_.length(), users.size() - 1);
+        auto oldLen = readReceipts_.length();
+
+        beginInsertRows(QModelIndex{}, oldLen, users.size() - 1);
 
         readReceipts_.clear();
         for (const auto &user : users) {
@@ -74,6 +93,8 @@ ReadReceiptsModel::addUsers(
                   });
 
         endInsertRows();
+
+        emit dataChanged(index(0), index(oldLen - 1));
 }
 
 QString
diff --git a/src/ReadReceiptsModel.h b/src/ReadReceiptsModel.h
index d7ff5fb8db8adec13e0c401848c0b1880beb349d..f2e39f883769c06446656d27f3ef27ea4ad0ec23 100644
--- a/src/ReadReceiptsModel.h
+++ b/src/ReadReceiptsModel.h
@@ -41,6 +41,7 @@ public:
 
 public slots:
         void addUsers(const std::multimap<uint64_t, std::string, std::greater<uint64_t>> &users);
+        void update();
 
 private:
         QString dateFormat(const QDateTime &then) const;