diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp
index 01856a4d89cd7bb61147972cdc3017b2d418342b..3680c5f9aa07c911e5f241ea1f274a1422802877 100644
--- a/src/timeline/TimelineModel.cpp
+++ b/src/timeline/TimelineModel.cpp
@@ -2684,6 +2684,19 @@ TimelineModel::resetThread()
         emit threadChanged(thread_);
     }
 }
+void
+TimelineModel::setReply(const QString &newReply)
+{
+    if (reply_ != newReply) {
+        reply_ = newReply;
+
+        if (auto ev = events.get(reply_.toStdString(), "", false, true))
+            setThread(QString::fromStdString(
+              mtx::accessors::relations(*ev).thread().value_or(thread_.toStdString())));
+
+        emit replyChanged(reply_);
+    }
+}
 
 void
 TimelineModel::setEdit(const QString &newEdit)
diff --git a/src/timeline/TimelineModel.h b/src/timeline/TimelineModel.h
index 43ea0b247353884426ed85a95420893d7c42cae8..54a1cb3fbc70282da5704f883346040446b44027 100644
--- a/src/timeline/TimelineModel.h
+++ b/src/timeline/TimelineModel.h
@@ -363,16 +363,7 @@ public slots:
     std::vector<QString> typingUsers() const { return typingUsers_; }
     bool paginationInProgress() const { return m_paginationInProgress; }
     QString reply() const { return reply_; }
-    void setReply(const QString &newReply)
-    {
-        if (edit_.startsWith('m'))
-            return;
-
-        if (reply_ != newReply) {
-            reply_ = newReply;
-            emit replyChanged(reply_);
-        }
-    }
+    void setReply(const QString &newReply);
     void resetReply()
     {
         if (!reply_.isEmpty()) {