diff --git a/test/unitTest/conversation/conversation.cpp b/test/unitTest/conversation/conversation.cpp
index 790d487255af5b615b8582620b2ff1c0cad636d8..904a45ed6d22ea7a7d2a737870df751fa6b5ad3c 100644
--- a/test/unitTest/conversation/conversation.cpp
+++ b/test/unitTest/conversation/conversation.cpp
@@ -1428,9 +1428,9 @@ ConversationTest::testBanDevice()
          voteMessageGenerated = false, bob2GetMessage = false, bobGetMessage = false;
     confHandlers.insert(
         DRing::exportable_callback<DRing::ConversationSignal::ConversationRequestReceived>(
-            [&](const std::string& /*accountId* /,
-                const std::string& /* conversationId * /,
-                std::map<std::string, std::string> /*metadatas* /) {
+            [&](const std::string&,
+                const std::string&,
+                std::map<std::string, std::string>) {
                 requestReceived = true;
                 cv.notify_one();
             }));
@@ -2182,9 +2182,7 @@ ConversationTest::testMemberCannotBanOther()
          carlaConnected = false;
     confHandlers.insert(
         DRing::exportable_callback<DRing::ConversationSignal::ConversationRequestReceived>(
-            [&](const std::string& accountId,
-                const std::string& /* conversationId */,
-                std::map<std::string, std::string> /*metadatas*/) {
+            [&](const std::string&, const std::string&, std::map<std::string, std::string>) {
                 requestReceived = true;
                 cv.notify_one();
             }));
@@ -3010,7 +3008,8 @@ ConversationTest::testMemberJoinsNoBadFile()
     std::unique_lock<std::mutex> lk {mtx};
     std::condition_variable cv;
     std::map<std::string, std::shared_ptr<DRing::CallbackWrapperBase>> confHandlers;
-    bool conversationReady = false, errorDetected = false, carlaConnected = false;
+    bool conversationReady = false, errorDetected = false, carlaConnected = false,
+         memberMessageGenerated = false;
     confHandlers.insert(DRing::exportable_callback<DRing::ConversationSignal::ConversationReady>(
         [&](const std::string& accountId, const std::string& /* conversationId */) {
             if (accountId == carlaId) {
@@ -3018,12 +3017,21 @@ ConversationTest::testMemberJoinsNoBadFile()
                 cv.notify_one();
             }
         }));
+    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 && conversationId == convId && message["type"] == "member") {
+                memberMessageGenerated = true;
+                cv.notify_one();
+            }
+        }));
     confHandlers.insert(
         DRing::exportable_callback<DRing::ConfigurationSignal::VolatileDetailsChanged>(
             [&](const std::string&, const std::map<std::string, std::string>&) {
                 auto details = carlaAccount->getVolatileAccountDetails();
-                auto daemonStatus = details[DRing::Account::ConfProperties::Registration::STATUS];
-                if (daemonStatus == "REGISTERED") {
+                auto deviceAnnounced = details[DRing::Account::VolatileProperties::DEVICE_ANNOUNCED];
+                if (deviceAnnounced == "true") {
                     carlaConnected = true;
                     cv.notify_one();
                 }
@@ -3040,6 +3048,7 @@ ConversationTest::testMemberJoinsNoBadFile()
     DRing::registerSignalHandlers(confHandlers);
 
     aliceAccount->addConversationMember(convId, carlaUri, false);
+    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(5), [&] { return memberMessageGenerated; }));
 
     // Cp conversations & convInfo
     auto repoPathAlice = fileutils::get_data_dir() + DIR_SEPARATOR_STR
@@ -3057,15 +3066,14 @@ ConversationTest::testMemberJoinsNoBadFile()
     // Accept for alice and makes different heads
     addFile(carlaAccount, convId, "BADFILE");
     ConversationRepository repo(carlaAccount, convId);
-    repo.join();
 
     // Start Carla, should merge and all messages should be there
-    Manager::instance().sendRegister(carlaId, true);
     carlaAccount->loadConversations(); // Because of the copy
+    Manager::instance().sendRegister(carlaId, true);
     CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&] { return carlaConnected; }));
 
-    carlaAccount->sendMessage(convId, "hi"s);
     errorDetected = false;
+    carlaAccount->sendMessage(convId, "hi"s);
 
     CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(60), [&] { return errorDetected; }));
     DRing::unregisterSignalHandlers();
@@ -3084,7 +3092,8 @@ ConversationTest::testMemberAddedNoCertificate()
     std::unique_lock<std::mutex> lk {mtx};
     std::condition_variable cv;
     std::map<std::string, std::shared_ptr<DRing::CallbackWrapperBase>> confHandlers;
-    bool conversationReady = false, errorDetected = false, carlaConnected = false;
+    bool conversationReady = false, errorDetected = false, carlaConnected = false,
+         memberMessageGenerated = false;
     confHandlers.insert(DRing::exportable_callback<DRing::ConversationSignal::ConversationReady>(
         [&](const std::string& accountId, const std::string& /* conversationId */) {
             if (accountId == carlaId) {
@@ -3092,12 +3101,21 @@ ConversationTest::testMemberAddedNoCertificate()
                 cv.notify_one();
             }
         }));
+    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 && conversationId == convId && message["type"] == "member") {
+                memberMessageGenerated = true;
+                cv.notify_one();
+            }
+        }));
     confHandlers.insert(
         DRing::exportable_callback<DRing::ConfigurationSignal::VolatileDetailsChanged>(
             [&](const std::string&, const std::map<std::string, std::string>&) {
                 auto details = carlaAccount->getVolatileAccountDetails();
-                auto daemonStatus = details[DRing::Account::ConfProperties::Registration::STATUS];
-                if (daemonStatus == "REGISTERED") {
+                auto deviceAnnounced = details[DRing::Account::VolatileProperties::DEVICE_ANNOUNCED];
+                if (deviceAnnounced == "true") {
                     carlaConnected = true;
                     cv.notify_one();
                 }
@@ -3114,6 +3132,7 @@ ConversationTest::testMemberAddedNoCertificate()
     DRing::registerSignalHandlers(confHandlers);
 
     aliceAccount->addConversationMember(convId, carlaUri, false);
+    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(5), [&] { return memberMessageGenerated; }));
 
     // Cp conversations & convInfo
     auto repoPathAlice = fileutils::get_data_dir() + DIR_SEPARATOR_STR
@@ -3167,7 +3186,8 @@ ConversationTest::testMemberJoinsInviteRemoved()
     std::unique_lock<std::mutex> lk {mtx};
     std::condition_variable cv;
     std::map<std::string, std::shared_ptr<DRing::CallbackWrapperBase>> confHandlers;
-    bool conversationReady = false, errorDetected = false, carlaConnected = false;
+    bool conversationReady = false, errorDetected = false, carlaConnected = false,
+         memberMessageGenerated = false;
     confHandlers.insert(DRing::exportable_callback<DRing::ConversationSignal::ConversationReady>(
         [&](const std::string& accountId, const std::string& /* conversationId */) {
             if (accountId == carlaId) {
@@ -3175,12 +3195,21 @@ ConversationTest::testMemberJoinsInviteRemoved()
                 cv.notify_one();
             }
         }));
+    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 && conversationId == convId && message["type"] == "member") {
+                memberMessageGenerated = true;
+                cv.notify_one();
+            }
+        }));
     confHandlers.insert(
         DRing::exportable_callback<DRing::ConfigurationSignal::VolatileDetailsChanged>(
             [&](const std::string&, const std::map<std::string, std::string>&) {
                 auto details = carlaAccount->getVolatileAccountDetails();
-                auto daemonStatus = details[DRing::Account::ConfProperties::Registration::STATUS];
-                if (daemonStatus == "REGISTERED") {
+                auto deviceAnnounced = details[DRing::Account::VolatileProperties::DEVICE_ANNOUNCED];
+                if (deviceAnnounced == "true") {
                     carlaConnected = true;
                     cv.notify_one();
                 }
@@ -3197,6 +3226,7 @@ ConversationTest::testMemberJoinsInviteRemoved()
     DRing::registerSignalHandlers(confHandlers);
 
     aliceAccount->addConversationMember(convId, carlaUri, false);
+    CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(5), [&] { return memberMessageGenerated; }));
 
     // Cp conversations & convInfo
     auto repoPathAlice = fileutils::get_data_dir() + DIR_SEPARATOR_STR