diff --git a/router/java/src/net/i2p/router/DummyNetworkDatabaseFacade.java b/router/java/src/net/i2p/router/DummyNetworkDatabaseFacade.java
index f50e7b368aacaaf3f08c3050e7dd4246704c0364..e192e7752ca3b5638a38c2517439e516b193e1ce 100644
--- a/router/java/src/net/i2p/router/DummyNetworkDatabaseFacade.java
+++ b/router/java/src/net/i2p/router/DummyNetworkDatabaseFacade.java
@@ -58,6 +58,7 @@ class DummyNetworkDatabaseFacade extends NetworkDatabaseFacade {
         _routers.remove(dbEntry);
     }
     
+    public Set<Hash> getAllRouters() { return new HashSet(_routers.keySet()); }
     public Set findNearestRouters(Hash key, int maxNumRouters, Set peersToIgnore) { return new HashSet(_routers.values()); }
 
     public void renderStatusHTML(Writer out) throws IOException {}
diff --git a/router/java/src/net/i2p/router/NetworkDatabaseFacade.java b/router/java/src/net/i2p/router/NetworkDatabaseFacade.java
index ded9bee26a7a9f1445c440465d9f7a819af3b9b4..1ff7af13238e3991fc70a86bbd56c139a9388a17 100644
--- a/router/java/src/net/i2p/router/NetworkDatabaseFacade.java
+++ b/router/java/src/net/i2p/router/NetworkDatabaseFacade.java
@@ -55,6 +55,7 @@ public abstract class NetworkDatabaseFacade implements Service {
     public abstract void unpublish(LeaseSet localLeaseSet);
     public abstract void fail(Hash dbEntry);
     
+    public abstract Set<Hash> getAllRouters();
     public int getKnownRouters() { return 0; }
     public int getKnownLeaseSets() { return 0; }
     public void renderRouterInfoHTML(Writer out, String s) throws IOException {}
diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java b/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java
index 436fc526e39518f669002d5c9078784fd2f62637..aed932e5b89deb9e4de0c996500efe975a0f2e36 100644
--- a/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java
+++ b/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java
@@ -311,7 +311,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
     }
     
     /** get the hashes for all known routers */
-    Set getAllRouters() {
+    public Set<Hash> getAllRouters() {
         if (!_initialized) return new HashSet(0);
         Set keys = _ds.getKeys();
         Set rv = new HashSet(keys.size());
diff --git a/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java b/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java
index 53db9062abbebfabae41ecc7d0526eb0ab7e9180..e38a59100d6163c220054963863e2788d6f37172 100644
--- a/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java
+++ b/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java
@@ -375,15 +375,13 @@ public class CommSystemFacadeImpl extends CommSystemFacade {
     /**
      * Collect the IPs for all routers in the DB, and queue them for lookup,
      * then fire off the periodic lookup task for the first time.
-     *
-     * We could use getAllRouters() if it were public, and that would be faster, but
-     * we only do this once.
      */
     private class QueueAll implements SimpleTimer.TimedEvent {
         public void timeReached() {
-            Set routers = _context.netDb().findNearestRouters(_context.routerHash(), _context.netDb().getKnownRouters(), null);
-            for (Iterator iter = routers.iterator(); iter.hasNext(); ) {
-                RouterInfo ri = (RouterInfo) iter.next();
+            for (Iterator<Hash> iter = _context.netDb().getAllRouters().iterator(); iter.hasNext(); ) {
+                RouterInfo ri = _context.netDb().lookupRouterInfoLocally(iter.next());
+                if (ri == null)
+                    continue;
                 String host = getIPString(ri);
                 if (host == null)
                     continue;