diff --git a/src/api/conversationmodel.h b/src/api/conversationmodel.h
index 9ac2b50c227507ff52b7c12a6c8b9829b7c57f93..7b4c3236dfe005d1abf4a89e1924985345652b61 100644
--- a/src/api/conversationmodel.h
+++ b/src/api/conversationmodel.h
@@ -320,12 +320,6 @@ public:
      * @param conversationId conversation's id
      */
     void acceptConversationRequest(const QString& conversationId);
-    /**
-     * decline request for conversation
-     * @param conversationId conversation's id
-     * @param banned. Used for non-swarm and one-to-one conversation to remove contact
-     */
-    void declineConversationRequest(const QString& conversationId, bool banned = false);
     /**
      * add member to conversation
      * @param conversationId conversation's id
diff --git a/src/conversationmodel.cpp b/src/conversationmodel.cpp
index dea57721786a8c9eef7a24c43d9a6bbdd2b7c139..c191ce59de5957de388e78418bbfc5e997f46096 100644
--- a/src/conversationmodel.cpp
+++ b/src/conversationmodel.cpp
@@ -813,10 +813,10 @@ ConversationModel::removeConversation(const QString& uid, bool banned)
         return;
     }
     if (conversation.isSwarm()) {
-        ConfigurationManager::instance().removeConversation(owner.id, uid);
-        pimpl_->eraseConversation(conversationIdx);
-        pimpl_->invalidateModel();
-        emit conversationRemoved(uid);
+        if (conversation.isRequest)
+            ConfigurationManager::instance().declineConversationRequest(owner.id, uid);
+        else
+            ConfigurationManager::instance().removeConversation(owner.id, uid);
 
         // Still some other conversation, do nothing else
         if (!banned && getConversationForPeerUri(peers.front()) != std::nullopt)
@@ -1649,23 +1649,6 @@ ConversationModel::acceptConversationRequest(const QString& conversationId)
     ConfigurationManager::instance().acceptConversationRequest(owner.id, conversationId);
 }
 
-void
-ConversationModel::declineConversationRequest(const QString& conversationId, bool banned)
-{
-    auto conversationOpt = getConversationForUid(conversationId);
-    if (!conversationOpt.has_value()) {
-        return;
-    }
-    auto& conversation = conversationOpt->get();
-    // for non-swarm and one-to-one conversation remove contact.
-    if (conversation.mode == conversation::Mode::ONE_TO_ONE
-        || conversation.mode == conversation::Mode::NON_SWARM) {
-        removeConversation(conversationId, banned);
-    } else {
-        ConfigurationManager::instance().declineConversationRequest(owner.id, conversationId);
-    }
-}
-
 const VectorString
 ConversationModel::peersForConversation(const QString& conversationId)
 {
@@ -2560,6 +2543,7 @@ ConversationModelPimpl::slotConversationRemoved(const QString& accountId,
         auto removeConversation = [&]() {
             // remove swarm conversation
             eraseConversation(conversationIndex);
+            invalidateModel();
             Q_EMIT linked.conversationRemoved(conversationId);
         };