diff --git a/router/java/src/net/i2p/router/admin/AdminListener.java b/apps/admin/java/src/net/i2p/router/admin/AdminListener.java
similarity index 100%
rename from router/java/src/net/i2p/router/admin/AdminListener.java
rename to apps/admin/java/src/net/i2p/router/admin/AdminListener.java
diff --git a/router/java/src/net/i2p/router/admin/AdminManager.java b/apps/admin/java/src/net/i2p/router/admin/AdminManager.java
similarity index 100%
rename from router/java/src/net/i2p/router/admin/AdminManager.java
rename to apps/admin/java/src/net/i2p/router/admin/AdminManager.java
diff --git a/router/java/src/net/i2p/router/admin/AdminRunner.java b/apps/admin/java/src/net/i2p/router/admin/AdminRunner.java
similarity index 100%
rename from router/java/src/net/i2p/router/admin/AdminRunner.java
rename to apps/admin/java/src/net/i2p/router/admin/AdminRunner.java
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigPeerHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigPeerHandler.java
index 68f46d204c62400dfb8d927643e878491ca55e6a..48ec6e443115134966f01cfcaf48a8b4c996e78c 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigPeerHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigPeerHandler.java
@@ -20,22 +20,22 @@ public class ConfigPeerHandler extends FormHandler {
         if ("Save Configuration".equals(_action)) {
             _context.router().saveConfig();
             addFormNotice("Settings saved - not really!!!!!");
-        } else if (_action.startsWith("Shitlist")) {
+        } else if (_action.startsWith("Ban")) {
             Hash h = getHash();
             if (h != null) {
-                _context.shitlist().shitlistRouterForever(h, "Manually shitlisted via <a href=\"configpeer.jsp\">configpeer.jsp</a>");
-                addFormNotice("Peer " + _peer + " shitlisted forever");
+                _context.shitlist().shitlistRouterForever(h, "Manually banned via <a href=\"configpeer.jsp\">configpeer.jsp</a>");
+                addFormNotice("Peer " + _peer + " banned until restart");
                 return;
             }
             addFormError("Invalid peer");
-        } else if (_action.startsWith("Unshitlist")) {
+        } else if (_action.startsWith("Unban")) {
             Hash h = getHash();
             if (h != null) {
                 if (_context.shitlist().isShitlisted(h)) {
                     _context.shitlist().unshitlistRouter(h);
-                    addFormNotice("Peer " + _peer + " unshitlisted");
+                    addFormNotice("Peer " + _peer + " unbanned");
                 } else
-                    addFormNotice("Peer " + _peer + " is not currently shitlisted");
+                    addFormNotice("Peer " + _peer + " is not currently banned");
                 return;
             }
             addFormError("Invalid peer");
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/OldConsoleHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/OldConsoleHelper.java
index 5216c3d5837a1f893f4fc1be4bda1fe61df2b2dd..f7aa130647de24457f58ae1dd03e07afce8f795c 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/OldConsoleHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/OldConsoleHelper.java
@@ -6,7 +6,6 @@ import java.io.OutputStreamWriter;
 import java.io.Writer;
 
 import net.i2p.router.RouterContext;
-import net.i2p.router.admin.StatsGenerator;
 
 public class OldConsoleHelper extends HelperBase {
     public OldConsoleHelper() {}
diff --git a/router/java/src/net/i2p/router/admin/StatsGenerator.java b/apps/routerconsole/java/src/net/i2p/router/web/StatsGenerator.java
similarity index 99%
rename from router/java/src/net/i2p/router/admin/StatsGenerator.java
rename to apps/routerconsole/java/src/net/i2p/router/web/StatsGenerator.java
index ce7c316133b2d0c20c56c3d5da74197732825cf0..3838245f5e4c7733b72acc82a595b793bd68e78f 100644
--- a/router/java/src/net/i2p/router/admin/StatsGenerator.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/StatsGenerator.java
@@ -1,4 +1,4 @@
-package net.i2p.router.admin;
+package net.i2p.router.web;
 
 import java.io.IOException;
 import java.io.Writer;
diff --git a/apps/routerconsole/jsp/configpeer.jsp b/apps/routerconsole/jsp/configpeer.jsp
index debe2676b8cf4f1e4223a2dfe2a3cbc4f4bf65c2..cc759d93646b674bc4fad5939eceb851752d1aa3 100644
--- a/apps/routerconsole/jsp/configpeer.jsp
+++ b/apps/routerconsole/jsp/configpeer.jsp
@@ -39,12 +39,12 @@
  <h2>Manual Peer Controls</h2>
  <div class="mediumtags">Router Hash:
  <input type="text" size="55" name="peer" value="<%=peer%>" /></div>
- <h3>Manually Shitlist / Unshitlist a Router</h3>
+ <h3>Manually Ban / Unban a Peer</h3>
  Shitlisting will prevent the participation of this peer in tunnels you create. 
       <hr />      
       <div class="formaction"> 
-        <input type="submit" name="action" value="Shitlist peer until restart" />
-        <input type="submit" name="action" value="Unshitlist peer" />
+        <input type="submit" name="action" value="Ban peer until restart" />
+        <input type="submit" name="action" value="Unban peer" />
         <% if (! "".equals(peer)) { %>
         <!-- <font color="blue">&lt;---- click to verify action</font> -->
         <% } %>
diff --git a/apps/routerconsole/jsp/summaryframe.jsp b/apps/routerconsole/jsp/summaryframe.jsp
index 71eef1de20fd8d8854312cdccab846bd94b23473..6be1645602217aeb37b3a447872d9aa1ccd785a6 100644
--- a/apps/routerconsole/jsp/summaryframe.jsp
+++ b/apps/routerconsole/jsp/summaryframe.jsp
@@ -1,15 +1,14 @@
 <%@page contentType="text/html"%>
 <%@page pageEncoding="UTF-8"%>
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-
 <%
 /*
  * All links in the summary bar must have target="_top"
  * so they don't load in the iframe
  */
 %>
-
 <html><head>
+<%@include file="css.jsp" %>
 <title>Summary Bar</title>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 <%
@@ -50,7 +49,6 @@
         }
     }
 %>
-<%@include file="css.jsp" %>
 </head>
 
 <body style="margin: 0;">
diff --git a/apps/systray/java/src/net/i2p/apps/systray/ConfigFile.java b/apps/systray/java/src/net/i2p/apps/systray/ConfigFile.java
index 3a1a3edb441095b3bacf329aa57410472781a3ba..642bea630a129b687532e6d129d2f90a23d3d7cf 100644
--- a/apps/systray/java/src/net/i2p/apps/systray/ConfigFile.java
+++ b/apps/systray/java/src/net/i2p/apps/systray/ConfigFile.java
@@ -17,6 +17,10 @@ import java.util.Properties;
 /**
  * Simple config file handler.
  * 
+ * Warning - browser needs double quotes and double backslashes on Windows
+ * e.g.
+ * browser="C:\\Program Files\\Mozilla Firefox\\firefox.exe"
+ *
  * @author hypercubus
  */
 public class ConfigFile {
diff --git a/core/java/src/net/i2p/data/DataHelper.java b/core/java/src/net/i2p/data/DataHelper.java
index 56528a46b22a0f8dd2daa05ffa3b2f2c1c5b754d..ef0b89fc24602db810663dff142b9607dc46dc61 100644
--- a/core/java/src/net/i2p/data/DataHelper.java
+++ b/core/java/src/net/i2p/data/DataHelper.java
@@ -212,6 +212,11 @@ public class DataHelper {
     /**
      * A more efficient Properties.load
      *
+     * Some of the other differences:
+     * - This does not process or drop backslashes
+     * - '#' or ';' starts a comment line, but '!' does not
+     * - Leading whitespace is not trimmed
+     * - '=' is the only key-termination character (not ':' or whitespace)
      */
     public static void loadProps(Properties props, File file) throws IOException {
         loadProps(props, file, false);
diff --git a/router/java/src/net/i2p/router/Blocklist.java b/router/java/src/net/i2p/router/Blocklist.java
index a166939b4394f3da25cde6b9ac8391ee1461f32d..b50017ca5c44c87ea9e98764d584f3c93932330d 100644
--- a/router/java/src/net/i2p/router/Blocklist.java
+++ b/router/java/src/net/i2p/router/Blocklist.java
@@ -111,7 +111,7 @@ public class Blocklist {
             }
             for (Iterator iter = _peerBlocklist.keySet().iterator(); iter.hasNext(); ) {
                 Hash peer = (Hash) iter.next();
-                String reason = "Blocklisted by router hash";
+                String reason = "Banned by router hash";
                 String comment = (String) _peerBlocklist.get(peer);
                 if (comment != null)
                     reason = reason + ": " + comment;
@@ -659,7 +659,7 @@ public class Blocklist {
      */
     public void shitlist(Hash peer) {
         // Temporary reason, until the job finishes
-        _context.shitlist().shitlistRouterForever(peer, "IP Blocklisted");
+        _context.shitlist().shitlistRouterForever(peer, "IP Banned");
         if (! "true".equals( _context.getProperty(PROP_BLOCKLIST_DETAIL, "true")))
             return;
         boolean shouldRunJob;
@@ -682,7 +682,7 @@ public class Blocklist {
             super(_context);
             _peer = p;
         }
-        public String getName() { return "Shitlist Peer Forever"; }
+        public String getName() { return "Ban Peer by IP"; }
         public void runJob() {
             shitlistForever(_peer);
             synchronized (_inProcess) {
@@ -735,7 +735,7 @@ public class Blocklist {
                             if (i != 3)
                                 reason = reason + '.';
                         }
-                        reason = reason + " blocklisted by entry \"" + buf + "\"";
+                        reason = reason + " banned by " + BLOCKLIST_FILE_DEFAULT + " entry \"" + buf + "\"";
                         if (_log.shouldLog(Log.WARN))
                             _log.warn("Shitlisting " + peer + " " + reason);
                         _context.shitlist().shitlistRouterForever(peer, reason);
@@ -755,7 +755,7 @@ public class Blocklist {
 
     /** write directly to the stream so we don't OOM on a huge list */
     public void renderStatusHTML(Writer out) throws IOException {
-        out.write("<h2>IP Blocklist</h2>");
+        out.write("<h2>Banned IPs</h2>");
         Set singles = new TreeSet();
         singles.addAll(_singleIPBlocklist);
         if (singles.size() > 0) {
diff --git a/router/java/src/net/i2p/router/Router.java b/router/java/src/net/i2p/router/Router.java
index 0729211bf94bf03e171ef548f7233e979fb3f4ec..bbfd6f4fc58656c14774d0a60d260e2e043355c4 100644
--- a/router/java/src/net/i2p/router/Router.java
+++ b/router/java/src/net/i2p/router/Router.java
@@ -771,14 +771,15 @@ public class Router {
         out.flush();
     }
     
-    private static int MAX_MSG_LENGTH = 120;
+    //private static int MAX_MSG_LENGTH = 120;
     private static final void appendLogMessage(StringBuilder buf, String msg) {
         // disable this code for the moment because i think it
         // looks ugly (on the router console)
-        if (true) {
+        //if (true) {
             buf.append(msg);
             return;
-        }
+        //}
+/******
         if (msg.length() < MAX_MSG_LENGTH) {
             buf.append(msg);
             return;
@@ -810,9 +811,11 @@ public class Router {
             newline = msg.indexOf('\n');
             len = msg.length();
         }
+******/
     }
     
     /** main-ish method for testing appendLogMessage */
+/******
     private static final void testAppendLog() {
         StringBuilder buf = new StringBuilder(1024);
         Router.appendLogMessage(buf, "hi\nhow are you\nh0h0h0");
@@ -846,6 +849,7 @@ public class Router {
         System.out.println("line: [" + buf.toString() + "]");
         buf.setLength(0);
     }
+******/
     
     public static final int EXIT_GRACEFUL = 2;
     public static final int EXIT_HARD = 3;
diff --git a/router/java/src/net/i2p/router/RouterContext.java b/router/java/src/net/i2p/router/RouterContext.java
index 6dd7282b0d0a0aab4dcb7a4da47a4ad0229f99b1..467338eb22375e7f9f2fccd4122a64be9a83f11d 100644
--- a/router/java/src/net/i2p/router/RouterContext.java
+++ b/router/java/src/net/i2p/router/RouterContext.java
@@ -6,7 +6,6 @@ import java.util.Properties;
 
 import net.i2p.I2PAppContext;
 import net.i2p.data.Hash;
-import net.i2p.router.admin.AdminManager;
 import net.i2p.router.client.ClientManagerFacadeImpl;
 import net.i2p.router.networkdb.kademlia.FloodfillNetworkDatabaseFacade;
 import net.i2p.router.peermanager.Calculator;
@@ -35,7 +34,6 @@ import net.i2p.util.KeyRing;
  */
 public class RouterContext extends I2PAppContext {
     private Router _router;
-    private AdminManager _adminManager;
     private ClientManagerFacade _clientManagerFacade;
     private ClientMessagePool _clientMessagePool;
     private JobQueue _jobQueue;
@@ -91,7 +89,6 @@ public class RouterContext extends I2PAppContext {
         return envProps;
     }
     public void initAll() {
-        //_adminManager = new AdminManager(this);
         if ("false".equals(getProperty("i2p.dummyClientFacade", "false")))
             _clientManagerFacade = new ClientManagerFacadeImpl(this);
         else
@@ -149,11 +146,6 @@ public class RouterContext extends I2PAppContext {
     /** convenience method for querying the router's ident */
     public Hash routerHash() { return _router.getRouterInfo().getIdentity().getHash(); }
 
-    /**
-     * Controls a basic admin interface
-     *
-     */
-    public AdminManager adminManager() { return _adminManager; }
     /**
      * How are we coordinating clients for the router?
      */
diff --git a/router/java/src/net/i2p/router/Shitlist.java b/router/java/src/net/i2p/router/Shitlist.java
index 6f38826b3c348373f5e6c7f1b35f5aea96ee8590..d1307fdea7cce377ebd8b197ebdbf2eac5d4f2d8 100644
--- a/router/java/src/net/i2p/router/Shitlist.java
+++ b/router/java/src/net/i2p/router/Shitlist.java
@@ -65,7 +65,7 @@ public class Shitlist {
             _toUnshitlist = new ArrayList(4);
             getTiming().setStartAfter(ctx.clock().now() + SHITLIST_CLEANER_START_DELAY);
         }
-        public String getName() { return "Cleanup shitlist"; }
+        public String getName() { return "Expire banned peers"; }
         public void runJob() {
             _toUnshitlist.clear();
             long now = getContext().clock().now();
@@ -253,7 +253,7 @@ public class Shitlist {
 
     public void renderStatusHTML(Writer out) throws IOException {
         StringBuilder buf = new StringBuilder(1024);
-        buf.append("<h2>Shitlist</h2>");
+        buf.append("<h2>Banned Peers</h2>");
         Map<Hash, Entry> entries = new TreeMap(new HashComparator());
         
         entries.putAll(_entries);
@@ -273,7 +273,7 @@ public class Shitlist {
                 buf.append("<br />\n");
                 buf.append(entry.cause);
             }
-            buf.append(" (<a href=\"configpeer.jsp?peer=").append(key.toBase64()).append("#unsh\">unshitlist now</a>)");
+            buf.append(" (<a href=\"configpeer.jsp?peer=").append(key.toBase64()).append("#unsh\">unban now</a>)");
             buf.append("</li>\n");
         }
         buf.append("</ul>\n");
diff --git a/router/java/src/net/i2p/router/StatisticsManager.java b/router/java/src/net/i2p/router/StatisticsManager.java
index eb49ae0024ba0d22b25f0efa04000a18d4c36b5d..86b0ee1135d29ac17e7da5bf74231e7f517d7364 100644
--- a/router/java/src/net/i2p/router/StatisticsManager.java
+++ b/router/java/src/net/i2p/router/StatisticsManager.java
@@ -121,7 +121,9 @@ public class StatisticsManager implements Service {
             //includeRate("transport.sendProcessingTime", stats, new long[] { 60*60*1000 });
             //includeRate("jobQueue.jobRunSlow", stats, new long[] { 10*60*1000l, 60*60*1000l });
             //includeRate("crypto.elGamal.encrypt", stats, new long[] { 60*60*1000 });
-            includeRate("tunnel.participatingTunnels", stats, new long[] { 60*60*1000 });
+            // total event count can be used to track uptime
+            boolean hideTotals = ! RouterVersion.VERSION.equals("0.7.6");
+            includeRate("tunnel.participatingTunnels", stats, new long[] { 60*60*1000 }, hideTotals);
             //includeRate("tunnel.testSuccessTime", stats, new long[] { 10*60*1000l });
             //includeRate("client.sendAckTime", stats, new long[] { 60*60*1000 }, true);
             //includeRate("udp.sendConfirmTime", stats, new long[] { 10*60*1000 });
diff --git a/router/java/src/net/i2p/router/peermanager/ProfileOrganizerRenderer.java b/router/java/src/net/i2p/router/peermanager/ProfileOrganizerRenderer.java
index fecda29d031b825e239abb4d35d4faa32ba6ab50..65e22814d4cce4dcc415c1fb0437e44f74ccb982 100644
--- a/router/java/src/net/i2p/router/peermanager/ProfileOrganizerRenderer.java
+++ b/router/java/src/net/i2p/router/peermanager/ProfileOrganizerRenderer.java
@@ -138,7 +138,7 @@ class ProfileOrganizerRenderer {
             }
             buf.append("</td><td align=\"right\">").append(num(prof.getIntegrationValue()));
             buf.append("</td><td align=\"center\">");
-            if (_context.shitlist().isShitlisted(peer)) buf.append("Shitlist");
+            if (_context.shitlist().isShitlisted(peer)) buf.append("Banned");
             if (prof.getIsFailing()) buf.append(" Failing");
             if (_context.commSystem().wasUnreachable(peer)) buf.append(" Unreachable");
             Rate failed = prof.getTunnelHistory().getFailedRate().getRate(30*60*1000);