diff --git a/src/conversationmodel.cpp b/src/conversationmodel.cpp
index deac3e49d2d8e66d93203d4f22b0de5af259aed9..bd6fd4732ee3f010ad31c31fa8705863d96dbcb3 100644
--- a/src/conversationmodel.cpp
+++ b/src/conversationmodel.cpp
@@ -2370,7 +2370,7 @@ ConversationModelPimpl::slotConversationReady(const QString& accountId,
             try {
                 auto& conversation = getConversationForPeerUri(member["uri"]).get();
                 // remove non swarm conversation
-                if (conversation.mode == conversation::Mode::NON_SWARM) {
+                if (conversation.isLegacy()) {
                     eraseConversation(conversation.uid);
                     storage::removeContact(db, member["uri"]);
                     invalidateModel();
@@ -2516,10 +2516,11 @@ ConversationModelPimpl::slotContactAdded(const QString& contactUri)
 {
     auto conv = storage::getConversationsWithPeer(db, contactUri);
     bool addConversation = false;
+    bool removeConversation = false;
     try {
         auto& conversation = getConversationForPeerUri(contactUri).get();
         // swarm conversation we update when receive conversation ready signal.
-        if (conversation.mode != conversation::Mode::NON_SWARM) {
+        if (conversation.isSwarm()) {
             QStringList swarms = ConfigurationManager::instance().getConversations(linked.owner.id);
             bool needsSyncing = swarms.indexOf(conversation.uid) == -1;
             if (conversation.needsSyncing != needsSyncing) {
@@ -2537,12 +2538,8 @@ ConversationModelPimpl::slotContactAdded(const QString& contactUri)
             conv.push_back(storage::beginConversationWithPeer(db, contactUri));
         }
         // remove temporary conversation that was added when receiving an incoming request
-        auto conversationIdx = indexOf(contactUri);
-        if (conversationIdx >= 0) {
-            eraseConversation(conversationIdx);
-            invalidateModel();
-            emit linked.modelChanged();
-        }
+        removeConversation = indexOf(contactUri) != -1;
+
         // add a conversation if not exists
         addConversation = indexOf(conv[0]) == -1;
     } catch (std::out_of_range&) {
@@ -2561,6 +2558,11 @@ ConversationModelPimpl::slotContactAdded(const QString& contactUri)
         emit linked.conversationReady(conv[0], contactUri);
         emit linked.newConversation(conv[0]);
     }
+    if (removeConversation) {
+        eraseConversation(indexOf(contactUri));
+        invalidateModel();
+        emit linked.modelChanged();
+    }
 }
 
 void