diff --git a/include/connectionmanager.h b/include/connectionmanager.h
index 2e8fb9e..e6ad37b 100644
--- a/include/connectionmanager.h
+++ b/include/connectionmanager.h
@@ -18,6 +18,7 @@
 
 #include "ice_options.h"
 #include "multiplexed_socket.h"
+#include "turn_cache.h"
 
 #include <opendht/dhtrunner.h>
 #include <opendht/infohash.h>
@@ -237,9 +238,7 @@
     std::string turnServerPwd;
     std::string turnServerRealm;
 
-    mutable std::mutex cachedTurnMutex {};
-    dht::SockAddr cacheTurnV4 {};
-    dht::SockAddr cacheTurnV6 {};
+    std::shared_ptr<TurnCache> turnCache;
 
     std::string cachePath {};
 
diff --git a/src/connectionmanager.cpp b/src/connectionmanager.cpp
index 7fa8aac..127b55b 100644
--- a/src/connectionmanager.cpp
+++ b/src/connectionmanager.cpp
@@ -1408,15 +1408,21 @@
     if (config_->stunEnabled)
         opts.stunServers.emplace_back(StunServerInfo().setUri(config_->stunServer));
     if (config_->turnEnabled) {
-        auto cached = false;
-        std::lock_guard<std::mutex> lk(config_->cachedTurnMutex);
-        cached = config_->cacheTurnV4 || config_->cacheTurnV6;
-        if (config_->cacheTurnV4) {
+        if (config_->turnCache) {
+            auto turnAddr = config_->turnCache->getResolvedTurn();
+            if (turnAddr != std::nullopt) {
+                opts.turnServers.emplace_back(TurnServerInfo()
+                                                .setUri(turnAddr->toString())
+                                                .setUsername(config_->turnServerUserName)
+                                                .setPassword(config_->turnServerPwd)
+                                                .setRealm(config_->turnServerRealm));
+            }
+        } else {
             opts.turnServers.emplace_back(TurnServerInfo()
-                                              .setUri(config_->cacheTurnV4.toString())
-                                              .setUsername(config_->turnServerUserName)
-                                              .setPassword(config_->turnServerPwd)
-                                              .setRealm(config_->turnServerRealm));
+                                                .setUri(config_->turnServer)
+                                                .setUsername(config_->turnServerUserName)
+                                                .setPassword(config_->turnServerPwd)
+                                                .setRealm(config_->turnServerRealm));
         }
         // NOTE: first test with ipv6 turn was not concluant and resulted in multiple
         // co issues. So this needs some debug. for now just disable
@@ -1427,14 +1433,6 @@
         //                                      .setPassword(turnServerPwd_)
         //                                      .setRealm(turnServerRealm_));
         //}
-        // Nothing cached, so do the resolution
-        if (!cached) {
-            opts.turnServers.emplace_back(TurnServerInfo()
-                                              .setUri(config_->turnServer)
-                                              .setUsername(config_->turnServerUserName)
-                                              .setPassword(config_->turnServerPwd)
-                                              .setRealm(config_->turnServerRealm));
-        }
     }
     return opts;
 }
