diff --git a/Ring/jamiNotificationExtension/Adapter.mm b/Ring/jamiNotificationExtension/Adapter.mm
index eb4c56b53a17e6c24c8d3565e109b0963f711012..fdeafbf922324f1ad62949d4616236269eb2a05d 100644
--- a/Ring/jamiNotificationExtension/Adapter.mm
+++ b/Ring/jamiNotificationExtension/Adapter.mm
@@ -66,7 +66,7 @@ NSString* const accountConfig = @"config.yml";
 constexpr auto ID_TIMEOUT = std::chrono::hours(24);
 
 std::map<std::string, std::shared_ptr<CallbackWrapperBase>> confHandlers;
-std::map<std::string, std::string> cachedNames;
+std::map<std::string, std::pair<std::string, std::string>> cachedNames;
 std::map<std::string, std::string> nameServers;
 
 #pragma mark Callbacks registration
@@ -317,38 +317,55 @@ toJson(NSDictionary* value)
     return val;
 }
 
-std::string getName(std::string addres, std::string accountId)
+std::string getName(const std::string& addres, const std::string& accountId)
 {
-    auto name = cachedNames.find(addres);
-    if (name != cachedNames.end()) {
-        return name->second;
-    }
+    try {
+        auto nameIter = cachedNames.find(addres);
+        if (nameIter != cachedNames.end()) {
+            return nameIter->second.first;
+        }
+
+        // Retrieve the name server based on the account ID
+        auto ns = getNameServer(accountId);
+        NSURL *url = [NSURL URLWithString:@(ns.c_str())];
+        NSString* host = [url host];
+        NSString* nameServer = host.length == 0 ? defaultNameServer : host;
+        std::string namesPath = [[[Constants cachesPath] URLByAppendingPathComponent:nameCache] URLByAppendingPathComponent:nameServer].path.UTF8String;
 
-    auto ns = getNameServer(accountId);
-    NSURL *url = [NSURL URLWithString: @(ns.c_str())];
-    NSString* host = [url host];
-    NSString* nameServer = host.length == 0 ? defaultNameServer : host;
-    std::string namesPath = [[[Constants cachesPath] URLByAppendingPathComponent: nameCache] URLByAppendingPathComponent: nameServer].path.UTF8String;
+        msgpack::unpacker pac;
+        // Read the file
+        std::ifstream file(namesPath, std::ios_base::in);
+        if (!file.is_open()) {
+            return "";
+        }
+        std::string line;
+        while (std::getline(file, line)) {
+            pac.reserve_buffer(line.size());
+            memcpy(pac.buffer(), line.data(), line.size());
+            pac.buffer_consumed(line.size());
+        }
 
-    msgpack::unpacker pac;
-    // read file
-    std::ifstream file = std::ifstream(namesPath, std::ios_base::in);
-    if (!file.is_open()) {
+        // Load values
+        msgpack::object_handle oh;
+        if (pac.next(oh)) {
+            std::map<std::string, std::pair<std::string, std::string>> tempMap;
+            oh.get().convert(tempMap);
+            cachedNames.insert(tempMap.begin(), tempMap.end());
+        }
+
+        auto cacheRes = cachedNames.find(addres);
+        return cacheRes != cachedNames.end() ? cacheRes->second.first : std::string{};
+    }
+    catch (const msgpack::parse_error& e) {
+        NSString *errorMessage = [NSString stringWithFormat:@"MessagePack parse error: %s", e.what()];
+        NSLog(@"%@", errorMessage);
         return "";
     }
-    std::string line;
-    while (std::getline(file, line)) {
-        pac.reserve_buffer(line.size());
-        memcpy(pac.buffer(), line.data(), line.size());
-        pac.buffer_consumed(line.size());
+    catch (const std::bad_cast& e) {
+        NSString *errorMessage = [NSString stringWithFormat:@"Bad cast exception: %s", e.what()];
+        NSLog(@"%@", errorMessage);
+        return "";
     }
-
-    // load values
-    msgpack::object_handle oh;
-    if (pac.next(oh))
-        oh.get().convert(cachedNames);
-    auto cacheRes = cachedNames.find(addres);
-    return cacheRes != cachedNames.end() ? cacheRes->second : std::string {};
 }
 
 std::string getNameServer(std::string accountId) {
@@ -360,11 +377,17 @@ std::string getNameServer(std::string accountId) {
     auto accountConfigPath = [[[Constants documentsPath] URLByAppendingPathComponent: @(accountId.c_str())] URLByAppendingPathComponent: accountConfig].path.UTF8String;
     try {
         std::ifstream file = std::ifstream(accountConfigPath, std::ios_base::in);
+        if (!file.is_open()) {
+            return nameServer;
+        }
         YAML::Node node = YAML::Load(file);
         file.close();
-        nameServer = node[nameServerConfiguration].as<std::string>();
-        if (!nameServer.empty()) {
-            nameServers.insert(std::pair<std::string, std::string>(accountId, nameServer));
+        if (node[nameServerConfiguration]) {
+            nameServer = node[nameServerConfiguration].as<std::string>();
+            // Cache the result if it's not empty
+            if (!nameServer.empty()) {
+                nameServers[accountId] = nameServer;
+            }
         }
     } catch (const std::exception& e) {}
     return nameServer;