diff --git a/src/jamidht/namedirectory.cpp b/src/jamidht/namedirectory.cpp
index d3986647a463294ed15c24927956102abe3a61de..ee78294e43d21b0b11a7b9bb1aacbd07e0d0d381 100644
--- a/src/jamidht/namedirectory.cpp
+++ b/src/jamidht/namedirectory.cpp
@@ -109,6 +109,9 @@ NameDirectory::instance(const std::string& server, std::shared_ptr<dht::Logger>
 
     std::lock_guard<std::mutex> lock(instanceMtx);
     static std::map<std::string, NameDirectory> instances {};
+    auto it = instances.find(s);
+    if (it != instances.end())
+        return it->second;
     auto r = instances.emplace(std::piecewise_construct,
                       std::forward_as_tuple(s),
                       std::forward_as_tuple(s, l));
diff --git a/src/jamidht/namedirectory.h b/src/jamidht/namedirectory.h
index f3b18f42693e00a9bd5366ed1aa500003e5a9aea..4f62ef93d633b6edf6e545ae7b63d916265c7b27 100644
--- a/src/jamidht/namedirectory.h
+++ b/src/jamidht/namedirectory.h
@@ -60,7 +60,6 @@ public:
     using LookupCallback = std::function<void(const std::string& result, Response response)>;
     using RegistrationCallback = std::function<void(RegistrationResponse response)>;
 
-    NameDirectory() {}
     NameDirectory(const std::string& s, std::shared_ptr<dht::Logger> l = {});
     void load();
 
@@ -84,6 +83,7 @@ public:
 private:
     NON_COPYABLE(NameDirectory);
     NameDirectory(NameDirectory&&) = delete;
+    NameDirectory& operator=(NameDirectory&&) = delete;
     constexpr static const char* const DEFAULT_SERVER_HOST = "ns.jami.net";
 
     const std::string serverHost_ {DEFAULT_SERVER_HOST};