diff --git a/apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java
index 4a21919a21efd1107d7aa498ec04b8722fb7143b..1fbe6fce56034735c7b244b06189f74f0ff5b360 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java
@@ -244,7 +244,7 @@ public class SummaryBarRenderer {
            .append(_("Active"))
            .append(":</b></td><td align=\"right\">")
            .append(_helper.getActivePeers())
-           .append('/')
+           .append(" / ")
            .append(_helper.getActiveProfiles())
            .append("</td></tr>\n" +
 
@@ -328,54 +328,48 @@ public class SummaryBarRenderer {
                    "<table>\n" +
 
                    "<tr><td align=\"left\"><b>1s:</b></td><td align=\"right\">")
-           .append(_helper.getInboundSecondKBps())
-           .append('/')
-           .append(_helper.getOutboundSecondKBps())
-           .append("K/s</td></tr>\n" +
+           .append(_helper.getSecondKBps())
+           .append("Bps</td></tr>\n");
 
-                   "<tr><td align=\"left\"><b>5m:</b></td><td align=\"right\">")
-           .append(_helper.getInboundFiveMinuteKBps())
-           .append('/')
-           .append(_helper.getOutboundFiveMinuteKBps())
-           .append("K/s</td></tr>\n" +
+        if (_context.router().getUptime() > 6*60*1000) {
+            buf.append("<tr><td align=\"left\"><b>5m:</b></td><td align=\"right\">")
+           .append(_helper.getFiveMinuteKBps())
+           .append("Bps</td></tr>\n");
+        }
 
-                   "<tr><td align=\"left\"><b>")
+        if (_context.router().getUptime() > 2*60*1000) {
+            buf.append("<tr><td align=\"left\"><b>")
            .append(_("Total"))
            .append(":</b></td><td align=\"right\">")
-           .append(_helper.getInboundLifetimeKBps())
-           .append('/')
-           .append(_helper.getOutboundLifetimeKBps())
-           .append("K/s</td></tr>\n" +
+           .append(_helper.getLifetimeKBps())
+           .append("Bps</td></tr>\n");
+        }
 
-                   "<tr><td align=\"left\"><b>")
+        buf.append("<tr><td align=\"left\"><b>")
            .append(_("Used"))
            .append(":</b></td><td align=\"right\">")
            .append(_helper.getInboundTransferred())
-           .append('/')
+           .append(" / ")
            .append(_helper.getOutboundTransferred())
            .append("</td></tr></table>\n" +
 
                    "<hr><h3><a href=\"/tunnels.jsp\" target=\"_top\" title=\"")
            .append(_("View existing tunnels and tunnel build status"))
            .append("\">")
-           .append(_("Tunnels in/out"))
+           .append(_("Tunnels"))
            .append("</a></h3><hr>" +
                    "<table>\n" +
 
                    "<tr><td align=\"left\"><b>")
            .append(_("Exploratory"))
            .append(":</b></td><td align=\"right\">")
-           .append(_helper.getInboundTunnels())
-           .append('/')
-           .append(_helper.getOutboundTunnels())
+           .append(_helper.getInboundTunnels() + _helper.getOutboundTunnels())
            .append("</td></tr>\n" +
 
                   "<tr><td align=\"left\"><b>")
            .append(_("Client"))
            .append(":</b></td><td align=\"right\">")
-           .append(_helper.getInboundClientTunnels())
-           .append('/')
-           .append(_helper.getOutboundClientTunnels())
+           .append(_helper.getInboundClientTunnels() + _helper.getOutboundClientTunnels())
            .append("</td></tr>\n" +
 
                    "<tr><td align=\"left\"><b>")
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java
index 1e61bde4fbeb7ecf3d56b2d58958c07af8c1398b..d5e64a1af41e8861043d4bc36db231a4c98c5fd3 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java
@@ -245,96 +245,86 @@ public class SummaryHelper extends HelperBase {
 ********/
  
     /**
-     * How fast we have been receiving data over the last second (pretty printed
-     * string with 2 decimal places representing the KBps)
-     *
+     *    @return "x.xx / y.yy {K|M}"
      */
-    public String getInboundSecondKBps() { 
+    public String getSecondKBps() { 
         if (_context == null) 
-            return "0";
-        double kbps = _context.bandwidthLimiter().getReceiveBps()/1024d;
-        DecimalFormat fmt = new DecimalFormat("##0.00");
-        return fmt.format(kbps);
-    }
-    /**
-     * How fast we have been sending data over the last second (pretty printed
-     * string with 2 decimal places representing the KBps)
-     *
-     */
-    public String getOutboundSecondKBps() { 
-        if (_context == null) 
-            return "0";
-        double kbps = _context.bandwidthLimiter().getSendBps()/1024d;
-        DecimalFormat fmt = new DecimalFormat("##0.00");
-        return fmt.format(kbps);
+            return "0 / 0";
+        return formatPair(_context.bandwidthLimiter().getReceiveBps(), 
+                          _context.bandwidthLimiter().getSendBps());
     }
     
     /**
-     * How fast we have been receiving data over the last 5 minutes (pretty printed
-     * string with 2 decimal places representing the KBps)
-     *
+     *    @return "x.xx / y.yy {K|M}"
      */
-    public String getInboundFiveMinuteKBps() {
+    public String getFiveMinuteKBps() {
         if (_context == null) 
-            return "0";
+            return "0 / 0";
         
         RateStat receiveRate = _context.statManager().getRate("bw.recvRate");
-        if (receiveRate == null) return "0";
-        Rate rate = receiveRate.getRate(5*60*1000);
-        double kbps = rate.getAverageValue()/1024;
-        DecimalFormat fmt = new DecimalFormat("##0.00");
-        return fmt.format(kbps);
-    }
-    
-    /**
-     * How fast we have been sending data over the last 5 minutes (pretty printed
-     * string with 2 decimal places representing the KBps)
-     *
-     */
-    public String getOutboundFiveMinuteKBps() { 
-        if (_context == null) 
-            return "0";
-        
-        RateStat receiveRate = _context.statManager().getRate("bw.sendRate");
-        if (receiveRate == null) return "0";
-        Rate rate = receiveRate.getRate(5*60*1000);
-        double kbps = rate.getAverageValue()/1024;
-        DecimalFormat fmt = new DecimalFormat("##0.00");
-        return fmt.format(kbps);
+        double in = 0;
+        if (receiveRate != null) {
+            Rate r = receiveRate.getRate(5*60*1000);
+            if (r != null)
+                in = r.getAverageValue();
+        }
+        RateStat sendRate = _context.statManager().getRate("bw.sendRate");
+        double out = 0;
+        if (sendRate != null) {
+            Rate r = sendRate.getRate(5*60*1000);
+            if (r != null)
+                out = r.getAverageValue();
+        }
+        return formatPair(in, out);
     }
     
     /**
-     * How fast we have been receiving data since the router started (pretty printed
-     * string with 2 decimal places representing the KBps)
-     *
+     *    @return "x.xx / y.yy {K|M}"
      */
-    public String getInboundLifetimeKBps() { 
+    public String getLifetimeKBps() { 
         if (_context == null) 
-            return "0";
+            return "0 / 0";
         
         RateStat receiveRate = _context.statManager().getRate("bw.recvRate");
-        if (receiveRate == null) return "0";
-        double kbps = receiveRate.getLifetimeAverageValue()/1024;
-        DecimalFormat fmt = new DecimalFormat("##0.00");
-        return fmt.format(kbps);
+        double in;
+        if (receiveRate == null)
+            in = 0;
+        else
+            in = receiveRate.getLifetimeAverageValue();
+        RateStat sendRate = _context.statManager().getRate("bw.sendRate");
+        double out;
+        if (sendRate == null)
+            out = 0;
+        else
+            out = sendRate.getLifetimeAverageValue();
+        return formatPair(in, out);
     }
     
     /**
-     * How fast we have been sending data since the router started (pretty printed
-     * string with 2 decimal places representing the KBps)
-     *
+     *    @return "x.xx / y.yy {K|M}"
      */
-    public String getOutboundLifetimeKBps() { 
-        if (_context == null) 
-            return "0";
-        
-        RateStat sendRate = _context.statManager().getRate("bw.sendRate");
-        if (sendRate == null) return "0";
-        double kbps = sendRate.getLifetimeAverageValue()/1024;
-        DecimalFormat fmt = new DecimalFormat("##0.00");
-        return fmt.format(kbps);
+    private static String formatPair(double in, double out) {
+        boolean mega = in >= 1024*1024 || out >= 1024*1024;
+        // scale both the same
+        if (mega) {
+            in /= 1024*1024;
+            out /= 1024*1024;
+        } else {
+            in /= 1024;
+            out /= 1024;
+        }
+        // control total width
+        DecimalFormat fmt;
+        if (in >= 1000 || out >= 1000)
+            fmt = new DecimalFormat("#0");
+        else if (in >= 100 || out >= 100)
+            fmt = new DecimalFormat("#0.0");
+        else
+            fmt = new DecimalFormat("#0.00");
+        return fmt.format(in) + " / " + fmt.format(out) +
+               (mega ? 'M' : 'K');
     }
-    
+
     /**
      * How much data have we received since the router started (pretty printed
      * string with 2 decimal places and the appropriate units - GB/MB/KB/bytes)