diff --git a/src/jamidht/conversation_module.cpp b/src/jamidht/conversation_module.cpp
index 59175593d96f5d27a53c6dd7572b7def8d3bb5f1..81f8343ece75c98ee59f38ad5812e0b3c112ff39 100644
--- a/src/jamidht/conversation_module.cpp
+++ b/src/jamidht/conversation_module.cpp
@@ -1173,6 +1173,10 @@ ConversationModule::loadConversations()
                 info.members = std::move(members);
                 info.lastDisplayed = conv->infos()[ConversationMapKeys::LAST_DISPLAYED];
                 addConvInfo(info);
+            } else if (convInfo->second.removed) {
+                // A conversation was removed, but repository still exists
+                conv->setRemovingFlag();
+                toRm.insert(repository);
             }
             auto commits = conv->refreshActiveCalls();
             if (!commits.empty()) {
diff --git a/test/unitTest/conversation/conversation.cpp b/test/unitTest/conversation/conversation.cpp
index ad0cbe052e4d50c2b92a94409e301b0ad3b7c160..b9cd39146cd30d79f7011df12cca3bb35a67ae84 100644
--- a/test/unitTest/conversation/conversation.cpp
+++ b/test/unitTest/conversation/conversation.cpp
@@ -127,6 +127,7 @@ private:
     void testRemoveOneToOneNotInDetails();
     void testMessageEdition();
     void testMessageReaction();
+    void testLoadPartiallyRemovedConversation();
 
     CPPUNIT_TEST_SUITE(ConversationTest);
     CPPUNIT_TEST(testCreateConversation);
@@ -179,6 +180,7 @@ private:
     CPPUNIT_TEST(testRemoveOneToOneNotInDetails);
     CPPUNIT_TEST(testMessageEdition);
     CPPUNIT_TEST(testMessageReaction);
+    CPPUNIT_TEST(testLoadPartiallyRemovedConversation);
     CPPUNIT_TEST_SUITE_END();
 };
 
@@ -3967,6 +3969,69 @@ ConversationTest::testMessageReaction()
     CPPUNIT_ASSERT(messageAliceReceived.rbegin()->at("body") == "👋");
 }
 
+void
+ConversationTest::testLoadPartiallyRemovedConversation()
+{
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
+    auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
+    auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
+    auto bobUri = bobAccount->getUsername();
+    auto aliceUri = aliceAccount->getUsername();
+    std::map<std::string, std::shared_ptr<libjami::CallbackWrapperBase>> confHandlers;
+    bool requestReceived = false;
+    confHandlers.insert(
+        libjami::exportable_callback<libjami::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();
+            }));
+    std::string convId = "";
+    confHandlers.insert(libjami::exportable_callback<libjami::ConversationSignal::ConversationReady>(
+        [&](const std::string& accountId, const std::string& conversationId) {
+            if (accountId == aliceId) {
+                convId = conversationId;
+            }
+            cv.notify_one();
+        }));
+    bool conversationRemoved = false;
+    confHandlers.insert(
+        libjami::exportable_callback<libjami::ConversationSignal::ConversationRemoved>(
+            [&](const std::string& accountId, const std::string&) {
+                if (accountId == aliceId)
+                    conversationRemoved = true;
+                cv.notify_one();
+            }));
+    libjami::registerSignalHandlers(confHandlers);
+    aliceAccount->addContact(bobUri);
+    aliceAccount->sendTrustRequest(bobUri, {});
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return requestReceived; }));
+
+    // Copy alice's conversation temporary
+    auto repoPathAlice = fmt::format("{}/{}/conversations/{}", fileutils::get_data_dir(),
+                                     aliceAccount->getAccountID(), convId);
+    std::filesystem::copy(repoPathAlice, fmt::format("./{}", convId), std::filesystem::copy_options::recursive);
+
+    // removeContact
+    aliceAccount->removeContact(bobUri, false);
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return conversationRemoved; }));
+    std::this_thread::sleep_for(10s); // Wait for connection to close and async tasks to finish
+
+    // Copy back alice's conversation
+    std::filesystem::copy(fmt::format("./{}", convId), repoPathAlice, std::filesystem::copy_options::recursive);
+    std::filesystem::remove_all(fmt::format("./{}", convId));
+
+    // Reloading conversation should remove directory
+    CPPUNIT_ASSERT(fileutils::isDirectory(repoPathAlice));
+    aliceAccount->convModule()->loadConversations();
+    CPPUNIT_ASSERT(!fileutils::isDirectory(repoPathAlice));
+}
+
 } // namespace test
 } // namespace jami