diff --git a/src/libclient/conversationmodel.cpp b/src/libclient/conversationmodel.cpp
index 5214fe0b03e4ede9bd25f06f774d354987546662..d661d743986282d81522a5048579dd62d24cec48 100644
--- a/src/libclient/conversationmodel.cpp
+++ b/src/libclient/conversationmodel.cpp
@@ -200,7 +200,7 @@ public:
                                     QString& conversationId);
     void awaitingHost(const QString& fileId, datatransfer::Info info);
 
-    bool hasOneOneSwarmWith(const QString& participant);
+    bool hasOneOneSwarmWith(const contact::Info& participant);
 
     /**
      * accept a file transfer
@@ -2009,57 +2009,70 @@ ConversationModelPimpl::initConversations()
     if (accountDetails.empty())
         return;
 
-    // Fill swarm conversations
-    QStringList swarms = ConfigurationManager::instance().getConversations(linked.owner.id);
-    for (auto& swarmConv : swarms) {
-        addSwarmConversation(swarmConv);
-    }
+    auto isJami = linked.owner.profileInfo.type == profile::Type::JAMI;
 
-    VectorMapStringString conversationsRequests = ConfigurationManager::instance()
-                                                      .getConversationRequests(linked.owner.id);
-    for (auto& request : conversationsRequests) {
-        addConversationRequest(request);
-    }
+    if (isJami) {
+        // Fill swarm conversations
+        QStringList swarms = ConfigurationManager::instance().getConversations(linked.owner.id);
+        for (auto& swarmConv : swarms) {
+            addSwarmConversation(swarmConv);
+        }
 
-    // Fill conversations
-    for (auto const& c : linked.owner.contactModel->getAllContacts().toStdMap()) {
-        auto conv = storage::getConversationsWithPeer(db, c.second.profileInfo.uri);
-        if (hasOneOneSwarmWith(c.second.profileInfo.uri))
-            continue;
-        bool isRequest = c.second.profileInfo.type == profile::Type::PENDING;
-        if (conv.empty()) {
+        VectorMapStringString conversationsRequests = ConfigurationManager::instance()
+                                                        .getConversationRequests(linked.owner.id);
+        for (auto& request : conversationsRequests) {
+            addConversationRequest(request);
+        }
+
+        for (auto const& c : linked.owner.contactModel->getAllContacts()) {
+            if (hasOneOneSwarmWith(c))
+                continue;
+            bool isRequest = c.profileInfo.type == profile::Type::PENDING;
             // Can't find a conversation with this contact
             // add pending not swarm conversation
             if (isRequest) {
-                addContactRequest(c.second.profileInfo.uri);
-                continue;
+                addContactRequest(c.profileInfo.uri);
             }
-            conv.push_back(storage::beginConversationWithPeer(db,
-                                                              c.second.profileInfo.uri,
-                                                              true,
-                                                              linked.owner.contactModel->getAddedTs(
-                                                                  c.second.profileInfo.uri)));
         }
-        addConversationWith(conv[0], c.first, isRequest);
-
-        auto convIdx = indexOf(conv[0]);
-
-        // Resolve any file transfer interactions were left in an incorrect state
-        auto& interactions = conversations[convIdx].interactions;
-        interactions->forEach([&](const QString& id, interaction::Info& interaction) {
-            if (interaction.transferStatus == interaction::TransferStatus::TRANSFER_CREATED
-                || interaction.transferStatus == interaction::TransferStatus::TRANSFER_AWAITING_HOST
-                || interaction.transferStatus == interaction::TransferStatus::TRANSFER_AWAITING_PEER
-                || interaction.transferStatus == interaction::TransferStatus::TRANSFER_ONGOING
-                || interaction.transferStatus == interaction::TransferStatus::TRANSFER_ACCEPTED) {
-                // If a datatransfer was left in a non-terminal status in DB, we switch this status
-                // to ERROR
-                // TODO : Improve for DBus clients as daemon and transfer may still be ongoing
-                storage::updateInteractionTransferStatus(db, id, interaction::TransferStatus::TRANSFER_ERROR);
-
-                interaction.transferStatus = interaction::TransferStatus::TRANSFER_ERROR;
+    } else {
+        // Fill conversations
+        for (auto const& c : linked.owner.contactModel->getAllContacts().toStdMap()) {
+            auto conv = storage::getConversationsWithPeer(db, c.second.profileInfo.uri);
+            bool isRequest = c.second.profileInfo.type == profile::Type::PENDING;
+            if (conv.empty()) {
+                // Can't find a conversation with this contact
+                // add pending not swarm conversation
+                if (isRequest) {
+                    addContactRequest(c.second.profileInfo.uri);
+                    continue;
+                }
+                conv.push_back(storage::beginConversationWithPeer(db,
+                                                                c.second.profileInfo.uri,
+                                                                true,
+                                                                linked.owner.contactModel->getAddedTs(
+                                                                    c.second.profileInfo.uri)));
             }
-        });
+            addConversationWith(conv[0], c.first, isRequest);
+
+            auto convIdx = indexOf(conv[0]);
+
+            // Resolve any file transfer interactions were left in an incorrect state
+            auto& interactions = conversations[convIdx].interactions;
+            interactions->forEach([&](const QString& id, interaction::Info& interaction) {
+                if (interaction.transferStatus == interaction::TransferStatus::TRANSFER_CREATED
+                    || interaction.transferStatus == interaction::TransferStatus::TRANSFER_AWAITING_HOST
+                    || interaction.transferStatus == interaction::TransferStatus::TRANSFER_AWAITING_PEER
+                    || interaction.transferStatus == interaction::TransferStatus::TRANSFER_ONGOING
+                    || interaction.transferStatus == interaction::TransferStatus::TRANSFER_ACCEPTED) {
+                    // If a datatransfer was left in a non-terminal status in DB, we switch this status
+                    // to ERROR
+                    // TODO : Improve for DBus clients as daemon and transfer may still be ongoing
+                    storage::updateInteractionTransferStatus(db, id, interaction::TransferStatus::TRANSFER_ERROR);
+
+                    interaction.transferStatus = interaction::TransferStatus::TRANSFER_ERROR;
+                }
+            });
+        }
     }
     invalidateModel();
 
@@ -3848,14 +3861,16 @@ ConversationModelPimpl::slotTransferStatusAwaitingHost(const QString& fileId,
 }
 
 bool
-ConversationModelPimpl::hasOneOneSwarmWith(const QString& participant)
+ConversationModelPimpl::hasOneOneSwarmWith(const contact::Info& participant)
 {
     try {
-        auto& conversation = getConversationForPeerUri(participant).get();
-        return conversation.mode == conversation::Mode::ONE_TO_ONE;
+        if (!participant.conversationId.isEmpty()) {
+            auto& conversation = getConversationForUid(participant.conversationId).get();
+            return conversation.mode == conversation::Mode::ONE_TO_ONE;
+        }
     } catch (std::out_of_range&) {
-        return false;
     }
+    return false;
 }
 
 void