diff --git a/src/dht_proxy_client.cpp b/src/dht_proxy_client.cpp
index 200965b8f97343c930d93497c74711330286a146..22aa5e8f534f35fdfc7b87b0a0af4f00d3b7c635 100644
--- a/src/dht_proxy_client.cpp
+++ b/src/dht_proxy_client.cpp
@@ -91,6 +91,7 @@ DhtProxyClient::startProxy()
     if (serverHost_.empty()) return;
     DHT_LOG.w("Staring proxy client to %s", serverHost_.c_str());
     nextProxyConfirmation = scheduler.add(scheduler.time(), std::bind(&DhtProxyClient::confirmProxy, this));
+    loopSignal_();
 }
 
 DhtProxyClient::~DhtProxyClient()
@@ -647,6 +648,7 @@ DhtProxyClient::cancelListen(const InfoHash& key, size_t gtoken) {
         });
     }
     scheduler.edit(it->second.opExpirationJob, ops.getExpiration());
+    loopSignal_();
     return canceled;
 }
 
@@ -710,6 +712,7 @@ DhtProxyClient::doListen(const InfoHash& key, ValueCallback cb, Value::Filter fi
         }
         auto next = l->second.cache.onValues(expired ? new_values_empty : values, std::vector<Value::Id>{}, expired_ids, types, scheduler.time());
         scheduler.edit(l->second.cacheExpirationJob, next);
+        loopSignal_();
         return true;
     };
     auto pushNotifToken = std::make_shared<proxy::ListenToken>(0);
@@ -966,6 +969,7 @@ DhtProxyClient::pushNotificationReceived(const std::map<std::string, std::string
                 auto vid = std::stoull(vidIt->second);
                 auto put = search.puts.at(vid);
                 scheduler.edit(put.refreshJob, scheduler.time());
+                loopSignal_();
             } else {
                 // Refresh listen
                 for (auto& list : search.listeners)