diff --git a/include/opendht/dhtrunner.h b/include/opendht/dhtrunner.h
index f2fc2a9e770dba245994f7862c085e5b042dce8a..92872ffed75c8f7c00a33defdf6004800641ae36 100644
--- a/include/opendht/dhtrunner.h
+++ b/include/opendht/dhtrunner.h
@@ -383,7 +383,7 @@ public:
             return;
         config_.proxy_server = proxy;
         config_.push_node_id = pushNodeId;
-        enableProxy(use_proxy);
+        enableProxy(use_proxy and not config_.proxy_server.empty());
     }
 
     /**
diff --git a/src/dhtrunner.cpp b/src/dhtrunner.cpp
index 0a0cd6ce3700b9f9c12120f4dec4fb362bd9e863..2f354a8efa9ced74ee8335a8c28bf5de7aeb2777 100644
--- a/src/dhtrunner.cpp
+++ b/src/dhtrunner.cpp
@@ -91,10 +91,8 @@ DhtRunner::run(const SockAddr& local4, const SockAddr& local6, DhtRunner::Config
     dht_ = std::unique_ptr<SecureDht>(new SecureDht(std::move(dht), config.dht_config));
 
 #if OPENDHT_PROXY_CLIENT
-    if (!dht_via_proxy_) {
-        config_ = config;
-        enableProxy(use_proxy);
-    }
+    config_ = config;
+    enableProxy(not config_.proxy_server.empty());
 #endif
 
     running = true;