diff --git a/src/jamidht/conversation_module.cpp b/src/jamidht/conversation_module.cpp
index 9566db10597263682b807860193b472405f54518..71fb0e911b02ff70bc39d8f65b9c6c00025e4213 100644
--- a/src/jamidht/conversation_module.cpp
+++ b/src/jamidht/conversation_module.cpp
@@ -1487,8 +1487,9 @@ ConversationModule::removeContact(const std::string& uri, bool)
                     if (itConv->second->mode() == ConversationMode::ONE_TO_ONE) {
                         auto initMembers = itConv->second->getInitialMembers();
                         if ((isSelf && initMembers.size() == 1)
-                            || std::find(initMembers.begin(), initMembers.end(), uri)
-                                   != initMembers.end()) {
+                            || (!isSelf
+                                && std::find(initMembers.begin(), initMembers.end(), uri)
+                                       != initMembers.end())) {
                             // Mark as removed
                             conv.removed = std::time(nullptr);
                             toRm.emplace_back(convId);
diff --git a/test/unitTest/conversation/conversationRequest.cpp b/test/unitTest/conversation/conversationRequest.cpp
index d83051c8a1f3426a629d61efd4f8fd10ea0536c4..0fa9da832f1028eec5e98f9e2dc816e0164165eb 100644
--- a/test/unitTest/conversation/conversationRequest.cpp
+++ b/test/unitTest/conversation/conversationRequest.cpp
@@ -61,6 +61,7 @@ public:
     void testAddContactDeleteAndReAdd();
     void testInviteFromMessageAfterRemoved();
     void testRemoveContact();
+    void testRemoveSelfDoesntRemoveConversation();
     void testRemoveConversationUpdateContactDetails();
     void testBanContact();
     void testBanContactRemoveTrustRequest();
@@ -87,6 +88,7 @@ private:
     CPPUNIT_TEST(testAddContactDeleteAndReAdd);
     CPPUNIT_TEST(testInviteFromMessageAfterRemoved);
     CPPUNIT_TEST(testRemoveContact);
+    CPPUNIT_TEST(testRemoveSelfDoesntRemoveConversation);
     CPPUNIT_TEST(testRemoveConversationUpdateContactDetails);
     CPPUNIT_TEST(testBanContact);
     CPPUNIT_TEST(testBanContactRemoveTrustRequest);
@@ -568,6 +570,76 @@ ConversationRequestTest::testRemoveContact()
     CPPUNIT_ASSERT(!fileutils::isDirectory(repoPath));
 }
 
+void
+ConversationRequestTest::testRemoveSelfDoesntRemoveConversation()
+{
+    auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
+    auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
+    auto bobUri = bobAccount->getUsername();
+    auto aliceUri = aliceAccount->getUsername();
+    std::mutex mtx;
+    std::unique_lock<std::mutex> lk {mtx};
+    std::condition_variable cv;
+    std::map<std::string, std::shared_ptr<DRing::CallbackWrapperBase>> confHandlers;
+    bool conversationReady = false, requestReceived = false, memberMessageGenerated = false,
+         conversationRemoved = false;
+    std::string convId = "";
+    confHandlers.insert(DRing::exportable_callback<DRing::ConfigurationSignal::IncomingTrustRequest>(
+        [&](const std::string& account_id,
+            const std::string& /*from*/,
+            const std::string& /*conversationId*/,
+            const std::vector<uint8_t>& /*payload*/,
+            time_t /*received*/) {
+            if (account_id == bobId)
+                requestReceived = true;
+            cv.notify_one();
+        }));
+    confHandlers.insert(DRing::exportable_callback<DRing::ConversationSignal::ConversationReady>(
+        [&](const std::string& accountId, const std::string& conversationId) {
+            if (accountId == aliceId) {
+                convId = conversationId;
+            } else if (accountId == bobId) {
+                conversationReady = true;
+            }
+            cv.notify_one();
+        }));
+    confHandlers.insert(DRing::exportable_callback<DRing::ConversationSignal::ConversationRemoved>(
+        [&](const std::string& accountId, const std::string&) {
+            if (accountId == bobId)
+                conversationRemoved = true;
+            cv.notify_one();
+        }));
+    confHandlers.insert(DRing::exportable_callback<DRing::ConversationSignal::MessageReceived>(
+        [&](const std::string& accountId,
+            const std::string& conversationId,
+            std::map<std::string, std::string> message) {
+            if (accountId == aliceId && conversationId == convId && message["type"] == "member") {
+                memberMessageGenerated = true;
+            }
+            cv.notify_one();
+        }));
+    DRing::registerSignalHandlers(confHandlers);
+    aliceAccount->addContact(bobUri);
+    aliceAccount->sendTrustRequest(bobUri, {});
+    // Check created files
+    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() {
+        return !convId.empty() && requestReceived;
+    }));
+    memberMessageGenerated = false;
+    CPPUNIT_ASSERT(bobAccount->acceptTrustRequest(aliceUri));
+    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() {
+        return conversationReady && memberMessageGenerated;
+    }));
+
+    conversationRemoved = false;
+    aliceAccount->removeContact(aliceUri, false);
+    CPPUNIT_ASSERT(
+        !cv.wait_for(lk, std::chrono::seconds(10), [&]() { return conversationRemoved; }));
+    auto repoPath = fileutils::get_data_dir() + DIR_SEPARATOR_STR + aliceAccount->getAccountID()
+                    + DIR_SEPARATOR_STR + "conversations" + DIR_SEPARATOR_STR + convId;
+    CPPUNIT_ASSERT(fileutils::isDirectory(repoPath));
+}
+
 void
 ConversationRequestTest::testRemoveConversationUpdateContactDetails()
 {