diff --git a/src/dht.cpp b/src/dht.cpp
index 75bd32b203614dc6bb500bbec1844f2a93293856..6498045715c4a6034f205d83a766f0acda3da262 100644
--- a/src/dht.cpp
+++ b/src/dht.cpp
@@ -1138,13 +1138,15 @@ Dht::search(const InfoHash& id, sa_family_t af, GetCallback callback, DoneCallba
         if (search_id == 0)
             search_id++;
     }
-    if (not sr->nextSearchStep)
-        sr->nextSearchStep = scheduler.add(scheduler.time(), std::bind(&Dht::searchStep, this, sr));
 
     if (callback)
         sr->callbacks.push_back({.start=scheduler.time(), .filter=filter, .get_cb=callback, .done_cb=done_callback});
-
     bootstrapSearch(*sr);
+
+    if (sr->nextSearchStep)
+        scheduler.edit(sr->nextSearchStep, sr->getNextStepTime(types, scheduler.time()));
+    else
+        sr->nextSearchStep = scheduler.add(scheduler.time(), std::bind(&Dht::searchStep, this, sr));
     return sr;
 }