diff --git a/src/libclient/contactmodel.cpp b/src/libclient/contactmodel.cpp
index b43c407b2cfa5d8046ed5186fa66c81f804f7ab0..01e6b8765865ac56f75c1977d3687cf5bc82a05f 100644
--- a/src/libclient/contactmodel.cpp
+++ b/src/libclient/contactmodel.cpp
@@ -418,9 +418,9 @@ ContactModel::searchContact(const QString& query)
     pimpl_->searchResult.clear();
 
     auto uri = URI(query);
-    QString uriID = uri.format(URI::Section::USER_INFO | URI::Section::HOSTNAME
+    QString uriId = uri.format(URI::Section::USER_INFO | URI::Section::HOSTNAME
                                | URI::Section::PORT);
-    pimpl_->searchQuery = uriID;
+    pimpl_->searchQuery = uriId;
 
     auto uriScheme = uri.schemeType();
     if (static_cast<int>(uriScheme) > 2 && owner.profileInfo.type == profile::Type::SIP) {
@@ -452,11 +452,11 @@ ContactModelPimpl::updateTemporaryMessage(const QString& mes)
 void
 ContactModelPimpl::searchContact(const URI& query)
 {
-    QString uriID = query.format(URI::Section::USER_INFO | URI::Section::HOSTNAME
+    QString uriId = query.format(URI::Section::USER_INFO | URI::Section::HOSTNAME
                                  | URI::Section::PORT);
     if (query.isEmpty()) {
         // This will remove the temporary item
-        Q_EMIT linked.modelUpdated(uriID);
+        Q_EMIT linked.modelUpdated(uriId);
         updateTemporaryMessage("");
         return;
     }
@@ -464,51 +464,49 @@ ContactModelPimpl::searchContact(const URI& query)
     if (query.protocolHint() == URI::ProtocolHint::RING) {
         updateTemporaryMessage("");
         // no lookup, this is a ring infoHash
-        for (auto& i : contacts) {
-            if (i.profileInfo.uri == uriID) {
+        for (auto& i : contacts)
+            if (i.profileInfo.uri == uriId)
                 return;
-            }
-        }
-        auto& temporaryContact = searchResult[uriID];
-        temporaryContact.profileInfo.uri = uriID;
-        temporaryContact.profileInfo.alias = uriID;
+        auto& temporaryContact = searchResult[uriId];
+        temporaryContact.profileInfo.uri = uriId;
+        temporaryContact.profileInfo.alias = uriId;
         temporaryContact.profileInfo.type = profile::Type::TEMPORARY;
-        Q_EMIT linked.modelUpdated(uriID);
+        Q_EMIT linked.modelUpdated(uriId);
     } else {
         updateTemporaryMessage(tr("Searching…"));
 
         // If the username contains an @ it's an exact match
         bool isJamsAccount = !linked.owner.confProperties.managerUri.isEmpty();
         if (isJamsAccount and not query.hasHostname())
-            ConfigurationManager::instance().searchUser(linked.owner.id, uriID);
+            ConfigurationManager::instance().searchUser(linked.owner.id, uriId);
         else
-            ConfigurationManager::instance().lookupName(linked.owner.id, "", uriID);
+            ConfigurationManager::instance().lookupName(linked.owner.id, "", uriId);
     }
 }
 
 void
 ContactModelPimpl::searchSipContact(const URI& query)
 {
-    QString uriID = query.format(URI::Section::USER_INFO | URI::Section::HOSTNAME
+    QString uriId = query.format(URI::Section::USER_INFO | URI::Section::HOSTNAME
                                  | URI::Section::PORT);
     if (query.isEmpty()) {
         // This will remove the temporary item
-        Q_EMIT linked.modelUpdated(uriID);
+        Q_EMIT linked.modelUpdated(uriId);
         updateTemporaryMessage("");
         return;
     }
 
     {
         std::lock_guard<std::mutex> lk(contactsMtx_);
-        if (contacts.find(uriID) == contacts.end()) {
+        if (contacts.find(uriId) == contacts.end()) {
             auto& temporaryContact = searchResult[query];
 
-            temporaryContact.profileInfo.uri = uriID;
-            temporaryContact.profileInfo.alias = uriID;
+            temporaryContact.profileInfo.uri = uriId;
+            temporaryContact.profileInfo.alias = uriId;
             temporaryContact.profileInfo.type = profile::Type::TEMPORARY;
         }
     }
-    Q_EMIT linked.modelUpdated(uriID);
+    Q_EMIT linked.modelUpdated(uriId);
 }
 
 uint64_t
diff --git a/src/libclient/conversationmodel.cpp b/src/libclient/conversationmodel.cpp
index 30c16fabe8d97699508657e27db9d6aa9b1d6ff6..34c588c14a4fbf2795a6cebba5b5fd02235e2ec1 100644
--- a/src/libclient/conversationmodel.cpp
+++ b/src/libclient/conversationmodel.cpp
@@ -831,7 +831,7 @@ ConversationModel::removeConversation(const QString& uid, bool banned)
                     "participant";
         return;
     }
-    if (conversation.isSwarm() && !banned) {
+    if (conversation.isSwarm() && !banned && !conversation.isCoreDialog()) {
         if (conversation.isRequest)
             ConfigurationManager::instance().declineConversationRequest(owner.id, uid);
         else
@@ -2824,6 +2824,7 @@ ConversationModelPimpl::slotConversationRemoved(const QString& accountId,
             return;
         }
         auto contactUri = peers.first();
+        auto mode = conversation.mode;
         contact::Info contact;
         try {
             contact = linked.owner.contactModel->getContact(contactUri);
@@ -2832,7 +2833,7 @@ ConversationModelPimpl::slotConversationRemoved(const QString& accountId,
 
         removeConversation();
 
-        if (conversation.mode == conversation::Mode::ONE_TO_ONE) {
+        if (mode == conversation::Mode::ONE_TO_ONE) {
             // If it's a 1:1 conversation and we don't have any more conversation
             // we can remove the contact
             auto contactRemoved = true;