diff --git a/src/jamidht/account_manager.h b/src/jamidht/account_manager.h
index 3f0feb8be1bd186524b8dd4cf20f4728b5995964..da2bf2680e2c92091421688f62f329d345cf954b 100644
--- a/src/jamidht/account_manager.h
+++ b/src/jamidht/account_manager.h
@@ -72,11 +72,9 @@ public:
     AccountManager(
         const std::string& path,
         OnAsync&& onAsync,
-        std::shared_ptr<dht::DhtRunner> dht,
         const std::string& nameServer)
     : path_(path)
     , onAsync_(std::move(onAsync))
-    , dht_(std::move(dht))
     , nameDir_(NameDirectory::instance(nameServer)) {};
 
     virtual ~AccountManager() = default;
@@ -128,6 +126,8 @@ public:
         const std::vector<uint8_t>& receiptSignature,
         OnChangeCallback&& onChange);
 
+    void setDht(const std::shared_ptr<dht::DhtRunner>& dht) { dht_ = dht; }
+
     virtual void startSync() {};
 
     const AccountInfo* getInfo() const {
diff --git a/src/jamidht/archive_account_manager.h b/src/jamidht/archive_account_manager.h
index f3652053e7bd32d4da18301e1da724a898ff1da1..c6c103f4a3ab46ed6d94f394e6308e09d67a8368 100644
--- a/src/jamidht/archive_account_manager.h
+++ b/src/jamidht/archive_account_manager.h
@@ -27,12 +27,11 @@ public:
 
     ArchiveAccountManager(
         const std::string& path,
-        std::shared_ptr<dht::DhtRunner> dht,
         OnAsync&& onAsync,
         OnExportConfig&& onExportConfig,
         std::string archivePath,
         const std::string& nameServer)
-     : AccountManager(path, std::move(onAsync), std::move(dht), nameServer)
+     : AccountManager(path, std::move(onAsync), nameServer)
         , onExportConfig_(std::move(onExportConfig))
         , archivePath_(std::move(archivePath))
         {};
diff --git a/src/jamidht/jamiaccount.cpp b/src/jamidht/jamiaccount.cpp
index 1560cf5a37820f5c318257c4027c7ad6e5a33f73..aaffbf2c669ffceb971ed2e81e5cd6d8a5a268ef 100644
--- a/src/jamidht/jamiaccount.cpp
+++ b/src/jamidht/jamiaccount.cpp
@@ -892,14 +892,12 @@ JamiAccount::loadAccount(const std::string& archive_password, const std::string&
         };
         if (managerUri_.empty()) {
             accountManager_.reset(new ArchiveAccountManager(getPath(),
-                dht_,
                 onAsync,
                 [this]() { return getAccountDetails(); },
                 archivePath_.empty() ? "archive.gz" : archivePath_,
                 nameServer_));
         } else {
             accountManager_.reset(new ServerAccountManager(getPath(),
-                dht_,
                 onAsync,
                 managerUri_,
                 nameServer_));
@@ -997,31 +995,6 @@ JamiAccount::loadAccount(const std::string& archive_password, const std::string&
                 receiptSignature_ = std::move(receipt_signature);
                 accountManager_->foundAccountDevice(info.identity.second, ringDeviceName_, clock::now());
                 setRegistrationState(RegistrationState::UNREGISTERED);
-
-                AccountManager::OnChangeCallback callbacks {
-                    [this](const std::string& uri, bool confirmed) {
-                        dht::ThreadPool::computation().run([this, uri, confirmed] {
-                                emitSignal<DRing::ConfigurationSignal::ContactAdded>(getAccountID(), uri, confirmed);
-                            });
-                    },
-                    [this](const std::string& uri, bool banned) {
-                        dht::ThreadPool::computation().run([this, uri, banned] {
-                                emitSignal<DRing::ConfigurationSignal::ContactRemoved>(getAccountID(), uri, banned);
-                            });
-                    },
-                    [this](const std::string& uri, const std::vector<uint8_t>& payload, time_t received) {
-                        dht::ThreadPool::computation().run([this, uri, payload = std::move(payload), received] {
-                                emitSignal<DRing::ConfigurationSignal::IncomingTrustRequest>(getAccountID(), uri, payload, received);
-                            });
-                    },
-                    [this]() {
-                        dht::ThreadPool::computation().run([this] {
-                                emitSignal<DRing::ConfigurationSignal::KnownDevicesChanged>(getAccountID(), getKnownDevices());
-                            });
-                    },
-                };
-                accountManager_->useIdentity(id_, receipt_, receiptSignature_, std::move(callbacks));
-
                 saveConfig();
                 doRegister();
             }, [this](AccountManager::AuthError error, const std::string& message)
@@ -1353,7 +1326,7 @@ JamiAccount::handlePendingCall(PendingCall& pc, bool incoming)
     // Securize a SIP transport with TLS (on top of ICE tranport) and assign the call with it
     auto remote_device = pc.from;
     auto remote_account = pc.from_account;
-    auto id = accountManager_->getInfo()->identity;
+    auto id = id_;
     if (not id.first or not id.second)
         throw std::runtime_error("No identity configured for this account.");
 
@@ -1659,7 +1632,7 @@ JamiAccount::doRegister_()
         config.dht_config.node_config.network = 0;
         config.dht_config.node_config.maintain_storage = false;
         config.dht_config.node_config.persist_path = cachePath_+DIR_SEPARATOR_STR "dhtstate";
-        config.dht_config.id = accountManager_->getInfo()->identity;
+        config.dht_config.id = id_;
         config.proxy_server = getDhtProxyServer();
         config.push_node_id = getAccountID();
         config.threaded = true;
@@ -1758,6 +1731,7 @@ JamiAccount::doRegister_()
         for (const auto& bootstrap : loadBootstrap())
             dht_->bootstrap(bootstrap);
 
+        accountManager_->setDht(dht_);
         accountManager_->startSync();
 
         // Listen for incoming calls
@@ -2257,7 +2231,7 @@ JamiAccount::getContactHeader(pjsip_transport* t)
         contact_.slen = pj_ansi_snprintf(contact_.ptr, PJSIP_MAX_URL_SIZE,
                                          "%s<sips:%s%s%s;transport=dtls>",
                                          quotedDisplayName.c_str(),
-                                         accountManager_->getInfo()->identity.second->getId().toString().c_str(),
+                                         id_.second->getId().toString().c_str(),
                                          (address.empty() ? "" : "@"),
                                          address.c_str());
     } else {
@@ -2265,7 +2239,7 @@ JamiAccount::getContactHeader(pjsip_transport* t)
         contact_.slen = pj_ansi_snprintf(contact_.ptr, PJSIP_MAX_URL_SIZE,
                                          "%s<sips:%s@ring.dht>",
                                          quotedDisplayName.c_str(),
-                                         accountManager_->getInfo()->identity.second->getId().toString().c_str());
+                                         id_.second->getId().toString().c_str());
     }
     return contact_;
 }
diff --git a/src/jamidht/server_account_manager.cpp b/src/jamidht/server_account_manager.cpp
index cd3d00926b8c18e8161dce6810824f7cf0430abc..8b530f7a3269c6340f5969b8d70311fc1d61d789 100644
--- a/src/jamidht/server_account_manager.cpp
+++ b/src/jamidht/server_account_manager.cpp
@@ -38,11 +38,10 @@ constexpr const char* const HTTPS_PROTO {"https"};
 
 ServerAccountManager::ServerAccountManager(
     const std::string& path,
-    std::shared_ptr<dht::DhtRunner> dht,
     OnAsync&& onAsync,
     const std::string& managerHostname,
     const std::string& nameServer)
-: AccountManager(path, std::move(onAsync), std::move(dht), nameServer)
+: AccountManager(path, std::move(onAsync), nameServer)
 , managerHostname_(managerHostname)
 , logger_(std::make_shared<dht::Logger>(
     [](char const* m, va_list args) { Logger::vlog(LOG_ERR, nullptr, 0, true, m, args); }, 
diff --git a/src/jamidht/server_account_manager.h b/src/jamidht/server_account_manager.h
index 09531ceaba4727f42f18c419de03f11f983a0cb6..b06fdee80fdb2a4f0544f768573f68c10ab3cd8d 100644
--- a/src/jamidht/server_account_manager.h
+++ b/src/jamidht/server_account_manager.h
@@ -25,7 +25,6 @@ class ServerAccountManager : public AccountManager {
 public:
     ServerAccountManager(
         const std::string& path,
-        std::shared_ptr<dht::DhtRunner> dht,
         OnAsync&& onAsync,
         const std::string& managerHostname,
         const std::string& nameServer);