diff --git a/src/call.cpp b/src/call.cpp
index a0e037efdbba055367a3e4ccc6e5c957c77dc71b..7f41ddee31a22c2f450019a770f6fda36ba36e8a 100644
--- a/src/call.cpp
+++ b/src/call.cpp
@@ -123,8 +123,8 @@ Call::Call(const std::shared_ptr<Account>& account,
                     // TODO: This will be removed when 1:1 swarm will have a conference.
                     // For now, only commit for 1:1 calls
                     if (toUsername().find('/') == std::string::npos && getCallType() == CallType::OUTGOING) {
-                        jamiAccount->convModule()->addCallHistoryMessage(getPeerNumber(),
-                                                                         getCallDuration().count());
+                        if (auto cm = jamiAccount->convModule(true))
+                            cm->addCallHistoryMessage(getPeerNumber(), getCallDuration().count());
                     }
                     monitor();
                 }
diff --git a/src/client/conversation_interface.cpp b/src/client/conversation_interface.cpp
index 840e54b90044867e3b2f4cca5dbb78bb17b40de8..ce751194c56f517e725813237f944a7ff97dee74 100644
--- a/src/client/conversation_interface.cpp
+++ b/src/client/conversation_interface.cpp
@@ -39,7 +39,7 @@ std::string
 startConversation(const std::string& accountId)
 {
     if (auto acc = jami::Manager::instance().getAccount<jami::JamiAccount>(accountId))
-        if (auto convModule = acc->convModule())
+        if (auto convModule = acc->convModule(true))
             return convModule->startConversation();
     return {};
 }
@@ -48,7 +48,7 @@ void
 acceptConversationRequest(const std::string& accountId, const std::string& conversationId)
 {
     if (auto acc = jami::Manager::instance().getAccount<jami::JamiAccount>(accountId))
-        if (auto convModule = acc->convModule())
+        if (auto convModule = acc->convModule(true))
             convModule->acceptConversationRequest(conversationId);
 }
 
@@ -63,7 +63,7 @@ bool
 removeConversation(const std::string& accountId, const std::string& conversationId)
 {
     if (auto acc = jami::Manager::instance().getAccount<jami::JamiAccount>(accountId))
-        if (auto convModule = acc->convModule())
+        if (auto convModule = acc->convModule(true))
             return convModule->removeConversation(conversationId);
     return false;
 }
@@ -72,7 +72,7 @@ std::vector<std::string>
 getConversations(const std::string& accountId)
 {
     if (auto acc = jami::Manager::instance().getAccount<jami::JamiAccount>(accountId))
-        if (auto convModule = acc->convModule())
+        if (auto convModule = acc->convModule(true))
             return convModule->getConversations();
     return {};
 }
@@ -81,7 +81,7 @@ std::vector<std::map<std::string, std::string>>
 getActiveCalls(const std::string& accountId, const std::string& conversationId)
 {
     if (auto acc = jami::Manager::instance().getAccount<jami::JamiAccount>(accountId))
-        if (auto convModule = acc->convModule())
+        if (auto convModule = acc->convModule(true))
             return convModule->getActiveCalls(conversationId);
     return {};
 }
@@ -90,7 +90,7 @@ std::vector<std::map<std::string, std::string>>
 getConversationRequests(const std::string& accountId)
 {
     if (auto acc = jami::Manager::instance().getAccount<jami::JamiAccount>(accountId))
-        if (auto convModule = acc->convModule())
+        if (auto convModule = acc->convModule(true))
             return convModule->getConversationRequests();
     return {};
 }
@@ -101,7 +101,7 @@ updateConversationInfos(const std::string& accountId,
                         const std::map<std::string, std::string>& infos)
 {
     if (auto acc = jami::Manager::instance().getAccount<jami::JamiAccount>(accountId))
-        if (auto convModule = acc->convModule())
+        if (auto convModule = acc->convModule(true))
             convModule->updateConversationInfos(conversationId, infos);
 }
 
@@ -109,7 +109,7 @@ std::map<std::string, std::string>
 conversationInfos(const std::string& accountId, const std::string& conversationId)
 {
     if (auto acc = jami::Manager::instance().getAccount<jami::JamiAccount>(accountId))
-        if (auto convModule = acc->convModule())
+        if (auto convModule = acc->convModule(true))
             return convModule->conversationInfos(conversationId);
     return {};
 }
@@ -120,7 +120,7 @@ setConversationPreferences(const std::string& accountId,
                            const std::map<std::string, std::string>& prefs)
 {
     if (auto acc = jami::Manager::instance().getAccount<jami::JamiAccount>(accountId))
-        if (auto convModule = acc->convModule())
+        if (auto convModule = acc->convModule(true))
             convModule->setConversationPreferences(conversationId, prefs);
 }
 
@@ -128,7 +128,7 @@ std::map<std::string, std::string>
 getConversationPreferences(const std::string& accountId, const std::string& conversationId)
 {
     if (auto acc = jami::Manager::instance().getAccount<jami::JamiAccount>(accountId))
-        if (auto convModule = acc->convModule())
+        if (auto convModule = acc->convModule(true))
             return convModule->getConversationPreferences(conversationId);
     return {};
 }
@@ -140,7 +140,7 @@ addConversationMember(const std::string& accountId,
                       const std::string& contactUri)
 {
     if (auto acc = jami::Manager::instance().getAccount<jami::JamiAccount>(accountId))
-        if (auto convModule = acc->convModule())
+        if (auto convModule = acc->convModule(true))
             convModule->addConversationMember(conversationId, contactUri);
 }
 
@@ -150,7 +150,7 @@ removeConversationMember(const std::string& accountId,
                          const std::string& contactUri)
 {
     if (auto acc = jami::Manager::instance().getAccount<jami::JamiAccount>(accountId))
-        if (auto convModule = acc->convModule())
+        if (auto convModule = acc->convModule(true))
             convModule->removeConversationMember(conversationId, contactUri);
 }
 
@@ -158,7 +158,7 @@ std::vector<std::map<std::string, std::string>>
 getConversationMembers(const std::string& accountId, const std::string& conversationId)
 {
     if (auto acc = jami::Manager::instance().getAccount<jami::JamiAccount>(accountId))
-        if (auto convModule = acc->convModule())
+        if (auto convModule = acc->convModule(true))
             return convModule->getConversationMembers(conversationId, true);
     return {};
 }
@@ -172,7 +172,7 @@ sendMessage(const std::string& accountId,
             const int32_t& flag)
 {
     if (auto acc = jami::Manager::instance().getAccount<jami::JamiAccount>(accountId))
-        if (auto convModule = acc->convModule()) {
+        if (auto convModule = acc->convModule(true)) {
             if (flag == 0 /* Reply or simple commit */) {
                 convModule->sendMessage(conversationId, message, commitId);
             } else if (flag == 1 /* message edition */) {
@@ -190,7 +190,7 @@ loadConversationMessages(const std::string& accountId,
                          size_t n)
 {
     if (auto acc = jami::Manager::instance().getAccount<jami::JamiAccount>(accountId))
-        if (auto convModule = acc->convModule())
+        if (auto convModule = acc->convModule(true))
             return convModule->loadConversationMessages(conversationId, fromMessage, n);
     return 0;
 }
@@ -202,7 +202,7 @@ loadConversation(const std::string& accountId,
                          size_t n)
 {
     if (auto acc = jami::Manager::instance().getAccount<jami::JamiAccount>(accountId))
-        if (auto convModule = acc->convModule())
+        if (auto convModule = acc->convModule(true))
             return convModule->loadConversation(conversationId, fromMessage, n);
     return 0;
 }
@@ -214,7 +214,7 @@ loadConversationUntil(const std::string& accountId,
                       const std::string& toMessage)
 {
     if (auto acc = jami::Manager::instance().getAccount<jami::JamiAccount>(accountId))
-        if (auto convModule = acc->convModule())
+        if (auto convModule = acc->convModule(true))
             return convModule->loadConversationUntil(conversationId, fromMessage, toMessage);
     return 0;
 }
@@ -226,7 +226,7 @@ loadSwarmUntil(const std::string& accountId,
                const std::string& toMessage)
 {
     if (auto acc = jami::Manager::instance().getAccount<jami::JamiAccount>(accountId))
-        if (auto convModule = acc->convModule())
+        if (auto convModule = acc->convModule(true))
             return convModule->loadSwarmUntil(conversationId, fromMessage, toMessage);
     return 0;
 }
@@ -239,7 +239,7 @@ countInteractions(const std::string& accountId,
                   const std::string& authorUri)
 {
     if (auto acc = jami::Manager::instance().getAccount<jami::JamiAccount>(accountId))
-        if (auto convModule = acc->convModule())
+        if (auto convModule = acc->convModule(true))
             return convModule->countInteractions(conversationId, toId, fromId, authorUri);
     return 0;
 }
@@ -248,7 +248,7 @@ void
 clearCache(const std::string& accountId, const std::string& conversationId)
 {
     if (auto acc = jami::Manager::instance().getAccount<jami::JamiAccount>(accountId))
-        if (auto convModule = acc->convModule())
+        if (auto convModule = acc->convModule(true))
             convModule->clearCache(conversationId);
 }
 
@@ -271,7 +271,7 @@ searchConversation(const std::string& accountId,
             continue;
         if (auto acc = jami::Manager::instance().getAccount<jami::JamiAccount>(accId)) {
             res = std::uniform_int_distribution<uint32_t>()(acc->rand);
-            if (auto convModule = acc->convModule()) {
+            if (auto convModule = acc->convModule(true)) {
                 convModule->search(res, conversationId, filter);
             }
         }
@@ -283,7 +283,7 @@ void
 reloadConversationsAndRequests(const std::string& accountId)
 {
     if (auto acc = jami::Manager::instance().getAccount<jami::JamiAccount>(accountId)) {
-        if (auto convModule = acc->convModule()) {
+        if (auto convModule = acc->convModule(true)) {
             convModule->reloadRequests();
             convModule->loadConversations();
         }
diff --git a/src/client/datatransfer.cpp b/src/client/datatransfer.cpp
index 7c5e285bb7e8555eb8e8b693949be538ff3be29e..a990ff01aa4e7562435edb4653aa9fefa03964bf 100644
--- a/src/client/datatransfer.cpp
+++ b/src/client/datatransfer.cpp
@@ -53,7 +53,7 @@ downloadFile(const std::string& accountId,
              const std::string& path) noexcept
 {
     if (auto acc = jami::Manager::instance().getAccount<jami::JamiAccount>(accountId))
-        if (auto convModule = acc->convModule())
+        if (auto convModule = acc->convModule(true))
             return convModule->downloadFile(conversationId, interactionId, fileId, path);
     return {};
 }
diff --git a/src/jamidht/conversation_channel_handler.cpp b/src/jamidht/conversation_channel_handler.cpp
index 5da467fca0690dc53fb0986e3274a9ecbeae21bb..768e2b14d66457c9aa0fea5a98a7651873ca5611 100644
--- a/src/jamidht/conversation_channel_handler.cpp
+++ b/src/jamidht/conversation_channel_handler.cpp
@@ -55,7 +55,7 @@ ConversationChannelHandler::onRequest(const std::shared_ptr<dht::crypto::Certifi
     auto conversationId = name.substr(sep + 1);
 
     if (auto acc = account_.lock())
-        if (auto convModule = acc->convModule()) {
+        if (auto convModule = acc->convModule(true)) {
             auto res = !convModule->isBanned(conversationId, cert->issuer->getId().toString());
             res &= !convModule->isBanned(conversationId, cert->getLongId().toString());
             return res;
diff --git a/src/jamidht/jamiaccount.cpp b/src/jamidht/jamiaccount.cpp
index b74c9d9038045c74d7f49dc0343f5d1a037d92ce..daff87c09446254012f6b10cb397dc2746e08426 100644
--- a/src/jamidht/jamiaccount.cpp
+++ b/src/jamidht/jamiaccount.cpp
@@ -1983,6 +1983,7 @@ JamiAccount::doRegister_()
                 }
 
                 auto uri = Uri(name);
+                std::lock_guard lk(connManagerMtx_);
                 auto itHandler = channelHandlers_.find(uri.scheme());
                 if (itHandler != channelHandlers_.end() && itHandler->second)
                     return itHandler->second->onRequest(cert, name);
@@ -2066,6 +2067,7 @@ JamiAccount::doRegister_()
                     });
                 } else {
                     // TODO move git://
+                    std::lock_guard lk(connManagerMtx_);
                     auto uri = Uri(name);
                     auto itHandler = channelHandlers_.find(uri.scheme());
                     if (itHandler != channelHandlers_.end() && itHandler->second)
@@ -2135,8 +2137,10 @@ JamiAccount::doRegister_()
 }
 
 ConversationModule*
-JamiAccount::convModule()
+JamiAccount::convModule(bool noCreation)
 {
+    if (noCreation)
+        return convModule_.get();
     if (!accountManager() || currentDeviceId() == "") {
         JAMI_ERR("[Account %s] Calling convModule() with an uninitialized account",
                  getAccountID().c_str());
diff --git a/src/jamidht/jamiaccount.h b/src/jamidht/jamiaccount.h
index 0e25fc6c20ddadfaa6592171f94953a5f2850b21..c145ba47d2fe6adbd93a382c96c72c7b4f2e4d21 100644
--- a/src/jamidht/jamiaccount.h
+++ b/src/jamidht/jamiaccount.h
@@ -498,7 +498,7 @@ public:
      */
     std::shared_ptr<TransferManager> dataTransfer(const std::string& id = "");
 
-    ConversationModule* convModule();
+    ConversationModule* convModule(bool noCreation = false);
     SyncModule* syncModule();
 
     /**
diff --git a/src/jamidht/swarm/swarm_channel_handler.cpp b/src/jamidht/swarm/swarm_channel_handler.cpp
index c1e1cc9284ba55249536143ed3f94199a46fac95..10d554eae04707895e990b31edebe3083b5c146f 100644
--- a/src/jamidht/swarm/swarm_channel_handler.cpp
+++ b/src/jamidht/swarm/swarm_channel_handler.cpp
@@ -56,7 +56,7 @@ SwarmChannelHandler::onRequest(const std::shared_ptr<dht::crypto::Certificate>&
     auto sep = name.find_last_of('/');
     auto conversationId = name.substr(sep + 1);
     if (auto acc = account_.lock())
-        if (auto convModule = acc->convModule()) {
+        if (auto convModule = acc->convModule(true)) {
             auto res = !convModule->isBanned(conversationId, cert->issuer->getId().toString());
             res &= !convModule->isBanned(conversationId, cert->getLongId().toString());
             return res;
@@ -72,7 +72,7 @@ SwarmChannelHandler::onReady(const std::shared_ptr<dht::crypto::Certificate>&,
     auto sep = uri.find_last_of('/');
     auto conversationId = uri.substr(sep + 1);
     if (auto acc = account_.lock()) {
-        if (auto convModule = acc->convModule()) {
+        if (auto convModule = acc->convModule(true)) {
             convModule->addSwarmChannel(conversationId, socket);
         }
     }
diff --git a/src/jamidht/sync_module.cpp b/src/jamidht/sync_module.cpp
index 952f92ef2e410ade85c74dcdb9158377e9041b10..7b9f94f3b478a5db7f6d20fba03773de559d90c6 100644
--- a/src/jamidht/sync_module.cpp
+++ b/src/jamidht/sync_module.cpp
@@ -106,7 +106,7 @@ SyncModule::Impl::syncInfos(const std::shared_ptr<dhtnet::ChannelSocket>& socket
             }
         }
 
-        auto convModule = acc->convModule();
+        auto convModule = acc->convModule(true);
         if (!convModule)
             return;
         // Sync conversation's preferences
@@ -201,7 +201,8 @@ SyncModule::cacheSyncConnection(std::shared_ptr<dhtnet::ChannelSocket>&& socket,
                     manager->onSyncData(std::move(msg.ds), false);
 
                 if (!msg.c.empty() || !msg.cr.empty() || !msg.p.empty() || !msg.ld.empty())
-                    acc->convModule()->onSyncData(msg, peerId, device.toString());
+                    if (auto cm = acc->convModule(true))
+                        cm->onSyncData(msg, peerId, device.toString());
             }
         } catch (const std::exception& e) {
             JAMI_WARNING("[convInfo] error on sync: {:s}", e.what());
diff --git a/src/jamidht/transfer_channel_handler.cpp b/src/jamidht/transfer_channel_handler.cpp
index a0cf62d6414e111dd79a88dbbc8a8cb96f59058b..187cccfd96f92edd1c6da820a1c01b4cb357729a 100644
--- a/src/jamidht/transfer_channel_handler.cpp
+++ b/src/jamidht/transfer_channel_handler.cpp
@@ -32,8 +32,8 @@ TransferChannelHandler::TransferChannelHandler(const std::shared_ptr<JamiAccount
     , account_(account)
     , connectionManager_(cm)
 {
-    auto acc = account_.lock();
-    idPath_ = fileutils::get_data_dir() / acc->getAccountID();
+    if (auto acc = account_.lock())
+        idPath_ = fileutils::get_data_dir() / acc->getAccountID();
 }
 
 TransferChannelHandler::~TransferChannelHandler() {}
@@ -51,6 +51,9 @@ TransferChannelHandler::onRequest(const std::shared_ptr<dht::crypto::Certificate
     auto acc = account_.lock();
     if (!acc || !cert || !cert->issuer)
         return false;
+    auto cm = acc->convModule(true);
+    if (!cm)
+        return false;
     auto uri = cert->issuer->getId().toString();
     // Else, check if it's a profile or file in a conversation.
     auto idstr = std::string_view(name).substr(DATA_TRANSFER_SCHEME.size());
@@ -72,7 +75,7 @@ TransferChannelHandler::onRequest(const std::shared_ptr<dht::crypto::Certificate
     // Check if peer is member of the conversation
     if (fileId == fmt::format("{}.vcf", acc->getUsername()) || fileId == "profile.vcf") {
         // Or a member from the conversation
-        auto members = acc->convModule()->getConversationMembers(conversationId);
+        auto members = cm->getConversationMembers(conversationId);
         return std::find_if(members.begin(), members.end(), [&](auto m) { return m["uri"] == uri; })
                != members.end();
     } else if (fileHost == "profile") {
@@ -80,7 +83,7 @@ TransferChannelHandler::onRequest(const std::shared_ptr<dht::crypto::Certificate
         return uri == acc->getUsername();
     }
 
-    return acc->convModule()->onFileChannelRequest(conversationId,
+    return cm->onFileChannelRequest(conversationId,
                                                    uri,
                                                    std::string(fileId),
                                                    acc->sha3SumVerify());
diff --git a/src/manager.cpp b/src/manager.cpp
index 93f57329e5c8996a402c85eda9cd170aac89962e..4528d2df1d3555b3b247c5c212360023065938cb 100644
--- a/src/manager.cpp
+++ b/src/manager.cpp
@@ -567,8 +567,9 @@ Manager::ManagerPimpl::processRemainingParticipants(Conference& conf)
                 return;
 
             if (auto acc = std::dynamic_pointer_cast<JamiAccount>(account))
-                if (acc->convModule()->isHosting("", conf.getConfId()))
-                    return;
+                if (auto cm = acc->convModule(true))
+                    if (cm->isHosting("", conf.getConfId()))
+                        return;
 
             // Else go in 1:1
             if (current_callId != conf.getConfId())
@@ -3235,7 +3236,7 @@ Manager::gitSocket(std::string_view accountId,
                    std::string_view conversationId)
 {
     if (const auto acc = getAccount<JamiAccount>(accountId))
-        if (auto convModule = acc->convModule())
+        if (auto convModule = acc->convModule(true))
             return convModule->gitSocket(deviceId, conversationId);
     return nullptr;
 }