diff --git a/src/dht.cpp b/src/dht.cpp
index 5c07d4c6dc5fbfa56e0641c5f6466ffaca466d24..17866cc6a1fcb02e9218c3c3dd740416c12e4075 100644
--- a/src/dht.cpp
+++ b/src/dht.cpp
@@ -410,10 +410,11 @@ void Dht::searchSendAnnounceValue(const Sp<Search>& sr) {
             { /* on probing done */
                 auto sr = ws.lock();
                 if (not sr) return;
+                const auto& now = scheduler.time();
+                sr->insertNode(req.node, scheduler.time(), answer.ntoken);
                 auto sn = sr->getNode(req.node);
                 if (not sn) return;
 
-                const auto& now = scheduler.time();
                 if (not sn->isSynced(now)) {
                     /* Search is now unsynced. Let's call searchStep to sync again. */
                     scheduler.edit(sr->nextSearchStep, now);
@@ -539,6 +540,7 @@ Dht::searchSynchedNodeListen(const Sp<Search>& sr, SearchNode& n)
             { /* on new values */
                 if (auto sr = ws.lock()) {
                     scheduler.edit(sr->nextSearchStep, scheduler.time());
+                    sr->insertNode(req.node, scheduler.time(), answer.ntoken);
                     if (auto sn = sr->getNode(node)) {
                         sn->onValues(query, std::move(answer), types, scheduler);
                     }
@@ -2361,9 +2363,6 @@ Dht::onAnnounceDone(const Sp<Node>& node, net::RequestAnswer& answer, Sp<Search>
     DHT_LOG.d(sr->id, node->id, "[search %s] [node %s] got reply to put!",
             sr->id.toString().c_str(), node->toString().c_str());
     searchSendGetValues(sr);
-    /* if (auto sn = sr->getNode(req->node)) { */
-    /*     sn->setRefreshTime(answer.vid, now + answer) */
-    /* } */
     sr->checkAnnounced(answer.vid);
 }
 
diff --git a/src/search.h b/src/search.h
index 7244981ff2c1762482dfd420b7f58d83f59e38eb..ec48f642bc56d3a5f563420008081c74fbdc6a7f 100644
--- a/src/search.h
+++ b/src/search.h
@@ -302,7 +302,7 @@ struct Dht::SearchNode {
             return isListening(now, ls);
     }
     bool isListening(time_point now, NodeListenerStatus::const_iterator listen_status) const {
-        if (listen_status == listenStatus.end())
+        if (listen_status == listenStatus.end() or not listen_status->second.req)
             return false;
         return listen_status->second.req->reply_time + LISTEN_EXPIRE_TIME > now;
     }