diff --git a/apps/routerconsole/java/src/net/i2p/router/web/BanlistRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/BanlistRenderer.java
index 5dc9db8d2279c93b41404641dc09b7bbf0d1c8a5..0cf6c87447602aeb89ea0f338d43e0bc289d4c77 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/BanlistRenderer.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/BanlistRenderer.java
@@ -50,7 +50,7 @@ class BanlistRenderer {
             return;
         }
 
-        buf.append("<ul>");
+        buf.append("<ul id=\"banlist\">");
         
         for (Map.Entry<Hash, Banlist.Entry> e : entries.entrySet()) {
             Hash key = e.getKey();
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 69c4dca695610d7fd4e5f68d8e54e58c9b49ef0f..b2311f586dab62e1620e7818f6656eb527537133 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHelper.java
@@ -112,7 +112,7 @@ public class ConfigClientsHelper extends HelperBase {
     /** clients */
     public String getForm1() {
         StringBuilder buf = new StringBuilder(1024);
-        buf.append("<table>\n" +
+        buf.append("<table id=\"clientconfig\">\n" +
                    "<tr><th align=\"right\">").append(_t("Client")).append("</th><th>")
            .append(_t("Run at Startup?")).append("</th><th>")
            .append(_t("Control")).append("</th><th align=\"left\">")
@@ -198,7 +198,7 @@ public class ConfigClientsHelper extends HelperBase {
     /** webapps */
     public String getForm2() {
         StringBuilder buf = new StringBuilder(1024);
-        buf.append("<table>\n" +
+        buf.append("<table id=\"webappconfig\">\n" +
                    "<tr><th align=\"right\">").append(_t("WebApp")).append("</th><th>")
            .append(_t("Run at Startup?")).append("</th><th>")
            .append(_t("Control")).append("</th><th align=\"left\">")
@@ -227,7 +227,7 @@ public class ConfigClientsHelper extends HelperBase {
     /** plugins */
     public String getForm3() {
         StringBuilder buf = new StringBuilder(1024);
-        buf.append("<table>\n" +
+        buf.append("<table id=\"pluginconfig\">\n" +
                    "<tr><th align=\"right\">").append(_t("Plugin")).append("</th><th>")
            .append(_t("Run at Startup?")).append("</th><th>")
            .append(_t("Control")).append("</th><th align=\"left\">")
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 6e93602f4a441f280b6e6d73f9b9e4ad6a239448..3d51575a164b1662df1102884f6eae93ab012522 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigTunnelsHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigTunnelsHelper.java
@@ -26,7 +26,7 @@ public class ConfigTunnelsHelper extends HelperBase {
             cur++;
         }
 
-        buf.append("<table>\n");
+        buf.append("<table id=\"tunnelconfig\">\n");
         TunnelPoolSettings exploratoryIn = _context.tunnelManager().getInboundSettings();
         TunnelPoolSettings exploratoryOut = _context.tunnelManager().getOutboundSettings();
         
@@ -69,7 +69,7 @@ public class ConfigTunnelsHelper extends HelperBase {
 
         boolean advanced = isAdvanced();
 
-        buf.append("<tr><th colspan=\"3\"><a name=\"").append(prefix).append("\">");
+        buf.append("<tr><th colspan=\"3\" class=\"th_title\"><a name=\"").append(prefix).append("\">");
         buf.append(name).append("</a></th></tr>\n");
         if (in.getLength() <= 0 ||
             in.getLength() + in.getLengthVariance() <= 0 ||
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 491d014f00d35010503f62434d64fc9777171a0b..be3eb739a76df6e6952b043eeb3c0abf0bfc279f 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHelper.java
@@ -9,6 +9,7 @@ public class ConfigUIHelper extends HelperBase {
 
     public String getSettings() {
         StringBuilder buf = new StringBuilder(512);
+        buf.append("<div id=\"availablethemes\">");
         String current = _context.getProperty(CSSHelper.PROP_THEME_NAME, CSSHelper.DEFAULT_THEME);
         Set<String> themes = themeSet();
         for (String theme : themes) {
@@ -18,6 +19,7 @@ public class ConfigUIHelper extends HelperBase {
             buf.append("value=\"").append(theme).append("\">").append(_t(theme)).append("<br>\n");
         }
         boolean universalTheming = _context.getBooleanProperty(CSSHelper.PROP_UNIVERSAL_THEMING);
+        buf.append("</div><div id=\"themeoptions\">");
         buf.append("<input type=\"checkbox\" name=\"universalTheming\" ");
         if (universalTheming)
             buf.append(CHECKED);
@@ -35,7 +37,7 @@ public class ConfigUIHelper extends HelperBase {
             buf.append(CHECKED);
         buf.append("value=\"1\">")
            .append(_t("Force the mobile console to be used"))
-           .append("<br>\n");
+           .append("</div>\n");
         return buf.toString();
     }
 
@@ -164,7 +166,7 @@ public class ConfigUIHelper extends HelperBase {
         StringBuilder buf = new StringBuilder(512);
         ConsolePasswordManager mgr = new ConsolePasswordManager(_context);
         Map<String, String> userpw = mgr.getMD5(RouterConsoleRunner.PROP_CONSOLE_PW);
-        buf.append("<table>");
+        buf.append("<table id=\"consolepass\">");
         if (userpw.isEmpty()) {
             buf.append("<tr><td colspan=\"3\">");
             buf.append(_t("Add a user and password to enable."));
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/EventLogHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/EventLogHelper.java
index 9dd7892f2801fadcb57b7b1e4ecba18d8c4d93f2..4d63725af1f9b548210b6937c05ed6bae2692e16 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/EventLogHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/EventLogHelper.java
@@ -99,7 +99,7 @@ public class EventLogHelper extends FormHandler {
         // So just use the "shared/console nonce".
         String nonce = CSSHelper.getNonce();
         try {
-            _out.write("<br><h3>" + _t("Display Events") + "</h3>");
+            _out.write("<br><h3 id=\"displayevents\">" + _t("Display Events") + "</h3>");
             _out.write("<form action=\"events\" method=\"POST\">\n" +
                        "<input type=\"hidden\" name=\"action\" value=\"save\">\n" +
                        "<input type=\"hidden\" name=\"nonce\" value=\"" + nonce + "\" >\n");
@@ -175,7 +175,7 @@ public class EventLogHelper extends FormHandler {
             return _t("No \"{0}\" events found in previous {1}", xev, DataHelper.formatDuration2(_age));
         }
         StringBuilder buf = new StringBuilder(2048);
-        buf.append("<table><tr><th>");
+        buf.append("<table id=\"eventlog\"><tr><th>");
         buf.append(_t("Time"));
         buf.append("</th><th>");
         if (isAll) {
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/FileDumpHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/FileDumpHelper.java
index af20743948a32d72305d9ccd2fdffea5a6d079bb..69acafa8067fc3234e2f1d76b422693efda07b6b 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/FileDumpHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/FileDumpHelper.java
@@ -29,7 +29,7 @@ public class FileDumpHelper extends HelperBase {
     
     public String getFileSummary() {
         StringBuilder buf = new StringBuilder(16*1024);
-        buf.append("<table><tr><th>File</th><th>Size</th><th>Date</th><th>SHA 256</th><th>Revision</th>" +
+        buf.append("<table id=\"jardump\"><tr><th>File</th><th>Size</th><th>Date</th><th>SHA 256</th><th>Revision</th>" +
                    "<th>JDK</th><th>Built</th><th>By</th><th>Mods</th></tr>");
 
         // jars added in wrapper.config
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 5beb2ba232b3664120322d753e731e879fe34842..8deb80b1d21d76f571c7d2ce6d552122a3591d66 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/GraphHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/GraphHelper.java
@@ -232,12 +232,12 @@ public class GraphHelper extends FormHandler {
                 name = r.getRateStat().getName();
                 displayName = name;
             }
-            _out.write("<h3>");
+            _out.write("<h3 id=\"graphinfo\">");
             _out.write(_t("{0} for {1}", displayName, DataHelper.formatDuration2(_periodCount * period)));
             if (_end > 0)
                 _out.write(' ' + _t("ending {0} ago", DataHelper.formatDuration2(_end * period)));
 
-            _out.write("</h3><img class=\"statimage\" border=\"0\""
+            _out.write("</h3><div class=\"graphspanel\"><img class=\"statimage\" border=\"0\""
                        + " src=\"viewstat.jsp?stat="
                        + name
                        + "&amp;showEvents=" + _showEvents
@@ -246,7 +246,7 @@ public class GraphHelper extends FormHandler {
                        + "&amp;end=" + _end 
                        + "&amp;width=" + _width
                        + "&amp;height=" + _height
-                       + "\"><p>\n");
+                       + "\"></div><p id=\"graphopts\">\n");
 
             if (_width < MAX_X && _height < MAX_Y) {
                 _out.write(link(_stat, _showEvents, _periodCount, _end, _width * 3 / 2, _height * 3 / 2));
@@ -353,7 +353,7 @@ public class GraphHelper extends FormHandler {
         // So just use the "shared/console nonce".
         String nonce = CSSHelper.getNonce();
         try {
-            _out.write("<br><h3>" + _t("Configure Graph Display") + " [<a href=\"configstats\">" + _t("Select Stats") + "</a>]</h3>");
+            _out.write("<br><h3 id=\"graphdisplay\">" + _t("Configure Graph Display") + " [<a href=\"configstats\">" + _t("Select Stats") + "</a>]</h3>");
             _out.write("<form action=\"graphs\" method=\"POST\">\n" +
                        "<input type=\"hidden\" name=\"action\" value=\"save\">\n" +
                        "<input type=\"hidden\" name=\"nonce\" value=\"" + nonce + "\" >\n");
@@ -384,7 +384,7 @@ public class GraphHelper extends FormHandler {
             if (persistent)
                 _out.write(HelperBase.CHECKED);
             _out.write(">" +
-                       "<hr><div class=\"formaction\"><input type=\"submit\" class=\"accept\" value=\"" + _t("Save settings and redraw graphs") + "\"></div></form>");
+                       "<hr><div class=\"formaction\" id=\"graphing\"><input type=\"submit\" class=\"accept\" value=\"" + _t("Save settings and redraw graphs") + "\"></div></form>");
         } catch (IOException ioe) {
             ioe.printStackTrace();
         }
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/HomeHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/HomeHelper.java
index c625ac19ec8322078f32097d1c71058e28619f7d..45800b9070a3cade12d07ecfff743b99df552d28 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/HomeHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/HomeHelper.java
@@ -211,7 +211,7 @@ public class HomeHelper extends HelperBase {
 
     private String renderConfig(Collection<App> apps) {
         StringBuilder buf = new StringBuilder(1024);
-        buf.append("<table><tr><th>")
+        buf.append("<table class=\"homelinkedit\"><tr><th>")
            .append(_t("Remove"))
            .append("</th><th colspan=\"2\">")
            .append(_t("Name"))
@@ -238,7 +238,7 @@ public class HomeHelper extends HelperBase {
                 buf.append(url);
             buf.append("</a></td></tr>\n");
         }
-        buf.append("<tr><td colspan=\"2\" align=\"center\"><b>")
+        buf.append("<tr id=\"addnew\"><td colspan=\"2\" align=\"center\"><b>")
            .append(_t("Add")).append(":</b>" +
                    "</td><td align=\"left\"><input type=\"text\" name=\"nofilter_name\"></td>" +
                    "<td align=\"left\"><input type=\"text\" size=\"40\" name=\"nofilter_url\"></td></tr>");
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/JobQueueHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/JobQueueHelper.java
index 7bc28287fb588aea42b170555dfcd97c8da354fd..01fc5c467abcbf4267ae2f7b972028f4be86cff7 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/JobQueueHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/JobQueueHelper.java
@@ -120,7 +120,7 @@ public class JobQueueHelper extends HelperBase {
         List<String> names = new ArrayList<String>(counter.objects());
         if (names.size() < 4)
             return;
-        buf.append("<table style=\"width: 30%; margin-left: 100px;\">\n" +
+        buf.append("<table id=\"schedjobs\" style=\"width: 30%; margin-left: 100px;\">\n" +
                    "<tr><th>").append(_t("Job")).append("</th><th>").append(_t("Queued")).append("<th>");
         Collections.sort(names, new JobCountComparator(counter));
         for (String name : names) {
@@ -137,7 +137,7 @@ public class JobQueueHelper extends HelperBase {
      *  @since 0.8.9
      */
     private void getJobStats(StringBuilder buf) { 
-        buf.append("<table>\n" +
+        buf.append("<table id=\"jobstats\">\n" +
                    "<tr><th>").append(_t("Job")).append("</th><th>").append(_t("Runs")).append("</th>" +
                    "<th>").append(_t("Dropped")).append("</th>" +
                    "<th>").append(_t("Time")).append("</th><th><i>").append(_t("Avg")).append("</i></th><th><i>")
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java
index c9a34ece06d5e9f7764d32e6b9b95b0a3fc84fef..199c076053692339694a71b4968f85fa420ac69e 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java
@@ -124,7 +124,7 @@ class NetDbRenderer {
     public void renderLeaseSetHTML(Writer out, boolean debug) throws IOException {
         StringBuilder buf = new StringBuilder(4*1024);
         if (debug)
-            buf.append("<p>Debug mode - Sorted by hash distance, closest first</p>\n");
+            buf.append("<p id=\"debugmode\">Debug mode - Sorted by hash distance, closest first</p>\n");
         Hash ourRKey;
         Set<LeaseSet> leases;
         DecimalFormat fmt;
@@ -338,14 +338,14 @@ class NetDbRenderer {
      if (!showStats) {
 
         // the summary table
-        buf.append("<table border=\"0\" cellspacing=\"30\"><tr><th colspan=\"3\">")
+        buf.append("<table id=\"netdboverview\" border=\"0\" cellspacing=\"30\"><tr><th colspan=\"3\">")
            .append(_t("Network Database Router Statistics"))
            .append("</th></tr><tr><td style=\"vertical-align: top;\">");
         // versions table
         List<String> versionList = new ArrayList<String>(versions.objects());
         if (!versionList.isEmpty()) {
             Collections.sort(versionList, Collections.reverseOrder(new VersionComparator()));
-            buf.append("<table>\n");
+            buf.append("<table id=\"netdbversions\">\n");
             buf.append("<tr><th>" + _t("Version") + "</th><th>" + _t("Count") + "</th></tr>\n");
             for (String routerVersion : versionList) {
                 int num = versions.count(routerVersion);
@@ -364,7 +364,7 @@ class NetDbRenderer {
         start = end;
             
         // transports table
-        buf.append("<table>\n");
+        buf.append("<table id=\"netdbtransports\">\n");
         buf.append("<tr><th align=\"left\">" + _t("Transports") + "</th><th>" + _t("Count") + "</th></tr>\n");
         for (int i = 0; i < TNAMES.length; i++) {
             int num = transportCount[i];
@@ -386,7 +386,7 @@ class NetDbRenderer {
         List<String> countryList = new ArrayList<String>(countries.objects());
         if (!countryList.isEmpty()) {
             Collections.sort(countryList, new CountryComparator());
-            buf.append("<table>\n");
+            buf.append("<table id=\"netdbcountrylist\">\n");
             buf.append("<tr><th align=\"left\">" + _t("Country") + "</th><th>" + _t("Count") + "</th></tr>\n");
             for (String country : countryList) {
                 int num = countries.count(country);
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ProfileOrganizerRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/ProfileOrganizerRenderer.java
index b43fd2518012e0f5eae2203005e455dba492e372..c81c64a28592218dd01ff0665e388803532a252d 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ProfileOrganizerRenderer.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ProfileOrganizerRenderer.java
@@ -78,13 +78,14 @@ class ProfileOrganizerRenderer {
       if (mode < 2) {
 
         //buf.append("<h2>").append(_t("Peer Profiles")).append("</h2>\n<p>");
+        buf.append("<p id=\"profiles_overview\" class=\"infohelp\">");
         buf.append(ngettext("Showing 1 recent profile.", "Showing {0} recent profiles.", order.size())).append('\n');
         if (older > 0)
             buf.append(ngettext("Hiding 1 older profile.", "Hiding {0} older profiles.", older)).append('\n');
         if (standard > 0)
             buf.append("<a href=\"/profiles?f=1\">").append(ngettext("Hiding 1 standard profile.", "Hiding {0} standard profiles.", standard)).append("</a>\n");
         buf.append("</p>");
-                   buf.append("<table>");
+                   buf.append("<table id=\"profiles\">");
                    buf.append("<tr>");
                    buf.append("<th>").append(_t("Peer")).append("</th>");
                    buf.append("<th>").append(_t("Groups (Caps)")).append("</th>");
@@ -197,7 +198,7 @@ class ProfileOrganizerRenderer {
 
         //buf.append("<h2><a name=\"flood\"></a>").append(_t("Floodfill and Integrated Peers"))
         //   .append(" (").append(integratedPeers.size()).append(")</h2>\n");
-        buf.append("<table>");
+        buf.append("<div class=\"widescroll\"><table id=\"floodfills\">");
         buf.append("<tr>");
         buf.append("<th class=\"smallhead\">").append(_t("Peer")).append("</th>");
         buf.append("<th class=\"smallhead\">").append(_t("Caps")).append("</th>");
@@ -250,7 +251,7 @@ class ProfileOrganizerRenderer {
             }
             buf.append("</tr>\n");
         }
-        buf.append("</table>");
+        buf.append("</table></div>");
 
       ////
       //// don't bother reindenting
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/StatsGenerator.java b/apps/routerconsole/java/src/net/i2p/router/web/StatsGenerator.java
index 634940edf5407631ecfb1bfd29c908d4be82c545..46bebc78d12fa9ca37f0237183f859dda607633e 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/StatsGenerator.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/StatsGenerator.java
@@ -69,12 +69,12 @@ public class StatsGenerator {
         for (Map.Entry<String, Set<String>> entry : groups.entrySet()) {
             String group = entry.getKey();
             Set<String> stats = entry.getValue();
-            buf.append("<h3><a name=\"");
+            buf.append("<h3 class=\"stats\"><a name=\"");
             buf.append(group);
             buf.append("\">");
             buf.append(_t(group));
             buf.append("</a></h3>");
-            buf.append("<ul>");
+            buf.append("<ul class=\"statlist\">");
             out.write(buf.toString());
             buf.setLength(0);
             for (String stat : stats) {
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java
index e6fba2710960a609465cfab79141ec4d98a5a039..6ab412815928fcb644567a0972d4f8ce88f6cc2b 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java
@@ -139,7 +139,7 @@ class SummaryBarRenderer {
            .append(_t("I2P Services"))
            .append("</a></h3>\n" +
 
-                   "<hr class=\"b\"><table><tr><td>" +
+                   "<hr class=\"b\"><table id=\"services\"><tr><td>" +
 
                    "<a href=\"/susimail/susimail\" target=\"_blank\" title=\"")
            .append(_t("Anonymous webmail client"))
@@ -456,7 +456,7 @@ class SummaryBarRenderer {
            .append("\" target=\"_top\">")
            .append(_t("Bandwidth in/out"))
            .append("</a></h3><hr class=\"b\">" +
-                   "<table>\n" +
+                   "<table id=\"bandwidth\">\n" +
 
                    "<tr><td align=\"left\"><b>")
            .append(DataHelper.formatDuration2(3 * 1000))   // lie and say 3 sec since 1 sec would appear as 1000 ms
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java
index 75a55709fa03288818877c3f80238a50578d0039..94d51db91fe0db33e36cac933d74abc5ce50c787 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java
@@ -928,7 +928,7 @@ public class SummaryHelper extends HelperBase {
         String imgPath = CSSHelper.BASE_THEME_PATH + theme + "/images/";
 
         StringBuilder buf = new StringBuilder(2048);
-        buf.append("<table class=\"sidebarconf\"><tr><th>")
+        buf.append("<table id=\"sidebarconf\"><tr><th>")
            .append(_t("Remove"))
            .append("</th><th>")
            .append(_t("Name"))
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/SybilRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/SybilRenderer.java
index 98671a146fe49055105c8f47db120377aa24d577..abc818f11999ef97f1f7cc18c5fc6bbd9a6a4d8b 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/SybilRenderer.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/SybilRenderer.java
@@ -154,15 +154,15 @@ class SybilRenderer {
                  ris.add(ri);
         }
         if (ris.isEmpty()) {
-            out.write("<h3>No known floodfills</h3>");
+            out.write("<h3 class=\"sybils\">No known floodfills</h3>");
             return;
         }
 
         StringBuilder buf = new StringBuilder(4*1024);
-        buf.append("<p><b>This is an experimental network database tool for debugging and analysis. Do not panic even if you see warnings below. " +
+        buf.append("<p id=\"sybilinfo\"><b>This is an experimental network database tool for debugging and analysis. Do not panic even if you see warnings below. " +
                    "Possible \"threats\" are summarized at the bottom, however these are unlikely to be real threats. " +
                    "If you see anything you would like to discuss with the devs, contact us on IRC #i2p-dev.</b></p>" +
-                   "<ul><li><a href=\"#known\">FF Summary</a>" +
+                   "<div id=\"sybilnav\"><ul><li><a href=\"#known\">FF Summary</a>" +
                    "</li><li><a href=\"#family\">Same Family</a>" +
                    "</li><li><a href=\"#ourIP\">IP close to us</a>" +
                    "</li><li><a href=\"#sameIP\">Same IP</a>" +
@@ -174,10 +174,10 @@ class SybilRenderer {
                    "</li><li><a href=\"#dht\">DHT neighbors</a>" +
                    "</li><li><a href=\"#dest\">Close to our destinations</a>" +
                    "</li><li><a href=\"#threats\">Highest threats</a>" +
-                   "</li></ul>");
+                   "</li></ul></div>");
 
         renderRouterInfo(buf, _context.router().getRouterInfo(), null, true, false);
-        buf.append("<h3 id=\"known\">Known Floodfills: ").append(ris.size()).append("</h3>");
+        buf.append("<h3 id=\"known\" class=\"sybils\">Known Floodfills: ").append(ris.size()).append("</h3>");
 
         double tot = 0;
         int count = 200;
@@ -209,18 +209,18 @@ class SybilRenderer {
         renderPairDistance(out, buf, ris, points);
 
         // Distance to our router analysis
-        buf.append("<h3 id=\"ritoday\">Closest Floodfills to Our Routing Key (Where we Store our RI)</h3>");
+        buf.append("<h3 id=\"ritoday\" class=\"sybils\">Closest Floodfills to Our Routing Key (Where we Store our RI)</h3>");
         renderRouterInfoHTML(out, buf, ourRKey, avgMinDist, ris, points);
         RouterKeyGenerator rkgen = _context.routerKeyGenerator();
         Hash nkey = rkgen.getNextRoutingKey(us);
-        buf.append("<h3 id=\"ritmrw\">Closest Floodfills to Tomorrow's Routing Key (Where we will Store our RI)</h3>");
+        buf.append("<h3 id=\"ritmrw\" class=\"sybils\">Closest Floodfills to Tomorrow's Routing Key (Where we will Store our RI)</h3>");
         renderRouterInfoHTML(out, buf, nkey, avgMinDist, ris, points);
 
-        buf.append("<h3 id=\"dht\">Closest Floodfills to Our Router Hash (DHT Neighbors if we are Floodfill)</h3>");
+        buf.append("<h3 id=\"dht\" class=\"sybils\">Closest Floodfills to Our Router Hash (DHT Neighbors if we are Floodfill)</h3>");
         renderRouterInfoHTML(out, buf, us, avgMinDist, ris, points);
 
         // Distance to our published destinations analysis
-        buf.append("<h3 id=\"dest\">Floodfills Close to Our Destinations</h3>");
+        buf.append("<h3 id=\"dest\" class=\"sybils\">Floodfills Close to Our Destinations</h3>");
         Map<Hash, TunnelPool> clientInboundPools = _context.tunnelManager().getInboundClientPools();
         List<Hash> destinations = new ArrayList<Hash>(clientInboundPools.keySet());
         boolean debug = _context.getBooleanProperty(HelperBase.PROP_ADVANCED);
@@ -236,10 +236,10 @@ class SybilRenderer {
             Hash rkey = ls.getRoutingKey();
             TunnelPool in = clientInboundPools.get(client);
             String name = (in != null) ? in.getSettings().getDestinationNickname() : client.toBase64().substring(0,4);
-            buf.append("<h3>Closest floodfills to the Routing Key for " + DataHelper.escapeHTML(name) + " (where we store our LS)</h3>");
+            buf.append("<h3 class=\"sybils\">Closest floodfills to the Routing Key for " + DataHelper.escapeHTML(name) + " (where we store our LS)</h3>");
             renderRouterInfoHTML(out, buf, rkey, avgMinDist, ris, points);
             nkey = rkgen.getNextRoutingKey(ls.getHash());
-            buf.append("<h3>Closest floodfills to Tomorrow's Routing Key for " + DataHelper.escapeHTML(name) + " (where we will store our LS)</h3>");
+            buf.append("<h3 class=\"sybils\">Closest floodfills to Tomorrow's Routing Key for " + DataHelper.escapeHTML(name) + " (where we will store our LS)</h3>");
             renderRouterInfoHTML(out, buf, nkey, avgMinDist, ris, points);
         }
 
@@ -250,7 +250,7 @@ class SybilRenderer {
         if (!points.isEmpty()) {
             List<Hash> warns = new ArrayList<Hash>(points.keySet());
             Collections.sort(warns, new PointsComparator(points));
-            buf.append("<h3 id=\"threats\">Routers with Most Threat Points</h3>");
+            buf.append("<h3 id=\"threats\" class=\"sybils\">Routers with Most Threat Points</h3>");
             for (Hash h : warns) {
                 RouterInfo ri = _context.netDb().lookupRouterInfoLocally(h);
                 if (ri == null)
@@ -259,7 +259,7 @@ class SybilRenderer {
                 double p = pp.points;
                 if (p < MIN_DISPLAY_POINTS)
                     break;  // sorted
-                buf.append("<p><b>Threat Points: " + fmt.format(p) + "</b><ul>");
+                buf.append("<p class=\"threatpoints\"><b>Threat Points: " + fmt.format(p) + "</b><ul>");
                 for (String s : pp.reasons) {
                     buf.append("<li>").append(s).append("</li>");
                 }
@@ -307,9 +307,9 @@ class SybilRenderer {
         }
 
         double avg = total / (sz * sz / 2);
-        buf.append("<h3>Average Floodfill Distance is ").append(fmt.format(avg)).append("</h3>");
+        buf.append("<h3 class=\"sybils\">Average Floodfill Distance is ").append(fmt.format(avg)).append("</h3>");
 
-        buf.append("<h3 id=\"pairs\">Closest Floodfill Pairs by Hash</h3>");
+        buf.append("<h3 id=\"pairs\" class=\"sybils\">Closest Floodfill Pairs by Hash</h3>");
         for (Pair p : pairs) {
             double distance = biLog2(p.dist);
             double point = MIN_CLOSE - distance;
@@ -317,7 +317,7 @@ class SybilRenderer {
                 break;  // sorted;
             if (point >= 2) {
                 // limit display
-                buf.append("<p><b>Hash Distance: ").append(fmt.format(distance)).append(": </b>");
+                buf.append("<p class=\"hashdist\"><b>Hash Distance: ").append(fmt.format(distance)).append(": </b>");
                 buf.append("</p>");
                 renderRouterInfo(buf, p.r1, null, false, false);
                 renderRouterInfo(buf, p.r2, null, false, false);
@@ -386,14 +386,14 @@ class SybilRenderer {
         byte[] ourIP = getIP(us);
         if (ourIP == null)
             return;
-        buf.append("<h3 \"ourIP\">Floodfills close to Our IP</h3>");
+        buf.append("<h3 id=\"ourIP\" class=\"sybils\">Floodfills close to Our IP</h3>");
         boolean found = false;
         for (RouterInfo info : ris) {
             byte[] ip = getIP(info);
             if (ip == null)
                 continue;
             if (ip[0] == ourIP[0] && ip[1] == ourIP[1]) {
-                buf.append("<p><b>");
+                buf.append("<p id=\"sybil_floodfill\"><b>");
                 if (ip[2] == ourIP[2]) {
                     if (ip[3] == ourIP[3]) {
                         buf.append("Same IP as us");
@@ -412,14 +412,14 @@ class SybilRenderer {
             }
         }
         if (!found)
-            buf.append("<p>None</p>");
+            buf.append("<p class=\"notfound\">None</p>");
         out.write(buf.toString());
         out.flush();
         buf.setLength(0);
     }
 
     private void renderIPGroups32(Writer out, StringBuilder buf, List<RouterInfo> ris, Map<Hash, Points> points) throws IOException {
-        buf.append("<h3 id=\"sameIP\">Floodfills with the Same IP</h3>");
+        buf.append("<h3 id=\"sameIP\" class=\"sybils\">Floodfills with the Same IP</h3>");
         ObjectCounter<Integer> oc = new ObjectCounter<Integer>();
         for (RouterInfo info : ris) {
             byte[] ip = getIP(info);
@@ -443,7 +443,7 @@ class SybilRenderer {
             int i1 = (i >> 16) & 0xff;
             int i2 = (i >> 8) & 0xff;
             int i3 = i & 0xff;
-            buf.append("<p><b>").append(count).append(" floodfills with IP ").append(i0).append('.')
+            buf.append("<p class=\"sybil_floodfill\"><b>").append(count).append(" floodfills with IP ").append(i0).append('.')
                .append(i1).append('.').append(i2).append('.').append(i3)
                .append(":</b></p>");
             for (RouterInfo info : ris) {
@@ -465,14 +465,14 @@ class SybilRenderer {
             }
         }
         if (!found)
-            buf.append("<p>None</p>");
+            buf.append("<p class=\"notfound\">None</p>");
         out.write(buf.toString());
         out.flush();
         buf.setLength(0);
     }
 
     private void renderIPGroups24(Writer out, StringBuilder buf, List<RouterInfo> ris, Map<Hash, Points> points) throws IOException {
-        buf.append("<h3 id=\"same24\">Floodfills in the Same /24 (2 minimum)</h3>");
+        buf.append("<h3 id=\"same24\" class=\"sybils\">Floodfills in the Same /24 (2 minimum)</h3>");
         ObjectCounter<Integer> oc = new ObjectCounter<Integer>();
         for (RouterInfo info : ris) {
             byte[] ip = getIP(info);
@@ -495,7 +495,7 @@ class SybilRenderer {
             int i0 = i >> 16;
             int i1 = (i >> 8) & 0xff;
             int i2 = i & 0xff;
-            buf.append("<p><b>").append(count).append(" floodfills in ").append(i0).append('.')
+            buf.append("<p class=\"sybil_floodfill\"><b>").append(count).append(" floodfills in ").append(i0).append('.')
                .append(i1).append('.').append(i2).append(".0/24:</b></p>");
             for (RouterInfo info : ris) {
                 byte[] ip = getIP(info);
@@ -514,14 +514,14 @@ class SybilRenderer {
             }
         }
         if (!found)
-            buf.append("<p>None</p>");
+            buf.append("<p class=\"notfound\">None</p>");
         out.write(buf.toString());
         out.flush();
         buf.setLength(0);
     }
 
     private void renderIPGroups16(Writer out, StringBuilder buf, List<RouterInfo> ris, Map<Hash, Points> points) throws IOException {
-        buf.append("<h3 id=\"same16\">Floodfills in the Same /16 (4 minimum)</h3>");
+        buf.append("<h3 id=\"same16\" class=\"sybils\">Floodfills in the Same /16 (4 minimum)</h3>");
         ObjectCounter<Integer> oc = new ObjectCounter<Integer>();
         for (RouterInfo info : ris) {
             byte[] ip = getIP(info);
@@ -543,7 +543,7 @@ class SybilRenderer {
             int i = ii.intValue();
             int i0 = i >> 8;
             int i1 = i & 0xff;
-            buf.append("<p><b>").append(count).append(" floodfills in ").append(i0).append('.')
+            buf.append("<p class=\"sybil_floodfill\"><b>").append(count).append(" floodfills in ").append(i0).append('.')
                .append(i1).append(".0.0/16</b></p>");
             for (RouterInfo info : ris) {
                 byte[] ip = getIP(info);
@@ -561,14 +561,14 @@ class SybilRenderer {
             }
         }
         if (!found)
-            buf.append("<p>None</p>");
+            buf.append("<p class=\"notfound\">None</p>");
         out.write(buf.toString());
         out.flush();
         buf.setLength(0);
     }
 
     private void renderIPGroupsFamily(Writer out, StringBuilder buf, List<RouterInfo> ris, Map<Hash, Points> points) throws IOException {
-        buf.append("<h3>Floodfills in the Same Declared Family</h3>");
+        buf.append("<h3 id=\"samefamily\" class=\"sybils\">Floodfills in the Same Declared Family</h3>");
         ObjectCounter<String> oc = new ObjectCounter<String>();
         for (RouterInfo info : ris) {
             String fam = info.getOption("family");
@@ -581,7 +581,7 @@ class SybilRenderer {
         boolean found = false;
         for (String s : foo) {
             int count = oc.count(s);
-            buf.append("<p><b>").append(count).append(" floodfills in declared family \"").append(DataHelper.escapeHTML(s) + '"')
+            buf.append("<p  id=\"family\"><b>").append(count).append(" floodfills in declared family \"").append(DataHelper.escapeHTML(s) + '"')
                .append("</b></p>");
             for (RouterInfo info : ris) {
                 String fam = info.getOption("family");
@@ -600,7 +600,7 @@ class SybilRenderer {
             }
         }
         if (!found)
-            buf.append("<p>None</p>");
+            buf.append("<p class=\"notfound\">None</p>");
         out.write(buf.toString());
         out.flush();
         buf.setLength(0);
@@ -725,7 +725,7 @@ class SybilRenderer {
                 break;
         }
         double avg = tot / count;
-        buf.append("<p><b>Totals for " + count + " floodfills: </b>MIN=" + fmt.format(min) + " AVG=" + fmt.format(avg) + " MEDIAN=" + fmt.format(median) + " MAX=" + fmt.format(max) + "</p>\n");
+        buf.append("<p id=\"sybil_totals\"><b>Totals for " + count + " floodfills: </b>MIN=" + fmt.format(min) + " AVG=" + fmt.format(avg) + " MEDIAN=" + fmt.format(median) + " MAX=" + fmt.format(max) + "</p>\n");
         out.write(buf.toString());
         out.flush();
         buf.setLength(0);
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/TunnelRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/TunnelRenderer.java
index 61bddd0e013a127aef4e990f1fd0ca293402437c..55b124e7476d2b7c698cc038ad57dac5f58181b3 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/TunnelRenderer.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/TunnelRenderer.java
@@ -33,7 +33,7 @@ class TunnelRenderer {
     }
     
     public void renderStatusHTML(Writer out) throws IOException {
-        out.write("<div class=\"wideload\"><h2><a name=\"exploratory\" ></a>" + _t("Exploratory tunnels") + " (<a href=\"/configtunnels#exploratory\">" + _t("configure") + "</a>)</h2>\n");
+        out.write("<h3 class=\"tabletitle\" id=\"exploratorytunnels\"><a name=\"exploratory\" ></a>" + _t("Exploratory tunnels") + " (<a href=\"/configtunnels#exploratory\">" + _t("configure") + "</a>)</h3>\n");
         renderPool(out, _context.tunnelManager().getInboundExploratoryPool(), _context.tunnelManager().getOutboundExploratoryPool());
         
         List<Hash> destinations = null;
@@ -54,20 +54,20 @@ class TunnelRenderer {
                 name = outPool.getSettings().getDestinationNickname();
             if (name == null)
                 name = client.toBase64().substring(0,4);
-            out.write("<h2><a name=\"" + client.toBase64().substring(0,4)
+            out.write("<h3 class=\"tabletitle\"><a name=\"" + client.toBase64().substring(0,4)
                       + "\" ></a>" + _t("Client tunnels for") + ' ' + DataHelper.escapeHTML(_t(name)));
             if (isLocal)
-                out.write(" (<a href=\"/configtunnels#" + client.toBase64().substring(0,4) +"\">" + _t("configure") + "</a>)</h2>\n");
+                out.write(" (<a href=\"/configtunnels#" + client.toBase64().substring(0,4) +"\">" + _t("configure") + "</a>)</h3>\n");
             else
-                out.write(" (" + _t("dead") + ")</h2>\n");
+                out.write(" (" + _t("dead") + ")</h3>\n");
             renderPool(out, in, outPool);
         }
         
         List<HopConfig> participating = _context.tunnelDispatcher().listParticipatingTunnels();
-        out.write("<h2><a name=\"participating\"></a>" + _t("Participating tunnels") + "</h2>\n");
+        out.write("<h3 class=\"tabletitle\"><a name=\"participating\"></a>" + _t("Participating tunnels") + "</h3>\n");
         if (!participating.isEmpty()) {
             Collections.sort(participating, new TunnelComparator());
-            out.write("<table><tr><th>" + _t("Receive on") + "</th><th>" + _t("From") + "</th><th>"
+            out.write("<table class=\"tunneldisplay\"><tr><th>" + _t("Receive on") + "</th><th>" + _t("From") + "</th><th>"
                   + _t("Send on") + "</th><th>" + _t("To") + "</th><th>" + _t("Expiration") + "</th>"
                   + "<th>" + _t("Usage") + "</th><th>" + _t("Rate") + "</th><th>" + _t("Role") + "</th></tr>\n");
         }
@@ -136,7 +136,6 @@ class TunnelRenderer {
             out.write("<div class=\"statusnotes\"><b>" + _t("none") + "</b></div>\n");
         out.write("<div class=\"statusnotes\"><b>" + _t("Lifetime bandwidth usage") + ": " + DataHelper.formatSize2(processed*1024) + "B</b></div>\n");
         //renderPeers(out);
-        out.write("</div>");
     }
     
     private static class TunnelComparator implements Comparator<HopConfig>, Serializable {
@@ -164,7 +163,7 @@ class TunnelRenderer {
             if (info.getLength() > maxLength)
                 maxLength = info.getLength();
         }
-        out.write("<table><tr><th>" + _t("In/Out") + "</th><th>" + _t("Expiry") + "</th><th>" + _t("Usage") + "</th><th>" + _t("Gateway") + "</th>");
+        out.write("<table class=\"tunneldisplay\"><tr><th>" + _t("In/Out") + "</th><th>" + _t("Expiry") + "</th><th>" + _t("Usage") + "</th><th>" + _t("Gateway") + "</th>");
         if (maxLength > 3) {
             out.write("<th align=\"center\" colspan=\"" + (maxLength - 2));
             out.write("\">" + _t("Participants") + "</th>");
diff --git a/apps/routerconsole/jsp/config.jsp b/apps/routerconsole/jsp/config.jsp
index 5e9c0de92fc6a5cb71668f365618b3921ecfc14b..0fe3c5246e68fa5762637b012aa5532dde79daf6 100644
--- a/apps/routerconsole/jsp/config.jsp
+++ b/apps/routerconsole/jsp/config.jsp
@@ -15,7 +15,7 @@
 <jsp:useBean class="net.i2p.router.web.ConfigNetHelper" id="nethelper" scope="request" />
 <jsp:setProperty name="nethelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
 <h1><%=intl._t("I2P Bandwidth Configuration")%></h1>
-<div class="main" id="main">
+<div class="main" id="help">
  <%@include file="confignav.jsi" %>
 
  <jsp:useBean class="net.i2p.router.web.ConfigNetHandler" id="formhandler" scope="request" />
diff --git a/apps/routerconsole/jsp/confighome.jsp b/apps/routerconsole/jsp/confighome.jsp
index 56be7b8bd0848dc0daa47543cb2044592f2fe139..c71b46edff791bb42071a6d16bb9a9d0937e57be 100644
--- a/apps/routerconsole/jsp/confighome.jsp
+++ b/apps/routerconsole/jsp/confighome.jsp
@@ -26,7 +26,7 @@ input.default {
 <jsp:useBean class="net.i2p.router.web.HomeHelper" id="homehelper" scope="request" />
 <jsp:setProperty name="homehelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
 
-<h3><%=intl._t("Default Home Page")%></h3>
+<h3 class="tabletitle"><%=intl._t("Default Home Page")%></h3>
 <form action="" method="POST">
  <input type="hidden" name="nonce" value="<%=pageNonce%>" >
  <input type="hidden" name="group" value="0">
@@ -38,12 +38,12 @@ input.default {
 <%
    if (homehelper.shouldShowSearch()) {
 %>
-<h3><%=intl._t("Search Engines")%></h3>
+<h3 class="tabletitle"><%=intl._t("Search Engines")%></h3>
 <form action="" method="POST">
  <input type="hidden" name="nonce" value="<%=pageNonce%>" >
  <input type="hidden" name="group" value="3">
  <jsp:getProperty name="homehelper" property="configSearch" />
- <div class="formaction">
+ <div class="formaction" id="homesearch">
   <input type="submit" name="action" class="default" value="<%=intl._t("Add item")%>" >
   <input type="submit" name="action" class="delete" value="<%=intl._t("Delete selected")%>" >
   <input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >
@@ -55,12 +55,12 @@ input.default {
    }  // shouldShowSearch()
 %>
 
-<h3><%=intl._t("Hidden Services of Interest")%></h3>
+<h3 class="tabletitle"><%=intl._t("Hidden Services of Interest")%></h3>
 <form action="" method="POST">
  <input type="hidden" name="nonce" value="<%=pageNonce%>" >
  <input type="hidden" name="group" value="1">
  <jsp:getProperty name="homehelper" property="configFavorites" />
- <div class="formaction">
+ <div class="formaction" id="homesites">
   <input type="submit" name="action" class="default" value="<%=intl._t("Add item")%>" >
   <input type="submit" name="action" class="delete" value="<%=intl._t("Delete selected")%>" >
   <input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >
@@ -69,12 +69,12 @@ input.default {
  </div>
 </form>
 
-<h3><%=intl._t("Applications and Configuration")%></h3>
+<h3 class="tabletitle"><%=intl._t("Applications and Configuration")%></h3>
 <form action="" method="POST">
  <input type="hidden" name="nonce" value="<%=pageNonce%>" >
  <input type="hidden" name="group" value="2">
  <jsp:getProperty name="homehelper" property="configServices" />
- <div class="formaction">
+ <div class="formaction" id="homeapps">
   <input type="submit" name="action" class="default" value="<%=intl._t("Add item")%>" >
   <input type="submit" name="action" class="delete" value="<%=intl._t("Delete selected")%>" >
   <input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >
diff --git a/apps/routerconsole/jsp/confignet.jsp b/apps/routerconsole/jsp/confignet.jsp
index 7b81518e34fc264f88b425b5d648b844fcbf9f9a..25ccc35b5a67748b1ace15c7d7ae604e676cfc0b 100644
--- a/apps/routerconsole/jsp/confignet.jsp
+++ b/apps/routerconsole/jsp/confignet.jsp
@@ -127,7 +127,7 @@
  <%=intl._t("UPnP is used to communicate with Internet Gateway Devices (IGDs) to detect the external IP address and forward ports.")%>
    <%=intl._t("UPnP support is beta, and may not work for any number of reasons")%>:
 </p>
-<ul>
+<ul id="upnphelp">
 <li class="tidylist"><%=intl._t("No UPnP-compatible device present")%>
 <li class="tidylist"><%=intl._t("UPnP disabled on the device")%>
 <li class="tidylist"><%=intl._t("Software firewall interference with UPnP")%>
@@ -148,7 +148,7 @@
  <%=intl._t("If you think you have opened up your firewall and I2P still thinks you are firewalled, remember that you may have multiple firewalls, for example both software packages and external hardware routers.")%>
  <%=intl._t("If there is an error, the <a href=\"logs.jsp\">logs</a> may also help diagnose the problem.")%>
 </p>
- <ul>
+ <ul id="reachability">
 <li class="tidylist"><b><%=intl._t("OK")%></b> - 
      <%=intl._t("Your UDP port does not appear to be firewalled.")%>
 <li class="tidylist"><b><%=intl._t("Firewalled")%></b> - 
diff --git a/apps/routerconsole/jsp/configreseed.jsp b/apps/routerconsole/jsp/configreseed.jsp
index 25b6704f9fac9a57f5f51f89a8521222d481e0d4..0edabc6b2c99ca3c49c0295cb7ff130393fa3661 100644
--- a/apps/routerconsole/jsp/configreseed.jsp
+++ b/apps/routerconsole/jsp/configreseed.jsp
@@ -78,7 +78,7 @@
 <b><%=intl._t("Use non-SSL only")%></b></td></tr>
 <tr><td class="mediumtags" align="right"><b><%=intl._t("Reseed URLs")%>:</b></td>
 <td><textarea wrap="off" name="reseedURL" cols="60" rows="7" spellcheck="false"><jsp:getProperty name="reseedHelper" property="reseedURL" /></textarea>
-<div class="formaction"><input type="submit" name="action" class="reload" value="<%=intl._t("Reset URL list")%>" /></div>
+<div class="formaction" id="resetreseed"><input type="submit" name="action" class="reload" value="<%=intl._t("Reset URL list")%>" /></div>
 </td></tr>
 
 <tr><td class="mediumtags" align="right"><b><%=intl._t("Enable HTTP Proxy?")%></b></td>
diff --git a/apps/routerconsole/jsp/configservice.jsp b/apps/routerconsole/jsp/configservice.jsp
index 987aefdeba952b19f004ac2ff21a4db3a7d3bcee..731ab10f4b6d5de7e440696741e5daf49da25cb7 100644
--- a/apps/routerconsole/jsp/configservice.jsp
+++ b/apps/routerconsole/jsp/configservice.jsp
@@ -16,13 +16,13 @@
 
  <jsp:useBean class="net.i2p.router.web.ConfigServiceHandler" id="formhandler" scope="request" />
 <%@include file="formhandler.jsi" %>
- <div class="configure">
  <form action="" method="POST">
  <input type="hidden" name="nonce" value="<%=pageNonce%>" >
- <h3><%=intl._t("Shutdown the router")%></h3>
- <p><%=intl._t("Graceful shutdown lets the router satisfy the agreements it has already made before shutting down, but may take a few minutes.")%> 
+ <h3 class="ptitle" id="shutdownrouter"><%=intl._t("Shutdown the router")%></h3>
+ <p class="infohelp">
+    <%=intl._t("Graceful shutdown lets the router satisfy the agreements it has already made before shutting down, but may take a few minutes.")%>
     <%=intl._t("If you need to kill the router immediately, that option is available as well.")%></p>
-  <hr><div class="formaction">
+  <hr><div class="formaction" id="shutdown">
  <input type="submit" class="stop" name="action" value="<%=intl._t("Shutdown gracefully")%>" >
  <input type="submit" class="stop" name="action" value="<%=intl._t("Shutdown immediately")%>" >
  <% if (formhandler.shouldShowCancelGraceful()) { %>
@@ -30,52 +30,60 @@
  <% } %>
  </div>
  <% if (System.getProperty("wrapper.version") != null) { %>
- <p><%=intl._t("If you want the router to restart itself after shutting down, you can choose one of the following.")%> 
+ <h3 class="ptitle" id="restartrouter"><%=intl._t("Restart the router")%></h3>
+ <p class="infohelp">
+    <%=intl._t("If you want the router to restart itself after shutting down, you can choose one of the following.")%>
     <%=intl._t("This is useful in some situations - for example, if you changed some settings that client applications only read at startup, such as the routerconsole password or the interface it listens on.")%> 
     <%=intl._t("A graceful restart will take a few minutes (but your peers will appreciate your patience), while a hard restart does so immediately.")%> 
     <%=intl._t("After tearing down the router, it will wait 1 minute before starting back up again.")%></p>
- <hr><div class="formaction">
+ <hr><div class="formaction" id="restart">
  <input type="submit" class="reload" name="action" value="<%=intl._t("Graceful restart")%>" >
  <input type="submit" class="reload" name="action" value="<%=intl._t("Hard restart")%>" >
  <% } %></div>
 
  <% if ( (System.getProperty("os.name") != null) && (System.getProperty("os.name").startsWith("Win")) ) { %>
- <h3><%=intl._t("Systray integration")%></h3>
- <p><%=intl._t("On the windows platform, there is a small application to sit in the system tray, allowing you to view the router's status")%> 
+ <h3 class="ptitle" id="systray"><%=intl._t("Systray integration")%></h3>
+ <p class="infohelp">
+    <%=intl._t("On the windows platform, there is a small application to sit in the system tray, allowing you to view the router's status")%>
     <%=intl._t("(later on, I2P client applications will be able to integrate their own functionality into the system tray as well).")%> 
     <%=intl._t("If you are on windows, you can either enable or disable that icon here.")%></p>
- <hr><div class="formaction">
+ <hr><div class="formaction" id="systray">
  <input type="submit" name="action" value="<%=intl._t("Show systray icon")%>" >
  <input type="submit" name="action" value="<%=intl._t("Hide systray icon")%>" >
  </div>
- <h3><%=intl._t("Run on startup")%></h3>
- <p><%=intl._t("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.")%> 
+ <h3 class="ptitle" id="runonstartup"><%=intl._t("Run on startup")%></h3>
+ <p class="infohelp">
+    <%=intl._t("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.")%>
     <%=intl._t("If you prefer the command line, you can also run the ")%> <code>install_i2p_service_winnt.bat</code> (<%=intl._t("or")%>
  <code>uninstall_i2p_service_winnt.bat</code>).</p>
- <hr><div class="formaction">
+ <hr><div class="formaction" id="runonstart">
  <input type="submit" name="action" value="<%=intl._t("Run I2P on startup")%>" >
-<input type="submit" name="action" value="<%=intl._t("Don't run I2P on startup")%>" ></div>
- <p><b><%=intl._t("Note")%>:</b> <%=intl._t("If you are running I2P as service right now, removing it will shut down your router immediately.")%> 
+ <input type="submit" name="action" value="<%=intl._t("Don't run I2P on startup")%>" ></div>
+ <p class="infohelp" id="winfoservice"><b>
+    <%=intl._t("Note")%>:</b> <%=intl._t("If you are running I2P as service right now, removing it will shut down your router immediately.")%>
     <%=intl._t("You may want to consider shutting down gracefully, as above, then running uninstall_i2p_service_winnt.bat.")%></p>
  <% } %>
 
- <h3><%=intl._t("Debugging")%></h3>
- <p><a href="/jobs"><%=intl._t("View the job queue")%></a>
+ <h3 class="ptitle" id="servicedebug"><%=intl._t("Debugging")%></h3>
 <% if (System.getProperty("wrapper.version") != null) { %>
- <p><%=intl._t("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>
+ <p class="infohelp">
+    <%=intl._t("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>
+ <p><a href="/jobs">
+    <%=intl._t("View the job queue")%></a>
+ <hr>
 <% } %>
- <div class="formaction">
+ <div class="formaction" id="dumpthreads">
  <input type="submit" class="reload" name="action" value="<%=intl._t("Force GC")%>" >
 <% if (System.getProperty("wrapper.version") != null) { %>
  <input type="submit" class="download" name="action" value="<%=intl._t("Dump threads")%>" >
 <% } %>
  </div>
 
- <h3><%=intl._t("Launch browser on router startup?")%></h3>
- <p><%=intl._t("I2P's main configuration interface is this web console, so for your convenience I2P can launch a web browser on startup pointing at")%>
+ <h3 class="ptitle" id="browseronstart"><%=intl._t("Launch browser on router startup?")%></h3>
+ <p class="infohelp">
+    <%=intl._t("I2P's main configuration interface is this web console, so for your convenience I2P can launch a web browser on startup pointing at")%>
  <a href="http://127.0.0.1:7657/">http://127.0.0.1:7657/</a> .</p>
- <hr><div class="formaction">
+ <hr><div class="formaction" id="browserstart">
  <input type="submit" class="check" name="action" value="<%=intl._t("View console on startup")%>" >
  <input type="submit" class="delete" name="action" value="<%=intl._t("Do not view console on startup")%>" >
-</div></form></div></div></body></html>
+</div></form></div></body></html>
diff --git a/apps/routerconsole/jsp/configsidebar.jsp b/apps/routerconsole/jsp/configsidebar.jsp
index 63c3ed18ceebd77e55a23028f1922d65bc825c68..508e88165defd3f3f328f65628854e5b04079f82 100644
--- a/apps/routerconsole/jsp/configsidebar.jsp
+++ b/apps/routerconsole/jsp/configsidebar.jsp
@@ -38,12 +38,12 @@ input.default {
  <input type="submit" name="action" class="accept" value="<%=intl._t("Save")%>" >
 </form>
 
-<h3><%=intl._t("Customize Summary Bar")%></h3>
+<h3 class="tabletitle"><%=intl._t("Customize Summary Bar")%></h3>
 <form action="" method="POST">
  <input type="hidden" name="nonce" value="<%=pageNonce%>" >
  <input type="hidden" name="group" value="2">
  <jsp:getProperty name="summaryhelper" property="configTable" />
- <div class="formaction">
+ <div class="formaction" id="sidebardefaults">
   <input type="submit" class="reload" name="action" value="<%=intl._t("Restore full default")%>" >
   <input type="submit" class="reload" name="action" value="<%=intl._t("Restore minimal default")%>" >
  </div>
diff --git a/apps/routerconsole/jsp/configstats.jsp b/apps/routerconsole/jsp/configstats.jsp
index 802d615e5c0f07fa2a4c6861d6db57639788d0d0..719295473e0cde9118f663e9adaeef5d56051372 100644
--- a/apps/routerconsole/jsp/configstats.jsp
+++ b/apps/routerconsole/jsp/configstats.jsp
@@ -73,8 +73,8 @@ function toggleAll(category)
  <form id="statsForm" name="statsForm" action="" method="POST">
  <input type="hidden" name="action" value="foo" >
  <input type="hidden" name="nonce" value="<%=pageNonce%>" >
- <h3><%=intl._t("Configure I2P Stat Collection")%></h3>
- <p><%=intl._t("Enable full stats?")%>
+ <h3 class="ptitle"><%=intl._t("Configure I2P Stat Collection")%></h3>
+ <p id="enablefullstats"><b><%=intl._t("Enable full stats?")%></b>
  <input type="checkbox" class="optbox" name="isFull" value="true" <%
  if (statshelper.getIsFull()) { %>checked="checked" <% } %> >
  (<%=intl._t("change requires restart to take effect")%>)<br>
@@ -90,16 +90,16 @@ Warning - Log with care, stat file grows without limit.<br>
 
   }  // shouldShowLog
 
-%><%=intl._t("Filter")%>: (<a href="javascript:void(null);" onclick="toggleAll('*')"><%=intl._t("toggle all")%></a>)<br></p>
+%><b><%=intl._t("Filter")%>:</b> (<a href="javascript:void(null);" onclick="toggleAll('*')"><%=intl._t("toggle all")%></a>)<br></p>
  <div class="wideload">
- <table>
+ <table id="configstats">
  <% while (statshelper.hasMoreStats()) {
       while (statshelper.groupRequired()) { %>
- <tr class="tablefooter">
-     <td align="left" colspan="3" id=<%=statshelper.getCurrentGroupName()%>>
+ <tr>
+     <th align="left" colspan="3" id=<%=statshelper.getCurrentGroupName()%>>
      <b><%=intl._t(statshelper.getCurrentGroupName())%></b>
      (<a href="javascript:void(null);" onclick="toggleAll('<%=statshelper.getCurrentGroupName()%>')"><%=intl._t("toggle all")%></a>)
-     </td></tr>
+     </th></tr>
  <tr class="tablefooter">
 <%
 
@@ -131,7 +131,7 @@ Warning - Log with care, stat file grows without limit.<br>
      <% if (statshelper.getCurrentCanBeGraphed()) { %>
        <input type="checkbox" class="optbox <%=statshelper.getCurrentGroupName()%>" name="graphList" value="<%=statshelper.getCurrentGraphName()%>" <%
        if (statshelper.getCurrentIsGraphed()) { %>checked="checked" <% } %> ><% } %></td>
-     <td align="left"><b><%=statshelper.getCurrentStatName()%>:</b><br>
+     <td align="left"><b><%=statshelper.getCurrentStatName()%>:</b>&nbsp;
      <%=statshelper.getCurrentStatDescription()%></td></tr><%
     } // end iterating over all stats
 
@@ -145,7 +145,7 @@ Warning - Log with care, stat file grows without limit.<br>
 
   }  // shouldShowLog
 
-%>   <tr class="tablefooter"><td colspan="3" align="right">
+%>   <tr class="tablefooter"><td colspan="3" align="right" class="optionsave">
 <input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >
 <input type="submit" name="shouldsave" class="accept" value="<%=intl._t("Save changes")%>" >
 </td></tr>
diff --git a/apps/routerconsole/jsp/configui.jsp b/apps/routerconsole/jsp/configui.jsp
index 96f7bf84cd73be6099a71b4b77bc180966639bc9..7f993c5c26834313d137d7c5749ae32cecb702a6 100644
--- a/apps/routerconsole/jsp/configui.jsp
+++ b/apps/routerconsole/jsp/configui.jsp
@@ -29,8 +29,9 @@ input.default {
 
  <jsp:useBean class="net.i2p.router.web.ConfigUIHandler" id="formhandler" scope="request" />
 <%@include file="formhandler.jsi" %>
-<div class="configure"><div class="topshimten"><h3><%=uihelper._t("Router Console Theme")%></h3></div>
+<h3 id="themeheading"><%=uihelper._t("Router Console Theme")%></h3>
  <form action="" method="POST">
+<div id ="themesettings">
  <input type="hidden" name="consoleNonce" value="<%=net.i2p.router.web.CSSHelper.getNonce()%>" >
  <input type="hidden" name="nonce" value="<%=pageNonce%>" >
  <input type="hidden" name="action" value="blah" >
@@ -45,23 +46,25 @@ input.default {
 <%=uihelper._t("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.")%>
 <% } %>
  <jsp:getProperty name="uihelper" property="forceMobileConsole" />
-<h3><%=uihelper._t("Router Console Language")%></h3>
+</div>
+<h3 id="langheading"><%=uihelper._t("Router Console Language")%></h3>
+<div id="langsettings">
 <jsp:getProperty name="uihelper" property="langSettings" />
-<p><%=uihelper._t("Please contribute to the router console translation project! Contact the developers in #i2p-dev on IRC to help.")%>
-</p><hr><div class="formaction">
+<p id="helptranslate"><%=uihelper._t("Please contribute to the router console translation project! Contact the developers in #i2p-dev on IRC to help.")%>
+</p><hr><div class="formaction" id="langui">
 <input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >
 <input type="submit" name="shouldsave" class="accept" value="<%=intl._t("Apply")%>" >
-</div></form>
+</div></div></form>
 
-<h3><%=uihelper._t("Router Console Password")%></h3>
+<h3 id="passwordheading"><%=uihelper._t("Router Console Password")%></h3>
 <form action="" method="POST">
  <input type="hidden" name="nonce" value="<%=pageNonce%>" >
  <jsp:getProperty name="uihelper" property="passwordForm" />
- <div class="formaction">
+ <div class="formaction" id="consolepass">
   <input type="submit" name="action" class="default" value="<%=intl._t("Add user")%>" >
   <input type="submit" name="action" class="delete" value="<%=intl._t("Delete selected")%>" >
   <input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >
   <input type="submit" name="action" class="add" value="<%=intl._t("Add user")%>" >
  </div>
-</form></div>
+</form>
 </div></body></html>
diff --git a/apps/routerconsole/jsp/configupdate.jsp b/apps/routerconsole/jsp/configupdate.jsp
index e1e0734043b007af92d5eab766a48eb7c87f3d21..7fb756272160d93105dc01e41ad2ddf78a02f088 100644
--- a/apps/routerconsole/jsp/configupdate.jsp
+++ b/apps/routerconsole/jsp/configupdate.jsp
@@ -21,25 +21,22 @@
  <jsp:setProperty name="updatehelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
 <div class="messages">
  <jsp:getProperty name="updatehelper" property="newsStatus" /></div>
-<div class="configure">
  <form action="" method="POST">
  <input type="hidden" name="nonce" value="<%=pageNonce%>" >
  <% /* set hidden default */ %>
  <input type="submit" name="action" value="" style="display:none" >
     <% if (updatehelper.canInstall()) { %>
-      <h3><%=intl._t("Check for I2P and news updates")%></h3>
-      <div class="wideload"><table border="0" cellspacing="5">
-        <tr><td colspan="2"></tr>
-        <tr><td class="mediumtags" align="right"><b><%=intl._t("News &amp; I2P Updates")%>:</b></td>
+      <h3 class="tabletitle"><%=intl._t("Check for I2P and news updates")%></h3>
+      <table id="i2pupdates" class="configtable" border="0" cellspacing="5">
+      <tr><td class="mediumtags" align="right"><b><%=intl._t("News &amp; I2P Updates")%>:</b></td>
      <% } else { %>
       <h3><%=intl._t("Check for news updates")%></h3>
-      <div class="wideload"><table border="0" cellspacing="5">
+      <table id="i2pupdates" class="configtable" border="0" cellspacing="5">
         <tr><td colspan="2"></tr>
         <tr><td class="mediumtags" align="right"><b><%=intl._t("News Updates")%>:</b></td>
      <% }   // if canInstall %>
           <td> <% if ("true".equals(System.getProperty("net.i2p.router.web.UpdateHandler.updateInProgress", "false"))) { %> <i><%=intl._t("Update In Progress")%></i><br> <% } else { %> <input type="submit" name="action" class="check" value="<%=intl._t("Check for updates")%>" />
             <% } %></td></tr>
-        <tr><td colspan="2"><br></td></tr>
         <tr><td class="mediumtags" align="right"><b><%=intl._t("News URL")%>:</b></td>
           <td><input type="text" size="60" name="newsURL" <% if (!updatehelper.isAdvanced()) { %>readonly="readonly"<% } %> value="<jsp:getProperty name="updatehelper" property="newsURL" />"></td>
         </tr><tr><td class="mediumtags" align="right"><b><%=intl._t("Refresh frequency")%>:</b>
@@ -76,8 +73,7 @@
     <% } else { %>
         <tr><td class="mediumtags" align="center" colspan="2"><b><%=intl._t("Updates will be dispatched via your package manager.")%></b></td></tr>
     <% }   // if canInstall %>
-        <tr class="tablefooter"><td colspan="2">
-        <div class="formaction">
+        <tr class="tablefooter"><td colspan="2" class="optionsave">
             <input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >
             <input type="submit" name="action" class="accept" value="<%=intl._t("Save")%>" >
-        </div></td></tr></table></div></form></div></div></body></html>
+        </td></tr></table></form></div></body></html>
diff --git a/apps/routerconsole/jsp/dns.jsp b/apps/routerconsole/jsp/dns.jsp
index 23a353416e779c0ab9b45e5399d4dcd1a2912b0f..5b7ce17aaadcb2d03706e65cb0f7dd9ecd28f23f 100644
--- a/apps/routerconsole/jsp/dns.jsp
+++ b/apps/routerconsole/jsp/dns.jsp
@@ -31,7 +31,7 @@
 <%@include file="summary.jsi" %>
 
 <h1><%=intl._t("I2P Addressbook")%> <span class="newtab"><a href="/susidns/index" target="_blank" title="<%=intl._t("Open in new tab")%>"><img src="<%=intl.getTheme(request.getHeader("User-Agent"))%>images/newtab.png" /></a></span></h1>
-<div class="main" id="main">
+<div class="main" id="dns">
 <iframe src="/susidns/index" width="100%" height="100%" frameborder="0" border="0" name="susidnsframe" id="susidnsframe" onload="setupFrame()" allowtransparency="true">
 <%=intl._t("Your browser does not support iFrames.")%>
 &nbsp;<a href="/susidns/index"><%=intl._t("Click here to continue.")%></a>
diff --git a/apps/routerconsole/jsp/events.jsp b/apps/routerconsole/jsp/events.jsp
index 29838e7a7824fcf787cf890dc98f2b0afb23d078..85077a236a51ad36521d5adb231a7f5eee3b29a6 100644
--- a/apps/routerconsole/jsp/events.jsp
+++ b/apps/routerconsole/jsp/events.jsp
@@ -19,7 +19,7 @@
 </head><body onload="initAjax()">
 <%@include file="summary.jsi" %>
 <h1><%=intl._t("I2P Event Log")%></h1>
-<div class="main" id="main">
+<div class="main" id="events">
  <div class="eventspanel">
  <div class="widepanel">
  <jsp:getProperty name="eventHelper" property="allMessages" />
diff --git a/apps/routerconsole/jsp/graphs.jsp b/apps/routerconsole/jsp/graphs.jsp
index 6cde501311db0e87e3fbe2583561edb96d35cc84..c4c61b6cbe8f4521d7ada3c49ed63cf86bc4eefd 100644
--- a/apps/routerconsole/jsp/graphs.jsp
+++ b/apps/routerconsole/jsp/graphs.jsp
@@ -24,10 +24,11 @@
 </head><body onload="initAjax()">
 <%@include file="summary.jsi" %>
 <h1><%=intl._t("I2P Performance Graphs")%></h1>
-<div class="main" id="main">
- <div class="graphspanel">
+<div class="main" id="graphs">
  <div class="widepanel">
  <jsp:getProperty name="graphHelper" property="allMessages" />
+ <div class="graphspanel">
  <jsp:getProperty name="graphHelper" property="images" />
+ </div>
  <jsp:getProperty name="graphHelper" property="form" />
-</div></div></div></body></html>
+</div></div></body></html>
diff --git a/apps/routerconsole/jsp/help.jsp b/apps/routerconsole/jsp/help.jsp
index 230c6a557174982bb90f382323bb3f9de209b56b..d6c5c2a6175366f049f34acdca73ea81e843f806 100644
--- a/apps/routerconsole/jsp/help.jsp
+++ b/apps/routerconsole/jsp/help.jsp
@@ -14,7 +14,7 @@
 </head><body onload="initAjax()">
 <%@include file="summary.jsi" %>
 <h1>I2P Router Help &amp; Support</h1>
-<div class="main" id="main"><p>
+<div class="main" id="help"><p>
 
 <%@include file="help.jsi" %>
 <%@include file="help-legal.jsi" %>
diff --git a/apps/routerconsole/jsp/help_ar.jsp b/apps/routerconsole/jsp/help_ar.jsp
index d7d6b1454d28007bdd56ace1fa607bb8a6d4e8dd..d605d61fa8ad13bbbfa6ed50551b1397b06baa20 100644
--- a/apps/routerconsole/jsp/help_ar.jsp
+++ b/apps/routerconsole/jsp/help_ar.jsp
@@ -14,7 +14,7 @@
 </head><body onload="initAjax()">
 <%@include file="summary.jsi" %>
 <h1>I2P مساعدة لوحة التحكم</h1>
-<div class="main" id="main" dir="rtl" lang="ar"><p>
+<div class="main" id="help" dir="rtl" lang="ar"><p>
 اذا رغبت في المساعدة أو ترجمة الوثائق، أو المساعدة في أشياء أخرى، انظر اسفله
 
 <a href="http://i2p-projekt.i2p/ar/get-involved">تطوع</a>
diff --git a/apps/routerconsole/jsp/help_fr.jsp b/apps/routerconsole/jsp/help_fr.jsp
index e22bd30a9cd74c59d0d7f14f2989d1ea3c885696..37583fdba74099c3c4417868cec0f174f90d2f45 100644
--- a/apps/routerconsole/jsp/help_fr.jsp
+++ b/apps/routerconsole/jsp/help_fr.jsp
@@ -15,7 +15,7 @@
 <%@include file="summary.jsi" %>
 <!-- Traduction de mars 2011 (magma@mail.i2p) -->
 <h1>Aide et assistance du routeur I2P</h1>
-<div class="main" id="main"><p>
+<div class="main" id="help"><p>
 Si vous souhaitez améliorer ou traduire la documentation ou d'autres versants du projet, merci de vous reporter à 
 la page consacrée aux <a href="http://i2p-projekt.i2p/fr/get-involved">volontaires</a>.
 </p>D'autres détails sont disponibles ici:
diff --git a/apps/routerconsole/jsp/help_nl.jsp b/apps/routerconsole/jsp/help_nl.jsp
index 03da62ee8b60ab29eb8db41fc17b5a02c28c26c1..28164f4c8ec97a350d19b14422df3f59e045ae49 100644
--- a/apps/routerconsole/jsp/help_nl.jsp
+++ b/apps/routerconsole/jsp/help_nl.jsp
@@ -14,7 +14,7 @@
 </head><body onload="initAjax()">
 <%@include file="summary.jsi" %>
 <h1>I2P Router Help &amp; Support</h1>
-<div class="main" id="main"><p>
+<div class="main" id="help"><p>
 Als je wilt helpen om de documentatie te verbeteren of vertalen, of wilt helpen
 met andere aspecten van het project, zie dan de documentatie voor 
 <a href="http://i2p-projekt.i2p/nl/get-involved">vrijwilligers.</a>
diff --git a/apps/routerconsole/jsp/help_ru.jsp b/apps/routerconsole/jsp/help_ru.jsp
index b3ef9e551922b3e20338abd6c810590b06056ba7..37405d53eb7f2ae9ce2dde4e3a1543c99f098d6c 100644
--- a/apps/routerconsole/jsp/help_ru.jsp
+++ b/apps/routerconsole/jsp/help_ru.jsp
@@ -16,7 +16,7 @@
 
 <h1>Справка маршрутизатора I2P</h1>
 
-<div class="main" id="main">
+<div class="main" id="help">
 
 <p> Если Вы хотите помочь в улучшении или переводе документации, если у Вас есть идеи, как еще помочь проекту, пожалуйста, загляните в раздел документации 
 <a href="http://i2p-projekt.i2p/ru/get-involved">как стать участником</a>. </p>
diff --git a/apps/routerconsole/jsp/i2ptunnelmgr.jsp b/apps/routerconsole/jsp/i2ptunnelmgr.jsp
index a4a5ff6b75b26dcbe8a911ac411175ab0e98447d..fcc9f2b24786e45419c119d51a778b92e2bf6d1a 100644
--- a/apps/routerconsole/jsp/i2ptunnelmgr.jsp
+++ b/apps/routerconsole/jsp/i2ptunnelmgr.jsp
@@ -53,7 +53,7 @@
 <%@include file="summary.jsi" %>
 
 <h1><%=intl._t("Hidden Services Manager")%> <span class="newtab"><a href="/i2ptunnel/" target="_blank" title="<%=intl._t("Open in new tab")%>"><img src="<%=intl.getTheme(request.getHeader("User-Agent"))%>images/newtab.png" /></a></span></h1>
-<div class="main" id="main">
+<div class="main" id="tunnelmgr">
 <iframe src="/i2ptunnel/" width="100%" height="100%" frameborder="0" border="0" name="i2ptunnelframe" id="i2ptunnelframe" onload="setupFrame()" allowtransparency="true">
 <%=intl._t("Your browser does not support iFrames.")%>
 &nbsp;<a href="/i2ptunnel/"><%=intl._t("Click here to continue.")%></a>
diff --git a/apps/routerconsole/jsp/jars.jsp b/apps/routerconsole/jsp/jars.jsp
index 527f06074bc848cfe20ac41972eed00d03c73d15..77f8cea7254aa3bbb356170ec0cb1e395e23e19b 100644
--- a/apps/routerconsole/jsp/jars.jsp
+++ b/apps/routerconsole/jsp/jars.jsp
@@ -9,7 +9,7 @@
 <%@include file="summaryajax.jsi" %>
 </head><body onload="initAjax()">
 <%@include file="summary.jsi" %><h1>Jar File Dump</h1>
-<div class="main" id="main">
+<div class="main" id="jardump">
 <jsp:useBean class="net.i2p.router.web.FileDumpHelper" id="dumpHelper" scope="request" />
 <jsp:setProperty name="dumpHelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
 <jsp:getProperty name="dumpHelper" property="fileSummary" />
diff --git a/apps/routerconsole/jsp/netdb.jsp b/apps/routerconsole/jsp/netdb.jsp
index 1b9be5d03fef789276c176b2f1a6476fa421036c..096fdac3263369b350d8371f505ed305c9764816 100644
--- a/apps/routerconsole/jsp/netdb.jsp
+++ b/apps/routerconsole/jsp/netdb.jsp
@@ -11,8 +11,7 @@
 </head><body onload="initAjax()">
 <%@include file="summary.jsi" %>
 <h1><%=intl._t("I2P Network Database")%></h1>
-<div class="main" id="main">
- <div class="wideload">
+<div class="main" id="netdb">
  <jsp:useBean class="net.i2p.router.web.NetDbHelper" id="netdbHelper" scope="request" />
  <jsp:setProperty name="netdbHelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
 <%
@@ -26,4 +25,4 @@
  <jsp:setProperty name="netdbHelper" property="version" value="<%=request.getParameter(\"v\")%>" />
  <jsp:setProperty name="netdbHelper" property="country" value="<%=request.getParameter(\"c\")%>" />
  <jsp:getProperty name="netdbHelper" property="netDbSummary" />
-</div></div></body></html>
+</div></body></html>
diff --git a/apps/routerconsole/jsp/news.jsp b/apps/routerconsole/jsp/news.jsp
index f85836a40f0119c3cf2f2e083471f50f33af9873..3629661fa500ab19a710f3cd3469c91ae04a450b 100644
--- a/apps/routerconsole/jsp/news.jsp
+++ b/apps/routerconsole/jsp/news.jsp
@@ -10,7 +10,7 @@
 </head><body onload="initAjax()">
 <%@include file="summary.jsi" %>
 <h1><%=intl._t("Latest News")%></h1>
-<div class="main" id="main">
+<div class="main" id="news">
 <jsp:useBean class="net.i2p.router.web.NewsFeedHelper" id="feedHelper" scope="request" />
 <jsp:setProperty name="feedHelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
 <% feedHelper.setLimit(0); %>
diff --git a/apps/routerconsole/jsp/oldconsole.jsp b/apps/routerconsole/jsp/oldconsole.jsp
index 125ea5e75ea3489af9b84289d7af21f4b0cf8984..8fe9e791431a156e775c4a2901331815b71d6d9c 100644
--- a/apps/routerconsole/jsp/oldconsole.jsp
+++ b/apps/routerconsole/jsp/oldconsole.jsp
@@ -17,6 +17,6 @@
 <jsp:setProperty name="conhelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
 <% conhelper.storeWriter(out); %>
  <h1>I2P Router &raquo; Old Console</h1>
-<div class="main" id="main">
+<div class="main" id="main"><p id="oldconsole">
  <jsp:getProperty name="conhelper" property="console" />
-</div></body></html>
+</p></div></body></html>
diff --git a/apps/routerconsole/jsp/peers.jsp b/apps/routerconsole/jsp/peers.jsp
index 70cb9d93eaa9688ce963cea2f1cf6e46099ad141..8e6ac8da83c311a7f6849efcbe189ffcf2f2b880 100644
--- a/apps/routerconsole/jsp/peers.jsp
+++ b/apps/routerconsole/jsp/peers.jsp
@@ -11,11 +11,11 @@
 </head><body onload="initAjax()">
 <%@include file="summary.jsi" %>
 <h1><%=intl._t("I2P Network Peers")%></h1>
-<div class="main" id="main"><div class="wideload">
+<div class="main" id="main">
  <jsp:useBean class="net.i2p.router.web.PeerHelper" id="peerHelper" scope="request" />
  <jsp:setProperty name="peerHelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
  <% peerHelper.storeWriter(out); %>
  <jsp:setProperty name="peerHelper" property="urlBase" value="peers.jsp" />
  <jsp:setProperty name="peerHelper" property="sort" value="<%=request.getParameter(\"sort\") != null ? request.getParameter(\"sort\") : \"\"%>" />
  <jsp:getProperty name="peerHelper" property="peerSummary" />
-</div></div></body></html>
+</div></body></html>
diff --git a/apps/routerconsole/jsp/profiles.jsp b/apps/routerconsole/jsp/profiles.jsp
index c2ffaba3e88e406be8d8b2820d40366b975f403b..f3d11de191c4652fea1b29a8624b2732eb2809ea 100644
--- a/apps/routerconsole/jsp/profiles.jsp
+++ b/apps/routerconsole/jsp/profiles.jsp
@@ -21,4 +21,4 @@
 %>
  <jsp:setProperty name="profilesHelper" property="full" value="<%=request.getParameter(\"f\")%>" />
  <jsp:getProperty name="profilesHelper" property="summary" />
-<hr></div></div></body></html>
+</div></div></body></html>
diff --git a/apps/routerconsole/jsp/proof.jsp b/apps/routerconsole/jsp/proof.jsp
index 95007120106d46dd3f0fb7f12585fac2d01e16fd..908136f483aa53bf55886d91270755816cbd7763 100644
--- a/apps/routerconsole/jsp/proof.jsp
+++ b/apps/routerconsole/jsp/proof.jsp
@@ -9,8 +9,8 @@
 <%@include file="summaryajax.jsi" %>
 </head><body onload="initAjax()">
 <%@include file="summary.jsi" %><h1>Proof of Ownership</h1>
-<div class="main" id="main">
+<div class="main" id="main"><p id="proof">
 <jsp:useBean class="net.i2p.router.web.ProofHelper" id="proofHelper" scope="request" />
 <jsp:setProperty name="proofHelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
 <textarea cols="70" rows="15" wrap="off" readonly="readonly" spellcheck="false"><jsp:getProperty name="proofHelper" property="proof" /></textarea>
-</div></body></html>
+</p></div></body></html>
diff --git a/apps/routerconsole/jsp/stats.jsp b/apps/routerconsole/jsp/stats.jsp
index ac53608e2b983ea0f003b34fd3efbf772f145df9..8b6d0ccfdd7364d934c244645741bf08d0421c15 100644
--- a/apps/routerconsole/jsp/stats.jsp
+++ b/apps/routerconsole/jsp/stats.jsp
@@ -15,6 +15,6 @@
 <% oldhelper.storeWriter(out); %>
 <jsp:setProperty name="oldhelper" property="full" value="<%=request.getParameter(\"f\")%>" />
  <h1><%=intl._t("I2P Router Statistics")%></h1>
-<div class="main" id="main">
+<div class="main" id="stats">
  <jsp:getProperty name="oldhelper" property="stats" />
-<hr></div></body></html>
+</div></body></html>
diff --git a/installer/resources/readme/readme.html b/installer/resources/readme/readme.html
index 8fd39f406bfb450ca5d32ff640b975df10529dc6..91ccd10ec67a787d24666e0c15671325d0b13ee8 100644
--- a/installer/resources/readme/readme.html
+++ b/installer/resources/readme/readme.html
@@ -3,8 +3,8 @@
 <ul class="links"><li class="tidylist"><b>Starting Up&hellip;</b><br>If you've just started I2P, the number of <i>Active Peers</i> indicated under the <i>Peers</i> section in the side panel on the left should start to grow over the next few minutes and you'll also see a <i>Local Destination</i> named <i>Shared Clients</i> listed there, and possibly other clients and servers depending on how I2P is configured (if not, see the troubleshooting section <a href="#trouble">below</a>). These <i>Local Destinations</i> provide connections on different ports (and sometimes protocols) to the I2P network, enabling your bittorrent, e-mail, web proxy and other services to function. Your <a href="/netdb">Network Database</a> indicates all known peers on the network. Additionally, you can monitor existing <a href="/peers">Peer Connections</a>, and view existing <a href="/tunnels">Tunnels</a> and their status. More information is available on the <a href="/help">help page</a>.</li>
 
 <li class="tidylist"><b>Network integration</b><br> The first time you start I2P it may take a few minutes to bootstrap (integrate) you into the network and find additional peers to optimize your integration, so please be patient. When I2P starts up, and during normal operation, I2P's tunnel build readiness indicator (immediately above the <i>Local Destinations</i> section in the sidepanel) may tell you that I2P is "Rejecting Tunnels"; this is normal behavior and should be of no cause for concern! Once green stars are indicated next to your <i>Local Destinations</i>, there is a wide variety of things you can do with I2P, and below we introduce you to some of them.</li></ul>
-  
-<h3>Services on I2P</h3>
+
+<h3 class="welcome">Services on I2P</h3>
 <ul class="links">
 
 <li class="tidylist"><b>Invisible Internet &amp; Public Web Browsing</b><br>On I2P you can access hidden service websites ("eepsites") and other services (e.g. ssh over I2P, IRC, Jabber etc.) in addition to being able to host your own services. You can also access the normal web anonymously via I2P's built-in web proxy (outproxy). <a href="https://geti2p.net/en/about/browser-config" target="_blank">Configure your browser</a> to use the HTTP proxy at <code>127.0.0.1 port 4444</code>, then browse to a hidden service website or a normal, unencrypted <code>http://</code> address. If you wish to disable or change outproxy access to the normal internet, remove or modify the outproxy entry for <code>false.i2p</code> under the <i>Outproxies</i> option in the <a href="/i2ptunnel/edit?tunnel=0" target="_blank">I2P HTTP Proxy  Tunnel Editor</a>. In the "Sites of Interest" section <a href="#eepsites">below</a>, we list a few of the sites hosted on I2P.</li>
@@ -32,7 +32,7 @@
   If you're a <a href="http://plugins.i2p/developers/" target="_blank">developer</a>, a complete language-agnostic framework for writing your own plugins is provided with <a href="http://i2p-projekt.i2p/plugins.html" target="_blank">documentation</a>; I2P plugins can be coded in any language.</li>
 </ul>
 
-<h3>Anonymous Encrypted Web Hosting on I2P</h3>
+<h3 class="welcome">Anonymous Encrypted Web Hosting on I2P</h3>
 <ul class="links">
 
 <li class="tidylist"><b>Ready to Roll!</b><br>I2P comes with a built-in, ready-to-go web server for hosting your own hidden service website ("eepsite") on the I2P network: a <a href="http://jetty.mortbay.org/" target="_blank">Jetty</a> instance listening on <a href="http://127.0.0.1:7658/" target="_blank">http://127.0.0.1:7658/</a>. To host your own content,
@@ -46,7 +46,7 @@
   your website, registering an .i2p domain and promoting your site to others are accessible via your own I2P webserver on <a href="http://127.0.0.1:7658/help/" target="_blank">http://127.0.0.1:7658/help/</a>.</li></ul>
     
 <a name="eepsites"></a>    
-    <h3>I2P-Hidden Services of Interest</h3>
+    <h3 class="welcome">I2P-Hidden Services of Interest</h3>
     <ul class="links">
       <li class="tidylist"><b>Invisible Internet Project (I2P) Official Website</b><br><a href="http://i2p-projekt.i2p" target="_blank">i2p-projekt.i2p</a>: Secure and
         anonymous connections to <a href="https://geti2p.net/en/" target="_blank">geti2p.net</a>. If you want to know more about how I2P works or how you can participate, this is your first port of call!</li>
diff --git a/installer/resources/readme/readme_fr.html b/installer/resources/readme/readme_fr.html
index 1060c72532f47d3c634a7b1083d9219d001def89..dd9a536607bf9b1e421dbfe5229c65cd4acd2b8c 100644
--- a/installer/resources/readme/readme_fr.html
+++ b/installer/resources/readme/readme_fr.html
@@ -9,7 +9,7 @@ dessus de la section <i>Destinations locales</i> dans le panneau de contrôle),
 s'affichent en face des <i>Destinations locales</i>, le monde d'I2P vous est ouvert, et ci-dessous nous vous en présentons quelques unes.
 </li></ul>
 
-<h3>Les services sur I2P</h3>
+<h3 class="welcome">Les services sur I2P</h3>
 <ul class="links">
 
 <li class="tidylist"><b>Internet invisible et exploration anonyme du web public</b><br>Sur I2P vous pouvez accéder 
@@ -78,7 +78,7 @@ environnement d'écriture de greffons indépendant de tout langage, avec
 n'importe quel langage.</li>
 </ul>
 
-<h3>Hébergement web anonyme crypté sur I2P</h3>
+<h3 class="welcome">Hébergement web anonyme crypté sur I2P</h3>
 <ul class="links">
 
 <li class="tidylist"><b>Prêt à servir !</b><br>I2P est fourni avec un serveur web intégré, prêt à héberger votre propre site web 
@@ -94,7 +94,7 @@ d'enregistrement d'un domaine .i2p, et de promotion de votre site, sont accessib
 l'adresse <a href="http://127.0.0.1:7658/help/" target="_blank">http://127.0.0.1:7658/help/</a>.</li></ul>
     
 <a name="eepsites"></a>    
-    <h3>Sites I2P intéressants</h3>
+    <h3 class="welcome">Sites I2P intéressants</h3>
     <ul class="links">
       <li class="tidylist"><b>Le site officiel de l'Invisible Internet Project (I2P)</b><br>
 <a href="http://i2p-projekt.i2p/" target="_blank">i2p-projekt.i2p</a> et son miroir 
diff --git a/installer/resources/readme/readme_nl.html b/installer/resources/readme/readme_nl.html
index bbaa2616a0a932506044867f7b81eab627f8d17f..449b5108ac1c2099474f84b670cd8edb90dd8da6 100644
--- a/installer/resources/readme/readme_nl.html
+++ b/installer/resources/readme/readme_nl.html
@@ -4,7 +4,7 @@
 
 <li class="tidylist"><b>Netwerk integratie</b><br> De eerste keer dat I2P start duurt het mogelijk enkele minuten om de router te integreren in het netwerk en meerdere peers te vinden om de verbinding te optimaliseren. Als I2P opstart, bij een normale werking, geeft de tunnel gereedheid indicator (direct boven het <i>Lokale bestemmingen</i> gedeelte in het zijpaneel) mogelijk de melding "Tunnels Geweigerd"; dit is normaal en is geen reden voor zorgen. Zodra de <i>Lokale bestemmingen</i> eenmaal aangegeven worden met groene sterren zijn er veel mogelijkheden voor het gebruik van I2P, hieronder worden enkele voorbeelden geïntroduceerd.</li></ul>
   
-<h3>Diensten op I2P</h3>
+<h3 class="welcome">Diensten op I2P</h3>
 <ul class="links">
 
 <li class="tidylist"><b>Invisible Internet &amp; Public Web Browsing</b><br>Op I2P kan je toegang verkrijgen tot anonieme websites (eepsites) en andere diensten (zoals; SSH over I2P, IRC, Jabber etc.), daarnaast heb je ook de mogelijkheid om je eigen dienst aan te bieden. Je kan ook anoniem toegang krijgen tot het normale Internet via de ingebouwde web proxy (outproxy). <a href="https://geti2p.net/htproxyports.html" target="_blank">Configureer je browser</a> voor het gebruik van de HTTP proxy op <code>127.0.0.1 poort 4444</code>, waarna je naar zowel eepsites als normale, onversleutelde <code>http://</code> websites kan surfen. Als je een aanpassing wilt maken aan de outproxy of deze wilt uitschakelen kan je de 'client tunnel' voor <code>false.i2p</code> onder het <i>Outproxies</i> gedeelte in de <a href="/i2ptunnel/edit?tunnel=0" target="_blank">I2P HTTP Proxy Tunnel Editor</a>. In het "Interessante websites" gedeelte <a href="#eepsites">hier onder</a> staat een lijst met een paar van de bekende sites die op I2P gehost worden.</li>
@@ -23,7 +23,7 @@ en maak verbinding met de <a href="irc://127.0.0.1:6668/i2p">server</a> op <code
 <li class="tidylist"><a name="plugins"></a><b>Plugins voor I2P</b><br>Breid de gebruiks mogelijkheden van I2P uit door het installeren van plugins &hellip; blogging, chatting, file sharing en andere plugins zijn al geschreven of geport en wachten op <a href="http://plugins.i2p/plugins/" target="_blank">installatie</a>! Surf naar de plugins en gerelateerde info op <a href="http://plugins.i2p/" target="_blank">plugins.i2p</a>. Als je een <a href="http://plugins.i2p/developers/" target="_blank">ontwikkelaar</a> bent is er een compleet taal-agnostisch framework beschikbaar voor het schrijven van eigen plugins, geleverd met  <a href="http://i2p-projekt.i2p/nl/docs/plugins" target="_blank">documentatie</a>; I2P plugins kunnen geprogrammeerd worden in elke taal.</li>
 </ul>
 
-<h3>Anoniem en versleutelde Web Hosting op I2P</h3>
+<h3 class="welcome">Anoniem en versleutelde Web Hosting op I2P</h3>
 <ul class="links">
 
 <li class="tidylist"><b>Ready to Roll!</b><br> I2P komt met een ingebouwde, ready-to-go web server voor het hosten van je eigen anonieme website (eepsite) op het I2P netwerk: een <a href="http://jetty.mortbay.org/" target="_blank">Jetty</a> server die luistert op <a href="http://127.0.0.1:7658/" target="_blank">http://127.0.0.1:7658/</a>. Om je eigen inhoud te hosten plaats je simpelweg alle bestanden in de <code>eepsite/docroot/</code> directory (of plaats elke standaard JSP/Servlet .war bestanden onder <code>eepsite/webapps</code>,
@@ -34,7 +34,7 @@ en maak verbinding met de <a href="irc://127.0.0.1:6668/i2p">server</a> op <code
   zal je eepsite zichtbaar zijn (maar niet vindbaar) voor anderen. Gedetaïlleerde instructies voor het starten van je eepsite, het registreren van een.i2p domein en promotie van je website aan anderen zijn toegankelijk via je eigen I2P webserver op <a href="http://127.0.0.1:7658/help/" target="_blank">http://127.0.0.1:7658/help/</a>.</li></ul>
 
 <a name="eepsites"></a>    
-    <h3>I2P-Hosted Sites of Interest</h3>
+    <h3 class="welcome">I2P-Hosted Sites of Interest</h3>
     <ul class="links">
       <li class="tidylist"><b>Invisible Internet Project (I2P) Officiële Website</b><br><a href="http://i2p-projekt.i2p/nl/" target="_blank">i2p-projekt.i2p</a>: Veilige en  
         anonieme verbindingen naar <a href="https://geti2p.net/nl/" target="_blank">geti2p.net</a>. Als je meer wilt weten over hoe I2P werkt of hoe je mee kan doen is dit de website waar je terecht kan!</li>
diff --git a/installer/resources/readme/readme_ru.html b/installer/resources/readme/readme_ru.html
index 3087580ae430beb6e2e0bc2486812ed037ce8e11..d0dc0f295e9572dd6de5b5f6a4f9ddbc5e3c5b7b 100644
--- a/installer/resources/readme/readme_ru.html
+++ b/installer/resources/readme/readme_ru.html
@@ -3,7 +3,7 @@
 <ul class="links"><li class="tidylist"><b>Начало&hellip;</b><br>Если вы только что запустили I2P, число <i>Активных пиров</i>, отображаемых под секцией <i>Пиры</i> на боковой панели должно начать увеличиваться через несколько минут, и вы так же увидите <i>Локальный туннель</i> с именем <i>Коллективные Клиенты</i>, и, возможно, другие клиентские и серверные туннели в зависимости от того, как настроен I2P (если нет, смотрите секцию по разрешению проблем <a href="#trouble">ниже</a>). Эти <i>Локальные туннели</i> предоставляют соединения на разных портах (и иногда разные протоколы) для сети I2P, позволяя функционировать вашим torrent, e-mail, прокси и другим сервисам. Ваша <a href="/netdb">База данных сети I2P</a> показывает всех известных роутеру пиров в сети. Больше информации доступно на <a href="/help">странице помощи</a>.</li>
 <li class="tidylist"><b>Сетевая интеграция</b><br> Когда вы впервые запускаете I2P, это может занять несколько минут, т.к. роутер выполняет процедуру начальной загрузки (bootstrap) для интеграции в сеть и поиска пиров для оптимизации интегрированности. Будте терпеливы. Когда I2P запускается, и во время нормальной работы, индикатор готовности к построению туннелей (прямо над секцией <i>Локальные туннели</i> на боковой панели) может показывать "Не принимаем туннели"; это нормальное поведение и не стоит слишком беспокоиться. Когда возле ваших <i>Локальных туннелей</i> загорятся зелёные звёздочки, вы сможете делать с I2P разнообразные вещи, и ниже мы представим вам некоторые из них. </li></ul>
   
-<h3>Сервисы в I2P</h3>
+<h3 class="welcome">Сервисы в I2P</h3>
 <ul class="links">
 
 <li class="tidylist"><b>Невидимый Интернет и просмотр обычных сайтов </b><br>В I2P вы можете заходить на анонимные веб-сайты (так же известные как eepsites) и пользоваться другими сервисами (такими как ssh over I2P, IRC, Jabber и т.д.), а так же поддерживать собственные сервисы. Ещё вы можете выходить в обычный веб анонимно через имеющиеся в I2P веб-прокси (outproxy). <a href="https://geti2p.net/ru/about/browser-config" target="_blank">Настройте ваш браузер</a> на использование <a href="http://proxy.i2p" target="_blank">HTTP proxy</a> на <code>127.0.0.1 порт 4444</code>, затем откройте eepsite или обычный <code>http://</code> адрес. Если вы хотите отключить или изменить возможность доступа в обычный интернет через outproxy, удалите или измените содержимое <code>false.i2p</code> в поле опции <i>Outproxies</i> на странице <a href="/i2ptunnel/edit?tunnel=0" target="_blank">редактирования HTTP Proxy туннеля</a>. В секции Достопримечательности <a href="#eepsites">ниже</a>, мы представляем список некоторых сайтов, имеющихся в I2P.</li>
@@ -23,7 +23,7 @@
       <li class="tidylist"><a name="plugins"></a><b>Плагины для I2P</b><br>Повысьте полезность I2P установив плагины&hellip; блоггинг, чат, обмен файлами и другие плагины уже были написаны или портированы и ждут когда вы их <a href="http://plugins.i2p/plugins/" target="_blank">установите</a>! Смотрите плагины и сопутствующую информацию на <a href="http://plugins.i2p" target="_blank">plugins.i2p</a>. Если вы <a href="http://plugins.i2p/developers/" target="_blank">программист</a>, полный языконезависимый фреймворк для написания плагинов доступен и <a href="http://i2p-projekt.i2p/ru/docs/plugins" target="_blank">документирован</a>; I2P плагины могут быть написаны на любом языке.</li>
 </ul>
 
-<h3>Анонимный шифрованный веб-хостинг в I2P</h3>
+<h3 class="welcome">Анонимный шифрованный веб-хостинг в I2P</h3>
 <ul class="links">
 
 <li class="tidylist"><b>Готовы к действию!</b><br>I2P идёт со встроенным готовым к работе веб-сервером для хостинга вашего собственного анонимного веб-сайта (eepsite) в сети I2P: <a href="http://jetty.mortbay.org/" target="_blank">Jetty</a> развёрнут и слушает на <a href="http://127.0.0.1:7658/" target="_blank">http://127.0.0.1:7658/</a>. Для размещения собственного контента, 
@@ -37,7 +37,7 @@
   I2P-сайта, регистрации .i2p домена и распространению информации о вашем сайте доступны через ваш I2P веб-сервер на странице <a href="http://127.0.0.1:7658/help/" target="_blank">http://127.0.0.1:7658/help/</a>.</li></ul>
     
 <a name="eepsites"></a>    
-    <h3>Достопримечательности I2P</h3>
+    <h3 class="welcome">Достопримечательности I2P</h3>
     <ul class="links">
       <li class="tidylist"><b>Официальный веб-сайт Invisible Internet Project (I2P)</b><br><a href="http://i2p-projekt.i2p/ru/" target="_blank">i2p-projekt.i2p</a>: безопасный и анонимный
         доступ к <a href="https://geti2p.net/ru/" target="_blank">geti2p.net</a>. Так же имеется официальное зеркало на <a href="http://geti2p.net" target="_blank">geti2p.net</a>. Если вы хотите узнать больше о том, как работает I2P, или о том, как вы можете принять участие, это послужит вам точкой входа.</li>
diff --git a/router/java/src/net/i2p/router/Blocklist.java b/router/java/src/net/i2p/router/Blocklist.java
index 3ad8e7387507513ea489f484f8d5d2d3595cc5b1..5290e21ba97d2d5c5f945cbf70b5128dee09febf 100644
--- a/router/java/src/net/i2p/router/Blocklist.java
+++ b/router/java/src/net/i2p/router/Blocklist.java
@@ -916,7 +916,7 @@ public class Blocklist {
         Set<Integer> singles = new TreeSet<Integer>();
         singles.addAll(_singleIPBlocklist);
         if (!(singles.isEmpty() && _singleIPv6Blocklist.isEmpty())) {
-            out.write("<table><tr><th align=\"center\" colspan=\"2\"><b>");
+            out.write("<table id=\"banneduntilrestart\"><tr><th align=\"center\" colspan=\"2\"><b>");
             out.write(_t("IPs Banned Until Restart"));
             out.write("</b></td></tr>");
             // first 0 - 127
@@ -953,7 +953,7 @@ public class Blocklist {
             out.write("</table>");
         }
         if (_blocklistSize > 0) {
-            out.write("<table><tr><th align=\"center\" colspan=\"2\"><b>");
+            out.write("<table id=\"permabanned\"><tr><th align=\"center\" colspan=\"2\"><b>");
             out.write(_t("IPs Permanently Banned"));
             out.write("</b></th></tr><tr><td align=\"center\" width=\"50%\"><b>");
             out.write(_t("From"));
diff --git a/router/java/src/net/i2p/router/PersistentKeyRing.java b/router/java/src/net/i2p/router/PersistentKeyRing.java
index 920eec7d298c34f8888bc79f57da829cd18b22e0..f7dadc6c5e666026fa706e211c085fd2ef210752 100644
--- a/router/java/src/net/i2p/router/PersistentKeyRing.java
+++ b/router/java/src/net/i2p/router/PersistentKeyRing.java
@@ -64,7 +64,7 @@ public class PersistentKeyRing extends KeyRing {
     @Override
     public void renderStatusHTML(Writer out) throws IOException {
         StringBuilder buf = new StringBuilder(1024);
-        buf.append("\n<table><tr><th align=\"left\">Destination Hash<th align=\"left\">Name or Dest.<th align=\"left\">Encryption Key</tr>");
+        buf.append("\n<table class=\"configtable\"><tr><th align=\"left\">Destination Hash<th align=\"left\">Name or Dest.<th align=\"left\">Encryption 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/transport/TransportManager.java b/router/java/src/net/i2p/router/transport/TransportManager.java
index 80888ead7bf56787c6977a14b38ca1367a2dd9b2..d0d9c75abdad2f918c1e1db21215d165f5e990ea 100644
--- a/router/java/src/net/i2p/router/transport/TransportManager.java
+++ b/router/java/src/net/i2p/router/transport/TransportManager.java
@@ -683,7 +683,7 @@ public class TransportManager implements TransportEventListener {
      */
     public void renderStatusHTML(Writer out, String urlBase, int sortFlags) throws IOException {
         if (_context.getBooleanProperty(PROP_ADVANCED)) {
-            out.write("<p><b>");
+            out.write("<p id=\"upnpstatus\"><b>");
             out.write(_t("Status"));
             out.write(": ");
             out.write(_t(getReachabilityStatus().toStatusString()));
@@ -702,7 +702,7 @@ public class TransportManager implements TransportEventListener {
         }
 
         StringBuilder buf = new StringBuilder(4*1024);
-        buf.append("<h3>").append(_t("Router Transport Addresses")).append("</h3><pre>\n");
+        buf.append("<h3 id=\"transports\">").append(_t("Router Transport Addresses")).append("</h3><pre id=\"transports\">\n");
         for (Transport t : _transports.values()) {
             if (t.hasCurrentAddress()) {
                 for (RouterAddress ra : t.getCurrentAddresses()) {
@@ -721,7 +721,7 @@ public class TransportManager implements TransportEventListener {
         } else if (_upnpManager != null) {
             out.write(_upnpManager.renderStatusHTML());
         } else {
-            out.write("<h3><a name=\"upnp\"></a>" + _t("UPnP is not enabled") + "</h3>\n");
+            out.write("<h3 id=\"upnpstatus\"><a name=\"upnp\"></a>" + _t("UPnP is not enabled") + "</h3>\n");
         }
         out.write("</p>\n");
         out.flush();
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 d371a936f57fc610782ca4258ea7030f92385b02..1965a8a7100947409729a679bf4dc0f78d328a2f 100644
--- a/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java
+++ b/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java
@@ -1363,7 +1363,7 @@ public class NTCPTransport extends TransportImpl {
             buf.append(". ").append(_t("Status")).append(": ").append(_t(getReachabilityStatus().toStatusString()));
         }
         buf.append(".</h3>\n" +
-                   "<table>\n" +
+                   "<table id=\"ntcpconnections\">\n" +
                    "<tr><th><a href=\"#def.peer\">").append(_t("Peer")).append("</a></th>" +
                    "<th>").append(_t("Dir")).append("</th>" +
                    "<th>").append(_t("IPv6")).append("</th>" +
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 f627a5b02f860e306483944c3afbf304aa99a5ca..79c8fb658f578faf4740ff6789f2384f1e32c3fd 100644
--- a/router/java/src/net/i2p/router/transport/udp/UDPTransport.java
+++ b/router/java/src/net/i2p/router/transport/udp/UDPTransport.java
@@ -2583,7 +2583,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
             buf.append(". ").append(_t("Status")).append(": ").append(_t(_reachabilityStatus.toStatusString()));
         }
         buf.append(".</h3>\n");
-        buf.append("<table>\n");
+        buf.append("<div class=\"widescroll\"><table id=\"udpconnections\">\n");
         buf.append("<tr><th class=\"smallhead\" nowrap><a href=\"#def.peer\">").append(_t("Peer")).append("</a><br>");
         if (sortFlags != FLAG_ALPHA)
             appendSortLinks(buf, urlBase, sortFlags, _t("Sort by peer hash"), FLAG_ALPHA);
@@ -2847,7 +2847,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
             buf.append("</td></tr>");
         }
      }  // numPeers > 0
-        buf.append("</table>\n");
+        buf.append("</table></div>\n");
 
       /*****
         long bytesTransmitted = _context.bandwidthLimiter().getTotalAllocatedOutboundBytes();