diff --git a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
index f2f71e6baaede851e9472ffb09f0e84436c9336c..99b4c22cac6c15704ca535456b0d9a229e7f146d 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
@@ -711,7 +711,7 @@ public class I2PSnarkServlet extends HttpServlet {
         out.write("<span class=\"snarkConfigTitle\">Configuration:</span><br />\n");
         out.write("Data directory: <input type=\"text\" size=\"40\" name=\"dataDir\" value=\"" + dataDir + "\" ");
         out.write("title=\"Directory to store torrents and data\" disabled=\"true\" /> <i>(Edit i2psnark.config and restart to change)</i><br />\n");
-        out.write("Auto start: <input type=\"checkbox\" name=\"autoStart\" value=\"true\" " 
+        out.write("Auto start: <input type=\"checkbox\" class=\"optbox\" name=\"autoStart\" value=\"true\" " 
                   + (autoStart ? "checked " : "") 
                   + "title=\"If true, automatically start torrents that are added\" />");
         //Auto add: <input type="checkbox" name="autoAdd" value="true" title="If true, automatically add torrents that are found in the data directory" />
@@ -738,7 +738,7 @@ public class I2PSnarkServlet extends HttpServlet {
         out.write("Up bandwidth limit: <input type=\"text\" name=\"upBW\" value=\""
                   + _manager.util().getMaxUpBW() + "\" size=\"3\" maxlength=\"3\" /> KBps <i>(Half <a href=\"/config.jsp\" target=\"blank\">available bandwidth</a> recommended.)</i><br />\n");
         
-        out.write("Use open trackers also: <input type=\"checkbox\" name=\"useOpenTrackers\" value=\"true\" " 
+        out.write("Use open trackers also: <input type=\"checkbox\" class=\"optbox\" name=\"useOpenTrackers\" value=\"true\" " 
                   + (useOpenTrackers ? "checked " : "") 
                   + "title=\"If true, uses open trackers in addition\" /> ");
         out.write("Announce URLs: <input type=\"text\" name=\"openTrackers\" value=\""
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHandler.java
index 5fc3679e0c06468f3a05086c740ec297dd54b6cf..285cdd3854214b0ce0038dcc070d5418a1e744a5 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHandler.java
@@ -55,7 +55,7 @@ public class ConfigClientsHandler extends FormHandler {
             else
                 startWebApp(app);
         } else {
-            addFormError("Unsupported " + _action);
+            addFormError("Unsupported " + _action + ".");
         }
     }
     
@@ -70,18 +70,18 @@ public class ConfigClientsHandler extends FormHandler {
                 ca.disabled = val == null;
         }
         ClientAppConfig.writeClientAppConfig(_context, clients);
-        addFormNotice("Client configuration saved successfully - restart required to take effect");
+        addFormNotice("Client configuration saved successfully - restart required to take effect.");
     }
 
     private void startClient(int i) {
         List clients = ClientAppConfig.getClientApps(_context);
         if (i >= clients.size()) {
-            addFormError("Bad client index");
+            addFormError("Bad client index.");
             return;
         }
         ClientAppConfig ca = (ClientAppConfig) clients.get(i);
         LoadClientAppsJob.runClient(ca.className, ca.clientName, LoadClientAppsJob.parseArgs(ca.args), _log);
-        addFormNotice("Client " + ca.clientName + " started");
+        addFormNotice("Client " + ca.clientName + " started.");
     }
 
     private void saveWebAppChanges() {
@@ -98,7 +98,7 @@ public class ConfigClientsHandler extends FormHandler {
                 props.setProperty(name, "" + (val != null));
         }
         RouterConsoleRunner.storeWebAppProperties(props);
-        addFormNotice("WebApp configuration saved successfully - restart required to take effect");
+        addFormNotice("WebApp configuration saved successfully - restart required to take effect.");
     }
 
     // Big hack for the moment, not using properties for directory and port
@@ -116,14 +116,14 @@ public class ConfigClientsHandler extends FormHandler {
                         path = new File(path, app + ".war");
                         s.addWebApplication("/"+ app, path.getAbsolutePath()).start();
                         // no passwords... initialize(wac);
-                        addFormNotice("WebApp <a href=\"/" + app + "/\">" + app + "</a> started");
+                        addFormNotice("WebApp <a href=\"/" + app + "/\">" + app + "</a> started.");
                     } catch (Exception ioe) {
-                        addFormError("Failed to start " + app + " " + ioe);
+                        addFormError("Failed to start " + app + " " + ioe + ".");
                     }
                     return;
                 }
             }
         }
-        addFormError("Failed to find server");
+        addFormError("Failed to find server.");
     }
 }
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHelper.java
index 02b31e884237ab954d36e23a66f22e1d48e61427..47b301d28e86f8ee1208cfed2b045bb7a28e5de8 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHelper.java
@@ -14,8 +14,8 @@ public class ConfigClientsHelper extends HelperBase {
     
     public String getForm1() {
         StringBuilder buf = new StringBuilder(1024);
-        buf.append("<table border=\"1\">\n");
-        buf.append("<tr><th>Client</th><th>Run at Startup?</th><th>Start Now</th><th>Class and arguments</th></tr>\n");
+        buf.append("<table>\n");
+        buf.append("<tr><th align=\"right\">Client</th><th>Run at Startup?</th><th>Start Now</th><th align=\"left\">Class and arguments</th></tr>\n");
         
         List clients = ClientAppConfig.getClientApps(_context);
         for (int cur = 0; cur < clients.size(); cur++) {
@@ -30,8 +30,8 @@ public class ConfigClientsHelper extends HelperBase {
 
     public String getForm2() {
         StringBuilder buf = new StringBuilder(1024);
-        buf.append("<table border=\"1\">\n");
-        buf.append("<tr><th>WebApp</th><th>Run at Startup?</th><th>Start Now</th><th>Description</th></tr>\n");
+        buf.append("<table>\n");
+        buf.append("<tr><th align=\"right\">WebApp</th><th>Run at Startup?</th><th>Start Now</th><th align=\"left\">Description</th></tr>\n");
         Properties props = RouterConsoleRunner.webAppProperties();
         Set keys = new TreeSet(props.keySet());
         for (Iterator iter = keys.iterator(); iter.hasNext(); ) {
@@ -47,7 +47,7 @@ public class ConfigClientsHelper extends HelperBase {
     }
 
     private void renderForm(StringBuilder buf, String index, String name, boolean urlify, boolean enabled, boolean ro, String desc) {
-        buf.append("<tr><td>");
+        buf.append("<tr><td class=\"mediumtags\" align=\"right\" width=\"25%\">");
         if (urlify && enabled) {
             String link = "/";
             if (! RouterConsoleRunner.ROUTERCONSOLE.equals(name))
@@ -56,16 +56,16 @@ public class ConfigClientsHelper extends HelperBase {
         } else {
             buf.append(name);
         }
-        buf.append("</td><td align=\"center\"><input type=\"checkbox\" name=\"").append(index).append(".enabled\" value=\"true\" ");
+        buf.append("</td><td align=\"center\" width=\"10%\"><input type=\"checkbox\" class=\"optbox\" name=\"").append(index).append(".enabled\" value=\"true\" ");
         if (enabled) {
             buf.append("checked=\"true\" ");
             if (ro)
                 buf.append("disabled=\"true\" ");
         }
-        buf.append("/></td><td>&nbsp;");
+        buf.append("/></td><td align=\"center\" width=\"15%\">");
         if (!enabled) {
             buf.append("<button type=\"submit\" name=\"action\" value=\"Start ").append(index).append("\" >Start<span class=hide> ").append(index).append("</span></button>");
         }
-        buf.append("&nbsp;</td><td>").append(desc).append("</td></tr>\n");
+        buf.append("</td><td align=\"left\" width=\"50%\">").append(desc).append("</td></tr>\n");
     }
 }
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigTunnelsHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigTunnelsHandler.java
index c7c7c2eb968011748b7390a6b67ed6419a32f6c1..0e59380e19aa565a7354757bde0f3c1abd64c91a 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigTunnelsHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigTunnelsHandler.java
@@ -47,7 +47,7 @@ public class ConfigTunnelsHandler extends FormHandler {
         boolean saveRequired = false;
         
         if (_log.shouldLog(Log.DEBUG))
-            _log.debug("Saving changes, with props = " + _settings);
+            _log.debug("Saving changes, with props = " + _settings + ".");
         
         int updated = 0;
         int index = 0;
@@ -67,7 +67,7 @@ public class ConfigTunnelsHandler extends FormHandler {
                 try {
                     client.fromBase64(poolName);
                 } catch (DataFormatException dfe) {
-                    addFormError("Internal error (pool name could not resolve - " + poolName + ")");
+                    addFormError("Internal error (pool name could not resolve - " + poolName + ").");
                     index++;
                     continue;
                 }
@@ -76,7 +76,7 @@ public class ConfigTunnelsHandler extends FormHandler {
             }
             
             if ( (in == null) || (out == null) ) {
-                addFormError("Internal error (pool settings cound not be found for " + poolName + ")");
+                addFormError("Internal error (pool settings cound not be found for " + poolName + ").");
                 index++;
                 continue;
             }
@@ -131,14 +131,14 @@ public class ConfigTunnelsHandler extends FormHandler {
         }
         
         if (updated > 0)
-            addFormNotice("Updated settings for " + updated + " pools");
+            addFormNotice("Updated settings for " + updated + " pools.");
         
         if (saveRequired) {
             boolean saved = _context.router().saveConfig();
             if (saved) 
-                addFormNotice("Exploratory tunnel configuration saved successfully");
+                addFormNotice("Exploratory tunnel configuration saved successfully.");
             else
-                addFormNotice("Error saving the configuration (applied but not saved) - please see the error logs");
+                addFormNotice("Error saving the configuration (applied but not saved) - please see the error logs.");
         }
     }
     private static final int getInt(Object val) { 
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigTunnelsHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigTunnelsHelper.java
index aa2b6a1b0736a30bbf44663b6eb12488b8225c94..e5e0a29225267ac14bebc49512806cd76ec89af0 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigTunnelsHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigTunnelsHelper.java
@@ -62,18 +62,18 @@ public class ConfigTunnelsHelper extends HelperBase {
             in.getLength() + in.getLengthVariance() <= 0 ||
             out.getLength() <= 0 ||
             out.getLength() + out.getLengthVariance() <= 0)
-            buf.append("<tr><th colspan=\"3\"><font color=\"red\">ANONYMITY WARNING - Settings include 0-hop tunnels</font></th></tr>");
+            buf.append("<tr><th colspan=\"3\"><font color=\"red\">ANONYMITY WARNING - Settings include 0-hop tunnels.</font></th></tr>");
         else if (in.getLength() <= 1 ||
             in.getLength() + in.getLengthVariance() <= 1 ||
             out.getLength() <= 1 ||
             out.getLength() + out.getLengthVariance() <= 1)
-            buf.append("<tr><th colspan=\"3\"><font color=\"red\">ANONYMITY WARNING - Settings include 1-hop tunnels</font></th></tr>");
+            buf.append("<tr><th colspan=\"3\"><font color=\"red\">ANONYMITY WARNING - Settings include 1-hop tunnels.</font></th></tr>");
         if (in.getLength() + Math.abs(in.getLengthVariance()) >= WARN_LENGTH ||
             out.getLength() + Math.abs(out.getLengthVariance()) >= WARN_LENGTH)
-            buf.append("<tr><th colspan=\"3\"><font color=\"red\">PERFORMANCE WARNING - Settings include very long tunnels</font></th></tr>");
+            buf.append("<tr><th colspan=\"3\"><font color=\"red\">PERFORMANCE WARNING - Settings include very long tunnels.</font></th></tr>");
         if (in.getQuantity() + in.getBackupQuantity() >= WARN_QUANTITY ||
             out.getQuantity() + out.getBackupQuantity() >= WARN_QUANTITY)
-            buf.append("<tr><th colspan=\"3\"><font color=\"red\">PERFORMANCE WARNING - Settings include high tunnel quantities</font></th></tr>");
+            buf.append("<tr><th colspan=\"3\"><font color=\"red\">PERFORMANCE WARNING - Settings include high tunnel quantities.</font></th></tr>");
 
 buf.append("<tr><th></th><th><img src=\"/themes/console/images/inbound.png\" alt=\"Inbound\" title=\"Inbound Tunnels\"/>&nbsp;&nbsp;Inbound</th><th><img src=\"/themes/console/images/outbound.png\" alt=\"Outbound Tunnels\" title=\"Outbound\"/>&nbsp;&nbsp;Outbound</th></tr>\n");
 
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHandler.java
index 934bb0c88a3e4338d5a2ee239ecbcfba010a1495..79ea1d1829969bdb946ce9e32cb719adbb608b3d 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHandler.java
@@ -24,8 +24,8 @@ public class ConfigUIHandler extends FormHandler {
         else
             _context.router().setConfigSetting(CSSHelper.PROP_THEME_NAME, _config);
         if (_context.router().saveConfig()) 
-            addFormNotice("Theme change successfully saved (<a href=\"configui.jsp\">refresh page to view</a>)");
+            addFormNotice("Theme change successfully saved (<a href=\"configui.jsp\">refresh page</a> to view).");
         else
-            addFormNotice("Error saving the configuration (applied but not saved) - please see the error logs");
+            addFormNotice("Error saving the configuration (applied but not saved) - please see the error logs.");
     }
 }
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHelper.java
index 9bfd22077d0c947c57208d2d7a9b6126c86b4a0b..11830975ba7079a5cf8ca9139a6267c1137a1d1a 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHelper.java
@@ -9,7 +9,7 @@ public class ConfigUIHelper extends HelperBase {
         StringBuilder buf = new StringBuilder(512);
         String current = _context.getProperty(CSSHelper.PROP_THEME_NAME, CSSHelper.DEFAULT_THEME);
         for (String theme : themes) {
-            buf.append("<input type=\"radio\" name=\"theme\" ");
+            buf.append("<input type=\"radio\" class=\"optbox\" name=\"theme\" ");
             if (theme.equals(current))
                 buf.append("checked=\"true\" ");
             buf.append("value=\"").append(theme).append("\"/>").append(theme).append("<br />\n");
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigUpdateHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigUpdateHelper.java
index d67f63bfad4532ff45def426e03ba58876a1d421..5d03d90249ffae2641642f49542d727846158f05 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigUpdateHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigUpdateHelper.java
@@ -42,10 +42,10 @@ public class ConfigUpdateHelper extends HelperBase {
     public String getUpdateThroughProxy() {
         String proxy = _context.getProperty(ConfigUpdateHandler.PROP_SHOULD_PROXY, ConfigUpdateHandler.DEFAULT_SHOULD_PROXY);
         if (Boolean.valueOf(proxy).booleanValue()) 
-            return "<input type=\"checkbox\" value=\"true\" name=\"updateThroughProxy\" checked=\"true\" >";
+            return "<input type=\"checkbox\" class=\"optbox\" value=\"true\" name=\"updateThroughProxy\" checked=\"true\" >";
         else
             
-            return "<input type=\"checkbox\" value=\"true\" name=\"updateThroughProxy\" >";
+            return "<input type=\"checkbox\" class=\"optbox\" value=\"true\" name=\"updateThroughProxy\" >";
     }
     
     private static final long PERIODS[] = new long[] { 12*60*60*1000l, 24*60*60*1000l, 48*60*60*1000l, -1l };
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/GraphHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/GraphHelper.java
index 2ab03ed58125cb828844f1e435877916b9c25ad6..e9749750cd3de6a2fec8be8f18d910565af36048 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/GraphHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/GraphHelper.java
@@ -109,13 +109,13 @@ public class GraphHelper extends HelperBase {
             _out.write("<p />[<a href=\"configstats.jsp\">Select Stats to Graph</a>]<p />");
             _out.write("<form action=\"graphs.jsp\" method=\"GET\">");
             _out.write("Periods: <input size=\"3\" type=\"text\" name=\"periodCount\" value=\"" + _periodCount + "\" /><br />\n");
-            _out.write("Plot averages: <input type=\"radio\" name=\"showEvents\" value=\"false\" " + (_showEvents ? "" : "checked=\"true\" ") + " /> ");
-            _out.write("or plot events: <input type=\"radio\" name=\"showEvents\" value=\"true\" "+ (_showEvents ? "checked=\"true\" " : "") + " /><br />\n");
+            _out.write("Plot averages: <input type=\"radio\" class=\"optbox\" name=\"showEvents\" value=\"false\" " + (_showEvents ? "" : "checked=\"true\" ") + " /> ");
+            _out.write("or plot events: <input type=\"radio\" class=\"optbox\" name=\"showEvents\" value=\"true\" "+ (_showEvents ? "checked=\"true\" " : "") + " /><br />\n");
             _out.write("Image sizes: width: <input size=\"4\" type=\"text\" name=\"width\" value=\"" + _width 
                        + "\" /> pixels, height: <input size=\"4\" type=\"text\" name=\"height\" value=\"" + _height  
                        + "\" /><br />\n");
             _out.write("Refresh delay: <select name=\"refreshDelay\"><option value=\"60\">1 minute</option><option value=\"120\">2 minutes</option><option value=\"300\">5 minutes</option><option value=\"600\">10 minutes</option><option value=\"1800\">30 minutes</option><option value=\"3600\">1 hour</option><option value=\"-1\">Never</option></select><br />\n");
-            _out.write("<hr /><input type=\"submit\" value=\"Redraw\" /></div>");
+            _out.write("<hr /><div class=\"formaction\"><input type=\"submit\" value=\"Redraw\" /></div></div>");
         } catch (IOException ioe) {
             ioe.printStackTrace();
         }
diff --git a/apps/routerconsole/jsp/config.jsp b/apps/routerconsole/jsp/config.jsp
index 1cf5da92c0f5824b38c281cc9699c13aab399ed7..b91a1ce245ce3d0dcd4280cc283b9718bdfd6ec2 100644
--- a/apps/routerconsole/jsp/config.jsp
+++ b/apps/routerconsole/jsp/config.jsp
@@ -30,6 +30,7 @@
  <b>I2P will work best if you configure your rates to match the speed of your internet connection.</b>
  </p>
 <p>
+   <div class="wideload">
     <table>
     <tr><td><input style="text-align: right; width: 5em;" name="inboundrate" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="inboundRate" />" /> KBps
     In <td>(<jsp:getProperty name="nethelper" property="inboundRateBits" />)<br />
@@ -49,7 +50,7 @@
 -->
     <tr><td><jsp:getProperty name="nethelper" property="sharePercentageBox" />
     Share <td>(<jsp:getProperty name="nethelper" property="shareRateBits" />)<br />
-    </table>
+  </table></div>
  </p><p>
  <% int share = nethelper.getShareBandwidth();
     if (share < 12) {
@@ -59,15 +60,14 @@
         out.print("It improves your anonymity by creating cover traffic, and helps the network.<br />");
     } else {
         out.print("You have configured I2P to share<b> " + share + "KBps</b>. ");
-        out.print("The higher the share bandwidth the more you improve your anonymity and help the network.<br />");
+        out.print("The higher the share bandwidth the more you improve your anonymity and help the network.<hr />");
     }
  %>
- </p><p>
- <input type="submit" name="save" value="Save changes" /> <input type="reset" value="Cancel" /><br />
- </p>
-<!--
+ </p><div class="formaction">
+<input type="submit" name="save" value="Save changes" /> <input type="reset" value="Cancel" /></div>
+ <!--
  <b>Enable load testing: </b>
-<input type="checkbox" name="enableloadtesting" value="true" <jsp:getProperty name="nethelper" property="enableLoadTesting" /> />
+<input type="checkbox" class="optbox" name="enableloadtesting" value="true" <jsp:getProperty name="nethelper" property="enableLoadTesting" /> />
  <p>If enabled, your router will periodically anonymously probe some of your peers
  to see what sort of throughput they can handle.  This improves your router's ability
  to pick faster peers, but can cost substantial bandwidth.  Relevant data from the
@@ -80,20 +80,20 @@
  <b>The default settings will work for most people. There is <a href="#chelp">help below</a>.</b>
  </p><p>
  <b>UPnP Configuration:</b><br />
-    <input type="checkbox" name="upnp" value="true" <jsp:getProperty name="nethelper" property="upnpChecked" /> />
+    <input type="checkbox" class="optbox" name="upnp" value="true" <jsp:getProperty name="nethelper" property="upnpChecked" /> />
     Enable UPnP to open firewall ports - <a href="peers.jsp#upnp">UPnP status</a>
  </p><p>
  <b>IP Configuration:</b><br />
  Externally reachable hostname or IP address:<br />
-    <input type="radio" name="udpAutoIP" value="local,upnp,ssu" <%=nethelper.getUdpAutoIPChecked(3) %> />
+    <input type="radio" class="optbox" name="udpAutoIP" value="local,upnp,ssu" <%=nethelper.getUdpAutoIPChecked(3) %> />
     Use all auto-detect methods<br />
-    <input type="radio" name="udpAutoIP" value="local,ssu" <%=nethelper.getUdpAutoIPChecked(4) %> />
+    <input type="radio" class="optbox" name="udpAutoIP" value="local,ssu" <%=nethelper.getUdpAutoIPChecked(4) %> />
     Disable UPnP IP address detection<br />
-    <input type="radio" name="udpAutoIP" value="upnp,ssu" <%=nethelper.getUdpAutoIPChecked(5) %> />
+    <input type="radio" class="optbox" name="udpAutoIP" value="upnp,ssu" <%=nethelper.getUdpAutoIPChecked(5) %> />
     Ignore local interface IP address<br />
-    <input type="radio" name="udpAutoIP" value="ssu" <%=nethelper.getUdpAutoIPChecked(0) %> />
+    <input type="radio" class="optbox" name="udpAutoIP" value="ssu" <%=nethelper.getUdpAutoIPChecked(0) %> />
     Use SSU IP address detection only<br />
-    <input type="radio" name="udpAutoIP" value="fixed" <%=nethelper.getUdpAutoIPChecked(1) %> />
+    <input type="radio" class="optbox" name="udpAutoIP" value="fixed" <%=nethelper.getUdpAutoIPChecked(1) %> />
     Specify hostname or IP:
     <input name ="udpHost1" type="text" size="16" value="<jsp:getProperty name="nethelper" property="udphostname" />" />
     <% String[] ips = nethelper.getAddresses();
@@ -110,14 +110,14 @@
        }
     %>
     <br />
-    <input type="radio" name="udpAutoIP" value="hidden" <%=nethelper.getUdpAutoIPChecked(2) %> />
+    <input type="radio" class="optbox" name="udpAutoIP" value="hidden" <%=nethelper.getUdpAutoIPChecked(2) %> />
     Hidden mode - do not publish IP <i>(prevents participating traffic)</i><br />
  </p><p>
  <b>UDP Configuration:</b><br />
  UDP port:
  <input name ="udpPort" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="configuredUdpPort" />" /><br />
 <!-- let's keep this simple...
-<input type="checkbox" name="requireIntroductions" value="true" <jsp:getProperty name="nethelper" property="requireIntroductionsChecked" /> />
+<input type="checkbox" class="optbox" name="requireIntroductions" value="true" <jsp:getProperty name="nethelper" property="requireIntroductionsChecked" /> />
  Require SSU introductions
  <i>(Enable if you cannot open your firewall)</i>
  </p><p>
@@ -126,31 +126,32 @@
  </p><p>
  <b>TCP Configuration:</b><br />
  Externally reachable hostname or IP address:<br />
-    <input type="radio" name="ntcpAutoIP" value="true" <%=nethelper.getTcpAutoIPChecked(2) %> />
+    <input type="radio" class="optbox" name="ntcpAutoIP" value="true" <%=nethelper.getTcpAutoIPChecked(2) %> />
     Use auto-detected IP address
     <i>(currently <jsp:getProperty name="nethelper" property="udpIP" />)</i>
     if we are not firewalled<br />
-    <input type="radio" name="ntcpAutoIP" value="always" <%=nethelper.getTcpAutoIPChecked(3) %> />
+    <input type="radio" class="optbox" name="ntcpAutoIP" value="always" <%=nethelper.getTcpAutoIPChecked(3) %> />
     Always use auto-detected IP address (Not firewalled)<br />
-    <input type="radio" name="ntcpAutoIP" value="false" <%=nethelper.getTcpAutoIPChecked(1) %> />
+    <input type="radio" class="optbox" name="ntcpAutoIP" value="false" <%=nethelper.getTcpAutoIPChecked(1) %> />
     Specify hostname or IP:
     <input name ="ntcphost" type="text" size="16" value="<jsp:getProperty name="nethelper" property="ntcphostname" />" /><br />
-    <input type="radio" name="ntcpAutoIP" value="false" <%=nethelper.getTcpAutoIPChecked(0) %> />
+    <input type="radio" class="optbox" name="ntcpAutoIP" value="false" <%=nethelper.getTcpAutoIPChecked(0) %> />
     Disable inbound (Firewalled)<br />
-    <input type="radio" name="ntcpAutoIP" value="disabled" <%=nethelper.getTcpAutoIPChecked(4) %> />
+    <input type="radio" class="optbox" name="ntcpAutoIP" value="disabled" <%=nethelper.getTcpAutoIPChecked(4) %> />
     Completely disable <i>(select only if behind a firewall that throttles or blocks outbound TCP)</i><br />
  </p><p>
  Externally reachable TCP port:<br />
-    <input type="radio" name="ntcpAutoPort" value="2" <%=nethelper.getTcpAutoPortChecked(2) %> />
+    <input type="radio" class="optbox" name="ntcpAutoPort" value="2" <%=nethelper.getTcpAutoPortChecked(2) %> />
     Use the same port configured for UDP
     <i>(currently <jsp:getProperty name="nethelper" property="udpPort" />)</i><br />
-    <input type="radio" name="ntcpAutoPort" value="1" <%=nethelper.getTcpAutoPortChecked(1) %> />
+    <input type="radio" class="optbox" name="ntcpAutoPort" value="1" <%=nethelper.getTcpAutoPortChecked(1) %> />
     Specify Port:
     <input name ="ntcpport" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="ntcpport" />" /><br />
  </p><p><b>Note: Changing these settings will restart your router.</b>
- </p>
+ </p><hr><div class="formaction">
  <input type="submit" name="save" value="Save changes" /> <input type="reset" value="Cancel" />
 </div>
+</div>
 <h3><a name="chelp">Configuration Help:</a></h3>
  <div align="justify">
  <p>
@@ -248,7 +249,7 @@
  <hr />
       <!--
  <b>Dynamic Router Keys: </b>
- <input type="checkbox" name="dynamicKeys" value="true" <jsp:getProperty name="nethelper" property="dynamicKeysChecked" /> /><br />
+ <input type="checkbox" class="optbox" name="dynamicKeys" value="true" <jsp:getProperty name="nethelper" property="dynamicKeysChecked" /> /><br />
  <p>
  This setting causes your router identity to be regenerated every time your IP address
  changes. If you have a dynamic IP this option can speed up your reintegration into
diff --git a/apps/routerconsole/jsp/configadvanced.jsp b/apps/routerconsole/jsp/configadvanced.jsp
index c65d09d34acf5bf4eb89b101a46ffc645adf6a11..6fe8723dc5d55a43ee5bc71c132dcd8da577335e 100644
--- a/apps/routerconsole/jsp/configadvanced.jsp
+++ b/apps/routerconsole/jsp/configadvanced.jsp
@@ -16,12 +16,13 @@
 <div class="main" id="main">
 
  <%@include file="confignav.jsp" %>
- 
+
  <jsp:useBean class="net.i2p.router.web.ConfigAdvancedHandler" id="formhandler" scope="request" />
  <jsp:setProperty name="formhandler" property="*" />
  <jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
  <jsp:getProperty name="formhandler" property="allMessages" />
  <div class="configure">
+ <div class="wideload">
  <form action="configadvanced.jsp" method="POST">
  <% String prev = System.getProperty("net.i2p.router.web.ConfigAdvancedHandler.nonce");
     if (prev != null) System.setProperty("net.i2p.router.web.ConfigAdvancedHandler.noncePrev", prev);
@@ -30,15 +31,14 @@
  <input type="hidden" name="action" value="blah" />
  <h3>Advanced I2P Configuration</h3>
  <textarea rows="32" cols="60" name="config" wrap="off"><jsp:getProperty name="advancedhelper" property="settings" /></textarea><br /><hr>
-      <p align="right"> 
+      <div class="formaction"> 
         <input type="submit" name="shouldsave" value="Apply" />
-        <input type="reset" value="Cancel" />
-      </p>
-      <p>
- NOTE: Some changes may require a restart to take effect.
-</p>
+        <input type="reset" value="Cancel" /><br />
+ <b>NOTE:</b> Some changes may require a restart to take effect.
+      </div>
  </form>
 </div>
 </div>
+</div>
 </body>
 </html>
diff --git a/apps/routerconsole/jsp/configclients.jsp b/apps/routerconsole/jsp/configclients.jsp
index 256418108b255121cdf80e6a21bde64c8359c64d..8921987f41e10b3dfa052a4397d2d42b1df7f0b8 100644
--- a/apps/routerconsole/jsp/configclients.jsp
+++ b/apps/routerconsole/jsp/configclients.jsp
@@ -35,14 +35,13 @@ button span.hide{
  <h3>Client Configuration</h3>
  <p>
  The Java clients listed below are started by the router and run in the same JVM.
- </p><p>
+ </p><p> <div class="wideload">
  <jsp:getProperty name="clientshelper" property="form1" />
  </p><p>
  <i>All changes require restart to take effect. To change other client options, edit the clients.config file.</i>
- </p> <hr /><p>
+ </p> <hr /><div class="formaction">
  <input type="submit" name="action" value="Save Client Configuration" />
- </p>
-<hr />
+</div></div>
  <h3>WebApp Configuration</h3>
  <p>
  The Java web applications listed below are started by the webConsole client and run in the same JVM as the router.
@@ -54,15 +53,18 @@ button span.hide{
  A web app may also be disabled by removing the .war file from the webapps directory;
  however the .war file and web app will reappear when you update your router to a newer version,
  so disabling the web app here is the preferred method.
- </p><p>
+ </p><p><div class="wideload">
  <jsp:getProperty name="clientshelper" property="form2" />
- </p><p><hr>
- <input type="submit" name="action" value="Save WebApp Configuration" />
- </p><hr><p>
+ </p>
+ <p>
  <i>All changes require restart to take effect. To change other webapp options, edit the webapps.config file.</i>
  </p>
+ <hr><div class="formaction">
+ <input type="submit" name="action" value="Save WebApp Configuration" />
+ </div>
  </form>
 </div>
 </div>
+</div>
 </body>
 </html>
diff --git a/apps/routerconsole/jsp/configkeyring.jsp b/apps/routerconsole/jsp/configkeyring.jsp
index 2c2394e769e8114c32a036478697a173a257a387..7e58f4a15630f1a0087e1cd00a9ca179284ed3c3 100644
--- a/apps/routerconsole/jsp/configkeyring.jsp
+++ b/apps/routerconsole/jsp/configkeyring.jsp
@@ -11,7 +11,7 @@
 <h1>I2P Keyring Configuration</h1>
 <div class="main" id="main">
  <%@include file="confignav.jsp" %>
-  
+
  <jsp:useBean class="net.i2p.router.web.ConfigKeyringHandler" id="formhandler" scope="request" />
  <jsp:setProperty name="formhandler" property="*" />
  <jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
@@ -26,8 +26,9 @@
  <h3>Keyring</h3>
  The router keyring is used to decrypt encrypted leaseSets.
  The keyring may contain keys for local or remote encrypted destinations.
- <p><jsp:getProperty name="keyringhelper" property="summary" />
- </p>
+ <div class="wideload"><p> 
+ <jsp:getProperty name="keyringhelper" property="summary" />
+</p></div>
 
  <hr />
 
@@ -40,22 +41,22 @@
  Enter keys for encrypted remote destinations here.
  Keys for local destinations must be entered on the <a href="i2ptunnel/index.jsp">I2PTunnel page</a>.
  <p>
+  <div class="wideload"> 
       <table>
         <tr>
-          <td>Dest. name, hash, or full key: 
-          <td><textarea name="peer" cols="44" rows="1" style="height: 3em;" wrap="off"></textarea> 
+          <td class="mediumtags" align="right">Dest. name, hash, or full key:</td> 
+          <td><textarea name="peer" cols="44" rows="1" style="height: 3em;" wrap="off"></textarea></td> 
         <tr>
-          <td align="right">Session Key: 
-          <td><input type="text" size="55" name="key" /> 
+          <td class="mediumtags" align="right">Session Key:</td> 
+          <td><input type="text" size="55" name="key" /></td> 
         <tr>
           <td>
-          <td><div align="right"> 
-              <input type="submit" name="action" value="Add key" />
-            </div>
+          <td align="right"> 
+            <input type="submit" name="action" value="Add key" /></td>
       </table>
  </form>
 
-
+</div>
 </div>
 </div>
 </body>
diff --git a/apps/routerconsole/jsp/configlogging.jsp b/apps/routerconsole/jsp/configlogging.jsp
index 8d655b8e9b01c0790a11db5a2d3d654674223104..432acdfb87cf662e535cf4d7c6ca9e9a3c2e0209 100644
--- a/apps/routerconsole/jsp/configlogging.jsp
+++ b/apps/routerconsole/jsp/configlogging.jsp
@@ -13,7 +13,7 @@
 <h1>I2P Logging Configuration</h1>
 <div class="main" id="main">
  <%@include file="confignav.jsp" %>
- 
+
  <jsp:useBean class="net.i2p.router.web.ConfigLoggingHandler" id="formhandler" scope="request" />
  <jsp:setProperty name="formhandler" property="*" />
  <jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
@@ -26,34 +26,35 @@
  <input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigLoggingHandler.nonce")%>" />
  <input type="hidden" name="action" value="blah" />
  <h3>Configure I2P Logging Options</h3>
+ <div class="wideload">
       <table border="0" cellspacing="5">
         <tr> 
-          <td valign="top"><b>Logging filename:</b> 
+          <td class="mediumtags" align="right"><b>Logging filename:</b> 
           <td><input type="text" name="logfilename" size="40" value="<jsp:getProperty name="logginghelper" property="logFilePattern" />" /> 
             <br /> <i>(the symbol '@' will be replaced during log rotation)</i> 
         <tr> 
-          <td valign="top"><b>Log record format:</b> 
+          <td class="mediumtags" align="right"><b>Log record format:</b> 
           <td><input type="text" name="logformat" size="20" value="<jsp:getProperty name="logginghelper" property="recordPattern" />" /> 
             <br /> <i>(use 'd' = date, 'c' = class, 't' = thread, 'p' = priority, 
             'm' = message)</i> 
         <tr> 
-          <td valign="top"><b>Log date format:</b> 
+          <td class="mediumtags" align="right"><b>Log date format:</b> 
           <td><input type="text" name="logdateformat" size="20" value="<jsp:getProperty name="logginghelper" property="datePattern" />" /> 
             <br /> <i>('MM' = month, 'dd' = day, 'HH' = hour, 'mm' = minute, 'ss' 
             = second, 'SSS' = millisecond)</i> 
         <tr> 
-          <td valign="top"><b>Max log file size:</b> 
+          <td class="mediumtags" align="right"><b>Max log file size:</b> 
           <td><input type="text" name="logfilesize" size="4" value="<jsp:getProperty name="logginghelper" property="maxFileSize" />" /> 
             <br /> 
         <tr> 
-          <td valign="top"><b>Default log level:</b> 
+          <td class="mediumtags" align="right"><b>Default log level:</b> 
           <td><jsp:getProperty name="logginghelper" property="defaultLogLevelBox" /> <br /> <i>(DEBUG and INFO are not recommended defaults, 
             as they will drastically slow down your router)</i> 
         <tr> 
-          <td valign="top"><b>Log level overrides:</b> 
+          <td class="mediumtags" align="right"><b>Log level overrides:</b> 
           <td><jsp:getProperty name="logginghelper" property="logLevelTable" /> 
         <tr> 
-          <td colspan="2" valign="top"><hr> 
+          <td colspan="2"><hr> 
         <tr> 
           <td>
           <td> <div align="right"> 
@@ -64,5 +65,6 @@
  </form>
 </div>
 </div>
+</div>
 </body>
 </html>
diff --git a/apps/routerconsole/jsp/configpeer.jsp b/apps/routerconsole/jsp/configpeer.jsp
index f164628079dbf8b0917721cbd0594eb9369a23ba..debe2676b8cf4f1e4223a2dfe2a3cbc4f4bf65c2 100644
--- a/apps/routerconsole/jsp/configpeer.jsp
+++ b/apps/routerconsole/jsp/configpeer.jsp
@@ -37,18 +37,19 @@
  <a name="unsh"> </a>
  <a name="bonus"> </a>
  <h2>Manual Peer Controls</h2>
- Router Hash:
- <input type="text" size="55" name="peer" value="<%=peer%>" />
+ <div class="mediumtags">Router Hash:
+ <input type="text" size="55" name="peer" value="<%=peer%>" /></div>
  <h3>Manually Shitlist / Unshitlist a Router</h3>
  Shitlisting will prevent the participation of this peer in tunnels you create. 
-      <p> 
+      <hr />      
+      <div class="formaction"> 
         <input type="submit" name="action" value="Shitlist peer until restart" />
         <input type="submit" name="action" value="Unshitlist peer" />
         <% if (! "".equals(peer)) { %>
-        <font color="blue">&lt;---- click to verify action</font> 
+        <!-- <font color="blue">&lt;---- click to verify action</font> -->
         <% } %>
-      </p>
-      <hr />
+      </div>
+
  <h3>Adjust Profile Bonuses</h3>
  Bonuses may be positive or negative, and affect the peer's inclusion in Fast 
       and High Capacity tiers. Fast peers are used for client tunnels, and High 
@@ -59,24 +60,24 @@
     if (! "".equals(peer)) {
         // get existing bonus values?
     }
- %>
- Speed:
+ %> 
+ <hr />
+ <div class="mediumtags">Speed:
  <input type="text" size="8" name="speed" value="<%=speed%>" />
  Capacity:
  <input type="text" size="8" name="capacity" value="<%=capacity%>" />
- <input type="submit" name="action" value="Adjust peer bonuses" />
+ <input type="submit" name="action" value="Adjust peer bonuses" /></div>
  </p>
  </form>
-
- <hr />
  <a name="shitlist"> </a>
  <jsp:useBean class="net.i2p.router.web.ProfilesHelper" id="profilesHelper" scope="request" />
  <jsp:setProperty name="profilesHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
  <jsp:getProperty name="profilesHelper" property="shitlistSummary" />
  <hr />
+ <div class="wideload">
  <jsp:getProperty name="peerhelper" property="blocklistSummary" />
 
-
+</div>
 </div>
 </div>
 </body>
diff --git a/apps/routerconsole/jsp/configservice.jsp b/apps/routerconsole/jsp/configservice.jsp
index 8ca0087c70e5e61cd3e07773f302485e5bcdff80..942aedf0d0fe872b50fb278a012d6c0da53b6279 100644
--- a/apps/routerconsole/jsp/configservice.jsp
+++ b/apps/routerconsole/jsp/configservice.jsp
@@ -26,11 +26,11 @@
  <p>Graceful shutdown lets the router satisfy the agreements it has already made 
  before shutting down, but may take a few minutes.  If you need to kill the
  router immediately, that option is available as well.</p>
- 
+  <hr><div class="formaction">
  <input type="submit" name="action" value="Shutdown gracefully" />
  <input type="submit" name="action" value="Shutdown immediately" />
  <input type="submit" name="action" value="Cancel graceful shutdown" />
- <hr>
+ </div>
  <% if (System.getProperty("wrapper.version") != null) { %>
  <p>If you want the router to restart itself after shutting down, you can choose one of 
  the following.  This is useful in some situations - for example, if you changed
@@ -38,30 +38,32 @@
  or the interface it listens on.  A graceful restart will take a few minutes (but your peers
  will appreciate your patience), while a hard restart does so immediately.  After tearing down
  the router, it will wait 1 minute before starting back up again.</p>
- 
+ <hr><div class="formaction">
  <input type="submit" name="action" value="Graceful restart" />
  <input type="submit" name="action" value="Hard restart" />
- <% } %>
- <hr>
+ <% } %></div>
+
  <% if ( (System.getProperty("os.name") != null) && (System.getProperty("os.name").startsWith("Win")) ) { %>
  <h3>Systray integration</h3>
  <p>On the windows platform, there is a small application to sit in the system 
  tray, allowing you to view the router's status (later on, I2P client applications
  will be able to integrate their own functionality into the system tray as well).
  If you are on windows, you can either enable or disable that icon here.</p>
+ <hr><div class="formaction">
  <input type="submit" name="action" value="Show systray icon" />
  <input type="submit" name="action" value="Hide systray icon" />
- <hr>
+</div>
  <h3>Run on startup</h3>
  <p>You can control whether I2P is run on startup or not by selecting one of the 
  following options - I2P will install (or remove) a service accordingly.  You can
  also run the <code>install_i2p_service_winnt.bat</code> (or 
  <code>uninstall_i2p_service_winnt.bat</code>) from the command line, if you prefer.</p>
+ <hr><div class="formaction">
  <input type="submit" name="action" value="Run I2P on startup" />
- <input type="submit" name="action" value="Don't run I2P on startup" /><br />
+<input type="submit" name="action" value="Don't run I2P on startup" /></div>
  <p><b>Note:</b> If you are running I2P as service right now, removing it will shut 
  down your router immediately.  You may want to consider shutting down gracefully, as
- above, then running uninstall_i2p_service_winnt.bat.</p><hr>
+ above, then running uninstall_i2p_service_winnt.bat.</p>
  <% } %>
 
  <% if (System.getProperty("wrapper.version") != null) { %>
@@ -69,17 +71,19 @@
  <p>At times, it may be helpful to debug I2P by getting a thread dump.  To do so, 
  please select the following option and review the thread dumped to 
  <a href="logs.jsp#servicelogs">wrapper.log</a>.</p>
+  <hr><div class="formaction">
  <input type="submit" name="action" value="Dump threads" />
- <% } %><hr>
+<% } %></div>
  
  <h3>Launch browser on router startup?</h3>
  <p>I2P's main configuration interface is this web console, so for your convenience
  I2P can launch a web browser pointing at 
  <a href="http://127.0.0.1:7657/index.jsp">http://127.0.0.1:7657/index.jsp</a> whenever
  the router starts up.</p>
+ <hr><div class="formaction">
  <input type="submit" name="action" value="View console on startup" />
  <input type="submit" name="action" value="Do not view console on startup" />
- </form><hr>
+</form></div>
 </div>
 </div>
 </body>
diff --git a/apps/routerconsole/jsp/configstats.jsp b/apps/routerconsole/jsp/configstats.jsp
index 9e59efe605a4831fdafa86ab42782dc99b9a9608..9a2435ec4f313fdfa2a66dc48828fc635b591e83 100644
--- a/apps/routerconsole/jsp/configstats.jsp
+++ b/apps/routerconsole/jsp/configstats.jsp
@@ -56,7 +56,7 @@ function toggleAll(category)
 <h1>I2P Stats Configuration</h1>
 <div class="main" id="main">
  <%@include file="confignav.jsp" %>
- 
+
  <jsp:useBean class="net.i2p.router.web.ConfigStatsHandler" id="formhandler" scope="request" />
  <jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
  <jsp:setProperty name="formhandler" property="*" />
@@ -73,39 +73,39 @@ function toggleAll(category)
  <input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigStatsHandler.nonce")%>" />
  <h3>Configure I2P Stat Collection</h3>
  Enable full stats?
- <input type="checkbox" name="isFull" value="true" <% 
+ <input type="checkbox" class="optbox" name="isFull" value="true" <% 
  if (statshelper.getIsFull()) { %>checked="true" <% } %>/>
  (change requires restart to take effect)<br />
  Stat file: <input type="text" name="filename" value="<%=statshelper.getFilename()%>" /><br />
  Filter: (<a href="javascript: void(null);" onclick="toggleAll('*')">toggle all</a>)<hr />
+ <div class="wideload">
  <table>
  <% while (statshelper.hasMoreStats()) {
       while (statshelper.groupRequired()) { %>
- <tr><td valign="top" align="left" colspan="3">
+ <tr class="tablefooter"><td align="left" colspan="3">
      <b><%=statshelper.getCurrentGroupName()%></b>
      (<a href="javascript: void(null);" onclick="toggleAll('<%=statshelper.getCurrentGroupName()%>')">toggle all</a>)
-     </td></tr><tr><td>Log</td><td>Graph</td><td></td></tr><%
+     </td></tr><tr class="tablefooter"><td align="center"><b>Log</b></td><td align="center"><b>Graph</b></td><td></td></tr><%
      } // end iterating over required groups for the current stat %>
- <tr><td valign="top" align="left">
+ <tr><td align="center">
      <a name="<%=statshelper.getCurrentStatName()%>"></a>
-     <input id="<%=statshelper.getCurrentGroupName()%>" type="checkbox" name="statList" value="<%=statshelper.getCurrentStatName()%>" <% 
+     <input id="<%=statshelper.getCurrentGroupName()%>" type="checkbox" class="optbox" name="statList" value="<%=statshelper.getCurrentStatName()%>" <% 
      if (statshelper.getCurrentIsLogged()) { %>checked="true" <% } %>/></td>
-     <td valign="top" align="left">
+     <td align="center">
      <% if (statshelper.getCurrentCanBeGraphed()) { %>
-       <input id="<%=statshelper.getCurrentGroupName()%>" type="checkbox" name="graphList" value="<%=statshelper.getCurrentGraphName()%>" <% 
+       <input id="<%=statshelper.getCurrentGroupName()%>" type="checkbox" class="optbox" name="graphList" value="<%=statshelper.getCurrentGraphName()%>" <% 
        if (statshelper.getCurrentIsGraphed()) { %>checked="true" <% } %>/><% } %></td>
-     <td valign="top" align="left"><b><%=statshelper.getCurrentStatName()%>:</b><br />
+     <td align="left"><b><%=statshelper.getCurrentStatName()%>:</b><br />
      <%=statshelper.getCurrentStatDescription()%></td></tr><%
     } // end iterating over all stats %>
- <tr><td colspan="3"><hr /></td></tr>
- <tr><td><input type="checkbox" name="explicitFilter" /></td>
+ <tr><td colspan="3"></td></tr>
+ <tr><td align="center"><input type="checkbox" class="optbox" name="explicitFilter" /></td>
      <td colspan="2">Advanced filter: 
      <input type="text" name="explicitFilterValue" value="<%=statshelper.getExplicitFilter()%>" size="40" /></td></tr>
- <tr><td colspan="3"><hr /></td></tr>
- <tr><td><input type="submit" name="shouldsave" value="Save changes" /> </td>
-     <td><input type="reset" value="Cancel" /></td><td></td></tr></form>
+     <tr class="tablefooter"><td colspan="3" align="right"><input type="submit" name="shouldsave" value="Save changes" /><input type="reset" value="Cancel" /></td></tr></form>
  </table>
 </div>
 </div>
+</div>
 </body>
 </html>
diff --git a/apps/routerconsole/jsp/configtunnels.jsp b/apps/routerconsole/jsp/configtunnels.jsp
index f7c4911ba3530c94ee370cdf859ad4c276675507..f6ccb44d7731326551acb94462e72a68f4d4f11c 100644
--- a/apps/routerconsole/jsp/configtunnels.jsp
+++ b/apps/routerconsole/jsp/configtunnels.jsp
@@ -14,7 +14,6 @@
 <h1>I2P Tunnel Configuration</h1>
 <div class="main" id="main">
  <%@include file="confignav.jsp" %>
-  
  <jsp:useBean class="net.i2p.router.web.ConfigTunnelsHandler" id="formhandler" scope="request" />
  <jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
  <jsp:setProperty name="formhandler" property="shouldsave" value="<%=request.getParameter("shouldsave")%>" />
@@ -31,7 +30,7 @@
  High CPU and/or high outbound bandwidth usage may result.
  Change these settings with care, and adjust them if you have problems.
  </i></p>
-
+ <div class="wideload"> 
  <form action="configtunnels.jsp" method="POST">
  <% String prev = System.getProperty("net.i2p.router.web.ConfigTunnelsHandler.nonce");
     if (prev != null) System.setProperty("net.i2p.router.web.ConfigTunnelsHandler.noncePrev", prev);
@@ -42,9 +41,10 @@
  <i>Note - Exploratory tunnel setting changes are stored in the router.config file.</i></br>
  <i>Client tunnel changes are temporary and are not saved.</i><br>
  <i>To make permanent client tunnel changes see the </i><a href="i2ptunnel/index.jsp">i2ptunnel page</a>.<br>
- <hr /> <input type="submit" name="shouldsave" value="Save changes" /> <input type="reset" value="Cancel" />
+ <hr /><div class="formaction"><input type="submit" name="shouldsave" value="Save changes" /> <input type="reset" value="Cancel" /></div>
  </form>
 </div>
 </div>
+</div>
 </body>
 </html>
diff --git a/apps/routerconsole/jsp/configui.jsp b/apps/routerconsole/jsp/configui.jsp
index 3835db33b7d8fa16312fa780f475aec279e9a987..f918bd5b5940470a0a3b709dedf7d310a41d6202 100644
--- a/apps/routerconsole/jsp/configui.jsp
+++ b/apps/routerconsole/jsp/configui.jsp
@@ -34,9 +34,9 @@
  <input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigUIHandler.nonce")%>" />
  <input type="hidden" name="action" value="blah" />
  <jsp:getProperty name="uihelper" property="settings" />
-<hr> 	
+<hr><div class="formaction"> 	
 <input type="submit" name="shouldsave" value="Apply" /> <input type="reset" value="Cancel" />
-</form>
+</form></div>
 <% } else { %>
 Theme selection disabled for Internet Explorer, sorry.<hr>If you're not using IE, it's likely that 
 your browser is pretending to be IE; please configure your browser (or proxy) to use a different User Agent string if you'd like to access the console themes.
diff --git a/apps/routerconsole/jsp/configupdate.jsp b/apps/routerconsole/jsp/configupdate.jsp
index a8cfa33cd10b56be8ca254d9eaae51ba1190ce27..d82600da29304f2e9a1a8a06e6478cdaccb38e42 100644
--- a/apps/routerconsole/jsp/configupdate.jsp
+++ b/apps/routerconsole/jsp/configupdate.jsp
@@ -28,52 +28,49 @@
     System.setProperty("net.i2p.router.web.ConfigUpdateHandler.nonce", new java.util.Random().nextLong()+""); %>
  <input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigUpdateHandler.nonce")%>" />
       <h3>Check for I2P and news updates</h3>
-      <table border="0" cellspacing="5">
+      <div class="wideload"><table border="0" cellspacing="5">
         <tr>
           <td colspan="2"></tr>
         <tr>
-          <td><b>News:</b></td>
+          <td class= "mediumtags" align="right"><b>News:</b></td>
           <td> <% if ("true".equals(System.getProperty("net.i2p.router.web.UpdateHandler.updateInProgress", "false"))) { %> <i>Update In Progress</i><br /> <% } else { %> <input type="submit" name="action" value="Check for update now" /> 
             <% } %></tr>
         <tr>
           <td colspan="2"><hr /></td>
         </tr>
         <tr>
-          <td><b>News URL:</b></td>
+          <td class= "mediumtags" align="right"><b>News URL:</b></td>
           <td><input type="text" size="60" name="newsURL" value="<jsp:getProperty name="updatehelper" property="newsURL" />"></td>
         </tr>
         <tr>
-          <td><b>Refresh frequency:</b> 
+          <td class= "mediumtags" align="right"><b>Refresh frequency:</b> 
           <td><jsp:getProperty name="updatehelper" property="refreshFrequencySelectBox" /> 
         <tr>
-          <td><b>Update policy:</b> 
+          <td class= "mediumtags" align="right"><b>Update policy:</b> 
           <td><jsp:getProperty name="updatehelper" property="updatePolicySelectBox" /> 
         <tr>
-          <td><b>Update through the eepProxy?</b> 
+          <td class= "mediumtags" align="right"><b>Update through the eepProxy?</b> 
           <td><jsp:getProperty name="updatehelper" property="updateThroughProxy" /> 
         <tr>
-          <td><b>eepProxy host:</b> 
+          <td class= "mediumtags" align="right"><b>eepProxy host:</b> 
           <td><input type="text" size="10" name="proxyHost" value="<jsp:getProperty name="updatehelper" property="proxyHost" />" /> 
         <tr>
-          <td><b>eepProxy port:</b> 
+          <td class= "mediumtags" align="right"><b>eepProxy port:</b> 
           <td><input type="text" size="4" name="proxyPort" value="<jsp:getProperty name="updatehelper" property="proxyPort" />" /> 
         <tr>
-          <td><b>Update URLs:</b> 
+          <td class= "mediumtags" align="right"><b>Update URLs:</b> 
           <td><textarea name="updateURL" wrap="off"><jsp:getProperty name="updatehelper" property="updateURL" /></textarea> 
         <tr>
-          <td><b>Trusted keys:</b> 
+          <td class= "mediumtags" align="right"><b>Trusted keys:</b> 
           <td><textarea name="trustedKeys" wrap="off"><jsp:getProperty name="updatehelper" property="trustedKeys" /></textarea> 
-        <tr>
-        <tr>
-          <td colspan="2"><hr />
-        <tr> 
         <tr>
           <td>
-          <td><div align="right"> 
+          <td><div class="formaction"> 
               <input type="submit" name="action" value="Save" />
               <input type="reset" value="Cancel" />
             </div>
       </table>
+    </div>
  </form>
 </div>
 </div>
diff --git a/apps/routerconsole/jsp/css.jsp b/apps/routerconsole/jsp/css.jsp
index 60db0683502fde79a72f1a69da4784af8525234c..37b649780b4a1b394463f06ec7dbe85d345f0655 100644
--- a/apps/routerconsole/jsp/css.jsp
+++ b/apps/routerconsole/jsp/css.jsp
@@ -18,3 +18,4 @@
 <jsp:useBean class="net.i2p.router.web.CSSHelper" id="cssHelper" scope="request" />
 <jsp:setProperty name="cssHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
 <link href="<%=cssHelper.getTheme(request.getHeader("User-Agent"))%>console.css" rel="stylesheet" type="text/css" /> 
+<!--[if IE]><link href="/themes/console/classic/ieshim.css" rel="stylesheet" type="text/css" /><![endif]--> 
\ No newline at end of file
diff --git a/apps/routerconsole/jsp/graphs.jsp b/apps/routerconsole/jsp/graphs.jsp
index 64277f0d00ffc405b472d989e2a7211f95d04894..34ee723b76cc7df4719f7fc4403daabd8afb22d8 100644
--- a/apps/routerconsole/jsp/graphs.jsp
+++ b/apps/routerconsole/jsp/graphs.jsp
@@ -11,6 +11,7 @@
 <h1>I2P Performance Graphs</h1>
 <div class="main" id="main">
  <div class="graphspanel">
+ <div class="widepanel">	
  <jsp:useBean class="net.i2p.router.web.GraphHelper" id="graphHelper" scope="request" />
  <jsp:setProperty name="graphHelper" property="*" />
  <jsp:setProperty name="graphHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
@@ -18,5 +19,6 @@
  <jsp:getProperty name="graphHelper" property="images" />
  <jsp:getProperty name="graphHelper" property="form" />
 </div>
+</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/apps/routerconsole/jsp/netdb.jsp b/apps/routerconsole/jsp/netdb.jsp
index d3c70811ccd31f10a7bdc1f75cff718cddb61bff..cac11bf054c5c09d49266977b51e8bd9c11f0840 100644
--- a/apps/routerconsole/jsp/netdb.jsp
+++ b/apps/routerconsole/jsp/netdb.jsp
@@ -10,6 +10,7 @@
 <%@include file="summary.jsp" %>
  <h1>I2P Network Database Summary</h1>
 <div class="main" id="main">
+ <div class="wideload">
  <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%>" />
@@ -18,6 +19,6 @@
  <jsp:setProperty name="netdbHelper" property="lease" value="<%=request.getParameter("l")%>" />
  <jsp:getProperty name="netdbHelper" property="netDbSummary" />
 </div>
-
+</div>
 </body>
 </html>
diff --git a/apps/routerconsole/jsp/profiles.jsp b/apps/routerconsole/jsp/profiles.jsp
index c9e673c79ad5acadf15c71ab9b2f25a8888aa9a2..11529cf55118491ddd8bb022da96423f1e4fabe4 100644
--- a/apps/routerconsole/jsp/profiles.jsp
+++ b/apps/routerconsole/jsp/profiles.jsp
@@ -9,7 +9,7 @@
 
 <%@include file="summary.jsp" %>
  <h1>I2P Network Peer Profiles</h1>
-<div class="main" id="main">
+<div class="main" id="main"><div class="wideload">
  <jsp:useBean class="net.i2p.router.web.ProfilesHelper" id="profilesHelper" scope="request" />
  <jsp:setProperty name="profilesHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
  <jsp:getProperty name="profilesHelper" property="profileSummary" />
@@ -17,6 +17,6 @@
  <a name="shitlist"> </a>
  <jsp:getProperty name="profilesHelper" property="shitlistSummary" />
 </div>
-
+</div>
 </body>
 </html>
diff --git a/apps/routerconsole/jsp/summaryframe.jsp b/apps/routerconsole/jsp/summaryframe.jsp
index 9532602fa4e78701bb67b736378f0d828dc0d146..d19ea127945b720eac1c731a38754220efc0f833 100644
--- a/apps/routerconsole/jsp/summaryframe.jsp
+++ b/apps/routerconsole/jsp/summaryframe.jsp
@@ -62,7 +62,7 @@
     if (!shutdownSoon) {
         out.print("<hr /><p><form action=\"summaryframe.jsp\" method=\"GET\">\n");
         if ("0".equals(d)) {
-            out.print("<b>Refresh (s):<b> <input size=\"3\" type=\"text\" name=\"refresh\" value=\"60\" />\n");
+            out.print("<b>Refresh (s):<b> <input size=\"3\" type=\"text\" name=\"refresh\" value=\"60\" align=\"right\" />\n");
             out.print("<button type=\"submit\">Enable</button>\n");
         } else {
             // this will load in the iframe but subsequent pages will not have the iframe
diff --git a/apps/routerconsole/jsp/summarynoframe.jsp b/apps/routerconsole/jsp/summarynoframe.jsp
index 2a6252cc404dfb8a4d2dd81a3e6346f9f17b6ec1..1713a63364778afff5e85c568ec620379d4f672b 100644
--- a/apps/routerconsole/jsp/summarynoframe.jsp
+++ b/apps/routerconsole/jsp/summarynoframe.jsp
@@ -26,9 +26,9 @@
 <jsp:getProperty name="linkhelper" property="content" />
 <% } else { %>
 <u><b>I2P Services</b></u><br />
-<a href="susimail/susimail" target="blank">Susimail</a> 
-<a href="susidns/index.jsp" target="_blank">SusiDNS</a> 
-<a href="i2psnark/" target="_blank">Torrents</a> 
+<a href="susidns/index.jsp" target="_blank">Addressbook</a> 
+<a href="i2psnark/" target="_blank">Torrents</a>
+<a href="susimail/susimail" target="blank">Webmail</a>  
 <a href="http://127.0.0.1:7658/" target="_blank">Webserver</a><hr /> 
 <u><b>I2P Internals</b></u><br />
 <a href="i2ptunnel/index.jsp" target="_blank">I2PTunnel</a> 
diff --git a/apps/susimail/src/src/i2p/susi/webmail/WebMail.java b/apps/susimail/src/src/i2p/susi/webmail/WebMail.java
index 12d48e7344541ab9d07b714ce9d5853f584b2080..e871dfe817228e133c49af9ddcc350bac9252ee5 100644
--- a/apps/susimail/src/src/i2p/susi/webmail/WebMail.java
+++ b/apps/susimail/src/src/i2p/susi/webmail/WebMail.java
@@ -1545,7 +1545,7 @@ public class WebMail extends HttpServlet
 				"<tr><td align=\"right\">Cc:</td><td align=\"left\"><input type=\"text\" size=\"80\" name=\"" + NEW_CC + "\" value=\"" + cc + "\"></td></tr>\n" +
 				"<tr><td align=\"right\">Bcc:</td><td align=\"left\"><input type=\"text\" size=\"80\" name=\"" + NEW_BCC + "\" value=\"" + bcc + "\"></td></tr>\n" +
 				"<tr><td align=\"right\">Subject:</td><td align=\"left\"><input type=\"text\" size=\"80\" name=\"" + NEW_SUBJECT + "\" value=\"" + subject + "\"></td></tr>\n" +
-				"<tr><td>&nbsp;</td><td align=\"left\"><input type=\"checkbox\" name=\"" + NEW_BCC_TO_SELF + "\" value=\"1\"" + ( bccToSelf.compareToIgnoreCase( "false" ) != 0 ? "checked" : "" )+ ">Bcc to self</td></tr>\n" +
+				"<tr><td>&nbsp;</td><td align=\"left\"><input type=\"checkbox\" class=\"optbox\" name=\"" + NEW_BCC_TO_SELF + "\" value=\"1\"" + ( bccToSelf.compareToIgnoreCase( "false" ) != 0 ? "checked" : "" )+ ">Bcc to self</td></tr>\n" +
 				"<tr><td colspan=\"2\" align=\"center\"><textarea cols=\"" + Config.getProperty( CONFIG_COMPOSER_COLS, 80 )+ "\" rows=\"" + Config.getProperty( CONFIG_COMPOSER_ROWS, 10 )+ "\" name=\"" + NEW_TEXT + "\">" + text + "</textarea>" +
 				"<tr><td colspan=\"2\" align=\"center\"><hr></td></tr>\n" +
 				"<tr><td align=\"right\">New Attachment:</td><td align=\"left\"><input type=\"file\" size=\"50%\" name=\"" + NEW_FILENAME + "\" value=\"\"><input type=\"submit\" name=\"" + NEW_UPLOAD + "\" value=\"Upload File\"></td></tr>" );
@@ -1558,7 +1558,7 @@ public class WebMail extends HttpServlet
 					wroteHeader = true;
 				}
 				Attachment attachment = (Attachment)it.next();
-				out.println( "<tr><td colspan=\"2\" align=\"center\"><input type=\"checkbox\" name=\"check" + attachment.hashCode() + "\" value=\"1\">&nbsp;" + attachment.getFileName() + "</td></tr>");
+				out.println( "<tr><td colspan=\"2\" align=\"center\"><input type=\"checkbox\" class=\"optbox\" name=\"check" + attachment.hashCode() + "\" value=\"1\">&nbsp;" + attachment.getFileName() + "</td></tr>");
 			}
 		}
 		out.println( "</table>" );
@@ -1632,7 +1632,7 @@ public class WebMail extends HttpServlet
 					", markAll=" + sessionObject.markAll +
 					", invert=" + sessionObject.invert +
 					", clear=" + sessionObject.clear );
-			out.println( "<tr class=\"list" + bg + "\"><td><input type=\"checkbox\" name=\"check" + i + "\" value=\"1\"" + 
+			out.println( "<tr class=\"list" + bg + "\"><td><input type=\"checkbox\" class=\"optbox\" name=\"check" + i + "\" value=\"1\"" + 
 					( idChecked ? "checked" : "" ) + ">" + ( RELEASE ? "" : "" + i ) + "</td><td>" + link + mail.shortSender + "</a></td><td>&nbsp;</td><td>" + link + mail.shortSubject + "</a></td><td>&nbsp;</td><td>" + mail.formattedDate + "</a></td><td>&nbsp;</td><td>" + mail.size + " Bytes</a></td></tr>" );
 			bg = 1 - bg;
 			i++;
diff --git a/core/java/src/net/i2p/crypto/TransientSessionKeyManager.java b/core/java/src/net/i2p/crypto/TransientSessionKeyManager.java
index f9661240b9414a04b1442b10b2d3782a5d35a7e3..15c1491685b241c7964bd198f1e5402358cb7a03 100644
--- a/core/java/src/net/i2p/crypto/TransientSessionKeyManager.java
+++ b/core/java/src/net/i2p/crypto/TransientSessionKeyManager.java
@@ -502,7 +502,7 @@ public class TransientSessionKeyManager extends SessionKeyManager {
     public String renderStatusHTML() {
         StringBuilder buf = new StringBuilder(1024);
         buf.append("<h2>Inbound sessions</h2>");
-        buf.append("<table border=\"1\">");
+        buf.append("<table>");
         Set<TagSet> inbound = getInboundTagSets();
         Map<SessionKey, Set<TagSet>> inboundSets = new HashMap(inbound.size());
         for (Iterator<TagSet> iter = inbound.iterator(); iter.hasNext();) {
@@ -528,7 +528,7 @@ public class TransientSessionKeyManager extends SessionKeyManager {
 
         buf.append("<h2><b>Outbound sessions</b></h2>");
 
-        buf.append("<table border=\"1\">");
+        buf.append("<table>");
         Set<OutboundSession> outbound = getOutboundSessions();
         for (Iterator<OutboundSession> iter = outbound.iterator(); iter.hasNext();) {
             OutboundSession sess = iter.next();
diff --git a/history.txt b/history.txt
index 10ce5688d4e86af6b3a393eedb06fd56fc9bca1f..890f0cd808230dd065875bc29d8086602fd9b249 100644
--- a/history.txt
+++ b/history.txt
@@ -1,3 +1,18 @@
+2009-08-03 dr|z3d
+    * Extensive update to the Classic theme; custom css hacks for IE.
+
+2009-08-02 dr|z3d
+    * Better support for Internet Explorer/classic theme.
+    * Incremental improvements to classic theme.
+    * More UI tweaks and fiddles. 
+    * Fixes for I2PSnark UI; more to come.
+    
+2009-07-31 dr|z3d
+    * Resolve anomalous buttons and text fields in console ui. 
+    * Enhance presentation of data in /peers.jsp.
+    * Fix themes issue with horizontal width of radio/checkbox icons.
+    * Other cosmetic UI enhancements.
+
 * 2009-07-31  0.7.6 released
 
 2009-07-31 zzz
diff --git a/installer/resources/themes/console/classic/console.css b/installer/resources/themes/console/classic/console.css
index 5cd5ceb8508bea36eb2d2db7b24917ef99eb7814..3231ef874ea781cc9e787d733ff5b5cc5c8f0c49 100644
--- a/installer/resources/themes/console/classic/console.css
+++ b/installer/resources/themes/console/classic/console.css
@@ -1,10 +1,15 @@
+/* Optimised for less capable browers and system specifications */
+
 body {
-     margin: 1em 0em;
-     padding: 0em;
+     margin: 0;
+     padding: 0;
      text-align: left;
-     background: #FFF;
+     background: #bbf;
      color: #000;
-     font: 10pt/120% Verdana, Tahoma, Helvetica, sans-serif;
+/*
+     font: 10pt/140% Verdana, Tahoma, Helvetica, sans-serif;
+*/
+     font: 9pt/140% "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
 }
 
 .hide {
@@ -16,18 +21,64 @@ img {
 }
 
 pre {
+     overflow: auto;
+     font-size: 8pt !important;
      width: 100%;
-     overflow-x: scroll;
 }
 
 div.logo {
      float: left;
+     position-relative: top 20px ;
      width: 200px;
-     left: 1em;
-     top: 1em;
-     margin: 0em;
-     padding: .5em;
+     margin: 0 0 0 20px;
+     padding: 10px 5px;
      text-align: center;
+     border: 5px solid #ddf;
+     background-color: #eef;
+     -moz-border-radius: 15px;
+     -moz-box-shadow: inset 0px 0px 0px 2px #99f;
+     -khtml-border-radius: 15px;
+     -khtml-box-shadow: inset 0px 0px 0px 2px #99f;
+}
+
+div.logo hr {
+     color: #ddf;
+     background: #ddf;
+     height: 5px;
+     border: 0px solid #ddf;
+     margin: 8px -3px;
+}
+
+div.logo a:link, div.logo a:visited {
+     text-shadow: 0px 0px 1px rgba(0, 0, 32, 0.5);
+}
+
+div.logo a:active {
+     text-shadow: 0px 0px 1px rgba(255, 96, 0, 0.7);
+     color: #f60;
+}
+
+div.logo a:hover {
+     text-shadow: 0px 0px 1px rgba(128, 0, 0, 0.7);
+     color: #900;
+}
+
+div.warning a:link {
+     color: #f60;
+     text-shadow: 0px 0px 1px rgba(255, 96, 0, 0.5);
+}
+
+div.warning a:visited{
+     color: #f90;
+}
+
+div.warning a:hover{
+     color: #d30;
+  text-shadow: 0px 0px 1px rgba(255, 96, 0, 0.7);
+}
+
+div.warning a:active{
+     color: #900;
 }
 
 div.toolbar {
@@ -37,78 +88,202 @@ div.toolbar {
 }
 
 div.routersummaryouter {
-     float: left;
+     float: left; 
      width: 200px;
      margin: 0;
      padding: 0;
      border: 0;
-     clear: left;/* fixes a bug in Opera */
-     overflow: auto;
+     clear: left; /* fixes a bug in Opera */
 }
 
 div.routersummary {
-     background: #fafaff;
-     width: 175px;
+     background: #ddf;
+     width: 190px;
      color: inherit;
-     margin: 0em;
-     padding: 5px;
-     text-align: left;
-     border: medium solid #efefff;
+     margin: 0;
+     padding: 7px 0 0 0px;
+     text-align: center !important;
+     border: 5px solid #bbf;
      font-size: 9pt;
      word-wrap: break-word;
+     font: 9pt/125%;
+     -moz-box-shadow: inset 0px 0px 0px 1px #99f;
 }
 
 div.routersummary hr {
-     color: #ccf;
-     background: #ccf;
+     color: #bbf;
+     background: #bbf;
      height: 2px;
-     border: 0px solid #ccf;
-     margin: 10px 0;
+     border-bottom: 1px inset #bbf;
+     margin: 5px 1px 4px 1px;
+     -moz-box-shadow: inset 0px -1px 0px 1px #99f;
+}
+
+div.routersummary p {
+     padding: 0;
+}     
+
+div.routersummary a:link, div.routersummary a:visited {
+     text-shadow: 0px 0px 1px rgba(0, 0, 32, 0.3);
 }
+
+div.routersummary a:hover {
+     text-shadow: 0px 0px 1px rgba(255, 96, 0, 0.7);
+     color: #f60;
+}
+
+div.routersummary input[type=text] {
+     text-align: right !important;
+}
+
 div.warning {
-     margin: 0em 1em 1em 224px;
-     padding: .5em 1em;
-     background: #ffefef;
-     border: medium solid #ffafaf;
+     margin: 20px 20px 10px 260px;
+     padding: 0px 20px 20px 75px;
+     background: #ffd;
+     border: 5px solid #fb7;
      text-align: left;
      color: inherit;
+     background-image:url("../images/errortriangle.png");
+     background-position: 17px center;
+     background-repeat:no-repeat;
+     -moz-border-radius: 15px;
+     -moz-box-shadow: inset 0px 0px 0px 2px #f60;
+     -kthml-border-radius: 15px;
+     -khtml-box-shadow: inset 0px 0px 0px 2px #f60;
+}
+
+div.warning hr {
+     color: #fb7;
+     background: #fb7;
+     height: 5px;
+     border: 0px solid #fb7;
+     margin: 5px 0;
+     margin: 20px 0;
+}
+
+div.warning h3 {
+     border-bottom: 5px solid #fb7;
+     padding-bottom: 10px;
 }
 
 div.main {
-     margin: 0em 1em 1em 224px;
-     padding: .5em 1em;
-     background: #ffffef;
-     border: medium solid #ffffd0;
+     margin: 0px 0px 0px 195px;
+     padding: 15px 15px 15px 15px;
+     background: #eef;
+     border: 5px solid #bbf;
+     border-top: 0;
      text-align: left;
-     color: inherit;
+     color: #001;
+     min-width: 570px;
+     -moz-box-shadow: inset 0px 0px 0px 1px #99f;
+}
+
+div.main li {
+     padding-bottom: 10px;
+     list-style: square;
+}
+
+div.main li:first-child {
+     padding-top: 20px;
 }
 
 div.main textarea {
-     width: 100% !important;
+     width: 98% !important; 
+     margin: 2px 0 2px 5px;
 }
 
 div.news {
-     margin: 0em 1em 1em 224px;
-     padding: .5em 1em;
+     margin: -5px 0px 0 195px;
+     padding: -10px 15px 8px 15px;
      background: #ffffc0;
-     border: medium solid #ffffa0;
+     border: 5px solid #bbf;
      text-align: justify;
      color: inherit;
+     min-width: 600px;
+     padding-bottom: 8px;
+     padding-left: 10px;
+     padding-right: 10px;
+     -moz-box-shadow: inset 0px 0px 0px 1px #99f;
+}
+
+/* convert the list entry to our title */
+
+div.news li {
+     text-align: justify;
+     list-style: none;
+     margin: -15px 15px -20px -20px;
+     padding: 0px 0 15px 0;
+     border-bottom: 2px solid #cc7;
+     border-top: 0px solid #cc7;     
+     padding: 3px 5px 5px 5px;
+     font-size: 12pt;
+     color: #540;
+}
+
+div.news p {
+     color: #330;
+}
+div.news a:link {
+     color: #773;
+     text-shadow: 0px 0px 1px rgba(128, 128, 48, 0.3);
+}
+
+div.news a:visited {
+     color: #f00 !important;
+     text-shadow: 0px 0px 1px rgba(128, 128, 48, 0.3);
+}
+
+div.news hr {
+     color: #cc7;
+     background: #cc7;
+     height: 2px;
+     border: 0px solid #cc7;
+     margin: 5px 0;
 }
 
 div.confignav {
-     padding: 1em;
-     background: #efefff;
+     padding: 12px 0 15px 0;
+     background: #cfc;
+     margin: -20px -20px 0 -20px;
+     border: 5px solid #bbf;
+     -moz-box-shadow: inset 0px 0px 0px 1px #99f;
 }
 
 div.configure {
-     padding: 1em;
-     background: #ffffc0;
+     margin: 1px -20px 0 -20px;
+     padding: 0px 20px 0px 20px;
+}
+
+div.configure table {
+     font-size: 9pt;
+     font-weight: bold;
+     -moz-box-shadow: inset 0px 0px 1px 1px #001;
+}
+
+div.configure tr, div.configure td {
+     padding: 10px 2px;
+}
+
+div.configure tr {
+     -moz-box-shadow: inset 0px 0px 1px 0px #bbf;
 }
 
 div.messages {
-     padding: 1em;
-     background: #fafaff;
+     padding: 0px 10px;
+     background: #fff;
+     border: 5px solid #bbf;
+     border-right: 0;
+     margin: -5px -15px 10px -20px;
+     text-align: center;
+     font-size: 9pt;
+     font-weight: bold;
+     color: #474;
+     -moz-box-shadow: inset 0px 0px 0px 1px #99f;
+}
+
+div.messages li, div.messages ul {
+     padding: 15px 0 5px 5px;
+     margin: -15px 0 0 0;
 }
 
 div.messages span.error {
@@ -121,43 +296,80 @@ div.messages span.notice {
 
 h1 {
      font-size: 18pt;
+     text-shadow: 0px 0px 1px rgba(0, 0, 32, 0.7);
      text-align: center;
+     border: 5px solid #bbf;
+     padding: 13px 10px 12px 10px;
+     margin: 0 0px 0 195px;
+     line-height: 93%;
+     text-transform: uppercase;
+     letter-spacing: 0.3em;
+     background: #fff;
+     min-width: 600px;
+     -moz-box-shadow: inset 0px 0px 0px 1px #99f;
 }
 
 h2 {
-     font-size: 12pt;
+     font-size: 14pt;
+     padding: 10px;
+     border-bottom: 5px solid #bbf;
+     border-top: 0px solid #bbf;
+     letter-spacing: 0.04em;
 }
 
 h3 {
-     font-size: 10pt;
+     font-size: 12pt;
+     padding: 0 10px 10px 10px;
+     border-bottom: 5px solid #bbf;
+     border-top: 0px solid #bbf;
+     letter-spacing: 0.04em;
 }
+
 .proxyfooter{
      font-size: 7pt;
      display: none !important;
 }
 
-
 table {
-/*     border-collapse: collapse; */
-     border: 5px solid #dfd;
+     border-collapse: collapse; 
+     border: 5px solid #bbf;
      margin: 5px 0px;
      cell-padding: 1px;
      font-size: 7pt;
      background: #fff;
+     width: 100%;
 }
 
+table hr {
+     padding: 0px 0;
+     color: #bbf;
+     background: #bbf;
+     border: 0px solid #bbf;
+     margin: 0px -5px;
+     height: 1px;
+}
+
+table tt {
+     font-size: 7.5pt;
+}
 
 th {
-     background-color: #ccf;
-     padding: 5px 2px;
+     background-color: #fff;
+     padding: 8px 2px;
+     text-align: center;
+     border-bottom: 1px solid #88f;
 }
 
 tt {
      font-size: 8pt;
 }
 
+tt, pre {
+     font: 8pt "Lucida Console", "DejaVu Sans Mono", Courier, mono;
+}
+     
 td {
-     padding: 2px;
+     padding: 4px;
 }
 
 tr:nth-child(even) {
@@ -169,11 +381,11 @@ tr:nth-child(odd) {
 }
 
 hr {
-     color: #ff9;
-     background: #ff9;
-     height: 2px;
-     border: 0px solid #ff9;
-     margin: 10px 0;
+     color: #bbf;
+     background: #bbf;
+     height: 5px;
+     border: 0px solid #bbf;
+     margin: 5px 0;
 }
 
 .statusnotes {
@@ -181,6 +393,148 @@ hr {
      font-size: 8pt;
      color: #001;
      text-align: center;
-     margin: -3px 0 0 0; 
-     background: #fff;
- }
\ No newline at end of file
+     margin: -7px 0 7px 0; 
+     background: #bbf;
+     border: 5px solid #bbf;
+     border-top: 0;
+     padding: 4px 0 2px 0;
+}
+ 
+input {
+     margin: 3px 5px 3px 0;
+     vertical-align: middle;
+}
+
+input[type=text] {
+     margin: 3px 5px 3px 5px;
+     vertical-align: middle;
+}
+select {
+     margin: 3px 5px 3px 5px;
+     vertical-align: middle;
+}
+
+submit {
+     margin: 3px 5px 3px 5px;
+     padding 2px 0;
+     font: 8pt/140% "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
+}
+
+p {
+     padding: 5px 20px 0px 20px;
+     text-align: justify;
+}
+
+.formaction {
+     text-align: right;
+}
+
+.langbox {
+     margin: 29px -15px 0px 5px;
+     color: #001;
+     font-size: 7pt;
+     width: 180px;
+     text-align: center;
+     float: right;
+     valign: middle;
+}
+
+.langbox img {
+     padding: 0 2px; /* Ignored by IE8 */
+}
+
+a:link{
+     color: #006;
+     text-decoration: none;
+     font-weight: bold;
+     word-wrap: break-word;
+}
+
+a:visited{
+     color: #448;
+     text-decoration: none;
+     font-weight: bold;
+}
+
+a:hover{
+     color: #f60;
+     text-decoration: underline;
+     font-weight: bold;
+}
+
+a:active{
+     color: #f93;
+     text-decoration: underline;
+     font-weight: bold;
+}
+
+pre {
+     font-size: 9pt;
+     margin: 0px 20px;
+}
+
+tt {
+     font-size: 9pt;
+     font-weight: bold;
+     color: darkgreen;
+}
+
+.tablefooter {
+     border: 1px solid #88f;
+}
+
+.tablefooter tr, .tablefooter td {
+     background: #bbf;
+     font-size: 8pt;
+     font-weight: bold;
+     line-height: 150%;
+     word-wrap: nowrap;
+     padding: 8px 1px;
+}
+
+.tidylist {
+     text-align: justify;
+     padding-right: 30px;
+}
+
+div.graphspanel {
+     padding: 20px 10px;
+     margin: -20px;
+     background: #ddf url('images/lightbluetile.png');
+     -moz-border-radius: 4px;
+     -khtml-border-radius: 4px;
+     border-radius: 4px;
+     border: 5px solid #bbf;
+     -moz-box-shadow: inset 0px 0px 1px 0px #002;
+     text-align: center !important;   
+}
+
+div.graphspanel img {
+     border: 1px solid #99f;
+     padding: 2px;
+     margin: 6px;
+     background: #ddf;
+     -moz-box-shadow: inset 0px 0px 1px 1px #99f;
+}
+
+div.graphspanel img:hover {
+     border: 1px solid #003;
+     padding: 2px;
+     margin: 6px;
+     text-align: center !important;
+     background: #001;
+     -moz-box-shadow: inset 0px 0px 2px 1px #f60;
+}
+
+div.graphspanel hr {
+     margin: 20px 0;
+}
+
+div.graphspanel form {
+     text-align: left;
+     margin: 0 20px;
+}
+
+div.graphspanel h3 {
+     text-align: left;
+}
\ No newline at end of file
diff --git a/installer/resources/themes/console/classic/ieshim.css b/installer/resources/themes/console/classic/ieshim.css
new file mode 100644
index 0000000000000000000000000000000000000000..9fff032b16d485a9aeaf9957b4d86ff066681d82
--- /dev/null
+++ b/installer/resources/themes/console/classic/ieshim.css
@@ -0,0 +1,152 @@
+/* Welcome to the wonderful world of kludgey IE fixes */
+
+.wideload {
+     overflow: auto;
+     width: 100%;
+}
+
+.formaction {
+     text-align: left !important;
+     margin: -10px 0 10px 0;
+}
+
+div.configure {
+     text-align: center;
+}
+
+div.configure p, div.configure table  {
+     text-align: justify;
+}
+
+div.main ul {
+     margin-right: 20px;
+}
+
+div.configure textarea {
+     width: 450px !important;
+}
+
+div.configure input {
+     margin-left: 5px;
+}
+
+div.configure table {
+     width: 550px !important;
+     text-align: center;
+}
+
+h1 {
+     padding: 15px 10px 16px -10px !important;
+     margin: 0 0px 0 175px !important;
+     background-color: #bbf !important;
+     color: #001;
+}
+
+h2 {
+     padding-top: 0;
+     text-align: left !important;
+}
+
+h3 {
+     margin-top: 10px;
+     text-align: left !important
+}
+
+div.confignav {
+     padding: 15px 0 15px 0;
+     border-left: 0px;
+     margin-left: -15px;
+     border-top: 5px solid #bbf;
+     margin-bottom: 10px !important;
+}
+
+div.messages {
+     border-left: 0;
+     border-right: 0;     
+     margin: -10px -15px 0px -15px;
+}
+
+div.main, div.news {
+     margin: -5px 0px 10px 185px;
+     border: 5px solid #bbf;
+}
+
+div.main hr, div.news hr {
+     margin: 0;	
+}
+
+div.main {
+     border-top: 5px solid #bbf;
+}
+
+div.news {
+     border-left: 5px solid #bbf;
+     margin: -5px 0px 0 185px;
+     padding-bottom: 8px;
+}
+
+div.news hr {
+     color: #bbf;
+     background: #bbf;
+     height: 3px;
+     border: 0px;
+     margin: 0 -10px 0 -13px !important;
+}     
+
+div.routersummary {
+     color: #001;
+     padding-left: 0px;
+     border-left: 5px solid #bbf;
+}
+
+div.routersummary submit {
+     padding: 0;
+     margin-bottom: 5px;
+}
+
+div.news li {
+     padding-top: 0px	0px !important;
+     margin-bottom: -23px !important;
+}
+
+div.logo {
+}
+
+div.warning {
+     padding: 0px 20px 20px 80px;
+     margin-top: -20px;
+     margin-left: -10px !important;
+}
+
+.langbox {
+     margin: 22px -20px 0px 5px;
+}
+
+td {
+     text-align: left;
+}
+
+th {
+     text-align: left;
+     padding-left: 3px; 
+     padding-right: 1px;
+}
+
+div.configure hr{
+     margin: 10px 0 15px 0;
+}
+
+input {
+     padding: 0;
+}
+
+div.graphspanel img {
+     border: 1px solid #99f;
+     margin: 6px 0 !important;
+     background: #ddf;
+     -moz-box-shadow: inset 0px 0px 1px 1px #99f;
+}
+
+div.graphspanel hr {
+     margin: 20px 0;
+}
\ No newline at end of file
diff --git a/installer/resources/themes/console/dark/console.css b/installer/resources/themes/console/dark/console.css
index 3c17280fe4d8e408b27093d493cca1004ab9cde9..5c561e94a9da17f03e8f3f361c1542b75f4be438 100644
--- a/installer/resources/themes/console/dark/console.css
+++ b/installer/resources/themes/console/dark/console.css
@@ -65,7 +65,7 @@ div.toolbar a:visited {
 }
 
 div.toolbar a:hover, button:hover{
-     border: 1px solid #eeeeff;
+     border: 1px solid #f60;
      background: #003;
      color: #f60;
 }
@@ -89,7 +89,7 @@ div.routersummary {
      width: 175px;
      padding: 10px;
      text-align: center;
-     border: 1px solid #9999ff;
+     border: 1px solid #99f;
      background: #003;
      background: url(images/darkbluebg.png);
      color: #eef;
@@ -102,6 +102,28 @@ div.routersummary {
      -moz-box-shadow: inset 0px 0px 1px 0px #eef;
 }
 
+div.routersummary input[type=text] {
+     text-align: right !important;
+     -moz-box-shadow: inset 1px 1px 1px 0px #000;
+}
+
+div.routersummary hr {
+     color: #99f;
+     background: #99f;
+     height: 1px;
+     border-bottom: 1px outset #bbf;
+     margin: 5px -10px 4px -10px;
+}
+
+div.routersummary hr {
+     color: #bbf;
+     background: #bbf;
+     height: 2px;
+     border-bottom: 1px outset #bbf;
+     margin: 8px -10px 7px -10px;
+     -moz-box-shadow: inset 0px -4px 2px 1px #001;
+}
+
 div.warning {
      margin: 5px 20px 10px 240px;
      padding: 0px 25px 20px 75px;
@@ -254,14 +276,25 @@ table {
      background: #003;
 }
 
+table hr {
+     padding: 0px 0;
+     color: #99f;
+     background: #99f;
+     border: 0px solid #99f;
+     margin: 0px 0px;
+     height: 1px;
+     display: none;
+}
+
 th {
-     padding: 6px 3px;
+     padding: 6px 2px;
      color: #eef;
      text-align: center;
-     font-size: 8pt;
+     font-size: 9pt;
      background: #004 url('images/tabletitledark.png') repeat-x;
      border-top: 1px solid #99f;
-     border-bottom: 1px solid #99f;     
+     border-bottom: 1px solid #99f !important;     
+     line-height: 110%;
 }
 
 tr {
@@ -285,7 +318,7 @@ tr:last-child {
 }
 */
 td {
-     padding: 6px 4px;
+     padding: 6px 3px;
      color: #eef;
      vertical-align: middle;
      border-top: 1px inset #006;
@@ -391,7 +424,7 @@ h2 {
      color: #fff;
      text-shadow: 0px 0px 1px rgba(255, 255, 255, 0.5);
      letter-spacing: 0.05em;
-     background: #003 url('images/darkbluebg.png');
+     background: #003 url('images/titletile.png');
      padding: 5px 10px 8px 10px;
      wordwrap: none;
      border: 1px solid #99f;
@@ -434,8 +467,9 @@ h4 {
      font-size: 11pt;
 }
 
-button {
-     border: 1px outset #ddddc0;
+button, button:visited {
+     font: bold 9pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
+     border: 1px outset #77f;
      padding: 1px 3px;
      background: #bbf;
      text-decoration: none;
@@ -448,12 +482,23 @@ button {
      text-align: center;
      vertical-align: middle;
      min-width: 76px;
+     -moz-box-shadow: inset 0px 1px 1px 0px #55f;
+     background: #003;
+     color: #99f;
 }
 
+button:hover {
+     border: 1px solid #f60;
+     -moz-box-shadow: inset 0px 1px 1px 0px #eef;
+     background: #001;
+     color: #f60;
+}     
+          
 button:active {
      border: 1px inset #f60;
      background: #f60;
      color: #fff;
+     -moz-box-shadow: inset 0px 0px 0px 0px #f60;
 }
 
 .underline {
@@ -486,37 +531,70 @@ sidebarlogo {
 }
 
 input {
-     background: #bbf;
-     color: #002;
+     border: 1px outset #55f;
+     -moz-box-shadow: inset 0px 1px 1px 0px #55f;
+     background: #003;
+     color: #99f;
      margin: 5px;
-     font: bold 9pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
-     border: 1px solid #99f;
+     font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
      padding: 1px 2px;
      text-decoration: none;
      min-width: 110px;
-     opacity: 0.8;
+     border-radius: 4px;
+     -moz-border-radius: 4px;
+     -khtml-border-radius: 4px;
 }
 
 input:hover {
-     background: #eef;
-     color: #001;
+     background: #001;
+     color: #f60;
      border: 1px solid #f60;
+     -moz-box-shadow: inset 0px 1px 1px 0px #eef;
 }
 
 input:active {
      background: #002;
+     color: #f30;
+     border: 1px solid #f30;
+}
+
+input:active {
+     border: 1px inset #f60;
+     background: #f60;
      color: #fff;
-     border: 1px solid #f60;
+}
+
+input[type=text] {
+     background: #002;
+     color: #eef;
+     margin: 5px 10px;
+     padding: 4px 2px;
+     font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
+     border: 1px solid #bbf;
+     text-decoration: none;
+     border-radius: 4px;
+     -moz-border-radius: 4px;
+     -khtml-border-radius: 4px;
+     -moz-box-shadow: inset 1px 1px 1px 0px #000;
+}
+
+input[type=text]:active, input[type=text]:hover {
+     background: #001;
+}
+
+fieldset {
+overflow: hidden;
+position: relative;
 }
 
 select {
      background: #002;
      color: #eef;
-     margin: 5px;
-     border: 1px solid #99f;
-     border-radius: 0;
-     -moz-border-radius: 0;
-     -khtml-border-radius: 0;
+     margin: 5px 10px;
+     border: 1px solid #bbf;
+     border-radius: 4px;
+     -moz-border-radius: 4px;
+     -khtml-border-radius: 4px;
      min-width: 110px;
      font: 9pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
      padding: 2px;
@@ -526,13 +604,13 @@ textarea {
      background: #001;
      color: #eef;
      padding: 5px;
-     margin: 15px 15px 5px 0px;
+     margin: 10px;
      border-radius: 4px;
      -moz-border-radius: 4px;
      -khtml-border-radius: 4px;
      font: 9pt "Lucida Console", "DejaVu Sans Mono", Courier, mono;
      min-height: 100px;
-     min-width: 100%;
+     min-width: 97%;
      text-align: left;
      border: 1px solid #99f;
 }
@@ -596,4 +674,49 @@ form {}
 
 .mediumtags {
      font-size: 9pt;
+}
+
+.optbox {
+     min-width: 16px !important;
+     max-width: 16px !important;     
+     width: 16px !important;
+     min-height: 16px;
+     max-height: 16px;     
+     height: 16px;
+     opacity: 1.0;
+     border: 0;
+     margin: 5px 5px 5px 10px;
+     padding: 2px;
+overflow: hidden;
+position: relative;
+}
+
+.optbox:hover {
+     min-width: 16px !important;
+     max-width: 16px !important;     
+     width: 16px !important;
+     min-height: 16px;
+     max-height: 16px;     
+     height: 16px;
+     opacity: 1.0;
+     border: 0;
+     margin: 5px 5px 5px 10px;
+     padding: 2px;
+}
+
+.cells {
+     border: 1px inset #005;
+     border-left: 1px outset #002;     
+}
+
+.tablefooter tr, .tablefooter td {
+     background: #004 url('images/tabletitledark.png') repeat-x !important;
+     border-top: 1px solid #99f;
+     border-bottom: 1px solid #99f !important;     
+     font-size: 7pt;
+     line-height: 110%;
+}
+
+.formaction {
+     text-align: right;
 }
\ No newline at end of file
diff --git a/installer/resources/themes/console/dark/images/titletile.png b/installer/resources/themes/console/dark/images/titletile.png
new file mode 100644
index 0000000000000000000000000000000000000000..945acc5b981b768b8a64a6a9f7a8c969c17733ba
Binary files /dev/null and b/installer/resources/themes/console/dark/images/titletile.png differ
diff --git a/installer/resources/themes/console/images/errortriangle.png b/installer/resources/themes/console/images/errortriangle.png
new file mode 100644
index 0000000000000000000000000000000000000000..f1730ccbf6280167680a8ac21b942faa282a7f21
Binary files /dev/null and b/installer/resources/themes/console/images/errortriangle.png differ
diff --git a/installer/resources/themes/console/images/i2psnark.png b/installer/resources/themes/console/images/i2psnark.png
index 31722ab9d2fcea7ce8ec8a61082217e37cdca8b9..63fddb10799a9ad2394efbf065a182906ff234a2 100644
Binary files a/installer/resources/themes/console/images/i2psnark.png and b/installer/resources/themes/console/images/i2psnark.png differ
diff --git a/installer/resources/themes/console/light/console.css b/installer/resources/themes/console/light/console.css
index f7d457c2a2dffde5a76dfacc2bfac2d388ae1500..26f8b40c5c722bd8ef80fc536e309602ce3ac615 100644
--- a/installer/resources/themes/console/light/console.css
+++ b/installer/resources/themes/console/light/console.css
@@ -19,7 +19,7 @@ img {
 
 pre {
      width: 98%;
-     overflow-x: scroll;
+     overflow: auto;
      text-align: left;
      font: 8pt "Lucida Console", "DejaVu Sans Mono", Courier, mono;
      color: #333;
@@ -105,6 +105,19 @@ div.routersummary {
      -moz-box-shadow: inset 0px 0px 1px 0px #002;
 }
 
+div.routersummary input[type=text] {
+     text-align: right !important;
+}
+
+div.routersummary hr {
+     color: #eef;
+     background: #eef;
+     height: 2px;
+     border-bottom: 1px solid #eef;
+     margin: 8px -10px 7px -10px;
+     -moz-box-shadow: inset 0px 1px 1px 1px #001;
+}
+
 div.warning {
      margin: 5px 20px 10px 240px;
      padding: 0px 25px 20px 75px;
@@ -130,7 +143,6 @@ div.main {
      text-align: left;
      color: #001;
      width: auto;
-/*  overflow-x: scroll; */
 }
 
 div.main hr, hr {
@@ -227,6 +239,7 @@ div.configure {
      border-radius: 4px;
      border: 1px solid #000022;
      -moz-box-shadow: inset 0px 0px 1px 0px #002;
+     min-width: 400px;
 }
 
 div.graphspanel {
@@ -238,9 +251,9 @@ div.graphspanel {
      border-radius: 4px;
      border: 1px solid #000022;
      -moz-box-shadow: inset 0px 0px 1px 0px #002;
+     text-align: center !important; 
 }
 
-
 div.graphspanel img {
      border: 1px solid #003;
      padding: 2px;
@@ -248,7 +261,7 @@ div.graphspanel img {
      text-align: center !important;
      background: #001;
      -moz-box-shadow: inset 0px 0px 1px 1px #99f;
-     opacity: 0.9;
+     opacity: 0.8;
 }
 
 div.graphspanel img:hover {
@@ -261,6 +274,10 @@ div.graphspanel img:hover {
      opacity: 1;
 }
 
+div.graphspanel form {
+     text-align: left;
+}
+
 div.messages {
      padding: 10px;
      margin: 10px 0 20px 0;
@@ -299,6 +316,17 @@ table {
      cell-padding: 1px;
      font-size: 7pt;
      background: #b4c8ff url('images/tabletitlelight.png') repeat-x;
+     font: 7pt/130% "Lucida Sans Unicode", Verdana, Bitstream Vera Sans", Tahoma, Helvetica, sans-serif;
+}
+
+table hr {
+     padding: 0px 0;
+     color: #99f;
+     background: #99f;
+     border: 0px solid #99f;
+     margin: 0px 0px;
+     height: 1px;
+     display: none;
 }
 
 th {
@@ -307,8 +335,9 @@ th {
      background: #b4c8ff url('images/tabletitlelight.png') repeat-x;
      text-align: center;
      font-size: 9pt;
-     border-bottom: 1px solid #001;
-     border-top: 1px solid #001;
+     line-height: 110%;
+     border-bottom: 1px solid #001 !important;
+     border-top: 1px solid #001 !important;
 }
 
 tr {
@@ -331,7 +360,7 @@ tr:last-child {
 }
 */
 td {
-     padding: 5px;
+     padding: 5px 3px;
      color: #000;
      vertical-align: middle;
      border-top: 1px inset #001;
@@ -432,7 +461,7 @@ h2 {
      font-size: 12pt;
      color: #001;
      letter-spacing: 0.05em;
-     background: #ddf url('images/lightbluetile.png');
+     background: #ddf url('images/titletile.png');
      text-shadow: 0px 0px 1px rgba(0, 0, 64, 0.5);
      padding: 7px 10px;
      wordwrap: none;
@@ -473,10 +502,11 @@ h4 {
      font-size: 11pt;
 }
 
-button {
-     border: 1px outset #ddddc0;
+button, button:visited {
+     font: bold 9pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
+     border: 1px outset #999;
      padding: 1px 3px;
-     background: #bbf !important;
+     background: #ddf !important;
      text-decoration: none;
      border-radius: 4px;
      -moz-border-radius: 4px;
@@ -486,18 +516,22 @@ button {
      margin: 0 1px;
      text-align: center;
      min-width: 80px;
+     -moz-box-shadow: inset 0px 2px 8px 0px #fff;
+     color: #006;
 }
 
 button:hover{
      border: 1px solid #f60;
      background: #f60 !important;
      color: #fff;
+     -moz-box-shadow: inset 0px 0px 0px 1px #fff;
 }
 
 button:active{
      border: 1px solid #f60;
      background: #001 !important;
      color: #f60;
+     -moz-box-shadow: inset 0px 0px 0px 1px #f60;
 }
 
 .underline {
@@ -526,14 +560,33 @@ input {
      border: 1px solid #001;
      text-decoration: none;
      min-width: 110px;
-     opacity: 0.8;
 }
 
+input, input:visited {
+     border: 1px outset #999;
+     background: #ddf;
+     color: #001;
+     margin: 5px;
+     font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
+     padding: 1px 2px;
+     text-decoration: none;
+     min-width: 110px;
+     border-radius: 4px;
+     -moz-border-radius: 4px;
+     -khtml-border-radius: 4px;
+     -moz-box-shadow: inset 0px 2px 8px 0px #fff;
+     color: #006;
+     opacity: 0.9;
+}
+
+
 input:hover {
      background: #f60;
      color: #fff;
      border: 1px solid #f60;
-     opacity: 0.9;
+     opacity: 1.0;
+     -moz-box-shadow: inset 0px 0px 0px 1px #fff;
+
 }
 
 input:active {
@@ -541,6 +594,17 @@ input:active {
      color: #f60;
      border: 1px solid #f60;
      opacity: 1.0;
+     -moz-box-shadow: inset 0px 0px 0px 1px #f60;
+}
+
+input[type=text] {
+     background: #eef;
+     color: #001;
+     margin: 5px 10px 5px 10px;
+     padding: 4px 2px;
+     font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
+     border: 1px solid #001;
+     text-decoration: none;
 }
 
 submit {
@@ -566,11 +630,15 @@ select {
      border: 1px solid #001;
      min-width: 110px;
      font: 9pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
+     border-radius: 4px;
+     -moz-border-radius: 4px;
+     -khtml-border-radius: 4px;
+     text-align: left !important;
 }
 
 textarea {
      padding: 5px;
-     margin: 15px 15px 5px 0px;
+     margin: 5px 15px 5px 10px;
      background: #eef;
      color: #003;
      border-radius: 4px;
@@ -578,7 +646,7 @@ textarea {
      -khtml-border-radius: 4px;
      font: 8pt "Lucida Console", "DejaVu Sans Mono", Courier, mono;
      min-height: 100px;
-     min-width: 100%;
+     min-width: 97%;
      border: 1px solid #001;
 }
 
@@ -622,7 +690,7 @@ form {}
      -khtml-border-radius: 4px;
      text-align: justify;
      -moz-box-shadow: inset 0px 0px 1px 0px #002;
-     overflow-x: scroll;
+     overflow: auto;
  }
  
  div.joblog:li {
@@ -641,4 +709,53 @@ form {}
      font-size: 8pt;
      font-style: italic;
      font-weight: bold;
+}
+
+.optbox {
+     min-width: 16px !important;
+     max-width: 16px !important;     
+     width: 16px !important;
+     min-height: 16px;
+     max-height: 16px;     
+     height: 16px;
+     opacity: 1.0;
+     border: 0;
+     margin: 5px 5px 5px 10px;
+     padding: 2px;
+}
+
+.optbox:hover {
+     min-width: 16px !important;
+     max-width: 16px !important;     
+     width: 16px !important;
+     min-height: 16px;
+     max-height: 16px;     
+     height: 16px;
+     opacity: 1.0;
+     border: 0;
+     margin: 5px 5px 5px 10px;
+     padding: 2px;
+}
+
+.cells {
+     border-left: 1px outset #bbf;
+     border-top: 1px inset #99f !important;
+     border-bottom: 1px inset #99f !important;
+}
+
+.tablefooter {
+     background: #b4c8ff url('images/tabletitlelight.png') repeat-x;
+}
+
+.tablefooter tr, .tablefooter td {
+     background: #b4c8ff url('images/tabletitlelight.png') repeat-x;
+     border-top: 1px solid #001;
+     border-bottom: 1px solid #001 !important;     
+     padding: 8px 2px !important;
+     font-size: 7pt;
+     line-height: 110%;
+}
+
+.formaction {
+     text-align: right;
 }
\ No newline at end of file
diff --git a/installer/resources/themes/console/light/images/lightbluetile.png b/installer/resources/themes/console/light/images/lightbluetile.png
index e7fc6c1f12ab57637c3c0858a74ad87643a76b28..53f9d54deaaa6cc333aca3c07e71848e26f5d2b0 100644
Binary files a/installer/resources/themes/console/light/images/lightbluetile.png and b/installer/resources/themes/console/light/images/lightbluetile.png differ
diff --git a/installer/resources/themes/console/light/images/titletile.png b/installer/resources/themes/console/light/images/titletile.png
new file mode 100644
index 0000000000000000000000000000000000000000..beb9552baa136d485fa1be4468e6d78652f23f10
Binary files /dev/null and b/installer/resources/themes/console/light/images/titletile.png differ
diff --git a/installer/resources/themes/console/snark.css b/installer/resources/themes/console/snark.css
index f78956ad1a2f836c84a5778f4408825fdfcd508c..a5551156fc1615a2540680423c5aa1dcea56edf3 100644
--- a/installer/resources/themes/console/snark.css
+++ b/installer/resources/themes/console/snark.css
@@ -56,18 +56,19 @@ body {
   font-size: 9pt;
   font-weight: bold;
   text-align: left;
-  margin: 0 0 15px 0;
-  padding: 0px;
+  margin: 0 0px 10px 0px;
+  padding: 0;
   border-spacing: 0px;
   -moz-border-radius: 4px 0 0 0;
   -khtml-border-radius: 4px;
   border-radius: 4px;
   border: 2px solid #930;
-  text-align: center; 
-  overflow-x: scroll;            
-  background: #ddf url('../console/images/orangetile.png');
+  text-align: left; 
+  overflow: auto;            
+  background: #f40 url('../console/images/orangetile.png');
   color: #531;
   height: 64px;
+  width: auto;
 }
 
 pre {
@@ -85,6 +86,7 @@ table {
 	padding: 0px;
 	border-width: 0px;
 	border-spacing: 0px;
+  border-collapse: collapse;
 }
 
 th {
@@ -92,8 +94,9 @@ th {
   font-size: 8pt;
   border-top: 1px outset #001;
   border-bottom: 1px inset #001;  
-  background: #f91 url('/themes/console/images/tabletitleorange.png') repeat-x;
-  text-align: left;
+  background: #f60 url('/themes/console/images/tabletitleorange.png') repeat-x;
+  text-align: right;
+  whitespace: nowrap;
 }
 
 .SnarkTorrents {
@@ -104,7 +107,7 @@ th {
 
 td {
 	padding: 5px;
-  text-align: left;
+  text-align: right;
 }
 .snarkTorrentEven {
 	background-color: #fb1;
@@ -134,8 +137,8 @@ td {
 .page {
 	background-color: #fff;
 	color:#310;
-  min-width: 700px !important;
-  max-width: 800px !important;
+  min-width: 800px !important;
+/*  max-width: 800px !important; */
   margin: 20px;
   padding: 10px 20px 5px 20px;
   -moz-border-radius: 4px;
@@ -173,7 +176,7 @@ hr {
 }
 
 a:link{
-  color: #830;
+  color: #930;
   text-decoration: none;
   font-weight: bold;
   word-wrap: break-word;
@@ -186,7 +189,7 @@ a:visited{
 }
 
 a:hover{
-  color: #f60;
+  color: #900;
   font-weight: bold;
 }
 
diff --git a/readme.html b/readme.html
index ffabaddf3327278dcd77bcbd58b18de456f8566d..3caf086ed9632baade5aef0922bb9ba0b5b23afa 100644
--- a/readme.html
+++ b/readme.html
@@ -35,7 +35,7 @@
       <p></p>
       There are many more eepsites - just follow the links from the ones you see, 
       bookmark your favorites, and visit them often! 
-    </ul>
+    </ul></ul>
     <br />
     <br />
     <ul>
diff --git a/router/java/src/net/i2p/router/Blocklist.java b/router/java/src/net/i2p/router/Blocklist.java
index 1ce5cb5e7d7afd60e9fd8e96ce4f537fcde20f59..a166939b4394f3da25cde6b9ac8391ee1461f32d 100644
--- a/router/java/src/net/i2p/router/Blocklist.java
+++ b/router/java/src/net/i2p/router/Blocklist.java
@@ -767,10 +767,10 @@ public class Blocklist {
             out.write("</table>");
         }
         if (_blocklistSize > 0) {
-            out.write("<table><tr><td align=center colspan=2><b>IPs from Blocklist File</b></td></tr><tr><td align=center><b>From</b></td><td align=center><b>To</b></td></tr>");
+            out.write("<table><tr><th align=center colspan=2><b>IPs from Blocklist File</b></th></tr><tr><td align=center width=50%><b>From:</b></td><td align=center width=50%><b>To:</b></td></tr>");
             for (int i = 0; i < _blocklistSize; i++) {
                  int from = getFrom(_blocklist[i]);
-                 out.write("<tr><td align=right>"); out.write(toStr(from)); out.write("</td><td align=right>");
+                 out.write("<tr><td align=center width=50%>"); out.write(toStr(from)); out.write("</td><td align=center width=50%>");
                  int to = getTo(_blocklist[i]);
                  if (to != from) {
                      out.write(toStr(to)); out.write("</td></tr>\n");
@@ -779,7 +779,7 @@ public class Blocklist {
             }
             out.write("</table>");
         } else {
-            out.write("<br>No blocklist file entries");
+            out.write("<br><i>No blocklist file entries.</i>");
         }
         out.flush();
     }
diff --git a/router/java/src/net/i2p/router/JobQueue.java b/router/java/src/net/i2p/router/JobQueue.java
index 557a47b9183aacb73dd6fed36c44452b1cf24406..af58277ca50956c13ebab7eb0e14a8fb8a8e2bd3 100644
--- a/router/java/src/net/i2p/router/JobQueue.java
+++ b/router/java/src/net/i2p/router/JobQueue.java
@@ -607,7 +607,7 @@ public class JobQueue {
         out.flush();
         
         StringBuilder buf = new StringBuilder(32*1024);
-        buf.append("<b><div class=\"joblog\"><h3>I2P JobQueue</h3># runners: ").append(numRunners).append(" [states=");
+        buf.append("<b><div class=\"joblog\"><h3>I2P JobQueue</h3><div class=\"wideload\"># runners: ").append(numRunners).append(" [states=");
         if (states != null) 
             for (int i = 0; i < states.length; i++) 
                 buf.append(states[i]).append(" ");
@@ -667,7 +667,7 @@ public class JobQueue {
     
     /** render the HTML for the job stats */
     private void getJobStats(StringBuilder buf) { 
-        buf.append("<table border=\"1\">\n");
+        buf.append("<table>\n");
         buf.append("<tr><th>Job</th><th>Runs</th>");
         buf.append("<th>Time</th><th><i>Avg</i></th><th><i>Max</i></th><th><i>Min</i></th>");
         buf.append("<th>Pending</th><th><i>Avg</i></th><th><i>Max</i></th><th><i>Min</i></th></tr>\n");
@@ -734,6 +734,6 @@ public class JobQueue {
         buf.append("<td><i>").append(minPendingTime).append("</i></td>");
         buf.append("</tr>\n");
 	
-        buf.append("</table>\n");
+        buf.append("</table></div>\n");
     }
 }
diff --git a/router/java/src/net/i2p/router/PersistentKeyRing.java b/router/java/src/net/i2p/router/PersistentKeyRing.java
index 7804333257b829abe84824d31ed9574a758ba483..c92437111b78a95c1ac7b41493c1a0b3d14fae58 100644
--- a/router/java/src/net/i2p/router/PersistentKeyRing.java
+++ b/router/java/src/net/i2p/router/PersistentKeyRing.java
@@ -67,7 +67,7 @@ public class PersistentKeyRing extends KeyRing {
     @Override
     public void renderStatusHTML(Writer out) throws IOException {
         StringBuilder buf = new StringBuilder(1024);
-        buf.append("\n<table border=\"1\"><tr><th align=\"left\">Destination Hash<th align=\"left\">Name or Dest.<th align=\"left\">Session Key</tr>");
+        buf.append("\n<table><tr><th align=\"left\">Destination Hash<th align=\"left\">Name or Dest.<th align=\"left\">Session Key</tr>");
         for (Entry<Hash, SessionKey> e : entrySet()) {
             buf.append("\n<tr><td>");
             Hash h = e.getKey();
diff --git a/router/java/src/net/i2p/router/Router.java b/router/java/src/net/i2p/router/Router.java
index d85ea17b2b0d092c7a72f6059fe82b11b77a57ac..0729211bf94bf03e171ef548f7233e979fb3f4ec 100644
--- a/router/java/src/net/i2p/router/Router.java
+++ b/router/java/src/net/i2p/router/Router.java
@@ -759,7 +759,7 @@ public class Router {
         buf.setLength(0);
         buf.append("\n<hr /><a name=\"logs\"> </a>\n");	
         List msgs = _context.logManager().getBuffer().getMostRecentMessages();
-        buf.append("\n<h2>Most recent console messages:</h2><table border=\"1\">\n");
+        buf.append("\n<h2>Most recent console messages:</h2><table>\n");
         for (Iterator iter = msgs.iterator(); iter.hasNext(); ) {
             String msg = (String)iter.next();
             buf.append("<tr><td align=\"left\"><pre>");
diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java
index 8aa072fcf9438648320c85ef3852d1e13da4f6b8..0226e038bde0536b47d9d2a075cf25dd9de99cd8 100644
--- a/router/java/src/net/i2p/router/RouterVersion.java
+++ b/router/java/src/net/i2p/router/RouterVersion.java
@@ -18,7 +18,7 @@ public class RouterVersion {
     /** deprecated */
     public final static String ID = "Monotone";
     public final static String VERSION = CoreVersion.VERSION;
-    public final static long BUILD = 0;
+    public final static long BUILD = 07;
     /** for example "-test" */
     public final static String EXTRA = "";
     public final static String FULL_VERSION = VERSION + "-" + BUILD + EXTRA;
diff --git a/router/java/src/net/i2p/router/peermanager/ProfileOrganizerRenderer.java b/router/java/src/net/i2p/router/peermanager/ProfileOrganizerRenderer.java
index ebb9d61c0cd6d4598ad25a3c8162cb881b8e571a..fecda29d031b825e239abb4d35d4faa32ba6ab50 100644
--- a/router/java/src/net/i2p/router/peermanager/ProfileOrganizerRenderer.java
+++ b/router/java/src/net/i2p/router/peermanager/ProfileOrganizerRenderer.java
@@ -218,7 +218,11 @@ class ProfileOrganizerRenderer {
         }
         buf.append("</table>");
 
-        buf.append("<p><i>Definitions:<ul>");
+        buf.append("<h3>Thresholds:</h3>");
+        buf.append("<b>Speed:</b> ").append(num(_organizer.getSpeedThreshold())).append(" (").append(fast).append(" fast peers)<br />");
+        buf.append("<b>Capacity:</b> ").append(num(_organizer.getCapacityThreshold())).append(" (").append(reliable).append(" high capacity peers)<br />");
+        buf.append("<b>Integration:</b> ").append(num(_organizer.getIntegrationThreshold())).append(" (").append(integrated).append(" well integrated peers)");
+        buf.append("<h3>Definitions:</h3><ul>");
         buf.append("<li><b>groups</b>: as determined by the profile organizer</li>");
         buf.append("<li><b>caps</b>: capabilities in the netDb, not used to determine profiles</li>");
         buf.append("<li><b>speed</b>: peak throughput (bytes per second) over a 1 minute period that the peer has sustained in a single tunnel</li>");
@@ -226,10 +230,6 @@ class ProfileOrganizerRenderer {
         buf.append("<li><b>integration</b>: how many new peers have they told us about lately?</li>");
         buf.append("<li><b>failing?</b>: is the peer currently swamped (and if possible we should avoid nagging them)?</li>");
         buf.append("</ul></i>");
-        buf.append("<p><b>Thresholds:</b><br />");
-        buf.append("<b>Speed:</b> ").append(num(_organizer.getSpeedThreshold())).append(" (").append(fast).append(" fast peers)<br />");
-        buf.append("<b>Capacity:</b> ").append(num(_organizer.getCapacityThreshold())).append(" (").append(reliable).append(" high capacity peers)<br />");
-        buf.append("<b>Integration:</b> ").append(num(_organizer.getIntegrationThreshold())).append(" (").append(integrated).append(" well integrated peers)<br />");
         out.write(buf.toString());
         out.flush();
     }
diff --git a/router/java/src/net/i2p/router/transport/FIFOBandwidthLimiter.java b/router/java/src/net/i2p/router/transport/FIFOBandwidthLimiter.java
index a4ded13edd6a146770c7154a6852a2a2bd9cee1d..11d36419161077e7965b87abcfee4576de4d1d5e 100644
--- a/router/java/src/net/i2p/router/transport/FIFOBandwidthLimiter.java
+++ b/router/java/src/net/i2p/router/transport/FIFOBandwidthLimiter.java
@@ -619,8 +619,8 @@ public class FIFOBandwidthLimiter {
     public void renderStatusHTML(Writer out) throws IOException {
         long now = now();
         StringBuilder buf = new StringBuilder(4096);
-        buf.append("<p><b id=\"bwlim\">Limiter Status:</b><br />").append(getStatus().toString()).append("</p>\n");
-        buf.append("<p><b>Pending bandwidth requests:</b><ul>");
+        buf.append("<h3><b id=\"bwlim\">Limiter Status:</b></h3>").append(getStatus().toString()).append("\n");
+        buf.append("<h3>Pending bandwidth requests:</h3><ul>");
         buf.append("<li>Inbound requests: <ol>");
         synchronized (_pendingInboundRequests) {
             for (int i = 0; i < _pendingInboundRequests.size(); i++) {
@@ -643,7 +643,7 @@ public class FIFOBandwidthLimiter {
                 buf.append("ms ago</li>\n");
             }
         }
-        buf.append("</ol></li></ul></p>\n");
+        buf.append("</ol></li></ul></p><hr>\n");
         out.write(buf.toString());
         out.flush();
     }
diff --git a/router/java/src/net/i2p/router/transport/TransportManager.java b/router/java/src/net/i2p/router/transport/TransportManager.java
index f9d495cea1d97ff7c5b85041cc8098037fddfed9..98158054fa2e40440a1c82637c0cd03c30bedba8 100644
--- a/router/java/src/net/i2p/router/transport/TransportManager.java
+++ b/router/java/src/net/i2p/router/transport/TransportManager.java
@@ -492,7 +492,7 @@ public class TransportManager implements TransportEventListener {
             t.renderStatusHTML(out, urlBase, sortFlags);
         }
         StringBuilder buf = new StringBuilder(4*1024);
-        buf.append("<p><b>Router Transport Addresses:</b><br /><pre>\n");
+        buf.append("<h3>Router Transport Addresses:</h3><pre>\n");
         for (int i = 0; i < _transports.size(); i++) {
             Transport t = (Transport)_transports.get(i);
             if (t.getCurrentAddress() != null)
diff --git a/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java b/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java
index 910db5e780bf649ffbb54de8d259767d89b7cb61..b21156f1ca01b11dfa5cbf54e29ff5baaf685359 100644
--- a/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java
+++ b/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java
@@ -639,19 +639,19 @@ public class NTCPTransport extends TransportImpl {
         long totalRecv = 0;
 
         StringBuilder buf = new StringBuilder(512);
-        buf.append("<p><b id=\"ntcpcon\">NTCP connections: ").append(peers.size());
-        buf.append(" limit: ").append(getMaxConnections());
-        buf.append(" timeout: ").append(DataHelper.formatDuration(_pumper.getIdleTimeout()));
-        buf.append("</b><br />\n");
-        buf.append("<table>\n");
+        buf.append("<p><b id=\"ntcpcon\"><h3>NTCP connections: ").append(peers.size());
+        buf.append(". Limit: ").append(getMaxConnections());
+        buf.append(". Timeout: ").append(DataHelper.formatDuration(_pumper.getIdleTimeout()));
+        buf.append(".</b></h3>\n");
+        buf.append("<div class=\"wideload\"><table>\n");
         buf.append("<tr><th><a href=\"#def.peer\">Peer</a></th>");
         buf.append("<th>Dir</th>");
         buf.append("<th align=\"right\"><a href=\"#def.idle\">Idle</a></th>");
         buf.append("<th align=\"right\"><a href=\"#def.rate\">In/Out</a></th>");
         buf.append("<th align=\"right\"><a href=\"#def.up\">Up</a></th>");
         buf.append("<th align=\"right\"><a href=\"#def.skew\">Skew</a></th>");
-        buf.append("<th align=\"right\"><a href=\"#def.send\">Send</a></th>");
-        buf.append("<th align=\"right\"><a href=\"#def.recv\">Recv</a></th>");
+        buf.append("<th align=\"right\"><a href=\"#def.send\">TX</a></th>");
+        buf.append("<th align=\"right\"><a href=\"#def.recv\">RX</a></th>");
         buf.append("<th>Out queue</th>");
         buf.append("<th>Backlogged?</th>");
         buf.append("<th>Reading?</th>");
@@ -660,20 +660,20 @@ public class NTCPTransport extends TransportImpl {
         buf.setLength(0);
         for (Iterator iter = peers.iterator(); iter.hasNext(); ) {
             NTCPConnection con = (NTCPConnection)iter.next();
-            buf.append("<tr><td align=\"right\" nowrap>");
+            buf.append("<tr> <td class=\"cells\" align=\"left\" nowrap>");
             buf.append(_context.commSystem().renderPeerHTML(con.getRemotePeer().calculateHash()));
             //byte[] ip = getIP(con.getRemotePeer().calculateHash());
             //if (ip != null)
             //    buf.append(' ').append(_context.blocklist().toStr(ip));
-            buf.append("</td><td align=\"center\"><code>");
+            buf.append("</td> <td class=\"cells\" align=\"center\">");
             if (con.isInbound())
-                buf.append("in");
+                buf.append("<img src=\"/themes/console/images/inbound.png\" alt=\"Inbound\" title=\"Inbound\"/>");
             else
-                buf.append("out");
-            buf.append("</code></td><td align=\"right\"><code>");
+                buf.append("<img src=\"/themes/console/images/outbound.png\" alt=\"Outbound\" title=\"Outbound\"/>");
+            buf.append("</td> <td class=\"cells\" align=\"right\">");
             buf.append(con.getTimeSinceReceive()/1000);
             buf.append("s/").append(con.getTimeSinceSend()/1000);
-            buf.append("s</code></td><td align=\"right\"><code>");
+            buf.append("s</td> <td class=\"cells\" align=\"center\">");
             if (con.getTimeSinceReceive() < 10*1000) {
                 buf.append(formatRate(con.getRecvRate()/1024));
                 bpsRecv += con.getRecvRate();
@@ -687,47 +687,47 @@ public class NTCPTransport extends TransportImpl {
             } else {
                 buf.append(formatRate(0));
             }
-            buf.append("KBps");
-            buf.append("</code></td><td align=\"right\"><code>").append(DataHelper.formatDuration(con.getUptime()));
+            buf.append("K/s");
+            buf.append("</td> <td class=\"cells\" align=\"center\">").append(DataHelper.formatDuration(con.getUptime()));
             totalUptime += con.getUptime();
             offsetTotal = offsetTotal + con.getClockSkew();
-            buf.append("</code></td><td align=\"right\"><code>").append(con.getClockSkew());
-            buf.append("s</code></td><td align=\"right\"><code>").append(con.getMessagesSent());
+            buf.append("</td> <td class=\"cells\" align=\"center\">").append(con.getClockSkew());
+            buf.append("s</td> <td class=\"cells\" align=\"center\">").append(con.getMessagesSent());
             totalSend += con.getMessagesSent();
-            buf.append("</code></td><td align=\"right\"><code>").append(con.getMessagesReceived());
+            buf.append("</td> <td class=\"cells\" align=\"center\">").append(con.getMessagesReceived());
             totalRecv += con.getMessagesReceived();
             long outQueue = con.getOutboundQueueSize();
             if (outQueue <= 0) {
-                buf.append("</code></td><td align=\"right\"><code>No messages");
+                buf.append("</td> <td class=\"cells\" align=\"center\">No messages");
             } else {
-                buf.append("</code></td><td align=\"right\"><code>").append(outQueue).append(" message");
+                buf.append("</td> <td class=\"cells\" align=\"center\">").append(outQueue).append(" message");
                 if (outQueue > 1)
                     buf.append("s");
             }
-            buf.append("</code></td><td align=\"center\"><code>").append(con.getConsecutiveBacklog() > 0 ? "true" : "false");
+            buf.append("</td> <td class=\"cells\" align=\"center\">").append(con.getConsecutiveBacklog() > 0 ? "true" : "false");
             long readTime = con.getReadTime();
             if (readTime <= 0) {
-                buf.append("</code></td><td align=\"center\"><code>No");
+                buf.append("</td> <td class=\"cells\" align=\"center\">No");
             } else {
-                buf.append("</code></td><td><code>For ").append(DataHelper.formatDuration(readTime));
+                buf.append("</td> <td class=\"cells\">For ").append(DataHelper.formatDuration(readTime));
             }
-            buf.append("</code></td></tr>\n");
+            buf.append("</td></tr>\n");
             out.write(buf.toString());
             buf.setLength(0);
         }
 
         if (peers.size() > 0) {
-            buf.append("<tr><td colspan=\"11\"><hr /></td></tr>\n");
-            buf.append("<tr><td>").append(peers.size()).append(" peers</td><td>&nbsp;</td><td>&nbsp;");
-            buf.append("</td><td align=\"right\">").append(formatRate(bpsRecv/1024)).append("/").append(formatRate(bpsSend/1024)).append("KBps");
-            buf.append("</td><td align=\"right\">").append(DataHelper.formatDuration(totalUptime/peers.size()));
-            buf.append("</td><td align=\"right\">").append(peers.size() > 0 ? DataHelper.formatDuration(offsetTotal*1000/peers.size()) : "0ms");
-            buf.append("</td><td align=\"right\">").append(totalSend).append("</td><td align=\"right\">").append(totalRecv);
-            buf.append("</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;");
+//            buf.append("<tr> <td colspan=\"11\"><hr /></td></tr>\n");
+            buf.append("<tr class=\"tablefooter\"> <td align=\"center\"><b>").append(peers.size()).append(" peers</b></td> <td>&nbsp;</td> <td>&nbsp;");
+            buf.append("</td> <td align=\"center\"><b>").append(formatRate(bpsRecv/1024)).append("/").append(formatRate(bpsSend/1024)).append("K/s</b>");
+            buf.append("</td> <td align=\"center\"><b>").append(DataHelper.formatDuration(totalUptime/peers.size()));
+            buf.append("</b></td> <td align=\"center\"><b>").append(peers.size() > 0 ? DataHelper.formatDuration(offsetTotal*1000/peers.size()) : "0ms");
+            buf.append("</b></td> <td align=\"center\"><b>").append(totalSend).append("</b></td> <td align=\"center\"><b>").append(totalRecv);
+            buf.append("</b></td> <td>&nbsp;</td> <td>&nbsp;</td> <td>&nbsp;");
             buf.append("</td></tr>\n");
         }
 
-        buf.append("</table></p>\n");
+        buf.append("</table></div></p>\n");
         out.write(buf.toString());
         buf.setLength(0);
     }
diff --git a/router/java/src/net/i2p/router/transport/udp/UDPTransport.java b/router/java/src/net/i2p/router/transport/udp/UDPTransport.java
index eae5b9c119c07018e0332c189021e733f4fb2b2c..044b33b8ef1b4a95b45d12c6e0401207021139a4 100644
--- a/router/java/src/net/i2p/router/transport/udp/UDPTransport.java
+++ b/router/java/src/net/i2p/router/transport/udp/UDPTransport.java
@@ -1763,51 +1763,51 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
         int numPeers = 0;
         
         StringBuilder buf = new StringBuilder(512);
-        buf.append("<p><b id=\"udpcon\">UDP connections: ").append(peers.size());
-        buf.append(" limit: ").append(getMaxConnections());
-        buf.append(" timeout: ").append(DataHelper.formatDuration(_expireTimeout));
-        buf.append("</b><br />\n");
-        buf.append("<table>\n");
-        buf.append("<tr><th><a href=\"#def.peer\">Peer</a>");
+        buf.append("<p><b id=\"udpcon\"><h3>UDP connections: ").append(peers.size());
+        buf.append(". Limit: ").append(getMaxConnections());
+        buf.append(". Timeout: ").append(DataHelper.formatDuration(_expireTimeout));
+        buf.append(".</b></h3>\n");
+        buf.append("<div class=\"wideload\"><table>\n");
+        buf.append("<tr><th class=\"smallhead\" nowrap><a href=\"#def.peer\">Peer</a>");
         if (sortFlags != FLAG_ALPHA)
             buf.append(" <a href=\"").append(urlBase).append("?sort=0\">V</a> ");
-        buf.append("</th><th><a href=\"#def.dir\">Dir/Intro</a></th><th><a href=\"#def.idle\">Idle</a>");
+        buf.append("</th><th class=\"smallhead\" nowrap><a href=\"#def.dir\" title=\"Direction/Introduction\">Dir</a></th><th class=\"smallhead\" nowrap><a href=\"#def.idle\">Idle</a><br>");
         appendSortLinks(buf, urlBase, sortFlags, "Sort by idle inbound", FLAG_IDLE_IN);
         buf.append("/");
         appendSortLinks(buf, urlBase, sortFlags, "Sort by idle outbound", FLAG_IDLE_OUT);
         buf.append("</th>");
-        buf.append("<th><a href=\"#def.rate\">In/Out</a>");
+        buf.append("<th class=\"smallhead\" nowrap><a href=\"#def.rate\">In/Out</a><br>");
         appendSortLinks(buf, urlBase, sortFlags, "Sort by inbound rate", FLAG_RATE_IN);
         buf.append("/");
         appendSortLinks(buf, urlBase, sortFlags, "Sort by outbound rate", FLAG_RATE_OUT);
         buf.append("</th>\n");
-        buf.append("<th><a href=\"#def.up\">Up</a>");
+        buf.append("<th class=\"smallhead\" nowrap><a href=\"#def.up\">Up</a><br>");
         appendSortLinks(buf, urlBase, sortFlags, "Sort by connection uptime", FLAG_UPTIME);
-        buf.append("</th><th><a href=\"#def.skew\">skew</a>");
+        buf.append("</th><th class=\"smallhead\" nowrap><a href=\"#def.skew\">Skew</a><br>");
         appendSortLinks(buf, urlBase, sortFlags, "Sort by clock skew", FLAG_SKEW);
         buf.append("</th>\n");
-        buf.append("<th><a href=\"#def.cwnd\">Cwnd</a>");
+        buf.append("<th class=\"smallhead\" nowrap><a href=\"#def.cwnd\">Cwnd</a><br>");
         appendSortLinks(buf, urlBase, sortFlags, "Sort by congestion window", FLAG_CWND);
-        buf.append("</th><th><a href=\"#def.ssthresh\">Ssthresh</a>");
+        buf.append("</th><th class=\"smallhead\" nowrap><a href=\"#def.ssthresh\">Sst</a><br>");
         appendSortLinks(buf, urlBase, sortFlags, "Sort by slow start threshold", FLAG_SSTHRESH);
         buf.append("</th>\n");
-        buf.append("<th><a href=\"#def.rtt\">Rtt</a>");
+        buf.append("<th class=\"smallhead\" nowrap><a href=\"#def.rtt\">Rtt</a><br>");
         appendSortLinks(buf, urlBase, sortFlags, "Sort by round trip time", FLAG_RTT);
-        buf.append("</th><th><a href=\"#def.dev\">Dev</a>");
+        buf.append("</th><th class=\"smallhead\" nowrap><a href=\"#def.dev\">Dev</a><br>");
         appendSortLinks(buf, urlBase, sortFlags, "Sort by round trip time deviation", FLAG_DEV);
-        buf.append("</th><th><a href=\"#def.rto\">Rto</a>");
+        buf.append("</th><th class=\"smallhead\" nowrap><a href=\"#def.rto\">Rto</a><br>");
         appendSortLinks(buf, urlBase, sortFlags, "Sort by retransmission timeout", FLAG_RTO);
         buf.append("</th>\n");
-        buf.append("<th><a href=\"#def.mtu\">Mtu</a>");
+        buf.append("<th class=\"smallhead\" nowrap><a href=\"#def.mtu\">Mtu</a><br>");
         appendSortLinks(buf, urlBase, sortFlags, "Sort by maximum transmit unit", FLAG_MTU);
-        buf.append("</th><th><a href=\"#def.send\">Send</a>");
+        buf.append("</th><th class=\"smallhead\" nowrap><a href=\"#def.send\">TX</a><br>");
         appendSortLinks(buf, urlBase, sortFlags, "Sort by packets sent", FLAG_SEND);
-        buf.append("</th><th><a href=\"#def.recv\">Recv</a>");
+        buf.append("</th><th class=\"smallhead\" nowrap><a href=\"#def.recv\">RX</a><br>");
         appendSortLinks(buf, urlBase, sortFlags, "Sort by packets received", FLAG_RECV);
         buf.append("</th>\n");
-        buf.append("<th><a href=\"#def.resent\">Resent</a>");
+        buf.append("<th class=\"smallhead\" nowrap><a href=\"#def.resent\">ReTX</a><br>");
         appendSortLinks(buf, urlBase, sortFlags, "Sort by packets retransmitted", FLAG_RESEND);
-        buf.append("</th><th><a href=\"#def.dupRecv\">DupRecv</a>");
+        buf.append("</th><th class=\"smallhead\" nowrap><a href=\"#def.dupRecv\">DupRX</a><br>");
         appendSortLinks(buf, urlBase, sortFlags, "Sort by packets received more than once", FLAG_DUP);
         buf.append("</th>\n");
         buf.append("</tr>\n");
@@ -1819,16 +1819,16 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
             if (now-peer.getLastReceiveTime() > 60*60*1000)
                 continue; // don't include old peers
             
-            buf.append("<tr><td align=\"right\" nowrap>");
+            buf.append("<tr> <td class=\"cells\" align=\"left\" nowrap>");
             buf.append(_context.commSystem().renderPeerHTML(peer.getRemotePeer()));
             //byte ip[] = peer.getRemoteIP();
             //if (ip != null)
             //    buf.append(' ').append(_context.blocklist().toStr(ip));
-            buf.append("</td><td><code>");
+            buf.append("</td> <td class=\"cells\" nowrap align=\"left\">");
             if (peer.isInbound())
-                buf.append("in ");
+                buf.append("<img src=\"/themes/console/images/inbound.png\" alt=\"Inbound\" title=\"Inbound\"/> ");
             else
-                buf.append("out ");
+                buf.append("<img src=\"/themes/console/images/outbound.png\" alt=\"Outbound\" title=\"Outbound\"/> ");
             if (peer.getWeRelayToThemAs() > 0)
                 buf.append("^");
             else
@@ -1839,107 +1839,107 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
             boolean appended = false;
             if (_activeThrottle.isChoked(peer.getRemotePeer())) {
                 if (!appended) buf.append("<br />");
-                buf.append(" [choked]");
+                buf.append(" <i>Choked</i>");
                 appended = true;
             }
             if (peer.getConsecutiveFailedSends() > 0) {
                 if (!appended) buf.append("<br />");
-                buf.append(" [").append(peer.getConsecutiveFailedSends()).append(" failures]");
+                buf.append(" <i>").append(peer.getConsecutiveFailedSends()).append(" fail(s)</i>");
                 appended = true;
             }
             if (_context.shitlist().isShitlisted(peer.getRemotePeer(), STYLE)) {
                 if (!appended) buf.append("<br />");
-                buf.append(" [shitlisted]");
+                buf.append(" <i>Shitlist</i>");
                 appended = true;
             }
             //byte[] ip = getIP(peer.getRemotePeer());
             //if (ip != null)
             //    buf.append(' ').append(_context.blocklist().toStr(ip));
-            buf.append("</code></td>");
+            buf.append("</td>");
             
             long idleIn = (now-peer.getLastReceiveTime())/1000;
             long idleOut = (now-peer.getLastSendTime())/1000;
             if (idleIn < 0) idleIn = 0;
             if (idleOut < 0) idleOut = 0;
             
-            buf.append("<td align=\"right\" ><code>");
+            buf.append(" <td class=\"cells\" align=\"right\" >");
             buf.append(idleIn);
             buf.append("s/");
             buf.append(idleOut);
-            buf.append("s</code></td>");
+            buf.append("s</td>");
  
             int recvBps = (idleIn > 2 ? 0 : peer.getReceiveBps());
             int sendBps = (idleOut > 2 ? 0 : peer.getSendBps());
             
-            buf.append("<td align=\"right\" ><code>");
+            buf.append(" <td class=\"cells\" align=\"right\" nowrap>");
             buf.append(formatKBps(recvBps));
             buf.append("/");
             buf.append(formatKBps(sendBps));
-            buf.append("KBps ");
+            buf.append("K/s ");
             //buf.append(formatKBps(peer.getReceiveACKBps()));
-            //buf.append("KBps/");
+            //buf.append("K/s/");
             //buf.append(formatKBps(peer.getSendACKBps()));
-            //buf.append("KBps ");
-            buf.append("</code></td>");
+            //buf.append("K/s ");
+            buf.append("</td>");
 
             long uptime = now - peer.getKeyEstablishedTime();
             
-            buf.append("<td align=\"right\" ><code>");
+            buf.append(" <td class=\"cells\" align=\"center\" >");
             buf.append(DataHelper.formatDuration(uptime));
-            buf.append("</code></td>");
+            buf.append("</td>");
             
-            buf.append("<td align=\"right\" ><code>");
+            buf.append(" <td class=\"cells\" align=\"center\" >");
             buf.append(peer.getClockSkew());
-            buf.append("s</code></td>");
+            buf.append("s</td>");
             offsetTotal = offsetTotal + peer.getClockSkew();
 
             long sendWindow = peer.getSendWindowBytes();
             
-            buf.append("<td align=\"right\" ><code>");
+            buf.append(" <td class=\"cells\" align=\"right\" >");
             buf.append(sendWindow/1024);
             buf.append("K");
             buf.append("/").append(peer.getConcurrentSends());
             buf.append("/").append(peer.getConcurrentSendWindow());
             buf.append("/").append(peer.getConsecutiveSendRejections());
-            buf.append("</code></td>");
+            buf.append("</td>");
 
-            buf.append("<td align=\"right\" ><code>");
+            buf.append(" <td class=\"cells\" align=\"center\" >");
             buf.append(peer.getSlowStartThreshold()/1024);
-            buf.append("K</code></td>");
+            buf.append("K</td>");
 
             int rtt = peer.getRTT();
             int rto = peer.getRTO();
             
-            buf.append("<td align=\"right\" ><code>");
+            buf.append(" <td class=\"cells\" align=\"right\" >");
             buf.append(rtt);
-            buf.append("</code></td>");
+            buf.append("</td>");
             
-            buf.append("<td align=\"right\" ><code>");
+            buf.append(" <td class=\"cells\" align=\"right\" >");
             buf.append(peer.getRTTDeviation());
-            buf.append("</code></td>");
+            buf.append("</td>");
 
-            buf.append("<td align=\"right\" ><code>");
+            buf.append(" <td class=\"cells\" align=\"right\" >");
             buf.append(rto);
-            buf.append("</code></td>");
+            buf.append("</td>");
             
-            buf.append("<td align=\"right\" ><code>");
+            buf.append(" <td class=\"cells\" align=\"right\" >");
             buf.append(peer.getMTU()).append("/").append(peer.getReceiveMTU());
             
             //.append('/');
             //buf.append(peer.getMTUIncreases()).append('/');
             //buf.append(peer.getMTUDecreases());
-            buf.append("</code></td>");
+            buf.append("</td>");
         
             long sent = peer.getPacketsTransmitted();
             long recv = peer.getPacketsReceived();
             
-            buf.append("<td align=\"right\" ><code>");
+            buf.append(" <td class=\"cells\" align=\"center\" >");
             buf.append(sent);
-            buf.append("</code></td>");
+            buf.append("</td>");
             
-            buf.append("<td align=\"right\" ><code>");
+            buf.append(" <td class=\"cells\" align=\"center\" >");
             buf.append(recv);
-            buf.append("</code></td>");
+            buf.append("</td>");
             
             //double sent = (double)peer.getPacketsPeriodTransmitted();
             //double sendLostPct = 0;
@@ -1949,16 +1949,16 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
             long resent = peer.getPacketsRetransmitted();
             long dupRecv = peer.getPacketsReceivedDuplicate();
             
-            buf.append("<td align=\"right\" ><code>");
+            buf.append(" <td class=\"cells\" align=\"center\" >");
             //buf.append(formatPct(sendLostPct));
             buf.append(resent); // + "/" + peer.getPacketsPeriodRetransmitted() + "/" + sent);
             //buf.append(peer.getPacketRetransmissionRate());
-            buf.append("</code></td>");
+            buf.append("</td>");
             
             double recvDupPct = (double)peer.getPacketsReceivedDuplicate()/(double)peer.getPacketsReceived();
-            buf.append("<td align=\"right\" ><code>");
+            buf.append(" <td class=\"cells\" align=\"center\" >");
             buf.append(dupRecv); //formatPct(recvDupPct));
-            buf.append("</code></td>");
+            buf.append("</td>");
 
             buf.append("</tr>\n");
             out.write(buf.toString());
@@ -1980,25 +1980,25 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
             numPeers++;
         }
         
-        buf.append("<tr><td colspan=\"16\"><hr /></td></tr>\n");
-        buf.append(" <tr><td colspan=\"3\"><b>Total</b></td>");
-        buf.append("     <td align=\"right\">");
+//        buf.append("<tr><td colspan=\"16\"><hr /></td></tr>\n");
+        buf.append(" <tr class=\"tablefooter\"> <td colspan=\"3\" align=\"right\"><b>Total</b></td>");
+        buf.append("      <td align=\"center\" nowrap><b>");
         buf.append(formatKBps(bpsIn)).append("/").append(formatKBps(bpsOut));
-        buf.append("KBps</td>");
-        buf.append("     <td align=\"right\">").append(numPeers > 0 ? DataHelper.formatDuration(uptimeMsTotal/numPeers) : "0s");
-        buf.append("</td><td align=\"right\">").append(numPeers > 0 ? DataHelper.formatDuration(offsetTotal*1000/numPeers) : "0ms").append("</td>\n");
-        buf.append("     <td align=\"right\">");
+        buf.append("K/s</b></td>");
+        buf.append("      <td align=\"center\"><b>").append(numPeers > 0 ? DataHelper.formatDuration(uptimeMsTotal/numPeers) : "0s");
+        buf.append("</b></td> <td align=\"center\"><b>").append(numPeers > 0 ? DataHelper.formatDuration(offsetTotal*1000/numPeers) : "0ms").append("</b></td>\n");
+        buf.append("      <td align=\"center\"><b>");
         buf.append(numPeers > 0 ? cwinTotal/(numPeers*1024) + "K" : "0K");
-        buf.append("</td><td>&nbsp;</td>\n");
-        buf.append("     <td align=\"right\">");
+        buf.append("</b></td> <td>&nbsp;</td>\n");
+        buf.append("      <td align=\"center\"><b>");
         buf.append(numPeers > 0 ? rttTotal/numPeers : 0);
-        buf.append("</td><td align=\"right\">&nbsp;</td><td align=\"right\">");
+        buf.append("</b></td> <td>&nbsp;</td> <td align=\"center\"><b>");
         buf.append(numPeers > 0 ? rtoTotal/numPeers : 0);
-        buf.append("</td>\n     <td>&nbsp;</td><td align=\"right\">");
-        buf.append(sendTotal).append("</td><td align=\"right\">").append(recvTotal).append("</td>\n");
-        buf.append("     <td align=\"right\">").append(resentTotal);
-        buf.append("</td><td align=\"right\">").append(dupRecvTotal).append("</td>\n");
-        buf.append(" </tr></table></p><p>\n");
+        buf.append("</b></td>\n      <td>&nbsp;</td> <td align=\"center\"><b>");
+        buf.append(sendTotal).append("</td></b> <td align=\"center\"><b>").append(recvTotal).append("</b></td>\n");
+        buf.append("      <td align=\"center\"><b>").append(resentTotal);
+        buf.append("</b></td> <td align=\"center\"><b>").append(dupRecvTotal).append("</b></td>\n");
+        buf.append(" </tr></table></div></p><p>\n");
         long bytesTransmitted = _context.bandwidthLimiter().getTotalAllocatedOutboundBytes();
         // NPE here early
         double averagePacketSize = _context.statManager().getRate("udp.sendPacketSize").getLifetimeAverageValue();
@@ -2006,8 +2006,8 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
         resentTotal = (long)_context.statManager().getRate("udp.packetsRetransmitted").getLifetimeEventCount();
         double nondupSent = ((double)bytesTransmitted - ((double)resentTotal)*averagePacketSize);
         double bwResent = (nondupSent <= 0 ? 0d : ((((double)resentTotal)*averagePacketSize) / nondupSent));
-        buf.append("Percentage of bytes retransmitted (lifetime): ").append(formatPct(bwResent));
-        buf.append(" <i>(includes retransmission required by packet loss)</i><br /></p>\n");
+        buf.append("<h3>Percentage of bytes retransmitted (lifetime): ").append(formatPct(bwResent));
+        buf.append("</h3><i>(Includes retransmission required by packet loss)</i><br /></p>\n");
         out.write(buf.toString());
         buf.setLength(0);
         out.write(KEY);
@@ -2026,27 +2026,27 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
         }
     }
     
-    private static final String KEY = "<p>" +
-        "<b id=\"def.peer\">peer</b>: the remote peer<br />\n" +
-        "<b id=\"def.dir\">dir</b>: v means they offer to introduce us, ^ means we offer to introduce them<br />\n" +
-        "<b id=\"def.idle\">idle</b>: the idle time is how long since a packet has been received or sent<br />\n" +
-        "<b id=\"def.rate\">in/out</b>: the rates show a smoothed inbound and outbound transfer rate (KBytes per second)<br />\n" +
-        "<b id=\"def.up\">up</b>: the uptime is how long ago this session was established<br />\n" +
-        "<b id=\"def.skew\">skew</b>: the skew says how far off the other user's clock is, relative to your own<br />\n" +
-        "<b id=\"def.cwnd\">cwnd</b>: the congestion window is how many bytes in 'in flight' you can send w/out an acknowledgement / <br />\n" +
-        "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the number of currently active messages being sent /<br />\n" +
-        "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the maximum number of concurrent messages to send /<br />\n"+ 
-        "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the number of consecutive sends which were blocked due to throws message window size<br />\n" +
-        "<b id=\"def.ssthresh\">ssthresh</b>: the slow start threshold help make sure the cwnd doesn't grow too fast<br />\n" +
-        "<b id=\"def.rtt\">rtt</b>: the round trip time is how long it takes to get an acknowledgement of a packet<br />\n" +
-        "<b id=\"def.dev\">dev</b>: the standard deviation of the round trip time, to help control the retransmit timeout<br />\n" +
-        "<b id=\"def.rto\">rto</b>: the retransmit timeout controls how frequently an unacknowledged packet will be retransmitted<br />\n" +
-        "<b id=\"def.mtu\">mtu</b>: current sending packet size / estimated receiving packet size<br />\n" +
-        "<b id=\"def.send\">send</b>: the number of packets sent to the peer<br />\n" +
-        "<b id=\"def.recv\">recv</b>: the number of packets received from the peer<br />\n" +
-        "<b id=\"def.resent\">resent</b>: the number of packets retransmitted to the peer<br />\n" +
-        "<b id=\"def.dupRecv\">dupRecv</b>: the number of duplicate packets received from the peer" +
-        "</p>\n";
+    private static final String KEY = "<h3>Definitions:</h3><div class=\"configure\">" +
+        "<br><b id=\"def.peer\">Peer</b>: the remote peer.<br />\n" +
+        "<b id=\"def.dir\">Dir</b>: v means they offer to introduce us, ^ means we offer to introduce them.<br />\n" +
+        "<b id=\"def.idle\">Idle</b>: the idle time is how long since a packet has been received or sent.<br />\n" +
+        "<b id=\"def.rate\">In/out</b>: the rates show a smoothed inbound and outbound transfer rate (KBytes per second).<br />\n" +
+        "<b id=\"def.up\">Up</b>: the uptime is how long ago this session was established.<br />\n" +
+        "<b id=\"def.skew\">Skew</b>: the skew says how far off the other user's clock is, relative to your own.<br />\n" +
+        "<b id=\"def.cwnd\">Cwnd</b>: the congestion window is how many bytes in 'in flight' you can send w/out an acknowledgement, / <br />\n" +
+        "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the number of currently active messages being sent, /<br />\n" +
+        "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the maximum number of concurrent messages to send, /<br />\n"+ 
+        "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the number of consecutive sends which were blocked due to throws message window size.<br />\n" +
+        "<b id=\"def.ssthresh\">Sst</b>: the slow start threshold helps make sure the cwnd doesn't grow too fast.<br />\n" +
+        "<b id=\"def.rtt\">Rtt</b>: the round trip time is how long it takes to get an acknowledgement of a packet.<br />\n" +
+        "<b id=\"def.dev\">Dev</b>: the standard deviation of the round trip time, to help control the retransmit timeout.<br />\n" +
+        "<b id=\"def.rto\">Rto</b>: the retransmit timeout controls how frequently an unacknowledged packet will be retransmitted.<br />\n" +
+        "<b id=\"def.mtu\">Mtu</b>: current sending packet size / estimated receiving packet size.<br />\n" +
+        "<b id=\"def.send\">TX</b>: the number of packets sent to the peer.<br />\n" +
+        "<b id=\"def.recv\">RX</b>: the number of packets received from the peer.<br />\n" +
+        "<b id=\"def.resent\">ReTX</b>: the number of packets retransmitted to the peer.<br />\n" +
+        "<b id=\"def.dupRecv\">DupRX</b>: the number of duplicate packets received from the peer." +
+        "</div>\n";
     
     /**
      * Cache the bid to reduce object churn
diff --git a/router/java/src/net/i2p/router/tunnel/pool/TunnelPoolManager.java b/router/java/src/net/i2p/router/tunnel/pool/TunnelPoolManager.java
index 7524e12c33a3f6158dc91ee66abe30575def3d35..7b86ba83b1247a48ae738ed3cf290a6e28350ab0 100644
--- a/router/java/src/net/i2p/router/tunnel/pool/TunnelPoolManager.java
+++ b/router/java/src/net/i2p/router/tunnel/pool/TunnelPoolManager.java
@@ -405,7 +405,7 @@ public class TunnelPoolManager implements TunnelManagerFacade {
     
     
     public void renderStatusHTML(Writer out) throws IOException {
-        out.write("<h2><a name=\"exploratory\" ></a>Exploratory tunnels (<a href=\"/configtunnels.jsp#exploratory\">config</a>):</h2>\n");
+        out.write("<div class=\"wideload\"><h2><a name=\"exploratory\" ></a>Exploratory tunnels (<a href=\"/configtunnels.jsp#exploratory\">config</a>):</h2>\n");
         renderPool(out, _inboundExploratory, _outboundExploratory);
         
         List destinations = null;
@@ -455,41 +455,41 @@ public class TunnelPoolManager implements TunnelManagerFacade {
             }
             out.write("<tr>");
             if (cfg.getReceiveTunnel() != null)
-                out.write("<td align=\"center\">" + cfg.getReceiveTunnel().getTunnelId() +"</td>");
+                out.write(" <td class=\"cells\" align=\"center\">" + cfg.getReceiveTunnel().getTunnelId() +"</td>");
             else
-                out.write("<td align=\"center\">n/a</td>");
+                out.write(" <td class=\"cells\" align=\"center\">n/a</td>");
             if (cfg.getReceiveFrom() != null)
-                out.write("<td align=\"right\">" + netDbLink(cfg.getReceiveFrom()) +"</td>");
+                out.write(" <td class=\"cells\" align=\"right\">" + netDbLink(cfg.getReceiveFrom()) +"</td>");
             else
-                out.write("<td align=\"center\">&nbsp;</td>");
+                out.write(" <td class=\"cells\" align=\"center\">&nbsp;</td>");
             if (cfg.getSendTunnel() != null)
-                out.write("<td align=\"center\">" + cfg.getSendTunnel().getTunnelId() +"</td>");
+                out.write(" <td class=\"cells\" align=\"center\">" + cfg.getSendTunnel().getTunnelId() +"</td>");
             else
-                out.write("<td align=\"center\">&nbsp;</td>");
+                out.write(" <td class=\"cells\" align=\"center\">&nbsp;</td>");
             if (cfg.getSendTo() != null)
-                out.write("<td align=\"center\">" + netDbLink(cfg.getSendTo()) +"</td>");
+                out.write(" <td class=\"cells\" align=\"center\">" + netDbLink(cfg.getSendTo()) +"</td>");
             else
-//                out.write("<td align=\"center\">&nbsp;</td>");
-                out.write("<td align=\"center\">&nbsp;</td>");
+//                out.write(" <td class=\"cells\" align=\"center\">&nbsp;</td>");
+                out.write(" <td class=\"cells\" align=\"center\">&nbsp;</td>");
             long timeLeft = cfg.getExpiration()-_context.clock().now();
             if (timeLeft > 0)
-                out.write("<td align=\"center\">" + DataHelper.formatDuration(timeLeft) + "</td>");
+                out.write(" <td class=\"cells\" align=\"center\">" + DataHelper.formatDuration(timeLeft) + "</td>");
             else
-                out.write("<td align=\"center\">(grace period)</td>");
-            out.write("<td align=\"center\">" + cfg.getProcessedMessagesCount() + "KB</td>");
+                out.write(" <td class=\"cells\" align=\"center\">(grace period)</td>");
+            out.write(" <td class=\"cells\" align=\"center\">" + cfg.getProcessedMessagesCount() + "KB</td>");
             int lifetime = (int) ((_context.clock().now() - cfg.getCreation()) / 1000);
             if (lifetime <= 0)
                 lifetime = 1;
             if (lifetime > 10*60)
                 lifetime = 10*60;
             int bps = 1024 * (int) cfg.getProcessedMessagesCount() / lifetime;
-            out.write("<td align=\"center\">" + bps + "Bps</td>");
+            out.write(" <td class=\"cells\" align=\"center\">" + bps + "Bps</td>");
             if (cfg.getSendTo() == null)
-                out.write("<td align=\"center\">Outbound Endpoint</td>");
+                out.write(" <td class=\"cells\" align=\"center\">Outbound Endpoint</td>");
             else if (cfg.getReceiveFrom() == null)
-                out.write("<td align=\"center\">Inbound Gateway</td>");
+                out.write(" <td class=\"cells\" align=\"center\">Inbound Gateway</td>");
             else
-                out.write("<td align=\"center\">Participant</td>");
+                out.write(" <td class=\"cells\" align=\"center\">Participant</td>");
             out.write("</tr>\n");
             processed += cfg.getProcessedMessagesCount();
         }
@@ -543,23 +543,23 @@ public class TunnelPoolManager implements TunnelManagerFacade {
                 continue; // don't display tunnels in their grace period
             live++;
             if (info.isInbound())
-                out.write("<tr><td align=\"center\"><img src=\"/themes/console/images/inbound.png\" alt=\"Inbound\" title=\"Inbound\"/></td>");
+                out.write("<tr> <td class=\"cells\" align=\"center\"><img src=\"/themes/console/images/inbound.png\" alt=\"Inbound\" title=\"Inbound\"/></td>");
             else
-                out.write("<tr><td align=\"center\"><img src=\"/themes/console/images/outbound.png\" alt=\"Outbound\" title=\"Outbound\"/></td>");
-            out.write("<td align=\"center\">" + DataHelper.formatDuration(timeLeft) + "</td>\n");
-            out.write("<td align=\"center\">" + info.getProcessedMessagesCount() + "KB</td>\n");
+                out.write("<tr> <td class=\"cells\" align=\"center\"><img src=\"/themes/console/images/outbound.png\" alt=\"Outbound\" title=\"Outbound\"/></td>");
+            out.write(" <td class=\"cells\" align=\"center\">" + DataHelper.formatDuration(timeLeft) + "</td>\n");
+            out.write(" <td class=\"cells\" align=\"center\">" + info.getProcessedMessagesCount() + "KB</td>\n");
             for (int j = 0; j < info.getLength(); j++) {
                 Hash peer = info.getPeer(j);
                 TunnelId id = (info.isInbound() ? info.getReceiveTunnelId(j) : info.getSendTunnelId(j));
                 if (_context.routerHash().equals(peer)) {
-                    out.write("<td align=\"center\">" + (id == null ? "" : "" + id) + "</td>");
+                    out.write(" <td class=\"cells\" align=\"center\">" + (id == null ? "" : "" + id) + "</td>");
                 } else {
                     String cap = getCapacity(peer);
-                    out.write("<td align=\"center\">" + netDbLink(peer) + (id == null ? "" : " " + id) + cap + "</td>");                
+                    out.write(" <td class=\"cells\" align=\"center\">" + netDbLink(peer) + (id == null ? "" : " " + id) + cap + "</td>");                
                 }
                 if (info.getLength() < maxLength && (info.getLength() == 1 || j == info.getLength() - 2)) {
                     for (int k = info.getLength(); k < maxLength; k++)
-                        out.write("<td align=\"center\">&nbsp</td>");
+                        out.write(" <td class=\"cells\" align=\"center\">&nbsp</td>");
                 }
             }
             out.write("</tr>\n");
@@ -583,8 +583,8 @@ public class TunnelPoolManager implements TunnelManagerFacade {
             live += pending.size();
         }
         if (live <= 0)
-            out.write("<div class=\"statusnotes\"><center>N<b>No tunnels; waiting for the grace period to end.</center></b></div>\n");
-        out.write("<div class=\"statusnotes\"><center><b>Lifetime bandwidth usage: " + DataHelper.formatSize(processedIn*1024) + "<B in, " +
+            out.write("<div class=\"statusnotes\"><center><b>No tunnels; waiting for the grace period to end.</center></b></div>\n");
+        out.write("<div class=\"statusnotes\"><center><b>Lifetime bandwidth usage: " + DataHelper.formatSize(processedIn*1024) + "B in, " +
                   DataHelper.formatSize(processedOut*1024) + "B out</b></center></div>");
     }
     
@@ -605,25 +605,25 @@ public class TunnelPoolManager implements TunnelManagerFacade {
         out.write("<h2><a name=\"peers\"></a>Tunnel Counts By Peer:</h2>\n");
         out.write("<table><tr><th>Peer</th><th>Expl. + Client</th><th>% of total</th><th>Part. from + to</th><th>% of total</th></tr>\n");
         for (Hash h : peerList) {
-             out.write("<tr><td align=\"center\">");
+             out.write("<tr> <td class=\"cells\" align=\"center\">");
              out.write(netDbLink(h));
-             out.write("<td align=\"center\">" + lc.count(h));
-             out.write("<td align=\"center\">");
+             out.write(" <td class=\"cells\" align=\"center\">" + lc.count(h));
+             out.write(" <td class=\"cells\" align=\"center\">");
              if (tunnelCount > 0)
                  out.write("" + (lc.count(h) * 100 / tunnelCount));
              else
                  out.write('0');
-             out.write("<td align=\"center\">" + pc.count(h));
-             out.write("<td align=\"center\">");
+             out.write(" <td class=\"cells\" align=\"center\">" + pc.count(h));
+             out.write(" <td class=\"cells\" align=\"center\">");
              if (partCount > 0)
                  out.write("" + (pc.count(h) * 100 / partCount));
              else
                  out.write('0');
              out.write('\n');
         }
-        out.write("<tr><td align=\"center\"><b>Tunnels</b><td align=\"center\"><b>" + tunnelCount);
-        out.write("</b><td>&nbsp;</td><td align=\"center\"><b>" + partCount);
-        out.write("</b><td>&nbsp;</td></tr></table>\n");
+        out.write("<tr class=\"tablefooter\"> <td align=\"center\"><b>Tunnels</b> <td align=\"center\"><b>" + tunnelCount);
+        out.write("</b> <td>&nbsp;</td> <td align=\"center\"><b>" + partCount);
+        out.write("</b> <td>&nbsp;</td></tr></table></div>\n");
     }
 
     /** @return total number of non-fallback expl. + client tunnels */