diff --git a/src/im/message_engine.cpp b/src/im/message_engine.cpp
index 3570216e22f6d58220a065640374ea72c7ef3f74..fc6eee034e804096bca6ecb5ba398c95d2c31e4c 100644
--- a/src/im/message_engine.cpp
+++ b/src/im/message_engine.cpp
@@ -83,9 +83,8 @@ MessageEngine::onPeerOnline(const std::string& peer, bool retryOnTimeout)
 void
 MessageEngine::retrySend(const std::string& peer, bool retryOnTimeout)
 {
-    if (account_.getRegistrationState() != RegistrationState::REGISTERED) {
+    if (account_.getRegistrationState() != RegistrationState::REGISTERED)
         return;
-    }
     struct PendingMsg
     {
         MessageToken token;
diff --git a/src/jamidht/conversation_module.cpp b/src/jamidht/conversation_module.cpp
index 700ead4f289cf05a788a97525cdfaf37112cdcb0..0c592c89a54c1b940d6a46b29f72a12cd992b5f1 100644
--- a/src/jamidht/conversation_module.cpp
+++ b/src/jamidht/conversation_module.cpp
@@ -132,6 +132,15 @@ public:
         std::lock_guard<std::mutex> lk(conversationsMtx_);
         return conversations_.find(convId) != conversations_.end();
     }
+    /**
+     * @return if a convId is an accepted conversation
+     */
+    bool isAcceptedConversation(const std::string& convId) const
+    {
+        std::lock_guard<std::mutex> lk(conversationsMtx_);
+        auto itConv = convInfos_.find(convId);
+        return itConv != convInfos_.end() && !itConv->second.removed;
+    }
 
     void addConvInfo(const ConvInfo& info)
     {
@@ -1145,15 +1154,11 @@ ConversationModule::onTrustRequest(const std::string& uri,
                   "clone the old one");
         return;
     }
-    {
-        std::lock_guard<std::mutex> lk(pimpl_->conversationsMtx_);
-        auto itConv = pimpl_->conversations_.find(conversationId);
-        if (itConv != pimpl_->conversations_.end()) {
-            JAMI_INFO("[Account %s] Received a request for a conversation "
-                      "already handled. Ignore",
-                      pimpl_->accountId_.c_str());
-            return;
-        }
+    if (pimpl_->isAcceptedConversation(conversationId)) {
+        JAMI_INFO("[Account %s] Received a request for a conversation "
+                    "already handled. Ignore",
+                    pimpl_->accountId_.c_str());
+        return;
     }
     if (pimpl_->getRequest(conversationId) != std::nullopt) {
         JAMI_INFO("[Account %s] Received a request for a conversation "
@@ -1190,6 +1195,9 @@ ConversationModule::onConversationRequest(const std::string& from, const Json::V
     auto convId = req.conversationId;
     req.from = from;
 
+    // Already accepted request, do nothing
+    if (pimpl_->isAcceptedConversation(convId))
+        return;
     if (pimpl_->getRequest(convId) != std::nullopt) {
         JAMI_INFO("[Account %s] Received a request for a conversation already existing. "
                   "Ignore",
@@ -1624,7 +1632,7 @@ ConversationModule::onSyncData(const SyncMsg& msg,
     }
 
     for (const auto& [convId, req] : msg.cr) {
-        if (pimpl_->isConversation(convId)) {
+        if (pimpl_->isAcceptedConversation(convId)) {
             // Already accepted request
             pimpl_->rmConversationRequest(convId);
             continue;
diff --git a/test/unitTest/conversation/conversation.cpp b/test/unitTest/conversation/conversation.cpp
index fd71d988d5d26d0a613438c80cbe4d55b89da4e6..6404157708ac3f4fd57ae27e0685a6faa6b0e05d 100644
--- a/test/unitTest/conversation/conversation.cpp
+++ b/test/unitTest/conversation/conversation.cpp
@@ -396,10 +396,6 @@ ConversationTest::testSendMessageWithBadDisplayName()
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto bobUri = bobAccount->getUsername();
 
-    std::map<std::string, std::string> details;
-    details[ConfProperties::DISPLAYNAME] = "<o>";
-    libjami::setAccountDetails(aliceId, details);
-
     std::mutex mtx;
     std::unique_lock<std::mutex> lk {mtx};
     std::condition_variable cv;
@@ -433,8 +429,24 @@ ConversationTest::testSendMessageWithBadDisplayName()
                 cv.notify_one();
             }
         }));
+    bool aliceRegistered = false;
+    confHandlers.insert(
+        libjami::exportable_callback<libjami::ConfigurationSignal::VolatileDetailsChanged>(
+            [&](const std::string&, const std::map<std::string, std::string>&) {
+                auto details = aliceAccount->getVolatileAccountDetails();
+                auto daemonStatus = details[libjami::Account::ConfProperties::Registration::STATUS];
+                if (daemonStatus == "REGISTERED") {
+                    aliceRegistered = true;
+                    cv.notify_one();
+                }
+            }));
     libjami::registerSignalHandlers(confHandlers);
 
+    std::map<std::string, std::string> details;
+    details[ConfProperties::DISPLAYNAME] = "<o>";
+    libjami::setAccountDetails(aliceId, details);
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return aliceRegistered; }));
+
     auto convId = libjami::startConversation(aliceId);
 
     libjami::addConversationMember(aliceId, convId, bobUri);