diff --git a/src/jamidht/contact_list.cpp b/src/jamidht/contact_list.cpp
index 06571785fc95cc5749e15f9362e5ca7060c66005..502e79eb4809f7b6af03c8eb70f7462b2b050832 100644
--- a/src/jamidht/contact_list.cpp
+++ b/src/jamidht/contact_list.cpp
@@ -327,8 +327,9 @@ ContactList::onTrustRequest(const dht::InfoHash& peer_account,
                       .first;
         } else {
             // Update trust request
-            if (received < req->second.received) {
+            if (received > req->second.received) {
                 req->second.device = peer_device;
+                req->second.conversationId = conversationId;
                 req->second.received = received;
                 req->second.payload = payload;
             } else {
diff --git a/test/unitTest/conversation/conversationMembersEvent.cpp b/test/unitTest/conversation/conversationMembersEvent.cpp
index a010307983a3feb44ea86519eb695c7923cba5dd..15405b532ec1b6dfde5b8b02bc713b177e5254d9 100644
--- a/test/unitTest/conversation/conversationMembersEvent.cpp
+++ b/test/unitTest/conversation/conversationMembersEvent.cpp
@@ -1657,12 +1657,25 @@ ConversationMembersEventTest::testAddContactTwice()
     std::cout << "\nRunning test: " << __func__ << std::endl;
 
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
+    auto aliceUri = aliceAccount->getUsername();
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto bobUri = bobAccount->getUsername();
 
+    // Add contact
     aliceAccount->addContact(bobUri);
     aliceAccount->sendTrustRequest(bobUri, {});
     CPPUNIT_ASSERT(cv.wait_for(lk, 10s, [&]() { return bobData.requestReceived; }));
+    auto oldConversationId = aliceData.conversationId;
+    CPPUNIT_ASSERT(!oldConversationId.empty());
+
+    // Check that the trust request's data is correct
+    auto bobTrustRequests = bobAccount->getTrustRequests();
+    CPPUNIT_ASSERT(bobTrustRequests.size() == 1);
+    auto request = bobTrustRequests[0];
+    CPPUNIT_ASSERT(request["from"] == aliceUri);
+    CPPUNIT_ASSERT(request["conversationId"] == oldConversationId);
+
+    // Remove and re-add contact
     aliceAccount->removeContact(bobUri, false);
     CPPUNIT_ASSERT(cv.wait_for(lk, 10s, [&]() { return aliceData.removed; }));
     // wait that connections are closed.
@@ -1671,6 +1684,17 @@ ConversationMembersEventTest::testAddContactTwice()
     aliceAccount->addContact(bobUri);
     aliceAccount->sendTrustRequest(bobUri, {});
     CPPUNIT_ASSERT(cv.wait_for(lk, 10s, [&]() { return bobData.requestRemoved && bobData.requestReceived; }));
+    auto newConversationId = aliceData.conversationId;
+    CPPUNIT_ASSERT(!newConversationId.empty());
+    CPPUNIT_ASSERT(newConversationId != oldConversationId);
+
+    // Check that the trust request's data was correctly
+    // updated when we received the second request
+    bobTrustRequests = bobAccount->getTrustRequests();
+    CPPUNIT_ASSERT(bobTrustRequests.size() == 1);
+    request = bobTrustRequests[0];
+    CPPUNIT_ASSERT(request["from"] == aliceUri);
+    CPPUNIT_ASSERT(request["conversationId"] == newConversationId);
 }
 
 void