diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/StartExplorersJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/StartExplorersJob.java
index 7836ca43b5feee2f0c911377f71bed64ef3b56dd..f7f8de1f1e88e7500e668209c73548bc4a6018bd 100644
--- a/router/java/src/net/i2p/router/networkdb/kademlia/StartExplorersJob.java
+++ b/router/java/src/net/i2p/router/networkdb/kademlia/StartExplorersJob.java
@@ -12,7 +12,9 @@ import java.util.HashSet;
 import java.util.Set;
 
 import net.i2p.data.Hash;
+import net.i2p.data.RouterInfo;
 import net.i2p.router.JobImpl;
+import net.i2p.router.Router;
 import net.i2p.router.RouterContext;
 import net.i2p.util.Log;
 
@@ -92,9 +94,14 @@ class StartExplorersJob extends JobImpl {
             return MAX_RERUN_DELAY_MS;
 
         // If we don't know too many peers, or just started, explore aggressively
+        // Also if hidden or K, as nobody will be connecting to us
         // Use DataStore.size() which includes leasesets because it's faster
         if (getContext().router().getUptime() < STARTUP_TIME ||
-            _facade.getDataStore().size() < MIN_ROUTERS)
+            _facade.getDataStore().size() < MIN_ROUTERS ||
+            getContext().router().isHidden())
+            return MIN_RERUN_DELAY_MS;
+        RouterInfo ri = getContext().router().getRouterInfo();
+        if (ri != null && ri.getCapabilities().contains("" + Router.CAPABILITY_BW12))
             return MIN_RERUN_DELAY_MS;
         if (_facade.getDataStore().size() > MAX_ROUTERS)
             return MAX_RERUN_DELAY_MS;