diff --git a/src/conversationmodel.cpp b/src/conversationmodel.cpp
index 88100f393b0a59baf46a3491dee7c3d067e7abb7..41db5debeefb274fa15a428565485deecc33fc74 100644
--- a/src/conversationmodel.cpp
+++ b/src/conversationmodel.cpp
@@ -2819,13 +2819,14 @@ ConversationModelPimpl::slotContactRemoved(const QString& uri)
 void
 ConversationModelPimpl::slotContactModelUpdated(const QString& uri)
 {
-    try {
-        auto& conversation = getConversationForPeerUri(uri, true).get();
-        invalidateModel();
-        emit linked.conversationUpdated(conversation.uid);
-        Q_EMIT linked.dataChanged(indexOf(conversation.uid));
-    } catch (std::out_of_range&) {
-        qDebug() << "contact update attempted for inexistent conversation";
+    // Update presence for all conversations with this peer
+    for (auto& conversation : conversations) {
+        auto members = peersForConversation(conversation);
+        if (members.indexOf(uri) != -1) {
+            invalidateModel();
+            emit linked.conversationUpdated(conversation.uid);
+            Q_EMIT linked.dataChanged(indexOf(conversation.uid));
+        }
     }
 
     if (currentFilter.isEmpty()) {