diff --git a/src/ringdht/namedirectory.cpp b/src/ringdht/namedirectory.cpp
index cc5d4dbd82d2f98c745f8ff04d294e12d765d77e..bd40ef3de4da94ca770105578231bd7d6dc8a44d 100644
--- a/src/ringdht/namedirectory.cpp
+++ b/src/ringdht/namedirectory.cpp
@@ -36,20 +36,17 @@ namespace ring {
 
 constexpr const char* const QUERY_NAME {"/name/"};
 constexpr const char* const QUERY_ADDR {"/addr/"};
+constexpr const char* const HTTP_PROTO {"http://"};
 
 /** Parser for Ring URIs.         ( protocol        )    ( username         ) ( hostname                            ) */
 const std::regex URI_VALIDATOR {"^([a-zA-Z]+:(?://)?)?(?:([a-z0-9-_]{1,64})@)?([a-zA-Z0-9\\-._~%!$&'()*+,;=:\\[\\]]+)"};
-const std::regex NAME_VALIDATOR {"^[a-z0-9-_]{3,32}$"};
+const std::regex NAME_VALIDATOR {"^[a-zA-Z0-9-_]{3,32}$"};
 
 constexpr size_t MAX_RESPONSE_SIZE {1024 * 1024};
 
-std::string hostFromUri(const std::string& uri)
+void toLower(std::string& string)
 {
-    std::smatch pieces_match;
-    if (std::regex_search(uri, pieces_match, URI_VALIDATOR))
-        if (pieces_match.size() == 4)
-            return pieces_match[3].str();
-    return uri;
+    std::transform(string.begin(), string.end(), string.begin(), ::tolower);
 }
 
 void
@@ -57,12 +54,12 @@ NameDirectory::lookupUri(const std::string& uri, const std::string& default_serv
 {
     RING_WARN("lookupUri: %s", uri.c_str());
     std::smatch pieces_match;
-    if (std::regex_search(uri, pieces_match, URI_VALIDATOR)) {
+    if (std::regex_match(uri, pieces_match, URI_VALIDATOR)) {
         if (pieces_match.size() == 4) {
             if (pieces_match[2].length() == 0)
                 instance(default_server).lookupName(pieces_match[3], cb);
             else
-                instance("http://"+pieces_match[3].str()).lookupName(pieces_match[2], cb);
+                instance(pieces_match[3].str()).lookupName(pieces_match[2], cb);
             return;
         }
     }
@@ -71,8 +68,7 @@ NameDirectory::lookupUri(const std::string& uri, const std::string& default_serv
 }
 
 NameDirectory::NameDirectory(const std::string& s)
-   : serverUri_(s),
-     serverHost_(hostFromUri(s)),
+   : serverHost_(s),
      cachePath_(fileutils::get_cache_dir()+DIR_SEPARATOR_STR+"namecache"+DIR_SEPARATOR_STR+serverHost_)
 {}
 
@@ -84,7 +80,7 @@ NameDirectory::load()
 
 NameDirectory& NameDirectory::instance(const std::string& server)
 {
-    const std::string& s = server.empty() ? DEFAULT_SERVER_URI : server;
+    const std::string& s = server.empty() ? DEFAULT_SERVER_HOST : server;
     static std::map<std::string, NameDirectory> instances {};
     auto r = instances.emplace(s, NameDirectory{s});
     RING_WARN("NameDirectory: %s %p", s.c_str(), &r.first->second);
@@ -111,7 +107,7 @@ void NameDirectory::lookupAddress(const std::string& addr, LookupCallback cb)
         return;
     }
 
-    restbed::Uri uri(serverUri_ + QUERY_ADDR + addr);
+    restbed::Uri uri(HTTP_PROTO + serverHost_ + QUERY_ADDR + addr);
     auto req = std::make_shared<restbed::Request>(uri);
     req->set_header("Accept", "*/*");
     req->set_header("Host", serverHost_);
@@ -158,12 +154,14 @@ void NameDirectory::lookupAddress(const std::string& addr, LookupCallback cb)
 
 static const std::string HEX_PREFIX {"0x"};
 
-void NameDirectory::lookupName(const std::string& name, LookupCallback cb)
+void NameDirectory::lookupName(const std::string& n, LookupCallback cb)
 {
+    std::string name {n};
     if (not validateName(name)) {
         cb(name, Response::invalidName);
         return;
     }
+    toLower(name);
 
     auto cacheRes = addrCache_.find(name);
     if (cacheRes != addrCache_.end()) {
@@ -171,7 +169,7 @@ void NameDirectory::lookupName(const std::string& name, LookupCallback cb)
         return;
     }
 
-    restbed::Uri uri(serverUri_ + QUERY_NAME + name);
+    restbed::Uri uri(HTTP_PROTO + serverHost_ + QUERY_NAME + name);
     auto request = std::make_shared<restbed::Request>(std::move(uri));
     request->set_header("Accept", "*/*");
     request->set_header("Host", serverHost_);
@@ -228,12 +226,14 @@ bool NameDirectory::validateName(const std::string& name) const
     return std::regex_match(name, NAME_VALIDATOR);
 }
 
-void NameDirectory::registerName(const std::string& addr, const std::string& name, const std::string& owner, RegistrationCallback cb)
+void NameDirectory::registerName(const std::string& addr, const std::string& n, const std::string& owner, RegistrationCallback cb)
 {
+    std::string name {n};
     if (not validateName(name)) {
         cb(RegistrationResponse::invalidName);
         return;
     }
+    toLower(name);
 
     auto cacheRes = addrCache_.find(name);
     if (cacheRes != addrCache_.end()) {
@@ -244,7 +244,7 @@ void NameDirectory::registerName(const std::string& addr, const std::string& nam
         return;
     }
 
-    auto request = std::make_shared<restbed::Request>(restbed::Uri(serverUri_ + QUERY_NAME + name));
+    auto request = std::make_shared<restbed::Request>(restbed::Uri(HTTP_PROTO + serverHost_ + QUERY_NAME + name));
     request->set_header("Accept", "*/*");
     request->set_header("Host", serverHost_);
     request->set_header("Content-Type", "application/json");
diff --git a/src/ringdht/namedirectory.h b/src/ringdht/namedirectory.h
index fe6b923bed182205a48280658ce15cf0e5be945f..a1d0a823c7da410d780a479f244863aa6271bde1 100644
--- a/src/ringdht/namedirectory.h
+++ b/src/ringdht/namedirectory.h
@@ -37,7 +37,7 @@ public:
     void load();
 
     static NameDirectory& instance(const std::string& server);
-    static NameDirectory& instance() { return instance(DEFAULT_SERVER_URI); }
+    static NameDirectory& instance() { return instance(DEFAULT_SERVER_HOST); }
 
     static void lookupUri(const std::string& uri, const std::string& default_server, LookupCallback cb);
 
@@ -47,18 +47,18 @@ public:
     void registerName(const std::string& addr, const std::string& name, const std::string& owner, RegistrationCallback cb);
 
     const std::string& getServer() const {
-        return serverUri_;
+        return serverHost_;
     }
 
 private:
-    constexpr static const char* const DEFAULT_SERVER_URI = "http://5.196.89.112:3000";
+    constexpr static const char* const DEFAULT_SERVER_HOST = "5.196.89.112:3000";
+
+    const std::string serverHost_ {DEFAULT_SERVER_HOST};
+    const std::string cachePath_;
 
-    const std::string serverUri_ {DEFAULT_SERVER_URI};
-    const std::string serverHost_ {};
     std::map<std::string, std::string> nameCache_;
     std::map<std::string, std::string> addrCache_;
 
-    const std::string cachePath_;
 
     bool validateName(const std::string& name) const;