diff --git a/src/jamidht/contact_list.cpp b/src/jamidht/contact_list.cpp
index 0d37d28ea9a39b038f67df73aa353ca290710832..0f2d2d14847367b67ea69ef1f257ca8920bb3b34 100644
--- a/src/jamidht/contact_list.cpp
+++ b/src/jamidht/contact_list.cpp
@@ -385,7 +385,6 @@ ContactList::acceptTrustRequest(const dht::InfoHash& from)
     auto i = trustRequests_.find(from);
     if (i == trustRequests_.end())
         return false;
-
     addContact(from, true, i->second.conversationId);
     // Clear trust request
     trustRequests_.erase(i);
diff --git a/src/jamidht/conversation_module.cpp b/src/jamidht/conversation_module.cpp
index 547eea4869d6113ad207607121252b9c2c9c31c0..623db0a95b9e41bd3e6bedd7a70e95b64579790f 100644
--- a/src/jamidht/conversation_module.cpp
+++ b/src/jamidht/conversation_module.cpp
@@ -59,7 +59,8 @@ public:
          SengMsgCb&& sendMsgCb,
          NeedSocketCb&& onNeedSocket,
          NeedSocketCb&& onNeedSwarmSocket,
-         UpdateConvReq&& updateConvReqCb);
+         UpdateConvReq&& updateConvReqCb,
+         OneToOneRecvCb&& oneToOneRecvCb);
 
     // Retrieving recent commits
     /**
@@ -185,6 +186,7 @@ public:
     NeedSocketCb onNeedSocket_;
     NeedSocketCb onNeedSwarmSocket_;
     UpdateConvReq updateConvReqCb_;
+    OneToOneRecvCb oneToOneRecvCb_;
 
     std::string accountId_ {};
     std::string deviceId_ {};
@@ -320,13 +322,15 @@ ConversationModule::Impl::Impl(std::weak_ptr<JamiAccount>&& account,
                                SengMsgCb&& sendMsgCb,
                                NeedSocketCb&& onNeedSocket,
                                NeedSocketCb&& onNeedSwarmSocket,
-                               UpdateConvReq&& updateConvReqCb)
+                               UpdateConvReq&& updateConvReqCb,
+                               OneToOneRecvCb&& oneToOneRecvCb)
     : account_(account)
     , needsSyncingCb_(needsSyncingCb)
     , sendMsgCb_(sendMsgCb)
     , onNeedSocket_(onNeedSocket)
     , onNeedSwarmSocket_(onNeedSwarmSocket)
     , updateConvReqCb_(updateConvReqCb)
+    , oneToOneRecvCb_(oneToOneRecvCb)
 {
     if (auto shared = account.lock()) {
         accountId_ = shared->getAccountID();
@@ -1093,13 +1097,15 @@ ConversationModule::ConversationModule(std::weak_ptr<JamiAccount>&& account,
                                        SengMsgCb&& sendMsgCb,
                                        NeedSocketCb&& onNeedSocket,
                                        NeedSocketCb&& onNeedSwarmSocket,
-                                       UpdateConvReq&& updateConvReqCb)
+                                       UpdateConvReq&& updateConvReqCb,
+                                       OneToOneRecvCb&& oneToOneRecvCb)
     : pimpl_ {std::make_unique<Impl>(std::move(account),
                                      std::move(needsSyncingCb),
                                      std::move(sendMsgCb),
                                      std::move(onNeedSocket),
                                      std::move(onNeedSwarmSocket),
-                                     std::move(updateConvReqCb))}
+                                     std::move(updateConvReqCb),
+                                     std::move(oneToOneRecvCb))}
 {
     loadConversations();
 }
@@ -1452,10 +1458,12 @@ ConversationModule::onConversationRequest(const std::string& from, const Json::V
     }
     req.received = std::time(nullptr);
     auto reqMap = req.toMap();
+    auto isOneToOne = req.isOneToOne();
     if (pimpl_->addConversationRequest(convId, std::move(req))) {
         // Note: no need to sync here because other connected devices should receive
         // the same conversation request. Will sync when the conversation will be added
-
+        if (isOneToOne)
+            pimpl_->oneToOneRecvCb_(convId, from);
         emitSignal<libjami::ConversationSignal::ConversationRequestReceived>(pimpl_->accountId_,
                                                                             convId,
                                                                             reqMap);
diff --git a/src/jamidht/conversation_module.h b/src/jamidht/conversation_module.h
index dddedb6ac7f5cc459ec4534b0c22375877edeeab..eb54b33b88f477e24117be2b4881604c655d869f 100644
--- a/src/jamidht/conversation_module.h
+++ b/src/jamidht/conversation_module.h
@@ -54,6 +54,7 @@ using SengMsgCb = std::function<
     uint64_t(const std::string&, const DeviceId&, std::map<std::string, std::string>, uint64_t)>;
 using NeedsSyncingCb = std::function<void(std::shared_ptr<SyncMsg>&&)>;
 using UpdateConvReq = std::function<void(const std::string&, const std::string&, bool)>;
+using OneToOneRecvCb = std::function<void(const std::string&, const std::string&)>;
 
 class ConversationModule
 {
@@ -63,7 +64,8 @@ public:
                        SengMsgCb&& sendMsgCb,
                        NeedSocketCb&& onNeedSocket,
                        NeedSocketCb&& onNeedSwarmSocket,
-                       UpdateConvReq&& updateConvReqCb);
+                       UpdateConvReq&& updateConvReqCb,
+                       OneToOneRecvCb&& oneToOneRecvCb);
     ~ConversationModule() = default;
 
     /**
diff --git a/src/jamidht/jamiaccount.cpp b/src/jamidht/jamiaccount.cpp
index fcbeb69e396b88ab23468593babab1ad5ea6737f..1fdf4a079442c0b9bde52571b342799f89b8b160 100644
--- a/src/jamidht/jamiaccount.cpp
+++ b/src/jamidht/jamiaccount.cpp
@@ -1128,9 +1128,8 @@ JamiAccount::loadAccount(const std::string& archive_password,
                     // Here account can be initializing
                     if (auto cm = shared->convModule()) {
                         auto activeConv = cm->getOneToOneConversation(uri);
-                        if (activeConv != conversationId) {
+                        if (activeConv != conversationId)
                             cm->onTrustRequest(uri, conversationId, payload, received);
-                        }
                     }
                 }
             });
@@ -1150,6 +1149,7 @@ JamiAccount::loadAccount(const std::string& archive_password,
             // Note: Do not retrigger on another thread. This has to be done
             // at the same time of acceptTrustRequest a synced state between TrustRequest
             // and convRequests.
+
             convModule()->acceptConversationRequest(conversationId);
         },
         [this](const std::string& uri, const std::string& convFromReq) {
@@ -2253,6 +2253,19 @@ JamiAccount::convModule()
                 } else {
                     updateConvForContact(contactUri, convId, "");
                 }
+            },
+            [this](auto&& convId, auto&& from) {
+                accountManager_->findCertificate(dht::InfoHash(from), [this, from, convId](const std::shared_ptr<dht::crypto::Certificate>& cert) {
+                    auto info = accountManager_->getInfo();
+                    if (!cert || !info)
+                        return;
+                    info->contacts->onTrustRequest(dht::InfoHash(from),
+                                                   cert->getSharedPublicKey(),
+                                                   time(nullptr),
+                                                   false,
+                                                   convId,
+                                                   {});
+                });
             });
     }
     return convModule_.get();
diff --git a/test/unitTest/conversation/conversationRequest.cpp b/test/unitTest/conversation/conversationRequest.cpp
index 2c4f7511f35989f4997665098ea5840f38d938df..09b7fee5806bd3ef40b4f3efdd65bfcc78620169 100644
--- a/test/unitTest/conversation/conversationRequest.cpp
+++ b/test/unitTest/conversation/conversationRequest.cpp
@@ -76,7 +76,6 @@ public:
     void testCacheRequestFromClient();
     void testNeedsSyncingWithForCloning();
     void testRemoveContactRemoveTrustRequest();
-
     std::string aliceId;
     std::string bobId;
     std::string bob2Id;
@@ -628,8 +627,10 @@ ConversationRequestTest::testInviteFromMessageAfterRemoved()
     libjami::sendMessage(aliceId, convId, "hi"s, "");
     CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return requestReceived; }));
     conversationReady = false;
+    CPPUNIT_ASSERT(bobAccount->getContacts().size() == 0);
     libjami::acceptConversationRequest(bobId, convId);
     CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return conversationReady; }));
+    CPPUNIT_ASSERT(bobAccount->getContacts().size() == 1);
 }
 
 void