diff --git a/test/unitTest/account_factory/testAccount_factory.cpp b/test/unitTest/account_factory/testAccount_factory.cpp
index dcec3b2db5820f630e165a24199489531dc894f0..37687bf4fa9d85606c2abf49d5572b781066291f 100644
--- a/test/unitTest/account_factory/testAccount_factory.cpp
+++ b/test/unitTest/account_factory/testAccount_factory.cpp
@@ -21,17 +21,33 @@
 #include <cppunit/TestFixture.h>
 #include <cppunit/extensions/HelperMacros.h>
 
+#include <condition_variable>
+
 #include "account_factory.h"
 #include "../../test_runner.h"
 #include "jami.h"
 #include "account_const.h"
+#include "manager.h"
+#include "account_const.h"
+#include "account_schema.h"
+#include "common.h"
+#include "jamidht/jamiaccount.h"
 
+using namespace std::literals::chrono_literals;
 
 namespace jami { namespace test {
 
 class Account_factoryTest : public CppUnit::TestFixture {
 public:
-    static std::string name() { return "account_factory"; }
+    Account_factoryTest()
+    {
+        // Init daemon
+        libjami::init(libjami::InitFlag(libjami::LIBJAMI_FLAG_DEBUG | libjami::LIBJAMI_FLAG_CONSOLE_LOG));
+        if (not Manager::instance().initialized)
+            CPPUNIT_ASSERT(libjami::start("dring-sample.yml"));
+    }
+    ~Account_factoryTest() { libjami::fini(); }
+    static std::string name() { return "Account_factory"; }
     void setUp();
     void tearDown();
 
@@ -46,9 +62,14 @@ private:
     CPPUNIT_TEST(testClear);
     CPPUNIT_TEST_SUITE_END();
 
-    const std::string SIP_ID="SIP_ID";
-    const std::string RING_ID="RING_ID";
-    std::unique_ptr<AccountFactory> accountFactory;
+    const std::string SIP_ID = "SIP_ID";
+    const std::string RING_ID = "RING_ID";
+    bool sipReady, ringReady, accountsRemoved;
+    size_t initialAccounts;
+    std::map<std::string, std::shared_ptr<libjami::CallbackWrapperBase>> confHandlers;
+    std::mutex mtx;
+    std::unique_lock<std::mutex> lk {mtx};
+    std::condition_variable cv;
 };
 
 CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(Account_factoryTest, Account_factoryTest::name());
@@ -56,81 +77,110 @@ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(Account_factoryTest, Account_factoryTest::
 void
 Account_factoryTest::setUp()
 {
-    // Init daemon
-    libjami::init(libjami::InitFlag(libjami::LIBJAMI_FLAG_DEBUG | libjami::LIBJAMI_FLAG_CONSOLE_LOG));
-    CPPUNIT_ASSERT(libjami::start("jami-sample.yml"));
-
-    accountFactory.reset(new AccountFactory);
+    sipReady = false;
+    ringReady = false;
+    accountsRemoved = false;
+    initialAccounts = Manager::instance().accountCount();
+
+    confHandlers.insert(
+        libjami::exportable_callback<libjami::ConfigurationSignal::VolatileDetailsChanged>(
+            [&](const std::string& accountID,
+                const std::map<std::string, std::string>& details) {
+                if (accountID != RING_ID && accountID != SIP_ID) {
+                    return;
+                }
+                try {
+                    ringReady |= accountID == RING_ID
+                                && details.at(jami::Conf::CONFIG_ACCOUNT_REGISTRATION_STATUS) == "REGISTERED"
+                                && details.at(libjami::Account::VolatileProperties::DEVICE_ANNOUNCED) == "true";
+                    sipReady |= accountID == SIP_ID
+                                && details.at(jami::Conf::CONFIG_ACCOUNT_REGISTRATION_STATUS) == "READY";
+                } catch (const std::out_of_range&) {}
+            }));
+    confHandlers.insert(
+        libjami::exportable_callback<libjami::ConfigurationSignal::AccountsChanged>([&]() {
+            if (jami::Manager::instance().getAccountList().size() <= initialAccounts) {
+                accountsRemoved = true;
+            }
+        }));
+    libjami::registerSignalHandlers(confHandlers);
 }
 
 void
 Account_factoryTest::tearDown()
 {
-    // Stop daemon
-    libjami::fini();
+    libjami::unregisterSignalHandlers();
 }
 
-
 void
 Account_factoryTest::testAddRemoveSIPAccount()
 {
-    // verify if there is no account at the beginning
-    CPPUNIT_ASSERT(accountFactory->empty());
-    CPPUNIT_ASSERT(accountFactory->accountCount()==0);
+    AccountFactory* accountFactory = &Manager::instance().accountFactory;
+
+    auto accDetails = libjami::getAccountTemplate("SIP");
+    auto newAccount = Manager::instance().addAccount(accDetails, SIP_ID);
 
-    accountFactory->createAccount(libjami::Account::ProtocolNames::SIP, SIP_ID);
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&] {
+        return sipReady;
+    }));
 
     CPPUNIT_ASSERT(accountFactory->hasAccount(SIP_ID));
     CPPUNIT_ASSERT(!accountFactory->hasAccount(RING_ID));
     CPPUNIT_ASSERT(!accountFactory->empty());
-    CPPUNIT_ASSERT(accountFactory->accountCount()==1);
+    CPPUNIT_ASSERT(accountFactory->accountCount() == 1 + initialAccounts);
+
+    auto details = Manager::instance().getVolatileAccountDetails(SIP_ID);
+    CPPUNIT_ASSERT(details.find(libjami::Account::ConfProperties::DEVICE_ID) == details.end());
 
-    accountFactory->removeAccount(SIP_ID);
+    Manager::instance().removeAccount(SIP_ID, true);
 
-    CPPUNIT_ASSERT(accountFactory->empty());
-    CPPUNIT_ASSERT(accountFactory->accountCount()==0);
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&] { return accountsRemoved; }));
 }
 
 void
 Account_factoryTest::testAddRemoveRINGAccount()
 {
-    // verify if there is no account at the beginning
-    CPPUNIT_ASSERT(accountFactory->empty());
-    CPPUNIT_ASSERT(accountFactory->accountCount()==0);
+    AccountFactory* accountFactory = &Manager::instance().accountFactory;
 
-    accountFactory->createAccount(libjami::Account::ProtocolNames::RING, RING_ID);
+    auto accDetails = libjami::getAccountTemplate("RING");
+    auto newAccount = Manager::instance().addAccount(accDetails, RING_ID);
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&] {
+        return ringReady;
+    }));
 
     CPPUNIT_ASSERT(accountFactory->hasAccount(RING_ID));
     CPPUNIT_ASSERT(!accountFactory->hasAccount(SIP_ID));
     CPPUNIT_ASSERT(!accountFactory->empty());
-    CPPUNIT_ASSERT(accountFactory->accountCount()==1);
+    CPPUNIT_ASSERT(accountFactory->accountCount() == 1 + initialAccounts);
 
-    accountFactory->removeAccount(RING_ID);
+    auto details = Manager::instance().getVolatileAccountDetails(RING_ID);
+    CPPUNIT_ASSERT(details.find(libjami::Account::ConfProperties::DEVICE_ID) != details.end());
 
-    CPPUNIT_ASSERT(accountFactory->empty());
-    CPPUNIT_ASSERT(accountFactory->accountCount()==0);
+    Manager::instance().removeAccount(RING_ID, true);
+    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&] { return accountsRemoved; }));
 }
 
 void
 Account_factoryTest::testClear()
 {
+    AccountFactory accountFactory;
     // verify if there is no account at the beginning
-    CPPUNIT_ASSERT(accountFactory->empty());
-    CPPUNIT_ASSERT(accountFactory->accountCount()==0);
+    CPPUNIT_ASSERT(accountFactory.empty());
+    CPPUNIT_ASSERT(accountFactory.accountCount() == 0);
 
     const int nbrAccount = 5;
 
     for(int i = 0; i < nbrAccount ; ++i) {
-        accountFactory->createAccount(libjami::Account::ProtocolNames::RING, RING_ID+std::to_string(i));
+        accountFactory.createAccount(libjami::Account::ProtocolNames::RING, RING_ID+std::to_string(i));
     }
 
-    CPPUNIT_ASSERT(accountFactory->accountCount()==nbrAccount);
-    CPPUNIT_ASSERT(!accountFactory->empty());
+    CPPUNIT_ASSERT(accountFactory.accountCount()==nbrAccount);
+    CPPUNIT_ASSERT(!accountFactory.empty());
 
-    accountFactory->clear();
+    accountFactory.clear();
 
-    CPPUNIT_ASSERT(accountFactory->empty());
-    CPPUNIT_ASSERT(accountFactory->accountCount()==0);
+    CPPUNIT_ASSERT(accountFactory.empty());
+    CPPUNIT_ASSERT(accountFactory.accountCount()==0);
 }
 
 }} // namespace jami::test