diff --git a/apps/routerconsole/java/src/net/i2p/router/web/NetDbHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/NetDbHelper.java
index 41f0ad90c578a73f11976116e10dabc1f0d52493..114579a27c854690343ae8ba66bdb42e0552bc81 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/NetDbHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/NetDbHelper.java
@@ -11,6 +11,7 @@ public class NetDbHelper {
     private RouterContext _context;
     private Writer _out;
     private String _routerPrefix;
+    private boolean _full = false;
 
     /**
      * Configure this bean to query a particular router context
@@ -30,6 +31,7 @@ public class NetDbHelper {
     
     public void setWriter(Writer writer) { _out = writer; }
     public void setRouter(String r) { _routerPrefix = r; }
+    public void setFull(String f) { _full = "1".equals(f); };
     
     public String getNetDbSummary() {
         try {
@@ -37,14 +39,14 @@ public class NetDbHelper {
                 if (_routerPrefix != null)
                     _context.netDb().renderRouterInfoHTML(_out, _routerPrefix);
                 else
-                    _context.netDb().renderStatusHTML(_out);
+                    _context.netDb().renderStatusHTML(_out, _full);
                 return "";
             } else {
                 ByteArrayOutputStream baos = new ByteArrayOutputStream(32*1024);
                 if (_routerPrefix != null)
                     _context.netDb().renderRouterInfoHTML(new OutputStreamWriter(baos), _routerPrefix);
                 else
-                    _context.netDb().renderStatusHTML(new OutputStreamWriter(baos));
+                    _context.netDb().renderStatusHTML(new OutputStreamWriter(baos), _full);
                 return new String(baos.toByteArray());
             }
         } catch (IOException ioe) {
diff --git a/apps/routerconsole/jsp/netdb.jsp b/apps/routerconsole/jsp/netdb.jsp
index 89c2bdec20d5a954e4511bdd07fb69af0f42e7dd..08a1377d37ff35a188da0076466dc0cc95e9b519 100644
--- a/apps/routerconsole/jsp/netdb.jsp
+++ b/apps/routerconsole/jsp/netdb.jsp
@@ -14,6 +14,7 @@
  <jsp:useBean class="net.i2p.router.web.NetDbHelper" id="netdbHelper" scope="request" />
  <jsp:setProperty name="netdbHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
  <jsp:setProperty name="netdbHelper" property="writer" value="<%=out%>" />
+ <jsp:setProperty name="netdbHelper" property="full" value="<%=request.getParameter("f")%>" />
  <jsp:setProperty name="netdbHelper" property="router" value="<%=request.getParameter("r")%>" />
  <jsp:getProperty name="netdbHelper" property="netDbSummary" />
 </div>
diff --git a/router/java/src/net/i2p/router/NetworkDatabaseFacade.java b/router/java/src/net/i2p/router/NetworkDatabaseFacade.java
index ed4fe155502df3ef50f7025ade8e5bc58e099fef..e4a5ce08b663a7da1c9fc9752104dc33875bae0a 100644
--- a/router/java/src/net/i2p/router/NetworkDatabaseFacade.java
+++ b/router/java/src/net/i2p/router/NetworkDatabaseFacade.java
@@ -62,4 +62,5 @@ public abstract class NetworkDatabaseFacade implements Service {
     public int getKnownRouters() { return 0; }
     public int getKnownLeaseSets() { return 0; }
     public void renderRouterInfoHTML(Writer out, String s) throws IOException {}
+    public void renderStatusHTML(Writer out, boolean b) throws IOException {}
 }
diff --git a/router/java/src/net/i2p/router/networkdb/PublishLocalRouterInfoJob.java b/router/java/src/net/i2p/router/networkdb/PublishLocalRouterInfoJob.java
index 96dbadd6cf2472a6b95dd24c4a157ced36e88a58..8fa729d63763dae195aa1321c2895fa8595478ce 100644
--- a/router/java/src/net/i2p/router/networkdb/PublishLocalRouterInfoJob.java
+++ b/router/java/src/net/i2p/router/networkdb/PublishLocalRouterInfoJob.java
@@ -20,12 +20,12 @@ import net.i2p.router.RouterContext;
 import net.i2p.util.Log;
 
 /**
- * Publish the local router's RouterInfo every 5 to 10 minutes
+ * Publish the local router's RouterInfo periodically
  *
  */
 public class PublishLocalRouterInfoJob extends JobImpl {
     private Log _log;
-    final static long PUBLISH_DELAY = 5*60*1000; // every 5 to 10 minutes (since we randomize)
+    final static long PUBLISH_DELAY = 20*60*1000;
     
     public PublishLocalRouterInfoJob(RouterContext ctx) {
         super(ctx);
@@ -67,6 +67,6 @@ public class PublishLocalRouterInfoJob extends JobImpl {
         } catch (DataFormatException dfe) {
             _log.error("Error signing the updated local router info!", dfe);
         }
-        requeue(PUBLISH_DELAY + getContext().random().nextInt((int)PUBLISH_DELAY));
+        requeue((PUBLISH_DELAY/2) + getContext().random().nextInt((int)PUBLISH_DELAY));
     }
 }
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 c74499f957e62a3031c992d8eac374047342484d..23ef78d86956961261ff24e9013978ee01a43bf4 100644
--- a/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java
+++ b/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java
@@ -125,6 +125,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
     private final static long ROUTER_INFO_EXPIRATION_SHORT = 90*60*1000l;
     
     private final static long EXPLORE_JOB_DELAY = 10*60*1000l;
+    private final static long PUBLISH_JOB_DELAY = 5*60*1000l;
 
     public KademliaNetworkDatabaseFacade(RouterContext context) {
         _context = context;
@@ -326,7 +327,9 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
         }
         // periodically update and resign the router's 'published date', which basically
         // serves as a version
-        _context.jobQueue().addJob(new PublishLocalRouterInfoJob(_context));
+        Job plrij = new PublishLocalRouterInfoJob(_context);
+        plrij.getTiming().setStartAfter(_context.clock().now() + PUBLISH_JOB_DELAY);
+        _context.jobQueue().addJob(plrij);
         try {
             publish(ri);
         } catch (IllegalArgumentException iae) {
@@ -970,7 +973,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
         StringBuffer buf = new StringBuffer(4*1024);
         buf.append("<h2>Network Database RouterInfo Lookup</h2>\n");
         if (".".equals(routerPrefix)) {
-            renderRouterInfo(buf, _context.router().getRouterInfo(), true);
+            renderRouterInfo(buf, _context.router().getRouterInfo(), true, true);
         } else {
             boolean notFound = true;
             Set routers = getRouters();
@@ -978,7 +981,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
                 RouterInfo ri = (RouterInfo)iter.next();
                 Hash key = ri.getIdentity().getHash();
                 if (key.toBase64().startsWith(routerPrefix)) {
-                    renderRouterInfo(buf, ri, false);
+                    renderRouterInfo(buf, ri, false, true);
                     notFound = false;
                 }
             }
@@ -990,7 +993,14 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
     }
 
     public void renderStatusHTML(Writer out) throws IOException {
-        StringBuffer buf = new StringBuffer(getKnownRouters() * 2048);
+        renderStatusHTML(out, true);
+    }
+
+    public void renderStatusHTML(Writer out, boolean full) throws IOException {
+        int size = getKnownRouters() * 512;
+        if (full)
+            size *= 4;
+        StringBuffer buf = new StringBuffer(size);
         buf.append("<h2>Network Database Contents</h2>\n");
         if (!_initialized) {
             buf.append("<i>Not initialized</i>\n");
@@ -1044,10 +1054,15 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
         }
         
         Hash us = _context.routerHash();
-        out.write("<h3>Routers</h3>\n");
+        out.write("<a name=\"routers\" /><h3>Routers (<a href=\"netdb.jsp");
+        if (full)
+            out.write("#routers\" >view without");
+        else
+            out.write("?f=1#routers\" >view with");
+        out.write(" stats</a>)</h3>\n");
         
         RouterInfo ourInfo = _context.router().getRouterInfo();
-        renderRouterInfo(buf, ourInfo, true);
+        renderRouterInfo(buf, ourInfo, true, true);
         out.write(buf.toString());
         buf.setLength(0);
         
@@ -1061,7 +1076,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
             Hash key = ri.getIdentity().getHash();
             boolean isUs = key.equals(us);
             if (!isUs) {
-                renderRouterInfo(buf, ri, false);
+                renderRouterInfo(buf, ri, false, full);
                 out.write(buf.toString());
                 buf.setLength(0);
                 String coreVersion = ri.getOption("coreVersion");
@@ -1102,7 +1117,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
         out.flush();
     }
     
-    private void renderRouterInfo(StringBuffer buf, RouterInfo info, boolean isUs) {
+    private void renderRouterInfo(StringBuffer buf, RouterInfo info, boolean isUs, boolean full) {
         String hash = info.getIdentity().getHash().toBase64();
         buf.append("<a name=\"").append(hash.substring(0, 6)).append("\" />");
         if (isUs) {
@@ -1129,13 +1144,18 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
             }
         }
         buf.append("</i><br />\n");
-        buf.append("Stats: <br /><i><code>\n");
-        for (Iterator iter = info.getOptions().keySet().iterator(); iter.hasNext(); ) {
-            String key = (String)iter.next();
-            String val = info.getOption(key);
-            buf.append(DataHelper.stripHTML(key)).append(" = ").append(DataHelper.stripHTML(val)).append("<br />\n");
+        if (full) {
+            buf.append("Stats: <br /><i><code>\n");
+            for (Iterator iter = info.getOptions().keySet().iterator(); iter.hasNext(); ) {
+                String key = (String)iter.next();
+                String val = info.getOption(key);
+                buf.append(DataHelper.stripHTML(key)).append(" = ").append(DataHelper.stripHTML(val)).append("<br />\n");
+            }
+            buf.append("</code></i>\n");
+        } else {
+            buf.append("<a href=\"netdb.jsp?r=").append(hash.substring(0, 6)).append("\" >Full entry</a>\n");
         }
-        buf.append("</code></i><hr />\n");
+        buf.append("<hr />\n");
     }
     
 }
diff --git a/router/java/src/net/i2p/router/startup/RebuildRouterInfoJob.java b/router/java/src/net/i2p/router/startup/RebuildRouterInfoJob.java
index a43fc631195dce3c82986f26a6e469959238247b..967bc7a797bc7e175261b4f6539e5af88e722d87 100644
--- a/router/java/src/net/i2p/router/startup/RebuildRouterInfoJob.java
+++ b/router/java/src/net/i2p/router/startup/RebuildRouterInfoJob.java
@@ -28,6 +28,13 @@ import net.i2p.router.RouterContext;
 import net.i2p.util.Log;
 
 /**
+ * This used be called from StartAcceptingClientsJob but is now disabled.
+ * It is still called once from LoadRouterInfoJob (but not run as a Job).
+ *
+ * The following comments appear to be incorrect...
+ * it rebuilds if the router.info file does not exist.
+ * There is no check for a router.info.rebuild file.
+ *
  * If the file router.info.rebuild exists, rebuild the router info and republish.
  * This is useful for dhcp or other situations where the router addresses change -
  * simply create the router.info.rebuild file after modifying router.config and within
diff --git a/router/java/src/net/i2p/router/startup/StartAcceptingClientsJob.java b/router/java/src/net/i2p/router/startup/StartAcceptingClientsJob.java
index 7ad54299fb9f00847b6db258e601fdad02edb5f2..727d06ac6c1cd3a4c05815bcdc553ba7ca4f20e2 100644
--- a/router/java/src/net/i2p/router/startup/StartAcceptingClientsJob.java
+++ b/router/java/src/net/i2p/router/startup/StartAcceptingClientsJob.java
@@ -28,7 +28,8 @@ public class StartAcceptingClientsJob extends JobImpl {
         getContext().clientManager().startup();
 
         getContext().jobQueue().addJob(new ReadConfigJob(getContext()));
-        getContext().jobQueue().addJob(new RebuildRouterInfoJob(getContext()));
+        // pointless
+        //getContext().jobQueue().addJob(new RebuildRouterInfoJob(getContext()));
         getContext().jobQueue().allowParallelOperation();
     }
 }