diff --git a/src/jamidht/conversation_module.cpp b/src/jamidht/conversation_module.cpp
index ef74f915a251d3ec40fd74b228a240e1a6993988..22435b4cdb0a4b6695bf183ed7d840666e0bc1a9 100644
--- a/src/jamidht/conversation_module.cpp
+++ b/src/jamidht/conversation_module.cpp
@@ -1484,6 +1484,12 @@ ConversationModule::updateConversationInfos(const std::string& conversationId,
 std::map<std::string, std::string>
 ConversationModule::conversationInfos(const std::string& conversationId) const
 {
+    {
+        std::lock_guard<std::mutex> lk(pimpl_->conversationsRequestsMtx_);
+        auto itReq = pimpl_->conversationsRequests_.find(conversationId);
+        if (itReq != pimpl_->conversationsRequests_.end())
+            return itReq->second.metadatas;
+    }
     std::lock_guard<std::mutex> lk(pimpl_->conversationsMtx_);
     // Add a new member in the conversation
     auto it = pimpl_->conversations_.find(conversationId);
diff --git a/test/unitTest/conversation/conversation.cpp b/test/unitTest/conversation/conversation.cpp
index 95ed632f2275dbcc42c6cb6cbeb787347f7e0a5e..c7876380c96d283f009defe0e8b88af2fbd18820 100644
--- a/test/unitTest/conversation/conversation.cpp
+++ b/test/unitTest/conversation/conversation.cpp
@@ -40,6 +40,7 @@
 #include "security/certstore.h"
 
 using namespace std::string_literals;
+using namespace std::literals::chrono_literals;
 using namespace DRing::Account;
 
 struct ConvInfoTest
@@ -102,6 +103,7 @@ private:
     void testETooBigFetch();
     void testUnknownModeDetected();
     void testUpdateProfile();
+    void testGetProfileRequest();
     void testCheckProfileInConversationRequest();
     void testCheckProfileInTrustRequest();
     void testMemberCannotUpdateProfile();
@@ -136,6 +138,7 @@ private:
     CPPUNIT_TEST(testETooBigFetch);
     CPPUNIT_TEST(testUnknownModeDetected);
     CPPUNIT_TEST(testUpdateProfile);
+    CPPUNIT_TEST(testGetProfileRequest);
     CPPUNIT_TEST(testCheckProfileInConversationRequest);
     CPPUNIT_TEST(testCheckProfileInTrustRequest);
     CPPUNIT_TEST(testMemberCannotUpdateProfile);
@@ -205,7 +208,7 @@ ConversationTest::testCreateConversation()
 
     // Start conversation
     auto convId = DRing::startConversation(aliceId);
-    cv.wait_for(lk, std::chrono::seconds(30), [&]() { return conversationReady; });
+    cv.wait_for(lk, 30s, [&]() { return conversationReady; });
     CPPUNIT_ASSERT(conversationReady);
     ConversationRepository repo(aliceAccount, convId);
     CPPUNIT_ASSERT(repo.mode() == ConversationMode::INVITES_ONLY);
@@ -266,7 +269,7 @@ ConversationTest::testGetConversationsAfterRm()
 
     // Start conversation
     auto convId = DRing::startConversation(aliceId);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return conversationReady; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return conversationReady; }));
 
     auto conversations = DRing::getConversations(aliceId);
     CPPUNIT_ASSERT(conversations.size() == 1);
@@ -297,7 +300,7 @@ ConversationTest::testRemoveInvalidConversation()
 
     // Start conversation
     auto convId = DRing::startConversation(aliceId);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return conversationReady; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return conversationReady; }));
 
     auto conversations = DRing::getConversations(aliceId);
     CPPUNIT_ASSERT(conversations.size() == 1);
@@ -351,20 +354,20 @@ ConversationTest::testSendMessage()
     auto convId = DRing::startConversation(aliceId);
 
     DRing::addConversationMember(aliceId, convId, bobUri);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return requestReceived; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return requestReceived; }));
 
     DRing::acceptConversationRequest(bobId, convId);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return conversationReady; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return conversationReady; }));
 
     // Assert that repository exists
     auto repoPath = fileutils::get_data_dir() + DIR_SEPARATOR_STR + bobAccount->getAccountID()
                     + DIR_SEPARATOR_STR + "conversations" + DIR_SEPARATOR_STR + convId;
     CPPUNIT_ASSERT(fileutils::isDirectory(repoPath));
     // Wait that alice sees Bob
-    cv.wait_for(lk, std::chrono::seconds(30), [&]() { return messageAliceReceived == 2; });
+    cv.wait_for(lk, 30s, [&]() { return messageAliceReceived == 2; });
 
     DRing::sendMessage(aliceId, convId, "hi"s, "");
-    cv.wait_for(lk, std::chrono::seconds(30), [&]() { return messageBobReceived == 1; });
+    cv.wait_for(lk, 30s, [&]() { return messageBobReceived == 1; });
 }
 
 void
@@ -422,13 +425,13 @@ ConversationTest::testReplaceWithBadCertificate()
     auto convId = DRing::startConversation(aliceId);
 
     DRing::addConversationMember(aliceId, convId, bobUri);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return requestReceived; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return requestReceived; }));
 
     DRing::acceptConversationRequest(bobId, convId);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return conversationReady; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return conversationReady; }));
 
     // Wait that alice sees Bob
-    cv.wait_for(lk, std::chrono::seconds(30), [&]() { return messageAliceReceived == 2; });
+    cv.wait_for(lk, 30s, [&]() { return messageAliceReceived == 2; });
 
     // Replace alice's certificate with a bad one.
     auto repoPath = fmt::format("{}/{}/conversations/{}",
@@ -457,7 +460,7 @@ ConversationTest::testReplaceWithBadCertificate()
     // now we need to sync!
     DRing::sendMessage(aliceId, convId, "trigger sync!"s, "");
     // We should detect the incorrect commit!
-    cv.wait_for(lk, std::chrono::seconds(30), [&]() { return errorDetected; });
+    cv.wait_for(lk, 30s, [&]() { return errorDetected; });
 }
 
 void
@@ -485,10 +488,10 @@ ConversationTest::testSendMessageTriggerMessageReceived()
     DRing::registerSignalHandlers(confHandlers);
 
     auto convId = DRing::startConversation(aliceId);
-    cv.wait_for(lk, std::chrono::seconds(30), [&] { return conversationReady; });
+    cv.wait_for(lk, 30s, [&] { return conversationReady; });
 
     DRing::sendMessage(aliceId, convId, "hi"s, "");
-    cv.wait_for(lk, std::chrono::seconds(30), [&] { return messageReceived == 1; });
+    cv.wait_for(lk, 30s, [&] { return messageReceived == 1; });
     CPPUNIT_ASSERT(messageReceived == 1);
     DRing::unregisterSignalHandlers();
 }
@@ -550,7 +553,7 @@ ConversationTest::testMergeTwoDifferentHeads()
     // Start Carla, should merge and all messages should be there
     Manager::instance().sendRegister(carlaId, true);
     carlaGotMessage = false;
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(60), [&] { return carlaGotMessage; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 60s, [&] { return carlaGotMessage; }));
     DRing::unregisterSignalHandlers();
 }
 
@@ -583,7 +586,7 @@ ConversationTest::testSendMessageToMultipleParticipants()
     DRing::registerSignalHandlers(confHandlers);
 
     Manager::instance().sendRegister(carlaId, true);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(60), [&] { return carlaConnected; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 60s, [&] { return carlaConnected; }));
     confHandlers.clear();
     DRing::unregisterSignalHandlers();
 
@@ -625,14 +628,13 @@ ConversationTest::testSendMessageToMultipleParticipants()
 
     DRing::addConversationMember(aliceId, convId, bobUri);
     DRing::addConversationMember(aliceId, convId, carlaUri);
-    CPPUNIT_ASSERT(
-        cv.wait_for(lk, std::chrono::seconds(60), [&]() { return requestReceived == 2; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 60s, [&]() { return requestReceived == 2; }));
 
     messageReceivedAlice = 0;
     DRing::acceptConversationRequest(bobId, convId);
     DRing::acceptConversationRequest(carlaId, convId);
     // >= because we can have merges cause the accept commits
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(60), [&]() {
+    CPPUNIT_ASSERT(cv.wait_for(lk, 60s, [&]() {
         return conversationReady == 3 && messageReceivedAlice >= 2;
     }));
 
@@ -645,7 +647,7 @@ ConversationTest::testSendMessageToMultipleParticipants()
     CPPUNIT_ASSERT(fileutils::isDirectory(repoPath));
 
     DRing::sendMessage(aliceId, convId, "hi"s, "");
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(60), [&]() {
+    CPPUNIT_ASSERT(cv.wait_for(lk, 60s, [&]() {
         return messageReceivedBob >= 1 && messageReceivedCarla >= 1;
     }));
     DRing::unregisterSignalHandlers();
@@ -692,12 +694,11 @@ ConversationTest::testPingPongMessages()
     DRing::registerSignalHandlers(confHandlers);
     auto convId = DRing::startConversation(aliceId);
     DRing::addConversationMember(aliceId, convId, bobUri);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return requestReceived; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return requestReceived; }));
     messageAliceReceived = 0;
     DRing::acceptConversationRequest(bobId, convId);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(60), [&]() {
-        return conversationReady && messageAliceReceived == 1;
-    }));
+    CPPUNIT_ASSERT(
+        cv.wait_for(lk, 60s, [&]() { return conversationReady && messageAliceReceived == 1; }));
     // Assert that repository exists
     auto repoPath = fileutils::get_data_dir() + DIR_SEPARATOR_STR + bobAccount->getAccountID()
                     + DIR_SEPARATOR_STR + "conversations" + DIR_SEPARATOR_STR + convId;
@@ -705,19 +706,19 @@ ConversationTest::testPingPongMessages()
     messageBobReceived = 0;
     messageAliceReceived = 0;
     DRing::sendMessage(aliceId, convId, "ping"s, "");
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() {
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() {
         return messageBobReceived == 1 && messageAliceReceived == 1;
     }));
     DRing::sendMessage(bobId, convId, "pong"s, "");
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() {
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() {
         return messageBobReceived == 2 && messageAliceReceived == 2;
     }));
     DRing::sendMessage(bobId, convId, "ping"s, "");
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() {
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() {
         return messageBobReceived == 3 && messageAliceReceived == 3;
     }));
     DRing::sendMessage(aliceId, convId, "pong"s, "");
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() {
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() {
         return messageBobReceived == 4 && messageAliceReceived == 4;
     }));
     DRing::unregisterSignalHandlers();
@@ -774,8 +775,7 @@ ConversationTest::testIsComposing()
             }));
     DRing::registerSignalHandlers(confHandlers);
     DRing::addConversationMember(aliceId, convId, bobUri);
-    CPPUNIT_ASSERT(
-        cv.wait_for(lk, std::chrono::seconds(30), [&]() { return memberMessageGenerated; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return memberMessageGenerated; }));
     // Assert that repository exists
     auto repoPath = fileutils::get_data_dir() + DIR_SEPARATOR_STR + aliceAccount->getAccountID()
                     + DIR_SEPARATOR_STR + "conversations" + DIR_SEPARATOR_STR + convId;
@@ -783,17 +783,16 @@ ConversationTest::testIsComposing()
     // Check created files
     auto bobInvited = repoPath + DIR_SEPARATOR_STR + "invited" + DIR_SEPARATOR_STR + bobUri;
     CPPUNIT_ASSERT(fileutils::isFile(bobInvited));
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return requestReceived; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return requestReceived; }));
     memberMessageGenerated = false;
     DRing::acceptConversationRequest(bobId, convId);
-    CPPUNIT_ASSERT(
-        cv.wait_for(lk, std::chrono::seconds(30), [&]() { return memberMessageGenerated; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return memberMessageGenerated; }));
 
     aliceAccount->setIsComposing("swarm:" + convId, true);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return aliceComposing; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return aliceComposing; }));
 
     aliceAccount->setIsComposing("swarm:" + convId, false);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return !aliceComposing; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return !aliceComposing; }));
 }
 
 void
@@ -854,9 +853,8 @@ ConversationTest::testSetMessageDisplayed()
     DRing::registerSignalHandlers(confHandlers);
     aliceLastMsg = "";
     DRing::addConversationMember(aliceId, convId, bobUri);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() {
-        return memberMessageGenerated && !aliceLastMsg.empty();
-    }));
+    CPPUNIT_ASSERT(
+        cv.wait_for(lk, 30s, [&]() { return memberMessageGenerated && !aliceLastMsg.empty(); }));
     // Assert that repository exists
     auto repoPath = fileutils::get_data_dir() + DIR_SEPARATOR_STR + aliceAccount->getAccountID()
                     + DIR_SEPARATOR_STR + "conversations" + DIR_SEPARATOR_STR + convId;
@@ -864,11 +862,10 @@ ConversationTest::testSetMessageDisplayed()
     // Check created files
     auto bobInvited = repoPath + DIR_SEPARATOR_STR + "invited" + DIR_SEPARATOR_STR + bobUri;
     CPPUNIT_ASSERT(fileutils::isFile(bobInvited));
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return requestReceived; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return requestReceived; }));
     memberMessageGenerated = false;
     DRing::acceptConversationRequest(bobId, convId);
-    CPPUNIT_ASSERT(
-        cv.wait_for(lk, std::chrono::seconds(30), [&]() { return memberMessageGenerated; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return memberMessageGenerated; }));
 
     // Last displayed messages should not be set yet
     auto membersInfos = DRing::getConversationMembers(bobId, convId);
@@ -889,7 +886,7 @@ ConversationTest::testSetMessageDisplayed()
                    != membersInfos.end());
 
     aliceAccount->setMessageDisplayed("swarm:" + convId, convId, 3);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return msgDisplayed; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return msgDisplayed; }));
 
     // Now, the last displayed message should be updated in member's infos (both sides)
     membersInfos = DRing::getConversationMembers(bobId, convId);
@@ -982,17 +979,16 @@ ConversationTest::testSetMessageDisplayedPreference()
     CPPUNIT_ASSERT(details[ConfProperties::SENDREADRECEIPT] == "true");
     details[ConfProperties::SENDREADRECEIPT] = "false";
     DRing::setAccountDetails(aliceId, details);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return aliceRegistered; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return aliceRegistered; }));
 
     aliceLastMsg = "";
     DRing::addConversationMember(aliceId, convId, bobUri);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() {
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() {
         return requestReceived && memberMessageGenerated && !aliceLastMsg.empty();
     }));
     memberMessageGenerated = false;
     DRing::acceptConversationRequest(bobId, convId);
-    CPPUNIT_ASSERT(
-        cv.wait_for(lk, std::chrono::seconds(30), [&]() { return memberMessageGenerated; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return memberMessageGenerated; }));
 
     // Last displayed messages should not be set yet
     auto membersInfos = DRing::getConversationMembers(aliceId, convId);
@@ -1007,7 +1003,7 @@ ConversationTest::testSetMessageDisplayedPreference()
 
     aliceAccount->setMessageDisplayed("swarm:" + convId, convId, 3);
     // Bob should not receive anything here, as sendMessageDisplayed is disabled for Alice
-    CPPUNIT_ASSERT(!cv.wait_for(lk, std::chrono::seconds(10), [&]() { return msgDisplayed; }));
+    CPPUNIT_ASSERT(!cv.wait_for(lk, 10s, [&]() { return msgDisplayed; }));
 
     // Assert that message is set as displayed for self (for the read status)
     membersInfos = DRing::getConversationMembers(aliceId, convId);
@@ -1069,13 +1065,13 @@ ConversationTest::testBanDevice()
         }));
     DRing::registerSignalHandlers(confHandlers);
     DRing::addConversationMember(aliceId, convId, bobUri);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() {
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() {
         return requestReceived && memberMessageGenerated;
     }));
     memberMessageGenerated = false;
     DRing::acceptConversationRequest(bobId, convId);
     CPPUNIT_ASSERT(
-        cv.wait_for(lk, std::chrono::seconds(30), [&]() { return memberMessageGenerated; }));
+        cv.wait_for(lk, 30s, [&]() { return memberMessageGenerated; }));
 
     // Add second device for Bob
     auto bobArchive = std::filesystem::current_path().string() + "/bob.gz";
@@ -1105,7 +1101,7 @@ ConversationTest::testBanDevice()
     DRing::registerSignalHandlers(confHandlers);
 
     conversationReady = false;
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(60), [&]() { return conversationReady; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 60s, [&]() { return conversationReady; }));
 
     // Now check that alice, has the only admin, can remove bob
     memberMessageGenerated = false;
@@ -1114,7 +1110,7 @@ ConversationTest::testBanDevice()
     auto members = DRing::getConversationMembers(aliceId, convId);
     CPPUNIT_ASSERT(members.size() == 2);
     DRing::removeConversationMember(aliceId, convId, bobDeviceId, true);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() {
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() {
         return memberMessageGenerated && voteMessageGenerated;
     }));
 
@@ -1127,7 +1123,7 @@ ConversationTest::testBanDevice()
     CPPUNIT_ASSERT(members.size() == 2);
 
     // Assert that bob2 get the message, not Bob
-    CPPUNIT_ASSERT(!cv.wait_for(lk, std::chrono::seconds(10), [&]() { return bobGetMessage; }));
+    CPPUNIT_ASSERT(!cv.wait_for(lk, 10s, [&]() { return bobGetMessage; }));
     CPPUNIT_ASSERT(bob2GetMessage && !bobGetMessage);
     DRing::unregisterSignalHandlers();
 }*/
@@ -1368,32 +1364,28 @@ ConversationTest::testVoteNonEmpty()
         }));
     DRing::registerSignalHandlers(confHandlers);
     Manager::instance().sendRegister(carlaId, true);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(60), [&] { return carlaConnected; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 60s, [&] { return carlaConnected; }));
     DRing::addConversationMember(aliceId, convId, bobUri);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() {
-        return requestReceived && memberMessageGenerated;
-    }));
+    CPPUNIT_ASSERT(
+        cv.wait_for(lk, 30s, [&]() { return requestReceived && memberMessageGenerated; }));
     memberMessageGenerated = false;
     DRing::acceptConversationRequest(bobId, convId);
-    CPPUNIT_ASSERT(
-        cv.wait_for(lk, std::chrono::seconds(30), [&]() { return memberMessageGenerated; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return memberMessageGenerated; }));
     requestReceived = false;
     DRing::addConversationMember(aliceId, convId, carlaUri);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() {
-        return requestReceived && memberMessageGenerated;
-    }));
+    CPPUNIT_ASSERT(
+        cv.wait_for(lk, 30s, [&]() { return requestReceived && memberMessageGenerated; }));
     memberMessageGenerated = false;
     messageBobReceived = false;
     DRing::acceptConversationRequest(carlaId, convId);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() {
-        return memberMessageGenerated && messageBobReceived;
-    }));
+    CPPUNIT_ASSERT(
+        cv.wait_for(lk, 30s, [&]() { return memberMessageGenerated && messageBobReceived; }));
 
     // Now Alice removes Carla with a non empty file
     errorDetected = false;
     addVote(aliceAccount, convId, carlaUri, "CONTENT");
     simulateRemoval(aliceAccount, convId, carlaUri);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return errorDetected; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return errorDetected; }));
 }
 
 void
@@ -1455,12 +1447,12 @@ ConversationTest::testNoBadFileInInitialCommit()
     DRing::registerSignalHandlers(confHandlers);
 
     Manager::instance().sendRegister(carlaId, true);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&] { return carlaConnected; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&] { return carlaConnected; }));
     DRing::addConversationMember(carlaId, convId, aliceUri);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return requestReceived; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return requestReceived; }));
 
     DRing::acceptConversationRequest(aliceId, convId);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return errorDetected; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return errorDetected; }));
 }
 
 void
@@ -1528,12 +1520,12 @@ ConversationTest::testNoBadCertInInitialCommit()
     DRing::registerSignalHandlers(confHandlers);
 
     Manager::instance().sendRegister(carlaId, true);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&] { return carlaConnected; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&] { return carlaConnected; }));
     DRing::addConversationMember(carlaId, convId, aliceUri);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return requestReceived; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return requestReceived; }));
 
     DRing::acceptConversationRequest(aliceId, convId);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return errorDetected; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return errorDetected; }));
 }
 
 void
@@ -1592,15 +1584,12 @@ ConversationTest::testPlainTextNoBadFile()
     DRing::registerSignalHandlers(confHandlers);
 
     DRing::addConversationMember(aliceId, convId, bobUri);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() {
-        return requestReceived && memberMessageGenerated;
-    }));
+    CPPUNIT_ASSERT(
+        cv.wait_for(lk, 30s, [&]() { return requestReceived && memberMessageGenerated; }));
     memberMessageGenerated = false;
 
     DRing::acceptConversationRequest(bobId, convId);
-    cv.wait_for(lk, std::chrono::seconds(30), [&] {
-        return conversationReady && memberMessageGenerated;
-    });
+    cv.wait_for(lk, 30s, [&] { return conversationReady && memberMessageGenerated; });
 
     addFile(aliceAccount, convId, "BADFILE");
     Json::Value root;
@@ -1610,7 +1599,7 @@ ConversationTest::testPlainTextNoBadFile()
     errorDetected = false;
     DRing::sendMessage(aliceId, convId, "hi"s, "");
     // Check not received due to the unwanted file
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return errorDetected; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return errorDetected; }));
     DRing::unregisterSignalHandlers();
 }
 
@@ -1682,40 +1671,34 @@ ConversationTest::testVoteNoBadFile()
         }));
     DRing::registerSignalHandlers(confHandlers);
     Manager::instance().sendRegister(carlaId, true);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return carlaConnected; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return carlaConnected; }));
 
     DRing::addConversationMember(aliceId, convId, bobUri);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() {
-        return requestReceived && memberMessageGenerated;
-    }));
+    CPPUNIT_ASSERT(
+        cv.wait_for(lk, 30s, [&]() { return requestReceived && memberMessageGenerated; }));
     memberMessageGenerated = false;
     DRing::acceptConversationRequest(bobId, convId);
-    CPPUNIT_ASSERT(
-        cv.wait_for(lk, std::chrono::seconds(30), [&]() { return memberMessageGenerated; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return memberMessageGenerated; }));
     requestReceived = false;
     DRing::addConversationMember(aliceId, convId, carlaUri);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() {
-        return requestReceived && memberMessageGenerated;
-    }));
+    CPPUNIT_ASSERT(
+        cv.wait_for(lk, 30s, [&]() { return requestReceived && memberMessageGenerated; }));
     memberMessageGenerated = false;
     messageBobReceived = false;
     DRing::acceptConversationRequest(carlaId, convId);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() {
-        return memberMessageGenerated && messageBobReceived;
-    }));
+    CPPUNIT_ASSERT(
+        cv.wait_for(lk, 30s, [&]() { return memberMessageGenerated && messageBobReceived; }));
 
     // Now Alice remove Carla without a vote. Bob will not receive the message
     messageBobReceived = false;
     addFile(aliceAccount, convId, "BADFILE");
     DRing::removeConversationMember(aliceId, convId, bobUri);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() {
-        return memberMessageGenerated && voteMessageGenerated;
-    }));
+    CPPUNIT_ASSERT(
+        cv.wait_for(lk, 30s, [&]() { return memberMessageGenerated && voteMessageGenerated; }));
 
     messageCarlaReceived = false;
     DRing::sendMessage(bobId, convId, "final"s, "");
-    CPPUNIT_ASSERT(
-        cv.wait_for(lk, std::chrono::seconds(30), [&]() { return messageCarlaReceived; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return messageCarlaReceived; }));
 }
 
 void
@@ -1784,11 +1767,11 @@ ConversationTest::testETooBigClone()
     addAll(aliceAccount, convId);
 
     DRing::addConversationMember(aliceId, convId, bobUri);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return requestReceived; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return requestReceived; }));
 
     errorDetected = false;
     DRing::acceptConversationRequest(bobId, convId);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return errorDetected; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return errorDetected; }));
     DRing::unregisterSignalHandlers();
 }
 
@@ -1847,13 +1830,13 @@ ConversationTest::testETooBigFetch()
     auto convId = DRing::startConversation(aliceId);
 
     DRing::addConversationMember(aliceId, convId, bobUri);
-    cv.wait_for(lk, std::chrono::seconds(30), [&]() { return requestReceived; });
+    cv.wait_for(lk, 30s, [&]() { return requestReceived; });
 
     DRing::acceptConversationRequest(bobId, convId);
-    cv.wait_for(lk, std::chrono::seconds(30), [&]() { return conversationReady; });
+    cv.wait_for(lk, 30s, [&]() { return conversationReady; });
 
     // Wait that alice sees Bob
-    cv.wait_for(lk, std::chrono::seconds(30), [&]() { return messageAliceReceived == 2; });
+    cv.wait_for(lk, 30s, [&]() { return messageAliceReceived == 2; });
 
     auto repoPath = fileutils::get_data_dir() + DIR_SEPARATOR_STR + aliceAccount->getAccountID()
                     + DIR_SEPARATOR_STR + "conversations" + DIR_SEPARATOR_STR + convId;
@@ -1871,7 +1854,7 @@ ConversationTest::testETooBigFetch()
     commit(aliceAccount, convId, json);
 
     DRing::sendMessage(aliceId, convId, "hi"s, "");
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return errorDetected; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return errorDetected; }));
     DRing::unregisterSignalHandlers();
 }
 
@@ -1931,10 +1914,10 @@ ConversationTest::testUnknownModeDetected()
         }));
     DRing::registerSignalHandlers(confHandlers);
     DRing::addConversationMember(aliceId, convId, bobUri);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return requestReceived; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return requestReceived; }));
     errorDetected = false;
     DRing::acceptConversationRequest(bobId, convId);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return errorDetected; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return errorDetected; }));
 }
 
 void
@@ -1982,18 +1965,63 @@ ConversationTest::testUpdateProfile()
     auto convId = DRing::startConversation(aliceId);
 
     DRing::addConversationMember(aliceId, convId, bobUri);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return requestReceived; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return requestReceived; }));
 
     messageAliceReceived = 0;
     DRing::acceptConversationRequest(bobId, convId);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() {
-        return conversationReady && messageAliceReceived == 1;
-    }));
+    CPPUNIT_ASSERT(
+        cv.wait_for(lk, 30s, [&]() { return conversationReady && messageAliceReceived == 1; }));
 
     messageBobReceived = 0;
     aliceAccount->convModule()->updateConversationInfos(convId, {{"title", "My awesome swarm"}});
-    CPPUNIT_ASSERT(
-        cv.wait_for(lk, std::chrono::seconds(30), [&]() { return messageBobReceived == 1; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return messageBobReceived == 1; }));
+
+    auto infos = DRing::conversationInfos(bobId, convId);
+    CPPUNIT_ASSERT(infos["title"] == "My awesome swarm");
+    CPPUNIT_ASSERT(infos["description"].empty());
+
+    DRing::unregisterSignalHandlers();
+}
+
+void
+ConversationTest::testGetProfileRequest()
+{
+    auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
+    auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
+    auto bobUri = bobAccount->getUsername();
+
+    std::mutex mtx;
+    std::unique_lock<std::mutex> lk {mtx};
+    std::condition_variable cv;
+    std::map<std::string, std::shared_ptr<DRing::CallbackWrapperBase>> confHandlers;
+    auto messageAliceReceived = 0;
+    confHandlers.insert(DRing::exportable_callback<DRing::ConversationSignal::MessageReceived>(
+        [&](const std::string& accountId,
+            const std::string& /* conversationId */,
+            std::map<std::string, std::string> /*message*/) {
+            if (accountId == aliceId)
+                messageAliceReceived += 1;
+            cv.notify_one();
+        }));
+    bool requestReceived = false;
+    confHandlers.insert(
+        DRing::exportable_callback<DRing::ConversationSignal::ConversationRequestReceived>(
+            [&](const std::string& /*accountId*/,
+                const std::string& /* conversationId */,
+                std::map<std::string, std::string> /*metadatas*/) {
+                requestReceived = true;
+                cv.notify_one();
+            }));
+    DRing::registerSignalHandlers(confHandlers);
+
+    auto convId = DRing::startConversation(aliceId);
+
+    messageAliceReceived = 0;
+    aliceAccount->convModule()->updateConversationInfos(convId, {{"title", "My awesome swarm"}});
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return messageAliceReceived == 1; }));
+
+    DRing::addConversationMember(aliceId, convId, bobUri);
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return requestReceived; }));
 
     auto infos = DRing::conversationInfos(bobId, convId);
     CPPUNIT_ASSERT(infos["title"] == "My awesome swarm");
@@ -2048,7 +2076,7 @@ ConversationTest::testCheckProfileInConversationRequest()
     aliceAccount->convModule()->updateConversationInfos(convId, {{"title", "My awesome swarm"}});
 
     DRing::addConversationMember(aliceId, convId, bobUri);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return requestReceived; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return requestReceived; }));
     auto requests = DRing::getConversationRequests(bobId);
     CPPUNIT_ASSERT(requests.size() == 1);
     CPPUNIT_ASSERT(requests.front()["title"] == "My awesome swarm");
@@ -2108,9 +2136,7 @@ END:VCARD";
     aliceAccount->addContact(bobUri);
     std::vector<uint8_t> payload(vcard.begin(), vcard.end());
     aliceAccount->sendTrustRequest(bobUri, payload);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(10), [&]() {
-        return !convId.empty() && requestReceived;
-    }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 10s, [&]() { return !convId.empty() && requestReceived; }));
 }
 
 void
@@ -2168,17 +2194,16 @@ ConversationTest::testMemberCannotUpdateProfile()
     DRing::registerSignalHandlers(confHandlers);
 
     DRing::addConversationMember(aliceId, convId, bobUri);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return requestReceived; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return requestReceived; }));
 
     messageAliceReceived = 0;
     DRing::acceptConversationRequest(bobId, convId);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() {
-        return conversationReady && messageAliceReceived == 1;
-    }));
+    CPPUNIT_ASSERT(
+        cv.wait_for(lk, 30s, [&]() { return conversationReady && messageAliceReceived == 1; }));
 
     messageBobReceived = 0;
     bobAccount->convModule()->updateConversationInfos(convId, {{"title", "My awesome swarm"}});
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(5), [&]() { return errorDetected; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 5s, [&]() { return errorDetected; }));
 
     DRing::unregisterSignalHandlers();
 }
@@ -2237,13 +2262,12 @@ ConversationTest::testUpdateProfileWithBadFile()
     DRing::registerSignalHandlers(confHandlers);
 
     DRing::addConversationMember(aliceId, convId, bobUri);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return requestReceived; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return requestReceived; }));
 
     messageAliceReceived = 0;
     DRing::acceptConversationRequest(bobId, convId);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() {
-        return conversationReady && messageAliceReceived == 1;
-    }));
+    CPPUNIT_ASSERT(
+        cv.wait_for(lk, 30s, [&]() { return conversationReady && messageAliceReceived == 1; }));
 
     // Update profile but with bad file
     addFile(aliceAccount, convId, "BADFILE");
@@ -2258,7 +2282,7 @@ END:VCARD";
     commit(aliceAccount, convId, root);
     errorDetected = false;
     DRing::sendMessage(aliceId, convId, "hi"s, "");
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return errorDetected; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return errorDetected; }));
 
     DRing::unregisterSignalHandlers();
 }
@@ -2317,13 +2341,12 @@ ConversationTest::testFetchProfileUnauthorized()
     DRing::registerSignalHandlers(confHandlers);
 
     DRing::addConversationMember(aliceId, convId, bobUri);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return requestReceived; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return requestReceived; }));
 
     messageAliceReceived = 0;
     DRing::acceptConversationRequest(bobId, convId);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() {
-        return conversationReady && messageAliceReceived == 1;
-    }));
+    CPPUNIT_ASSERT(
+        cv.wait_for(lk, 30s, [&]() { return conversationReady && messageAliceReceived == 1; }));
 
     // Fake realist profile update
     std::string vcard = "BEGIN:VCARD\n\
@@ -2337,7 +2360,7 @@ END:VCARD";
     commit(bobAccount, convId, root);
     errorDetected = false;
     DRing::sendMessage(bobId, convId, "hi"s, "");
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return errorDetected; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return errorDetected; }));
 
     DRing::unregisterSignalHandlers();
 }
@@ -2403,7 +2426,7 @@ ConversationTest::testSyncingWhileAccepting()
     DRing::registerSignalHandlers(confHandlers);
     aliceAccount->addContact(bobUri);
     aliceAccount->sendTrustRequest(bobUri, {});
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return requestReceived; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return requestReceived; }));
 
     Manager::instance().sendRegister(aliceId, false); // This avoid to sync immediately
     CPPUNIT_ASSERT(bobAccount->acceptTrustRequest(aliceUri));
@@ -2412,7 +2435,7 @@ ConversationTest::testSyncingWhileAccepting()
     CPPUNIT_ASSERT(convInfos["syncing"] == "true");
 
     Manager::instance().sendRegister(aliceId, true); // This avoid to sync immediately
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return conversationReady; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return conversationReady; }));
 
     convInfos = DRing::conversationInfos(bobId, convId);
     CPPUNIT_ASSERT(convInfos.find("syncing") == convInfos.end());
@@ -2433,19 +2456,19 @@ ConversationTest::testCountInteractions()
             msgId1 = commitId;
             cv.notify_one();
         });
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&] { return !msgId1.empty(); }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&] { return !msgId1.empty(); }));
     aliceAccount->convModule()
         ->sendMessage(convId, "2"s, "", "text/plain", true, [&](bool, std::string commitId) {
             msgId2 = commitId;
             cv.notify_one();
         });
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&] { return !msgId2.empty(); }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&] { return !msgId2.empty(); }));
     aliceAccount->convModule()
         ->sendMessage(convId, "3"s, "", "text/plain", true, [&](bool, std::string commitId) {
             msgId3 = commitId;
             cv.notify_one();
         });
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&] { return !msgId3.empty(); }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&] { return !msgId3.empty(); }));
 
     CPPUNIT_ASSERT(DRing::countInteractions(aliceId, convId, "", "", "") == 4 /* 3 + initial */);
     CPPUNIT_ASSERT(DRing::countInteractions(aliceId, convId, "", "", aliceAccount->getUsername())
@@ -2511,31 +2534,30 @@ ConversationTest::testReplayConversation()
     requestReceived = false;
     aliceAccount->addContact(bobUri);
     aliceAccount->sendTrustRequest(bobUri, {});
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return requestReceived; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return requestReceived; }));
     CPPUNIT_ASSERT(bobAccount->acceptTrustRequest(aliceUri));
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() {
-        return conversationReady && memberMessageGenerated;
-    }));
+    CPPUNIT_ASSERT(
+        cv.wait_for(lk, 30s, [&]() { return conversationReady && memberMessageGenerated; }));
     // removeContact
     aliceAccount->removeContact(bobUri, false);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return conversationRemoved; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return conversationRemoved; }));
     // re-add
     CPPUNIT_ASSERT(convId != "");
     auto oldConvId = convId;
     convId = "";
     aliceAccount->addContact(bobUri);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return !convId.empty(); }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return !convId.empty(); }));
     messageReceived = false;
     DRing::sendMessage(aliceId, convId, "foo"s, "");
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return messageReceived; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return messageReceived; }));
     messageReceived = false;
     DRing::sendMessage(aliceId, convId, "bar"s, "");
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return messageReceived; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return messageReceived; }));
     convId = "";
     bobMessages.clear();
     aliceAccount->sendTrustRequest(bobUri, {});
     // Should retrieve previous conversation
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() {
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() {
         return bobMessages.size() == 2 && bobMessages[0] == "foo" && bobMessages[1] == "bar";
     }));
 }
@@ -2622,34 +2644,33 @@ ConversationTest::testSyncWithoutPinnedCert()
     bob2Id = Manager::instance().addAccount(details);
 
     // Disconnect bob2, to create a valid conv betwen Alice and Bob1
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return bob2Started; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return bob2Started; }));
     bob2Stopped = false;
     Manager::instance().sendRegister(bob2Id, false);
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return bob2Stopped; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return bob2Stopped; }));
 
     // Alice adds bob
     requestReceived = false;
     aliceAccount->addContact(bobUri);
     aliceAccount->sendTrustRequest(bobUri, {});
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return requestReceived; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return requestReceived; }));
     CPPUNIT_ASSERT(bobAccount->acceptTrustRequest(aliceUri));
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() {
-        return conversationReady && memberMessageGenerated;
-    }));
+    CPPUNIT_ASSERT(
+        cv.wait_for(lk, 30s, [&]() { return conversationReady && memberMessageGenerated; }));
 
     // Bob send a message
     DRing::sendMessage(bobId, convId, "hi"s, "");
-    cv.wait_for(lk, std::chrono::seconds(30), [&]() { return aliceMessageReceived; });
+    cv.wait_for(lk, 30s, [&]() { return aliceMessageReceived; });
 
     // Alice off, bob2 On
     conversationReady = false;
     aliceStopped = false;
     Manager::instance().sendRegister(aliceId, false);
-    cv.wait_for(lk, std::chrono::seconds(10), [&]() { return aliceStopped; });
+    cv.wait_for(lk, 10s, [&]() { return aliceStopped; });
     Manager::instance().sendRegister(bob2Id, true);
 
     // Sync + validate
-    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&]() { return conversationReady; }));
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return conversationReady; }));
 }
 
 void