diff --git a/src/dht.cpp b/src/dht.cpp
index 58e297b516d4d025569c594c4ac8b0f2038a4a39..db813ae96b74d6aef0106f015f0551056b9f8a37 100644
--- a/src/dht.cpp
+++ b/src/dht.cpp
@@ -192,6 +192,7 @@ Dht::shutdown(ShutdownCallback cb) {
     auto str_donecb = [=](bool, const std::vector<std::shared_ptr<Node>>&) {
         --*remaining;
         if (!*remaining && cb) { cb(); }
+        else DHT_WARN("Shuting down node: %u ops remaining.", *remaining);
     };
 
     for (auto str : store) {
@@ -1422,11 +1423,15 @@ Dht::announce(const InfoHash& id, sa_family_t af, std::shared_ptr<Value> value,
         return;
     }
     sr->done = false;
+    sr->expired = false;
     auto a_sr = std::find_if(sr->announce.begin(), sr->announce.end(), [&](const Announce& a){
         return a.value->id == value->id;
     });
-    if (a_sr == sr->announce.end())
+    if (a_sr == sr->announce.end()) {
         sr->announce.emplace_back(Announce {value, std::min(now, created), callback});
+        for (auto& n : sr->nodes)
+            n.acked[value->id] = {};
+    }
     else {
         if (a_sr->value != value) {
             a_sr->value = value;
@@ -1451,12 +1456,7 @@ Dht::announce(const InfoHash& id, sa_family_t af, std::shared_ptr<Value> value,
     if (tm < search_time) {
         DHT_ERROR("[search %s IPv%c] search_time is now in %lfs", sr->id.toString().c_str(), (sr->af == AF_INET) ? '4' : '6', print_dt(tm-clock::now()));
         search_time = tm;
-    }/* else {
-        DHT_DEBUG("search_time NOT changed to %ld (in %lf - actual in %lf)",
-            tm.time_since_epoch().count(),
-            print_dt(tm-clock::now()),
-            print_dt(search_time-clock::now()));
-    }*/
+    }
 }
 
 size_t