diff --git a/README.md b/README.md
index df6eaec0f8a36cd9325567ff52758cc3d6453050..b95d853d1224e2810f53fc71d5ab6227c272e320 100644
--- a/README.md
+++ b/README.md
@@ -1,51 +1,62 @@
-Prerequisites to build from source:
-	Java SDK (preferably Oracle/Sun or OpenJDK) 1.7.0 or higher
-          Non-linux operating systems and JVMs: See https://trac.i2p2.de/wiki/java
-          Certain subsystems for embedded (core, router, mstreaming, streaming, i2ptunnel) require only Java 1.6
-	Apache Ant 1.7.0 or higher
-	The xgettext, msgfmt, and msgmerge tools installed
-	  from the GNU gettext package http://www.gnu.org/software/gettext/
-	Build environment must use a UTF-8 locale.
+# I2P
 
-To build:
-	On x86 systems do:
-		ant pkg
+This is the source code for the reference Java implementation of I2P.
 
-	On non-x86, use one of the following instead:
-		ant installer-linux
-		ant installer-freebsd
-		ant installer-osx
+Latest release: https://geti2p.net/download
 
-	Run 'ant' with no arguments to see other build options.
-	See INSTALL.txt or https://geti2p.net/download for installation instructions.
+## Installing
 
-Documentation:
-	https://geti2p.net/how
-	API: http://docs.i2p-projekt.de/javadoc/
-	     or run 'ant javadoc' then start at build/javadoc/index.html
+See INSTALL.txt or https://geti2p.net/download for installation instructions.
 
-Latest release:
-	https://geti2p.net/download
+## Documentation
 
-To get development branch from source control:
-	https://geti2p.net/newdevelopers
+https://geti2p.net/how
 
-FAQ:
-	https://geti2p.net/faq
+FAQ: https://geti2p.net/faq
 
-Need help?
-	IRC irc.freenode.net #i2p
-	http://forum.i2p/
+API: http://docs.i2p-projekt.de/javadoc/
+or run 'ant javadoc' then start at build/javadoc/index.html
 
-Bug reports:
-	https://trac.i2p2.de/report/1
+## Building packages from source
 
-Contact information, security issues, press inquiries:
-	https://geti2p.net/en/contact
+To get development branch from source control: https://geti2p.net/newdevelopers
 
-Twitter:
-	@i2p, @geti2p
+### Prerequisites
 
-Licenses:
-	See LICENSE.txt
+- Java SDK (preferably Oracle/Sun or OpenJDK) 1.7.0 or higher
+  - Non-linux operating systems and JVMs: See https://trac.i2p2.de/wiki/java
+  - Certain subsystems for embedded (core, router, mstreaming, streaming, i2ptunnel)
+    require only Java 1.6
+- Apache Ant 1.7.0 or higher
+- The xgettext, msgfmt, and msgmerge tools installed from the GNU gettext package
+  http://www.gnu.org/software/gettext/
+- Build environment must use a UTF-8 locale.
+
+### Build process
+
+On x86 systems do:
+
+    ant pkg
+
+On non-x86, use one of the following instead:
+
+    ant installer-linux
+    ant installer-freebsd
+    ant installer-osx
+
+Run 'ant' with no arguments to see other build options.
+
+## Contact info
+
+Need help? See the IRC channel #i2p on irc.freenode.net
+
+Bug reports: https://trac.i2p2.de/report/1
+
+Contact information, security issues, press inquiries: https://geti2p.net/en/contact
+
+Twitter: @i2p, @geti2p
+
+## Licenses
+
+See LICENSE.txt
 
diff --git a/apps/BOB/src/net/i2p/BOB/MUXlisten.java b/apps/BOB/src/net/i2p/BOB/MUXlisten.java
index 578c80d47f92688a47758a12e0db7c2ff03d53bf..7dee1eeb3352544b8b49831927153fe0a0674567 100644
--- a/apps/BOB/src/net/i2p/BOB/MUXlisten.java
+++ b/apps/BOB/src/net/i2p/BOB/MUXlisten.java
@@ -45,7 +45,7 @@ public class MUXlisten implements Runnable {
 	private ThreadGroup tg;
 	private final String N;
 	private ServerSocket listener;
-	private final int backlog = 50; // should this be more? less?
+	private static final int backlog = 50; // should this be more? less?
 	private final boolean go_out;
 	private final boolean come_in;
 	private final AtomicBoolean lock;
diff --git a/apps/desktopgui/locale/messages_in.po b/apps/desktopgui/locale/messages_in.po
index c5593234d3917933c4ca20a22ab1c3fdb49a7612..c0478fbf1847edeba66bcc3b2ea8e46006b0823f 100644
--- a/apps/desktopgui/locale/messages_in.po
+++ b/apps/desktopgui/locale/messages_in.po
@@ -5,13 +5,14 @@
 # 
 # Translators:
 # Khairul Agasta <khairuldroids@gmail.com>, 2014
+# Robert Dafis <robertdafis@gmail.com>, 2017
 msgid ""
 msgstr ""
 "Project-Id-Version: I2P\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2016-05-25 12:29+0000\n"
-"PO-Revision-Date: 2017-06-30 21:32+0000\n"
-"Last-Translator: zzzi2p\n"
+"PO-Revision-Date: 2017-07-27 00:14+0000\n"
+"Last-Translator: Robert Dafis <robertdafis@gmail.com>\n"
 "Language-Team: Indonesian (http://www.transifex.com/otf/I2P/language/id/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -42,12 +43,12 @@ msgstr "Luncurkan Peramban I2P"
 #: src/net/i2p/desktopgui/InternalTrayManager.java:76
 #: src/net/i2p/desktopgui/InternalTrayManager.java:228
 msgid "Configure I2P System Tray"
-msgstr ""
+msgstr "Ubah pengaturan I2P System Tray"
 
 #: src/net/i2p/desktopgui/InternalTrayManager.java:77
 #: src/net/i2p/desktopgui/InternalTrayManager.java:229
 msgid "Disable"
-msgstr ""
+msgstr "Matikan"
 
 #: src/net/i2p/desktopgui/InternalTrayManager.java:93
 #: src/net/i2p/desktopgui/InternalTrayManager.java:245
@@ -62,26 +63,26 @@ msgstr "Hentikan I2P"
 #: src/net/i2p/desktopgui/InternalTrayManager.java:126
 #: src/net/i2p/desktopgui/InternalTrayManager.java:278
 msgid "Restart I2P Immediately"
-msgstr ""
+msgstr "Ulang kembali I2P sekarang"
 
 #: src/net/i2p/desktopgui/InternalTrayManager.java:143
 #: src/net/i2p/desktopgui/InternalTrayManager.java:295
 msgid "Stop I2P Immediately"
-msgstr ""
+msgstr "Hentikan I2P sekarang"
 
 #: src/net/i2p/desktopgui/InternalTrayManager.java:157
 #: src/net/i2p/desktopgui/InternalTrayManager.java:309
 msgid "Cancel I2P Shutdown"
-msgstr ""
+msgstr "Batal tutup I2P"
 
 #: src/net/i2p/desktopgui/InternalTrayManager.java:363
 #, java-format
 msgid "Shutdown in {0}"
-msgstr ""
+msgstr "Mematikan I2P dalam {0}"
 
 #: src/net/i2p/desktopgui/InternalTrayManager.java:365
 msgid "Shutdown imminent"
-msgstr ""
+msgstr "I2P sedang dalam proses dimatikan"
 
 #. status translations are in the console bundle
 #: src/net/i2p/desktopgui/InternalTrayManager.java:370
@@ -91,4 +92,4 @@ msgstr "Jaringan"
 #. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
 #: src/net/i2p/desktopgui/TrayManager.java:63
 msgid "I2P: Right-click for menu"
-msgstr ""
+msgstr "I2P: klik kanan untuk menampilkan menu"
diff --git a/apps/desktopgui/locale/messages_it.po b/apps/desktopgui/locale/messages_it.po
index 76b42964a8959224b07f0d39684abee74a17a76f..f58e0a5f0e793e01ff47b5df135a5fd9a37bf3eb 100644
--- a/apps/desktopgui/locale/messages_it.po
+++ b/apps/desktopgui/locale/messages_it.po
@@ -14,7 +14,7 @@ msgstr ""
 "Project-Id-Version: I2P\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2016-05-25 12:29+0000\n"
-"PO-Revision-Date: 2017-06-30 21:32+0000\n"
+"PO-Revision-Date: 2017-07-30 07:04+0000\n"
 "Last-Translator: Sebastiano Pistore <SebastianoPistore.info@protonmail.ch>\n"
 "Language-Team: Italian (http://www.transifex.com/otf/I2P/language/it/)\n"
 "MIME-Version: 1.0\n"
@@ -46,7 +46,7 @@ msgstr "Lancia il browser I2P"
 #: src/net/i2p/desktopgui/InternalTrayManager.java:76
 #: src/net/i2p/desktopgui/InternalTrayManager.java:228
 msgid "Configure I2P System Tray"
-msgstr "Configura l'icona di I2P nella Barra di notifica"
+msgstr "Configura icona di I2P nella Barra di notifica"
 
 #: src/net/i2p/desktopgui/InternalTrayManager.java:77
 #: src/net/i2p/desktopgui/InternalTrayManager.java:229
@@ -76,16 +76,16 @@ msgstr "Arresta subito I2P"
 #: src/net/i2p/desktopgui/InternalTrayManager.java:157
 #: src/net/i2p/desktopgui/InternalTrayManager.java:309
 msgid "Cancel I2P Shutdown"
-msgstr "Annulla l'arresto di I2P"
+msgstr "Annulla arresto di I2P"
 
 #: src/net/i2p/desktopgui/InternalTrayManager.java:363
 #, java-format
 msgid "Shutdown in {0}"
-msgstr "Spegnimento in {0}"
+msgstr "Arresto in {0}"
 
 #: src/net/i2p/desktopgui/InternalTrayManager.java:365
 msgid "Shutdown imminent"
-msgstr "Spegnimento imminente"
+msgstr "Arresto imminente"
 
 #. status translations are in the console bundle
 #: src/net/i2p/desktopgui/InternalTrayManager.java:370
diff --git a/apps/desktopgui/locale/messages_nb.po b/apps/desktopgui/locale/messages_nb.po
index 63674c5d2d44d46da300f44bf26abd08ae2a6df9..93f07e0602b44465d844cbdc6f66d072d17c23ba 100644
--- a/apps/desktopgui/locale/messages_nb.po
+++ b/apps/desktopgui/locale/messages_nb.po
@@ -5,13 +5,14 @@
 # 
 # Translators:
 # Allan Nordhøy <epost@anotheragency.no>, 2014
+# Allan Nordhøy <epost@anotheragency.no>, 2017
 msgid ""
 msgstr ""
 "Project-Id-Version: I2P\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2016-05-25 12:29+0000\n"
-"PO-Revision-Date: 2017-06-30 21:32+0000\n"
-"Last-Translator: zzzi2p\n"
+"PO-Revision-Date: 2017-07-17 16:52+0000\n"
+"Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n"
 "Language-Team: Norwegian Bokmål (http://www.transifex.com/otf/I2P/language/nb/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -42,7 +43,7 @@ msgstr "Kjør I2P-nettleser"
 #: src/net/i2p/desktopgui/InternalTrayManager.java:76
 #: src/net/i2p/desktopgui/InternalTrayManager.java:228
 msgid "Configure I2P System Tray"
-msgstr ""
+msgstr "Sett opp I2P systemkruv"
 
 #: src/net/i2p/desktopgui/InternalTrayManager.java:77
 #: src/net/i2p/desktopgui/InternalTrayManager.java:229
@@ -62,17 +63,17 @@ msgstr "Stopp I2P"
 #: src/net/i2p/desktopgui/InternalTrayManager.java:126
 #: src/net/i2p/desktopgui/InternalTrayManager.java:278
 msgid "Restart I2P Immediately"
-msgstr ""
+msgstr "Umiddelbar omstart av I2P"
 
 #: src/net/i2p/desktopgui/InternalTrayManager.java:143
 #: src/net/i2p/desktopgui/InternalTrayManager.java:295
 msgid "Stop I2P Immediately"
-msgstr ""
+msgstr "Umiddelbar stopp av I2P"
 
 #: src/net/i2p/desktopgui/InternalTrayManager.java:157
 #: src/net/i2p/desktopgui/InternalTrayManager.java:309
 msgid "Cancel I2P Shutdown"
-msgstr ""
+msgstr "Avbryt nedstenging av I2P"
 
 #: src/net/i2p/desktopgui/InternalTrayManager.java:363
 #, java-format
@@ -91,4 +92,4 @@ msgstr "Nettverk"
 #. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
 #: src/net/i2p/desktopgui/TrayManager.java:63
 msgid "I2P: Right-click for menu"
-msgstr ""
+msgstr "Høyreklikk-meny i I2P"
diff --git a/apps/i2psnark/java/src/org/klomp/snark/Message.java b/apps/i2psnark/java/src/org/klomp/snark/Message.java
index ee07ae9ef33e5f7af2e3c7a8622fcc3a4cb5523f..bed8b9541e105725ef202ed6fc206ba61258945e 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/Message.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/Message.java
@@ -52,26 +52,26 @@ class Message
   
   // Not all fields are used for every message.
   // KEEP_ALIVE doesn't have a real wire representation
-  byte type;
+  final byte type;
 
   // Used for HAVE, REQUEST, PIECE and CANCEL messages.
   // Also SUGGEST, REJECT, ALLOWED_FAST
   // low byte used for EXTENSION message
   // low two bytes used for PORT message
-  int piece;
+  final int piece;
 
   // Used for REQUEST, PIECE and CANCEL messages.
   // Also REJECT
-  int begin;
-  int length;
+  final int begin;
+  final int length;
 
   // Used for PIECE and BITFIELD and EXTENSION messages
   byte[] data;
-  int off;
-  int len;
+  final int off;
+  final int len;
 
   // Used to do deferred fetch of data
-  DataLoader dataLoader;
+  private final DataLoader dataLoader;
 
   // now unused
   //SimpleTimer.TimedEvent expireEvent;
@@ -79,6 +79,79 @@ class Message
   private static final int BUFSIZE = PeerState.PARTSIZE;
   private static final ByteCache _cache = ByteCache.getInstance(16, BUFSIZE);
 
+  /**
+   * For types KEEP_ALIVE, CHOKE, UNCHOKE, INTERESTED, UNINTERESTED, HAVE_ALL, HAVE_NONE
+   * @since 0.9.32
+   */
+  Message(byte type) {
+      this(type, 0, 0, 0, null, 0, 0, null);
+  }
+
+  /**
+   * For types HAVE, PORT, SUGGEST, ALLOWED_FAST
+   * @since 0.9.32
+   */
+  Message(byte type, int piece) {
+      this(type, piece, 0, 0, null, 0, 0, null);
+  }
+
+  /**
+   * For types REQUEST, REJECT, CANCEL
+   * @since 0.9.32
+   */
+  Message(byte type, int piece, int begin, int length) {
+      this(type, piece, begin, length, null, 0, 0, null);
+  }
+
+  /**
+   * For type BITFIELD
+   * @since 0.9.32
+   */
+  Message(byte[] data) {
+      this(BITFIELD, 0, 0, 0, data, 0, data.length, null);
+  }
+
+  /**
+   * For type EXTENSION
+   * @since 0.9.32
+   */
+  Message(int id, byte[] data) {
+      this(EXTENSION, id, 0, 0, data, 0, data.length, null);
+  }
+
+  /**
+   * For type PIECE with deferred data
+   * @since 0.9.32
+   */
+  Message(int piece, int begin, int length, DataLoader loader) {
+      this(PIECE, piece, begin, length, null, 0, length, loader);
+  }
+
+  /**
+   * For type PIECE with data
+   * We don't use this anymore.
+   * @since 0.9.32
+   */
+/****
+  Message(int piece, int begin, int length, byte[] data) {
+      this(PIECE, piece, begin, length, data, 0, length, null);
+  }
+****/
+
+  /**
+   * @since 0.9.32
+   */
+  private Message(byte type, int piece, int begin, int length, byte[] data, int off, int len, DataLoader loader) {
+      this.type = type;
+      this.piece = piece;
+      this.begin = begin;
+      this.length = length;
+      this.data = data;
+      this.off = off;
+      this.len = len;
+      dataLoader = loader;
+  }
+
   /** Utility method for sending a message through a DataStream. */
   void sendMessage(DataOutputStream dos) throws IOException
   {
@@ -121,10 +194,10 @@ class Message
       datalen += 4;
 
     // msg type is 1 byte
-    if (type == EXTENSION)
+    else if (type == EXTENSION)
       datalen += 1;
 
-    if (type == PORT)
+    else if (type == PORT)
       datalen += 2;
 
     // add length of data for piece or bitfield array.
@@ -150,10 +223,10 @@ class Message
         type == REJECT)
         dos.writeInt(length);
 
-    if (type == EXTENSION)
+    else if (type == EXTENSION)
         dos.writeByte((byte) piece & 0xff);
 
-    if (type == PORT)
+    else if (type == PORT)
         dos.writeShort(piece & 0xffff);
 
     // Send actual data
diff --git a/apps/i2psnark/java/src/org/klomp/snark/PeerConnectionIn.java b/apps/i2psnark/java/src/org/klomp/snark/PeerConnectionIn.java
index da1b943332f8e4c38664c9fd9dbe393deee89b85..5111208c793ecf6cb4efc53ff7dc340331e2e978 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/PeerConnectionIn.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/PeerConnectionIn.java
@@ -49,12 +49,11 @@ class PeerConnectionIn implements Runnable
     this.peer = peer;
     this.din = din;
     lastRcvd = System.currentTimeMillis();
-    quit = false;
   }
 
   void disconnect()
   {
-    if (quit == true)
+    if (quit)
       return;
 
     quit = true;
diff --git a/apps/i2psnark/java/src/org/klomp/snark/PeerConnectionOut.java b/apps/i2psnark/java/src/org/klomp/snark/PeerConnectionOut.java
index 314b534bce83e82a2bc419d725e5bf0748e03a74..8cca67e8e776fcb52542ac931d57689cb483c715 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/PeerConnectionOut.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/PeerConnectionOut.java
@@ -126,11 +126,7 @@ class PeerConnectionOut implements Runnable
                               it.remove();
                               //SimpleTimer.getInstance().removeEvent(nm.expireEvent);
                               if (peer.supportsFast()) {
-                                  Message r = new Message();
-                                  r.type = Message.REJECT;
-                                  r.piece = nm.piece;
-                                  r.begin = nm.begin;
-                                  r.length = nm.length;
+                                  Message r = new Message(Message.REJECT, nm.piece, nm.begin, nm.length);
                                   if (_log.shouldLog(Log.DEBUG))
                                       _log.debug("Send " + peer + ": " + r);
                                    r.sendMessage(dout);
@@ -294,11 +290,7 @@ class PeerConnectionOut implements Runnable
                 it.remove();
                 removed = true;
                 if (type == Message.PIECE && peer.supportsFast()) {
-                    Message r = new Message();
-                    r.type = Message.REJECT;
-                    r.piece = m.piece;
-                    r.begin = m.begin;
-                    r.length = m.length;
+                    Message r = new Message(Message.REJECT, m.piece, m.begin, m.length);
                     if (_log.shouldLog(Log.DEBUG))
                         _log.debug("Send " + peer + ": " + r);
                     try {
@@ -314,13 +306,12 @@ class PeerConnectionOut implements Runnable
 
   void sendAlive()
   {
-    Message m = new Message();
-    m.type = Message.KEEP_ALIVE;
-//  addMessage(m);
     synchronized(sendQueue)
       {
-        if(sendQueue.isEmpty())
+        if(sendQueue.isEmpty()) {
+          Message m = new Message(Message.KEEP_ALIVE);
           sendQueue.offer(m);
+        }
         sendQueue.notifyAll();
       }
   }
@@ -335,11 +326,7 @@ class PeerConnectionOut implements Runnable
                                  : Message.CHOKE;
         if (!removeMessage(inverseType))
           {
-            Message m = new Message();
-            if (choke)
-              m.type = Message.CHOKE;
-            else
-              m.type = Message.UNCHOKE;
+            Message m = new Message(choke ? Message.CHOKE : Message.UNCHOKE);
             addMessage(m);
           }
       }
@@ -353,11 +340,7 @@ class PeerConnectionOut implements Runnable
                                     : Message.INTERESTED;
         if (!removeMessage(inverseType))
           {
-            Message m = new Message();
-            if (interest)
-              m.type = Message.INTERESTED;
-            else
-              m.type = Message.UNINTERESTED;
+            Message m = new Message(interest ? Message.INTERESTED : Message.UNINTERESTED);
             addMessage(m);
           }
       }
@@ -365,9 +348,7 @@ class PeerConnectionOut implements Runnable
 
   void sendHave(int piece)
   {
-    Message m = new Message();
-    m.type = Message.HAVE;
-    m.piece = piece;
+    Message m = new Message(Message.HAVE, piece);
     addMessage(m);
   }
 
@@ -379,11 +360,7 @@ class PeerConnectionOut implements Runnable
     } else if (fast && bitfield.count() <= 0) {
         sendHaveNone();
     } else {
-       Message m = new Message();
-       m.type = Message.BITFIELD;
-       m.data = bitfield.getFieldBytes();
-       m.off = 0;
-       m.len = m.data.length;
+       Message m = new Message(bitfield.getFieldBytes());
        addMessage(m);
     }
   }
@@ -434,11 +411,7 @@ class PeerConnectionOut implements Runnable
               }
           }
       }
-    Message m = new Message();
-    m.type = Message.REQUEST;
-    m.piece = req.getPiece();
-    m.begin = req.off;
-    m.length = req.len;
+    Message m = new Message(Message.REQUEST, req.getPiece(), req.off, req.len);
     addMessage(m);
     req.sendTime = System.currentTimeMillis();
   }
@@ -482,14 +455,7 @@ class PeerConnectionOut implements Runnable
 
       // queue a fake message... set everything up,
       // except save the PeerState instead of the bytes.
-      Message m = new Message();
-      m.type = Message.PIECE;
-      m.piece = piece;
-      m.begin = begin;
-      m.length = length;
-      m.dataLoader = loader;
-      m.off = 0;
-      m.len = length;
+      Message m = new Message(piece, begin, length, loader);
       addMessage(m);
   }
 
@@ -498,21 +464,17 @@ class PeerConnectionOut implements Runnable
    *  Also add a timeout.
    *  We don't use this anymore.
    */
+/****
   void sendPiece(int piece, int begin, int length, byte[] bytes)
   {
-    Message m = new Message();
-    m.type = Message.PIECE;
-    m.piece = piece;
-    m.begin = begin;
-    m.length = length;
-    m.data = bytes;
-    m.off = 0;
-    m.len = length;
+    Message m = new Message(piece, begin, length, bytes);
     // since we have the data already loaded, queue a timeout to remove it
     // no longer prefetched
     addMessage(m);
   }
+****/
 
+  /** send cancel */
   void sendCancel(Request req)
   {
     // See if it is still in our send queue
@@ -531,11 +493,7 @@ class PeerConnectionOut implements Runnable
       }
 
     // Always send, just to be sure it it is really canceled.
-    Message m = new Message();
-    m.type = Message.CANCEL;
-    m.piece = req.getPiece();
-    m.begin = req.off;
-    m.length = req.len;
+    Message m = new Message(Message.CANCEL, req.getPiece(), req.off, req.len);
     addMessage(m);
   }
 
@@ -578,20 +536,13 @@ class PeerConnectionOut implements Runnable
 
   /** @since 0.8.2 */
   void sendExtension(int id, byte[] bytes) {
-    Message m = new Message();
-    m.type = Message.EXTENSION;
-    m.piece = id;
-    m.data = bytes;
-    m.off = 0;
-    m.len = bytes.length;
+    Message m = new Message(id, bytes);
     addMessage(m);
   }
 
   /** @since 0.8.4 */
   void sendPort(int port) {
-    Message m = new Message();
-    m.type = Message.PORT;
-    m.piece = port;
+    Message m = new Message(Message.PORT, port);
     addMessage(m);
   }
 
@@ -599,34 +550,28 @@ class PeerConnectionOut implements Runnable
    *  Unused
    *  @since 0.9.21
    */
+/****
   void sendSuggest(int piece) {
-    Message m = new Message();
-    m.type = Message.SUGGEST;
-    m.piece = piece;
+    Message m = new Message(Message.SUGGEST, piece);
     addMessage(m);
   }
+****/
 
   /** @since 0.9.21 */
   private void sendHaveAll() {
-    Message m = new Message();
-    m.type = Message.HAVE_ALL;
+    Message m = new Message(Message.HAVE_ALL);
     addMessage(m);
   }
 
   /** @since 0.9.21 */
   private void sendHaveNone() {
-    Message m = new Message();
-    m.type = Message.HAVE_NONE;
+    Message m = new Message(Message.HAVE_NONE);
     addMessage(m);
   }
 
   /** @since 0.9.21 */
   void sendReject(int piece, int begin, int length) {
-    Message m = new Message();
-    m.type = Message.REJECT;
-    m.piece = piece;
-    m.begin = begin;
-    m.length = length;
+    Message m = new Message(Message.REJECT, piece, begin, length);
     addMessage(m);
   }
 
@@ -634,10 +579,10 @@ class PeerConnectionOut implements Runnable
    *  Unused
    *  @since 0.9.21
    */
+/****
   void sendAllowedFast(int piece) {
-    Message m = new Message();
-    m.type = Message.ALLOWED_FAST;
-    m.piece = piece;
+    Message m = new Message(Message.ALLOWED_FAST, piece);
     addMessage(m);
   }
+****/
 }
diff --git a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java
index 061ccd727fdec33d49e74e85631ac650b794c497..aa35f90b42f5b907f7ff349364e285b296a92774 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java
@@ -181,6 +181,7 @@ public class SnarkManager implements CompleteListener, ClientApp {
        // The following is ECDSA_SHA256_P256
        ,"TheBland", "http://s5ikrdyjwbcgxmqetxb3nyheizftms7euacuub2hic7defkh3xhq.b32.i2p/a=http://tracker.thebland.i2p/tracker/index.jsp"
        ,"psi's open tracker", "http://uajd4nctepxpac4c4bdyrdw7qvja2a5u3x25otfhkptcjgd53ioq.b32.i2p/announce=http://uajd4nctepxpac4c4bdyrdw7qvja2a5u3x25otfhkptcjgd53ioq.b32.i2p/"
+       ,"C.Tracker", "http://ri5a27ioqd4vkik72fawbcryglkmwyy4726uu5j3eg6zqh2jswfq.b32.i2p/announce=http://tracker.crypthost.i2p/tracker/index.jsp",
     };
     
     /** URL. This is our equivalent to router.utorrent.com for bootstrap */
@@ -201,8 +202,11 @@ public class SnarkManager implements CompleteListener, ClientApp {
         "opentracker.psi.i2p", "vmow3h54yljn7zvzbqepdddt5fmygijujycod2q6yznpy2rrzuwa.b32.i2p",
         "tracker.killyourtv.i2p", "5mpvzxfbd4rtped3c7ln4ddw52e7i7t56s36ztky4ustxtxrjdpa.b32.i2p",
         "opendiftracker.i2p", "bikpeyxci4zuyy36eau5ycw665dplun4yxamn7vmsastejdqtfoq.b32.i2p",
+        "tracker.crypthost.i2p", "ri5a27ioqd4vkik72fawbcryglkmwyy4726uu5j3eg6zqh2jswfq.b32.i2p",
         // psi go - unregistered
-        "uajd4nctepxpac4c4bdyrdw7qvja2a5u3x25otfhkptcjgd53ioq.b32.i2p"
+        "uajd4nctepxpac4c4bdyrdw7qvja2a5u3x25otfhkptcjgd53ioq.b32.i2p",
+        // Vuze - unregistered
+        "crs2nugpvoqygnpabqbopwyjqettwszth6ubr2fh7whstlos3a6q.b32.i2p"
     }));
 
     static {
diff --git a/apps/i2psnark/java/src/org/klomp/snark/dht/KRPC.java b/apps/i2psnark/java/src/org/klomp/snark/dht/KRPC.java
index 46d4476dcea64a7677a45f24ee0244295d3cc295..1d253c049959e4503e15f6fe166186b27c51107c 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/dht/KRPC.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/dht/KRPC.java
@@ -846,6 +846,7 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
      *  @param nInfo who to send it to
      *  @return success
      */
+/****
     private boolean sendError(NodeInfo nInfo, MsgID msgID, int err, String msg) {
         if (_log.shouldLog(Log.INFO))
             _log.info("Sending error " + msg + " to: " + nInfo);
@@ -856,6 +857,7 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
         map.put("e", error);
         return sendError(nInfo, msgID, map);
     }
+****/
 
     // Low-level send methods
 
@@ -1422,6 +1424,11 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
         List<Hash> rv = new ArrayList<Hash>(max);
         for (BEValue bev : peers) {
             byte[] b = bev.getBytes();
+            if (b.length != Hash.HASH_LENGTH) {
+                if (_log.shouldWarn())
+                    _log.info("Bad peers entry from: " + nInfo);
+                continue;
+            }
             //Hash h = new Hash(b);
             Hash h = Hash.create(b);
             rv.add(h);
diff --git a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
index 56cdcfcc9f4d89caeccc0e76318270a7b7b6d9a6..b21a8612dedb255e05b132cad9c99a746edc4ea8 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
@@ -395,7 +395,7 @@ public class I2PSnarkServlet extends BasicServlet {
         List<String> msgs = _manager.getMessages();
         if (!msgs.isEmpty()) {
             out.write("\n<div class=\"snarkMessages\" tabindex=\"0\">");
-            out.write("<a href=\"" + _contextPath + '/');
+            out.write("<a id=\"closeLog\" href=\"" + _contextPath + '/');
             if (isConfigure)
                 out.write("configure");
             if (peerString.length() > 0)
@@ -407,6 +407,8 @@ public class I2PSnarkServlet extends BasicServlet {
             out.write(toThemeImg("delete", tx, tx));
             out.write("</a>" +
                       "\n<ul>\n");
+            out.write("<noscript><li class=\"noscriptWarning\">Warning! Javascript is disabled in your browser. If <a href=\"configure\">page refresh</a> is enabled, ");
+            out.write("you will lose any input in the add/create torrent sections when a refresh occurs.</li></noscript>");
             for (int i = msgs.size()-1; i >= 0; i--) {
                 String msg = msgs.get(i);
                 out.write("<li>" + msg + "</li>\n");
@@ -1862,14 +1864,10 @@ public class I2PSnarkServlet extends BasicServlet {
                 String client;
                 if ("AwMD".equals(ch))
                     client = _t("I2PSnark");
-                else if ("BFJT".equals(ch))
-                    client = "I2PRufus";
-                else if ("TTMt".equals(ch))
-                    client = "I2P-BT";
                 else if ("LUFa".equals(ch))
                     client = "Vuze" + getAzVersion(pid.getID());
-                else if ("CwsL".equals(ch))
-                    client = "I2PSnarkXL";
+                else if ("LUJJ".equals(ch))
+                    client = "BiglyBT" + getAzVersion(pid.getID());
                 else if ("LVhE".equals(ch))
                     client = "XD" + getAzVersion(pid.getID());
                 else if ("ZV".equals(ch.substring(2,4)) || "VUZP".equals(ch))
@@ -1878,6 +1876,12 @@ public class I2PSnarkServlet extends BasicServlet {
                     client = "Transmission" + getAzVersion(pid.getID());
                 else if ("LUtU".equals(ch))
                     client = "KTorrent" + getAzVersion(pid.getID());
+                else if ("CwsL".equals(ch))
+                    client = "I2PSnarkXL";
+                else if ("BFJT".equals(ch))
+                    client = "I2PRufus";
+                else if ("TTMt".equals(ch))
+                    client = "I2P-BT";
                 else
                     client = _t("Unknown") + " (" + ch + ')';
                 out.write(client + "&nbsp;<tt title=\"");
@@ -1979,7 +1983,7 @@ public class I2PSnarkServlet extends BasicServlet {
     private static String getAzVersion(byte[] id) {
         if (id[7] != '-')
             return "";
-        StringBuilder buf = new StringBuilder(16);
+        StringBuilder buf = new StringBuilder(8);
         buf.append(' ');
         for (int i = 3; i <= 6; i++) {
             int val = id[i] - '0';
@@ -2202,34 +2206,43 @@ public class I2PSnarkServlet extends BasicServlet {
         out.write("\" name=\"foo\" >");
         out.write("<tr><td>\n");
         out.write(_t("Trackers"));
-        out.write(":<td><table id=\"trackerselect\" style=\"width: 30%;\"><tr><td></td><td align=\"center\">");
+        out.write(":<td><table id=\"trackerselect\"><tr><td>Name</td><td align=\"center\">");
         out.write(_t("Primary"));
         out.write("</td><td align=\"center\">");
         out.write(_t("Alternates"));
         out.write("</td><td>");
-        out.write(_t("Tracker URL"));
+        out.write(_t("Tracker Type"));
         out.write("</td></tr>\n");
 
         for (Tracker t : sortedTrackers) {
+            List<String> openTrackers = _manager.util().getOpenTrackers();
+            List<String> privateTrackers = _manager.getPrivateTrackers();
+            boolean isPrivate = privateTrackers.contains(t.announceURL);
+            boolean isKnownOpen = _manager.util().isKnownOpenTracker(t.announceURL);
+            boolean isOpen = isKnownOpen || openTrackers.contains(t.announceURL);
             String name = t.name;
             String announceURL = t.announceURL.replace("&#61;", "=");
             String homeURL = t.baseURL;
-            out.write("<tr><td>");
+            out.write("<tr><td><span class=\"trackerName\">");
             out.write(name);
-            out.write("</td><td align=\"center\"><input type=\"radio\" name=\"announceURL\" value=\"");
+            out.write("</span></td><td align=\"center\"><input type=\"radio\" name=\"announceURL\" value=\"");
             out.write(announceURL);
             out.write("\"");
             if (announceURL.equals(_lastAnnounceURL))
                 out.write(" checked");
             out.write("></td><td align=\"center\"><input type=\"checkbox\" name=\"backup_");
             out.write(announceURL);
-            out.write("\" value=\"foo\"></td><td><a href=\"");
-            out.write(homeURL);
-            out.write("\">");
-            out.write(homeURL);
-            out.write("</a></td></tr>\n");
+            out.write("\" value=\"foo\"></td><td>");
+
+            if (!(isOpen || isPrivate))
+                out.write(_t("Standard"));
+            if (isOpen)
+                out.write(_t("Open"));
+            if (isPrivate) {
+                out.write(_t("Private"));
+            }
         }
-        out.write("<tr><td><i>");
+        out.write("</td></tr><tr><td><i>");
         out.write(_t("none"));
         out.write("</i></td><td align=\"center\"><input type=\"radio\" name=\"announceURL\" value=\"none\"");
         if (_lastAnnounceURL == null)
@@ -2419,8 +2432,10 @@ public class I2PSnarkServlet extends BasicServlet {
         out.write("\"> KBps <td id=\"bwHelp\"><i>");
         out.write(_t("Half available bandwidth recommended."));
         if (_context.isRouterContext()) {
-            out.write("</i> <a href=\"/config.jsp\" target=\"blank\">[");
+            out.write("</i> <a href=\"/config.jsp\" target=\"blank\" title=\"");
             out.write(_t("View or change router bandwidth"));
+            out.write("\">[");
+            out.write(_t("Configure"));
             out.write("]</a>");
         }
         out.write("\n<tr><td><label for=\"useOpenTrackers\">");
@@ -2748,7 +2763,7 @@ public class I2PSnarkServlet extends BasicServlet {
     private static final String TABLE_HEADER = "<table border=\"0\" class=\"snarkTorrents\" width=\"100%\" >\n" +
                                                "<thead>\n";
 
-    private static final String FOOTER = "</div></center></body></html>";
+    private static final String FOOTER = "</div></center>\n</body>\n</html>";
 
 
     /**
@@ -2857,7 +2872,7 @@ public class I2PSnarkServlet extends BasicServlet {
                                r.isDirectory();
 
         StringBuilder buf=new StringBuilder(4096);
-        buf.append(DOCTYPE).append("<HTML><HEAD><TITLE>");
+        buf.append(DOCTYPE).append("<html><head><title>");
         if (title.endsWith("/"))
             title = title.substring(0, title.length() - 1);
         final String directory = title;
@@ -2865,13 +2880,13 @@ public class I2PSnarkServlet extends BasicServlet {
         final boolean isTopLevel = dirSlash <= 0;
         title = _t("Torrent") + ": " + DataHelper.escapeHTML(title);
         buf.append(title);
-        buf.append("</TITLE>\n").append(HEADER_A).append(_themePath).append(HEADER_B)
+        buf.append("</title>\n").append(HEADER_A).append(_themePath).append(HEADER_B)
            // hide javascript-dependent buttons when js is unavailable
            .append("<noscript><style type=\"text/css\">.script {display: none;}</style></noscript>")
            .append("<link rel=\"shortcut icon\" href=\"" + _themePath + "favicon.ico\">\n");
         if (showPriority)
             buf.append("<script src=\"").append(_contextPath).append(WARBASE + "js/folder.js\" type=\"text/javascript\"></script>\n");
-        buf.append("</HEAD><BODY");
+        buf.append("</head><body");
         if (showPriority)
             buf.append(" onload=\"setupbuttons()\"");
         buf.append(">\n<center><div class=\"snarknavbar\"><a href=\"").append(_contextPath).append("/\" title=\"Torrents\"");
@@ -2880,7 +2895,7 @@ public class I2PSnarkServlet extends BasicServlet {
             buf.append(_t("I2PSnark"));
         else
             buf.append(_contextName);
-        buf.append("</a></div></center>\n");
+        buf.append("</a></div>\n");
 
         if (parent)  // always true
             buf.append("<div class=\"page\">\n<div class=\"mainsection\">");
@@ -3183,7 +3198,7 @@ public class I2PSnarkServlet extends BasicServlet {
                .append("</th></tr><tr><td><b>").append(_t("Resource")).append(":</b></td><td>").append(r.toString())
                .append("</td></tr><tr><td><b>").append(_t("Base")).append(":</b></td><td>").append(base)
                .append("</td></tr><tr><td><b>").append(_t("Torrent")).append(":</b></td><td>").append(torrentName)
-               .append("</td></tr></table></div></div></BODY></HTML>");
+               .append("</td></tr></table></div></div></center>\n</body>\n</html>");
             return buf.toString();
         }
 
@@ -3198,7 +3213,7 @@ public class I2PSnarkServlet extends BasicServlet {
                 displayComments(snark, er, ec, esc, buf);
             if (includeForm)
                 buf.append("</form>");
-            buf.append("</div></div></BODY></HTML>");
+            buf.append("</div></div>\n</body>\n</html>");
             return buf.toString();
         }
 
@@ -3439,7 +3454,7 @@ public class I2PSnarkServlet extends BasicServlet {
         // for stop/start/check
         if (includeForm)
             buf.append("</form>");
-        buf.append("</div></div></BODY></HTML>\n");
+        buf.append("</div></div>\n</body>\n</html>\n");
 
         return buf.toString();
     }
diff --git a/apps/i2psnark/locale/messages_fr.po b/apps/i2psnark/locale/messages_fr.po
index 0a9bfde85ad4410e2cc6940ce50a906a205431db..d14b69641ec6a29784afb9d82e902fc1db5698e1 100644
--- a/apps/i2psnark/locale/messages_fr.po
+++ b/apps/i2psnark/locale/messages_fr.po
@@ -20,7 +20,7 @@ msgstr ""
 "Project-Id-Version: I2P\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-06-05 23:01+0000\n"
-"PO-Revision-Date: 2017-07-08 14:14+0000\n"
+"PO-Revision-Date: 2017-07-31 18:50+0000\n"
 "Last-Translator: zzzi2p\n"
 "Language-Team: French (http://www.transifex.com/otf/I2P/language/fr/)\n"
 "MIME-Version: 1.0\n"
@@ -87,7 +87,7 @@ msgstr "Le retard de démarrage a été changé à {0}"
 #: ../java/src/org/klomp/snark/SnarkManager.java:1011
 #, java-format
 msgid "Refresh time changed to {0}"
-msgstr "L’intervalle d''actualisation a été changé à {0}"
+msgstr "L''intervalle d''actualisation a été changé à {0}"
 
 #: ../java/src/org/klomp/snark/SnarkManager.java:1013
 msgid "Refresh disabled"
diff --git a/apps/i2psnark/locale/messages_it.po b/apps/i2psnark/locale/messages_it.po
index 6628e8a2ae238656a0eea97d4a36cc9cf7bfae99..a2f77cedaa1c6a99ad4738bb38c1a7d221c1c020 100644
--- a/apps/i2psnark/locale/messages_it.po
+++ b/apps/i2psnark/locale/messages_it.po
@@ -20,8 +20,8 @@ msgstr ""
 "Project-Id-Version: I2P\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-06-05 23:01+0000\n"
-"PO-Revision-Date: 2017-06-30 21:36+0000\n"
-"Last-Translator: zzzi2p\n"
+"PO-Revision-Date: 2017-07-19 11:49+0000\n"
+"Last-Translator: Sebastiano Pistore <SebastianoPistore.info@protonmail.ch>\n"
 "Language-Team: Italian (http://www.transifex.com/otf/I2P/language/it/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -202,19 +202,19 @@ msgstr "La modifica al DHT richiede il riavvio dei tunnel"
 
 #: ../java/src/org/klomp/snark/SnarkManager.java:1223
 msgid "Enabled Ratings."
-msgstr ""
+msgstr "Valutazioni abilitate."
 
 #: ../java/src/org/klomp/snark/SnarkManager.java:1225
 msgid "Disabled Ratings."
-msgstr ""
+msgstr "Valutazioni disabilitate."
 
 #: ../java/src/org/klomp/snark/SnarkManager.java:1232
 msgid "Enabled Comments."
-msgstr ""
+msgstr "Commenti abilitati."
 
 #: ../java/src/org/klomp/snark/SnarkManager.java:1234
 msgid "Disabled Comments."
-msgstr ""
+msgstr "Commenti disabilitati."
 
 #: ../java/src/org/klomp/snark/SnarkManager.java:1247
 #, java-format
@@ -1339,7 +1339,7 @@ msgstr ""
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2441
 msgid "Enable Ratings"
-msgstr ""
+msgstr "Abilita le valutazioni"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2445
 msgid "Show ratings on torrent pages"
@@ -1347,7 +1347,7 @@ msgstr ""
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2449
 msgid "Enable Comments"
-msgstr ""
+msgstr "Abilita i commenti"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2453
 msgid "Show comments on torrent pages"
@@ -1530,7 +1530,7 @@ msgstr ""
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3169
 msgid "Resource Not found"
-msgstr ""
+msgstr "Risorsa non trovata"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3170
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3181
@@ -1552,11 +1552,11 @@ msgstr "Directory"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3272
 msgid "Download Status"
-msgstr ""
+msgstr "Stato download"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3284
 msgid "Download Priority"
-msgstr ""
+msgstr "Priorità download"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3296
 msgid "Up to higher level directory"
@@ -1588,7 +1588,7 @@ msgstr "Normale"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3410
 msgid "Do not download this file"
-msgstr ""
+msgstr "Non scaricare questo file"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3415
 msgid "Skip"
@@ -1638,33 +1638,33 @@ msgstr ""
 #, java-format
 msgid "1 star"
 msgid_plural "{0} stars"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "1 stella"
+msgstr[1] "{0} stelle"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3501
 msgid "No rating"
-msgstr ""
+msgstr "Nessuna valutazione"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3514
 msgid "Rate and Comment"
-msgstr ""
+msgstr "Valuta e commenta"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3516
 msgid "Rate Torrent"
-msgstr ""
+msgstr "Valuta torrent"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3518
 msgid "Add Comment"
-msgstr ""
+msgstr "Aggiungi commento"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3529
 msgid "My Rating"
-msgstr ""
+msgstr "La mia valutazione"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3542
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3546
 msgid "Average Rating"
-msgstr ""
+msgstr "Valutazione media"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3547
 msgid "No community ratings currently available"
diff --git a/apps/i2psnark/locale/messages_nb.po b/apps/i2psnark/locale/messages_nb.po
index b889299dde47b2519922e991be32760ccc93a9b8..739a0844cbc88eb6fa8b7d9d566e007921d21d8f 100644
--- a/apps/i2psnark/locale/messages_nb.po
+++ b/apps/i2psnark/locale/messages_nb.po
@@ -4,14 +4,15 @@
 # To contribute translations, see http://www.i2p2.de/newdevelopers
 # 
 # Translators:
+# Allan Nordhøy <epost@anotheragency.no>, 2017
 # Mikal <mikalv@mikalv.net>, 2013
 msgid ""
 msgstr ""
 "Project-Id-Version: I2P\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-06-05 23:01+0000\n"
-"PO-Revision-Date: 2017-06-30 21:36+0000\n"
-"Last-Translator: zzzi2p\n"
+"PO-Revision-Date: 2017-07-28 23:27+0000\n"
+"Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n"
 "Language-Team: Norwegian Bokmål (http://www.transifex.com/otf/I2P/language/nb/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -188,7 +189,7 @@ msgstr "DHT skrudd av"
 
 #: ../java/src/org/klomp/snark/SnarkManager.java:1216
 msgid "DHT change requires tunnel shutdown and reopen"
-msgstr "DHT endring krever tunnel avslutting og gjennåpning"
+msgstr "DHT-endring krever tunnelavslutting og gjenåpning"
 
 #: ../java/src/org/klomp/snark/SnarkManager.java:1223
 msgid "Enabled Ratings."
@@ -1015,7 +1016,7 @@ msgstr "gjennstår"
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1742
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3021
 msgid "Completed"
-msgstr ""
+msgstr "Fullført"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1780
 msgid "Stop the torrent"
@@ -1182,7 +1183,7 @@ msgstr ""
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2208
 msgid "Tracker URL"
-msgstr ""
+msgstr "Sporingsnettadresse"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2231
 msgid "none"
@@ -1226,7 +1227,7 @@ msgstr ""
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2305
 msgid "Language"
-msgstr ""
+msgstr "Språk"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2313
 msgid "Theme"
@@ -1279,7 +1280,7 @@ msgstr ""
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2378
 msgid "torrents"
-msgstr ""
+msgstr "torrenter"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2402
 msgid "Total uploader limit"
@@ -1467,7 +1468,7 @@ msgstr ""
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3012
 msgid "Added"
-msgstr ""
+msgstr "Lagt til"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3033
 msgid "Magnet link"
@@ -1662,7 +1663,7 @@ msgstr ""
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3597
 msgid "Mark for deletion"
-msgstr ""
+msgstr "Marker for sletting"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3608
 msgid "Delete Selected"
diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPServer.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPServer.java
index 49b7360d00e64d04bd866c9c89d0864755fede2e..19b15d3ab595a76cad917463575fdc540958e77b 100644
--- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPServer.java
+++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPServer.java
@@ -361,6 +361,7 @@ public class I2PTunnelHTTPServer extends I2PTunnelServer {
             if (Boolean.parseBoolean(opts.getProperty(OPT_REJECT_INPROXY)) &&
                 (headers.containsKey("X-Forwarded-For") ||
                  headers.containsKey("X-Forwarded-Server") ||
+                 headers.containsKey("Forwarded") ||  // RFC 7239
                  headers.containsKey("X-Forwarded-Host"))) {
                 if (_log.shouldLog(Log.WARN)) {
                     StringBuilder buf = new StringBuilder();
@@ -374,6 +375,9 @@ public class I2PTunnelHTTPServer extends I2PTunnelServer {
                     h = headers.get("X-Forwarded-Host");
                     if (h != null)
                         buf.append(" for: ").append(h.get(0));
+                    h = headers.get("Forwarded");
+                    if (h != null)
+                        buf.append(h.get(0));
                     _log.warn(buf.toString());
                 }
                 try {
@@ -946,6 +950,8 @@ public class I2PTunnelHTTPServer extends I2PTunnelServer {
                     name = "X-Forwarded-Server";
                 else if ("x-forwarded-host".equals(lcName))
                     name = "X-Forwarded-Host";
+                else if ("forwarded".equals(lcName))
+                    name = "Forwarded";
                 else if ("user-agent".equals(lcName))
                     name = "User-Agent";
                 else if ("referer".equals(lcName))
diff --git a/apps/i2ptunnel/jsp/editClient.jsp b/apps/i2ptunnel/jsp/editClient.jsp
index 2fd4391ce9b9db88bd79ddb00660b9702b378be0..d176b1e72a8613cb6170d742e6594fc9b48d37bc 100644
--- a/apps/i2ptunnel/jsp/editClient.jsp
+++ b/apps/i2ptunnel/jsp/editClient.jsp
@@ -14,6 +14,11 @@
      }
    }
 %>
+
+<%
+    response.setHeader("Content-Security-Policy", "default-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'");
+%>
+
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
     <title><%=intl._t("Hidden Services Manager")%> - <%=intl._t("Edit Client Tunnel")%></title>
@@ -29,6 +34,7 @@
 <style type='text/css'>
 input.default { width: 1px; height: 1px; visibility: hidden; }
 </style>
+<script src="/js/resetScroll.js" type="text/javascript"></script>
 </head>
 <body id="tunnelEditPage">
 
@@ -538,7 +544,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
 
         <tr>
             <td colspan="2">
-                <div class="displayText" title="<%=intl._t("Read Only: Local Destination (if known)")%>" tabindex="0"><%=destb64%></div>
+                <div class="displayText" title="<%=intl._t("Read Only: Local Destination (if known)")%>" tabindex="0" onblur="resetScrollLeft(this)"><%=destb64%></div>
             </td>
         </tr>
 
diff --git a/apps/i2ptunnel/jsp/editServer.jsp b/apps/i2ptunnel/jsp/editServer.jsp
index 0185e9c77f5d0e44e8268d86299f5e9b3c506aa2..6a2904cca26d54c4e2856964b16e6e38256c3381 100644
--- a/apps/i2ptunnel/jsp/editServer.jsp
+++ b/apps/i2ptunnel/jsp/editServer.jsp
@@ -14,6 +14,11 @@
      }
    }
 %>
+
+<%
+    response.setHeader("Content-Security-Policy", "default-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'");
+%>
+
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
     <title><%=intl._t("Hidden Services Manager")%> - <%=intl._t("Edit Hidden Service")%></title>
@@ -29,6 +34,7 @@
 <style type='text/css'>
 input.default { width: 1px; height: 1px; visibility: hidden; }
 </style>
+<script src="/js/resetScroll.js" type="text/javascript"></script>
 </head>
 <body id="tunnelEditPage">
 
@@ -230,7 +236,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
 
         <tr>
             <td>
-                <div class="displayText" title="<%=intl._t("Read Only: Local Destination (if known)")%>" tabindex="0"><%=editBean.getDestinationBase64(curTunnel)%></div>
+                <div class="displayText" title="<%=intl._t("Read Only: Local Destination (if known)")%>" tabindex="0" onblur="resetScrollLeft(this)"><%=editBean.getDestinationBase64(curTunnel)%></div>
             </td>
             <td>
                     <% String value3 = editBean.getPrivateKeyFile(curTunnel);
@@ -814,7 +820,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
 
         <tr>
             <td colspan="2">
-                <div class="displayText" title="<%=intl._t("Read Only: Alternate Local Destination")%>"><%=ab64%></div>
+                <div class="displayText" title="<%=intl._t("Read Only: Alternate Local Destination")%>" onblur="resetScrollLeft(this)"><%=ab64%></div>
             </td>
         </tr>
 
diff --git a/apps/i2ptunnel/locale-proxy/messages_fr.po b/apps/i2ptunnel/locale-proxy/messages_fr.po
index c5030e6ac3c86a0e01b68e0bc917ea4f0507e760..fff81b461adb303f30428451e206516322c2c259 100644
--- a/apps/i2ptunnel/locale-proxy/messages_fr.po
+++ b/apps/i2ptunnel/locale-proxy/messages_fr.po
@@ -17,8 +17,8 @@ msgstr ""
 "Project-Id-Version: I2P\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-06-05 23:01+0000\n"
-"PO-Revision-Date: 2017-07-08 14:24+0000\n"
-"Last-Translator: zzzi2p\n"
+"PO-Revision-Date: 2017-07-18 14:52+0000\n"
+"Last-Translator: French language coordinator <french.coordinator@rbox.me>\n"
 "Language-Team: French (http://www.transifex.com/otf/I2P/language/fr/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
diff --git a/apps/i2ptunnel/locale-proxy/messages_in.po b/apps/i2ptunnel/locale-proxy/messages_in.po
index 085d9af4bc49f12b37f0ab4ab3b549533b6bd92e..62321b6867f56b7db83fb4f8bc49d90195d4014c 100644
--- a/apps/i2ptunnel/locale-proxy/messages_in.po
+++ b/apps/i2ptunnel/locale-proxy/messages_in.po
@@ -5,13 +5,14 @@
 # 
 # Translators:
 # Khairul Agasta <khairuldroids@gmail.com>, 2014
+# Robert Dafis <robertdafis@gmail.com>, 2017
 msgid ""
 msgstr ""
 "Project-Id-Version: I2P\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-06-05 23:01+0000\n"
-"PO-Revision-Date: 2017-06-30 21:33+0000\n"
-"Last-Translator: zzzi2p\n"
+"PO-Revision-Date: 2017-07-27 02:09+0000\n"
+"Last-Translator: Robert Dafis <robertdafis@gmail.com>\n"
 "Language-Team: Indonesian (http://www.transifex.com/otf/I2P/language/id/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -23,7 +24,7 @@ msgstr ""
 #: ../java/build/Proxy.java:42 ../java/build/Proxy.java:48
 #: ../java/build/Proxy.java:85 ../java/build/Proxy.java:91
 msgid "Website Unreachable"
-msgstr ""
+msgstr "Situs tidak dapat dibuka"
 
 #: ../java/build/Proxy.java:6 ../java/build/Proxy.java:18
 #: ../java/build/Proxy.java:31 ../java/build/Proxy.java:43
@@ -91,13 +92,13 @@ msgstr "Buku alamat"
 
 #: ../java/build/Proxy.java:12
 msgid "The website was not reachable."
-msgstr ""
+msgstr "Situs ini tidak dapat dibuka"
 
 #: ../java/build/Proxy.java:13
 msgid ""
 "The website is offline, there is network congestion, or your router is not "
 "yet well-integrated with peers."
-msgstr ""
+msgstr "Situsnya offline, ada kemacetan di jaringan, atau router anda belum terintegrasi dengan baik dengan peers."
 
 #: ../java/build/Proxy.java:14 ../java/build/Proxy.java:51
 #: ../java/build/Proxy.java:103 ../java/build/Proxy.java:116
@@ -108,7 +109,7 @@ msgstr "Anda mungkin ingin {0}mengulang{1}."
 #: ../java/build/Proxy.java:15 ../java/build/Proxy.java:52
 #: ../java/build/Proxy.java:104 ../java/build/Proxy.java:117
 msgid "You may want to retry."
-msgstr ""
+msgstr "Silakan dicoba lagi."
 
 #: ../java/build/Proxy.java:16 ../java/build/Proxy.java:29
 #: ../java/build/Proxy.java:53 ../java/build/Proxy.java:84
@@ -120,17 +121,17 @@ msgstr "Tidak dapat menemukan tujuan berikut:"
 #: ../java/build/Proxy.java:17 ../java/build/Proxy.java:23
 #: ../java/build/Proxy.java:148 ../java/build/Proxy.java:154
 msgid "Outproxy Not Found"
-msgstr ""
+msgstr "Outproxy tidak ditemukan"
 
 #: ../java/build/Proxy.java:24
 msgid ""
 "The HTTP outproxy was not reachable, because its lease set was not found."
-msgstr ""
+msgstr "HTTP outproxy tidak bisa ditemukan karena lease set-nya tidak ditemukan."
 
 #: ../java/build/Proxy.java:25
 msgid ""
 "The outproxy is probably down, but there could also be network congestion."
-msgstr ""
+msgstr "Outproxynya mungkin tidak aktif, namun mungkin ada kemacetan di jaringan."
 
 #: ../java/build/Proxy.java:26 ../java/build/Proxy.java:157
 #: ../java/build/Proxy.java:183 ../java/build/Proxy.java:205
@@ -146,7 +147,7 @@ msgstr "Anda mungkin ingin {0}mengulang{1} karena ini akan secara acak memilih u
 msgid ""
 "You may want to retry as this will randomly reselect an outproxy from the "
 "pool you have defined {0}here{1} (if you have more than one configured)."
-msgstr ""
+msgstr "Silakan dicoba lagi karena ini akan secara acak memilih outproxy dari pool yang sudah anda buat {0}ini{1} (jika ada lebih dari satu outproxy yang dibuat)."
 
 #: ../java/build/Proxy.java:28 ../java/build/Proxy.java:159
 #: ../java/build/Proxy.java:185 ../java/build/Proxy.java:207
@@ -193,12 +194,12 @@ msgstr "Jika Anda tidak ingin mengunjungi host ini, klik tombol \"kembali\" pada
 
 #: ../java/build/Proxy.java:49
 msgid "The website was not reachable, because its lease set was not found."
-msgstr ""
+msgstr "Situs ini tidak bisa dibuka karena lease set-nya tidak ditemukan."
 
 #: ../java/build/Proxy.java:50
 msgid ""
 "The website is probably down, but there could also be network congestion."
-msgstr ""
+msgstr "Situs ini mungkin tidak aktif, namun mungkin ada kemacetan di jaringan."
 
 #: ../java/build/Proxy.java:54 ../java/build/Proxy.java:60
 msgid "Warning: Invalid Request URI"
@@ -234,15 +235,15 @@ msgstr "Jangan menggunakan proxy untuk mengakses konsol router, localhost, atau
 
 #: ../java/build/Proxy.java:72
 msgid "Website Unknown"
-msgstr ""
+msgstr "Situs ini tidak diketahui"
 
 #: ../java/build/Proxy.java:78
 msgid "Website Not Found in Addressbook"
-msgstr ""
+msgstr "Situs ini tidak ada di buku alamat"
 
 #: ../java/build/Proxy.java:79
 msgid "The website was not found in your router's addressbook."
-msgstr ""
+msgstr "Situs ini tidak ada di buku alamat router anda."
 
 #: ../java/build/Proxy.java:80
 msgid "Check the link or find a Base 32 or Base 64 address."
@@ -270,26 +271,26 @@ msgstr "Sering melihat laman ini? Lihat {0}FAQ{1} untuk bantuan dalam {2}menamba
 msgid ""
 "The website was not reachable, because it uses encryption options that are "
 "not supported by your I2P or Java version."
-msgstr ""
+msgstr "Situs ini tidak bisa dibuka karena enkripsinya tidak didukung I2P atau versi Java yang anda gunakan."
 
 #: ../java/build/Proxy.java:93 ../java/build/Proxy.java:208
 msgid "Could not connect to the following destination:"
-msgstr ""
+msgstr "Tidak bisa tersambung ke tujuan berikut:"
 
 #: ../java/build/Proxy.java:94 ../java/build/Proxy.java:100
 #: ../java/build/Proxy.java:174 ../java/build/Proxy.java:180
 msgid "Connection Reset"
-msgstr ""
+msgstr "Sambungan terputus lalu tersambung lagi."
 
 #: ../java/build/Proxy.java:101
 msgid "The connection to the website was reset while the page was loading."
-msgstr ""
+msgstr "Sambungan ke situs ini terputus lalu tersambung lagi waktu halaman ini sedang memuat."
 
 #: ../java/build/Proxy.java:102
 msgid ""
 "The website could be temporarily unavailable, too busy, or it has blocked "
 "your access."
-msgstr ""
+msgstr "Situs ini mungkin sedang tidak bisa dibuka, terlalu sibuk, atau memblokir anda."
 
 #: ../java/build/Proxy.java:106 ../java/build/Proxy.java:112
 msgid "Warning: Invalid Destination"
@@ -299,7 +300,7 @@ msgstr "Peringatan: Tujuan Tidak Valid"
 msgid ""
 "The website destination specified was not valid, or was otherwise "
 "unreachable."
-msgstr ""
+msgstr "Situs yang anda masukkan tidak valid atau tidak bisa dibuka."
 
 #: ../java/build/Proxy.java:114
 msgid ""
@@ -333,20 +334,20 @@ msgstr "Peringatan: Kunci Tujuan Bermasalah"
 msgid ""
 "The address helper link you followed specifies a different destination key "
 "than the entry in your address book."
-msgstr ""
+msgstr "Tautan bantuan alamat yang anda gunakan menggunakan destination key yang berbeda dengan yang ada di buku alamat anda."
 
 #: ../java/build/Proxy.java:136
 msgid ""
 "Someone could be trying to impersonate another website, or people have given"
 " two websites identical names."
-msgstr ""
+msgstr "Sebuah situs mungkin sedang berpura-pura menjadi situs yang ada tuju atau ada situs yang mempunyai nama yang sama."
 
 #: ../java/build/Proxy.java:137
 msgid ""
 "Resolve the conflict by deciding which key you trust, and then either ignore"
 " the address helper link, or delete the host entry from your address book "
 "and click the address helper link again."
-msgstr ""
+msgstr "Selesaikan konflik ini dengan memutuskan kunci yang anda percaya, lalu 1) abaikan tautan di bantuan alamat atau 2) hapus entry host yang ada di buku alamat anda lalu klik lagi tautan di bantuan alamat."
 
 #: ../java/build/Proxy.java:138 ../java/build/Proxy.java:144
 msgid "Warning: Bad Address Helper"
@@ -415,13 +416,13 @@ msgstr "Untuk menonaktifkan otorisasi, hapus konfigurasi {0}i2ptunnel.proxy.auth
 
 #: ../java/build/Proxy.java:181
 msgid "The connection to the proxy was reset."
-msgstr ""
+msgstr "Koneksi terhadap proxy tersambung ulang."
 
 #: ../java/build/Proxy.java:182
 msgid ""
 "The proxy could be temporarily unavailable, too busy, or it has blocked your"
 " access."
-msgstr ""
+msgstr "Proxy yang anda tuju mungkin sedang tidak bisa digunakan atau memblokir anda."
 
 #: ../java/build/Proxy.java:187 ../java/build/Proxy.java:193
 msgid "Warning: Non-HTTP Protocol"
@@ -441,13 +442,13 @@ msgstr "Protokol lainnya seperti FTP tidak diizinkan."
 
 #: ../java/build/Proxy.java:197 ../java/build/Proxy.java:203
 msgid "Outproxy Unreachable"
-msgstr ""
+msgstr "Outproxy tidak bisa tersambung"
 
 #: ../java/build/Proxy.java:204
 msgid ""
 "The HTTP outproxy was not reachable, because it uses encryption options that"
 " are not supported by your I2P or Java version."
-msgstr ""
+msgstr "HTTP outproxy tidak bisa tersambung karena menggunakan enkripsi yang tidak didukung I2P atau versi Java anda."
 
 #: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:643
 msgid "This seems to be a bad destination:"
@@ -463,16 +464,16 @@ msgid ""
 "To visit the destination in your address book, click <a "
 "href=\"{0}\">here</a>. To visit the conflicting addresshelper destination, "
 "click <a href=\"{1}\">here</a>."
-msgstr ""
+msgstr "Untuk mengunjungi destinasi di buku alamat anda, klik <a href=\"{0}\">di sini</a>. Untuk mengunjungi destinasi addresshelper yang konflik, kilik <a href=\"{1}\">di sini</a>."
 
 #: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:744
 #, java-format
 msgid "Destination for {0} in address book"
-msgstr ""
+msgstr "Destinasi untuk {0} di buku alamat"
 
 #: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:747
 msgid "Conflicting address helper destination"
-msgstr ""
+msgstr "destinasi addresshelper yang konflik"
 
 #: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1194
 msgid "Destination lease set not found"
@@ -499,58 +500,58 @@ msgstr "Melanjutkan ke {0} tanpa menyimpan"
 msgid ""
 "You can browse to the site without saving it to the address book. The "
 "address will be remembered until you restart your I2P router."
-msgstr ""
+msgstr "Anda dapat mengunjungi sebuah situs tanpa menyimpannya ke dalam buku alamat. Alamat situs akan disimpan sampai anda memulai-ulang router I2P anda."
 
 #: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1366
 msgid "Continue without saving"
-msgstr ""
+msgstr "Lanjutkan tanpa menyimpan"
 
 #: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1373
 #, java-format
 msgid "Save {0} to router address book and continue to website"
-msgstr ""
+msgstr "Simpan {0} ke dalam buku alamat router lalu lanjut ke situs yang anda tuju"
 
 #: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1374
 msgid ""
 "This address will be saved to your Router address book where your "
 "subscription-based addresses are stored."
-msgstr ""
+msgstr "Alamat ini akan disimpan ke dalam buku alamat router anda di mana alamat subscription-based disimpan."
 
 #: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1376
 msgid ""
 "If you want to keep track of sites you have added manually, add to your "
 "Master or Private address book instead."
-msgstr ""
+msgstr "JIka anda ingin melacak situs yang anda tambah secara manual, tambahkan alamat tersebut ke dalam buku alamat Master atau Private milik anda."
 
 #: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1379
 #: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1387
 #: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1392
 msgid "Save & continue"
-msgstr ""
+msgstr "Simpan & lanjutkan"
 
 #. only blockfile supports multiple books
 #: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1384
 #, java-format
 msgid "Save {0} to master address book and continue to website"
-msgstr ""
+msgstr "Simpan {0} ke dalam buku alamat Master kemudian lanjut ke situsnya."
 
 #: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1385
 msgid ""
 "This address will be saved to your Master address book. Select this option "
 "for addresses you wish to keep separate from the main router address book, "
 "but don't mind publishing."
-msgstr ""
+msgstr "Alamat ini akan disimpan ke dalam buku alamat Master. Pilih opsi ini untuk alamat yang anda pisahkan dari buku alamat utama di router anda namun tidak apa-apa diketahui orang lain."
 
 #: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1389
 #, java-format
 msgid "Save {0} to private address book and continue to website"
-msgstr ""
+msgstr "Simpan {0} ke dalam buku alamat Private kemudian lanjut ke situsnya."
 
 #: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1390
 msgid ""
 "This address will be saved to your Private address book, ensuring it is "
 "never published."
-msgstr ""
+msgstr "Alamat ini akan disimpan ke buku alamat Private untuk memastikan tidak pernah diketahui orang lain."
 
 #: ../java/src/net/i2p/i2ptunnel/localServer/LocalHTTPServer.java:175
 #, java-format
diff --git a/apps/i2ptunnel/locale-proxy/messages_nb.po b/apps/i2ptunnel/locale-proxy/messages_nb.po
index 4d08f716d4efffb471a85161c1658ff534a6ac9e..51d0ea911fc0b43a239439e4452823b320cc9f5c 100644
--- a/apps/i2ptunnel/locale-proxy/messages_nb.po
+++ b/apps/i2ptunnel/locale-proxy/messages_nb.po
@@ -10,7 +10,7 @@ msgstr ""
 "Project-Id-Version: I2P\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-06-05 23:01+0000\n"
-"PO-Revision-Date: 2017-06-30 21:33+0000\n"
+"PO-Revision-Date: 2017-07-16 14:45+0000\n"
 "Last-Translator: zzzi2p\n"
 "Language-Team: Norwegian Bokmål (http://www.transifex.com/otf/I2P/language/nb/)\n"
 "MIME-Version: 1.0\n"
@@ -476,7 +476,7 @@ msgstr ""
 
 #: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1194
 msgid "Destination lease set not found"
-msgstr ""
+msgstr "Oppsatt målleie ikke funnet"
 
 #: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1350
 msgid "Host"
diff --git a/apps/i2ptunnel/locale/messages_es.po b/apps/i2ptunnel/locale/messages_es.po
index 367a9f61a00c45043bf34097ebc11481c7c6709f..b64e09fcad9c5fdd8bb187478c0812d4fdff0434 100644
--- a/apps/i2ptunnel/locale/messages_es.po
+++ b/apps/i2ptunnel/locale/messages_es.po
@@ -18,7 +18,7 @@ msgstr ""
 "Project-Id-Version: I2P\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-06-05 23:01+0000\n"
-"PO-Revision-Date: 2017-07-08 11:51+0000\n"
+"PO-Revision-Date: 2017-07-09 02:23+0000\n"
 "Last-Translator: strel\n"
 "Language-Team: Spanish (http://www.transifex.com/otf/I2P/language/es/)\n"
 "MIME-Version: 1.0\n"
@@ -831,7 +831,7 @@ msgstr "Opciones personalizadas"
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:789
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:966
 msgid "Advanced options to control tunnel priority etc"
-msgstr ""
+msgstr "Opciones avanzadas para controlar la prioridad del túnel etc."
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:793
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:970
@@ -843,7 +843,7 @@ msgstr "Cancelar"
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:797
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:974
 msgid "Delete this Proxy (cannot be undone)"
-msgstr ""
+msgstr "Eliminar este proxy (no se puede deshacer)"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:800
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:977
@@ -858,7 +858,7 @@ msgstr "Guardar"
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:809
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:986
 msgid "Tunnels not initialized yet; please retry in a few moments."
-msgstr ""
+msgstr "Los túneles aún no se inicializaron; por favor, vuelva a intentarlo en unos momentos."
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:139
 msgid "Edit Hidden Service"
@@ -866,23 +866,23 @@ msgstr "Editar servicio oculto"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:167
 msgid "Edit Server Settings"
-msgstr ""
+msgstr "Editar configuración del servidor"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:178
 msgid "New Server Settings"
-msgstr ""
+msgstr "Nueva configuración del servidor"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:268
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:506
 msgid "Specify the port the server is running on"
-msgstr ""
+msgstr "Especificar el puerto en el que se está ejecutando el servidor"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:274
 msgid ""
 "To avoid traffic sniffing if connecting to a remote server, you can enable "
 "an SSL connection. Note that the target server must be configured to accept "
 "SSL connections."
-msgstr ""
+msgstr "Para evitar que el tráfico sea espiado si se conecta a un servidor remoto, puede habilitar una conexión SSL. Observer que el servidor objetivo debe estar configurado para aceptar conexiones SSL."
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:278
 msgid "Use SSL to connect to target"
@@ -892,21 +892,21 @@ msgstr "Usa SSL para conectar al objetivo"
 msgid ""
 "Port required to access service (this can be a different port to the port "
 "the service is hosted on)"
-msgstr ""
+msgstr "Puerto requerido para acceder al servicio (este puede ser un puerto distinto del puerto en el que se aloja el servicio)"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:305
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:559
 msgid ""
 "Listening interface (IP address) for client access (normally 127.0.0.1)"
-msgstr ""
+msgstr "Interfaz a la escucha (dirección IP) para el acceso del cliente (normalmente 127.0.0.1)"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:326
 msgid "Website Hostname"
-msgstr ""
+msgstr "Nombre de servidor del sitio web"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:328
 msgid "Website Hostname e.g. mysite.i2p"
-msgstr ""
+msgstr "Nombre de servidor del sitio web, ej.: misitio.i2p"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:332
 msgid "(leave blank for outproxies)"
@@ -918,7 +918,7 @@ msgstr "archivo de clave privada"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:389
 msgid "Generate a QR Code for this domain"
-msgstr ""
+msgstr "Generar un código QR para este dominio"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:397
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:932
@@ -929,7 +929,7 @@ msgstr "Generar código QR"
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:399
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:942
 msgid "Add to Private addressbook"
-msgstr ""
+msgstr "Añadir a la libreta de direcciones Privada"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:405
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:948
@@ -938,7 +938,7 @@ msgstr "Agregar a la libreta de direcciones local"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:407
 msgid "Register, unregister or change details for hostname"
-msgstr ""
+msgstr "Registrar, desregistrar o cambiar los detalles para el nombre del servidor"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:412
 msgid "Registration Authentication"
@@ -950,11 +950,11 @@ msgid ""
 "Note: In order to enable QR code generation or registration authentication, "
 "configure the Website Hostname field (for websites) or the Name field "
 "(everything else) above with an .i2p suffixed hostname e.g. mynewserver.i2p"
-msgstr ""
+msgstr "Nota: Para habilitar la generación de código QR o la autentificación del registro del servidor, configure arriba el campo 'Nombre de servidor del sitio web' (para sitios web) o el campo 'Nombre' (para los demás) con un nombre de servidor de sufijo .i2p, ej.: minuevoservidor.i2p"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:480
 msgid "Level of Randomization for Tunnel Depth"
-msgstr ""
+msgstr "Nivel de aleatorización para la profundidad del túnel"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:600
 msgid "Encrypt Leaseset"
@@ -962,11 +962,11 @@ msgstr "Cifrar Leaseset"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:602
 msgid "Only clients with the encryption key will be able to connect"
-msgstr ""
+msgstr "Sólo podrán conectar clientes con la clave de cifrado"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:606
 msgid "Only allow clients with the encryption key to connect to this server"
-msgstr ""
+msgstr "Sólo permitir clientes con la clave de cifrado para conectar a este servidor"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:608
 msgid "Encryption Key"
@@ -978,15 +978,15 @@ msgstr "Generar nueva clave"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:612
 msgid "Tunnel must be stopped first"
-msgstr ""
+msgstr "Primero se debe detener el túnel"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:614
 msgid "Encryption key required to access this service"
-msgstr ""
+msgstr "Se requiere clave de cifrado para acceder a este servicio"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:618
 msgid "Generate new encryption key"
-msgstr ""
+msgstr "Generar nueva clave de cifrado"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:621
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/register_jsp.java:572
@@ -999,11 +999,11 @@ msgstr "Lista de acceso restringido"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:625
 msgid "Allow all clients to connect to this service"
-msgstr ""
+msgstr "Permitir conectarse a este servicio a todos los clientes"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:631
 msgid "Prevent listed clients from connecting to this service"
-msgstr ""
+msgstr "Evitar que los clientes listados se conecten a este servicio"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:635
 msgid "Blacklist"
@@ -1011,7 +1011,7 @@ msgstr "Lista negra"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:637
 msgid "Only allow listed clients to connect to this service"
-msgstr ""
+msgstr "Permitir conectarse a este servicio sólo a los clientes listados"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:641
 msgid "Whitelist"
@@ -1023,19 +1023,19 @@ msgstr "Lista de acceso"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:645
 msgid "Specify clients, 1 per line"
-msgstr ""
+msgstr "Especifique los clientes, 1 por línea"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:647
 msgid "Control access to this service"
-msgstr ""
+msgstr "Controlar el acceso a este servicio"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:651
 msgid "Server Access Options"
-msgstr ""
+msgstr "Opciones de acceso al servidor"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:656
 msgid "Prevent clients from accessing this service via an inproxy"
-msgstr ""
+msgstr "Evitar que los clientes accedan a este servicio mediante un proxy de entrada"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:660
 msgid "Block Access via Inproxies"
@@ -1043,7 +1043,7 @@ msgstr "Bloquear acceso desde Internet mediante inproxys"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:662
 msgid "Deny accesseses with referers (probably from inproxies)"
-msgstr ""
+msgstr "Denegar los accesos con referers (probablemente desde proxys de entrada)"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:666
 msgid "Block Accesses containing Referers"
@@ -1051,7 +1051,7 @@ msgstr "Bloquear accesos que contengan referers"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:668
 msgid "Deny User-Agents matching these strings (probably from inproxies)"
-msgstr ""
+msgstr "Denegar agentes-del-usuario que coincidan con estas cadenas (probablemente desde proxys de entrada)"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:672
 msgid "Block these User-Agents"
@@ -1059,13 +1059,13 @@ msgstr "Bloquear estos agentes-del-usuario"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:674
 msgid "comma separated, e.g. Mozilla,Opera (case-sensitive)"
-msgstr ""
+msgstr "separados por comas, ej.: Mozilla,Opera (distinguiendo minúculas/mayúsculas)"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:681
 msgid ""
 "Use unique IP addresses for each connecting client (local non-SSL servers "
 "only)"
-msgstr ""
+msgstr "Usar direcciones IP únicas para cada cliente que se conecte (sólo servidores no-SSL locales)"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:685
 msgid "Unique Local Address per Client"
@@ -1073,7 +1073,7 @@ msgstr "Dirección local única por cliente"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:687
 msgid "Only enable if you are hosting this service on multiple routers"
-msgstr ""
+msgstr "Habilitar sólo si está alojando este servicio en varios routers I2P"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:691
 msgid "Optimize for Multihoming"
@@ -1081,7 +1081,7 @@ msgstr "Optimizar para alojamiento redundante (multihoming)"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:693
 msgid "Server Throttling"
-msgstr ""
+msgstr "Regulamiento del servidor"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:695
 msgid "Inbound connection limits (0=unlimited)"
@@ -1089,38 +1089,38 @@ msgstr "Límites de conexiones entrantes (0 = sin límite)"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:697
 msgid "Per Minute"
-msgstr ""
+msgstr "Por minuto"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:699
 msgid "Per Hour"
-msgstr ""
+msgstr "Por hora"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:701
 msgid "Per Day"
-msgstr ""
+msgstr "Por día"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:703
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:746
 msgid "Per Client"
-msgstr ""
+msgstr "Por cliente"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:705
 msgid ""
 "Maximum number of web page requests per minute for a unique client before "
 "access to the server is blocked"
-msgstr ""
+msgstr "Número máximo de peticiones de páginas web por minuto para un único cliente antes de que se bloquee el acceso al servidor"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:709
 msgid ""
 "Maximum number of web page requests per hour for a unique client before "
 "access to the server is blocked"
-msgstr ""
+msgstr "Número máximo de peticiones de páginas web por hora para un único cliente antes de que se bloquee el acceso al servidor"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:713
 msgid ""
 "Maximum number of web page requests per day for a unique client before "
 "access to the server is blocked"
-msgstr ""
+msgstr "Número máximo de peticiones de páginas web por día para un único cliente antes de se bloquee el acceso al servidor"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:717
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:758
@@ -1131,19 +1131,19 @@ msgstr "Total"
 msgid ""
 "Total number of web page requests per minute before access to the server is "
 "blocked"
-msgstr ""
+msgstr "Número total de peticiones de páginas web por minuto antes de que se bloquee el acceso al servidor"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:723
 msgid ""
 "Total number of web page requests per hour before access to the server is "
 "blocked"
-msgstr ""
+msgstr "Número total de peticiones de páginas web por hora antes de que se bloquee el acceso al servidor"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:727
 msgid ""
 "Total number of web page requests per day before access to the server is "
 "blocked"
-msgstr ""
+msgstr "Número total de peticiones de páginas web por día antes de que se bloquee el acceso al servidor"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:731
 msgid "Max concurrent connections (0=unlimited)"
@@ -1151,7 +1151,7 @@ msgstr "Número máximo de conexiones simultáneas (0 = sin límite)"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:733
 msgid "Maximum number of simultaneous client connections"
-msgstr ""
+msgstr "Número máximo de conexiones de cliente simultáneas"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:740
 msgid "POST limits (0=unlimited)"
@@ -1159,23 +1159,23 @@ msgstr "Límites de POST (0=ilimitado)"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:742
 msgid "Per Period"
-msgstr ""
+msgstr "Por periodo"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:744
 msgid "Ban Duration"
-msgstr ""
+msgstr "Duración de la exclusión"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:748
 msgid ""
 "Maximum number of post requests permitted for a unique client for the "
 "configured timespan"
-msgstr ""
+msgstr "Número máximo de peticiones de publicación permitidas para un único cliente para el intervalo de tiempo configurado"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:752
 msgid ""
 "If a client exceeds the maximum number of post requests per allocated "
 "period, enforce a ban for this number of minutes"
-msgstr ""
+msgstr "Si un cliente excede el número máximo de peticiones de publicación para un periodo de tiempo determinado, aplicar una exclusión durante esta cantidad de minutos"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:756
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:768
@@ -1186,31 +1186,31 @@ msgstr "minutos"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:760
 msgid "Total number of post requests permitted for the configured timespan"
-msgstr ""
+msgstr "Número total de peticiones POST para el intervalo de tiempo configurado"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:764
 msgid ""
 "If the maximum number of post requests per allocated period is exceeded, "
 "enforce a global access ban for this number of minutes"
-msgstr ""
+msgstr "Si se excede el número máximo de peticiones de publicación para un intervalo de tiempo determinado, aplicar una exclusión de acceso global durante esta cantidad de minutos"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:770
 msgid "POST limit period"
-msgstr ""
+msgstr "Periodo límite de POST"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:772
 msgid ""
 "Timespan for the maximum number of post requests to be reached before a ban "
 "is triggered"
-msgstr ""
+msgstr "Intervalo de tiempo para que se alcance el número máximo de peticiones POST antes que de se imponga una exclusión"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:789
 msgid "Number of tunnels to keep open to maintain availability of service"
-msgstr ""
+msgstr "Número de túneles a conservar abiertos para mantener la disponibilidad del servicio"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:795
 msgid "Period of inactivity before tunnel number is reduced"
-msgstr ""
+msgstr "Periodo de inactividad antes de que se reduzca el número de túneles"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:867
 msgid "Experts only! Changes B32!"
@@ -1218,11 +1218,11 @@ msgstr "¡Sólo expertos! ¡Cambia la base32 (B32)!"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:869
 msgid "Legacy option (deprecated), provided for backward compatibility"
-msgstr ""
+msgstr "Opción antigua (obsoleta), proporcionada para compatibilidad hacia atrás"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:890
 msgid "This is the default, recommended option"
-msgstr ""
+msgstr "Esta es la opción por defecto, recomendada"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:903
 msgid "Alternate private key file"
@@ -1234,7 +1234,7 @@ msgstr "Destino I2P local alternativo"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:916
 msgid "Read Only: Alternate Local Destination"
-msgstr ""
+msgstr "Sólo lectura: Destino I2P local alternativo"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:154
 msgid "Status Messages"
@@ -1246,7 +1246,7 @@ msgstr "Actualizar"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:167
 msgid "Global Tunnel Control"
-msgstr ""
+msgstr "Control de túnel global"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:169
 msgid "Tunnel Wizard"
@@ -1289,19 +1289,19 @@ msgstr "Control"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:206
 msgid "Edit Server Tunnel Settings for"
-msgstr ""
+msgstr "Editar configuración de túnel de servidor para"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:221
 msgid "Test HTTPS server, bypassing I2P"
-msgstr ""
+msgstr "Probar servidor HTTPS, evitando I2P"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:229
 msgid "Test HTTP server, bypassing I2P"
-msgstr ""
+msgstr "Probar servidor HTTP, evitando I2P"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:250
 msgid "Test HTTP server through I2P"
-msgstr ""
+msgstr "Probar servidor HTTP a través de I2P"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:259
 msgid "Base32 Address"
@@ -1322,7 +1322,7 @@ msgstr "Iniciando..."
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:299
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:403
 msgid "Stop this Tunnel"
-msgstr ""
+msgstr "Detener este túnel"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:287
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:306
@@ -1349,7 +1349,7 @@ msgstr "Detenido"
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:318
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:456
 msgid "Start this Tunnel"
-msgstr ""
+msgstr "Iniciar este túnel"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:325
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:463
@@ -1385,7 +1385,7 @@ msgstr "Interfaz"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:365
 msgid "Edit Tunnel Settings for"
-msgstr ""
+msgstr "Editar configuración de túnel para"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:417
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:420
@@ -1427,7 +1427,7 @@ msgstr "Por favor, asegúrese de seleccionar, copiar, y pegar el contenido compl
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/register_jsp.java:222
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:678
 msgid "Tunnel name"
-msgstr ""
+msgstr "Nombre del túnel"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/register_jsp.java:230
 msgid "Website name"
@@ -1435,7 +1435,7 @@ msgstr "Nombre de la página"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/register_jsp.java:238
 msgid "Local Destination"
-msgstr ""
+msgstr "Destino I2P local"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/register_jsp.java:246
 msgid "Local destination is not available. Start the tunnel."
@@ -1460,7 +1460,7 @@ msgstr "La clave de firmado del destino I2P no está disponible. Inicie el túne
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/register_jsp.java:278
 #, java-format
 msgid "Authentication for adding host {0}"
-msgstr ""
+msgstr "Autentificación para añadir el servidor  {0}"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/register_jsp.java:280
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/register_jsp.java:295
@@ -1471,7 +1471,7 @@ msgstr ""
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/register_jsp.java:470
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/register_jsp.java:509
 msgid "Copy and paste this to the registration site"
-msgstr ""
+msgstr "Copiar y pegar esto en el sitio de registro del servidor"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/register_jsp.java:285
 msgid "Advanced authentication strings"
@@ -1480,7 +1480,7 @@ msgstr "Cadenas de autentificación avanzada"
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/register_jsp.java:293
 #, java-format
 msgid "Authentication for removing host {0}"
-msgstr ""
+msgstr "Autentifiaciónm para eliminar el servidor {0}"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/register_jsp.java:324
 msgid "Authentication for changing name"
@@ -1499,7 +1499,7 @@ msgstr "Este túnel se debe configurar con el nombre del nuevo servidor."
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/register_jsp.java:346
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/register_jsp.java:379
 msgid "Enter old hostname below."
-msgstr ""
+msgstr "Introduzca debajo el nobre antiguo del servidor."
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/register_jsp.java:357
 msgid "Authentication for adding alias"
@@ -1574,7 +1574,7 @@ msgstr "Vea arriba cuáles son los elementos requeridos."
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/register_jsp.java:561
 msgid "Old hostname"
-msgstr ""
+msgstr "Nombre antiguo"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/register_jsp.java:565
 msgid "Private Key File for old Destination"
@@ -1582,7 +1582,7 @@ msgstr "Fichero de clave privada para el destino I2P antiguo"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/register_jsp.java:569
 msgid "Generate Authentication"
-msgstr ""
+msgstr "Generar autentificación"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:177
 msgid "I2P Tunnel Manager - Tunnel Creation Wizard"
@@ -1788,7 +1788,7 @@ msgstr "Un túnel de servidor personalizado para Streamr."
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:349
 msgid "Select tunnel type"
-msgstr ""
+msgstr "Seleccionar tipo de túnel"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:382
 msgid "Choose a name and description for your tunnel."
@@ -1814,7 +1814,7 @@ msgstr "Separe múltiples servidores proxy con comas."
 msgid ""
 "List of I2P outproxy destinations, separated with commas (e.g. "
 "proxy1.i2p,proxy2.i2p)"
-msgstr ""
+msgstr "Lista de destinos I2P de proxys de salida de I2P, separados por comas (ej.: proxy1.i2p,proxy2.i2p)"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:440
 msgid ""
@@ -1830,7 +1830,7 @@ msgstr "Este puede ser la clave de destino en base 64 o una dirección URL I2P d
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:446
 msgid "Enter a b64 or .i2p address here"
-msgstr ""
+msgstr "Introduzca aquí una dirección b64 o .i2p"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:477
 msgid ""
@@ -1911,15 +1911,15 @@ msgstr "A continuación se muestra un resumen de las opciones que ha elegido:"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:682
 msgid "Tunnel description"
-msgstr ""
+msgstr "Descripción del túnel"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:708
 msgid "Binding address"
-msgstr ""
+msgstr "Dirección de amarre"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:716
 msgid "Tunnel port"
-msgstr ""
+msgstr "Puerto del túnel"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:750
 msgid ""
@@ -1936,11 +1936,11 @@ msgstr "El asistente establecerá valores razonablemente sensibles para ellos po
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:789
 msgid "Cancel the wizard and return to Tunnel Manager home page"
-msgstr ""
+msgstr "Cancelar este asistente y volver a la página principal del Administrador de Túneles"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:796
 msgid "Return to previous page"
-msgstr ""
+msgstr "Volver a la página anterior"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:799
 msgid "Previous"
@@ -1948,7 +1948,7 @@ msgstr "Anterior"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:807
 msgid "Save tunnel configuration"
-msgstr ""
+msgstr "Guardar configuración de túnel"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:810
 msgid "Save Tunnel"
@@ -1956,7 +1956,7 @@ msgstr "Guardar Túnel"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:816
 msgid "Finish Wizard and review tunnel settings"
-msgstr ""
+msgstr "Finalizar asistente y revisar configuración del túnel"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:819
 msgid "Finish"
@@ -1964,7 +1964,7 @@ msgstr "Finalizar"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:825
 msgid "Advance to next page"
-msgstr ""
+msgstr "Avanzar a la página siguiente"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:828
 msgid "Next"
diff --git a/apps/i2ptunnel/locale/messages_fr.po b/apps/i2ptunnel/locale/messages_fr.po
index bf693545a0bf8cd43c5c3971345a11e616339c08..74e3b8054cb7d2898c2fbab88f6efeca0c792c10 100644
--- a/apps/i2ptunnel/locale/messages_fr.po
+++ b/apps/i2ptunnel/locale/messages_fr.po
@@ -19,8 +19,8 @@ msgstr ""
 "Project-Id-Version: I2P\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-06-05 23:01+0000\n"
-"PO-Revision-Date: 2017-07-08 14:36+0000\n"
-"Last-Translator: zzzi2p\n"
+"PO-Revision-Date: 2017-07-18 14:52+0000\n"
+"Last-Translator: French language coordinator <french.coordinator@rbox.me>\n"
 "Language-Team: French (http://www.transifex.com/otf/I2P/language/fr/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -822,7 +822,7 @@ msgstr "Liste d'URL de saut"
 msgid ""
 "List of helper URLs to offer jumplinks from the web proxy error page when a "
 "host is not found in your addressbook"
-msgstr "Liste d'URL d'assistants pour offrir des liens à partir de la page d'erreur du mandataire Web si un hôte n'est pas trouvé dans votre carnet d'adresses"
+msgstr "Liste d'URL d'assistants pour offrir des liens de saut à partir de la page d'erreur du mandataire Web si un hôte n'est pas trouvé dans votre carnet d'adresses"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:787
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:964
diff --git a/apps/i2ptunnel/locale/messages_it.po b/apps/i2ptunnel/locale/messages_it.po
index 4351728db975b1f1d2c6861c426d13446b6d4ab1..be951d182a9a895af00f0560dc8469ce7bc12044 100644
--- a/apps/i2ptunnel/locale/messages_it.po
+++ b/apps/i2ptunnel/locale/messages_it.po
@@ -23,8 +23,8 @@ msgstr ""
 "Project-Id-Version: I2P\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-06-05 23:01+0000\n"
-"PO-Revision-Date: 2017-06-30 21:35+0000\n"
-"Last-Translator: zzzi2p\n"
+"PO-Revision-Date: 2017-07-19 11:54+0000\n"
+"Last-Translator: Sebastiano Pistore <SebastianoPistore.info@protonmail.ch>\n"
 "Language-Team: Italian (http://www.transifex.com/otf/I2P/language/it/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -221,7 +221,7 @@ msgstr "Descrizione"
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:230
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:230
 msgid "Auto Start Tunnel"
-msgstr ""
+msgstr "Avvio automatico tunnel"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:232
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:232
@@ -241,7 +241,7 @@ msgstr ""
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:240
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:603
 msgid "Automatically start tunnel when router starts"
-msgstr ""
+msgstr "Avvia automaticamente il tunnel all'avvio del router"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:243
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:245
@@ -318,7 +318,7 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:311
 msgid "Clients use SSL to connect to tunnel"
-msgstr ""
+msgstr "I client utilizzano SSL per connettersi al tunnel"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:317
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:422
@@ -437,7 +437,7 @@ msgstr "Varianza"
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:410
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:437
 msgid "Length of each Tunnel"
-msgstr ""
+msgstr "Lunghezza di ogni tunnel"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:417
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:444
@@ -558,7 +558,7 @@ msgstr "Ritarda Connessione"
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:538
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:563
 msgid "Connection Profile"
-msgstr ""
+msgstr "Profilo connessione"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:545
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:570
@@ -572,7 +572,7 @@ msgstr "connessione di massa (download/siti web/BT)"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:551
 msgid "Delay Connection"
-msgstr ""
+msgstr "Ritardo di connessione"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:555
 msgid "for request/response connections"
@@ -1094,20 +1094,20 @@ msgstr "Limite connessioni in ingresso (0=illimitate)"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:697
 msgid "Per Minute"
-msgstr ""
+msgstr "Per minuto"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:699
 msgid "Per Hour"
-msgstr ""
+msgstr "Per ora"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:701
 msgid "Per Day"
-msgstr ""
+msgstr "Per giorno"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:703
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:746
 msgid "Per Client"
-msgstr ""
+msgstr "Per client"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:705
 msgid ""
@@ -1168,7 +1168,7 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:744
 msgid "Ban Duration"
-msgstr ""
+msgstr "Durata del ban"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:748
 msgid ""
@@ -1432,7 +1432,7 @@ msgstr ""
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/register_jsp.java:222
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:678
 msgid "Tunnel name"
-msgstr ""
+msgstr "Nome del tunnel"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/register_jsp.java:230
 msgid "Website name"
@@ -1953,7 +1953,7 @@ msgstr "Precedente"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:807
 msgid "Save tunnel configuration"
-msgstr ""
+msgstr "Salvare configurazione tunnel"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:810
 msgid "Save Tunnel"
diff --git a/apps/i2ptunnel/locale/messages_ko.po b/apps/i2ptunnel/locale/messages_ko.po
index a481fb5423c6e798271085962cf8159f03468029..c10842fa56250b0495eb9fff2ba7bd58e9365406 100644
--- a/apps/i2ptunnel/locale/messages_ko.po
+++ b/apps/i2ptunnel/locale/messages_ko.po
@@ -4,14 +4,15 @@
 # To contribute translations, see http://www.i2p2.de/newdevelopers
 # 
 # Translators:
+# HelloKS <kqwe1859@gmail.com>, 2017
 # SEPT____ <xpressengine3@mail.beo.kr>, 2016-2017
 msgid ""
 msgstr ""
 "Project-Id-Version: I2P\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-06-05 23:01+0000\n"
-"PO-Revision-Date: 2017-06-30 21:35+0000\n"
-"Last-Translator: zzzi2p\n"
+"PO-Revision-Date: 2017-07-15 04:47+0000\n"
+"Last-Translator: HelloKS <kqwe1859@gmail.com>\n"
 "Language-Team: Korean (http://www.transifex.com/otf/I2P/language/ko/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -195,7 +196,7 @@ msgstr "종류"
 msgid ""
 "Name of tunnel to be displayed on Tunnel Manager home page and the router "
 "console sidebar"
-msgstr ""
+msgstr "터널 매니저 홈페이지와 라우터 콘솔 사이드바에 표시 될 터널의 이름"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:228
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:228
@@ -207,13 +208,13 @@ msgstr "설명"
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:230
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:230
 msgid "Auto Start Tunnel"
-msgstr ""
+msgstr "터널 자동 시작"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:232
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:232
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:394
 msgid "Description of tunnel to be displayed on Tunnel Manager home page"
-msgstr ""
+msgstr "터널 매니저 홈페이지에 표시 될 터널의 설명"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:236
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:236
@@ -221,13 +222,13 @@ msgstr ""
 msgid ""
 "Enable this option to ensure this service is available when the router "
 "starts"
-msgstr ""
+msgstr "라우터가 시작할 때 이 서비스가 확실히 실행되길 원하는 경우 이 옵션을 활성화"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:240
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:240
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:603
 msgid "Automatically start tunnel when router starts"
-msgstr ""
+msgstr "라우터 시작시 이 터널 자동 시작"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:243
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:245
@@ -264,7 +265,7 @@ msgstr "요구됨"
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:258
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:531
 msgid "Specify the local port this service should be accessible from"
-msgstr ""
+msgstr "이 서비스에 접근할 수 있는 로컬 포트 지정"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:265
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:563
@@ -278,7 +279,7 @@ msgstr "호스트"
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:252
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:483
 msgid "Hostname or IP address of the target server"
-msgstr ""
+msgstr "목표 서버의 호스트네임 혹은 IP 주소"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:282
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:303
@@ -289,7 +290,7 @@ msgstr "다음에 의해 접근가능 -"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:284
 msgid "Local interface (ip address) the client tunnel will be reachable from"
-msgstr ""
+msgstr "클라이언트 터널이 접근 가능한 로컬 인터페이스 (IP 주소)"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:305
 msgid "Use SSL?"
diff --git a/apps/i2ptunnel/locale/messages_nb.po b/apps/i2ptunnel/locale/messages_nb.po
index 9fafeca715805fbb8cba5fe2f0bc50dce452b674..d9a6aec248a50082ebc5df5d550072c5db19f6c1 100644
--- a/apps/i2ptunnel/locale/messages_nb.po
+++ b/apps/i2ptunnel/locale/messages_nb.po
@@ -4,7 +4,7 @@
 # To contribute translations, see http://www.i2p2.de/newdevelopers
 # 
 # Translators:
-# Allan Nordhøy <epost@anotheragency.no>, 2016
+# Allan Nordhøy <epost@anotheragency.no>, 2016-2017
 # Mikal <mikalv@mikalv.net>, 2013
 # Shpetim <shpetim@privacysolutions.no>, 2014
 # zzzi2p, 2015
@@ -13,8 +13,8 @@ msgstr ""
 "Project-Id-Version: I2P\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-06-05 23:01+0000\n"
-"PO-Revision-Date: 2017-06-30 21:35+0000\n"
-"Last-Translator: zzzi2p\n"
+"PO-Revision-Date: 2017-07-16 17:47+0000\n"
+"Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n"
 "Language-Team: Norwegian Bokmål (http://www.transifex.com/otf/I2P/language/nb/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -164,7 +164,7 @@ msgstr "Ugyldig adresse"
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:140
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/register_jsp.java:158
 msgid "Hidden Services Manager"
-msgstr ""
+msgstr "Behandler for skjulte tjenester"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:139
 msgid "Edit Client Tunnel"
@@ -647,7 +647,7 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:629
 msgid "New Keys on Reopen"
-msgstr "Nye nøkler ved gjennåpning"
+msgstr "Nye nøkler ved gjenåpning"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:631
 msgid "Change tunnel identity (destination) when tunnels reopen"
@@ -745,7 +745,7 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:702
 msgid "Allow SSL to I2P addresses"
-msgstr ""
+msgstr "Tillat SSL til I2P-adresser"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:709
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:864
@@ -881,7 +881,7 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:278
 msgid "Use SSL to connect to target"
-msgstr ""
+msgstr "Bruk SSL til å koble til målet"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:296
 msgid ""
diff --git a/apps/i2ptunnel/locale/messages_nl.po b/apps/i2ptunnel/locale/messages_nl.po
index b4a6069bcd004d68640c705c2531c8b90001313d..d909a786ac612ac6cebfcd5346c9efe594508c10 100644
--- a/apps/i2ptunnel/locale/messages_nl.po
+++ b/apps/i2ptunnel/locale/messages_nl.po
@@ -4,19 +4,20 @@
 # To contribute translations, see http://www.i2p2.de/newdevelopers
 # 
 # Translators:
+# D. Smits <dfsmits@gmail.com>, 2017
 # ducki2p <ducki2p@gmail.com>, 2011
 # foo <foo@bar>, 2009
 # Martijn de Boer, 2016
 # Desirius <martinjefmeyers@gmail.com>, 2014
 # Nathan Follens, 2015
-# skoning <skoning@onenetbeyond.org>, 2014
+# skoning <skoning@onenetbeyond.org>, 2014,2017
 msgid ""
 msgstr ""
 "Project-Id-Version: I2P\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-06-05 23:01+0000\n"
-"PO-Revision-Date: 2017-06-30 21:35+0000\n"
-"Last-Translator: zzzi2p\n"
+"PO-Revision-Date: 2017-07-28 07:34+0000\n"
+"Last-Translator: D. Smits <dfsmits@gmail.com>\n"
 "Language-Team: Dutch (http://www.transifex.com/otf/I2P/language/nl/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -213,7 +214,7 @@ msgstr "Omschrijving"
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:230
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:230
 msgid "Auto Start Tunnel"
-msgstr ""
+msgstr "Tunnel automatisch starten"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:232
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:232
@@ -233,7 +234,7 @@ msgstr ""
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:240
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:603
 msgid "Automatically start tunnel when router starts"
-msgstr ""
+msgstr "Start de tunnel automatisch wanneer de router start."
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:243
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:245
@@ -284,7 +285,7 @@ msgstr "Host"
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:252
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:483
 msgid "Hostname or IP address of the target server"
-msgstr ""
+msgstr "Hostnaam of IP-adres van de doelserver"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:282
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:303
@@ -347,7 +348,7 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:344
 msgid "Use plugin instead of above-listed proxies if available"
-msgstr ""
+msgstr "Gebruik de plugin in plaats van de hierboven weergegeven proxies als dat mogelijk is."
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:349
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:444
@@ -357,7 +358,7 @@ msgstr "Tunnel Destinations"
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:359
 msgid ""
 "Specify the .i2p address or destination (b32 or b64) of the tunnel here."
-msgstr ""
+msgstr "Specificeer hier het .i2p adres of de bestemming (b32 of b64) van de tunnel."
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:365
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:450
@@ -384,7 +385,7 @@ msgstr ""
 msgid ""
 "Share tunnels with other clients and irc/httpclients? (Change requires "
 "restart of client proxy tunnel)"
-msgstr ""
+msgstr "Tunnels delen met andere clients en irc/http clients? (De wijziging vereist een herstart van de client proxy tunnel)"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:385
 msgid "Enable DCC"
@@ -392,7 +393,7 @@ msgstr "DCC inschakelen"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:387
 msgid "Enables direct chat and file transfers, bypassing I2P"
-msgstr ""
+msgstr "Activeert directe chat en bestandsuitwisseling, zonder I2P te gebruiken"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:391
 msgid ""
@@ -429,7 +430,7 @@ msgstr "Variantie"
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:410
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:437
 msgid "Length of each Tunnel"
-msgstr ""
+msgstr "Lengte van iedere tunnel"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:417
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:444
@@ -505,12 +506,12 @@ msgstr "Backup-aantal"
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:496
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:523
 msgid "Number of Tunnels in Group"
-msgstr ""
+msgstr "Aantal tunnels in groep"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:500
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:527
 msgid "Number of Reserve Tunnels"
-msgstr ""
+msgstr "Aantal reserve tunnels"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:507
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:534
@@ -550,7 +551,7 @@ msgstr "Verbinden vertragen"
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:538
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:563
 msgid "Connection Profile"
-msgstr ""
+msgstr "Verbindings profiel"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:545
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:570
@@ -564,7 +565,7 @@ msgstr "bulk connection (downloads/websites/BT)"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:551
 msgid "Delay Connection"
-msgstr ""
+msgstr "Vertraag verbinding"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:555
 msgid "for request/response connections"
@@ -578,12 +579,12 @@ msgstr "Router I2CP-adres"
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:565
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:582
 msgid "I2CP Hostname or IP"
-msgstr ""
+msgstr "I2CP computernaam of IP adres"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:575
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:592
 msgid "I2CP Port Number"
-msgstr ""
+msgstr "I2CP poort nummer"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:585
 msgid "Delay tunnel open until required"
@@ -691,7 +692,7 @@ msgstr "Bestand"
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:353
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:905
 msgid "Path to Private Key File"
-msgstr ""
+msgstr "Pad naar geheime sleutel bestand"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:664
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:337
@@ -709,7 +710,7 @@ msgstr "Lokale Base 32"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:678
 msgid "HTTP Filtering"
-msgstr ""
+msgstr "HTTP filter"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:680
 msgid ""
@@ -800,15 +801,15 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:762
 msgid "Outproxy requires authorization"
-msgstr ""
+msgstr "Outproxy vereist autorisatie"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:766
 msgid "Enter username required by outproxy"
-msgstr ""
+msgstr "Geef gebruikersnaam zoals vereist door outproxy"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:772
 msgid "Enter password required by outproxy"
-msgstr ""
+msgstr "Geef wachtwoord zoals vereist door outproxy"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:779
 msgid "Jump URL List"
@@ -855,7 +856,7 @@ msgstr "Opslaan"
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:809
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:986
 msgid "Tunnels not initialized yet; please retry in a few moments."
-msgstr ""
+msgstr "Tunnels zijn nog niet opgebouwd, probeer het straks nog een keer."
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:139
 msgid "Edit Hidden Service"
@@ -863,11 +864,11 @@ msgstr "Verborgen dienst bewerken"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:167
 msgid "Edit Server Settings"
-msgstr ""
+msgstr "Server instellingen bewerken"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:178
 msgid "New Server Settings"
-msgstr ""
+msgstr "Nieuwe server instellingen"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:268
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:506
@@ -915,7 +916,7 @@ msgstr "Private sleutel bestand"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:389
 msgid "Generate a QR Code for this domain"
-msgstr ""
+msgstr "Genereer QR code voor dit domein"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:397
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:932
@@ -926,7 +927,7 @@ msgstr "Genereer QR code"
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:399
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:942
 msgid "Add to Private addressbook"
-msgstr ""
+msgstr "Voeg toe aan privé adresboek"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:405
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:948
diff --git a/apps/i2ptunnel/locale/messages_zh.po b/apps/i2ptunnel/locale/messages_zh.po
index 8286b7daf9cda2c73d0e5723048da5580424d9fe..1f6b01a5590cc93988c47632b1476b39be95a2f6 100644
--- a/apps/i2ptunnel/locale/messages_zh.po
+++ b/apps/i2ptunnel/locale/messages_zh.po
@@ -7,6 +7,7 @@
 # ducki2p <ducki2p@gmail.com>, 2011
 # nobody <oiiu19@yahoo.com>, 2013
 # xkimo_daeee <michael_ies@yahoo.com>, 2014
+# nobody <oiiu19@yahoo.com>, 2017
 # 黃彥儒 <r1235613@gmail.com>, 2014
 # walking <walking@i2pmail.org>, 2011
 # walking <waling@mail.i2p>, 2013
@@ -19,8 +20,8 @@ msgstr ""
 "Project-Id-Version: I2P\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-06-05 23:01+0000\n"
-"PO-Revision-Date: 2017-06-30 21:35+0000\n"
-"Last-Translator: zzzi2p\n"
+"PO-Revision-Date: 2017-07-30 05:51+0000\n"
+"Last-Translator: nobody <oiiu19@yahoo.com>\n"
 "Language-Team: Chinese (China) (http://www.transifex.com/otf/I2P/language/zh_CN/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -216,7 +217,7 @@ msgstr "描述"
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:230
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:230
 msgid "Auto Start Tunnel"
-msgstr ""
+msgstr "自动启动隧道"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:232
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:232
@@ -236,7 +237,7 @@ msgstr ""
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:240
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:603
 msgid "Automatically start tunnel when router starts"
-msgstr ""
+msgstr "路由器启动时自动启动此隧道"
 
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:243
 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:245
diff --git a/apps/imagegen/imagegen/webapp/src/main/java/net/i2p/imagegen/RandomArt.java b/apps/imagegen/imagegen/webapp/src/main/java/net/i2p/imagegen/RandomArt.java
index 342da1228fb585d0a8c485c4b78f73ada98e7abc..21956f551925f882beafd42db95b54b0657e588f 100644
--- a/apps/imagegen/imagegen/webapp/src/main/java/net/i2p/imagegen/RandomArt.java
+++ b/apps/imagegen/imagegen/webapp/src/main/java/net/i2p/imagegen/RandomArt.java
@@ -245,7 +245,7 @@ public class RandomArt {
 	if (mod != 0) {
 		//base += mod * 16;
 		//base += mod * 16 * 256;
-		base += mod * 5 * 256 * 256;
+		base += mod * (5 * 256 * 256L);
 	}
 	if (base > 0xffffff || base < 0)
 		base &= 0xffffff;
diff --git a/apps/jetty/java/src/net/i2p/servlet/I2PDefaultServlet.java b/apps/jetty/java/src/net/i2p/servlet/I2PDefaultServlet.java
index c4e8bdd28d3dca43a0c6894867c308e3e5450354..eb2dd62c8986fe408ba03163f04f3fe3e563564d 100644
--- a/apps/jetty/java/src/net/i2p/servlet/I2PDefaultServlet.java
+++ b/apps/jetty/java/src/net/i2p/servlet/I2PDefaultServlet.java
@@ -248,9 +248,9 @@ public class I2PDefaultServlet extends DefaultServlet
      * Copied unchanged from Resource.java
      *
      * Encode any characters that could break the URI string in an HREF.
-     * Such as <a href="/path/to;<script>Window.alert("XSS"+'%20'+"here");</script>">Link</a>
+     * Such as &lt;a href="/path/to;&lt;script&gt;Window.alert("XSS"+'%20'+"here");&lt;/script&gt;"&gt;Link&lt;/a&gt;
      * 
-     * The above example would parse incorrectly on various browsers as the "<" or '"' characters
+     * The above example would parse incorrectly on various browsers as the "&lt;" or '"' characters
      * would end the href attribute value string prematurely.
      * 
      * @param raw the raw text to encode.
diff --git a/apps/jrobin/java/src/org/jrobin/graph/RrdGraphConstants.java b/apps/jrobin/java/src/org/jrobin/graph/RrdGraphConstants.java
index a46508436ca88dbc125ab7d5a0c8db89e7d9d1d6..939670c20343ce4cd36c273d971c5f94df3443fe 100644
--- a/apps/jrobin/java/src/org/jrobin/graph/RrdGraphConstants.java
+++ b/apps/jrobin/java/src/org/jrobin/graph/RrdGraphConstants.java
@@ -161,12 +161,12 @@ public interface RrdGraphConstants {
 	/**
 	 * Default minor grid color
 	 */
-	Color DEFAULT_GRID_COLOR = new Color(100, 100, 100, 75);
+	Color DEFAULT_GRID_COLOR = new Color(171, 171, 171, 95);
 	// Color DEFAULT_GRID_COLOR = new Color(140, 140, 140);
 	/**
 	 * Default major grid color
 	 */
-	Color DEFAULT_MGRID_COLOR = new Color(255, 91, 91, 110);
+	Color DEFAULT_MGRID_COLOR = new Color(255, 91, 91, 95);
 	// Color DEFAULT_MGRID_COLOR = new Color(130, 30, 30);
 	/**
 	 * Default font color
@@ -251,7 +251,7 @@ public interface RrdGraphConstants {
 	 * Default font name, determined based on the current operating system
 	 */
 	String DEFAULT_FONT_NAME = System.getProperty("os.name").toLowerCase().contains("windows") ?
-			"Lucida Console" : "Monospaced";
+			"Lucida Sans Typewriter" : "Monospaced";
 
 	/**
 	 * Default graph small font
diff --git a/apps/jrobin/java/src/org/jrobin/graph/RrdGraphDef.java b/apps/jrobin/java/src/org/jrobin/graph/RrdGraphDef.java
index 2f1221cd0f8bec2e62be36e2cb5d53eb1b88f362..6f4e966a395d4c99534e14885c1efaf37a55b66f 100644
--- a/apps/jrobin/java/src/org/jrobin/graph/RrdGraphDef.java
+++ b/apps/jrobin/java/src/org/jrobin/graph/RrdGraphDef.java
@@ -132,11 +132,11 @@ public class RrdGraphDef implements RrdGraphConstants {
             fontDir = new File(fontdirProperty);
         }
 
-        fonts[FONTTAG_DEFAULT]   = new Font(DEFAULT_FONT_NAME, Font.PLAIN, 10);
-        fonts[FONTTAG_TITLE]     = new Font(DEFAULT_FONT_NAME, Font.PLAIN, 10);
-        fonts[FONTTAG_AXIS]      = new Font("Droid Sans Mono", Font.PLAIN, 10);
-        fonts[FONTTAG_UNIT]      = new Font(DEFAULT_FONT_NAME, Font.PLAIN, 10);
-        fonts[FONTTAG_LEGEND]    = new Font("Droid Sans Mono", Font.PLAIN, 10);
+        fonts[FONTTAG_DEFAULT]   = new Font(DEFAULT_FONT_NAME, Font.PLAIN, 8);
+        fonts[FONTTAG_TITLE]     = new Font(DEFAULT_FONT_NAME, Font.PLAIN, 9);
+        fonts[FONTTAG_AXIS]      = new Font(DEFAULT_FONT_NAME, Font.PLAIN, 7);
+        fonts[FONTTAG_UNIT]      = new Font(DEFAULT_FONT_NAME, Font.PLAIN, 8);
+        fonts[FONTTAG_LEGEND]    = new Font(DEFAULT_FONT_NAME, Font.PLAIN, 8);
         fonts[FONTTAG_WATERMARK] = new Font(DEFAULT_FONT_NAME, Font.PLAIN, 1).deriveFont(5.5F);
     }
 
@@ -173,7 +173,7 @@ public class RrdGraphDef implements RrdGraphConstants {
             if (exception != null) {
                 System.err.println(exception.getLocalizedMessage());
             }
-            font = new Font("Monospaced", Font.PLAIN, 10);
+            font = new Font(DEFAULT_FONT_NAME, Font.PLAIN, 10);
         }
 
         if (font == null) {
diff --git a/apps/ministreaming/locale/messages_in.po b/apps/ministreaming/locale/messages_in.po
index e812320e94a9c28fec86d1e95c34f588567674d8..8dc3f1e08f6654bfabfec8a3354892bd32a77307 100644
--- a/apps/ministreaming/locale/messages_in.po
+++ b/apps/ministreaming/locale/messages_in.po
@@ -5,13 +5,14 @@
 # 
 # Translators:
 # Khairul Agasta <khairuldroids@gmail.com>, 2014
+# Robert Dafis <robertdafis@gmail.com>, 2017
 msgid ""
 msgstr ""
 "Project-Id-Version: I2P\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2015-03-29 14:30+0000\n"
-"PO-Revision-Date: 2017-06-30 21:32+0000\n"
-"Last-Translator: kytv <killyourtv@i2pmail.org>\n"
+"PO-Revision-Date: 2017-07-27 00:20+0000\n"
+"Last-Translator: Robert Dafis <robertdafis@gmail.com>\n"
 "Language-Team: Indonesian (http://www.transifex.com/otf/I2P/language/id/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -86,7 +87,7 @@ msgstr "Tujuan lokal dimatikan"
 
 #: ../java/src/net/i2p/client/streaming/I2PSocketException.java:120
 msgid "Connection was reset"
-msgstr ""
+msgstr "Sambungan terputus lalu tersambung kembali"
 
 #. Translate this one here, can't do it later
 #: ../java/src/net/i2p/client/streaming/I2PSocketException.java:127
diff --git a/apps/ministreaming/locale/messages_nb.po b/apps/ministreaming/locale/messages_nb.po
index ab53bf1b4ab36590a75c815416bf0dbd194d935d..b7042a46f080597d37774c48e6efe17958f4dc50 100644
--- a/apps/ministreaming/locale/messages_nb.po
+++ b/apps/ministreaming/locale/messages_nb.po
@@ -5,13 +5,14 @@
 # 
 # Translators:
 # Allan Nordhøy <epost@anotheragency.no>, 2014
+# Allan Nordhøy <epost@anotheragency.no>, 2017
 msgid ""
 msgstr ""
 "Project-Id-Version: I2P\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2015-03-29 14:30+0000\n"
-"PO-Revision-Date: 2017-06-30 21:32+0000\n"
-"Last-Translator: kytv <killyourtv@i2pmail.org>\n"
+"PO-Revision-Date: 2017-07-16 14:45+0000\n"
+"Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n"
 "Language-Team: Norwegian Bokmål (http://www.transifex.com/otf/I2P/language/nb/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -21,7 +22,7 @@ msgstr ""
 
 #: ../java/src/net/i2p/client/streaming/I2PSocketException.java:69
 msgid "Message timeout"
-msgstr "Meldingsfrist utløp"
+msgstr "Meldingsfristutløp"
 
 #: ../java/src/net/i2p/client/streaming/I2PSocketException.java:72
 msgid "Failed delivery to local destination"
@@ -58,7 +59,7 @@ msgstr "Melding utløp"
 
 #: ../java/src/net/i2p/client/streaming/I2PSocketException.java:96
 msgid "Local lease set invalid"
-msgstr ""
+msgstr "Lokalt oppsatt leie ugyldig"
 
 #: ../java/src/net/i2p/client/streaming/I2PSocketException.java:99
 msgid "No local tunnels"
@@ -74,11 +75,11 @@ msgstr "Ugyldig destinasjon"
 
 #: ../java/src/net/i2p/client/streaming/I2PSocketException.java:111
 msgid "Destination lease set expired"
-msgstr ""
+msgstr "Oppsatt målleie utløpt"
 
 #: ../java/src/net/i2p/client/streaming/I2PSocketException.java:114
 msgid "Destination lease set not found"
-msgstr ""
+msgstr "Oppsatt målleie ikke funnet"
 
 #: ../java/src/net/i2p/client/streaming/I2PSocketException.java:117
 msgid "Local destination shutdown"
@@ -86,7 +87,7 @@ msgstr "Nedstengning av lokal destinasjon"
 
 #: ../java/src/net/i2p/client/streaming/I2PSocketException.java:120
 msgid "Connection was reset"
-msgstr ""
+msgstr "Tilkobling tilbakestilt"
 
 #. Translate this one here, can't do it later
 #: ../java/src/net/i2p/client/streaming/I2PSocketException.java:127
diff --git a/apps/routerconsole/java/src/net/i2p/router/news/NewsManager.java b/apps/routerconsole/java/src/net/i2p/router/news/NewsManager.java
index 2b5af405d1bbedb107666fc43e9f5a1ed4bf6b63..d7fb300897ffd021b6ce3bc4fb806f113084663e 100644
--- a/apps/routerconsole/java/src/net/i2p/router/news/NewsManager.java
+++ b/apps/routerconsole/java/src/net/i2p/router/news/NewsManager.java
@@ -190,7 +190,6 @@ public class NewsManager implements ClientApp {
     }
 
     private List<NewsEntry> parseInitialNews() {
-        NewsEntry entry = new NewsEntry();
         File file = new File(_context.getBaseDir(), "docs/initialNews/initialNews.xml");
         Reader reader = null;
         try {
diff --git a/apps/routerconsole/java/src/net/i2p/router/update/ConsoleUpdateManager.java b/apps/routerconsole/java/src/net/i2p/router/update/ConsoleUpdateManager.java
index d3b0b45a80545be99c906b6702d4b31f521f6d4d..81f13c155697bf93e8e8511c003e5b41883d760c 100644
--- a/apps/routerconsole/java/src/net/i2p/router/update/ConsoleUpdateManager.java
+++ b/apps/routerconsole/java/src/net/i2p/router/update/ConsoleUpdateManager.java
@@ -1303,7 +1303,7 @@ public class ConsoleUpdateManager implements UpdateManager, RouterApp {
         }
         return Collections.emptyList();
     }
-    
+
     /**
      *  Is there a reason we can't download the update?
      *  @return translated contraint or null
@@ -1573,7 +1573,7 @@ public class ConsoleUpdateManager implements UpdateManager, RouterApp {
 
         @Override
         public String toString() {
-            return "RegisteredUpdater " + updater.getClass().getName() + " for " + type + ' ' + method + " @pri " + priority;
+            return "RegisteredUpdater " + updater.getClass().getName() + " for " + type + " (" + method + ") @pri " + priority;
         }
     }
 
@@ -1614,7 +1614,7 @@ public class ConsoleUpdateManager implements UpdateManager, RouterApp {
 
         @Override
         public String toString() {
-            return "RegisteredChecker " + checker.getClass().getName() + " for " + type + ' ' + method + " @pri " + priority;
+            return "RegisteredChecker " + checker.getClass().getName() + " for " + type + " (" + method + ") @pri " + priority;
         }
     }
 
@@ -1723,19 +1723,33 @@ public class ConsoleUpdateManager implements UpdateManager, RouterApp {
         StringBuilder buf = new StringBuilder(1024);
         buf.append("<h2>Update Manager</h2>");
         buf.append("<h3>Installed</h3>");
+        buf.append("<div class=\"debug_container\">");
         toString(buf, _installed);
+        buf.append("</div>");
         buf.append("<h3>Available</h3>");
+        buf.append("<div class=\"debug_container\">");
         toString(buf, _available);
+        buf.append("</div>");
         buf.append("<h3>Downloaded</h3>");
+        buf.append("<div class=\"debug_container\">");
         toString(buf, _downloaded);
+        buf.append("</div>");
         buf.append("<h3>Registered Checkers</h3>");
+        buf.append("<div class=\"debug_container\">");
         toString(buf, _registeredCheckers);
+        buf.append("</div>");
         buf.append("<h3>Registered Updaters</h3>");
+        buf.append("<div class=\"debug_container\">");
         toString(buf, _registeredUpdaters);
+        buf.append("</div>");
         buf.append("<h3>Active Checkers</h3>");
+        buf.append("<div class=\"debug_container\">");
         toString(buf, _activeCheckers);
+        buf.append("</div>");
         buf.append("<h3>Active Updaters</h3>");
+        buf.append("<div class=\"debug_container\">");
         toString(buf, _downloaders);
+        buf.append("</div>");
         out.write(buf.toString());
     }
 
@@ -1757,7 +1771,7 @@ public class ConsoleUpdateManager implements UpdateManager, RouterApp {
         for (Map.Entry<?, ?> entry : map.entrySet()) {
             String key = entry.getKey().toString();
             String val = entry.getValue().toString();
-            list.add("[" + key + "] = [" + val + "]<br>");
+            list.add("[" + key + "] = " + val + "<br>");
         }
         Collections.sort(list);
         for (String e : list) {
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigFamilyHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigFamilyHandler.java
index 2dc13fe0f183284400b52533a00f61421ece22b8..7efca8b74bd45a5dbb5720c50696bfad6ebe825e 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigFamilyHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigFamilyHandler.java
@@ -24,7 +24,7 @@ public class ConfigFamilyHandler extends FormHandler {
     @Override
     protected void processForm() {
 
-        if (_action.equals(_t("Create New Router Family"))) {
+        if (_action.equals(_t("Create Family"))) {
             String family = getJettyString("family");
             String old = _context.getProperty(FamilyKeyCrypto.PROP_FAMILY_NAME);
             if (family == null || family.trim().length() <= 0) {
@@ -39,7 +39,7 @@ public class ConfigFamilyHandler extends FormHandler {
             } else {
                 addFormError(_t("Error saving the configuration (applied but not saved) - please see the error logs"));
             }
-        } else if (_action.equals(_t("Join Existing Router Family"))) {
+        } else if (_action.equals(_t("Join Family"))) {
             InputStream in = _requestWrapper.getInputStream("file");
             try {
                 // non-null but zero bytes if no file entered, don't know why
@@ -92,7 +92,7 @@ public class ConfigFamilyHandler extends FormHandler {
                 // it's really a ByteArrayInputStream but we'll play along...
                 try { in.close(); } catch (IOException ioe) {}
             }
-        } else if (_action.equals(_t("Leave Router Family"))) {
+        } else if (_action.equals(_t("Leave Family"))) {
             List<String> removes = new ArrayList<String>();
             removes.add(FamilyKeyCrypto.PROP_FAMILY_NAME);
             removes.add(FamilyKeyCrypto.PROP_KEY_PASSWORD);
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 be7ffc3c7328c772d267df514b1dd979569117c3..3d3a10034f6e679c4dd6880198d310a55628bd3d 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/FileDumpHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/FileDumpHelper.java
@@ -19,6 +19,7 @@ import java.util.jar.Manifest;
 import net.i2p.crypto.SHA256Generator;
 import net.i2p.data.DataHelper;
 import net.i2p.util.FileUtil;
+import net.i2p.util.SystemVersion;
 
 /**
  *  Dump info on jars and wars
@@ -26,11 +27,12 @@ import net.i2p.util.FileUtil;
  *  @since 0.8.13
  */
 public class FileDumpHelper extends HelperBase {
-    
+
+    private static final boolean isWindows = SystemVersion.isWindows();
     public String getFileSummary() {
         StringBuilder buf = new StringBuilder(16*1024);
-        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>");
+        buf.append("<table id=\"jardump\">\n<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>\n");
 
         // jars added in wrapper.config
         ClassLoader loader = ClassLoader.getSystemClassLoader();
@@ -57,19 +59,31 @@ public class FileDumpHelper extends HelperBase {
 
         // our jars
         File dir = new File(_context.getBaseDir(), "lib");
+        buf.append("<tr><th class=\"subheading routerfiles\" colspan=\"9\"><b>Router Jar Files:</b> <code>");
+        buf.append(dir.getAbsolutePath());
+        buf.append("</code></th></tr>\n");
         dumpDir(buf, dir, ".jar");
 
         // our wars
         dir = new File(_context.getBaseDir(), "webapps");
+        buf.append("<tr><th class=\"subheading routerfiles\" colspan=\"9\"><b>Router War Files:</b> <code>");
+        buf.append(dir.getAbsolutePath());
+        buf.append("</code></th></tr>\n");
         dumpDir(buf, dir, ".war");
 
         // plugins
         File pluginDir = new File(_context.getConfigDir(), PluginStarter.PLUGIN_DIR);
+        buf.append("<tr><th class=\"subheading pluginfiles\" colspan=\"9\"><b>I2P Plugins:</b> <code>");
+        buf.append(pluginDir.getAbsolutePath());
+        buf.append("</code></th></tr>");
         File[] files = pluginDir.listFiles();
         if (files != null) {
             Arrays.sort(files);
             for (int i = 0; i < files.length; i++) {
                 dir = new File(files[i], "lib");
+                buf.append("<tr><th class=\"subheading pluginfiles\" colspan=\"9\"><b>Plugin File Location:</b> <code>");
+                buf.append(dir.getAbsolutePath());
+                buf.append("</code></th></tr>");
                 dumpDir(buf, dir, ".jar");
                 dir = new File(files[i], "console/webapps");
                 dumpDir(buf, dir, ".war");
@@ -92,7 +106,7 @@ public class FileDumpHelper extends HelperBase {
     }
 
     private static void dumpFile(StringBuilder buf, File f) {
-        buf.append("<tr><td><b>").append(f.getAbsolutePath()).append("</b></td>" +
+        buf.append("<tr><td><b title=\"").append(f.getAbsolutePath()).append("\">").append(f.getName()).append("</b></td>" +
                    "<td align=\"right\">").append(f.length()).append("</td>" +
                    "<td>");
         long mod = f.lastModified();
@@ -107,14 +121,14 @@ public class FileDumpHelper extends HelperBase {
         if (hash != null) {
             byte[] hh = new byte[16];
             System.arraycopy(hash, 0, hh, 0, 16);
-            buf.append("<tt>");
+            buf.append("<span class=\"sha256\"><tt>");
             String p1 = DataHelper.toHexString(hh);
             for (int i = p1.length(); i < 32; i++) {
                 buf.append('0');
             }
             buf.append(p1).append("</tt><br>");
             System.arraycopy(hash, 16, hh, 0, 16);
-            buf.append("<tt>").append(DataHelper.toHexString(hh)).append("</tt>");
+            buf.append("<tt>").append(DataHelper.toHexString(hh)).append("</tt></span>");
         }
         Attributes att = attributes(f);
         if (att == null)
@@ -130,9 +144,9 @@ public class FileDumpHelper extends HelperBase {
             // fix and uncomment if a reliable viewmtn host appears
             //buf.append("<a href=\"http://killyourtv.i2p/viewmtn/revision/info/").append(s)
             //   .append("\">");
-            buf.append("<tt>").append(s.substring(0, 20)).append("</tt>" +
+            buf.append("<span class=\"revision\"><tt>").append(s.substring(0, 20)).append("</tt>" +
                        "<br>" +
-                       "<tt>").append(s.substring(20)).append("</tt>");
+                       "<tt>").append(s.substring(20)).append("</tt></span>");
             //buf.append("</tt>");
         }
         buf.append("</td><td>");
@@ -147,11 +161,15 @@ public class FileDumpHelper extends HelperBase {
         s = getAtt(att, "Built-By");
         if (s != null)
             buf.append(s);
-        buf.append("</td><td><font color=\"red\">");
+        buf.append("</td><td>");
         s = getAtt(att, "Workspace-Changes");
-        if (s != null)
-            buf.append(s.replace(",", "<br>"));
-        buf.append("</font></td></tr>\n");
+        if (s != null) {
+            // Encase each mod in a span so we can single click select individual mods
+            buf.append("<font color=\"red\"><span class=\"unsignedmod\">")
+               .append(s.replace(",", "</span></font><hr><font color=\"red\"><span class=\"unsignedmod\">"))
+               .append("</span></font>");
+        }
+        buf.append("</td></tr>\n");
     }
 
     private static byte[] sha256(File f) {
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 d1ed9935bd59263d8c20c2466c89db763d9155f9..0cb6035ebb4dd31d8812d1fabb0e197f1693bec8 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java
@@ -384,12 +384,15 @@ class NetDbRenderer {
                 buf.append("</td></tr>");
 
             }
+            buf.append("<tr><td colspan=\"2\"><ul class=\"netdb_leases\">");
             for (int i = 0; i < ls.getLeaseCount(); i++) {
                 Lease lease = ls.getLease(i);
-                buf.append("<tr><td colspan=\"2\">");
-                buf.append("<b>").append(_t("Lease")).append(' ').append(i + 1).append(":</b> ").append(_t("Gateway")).append(' ');
+                buf.append("<li><b>").append(_t("Lease")).append(' ').append(i + 1).append(":</b> <span class=\"netdb_gateway\" title=\"")
+                   .append(_t("Gateway")).append("\"><img src=\"themes/console/images/info/gateway.png\" alt=\"")
+                   .append(_t("Gateway")).append("\"></span> <span class=\"tunnel_peer\">");
                 buf.append(_context.commSystem().renderPeerHTML(lease.getGateway()));
-                buf.append(' ').append(_t("Tunnel")).append(' ').append(lease.getTunnelId().getTunnelId()).append(' ');
+                buf.append("</span> <span class=\"netdb_tunnel\">").append(_t("Tunnel")).append(" <span class=\"tunnel_id\">")
+                   .append(lease.getTunnelId().getTunnelId()).append("</span></span> ");
                 if (debug) {
                     long exl = lease.getEndDate().getTime() - now;
                     if (exl > 0)
@@ -397,8 +400,9 @@ class NetDbRenderer {
                     else
                         buf.append("<b class=\"netdb_expiry\">").append(_t("Expired {0} ago", DataHelper.formatDuration2(0-exl))).append("</b>");
                 }
-                buf.append("</td></tr>\n");
+                buf.append("</li>");
             }
+            buf.append("</ul></td></tr>\n");
             buf.append("</table>\n");
             out.write(buf.toString());
             buf.setLength(0);
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/PeerHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/PeerHelper.java
index 79a49e718dd975f85eed65658e62935e982dc60d..80b7a7ac9ed3902f45d02787089dc472a8664022 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/PeerHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/PeerHelper.java
@@ -344,49 +344,49 @@ public class PeerHelper extends HelperBase {
         }
         buf.append(".</h3>\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>");
+        buf.append("<tr class=\"smallhead\"><th 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);
-        buf.append("</th><th class=\"smallhead\" nowrap><a href=\"#def.dir\" title=\"")
+        buf.append("</th><th nowrap><a href=\"#def.dir\" title=\"")
            .append(_t("Direction/Introduction")).append("\">").append(_t("Dir"))
-           .append("</a></th><th class=\"smallhead\" nowrap>").append(_t("IPv6"))
-           .append("</th><th class=\"smallhead\" nowrap><a href=\"#def.idle\">").append(_t("Idle")).append("</a><br>");
+           .append("</a></th><th nowrap>").append(_t("IPv6"))
+           .append("</th><th nowrap><a href=\"#def.idle\">").append(_t("Idle")).append("</a><br>");
         appendSortLinks(buf, urlBase, sortFlags, _t("Sort by idle inbound"), FLAG_IDLE_IN);
         buf.append(" / ");
         appendSortLinks(buf, urlBase, sortFlags, _t("Sort by idle outbound"), FLAG_IDLE_OUT);
         buf.append("</th>");
-        buf.append("<th class=\"smallhead\" nowrap><a href=\"#def.rate\">").append(_t("In/Out")).append("</a><br>");
+        buf.append("<th nowrap><a href=\"#def.rate\">").append(_t("In/Out")).append("</a><br>");
         appendSortLinks(buf, urlBase, sortFlags, _t("Sort by inbound rate"), FLAG_RATE_IN);
         buf.append(" / ");
         appendSortLinks(buf, urlBase, sortFlags, _t("Sort by outbound rate"), FLAG_RATE_OUT);
         buf.append("</th>\n");
-        buf.append("<th class=\"smallhead\" nowrap><span class=\"peersort\"><a href=\"#def.up\">").append(_t("Up")).append("</a><br>");
+        buf.append("<th nowrap><span class=\"peersort\"><a href=\"#def.up\">").append(_t("Up")).append("</a><br>");
         appendSortLinks(buf, urlBase, sortFlags, _t("Sort by connection uptime"), FLAG_UPTIME);
-        buf.append("</span></th><th class=\"smallhead\" nowrap><span class=\"peersort\"><a href=\"#def.skew\">").append(_t("Skew")).append("</a><br>");
+        buf.append("</span></th><th nowrap><span class=\"peersort\"><a href=\"#def.skew\">").append(_t("Skew")).append("</a><br>");
         appendSortLinks(buf, urlBase, sortFlags, _t("Sort by clock skew"), FLAG_SKEW);
         buf.append("</span></th>\n");
-        buf.append("<th class=\"smallhead\" nowrap><a href=\"#def.cwnd\">CWND</a><br>");
+        buf.append("<th nowrap><a href=\"#def.cwnd\">CWND</a><br>");
         appendSortLinks(buf, urlBase, sortFlags, _t("Sort by congestion window"), FLAG_CWND);
-        buf.append("</th><th class=\"smallhead\" nowrap><span class=\"peersort\"><a href=\"#def.ssthresh\">SST</a><br>");
+        buf.append("</th><th nowrap><span class=\"peersort\"><a href=\"#def.ssthresh\">SST</a><br>");
         appendSortLinks(buf, urlBase, sortFlags, _t("Sort by slow start threshold"), FLAG_SSTHRESH);
         buf.append("</span></th>\n");
-        buf.append("<th class=\"smallhead\" nowrap><span class=\"peersort\"><a href=\"#def.rtt\">RTT</a><br>");
+        buf.append("<th nowrap><span class=\"peersort\"><a href=\"#def.rtt\">RTT</a><br>");
         appendSortLinks(buf, urlBase, sortFlags, _t("Sort by round trip time"), FLAG_RTT);
-        //buf.append("</th><th class=\"smallhead\" nowrap><a href=\"#def.dev\">").append(_t("Dev")).append("</a><br>");
+        //buf.append("</th><th nowrap><a href=\"#def.dev\">").append(_t("Dev")).append("</a><br>");
         //appendSortLinks(buf, urlBase, sortFlags, _t("Sort by round trip time deviation"), FLAG_DEV);
-        buf.append("</span></th><th class=\"smallhead\" nowrap><span class=\"peersort\"><a href=\"#def.rto\">RTO</a><br>");
+        buf.append("</span></th><th nowrap><span class=\"peersort\"><a href=\"#def.rto\">RTO</a><br>");
         appendSortLinks(buf, urlBase, sortFlags, _t("Sort by retransmission timeout"), FLAG_RTO);
         buf.append("</span></th>\n");
-        buf.append("<th class=\"smallhead\" nowrap><a href=\"#def.mtu\">MTU</a><br>");
+        buf.append("<th nowrap><a href=\"#def.mtu\">MTU</a><br>");
         appendSortLinks(buf, urlBase, sortFlags, _t("Sort by outbound maximum transmit unit"), FLAG_MTU);
-        buf.append("</th><th class=\"smallhead\" nowrap><span class=\"peersort\"><a href=\"#def.send\">").append(_t("TX")).append("</a><br>");
+        buf.append("</th><th nowrap><span class=\"peersort\"><a href=\"#def.send\">").append(_t("TX")).append("</a><br>");
         appendSortLinks(buf, urlBase, sortFlags, _t("Sort by packets sent"), FLAG_SEND);
-        buf.append("</span></th><th class=\"smallhead\" nowrap><span class=\"peersort\"><a href=\"#def.recv\">").append(_t("RX")).append("</a><br>");
+        buf.append("</span></th><th nowrap><span class=\"peersort\"><a href=\"#def.recv\">").append(_t("RX")).append("</a><br>");
         appendSortLinks(buf, urlBase, sortFlags, _t("Sort by packets received"), FLAG_RECV);
         buf.append("</span></th>\n");
-        buf.append("<th class=\"smallhead\" nowrap><span class=\"peersort\"><a href=\"#def.resent\">").append(_t("Dup TX")).append("</a><br>");
+        buf.append("<th nowrap><span class=\"peersort\"><a href=\"#def.resent\">").append(_t("Dup TX")).append("</a><br>");
         appendSortLinks(buf, urlBase, sortFlags, _t("Sort by packets retransmitted"), FLAG_RESEND);
-        buf.append("</span></th><th class=\"smallhead\" nowrap><span class=\"peersort\"><a href=\"#def.dupRecv\">").append(_t("Dup RX")).append("</a><br>");
+        buf.append("</span></th><th nowrap><span class=\"peersort\"><a href=\"#def.dupRecv\">").append(_t("Dup RX")).append("</a><br>");
         appendSortLinks(buf, urlBase, sortFlags, _t("Sort by packets received more than once"), FLAG_DUP);
         buf.append("</span></th></tr>\n");
         out.write(buf.toString());
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 164834cf740d9fd087d45c14bcaa3432347984ca..aca298c2ffbaa9c00885d3a0e342f05786c6b7a5 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ProfileOrganizerRenderer.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ProfileOrganizerRenderer.java
@@ -146,7 +146,7 @@ class ProfileOrganizerRenderer {
                 buf.append("<td align=\"right\"><i>").append(_t("unknown")).append("</i></td>");
             }
             buf.append("<td align=\"right\">");
-            String v = info.getOption("router.version");
+            String v = info != null ? info.getOption("router.version") : null;
             if (v != null)
                 buf.append(DataHelper.stripHTML(v));
             buf.append("</td><td align=\"right\">").append(num(prof.getSpeedValue()));
@@ -205,23 +205,23 @@ class ProfileOrganizerRenderer {
         //buf.append("<h2><a name=\"flood\"></a>").append(_t("Floodfill and Integrated Peers"))
         //   .append(" (").append(integratedPeers.size()).append(")</h2>\n");
         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>");
-        buf.append("<th class=\"smallhead\">").append(_t("Integ. Value")).append("</th>");
-        buf.append("<th class=\"smallhead\">").append(_t("Last Heard About")).append("</th>");
-        buf.append("<th class=\"smallhead\">").append(_t("Last Heard From")).append("</th>");
-        buf.append("<th class=\"smallhead\">").append(_t("Last Good Send")).append("</th>");
-        buf.append("<th class=\"smallhead\">").append(_t("Last Bad Send")).append("</th>");
-        buf.append("<th class=\"smallhead\">").append(_t("10m Resp. Time")).append("</th>");
-        buf.append("<th class=\"smallhead\">").append(_t("1h Resp. Time")).append("</th>");
-        buf.append("<th class=\"smallhead\">").append(_t("1d Resp. Time")).append("</th>");
-        buf.append("<th class=\"smallhead\">").append(_t("Last Good Lookup")).append("</th>");
-        buf.append("<th class=\"smallhead\">").append(_t("Last Bad Lookup")).append("</th>");
-        buf.append("<th class=\"smallhead\">").append(_t("Last Good Store")).append("</th>");
-        buf.append("<th class=\"smallhead\">").append(_t("Last Bad Store")).append("</th>");
-        buf.append("<th class=\"smallhead\">").append(_t("1h Fail Rate")).append("</th>");
-        buf.append("<th class=\"smallhead\">").append(_t("1d Fail Rate")).append("</th>");
+        buf.append("<tr class=\"smallhead\">");
+        buf.append("<th>").append(_t("Peer")).append("</th>");
+        buf.append("<th>").append(_t("Caps")).append("</th>");
+        buf.append("<th>").append(_t("Integ. Value")).append("</th>");
+        buf.append("<th>").append(_t("Last Heard About")).append("</th>");
+        buf.append("<th>").append(_t("Last Heard From")).append("</th>");
+        buf.append("<th>").append(_t("Last Good Send")).append("</th>");
+        buf.append("<th>").append(_t("Last Bad Send")).append("</th>");
+        buf.append("<th>").append(_t("10m Resp. Time")).append("</th>");
+        buf.append("<th>").append(_t("1h Resp. Time")).append("</th>");
+        buf.append("<th>").append(_t("1d Resp. Time")).append("</th>");
+        buf.append("<th>").append(_t("Last Good Lookup")).append("</th>");
+        buf.append("<th>").append(_t("Last Bad Lookup")).append("</th>");
+        buf.append("<th>").append(_t("Last Good Store")).append("</th>");
+        buf.append("<th>").append(_t("Last Bad Store")).append("</th>");
+        buf.append("<th>").append(_t("1h Fail Rate")).append("</th>");
+        buf.append("<th>").append(_t("1d Fail Rate")).append("</th>");
         buf.append("</tr>");
         RateAverages ra = RateAverages.getTemp();
         for (PeerProfile prof : order) {
@@ -290,31 +290,31 @@ class ProfileOrganizerRenderer {
            .append("</td></tr>");
         buf.append("<tr id=\"capabilities_key\"><td colspan=\"2\"><table><tbody>");
         buf.append("<tr><td>&nbsp;</td>")
-           .append("<td><b>B:</b></td><td>").append(_t("SSU Testing")).append("</td>")
-           .append("<td><b>C:</b></td><td>").append(_t("SSU Introducer")).append("</td>")
+           .append("<td><b>B</b></td><td>").append(_t("SSU Testing")).append("</td>")
+           .append("<td><b>C</b></td><td>").append(_t("SSU Introducer")).append("</td>")
            .append("<td>&nbsp;</td></tr>");
         buf.append("<tr><td>&nbsp;</td>")
-           .append("<td><b>f:</b></td><td>").append(_t("Floodfill")).append("</td>")
-           .append("<td><b>H:</b></td><td>").append(_t("Hidden")).append("</td>")
+           .append("<td><b>f</b></td><td>").append(_t("Floodfill")).append("</td>")
+           .append("<td><b>H</b></td><td>").append(_t("Hidden")).append("</td>")
            .append("<td>&nbsp;</td></tr>");
         buf.append("<tr><td>&nbsp;</td>")
-           .append("<td><b>K:</b></td><td>").append(_t("Under {0} shared bandwidth", "12KBps")).append("</td>")
-           .append("<td><b>L:</b></td><td>").append(_t("{0} shared bandwidth", "12 - 32KBps")).append("</td>")
+           .append("<td><b>K</b></td><td>").append(_t("Under {0} shared bandwidth", "12KBps")).append("</td>")
+           .append("<td><b>L</b></td><td>").append(_t("{0} shared bandwidth", "12 - 32KBps")).append("</td>")
            .append("<td>&nbsp;</td></tr>");
         buf.append("<tr><td>&nbsp;</td>")
-           .append("<td><b>M:</b></td><td>").append(_t("{0} shared bandwidth", "32 - 64KBps")).append("</td>")
-           .append("<td><b>N:</b></td><td>").append(_t("{0} shared bandwidth", "64 - 128KBps")).append("</td>")
+           .append("<td><b>M</b></td><td>").append(_t("{0} shared bandwidth", "32 - 64KBps")).append("</td>")
+           .append("<td><b>N</b></td><td>").append(_t("{0} shared bandwidth", "64 - 128KBps")).append("</td>")
            .append("<td>&nbsp;</td></tr>");
         buf.append("<tr><td>&nbsp;</td>")
-           .append("<td><b>O:</b></td><td>").append(_t("{0} shared bandwidth", "128 - 256KBps")).append("</td>")
-           .append("<td><b>P:</b></td><td>").append(_t("{0} shared bandwidth", "256 - 2000KBps")).append("</td>")
+           .append("<td><b>O</b></td><td>").append(_t("{0} shared bandwidth", "128 - 256KBps")).append("</td>")
+           .append("<td><b>P</b></td><td>").append(_t("{0} shared bandwidth", "256 - 2000KBps")).append("</td>")
            .append("<td>&nbsp;</td></tr>");
         buf.append("<tr><td>&nbsp;</td>")
-           .append("<td><b>R:</b></td><td>").append(_t("Reachable")).append("</td>")
-           .append("<td><b>U:</b></td><td>").append(_t("Unreachable")).append("</td>")
+           .append("<td><b>R</b></td><td>").append(_t("Reachable")).append("</td>")
+           .append("<td><b>U</b></td><td>").append(_t("Unreachable")).append("</td>")
            .append("<td>&nbsp;</td></tr>");
         buf.append("<tr><td>&nbsp;</td>")
-           .append("<td><b>X:</b></td><td>").append(_t("Over {0} shared bandwidth", "2000KBps")).append("</td>")
+           .append("<td><b>X</b></td><td>").append(_t("Over {0} shared bandwidth", "2000KBps")).append("</td>")
            .append("<td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>");
         buf.append("<tr><td>&nbsp;</td><td colspan=\"5\">").append(_t("Note: For P and X bandwidth tiers, O is included for the purpose of backward compatibility in the NetDB."))
            .append("</tr>");
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 e243a384bebd9e79e562f820c05db9e9aab7858d..b7c6b7f66f087952fb38a08c087977805cd02325 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java
@@ -709,7 +709,7 @@ class SummaryBarRenderer {
             //buf.append("<h3><a href=\"/configupdate\">")
             buf.append("<h3><a href=\"/news\">")
                .append(_t("News &amp; Updates"))
-               .append("</a></h3><hr class=\"b\"><div class=\"newsheadings\">\n");
+               .append("</a></h3><hr class=\"b\"><div class=\"sb_newsheadings\">\n");
             // Get news content.
             List<NewsEntry> entries = Collections.emptyList();
             ClientAppManager cmgr = _context.clientAppManager();
@@ -719,7 +719,7 @@ class SummaryBarRenderer {
                     entries = nmgr.getEntries();
             }
             if (!entries.isEmpty()) {
-                buf.append("<ul>\n");
+                buf.append("<table>\n");
                 DateFormat fmt = DateFormat.getDateInstance(DateFormat.SHORT);
                 // the router sets the JVM time zone to UTC but saves the original here so we can get it
                 fmt.setTimeZone(SystemVersion.getSystemTimeZone(_context));
@@ -731,29 +731,30 @@ class SummaryBarRenderer {
                     if (i >= min && entry.updated > 0 &&
                         entry.updated < _context.clock().now() - 60*24*60*60*1000L)
                         break;
-                    buf.append("<li><a href=\"/?news=1&amp;consoleNonce=")
+                    buf.append("<tr><td><a href=\"/?news=1&amp;consoleNonce=")
                        .append(consoleNonce)
-                       .append("\">");
+                       .append("\"");
                     if (entry.updated > 0) {
                         Date date = new Date(entry.updated);
-                        buf.append(fmt.format(date))
-                           .append(": ");
+                        // tooltip to tag for translation post 0.9.31 release
+                        buf.append(" title=\"Published: ").append(fmt.format(date)).append("\"");
                     }
+                    buf.append(">");
                     buf.append(entry.title)
-                       .append("</a></li>\n");
+                       .append("</a></td></tr>\n");
                     if (++i >= max)
                         break;
                 }
-                buf.append("</ul>\n");
-                //buf.append("<a href=\"/news\">")
-                //   .append(_t("Show all news"))
-                //   .append("</a>\n");
+                buf.append("</table>\n");
             } else {
                 buf.append("<center><i>")
                    .append(_t("none"))
                    .append("</i></center>");
             }
             // Add post-headings stuff.
+            //buf.append("<a href=\"/news\">")
+                //.append(_t("Show all news"))
+                //.append("</a>\n");
             buf.append("</div>\n");
         }
         return buf.toString();
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 1683582c27cf5efe07ee1be494fc51a279a42fd0..3b151d57d45c2714df5a406a3e17c5c0bd654eda 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java
@@ -45,16 +45,15 @@ public class SummaryHelper extends HelperBase {
     static final String DEFAULT_FULL =
         "HelpAndFAQ" + S +
         "ShortGeneral" + S +
-        "Bandwidth" + S +
         "UpdateStatus" + S +
-        "FirewallAndReseedStatus" + S +
+        "Bandwidth" + S +
         "NetworkReachability" + S +
+        "FirewallAndReseedStatus" + S +
         "I2PServices" + S +
         "I2PInternals" + S +
         "Peers" + S +
         "Tunnels" + S +
         "TunnelStatus" + S +
-        "Congestion" + S +
         "RestartStatus" + S +
         "Destinations" + S +
         "";
@@ -62,10 +61,10 @@ public class SummaryHelper extends HelperBase {
     static final String DEFAULT_FULL_ADVANCED =
         "HelpAndFAQ" + S +
         "ShortGeneral" + S +
-        "Bandwidth" + S +
         "UpdateStatus" + S +
-        "FirewallAndReseedStatus" + S +
+        "Bandwidth" + S +
         "NetworkReachability" + S +
+        "FirewallAndReseedStatus" + S +
         "I2PServices" + S +
         "I2PInternals" + S +
         "Advanced" + S +
@@ -80,11 +79,11 @@ public class SummaryHelper extends HelperBase {
     static final String DEFAULT_MINIMAL =
         "ShortGeneral" + S +
         "Bandwidth" + S +
-        "NewsHeadings" + S +
         "UpdateStatus" + S +
+        "NewsHeadings" + S +
         "NetworkReachability" + S +
-        "RestartStatus" + S +
         "FirewallAndReseedStatus" + S +
+        "RestartStatus" + S +
         "Destinations" + S +
         "";
 
@@ -516,10 +515,11 @@ public class SummaryHelper extends HelperBase {
                     buf.append("client.png\" alt=\"Client\" title=\"").append(_t("Client")).append("\">");
                 buf.append("</td><td align=\"left\"><b><a href=\"tunnels#").append(h.toBase64().substring(0,4));
                 buf.append("\" target=\"_top\" title=\"").append(_t("Show tunnels")).append("\">");
-                if (name.length() <= 20)
+                // Increase permitted max length of tunnel name & handle overflow with css
+                if (name.length() <= 32)
                     buf.append(DataHelper.escapeHTML(name));
                 else
-                    buf.append(DataHelper.escapeHTML(name.substring(0,18))).append("&hellip;");
+                    buf.append(DataHelper.escapeHTML(name.substring(0,29))).append("&hellip;");
                 buf.append("</a></b></td>\n");
                 LeaseSet ls = _context.netDb().lookupLeaseSetLocally(h);
                 if (ls != null && _context.tunnelManager().getOutboundClientTunnelCount(h) > 0) {
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/SummaryRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/SummaryRenderer.java
index be16bf07718db72c54b076dfe37ef1b2cf8b0fa4..db9af1233739da6811f5489e60ad88c4a4a9ce72 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/SummaryRenderer.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/SummaryRenderer.java
@@ -35,9 +35,16 @@ class SummaryRenderer {
     private final Log _log;
     private final SummaryListener _listener;
     private final I2PAppContext _context;
+    private static final Color BACK_COLOR = new Color(246, 246, 255);
+    private static final Color SHADEA_COLOR = new Color(246, 246, 255);
+    private static final Color SHADEB_COLOR = new Color(246, 246, 255);
+    private static final Color GRID_COLOR = new Color(100, 100, 100, 75);
+    private static final Color MGRID_COLOR = new Color(255, 91, 91, 110);
     private static final Color AREA_COLOR = new Color(100, 160, 200, 200);
     private static final Color LINE_COLOR = new Color(0, 30, 110, 255);
     private static final Color RESTART_BAR_COLOR = new Color(223, 13, 13, 255);
+    private static final String DEFAULT_FONT_NAME = System.getProperty("os.name").toLowerCase().contains("windows") ?
+            "Lucida Console" : "Monospaced";
 
     public SummaryRenderer(I2PAppContext ctx, SummaryListener lsnr) { 
         _log = ctx.logManager().getLog(SummaryRenderer.class);
@@ -125,6 +132,19 @@ class SummaryRenderer {
         ImageOutputStream ios = null;
         try {
             RrdGraphDef def = new RrdGraphDef();
+
+            // Override defaults
+            def.setColor(RrdGraphDef.COLOR_BACK,   BACK_COLOR);
+            def.setColor(RrdGraphDef.COLOR_SHADEA, SHADEA_COLOR);
+            def.setColor(RrdGraphDef.COLOR_SHADEB, SHADEB_COLOR);
+            def.setColor(RrdGraphDef.COLOR_GRID,   GRID_COLOR);
+            def.setColor(RrdGraphDef.COLOR_MGRID,  MGRID_COLOR);
+            def.setFont(RrdGraphDef.FONTTAG_DEFAULT, new Font(DEFAULT_FONT_NAME, Font.PLAIN, 10));
+            def.setFont(RrdGraphDef.FONTTAG_TITLE,   new Font(DEFAULT_FONT_NAME, Font.PLAIN, 10));
+            def.setFont(RrdGraphDef.FONTTAG_AXIS,    new Font("Droid Sans Mono", Font.PLAIN, 10));
+            def.setFont(RrdGraphDef.FONTTAG_UNIT,    new Font(DEFAULT_FONT_NAME, Font.PLAIN, 10));
+            def.setFont(RrdGraphDef.FONTTAG_LEGEND,  new Font("Droid Sans Mono", Font.PLAIN, 10));
+
             // improve text legibility
             String lang = Messages.getLanguage(_context);
             Font small = def.getSmallFont();
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 7ed429b833db79939b817d8cbeefa3c4cfacbf5e..3d1e6db0f5a3773c409c461b3c500a29851c8423 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/SybilRenderer.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/SybilRenderer.java
@@ -233,7 +233,7 @@ class SybilRenderer {
         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);
+        //boolean debug = _context.getBooleanProperty(HelperBase.PROP_ADVANCED);
         for (Hash client : destinations) {
             boolean isLocal = _context.clientManager().isLocal(client);
             if (!isLocal)
@@ -318,7 +318,7 @@ class SybilRenderer {
             }
         }
 
-        double avg = total / (sz * sz / 2);
+        double avg = total / (sz * sz / 2d);
         buf.append("<h3 class=\"sybils\">Average Floodfill Distance is ").append(fmt.format(avg)).append("</h3>");
 
         buf.append("<h3 id=\"pairs\" class=\"sybils\">Closest Floodfill Pairs by Hash</h3>");
diff --git a/apps/routerconsole/jsp/configadvanced.jsp b/apps/routerconsole/jsp/configadvanced.jsp
index a8724d8345fc53cf47297077b886068fa8794709..b3390f8ba0ae321426f84f55555e815f4e908b87 100644
--- a/apps/routerconsole/jsp/configadvanced.jsp
+++ b/apps/routerconsole/jsp/configadvanced.jsp
@@ -30,13 +30,11 @@
  <table id="floodfillconfig" class="configtable">
   <tr><td class="infohelp">
 <%=intl._t("Floodfill participation helps the network, but may use more of your computer's resources.")%>
-  </td></tr>
-  <tr><td class="infohelp">
 <%
     if (advancedhelper.isFloodfill()) {
-%><%=intl._t("This router is currently a floodfill participant.")%><%
+%> (<%=intl._t("This router is currently a floodfill participant.")%><%
     } else {
-%><%=intl._t("This router is not currently a floodfill participant.")%><%
+%> (<%=intl._t("This router is not currently a floodfill participant.")%>)<%
     }
 %>
   </td></tr>
diff --git a/apps/routerconsole/jsp/debug.jsp b/apps/routerconsole/jsp/debug.jsp
index cb55e8f2df5e3b5f456d2277a4fe8dbb4c56682e..f420c16eaf467b1549e686d08a824198ff3708b2 100644
--- a/apps/routerconsole/jsp/debug.jsp
+++ b/apps/routerconsole/jsp/debug.jsp
@@ -15,15 +15,39 @@
 <%@include file="summary.jsi" %>
 <h1>Router Debug</h1>
 <div class="main" id="debug">
+
+<div class="confignav">
+<span class="tab"><a href="#debug_portmapper">Port Mapper</a></span>
+<span class="tab"><a href="#appmanager">App Manager</a></span>
+<span class="tab"><a href="#updatemanager">Update Manager</a></span>
+<span class="tab"><a href="#skm">Session Key Manager</a></span>
+<span class="tab"><a href="#dht">Router DHT</a></span>
+</div>
+
 <%
     /*
      *  Quick and easy place to put debugging stuff
      */
     net.i2p.router.RouterContext ctx = (net.i2p.router.RouterContext) net.i2p.I2PAppContext.getGlobalContext();
 
+    /*
+     *  Print out the status for the PortMapper
+     */
+    ctx.portMapper().renderStatusHTML(out);
+
+    /*
+     *  Print out the status for the AppManager
+     */
+
+    out.print("<div class=\"debug_section\" id=\"appmanager\">");
+    ctx.routerAppManager().renderStatusHTML(out);
+            out.print("</div>");
+
+
     /*
      *  Print out the status for the UpdateManager
      */
+    out.print("<div class=\"debug_section\" id=\"updatemanager\">");
     net.i2p.app.ClientAppManager cmgr = ctx.clientAppManager();
     if (cmgr != null) {
         net.i2p.router.update.ConsoleUpdateManager umgr =
@@ -31,37 +55,32 @@
         if (umgr != null) {
             umgr.renderStatusHTML(out);
         }
+    out.print("</div>");
     }
 
-    /*
-     *  Print out the status for the AppManager
-     */
-    ctx.routerAppManager().renderStatusHTML(out);
-
-    /*
-     *  Print out the status for the PortMapper
-     */
-    ctx.portMapper().renderStatusHTML(out);
-
     /*
      *  Print out the status for all the SessionKeyManagers
      */
-    out.print("<h2>Router SKM</h2>");
+    out.print("<div class=\"debug_section\" id=\"skm\">");
+    out.print("<h2>Router Session Key Manager</h2>");
     ctx.sessionKeyManager().renderStatusHTML(out);
     java.util.Set<net.i2p.data.Destination> clients = ctx.clientManager().listClients();
+    out.print("</div>");
     for (net.i2p.data.Destination dest : clients) {
         net.i2p.data.Hash h = dest.calculateHash();
         net.i2p.crypto.SessionKeyManager skm = ctx.clientManager().getClientSessionKeyManager(h);
         if (skm != null) {
-            out.print("<h2>" + h.toBase64().substring(0,6) + " SKM</h2>");
+            out.print("<div class=\"debug_section\">");
+            out.print("<h2>" + h.toBase64().substring(0,6) + " Session Key Manager</h2>");
             skm.renderStatusHTML(out);
+            out.print("</div>");
         }
     }
 
     /*
      *  Print out the status for the NetDB
      */
-    out.print("<h2>Router DHT</h2>");
+    out.print("<h2 id=\"dht\">Router DHT</h2>");
     ctx.netDb().renderStatusHTML(out);
 
 %>
diff --git a/apps/routerconsole/jsp/graph.jsp b/apps/routerconsole/jsp/graph.jsp
index ec42f78d50f3b2b03613f58d5923fc0bebe71538..de9cf9f3aa46ae62f039bf84c89c349253a7a346 100644
--- a/apps/routerconsole/jsp/graph.jsp
+++ b/apps/routerconsole/jsp/graph.jsp
@@ -28,8 +28,6 @@
     }
 %>
 <h1><%=intl._t("I2P Performance Graphs")%></h1>
-<div class="main" id="main">
- <div class="graphspanel">
- <div class="widepanel">
+<div class="main" id="graph_single">
  <jsp:getProperty name="graphHelper" property="singleStat" />
-</div></div></div></body></html>
+</div></body></html>
diff --git a/apps/routerconsole/jsp/help_ar.jsp b/apps/routerconsole/jsp/help_ar.jsp
index a3455aa751ea30bdffb9c233042482475f0f4e79..0c33d9ddd1b3d39985b3fe98b15e3499701f589e 100644
--- a/apps/routerconsole/jsp/help_ar.jsp
+++ b/apps/routerconsole/jsp/help_ar.jsp
@@ -32,7 +32,7 @@
 <p>اذا رغبت في المساعدة أو ترجمة الوثائق، أو المساعدة في أشياء أخرى، انظر اسفله <a href="http://i2p-projekt.i2p/ar/get-involved">تطوع</a></p>
 <p>المزيد من المساعدة هنا:</p>
 <ul class="links">
-<li class="tidylist"><a href="http://i2p-projekt.i2p/ar/faq">ابئلة شائعة i2p-projekt.i2p</a></li>
+<li><a href="http://i2p-projekt.i2p/ar/faq">ابئلة شائعة i2p-projekt.i2p</a></li>
 <li>او بالدردشة على IRC.</li></ul>
 </div>
 
diff --git a/apps/routerconsole/jsp/js/resetScroll.js b/apps/routerconsole/jsp/js/resetScroll.js
new file mode 100644
index 0000000000000000000000000000000000000000..0c7a578d6bae066184d70f2e5f697132c6651aac
--- /dev/null
+++ b/apps/routerconsole/jsp/js/resetScroll.js
@@ -0,0 +1,15 @@
+// resets scroll position of element
+// use with onblur to clear scroll position when element loses focus
+
+
+// reset scroll to left position
+
+function resetScrollLeft(element) {
+    element.scrollLeft = 0;
+}
+
+// reset scroll to top position
+
+function resetScrollTop(element) {
+    element.scrollTop = 0;
+}
\ No newline at end of file
diff --git a/apps/routerconsole/locale-news/messages_fr.po b/apps/routerconsole/locale-news/messages_fr.po
index db0a1a8086853fc758c113bf49a66e7db03d20a4..bfcfac1e4f2740b630f4f7243cbcf3c18077052d 100644
--- a/apps/routerconsole/locale-news/messages_fr.po
+++ b/apps/routerconsole/locale-news/messages_fr.po
@@ -16,8 +16,8 @@ msgstr ""
 "Project-Id-Version: I2P\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2013-07-13 21:46+0000\n"
-"PO-Revision-Date: 2017-07-08 14:39+0000\n"
-"Last-Translator: zzzi2p\n"
+"PO-Revision-Date: 2017-07-18 14:51+0000\n"
+"Last-Translator: French language coordinator <french.coordinator@rbox.me>\n"
 "Language-Team: French (http://www.transifex.com/otf/I2P/language/fr/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
diff --git a/apps/routerconsole/locale/messages_fr.po b/apps/routerconsole/locale/messages_fr.po
index 74850e2bf94718cfdacbbc8591bf957f71f2984a..7f25795cbe97d92f73f7b60e928b015f07797a26 100644
--- a/apps/routerconsole/locale/messages_fr.po
+++ b/apps/routerconsole/locale/messages_fr.po
@@ -28,8 +28,8 @@ msgstr ""
 "Project-Id-Version: I2P\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-06-05 23:01+0000\n"
-"PO-Revision-Date: 2017-07-08 14:56+0000\n"
-"Last-Translator: zzzi2p\n"
+"PO-Revision-Date: 2017-07-26 12:33+0000\n"
+"Last-Translator: French language coordinator <french.coordinator@rbox.me>\n"
 "Language-Team: French (http://www.transifex.com/otf/I2P/language/fr/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -6391,7 +6391,7 @@ msgstr "Utiliser le mandataire eep pour récupérer les nouvelles ?"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:547
 msgid "Update through the eepProxy?"
-msgstr "Utiliser le mandataire eep pour mettre à jour ?"
+msgstr "Utiliser le mandataire eep pour la mise à jour ?"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:553
 msgid "eepProxy host"
@@ -6411,7 +6411,7 @@ msgstr "Clés de confiance"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:573
 msgid "Update with signed development builds?"
-msgstr "Mettre à jour avec des versions de développement signées ?"
+msgstr "Mise à jour avec des versions de développement signées ?"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:577
 msgid "Signed Build URL"
@@ -6419,7 +6419,7 @@ msgstr "URL de versions signées"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:581
 msgid "Update with unsigned development builds?"
-msgstr "Mettre à jour avec des versions de développement non signées ?"
+msgstr "Mise à jour avec des versions de développement non signées ?"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:585
 msgid "Unsigned Build URL"
diff --git a/apps/routerconsole/locale/messages_it.po b/apps/routerconsole/locale/messages_it.po
index 27d4420f8d966eda3c80bbb8ce0396973b2e12b8..aff2f60ead998dd844e91f3fdb41972c99a56549 100644
--- a/apps/routerconsole/locale/messages_it.po
+++ b/apps/routerconsole/locale/messages_it.po
@@ -28,8 +28,8 @@ msgstr ""
 "Project-Id-Version: I2P\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-06-05 23:01+0000\n"
-"PO-Revision-Date: 2017-06-30 21:42+0000\n"
-"Last-Translator: zzzi2p\n"
+"PO-Revision-Date: 2017-07-30 07:04+0000\n"
+"Last-Translator: Sebastiano Pistore <SebastianoPistore.info@protonmail.ch>\n"
 "Language-Team: Italian (http://www.transifex.com/otf/I2P/language/it/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -127,11 +127,11 @@ msgstr[1] "{0,number,###} μs"
 #: ../../../router/java/src/net/i2p/router/Blocklist.java:221
 #, java-format
 msgid "Banned by router hash: {0}"
-msgstr "Bannato dall'' hash del router: {0}"
+msgstr "Bannato dall''hash del router: {0}"
 
 #: ../../../router/java/src/net/i2p/router/Blocklist.java:223
 msgid "Banned by router hash"
-msgstr "Bannato dall'' hash del router"
+msgstr "Bannato dall'hash del router"
 
 #. Temporary reason, until the job finishes
 #: ../../../router/java/src/net/i2p/router/Blocklist.java:896
@@ -146,11 +146,11 @@ msgstr "IP bannati fino al riavvio"
 
 #: ../../../router/java/src/net/i2p/router/Blocklist.java:1026
 msgid "IPv4 Addresses"
-msgstr ""
+msgstr "Indirizzi IPv4"
 
 #: ../../../router/java/src/net/i2p/router/Blocklist.java:1050
 msgid "IPv6 Addresses"
-msgstr ""
+msgstr "Indirizzi IPv6"
 
 #: ../../../router/java/src/net/i2p/router/Blocklist.java:1068
 msgid "IPs Permanently Banned"
@@ -603,12 +603,12 @@ msgstr "Una nuova versione del plugin {0} è disponibile"
 #: ../java/src/net/i2p/router/update/ConsoleUpdateManager.java:978
 #, java-format
 msgid "Update check failed for plugin {0}"
-msgstr "Controllo aggiornamenti per il plugin {0} fallito"
+msgstr "Controllo aggiornamenti fallito per il plugin {0}"
 
 #: ../java/src/net/i2p/router/update/ConsoleUpdateManager.java:982
 #, java-format
 msgid "No new version is available for plugin {0}"
-msgstr "Nessuna nuova versione del plugin {0} disponibile"
+msgstr "Non è disponibile nessuna nuova versione del plugin {0}"
 
 #: ../java/src/net/i2p/router/update/ConsoleUpdateManager.java:1006
 #, java-format
@@ -861,7 +861,7 @@ msgstr "Il plugin è solo per aggiornamenti, ma il plugin non è installato"
 #: ../java/src/net/i2p/router/update/PluginUpdateRunner.java:521
 #, java-format
 msgid "Failed to install plugin in {0}"
-msgstr "Installazione del plugin in {0} non riuscita"
+msgstr "Non è riuscita l''installazione del plugin in {0}"
 
 #: ../java/src/net/i2p/router/update/PluginUpdateRunner.java:528
 #: ../java/src/net/i2p/router/update/PluginUpdateRunner.java:556
@@ -887,7 +887,7 @@ msgstr "Il plugin {0} è stato installato ma il suo avvio non è riuscito"
 #: ../java/src/net/i2p/router/update/PluginUpdateRunner.java:564
 #, java-format
 msgid "Failed to download plugin from {0}"
-msgstr "Scaricamento del plugin da {0} non riuscito"
+msgstr "Non è riuscito il download del plugin da {0}"
 
 #: ../java/src/net/i2p/router/update/UpdateRunner.java:202
 #, java-format
@@ -1043,7 +1043,7 @@ msgstr ""
 #: ../java/src/net/i2p/router/web/CertHelper.java:62
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:214
 msgid "Family"
-msgstr ""
+msgstr "Famiglia"
 
 #: ../java/src/net/i2p/router/web/ConfigAdvancedHandler.java:62
 msgid "Error updating the configuration - please see the error logs"
@@ -1203,7 +1203,7 @@ msgstr "Nessun URL del plugin specificato."
 #: ../java/src/net/i2p/router/web/ConfigFamilyHandler.java:47
 #: ../java/src/net/i2p/router/web/ConfigReseedHandler.java:79
 msgid "You must enter a file"
-msgstr ""
+msgstr "È necessario inserire un file"
 
 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:460
 msgid "Install from file failed"
@@ -2616,7 +2616,7 @@ msgstr "Nessun evento trovato"
 #: ../java/src/net/i2p/router/web/EventLogHelper.java:171
 #, java-format
 msgid "No events found in previous {0}"
-msgstr ""
+msgstr "Nessun evento rilevato negli scorsi {0}"
 
 #: ../java/src/net/i2p/router/web/EventLogHelper.java:174
 #, java-format
@@ -2728,7 +2728,7 @@ msgstr "disegna gli eventi come grafico"
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:325
 msgid "All times are UTC."
-msgstr "Tutte le ore sono UTC"
+msgstr "Tutte le ore sono UTC."
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:357
 msgid "Configure Graph Display"
@@ -2752,19 +2752,19 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:363
 msgid "Averages"
-msgstr ""
+msgstr "Medie"
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:364
 msgid "Events"
-msgstr ""
+msgstr "Eventi"
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:365
 msgid "Graph size"
-msgstr ""
+msgstr "Dimensione grafico"
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:366
 msgid "pixels wide"
-msgstr ""
+msgstr "larghezza pixel"
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:367
 msgid ""
@@ -2773,7 +2773,7 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:367
 msgid "pixels high"
-msgstr ""
+msgstr "altezza pixel"
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:368
 msgid "Refresh delay"
@@ -2785,7 +2785,7 @@ msgstr "Persistenza"
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:387
 msgid "Store graph data on disk"
-msgstr ""
+msgstr "Salvare i dati del grafico su disco"
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:388
 msgid "Save settings and redraw graphs"
@@ -2816,7 +2816,7 @@ msgstr "Configurazione Larghezza di Banda I2P"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:32
 msgid "Configure UI"
-msgstr ""
+msgstr "Configurare l'interfaccia utente"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:32
 msgid "Select console theme & language & set optional console password"
@@ -2857,7 +2857,7 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:36
 msgid "Manage Plugins"
-msgstr ""
+msgstr "Gestione dei plugin"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:37
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:231
@@ -2882,7 +2882,7 @@ msgstr ""
 #: ../java/src/net/i2p/router/web/HomeHelper.java:179
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:166
 msgid "Web Server"
-msgstr ""
+msgstr "Server web"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:44
 msgid "The Anoncoin project"
@@ -2894,7 +2894,7 @@ msgstr "Tracker dei bug"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:45
 msgid "I2P Bug Reports"
-msgstr ""
+msgstr "Rapporto bug di I2P"
 
 #. "colombo-bt.i2p" + S + _x("The Italian Bittorrent Resource") + S + "http
 #. ://colombo-bt.i2p/" + S + I + "colomboicon.png" + S +
@@ -2921,7 +2921,7 @@ msgstr "Applicazioni I2P"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:50
 msgid "Anonymous cryptocurrency exchange"
-msgstr ""
+msgstr "Scambio anonimo di criptovalute"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:51
 msgid "Frequently Asked Questions"
@@ -2929,7 +2929,7 @@ msgstr "Domande Poste Frequentemente"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:51
 msgid "I2P FAQ"
-msgstr ""
+msgstr "FAQ DI I2P"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:52
 msgid "Community forum"
@@ -2937,7 +2937,7 @@ msgstr "Forum della comunità"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:52
 msgid "I2P Forum"
-msgstr ""
+msgstr "Forum di I2P"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:53
 msgid ""
@@ -2971,7 +2971,7 @@ msgstr "Hosting libero di siti eep con PHP e MySQL"
 #. "http://killyourtv.i2p/" + S + I + "television_delete.png" + S +
 #: ../java/src/net/i2p/router/web/HomeHelper.java:61
 msgid "Open4You"
-msgstr ""
+msgstr "Open4You"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:62
 msgid "Encrypted I2P Pastebin"
@@ -2995,7 +2995,7 @@ msgstr "Elenco add-on"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:64
 msgid "I2P Plugins"
-msgstr ""
+msgstr "Plugin di I2P"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:65
 msgid "Postman's Tracker"
@@ -3027,7 +3027,7 @@ msgstr "Documentazione tecnica"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:71
 msgid "Privacy guides and tutorials"
-msgstr ""
+msgstr "Guide e tutorial sulla privacy"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:71
 msgid "The Tin Hat"
@@ -3226,7 +3226,7 @@ msgstr "Destinazione"
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:338
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:353
 msgid "Add to addressbook"
-msgstr ""
+msgstr "Aggiungi alla rubrica"
 
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:340
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:355
@@ -3345,7 +3345,7 @@ msgstr "Chiave per firma"
 
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:629
 msgid "Address(es)"
-msgstr "Indirizzo/i"
+msgstr "Indirizzo(i)"
 
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:643
 msgid "cost"
@@ -3406,7 +3406,7 @@ msgstr "IPv6 solo NTCP, SSU, presentatori"
 #: ../java/src/net/i2p/router/web/NewsFeedHelper.java:92
 #, java-format
 msgid "{0}"
-msgstr ""
+msgstr "{0}"
 
 #: ../java/src/net/i2p/router/web/NewsHelper.java:293
 #, java-format
@@ -3780,7 +3780,7 @@ msgstr[1] "Nascondendo {0} profili standard."
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:91
 msgid "Groups"
-msgstr ""
+msgstr "Gruppi"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:92
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:206
@@ -3919,7 +3919,7 @@ msgstr "peer ad alta capacità"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:277
 msgid " well integrated peers"
-msgstr "peer ben integrati"
+msgstr " peer ben integrati"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:282
 msgid "as determined by the profile organizer"
@@ -3990,7 +3990,7 @@ msgstr "velocità"
 msgid ""
 "peak throughput (bytes per second) over a 1 minute period that the peer has "
 "sustained in a single tunnel"
-msgstr "picco di throughput (byte al secondo) che il peer ha sostenuto in un singolo tunnel nell'intervallo di 1 minuto "
+msgstr "picco di throughput (byte al secondo) che il peer ha sostenuto in un singolo tunnel nell'intervallo di 1 minuto"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:324
 msgid "capacity"
@@ -5185,7 +5185,7 @@ msgstr "configura larghezza di banda"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:493
 msgid "Bandwidth Limiter"
-msgstr ""
+msgstr "Limitatore di banda"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:495
 msgid "Advanced Network Configuration"
@@ -5491,7 +5491,7 @@ msgstr "Molti client non supportano SSL o l'autorizzazione."
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configi2cp_jsp.java:547
 msgid "External I2CP (I2P Client Protocol) Interface Configuration"
-msgstr "Configurazione dell'Interfaccia I2CP esterna (Protocollo client I2P)."
+msgstr "Configurazione dell'Interfaccia I2CP esterna (Protocollo client I2P)"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configi2cp_jsp.java:553
 msgid "Enabled without SSL"
@@ -5580,7 +5580,7 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:497
 msgid "View Logs"
-msgstr ""
+msgstr "Visualizza log"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:499
 msgid "Log file"
@@ -5761,7 +5761,7 @@ msgstr "Usa solo IPv6 (disabilita IPv4)"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:626
 msgid "UDP Configuration"
-msgstr ""
+msgstr "Configurazione UDP"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:628
 msgid ""
@@ -5892,7 +5892,7 @@ msgstr "Controlla i plugin disponibili su {0}."
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configplugins_jsp.java:561
 msgid "Installation from URL"
-msgstr ""
+msgstr "Installazione da URL"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configplugins_jsp.java:565
 msgid "To install a plugin, enter the download URL:"
@@ -5900,7 +5900,7 @@ msgstr "Per installare un plugin, inserire l'URL da dove scaricarlo:"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configplugins_jsp.java:573
 msgid "Installation from File"
-msgstr ""
+msgstr "Installazione da file"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configplugins_jsp.java:577
 msgid "Select xpi2p or su3 file"
@@ -5941,7 +5941,7 @@ msgstr "le FAQ"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:537
 msgid "Manual Reseed"
-msgstr ""
+msgstr "Reseed manuale"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:539
 msgid ""
@@ -6135,7 +6135,7 @@ msgstr "Puoi controllare se I2P viene fatto partire all'avvio o meno selezionand
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:582
 msgid "If you prefer the command line, you can also run the "
-msgstr "Se preferisci la riga di comando, puoi anche avviare la"
+msgstr "Se preferisci la riga di comando, puoi anche avviare la "
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:584
 msgid "or"
@@ -6363,11 +6363,11 @@ msgstr "Notizie &amp; aggiornamenti I2P"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:505
 msgid "Check for news updates"
-msgstr "Controlla per news sugli aggiornamenti "
+msgstr "Cerca aggiornamenti delle notizie"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:507
 msgid "News Updates"
-msgstr "News aggiornamenti "
+msgstr "Aggiornamenti delle notizie"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:515
 msgid "Update In Progress"
@@ -6803,7 +6803,7 @@ msgstr "Se c'è un errore, anche i <a href=\"logs.jsp\">registri</a> potrebbero
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005fru_jsp.java:453
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_jsp.java:465
 msgid "Your UDP port does not appear to be firewalled."
-msgstr "La tua porta UDP non sembra essere dietro ad un firewall"
+msgstr "La tua porta UDP non sembra essere dietro ad un firewall."
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005far_jsp.java:458
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005ffr_jsp.java:457
@@ -6811,7 +6811,7 @@ msgstr "La tua porta UDP non sembra essere dietro ad un firewall"
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005fru_jsp.java:457
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_jsp.java:469
 msgid "Your UDP port appears to be firewalled."
-msgstr "La tua porta UDP sembra essere dietro ad un firewall"
+msgstr "La tua porta UDP sembra essere dietro ad un firewall."
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005far_jsp.java:460
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005ffr_jsp.java:459
@@ -7070,7 +7070,7 @@ msgstr "ERR - Indirizzo TCP Privato"
 msgid ""
 "You must never advertise an unroutable IP address such as 127.0.0.1 or "
 "192.168.1.1 as your external address."
-msgstr "Non devi mai mostrare un indirizzo IP non rintracciabile come 127.0.0.1 o 192.168.1.1 come tuo indirizzo esterno"
+msgstr "Non devi mai mostrare un indirizzo IP non rintracciabile come 127.0.0.1 o 192.168.1.1 come tuo indirizzo esterno."
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005far_jsp.java:517
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005ffr_jsp.java:516
@@ -7163,7 +7163,7 @@ msgstr "Tuttavia un riavvio è sempre richiesto dopo questo errore."
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005fru_jsp.java:533
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_jsp.java:545
 msgid "ERR - UDP Disabled and Inbound TCP host/port not set"
-msgstr "ERR - UDP Disabilitato e host/porta TCP in Ingresso non impostata."
+msgstr "ERR - UDP Disabilitato e host/porta TCP in Ingresso non impostata"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005far_jsp.java:536
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005ffr_jsp.java:535
@@ -7285,7 +7285,7 @@ msgstr "Log (Wrapper) dei servizi"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/netdb_jsp.java:216
 msgid "network database"
-msgstr "Database della rete"
+msgstr "database della rete"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/netdb_jsp.java:380
 msgid "I2P Network Database"
@@ -7351,7 +7351,7 @@ msgstr "torrent"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/torrents_jsp.java:396
 msgid "I2P Torrent Manager"
-msgstr ""
+msgstr "I2P Torrent Manager"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/tunnels_jsp.java:216
 msgid "tunnel summary"
diff --git a/apps/routerconsole/locale/messages_nb.po b/apps/routerconsole/locale/messages_nb.po
index 3f56d4f436f05b0d28dea4aab0f96c341fd95f9c..71b2a3142359d970b9af73a08b26a2d6b06d4967 100644
--- a/apps/routerconsole/locale/messages_nb.po
+++ b/apps/routerconsole/locale/messages_nb.po
@@ -5,7 +5,7 @@
 # 
 # Translators:
 # Allan Nordhøy <epost@anotheragency.no>, 2014
-# Allan Nordhøy <epost@anotheragency.no>, 2014-2016
+# Allan Nordhøy <epost@anotheragency.no>, 2014-2017
 # Mikal <mikalv@mikalv.net>, 2013
 # Shpetim <shpetim@privacysolutions.no>, 2014
 # Shpetim <shpetim@privacysolutions.no>, 2014
@@ -15,8 +15,8 @@ msgstr ""
 "Project-Id-Version: I2P\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-06-05 23:01+0000\n"
-"PO-Revision-Date: 2017-06-30 21:42+0000\n"
-"Last-Translator: zzzi2p\n"
+"PO-Revision-Date: 2017-07-27 01:48+0000\n"
+"Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n"
 "Language-Team: Norwegian Bokmål (http://www.transifex.com/otf/I2P/language/nb/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -133,11 +133,11 @@ msgstr "IP-er bannlyst til neste omstart"
 
 #: ../../../router/java/src/net/i2p/router/Blocklist.java:1026
 msgid "IPv4 Addresses"
-msgstr ""
+msgstr "IPv4-adresser"
 
 #: ../../../router/java/src/net/i2p/router/Blocklist.java:1050
 msgid "IPv6 Addresses"
-msgstr ""
+msgstr "IPv6-adresser"
 
 #: ../../../router/java/src/net/i2p/router/Blocklist.java:1068
 msgid "IPs Permanently Banned"
@@ -271,7 +271,7 @@ msgstr "Avviser tunneler: Grensen nådd"
 
 #: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:238
 msgid "Rejecting most tunnels: High number of requests"
-msgstr "Avviser de fleste tunneler: Høyt nummer av forespørsler"
+msgstr "Avviser de fleste tunneler: Høyt antall forespørsler"
 
 #. hard to do {0} from here
 #. setTunnelStatus("Accepting " + (100-(int)(100.0*probReject)) + "% of
@@ -381,11 +381,11 @@ msgstr "Kjente raske likemenn"
 
 #: ../../../router/java/src/net/i2p/router/tasks/CoalesceStatsEvent.java:41
 msgid "Known integrated (floodfill) peers"
-msgstr ""
+msgstr "Kjente integrerte (flodfyll-) likemenn"
 
 #: ../../../router/java/src/net/i2p/router/tasks/CoalesceStatsEvent.java:42
 msgid "Size of tunnel acceptor backlog"
-msgstr ""
+msgstr "Størrelse på tunnelgodkjenners arbeidskø"
 
 #: ../../../router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java:529
 msgid "NetDb entry"
@@ -399,7 +399,7 @@ msgstr "Ingen transport (gjemt eller starter opp?)"
 
 #: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:665
 msgid "Unsupported signature type"
-msgstr ""
+msgstr "Ustøttet signaturtype"
 
 #: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:682
 msgid "No support for our signature type"
@@ -443,16 +443,16 @@ msgstr "Type"
 #: ../../../router/java/src/net/i2p/router/transport/UPnP.java:584
 #: ../../../router/java/src/net/i2p/router/transport/UPnP.java:604
 msgid "Upstream"
-msgstr ""
+msgstr "Oppstrøm"
 
 #: ../../../router/java/src/net/i2p/router/transport/UPnP.java:586
 #: ../../../router/java/src/net/i2p/router/transport/UPnP.java:606
 msgid "Downstream"
-msgstr ""
+msgstr "Nedstrøm"
 
 #: ../../../router/java/src/net/i2p/router/transport/UPnP.java:590
 msgid "WAN PPP Connection"
-msgstr ""
+msgstr "WAN PPP-tilkobling"
 
 #: ../../../router/java/src/net/i2p/router/transport/UPnP.java:598
 #: ../../../router/java/src/net/i2p/router/transport/UPnP.java:625
@@ -468,19 +468,19 @@ msgstr "Ekstern IP"
 
 #: ../../../router/java/src/net/i2p/router/transport/UPnP.java:612
 msgid "Layer 3 Forwarding"
-msgstr ""
+msgstr "Lag-3-videresending"
 
 #: ../../../router/java/src/net/i2p/router/transport/UPnP.java:613
 msgid "Default Connection Service"
-msgstr ""
+msgstr "Forvalgt tilkoblingstjeneste"
 
 #: ../../../router/java/src/net/i2p/router/transport/UPnP.java:617
 msgid "WAN IP Connection"
-msgstr ""
+msgstr "WAN IP-tilkobling"
 
 #: ../../../router/java/src/net/i2p/router/transport/UPnP.java:635
 msgid "WAN Ethernet Link Configuration"
-msgstr ""
+msgstr "Wan Ethernett Lenke-oppsett"
 
 #: ../../../router/java/src/net/i2p/router/transport/UPnP.java:656
 msgid "Found Device"
@@ -488,7 +488,7 @@ msgstr "Fant enhet"
 
 #: ../../../router/java/src/net/i2p/router/transport/UPnP.java:658
 msgid "Subdevice"
-msgstr ""
+msgstr "Underenhet"
 
 #: ../../../router/java/src/net/i2p/router/transport/UPnP.java:679
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:546
@@ -503,7 +503,7 @@ msgstr "Deaktiverte UPnP-enheter"
 msgid ""
 "UPnP has been disabled; Do you have more than one UPnP Internet Gateway "
 "Device on your LAN ?"
-msgstr ""
+msgstr "UPnP har blitt skrudd av. Har du mer enn én UPnP-internettportnerenhet på ditt LAN?"
 
 #: ../../../router/java/src/net/i2p/router/transport/UPnP.java:702
 msgid "UPnP has not found any UPnP-aware, compatible device on your LAN."
@@ -512,21 +512,21 @@ msgstr ""
 #: ../../../router/java/src/net/i2p/router/transport/UPnP.java:710
 #, java-format
 msgid "The current external IP address reported by UPnP is {0}"
-msgstr ""
+msgstr "Gjeldende eksterne IP-adresse rapportert av UPnP er {0}"
 
 #: ../../../router/java/src/net/i2p/router/transport/UPnP.java:712
 msgid "The current external IP address is not available."
-msgstr ""
+msgstr "Gjeldende ekstern IP-adresse ikke tilgjengelig."
 
 #: ../../../router/java/src/net/i2p/router/transport/UPnP.java:716
 #, java-format
 msgid "UPnP reports the maximum downstream bit rate is {0}bits/sec"
-msgstr ""
+msgstr "UPnP rapporterer at maksimal nedstrøms-bitrate er {0}bit/s"
 
 #: ../../../router/java/src/net/i2p/router/transport/UPnP.java:718
 #, java-format
 msgid "UPnP reports the maximum upstream bit rate is {0}bits/sec"
-msgstr ""
+msgstr "UPnP rapporterer at maksimal oppstrøms-bitrate er {0}bit/s"
 
 #. {0} is TCP or UDP
 #. {1,number,#####} prevents 12345 from being output as 12,345 in the English
@@ -550,7 +550,7 @@ msgstr "Overdreven klokkeforskyvning: {0}"
 
 #: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:255
 msgid "Dropping tunnel requests: Too slow"
-msgstr "Dropper tunnel forespørsler: For treig"
+msgstr "Dropper tunnelforespørsler: For treg"
 
 #: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:265
 msgid "Dropping tunnel requests: High job lag"
@@ -559,11 +559,11 @@ msgstr ""
 #. don't even bother, since we are so overloaded locally
 #: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:460
 msgid "Dropping tunnel requests: Overloaded"
-msgstr "Dropper tunnel forespørsler: Overlastet"
+msgstr "Dropper tunnelforespørsler: Overbelastet"
 
 #: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:732
 msgid "Rejecting tunnels: Hidden mode"
-msgstr ""
+msgstr "Avviser tunneler: Skjult modus"
 
 #: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:760
 msgid "Rejecting tunnels: Request overload"
@@ -576,26 +576,26 @@ msgstr "Avviser tunneler: tilkobling grensen er nådd"
 #: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:1009
 #: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:1042
 msgid "Dropping tunnel requests: High load"
-msgstr "Dropper tunnel forespørsler: Høy last"
+msgstr "Dropper tunnelforespørsler: Høy last"
 
 #: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:1125
 msgid "Dropping tunnel requests: Queue time"
-msgstr "Dropper tunneler forespørsler: Kø tid"
+msgstr "Dropper tunneler forespørsler: Køtid"
 
 #: ../java/src/net/i2p/router/update/ConsoleUpdateManager.java:898
 #, java-format
 msgid "New plugin version {0} is available"
-msgstr ""
+msgstr "Ny versjon {0} av programtillegg tilgjengelig"
 
 #: ../java/src/net/i2p/router/update/ConsoleUpdateManager.java:978
 #, java-format
 msgid "Update check failed for plugin {0}"
-msgstr ""
+msgstr "Oppdateringssjekk mislyktes for programtillegg {0}"
 
 #: ../java/src/net/i2p/router/update/ConsoleUpdateManager.java:982
 #, java-format
 msgid "No new version is available for plugin {0}"
-msgstr ""
+msgstr "Ingen ny versjon tilgjengelig for programtillegg {0}"
 
 #: ../java/src/net/i2p/router/update/ConsoleUpdateManager.java:1006
 #, java-format
@@ -605,7 +605,7 @@ msgstr "{0}B overført"
 #: ../java/src/net/i2p/router/update/ConsoleUpdateManager.java:1065
 #, java-format
 msgid "Install failed from {0}"
-msgstr ""
+msgstr "Installasjon mislyktes fra {0}"
 
 #: ../java/src/net/i2p/router/update/ConsoleUpdateManager.java:1067
 #: ../java/src/net/i2p/router/update/UpdateRunner.java:298
@@ -657,7 +657,7 @@ msgstr "Klarte ikke å kopiere til {0}"
 #: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:177
 #: ../java/src/net/i2p/router/web/PluginStarter.java:174
 msgid "HTTP client proxy tunnel must be running"
-msgstr ""
+msgstr "HTTP-klientmellomtjenertunnel må kjøre"
 
 #: ../java/src/net/i2p/router/update/DevSU3UpdateChecker.java:83
 #: ../java/src/net/i2p/router/update/NewsFetcher.java:269
@@ -677,29 +677,29 @@ msgstr "Oppdaterer"
 
 #: ../java/src/net/i2p/router/update/NewsFetcher.java:233
 msgid "In-network updates disabled. Check package manager."
-msgstr ""
+msgstr "I-nettverk -oppdateringer avskrudd. Sjekk pakkebehandler."
 
 #: ../java/src/net/i2p/router/update/NewsFetcher.java:239
 msgid "No write permission for I2P install directory."
-msgstr ""
+msgstr "Ingen skriverettigheter for I2P-installasjonsmappe."
 
 #: ../java/src/net/i2p/router/update/NewsFetcher.java:245
 msgid "No Pack200 support in Java runtime."
-msgstr ""
+msgstr "Ingen støtte for Pack200 i kjørbart Java-bibliotek."
 
 #: ../java/src/net/i2p/router/update/NewsFetcher.java:251
 msgid "No update certificates installed."
-msgstr ""
+msgstr "Inget oppdateringssertifikat installert."
 
 #: ../java/src/net/i2p/router/update/NewsFetcher.java:259
 #, java-format
 msgid "You must first update to version {0}"
-msgstr ""
+msgstr "Oppdater til versjon {0} først"
 
 #: ../java/src/net/i2p/router/update/PluginUpdateChecker.java:62
 #, java-format
 msgid "Checking for update of plugin {0}"
-msgstr ""
+msgstr "Letter etter oppdatering for programtillegg {0}"
 
 #: ../java/src/net/i2p/router/update/PluginUpdateRunner.java:90
 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:515
@@ -707,17 +707,17 @@ msgstr ""
 #: ../java/src/net/i2p/router/web/ConfigReseedHandler.java:72
 #, java-format
 msgid "Bad URL {0}"
-msgstr ""
+msgstr "DÃ¥rlig nettadresse {0}"
 
 #: ../java/src/net/i2p/router/update/PluginUpdateRunner.java:95
 #, java-format
 msgid "Attempting to install from file {0}"
-msgstr ""
+msgstr "Prøver å installere fra fil {0}"
 
 #: ../java/src/net/i2p/router/update/PluginUpdateRunner.java:98
 #, java-format
 msgid "Failed to install from file {0}, copy failed."
-msgstr ""
+msgstr "Det gikk ikke å instalere fra fil {0}, kopiering mislyktes."
 
 #: ../java/src/net/i2p/router/update/PluginUpdateRunner.java:118
 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:526
@@ -750,12 +750,12 @@ msgstr "Programtillegg fra {0} inneholder en ugyldig nøkkel"
 #: ../java/src/net/i2p/router/update/PluginUpdateRunner.java:329
 #, java-format
 msgid "Plugin signature verification of {0} failed"
-msgstr ""
+msgstr "Programtilleggssignaturverifisering av {0} mislyktes"
 
 #. don't display signer, we're really checking the key not the signer name
 #: ../java/src/net/i2p/router/update/PluginUpdateRunner.java:280
 msgid "Plugin not installed - signer is untrusted"
-msgstr ""
+msgstr "Programtillegg ikke installert - undertegner ikke tiltrodd"
 
 #: ../java/src/net/i2p/router/update/PluginUpdateRunner.java:345
 #, java-format
@@ -770,12 +770,12 @@ msgstr "Programtillegg fra {0} inneholder ikke den påkrevde konfigurasjonsfile
 #: ../java/src/net/i2p/router/update/PluginUpdateRunner.java:377
 #, java-format
 msgid "Plugin from {0} has invalid name or version"
-msgstr ""
+msgstr "Programtillegg fra {0} har ugylig navn eller versjon"
 
 #: ../java/src/net/i2p/router/update/PluginUpdateRunner.java:382
 #, java-format
 msgid "Plugin {0} has mismatched versions"
-msgstr ""
+msgstr "Programtillegg {0} har versjoner som ikke samsvarer"
 
 #: ../java/src/net/i2p/router/update/PluginUpdateRunner.java:393
 #: ../java/src/net/i2p/router/web/PluginStarter.java:325
@@ -811,18 +811,18 @@ msgstr "Nedlastet programtillegg versjon {0} er ikke nyere enn installert versjo
 #: ../java/src/net/i2p/router/update/PluginUpdateRunner.java:442
 #, java-format
 msgid "Plugin update requires installed plugin version {0} or higher"
-msgstr ""
+msgstr "Programtilleggsoppdatering krever installert programtilleggsversjon {0} eller høyere"
 
 #: ../java/src/net/i2p/router/update/PluginUpdateRunner.java:449
 #, java-format
 msgid "Plugin update requires installed plugin version {0} or lower"
-msgstr ""
+msgstr "Programtillegg krever installert programtillegg versjon {0} eller lavere"
 
 #: ../java/src/net/i2p/router/update/PluginUpdateRunner.java:457
 #: ../java/src/net/i2p/router/web/PluginStarter.java:346
 #, java-format
 msgid "Plugin requires Jetty version {0} or higher"
-msgstr ""
+msgstr "Programmtillegg krever Jetty versjon {0} eller høyere"
 
 #: ../java/src/net/i2p/router/update/PluginUpdateRunner.java:464
 #: ../java/src/net/i2p/router/update/PluginUpdateRunner.java:471
@@ -830,25 +830,25 @@ msgstr ""
 #: ../java/src/net/i2p/router/web/PluginStarter.java:367
 #, java-format
 msgid "Plugin requires Jetty version {0} or lower"
-msgstr ""
+msgstr "Programtillegg krever Jetty versjon {0} eller lavere"
 
 #: ../java/src/net/i2p/router/update/PluginUpdateRunner.java:480
 #, java-format
 msgid "Cannot copy plugin to directory {0}"
-msgstr ""
+msgstr "Kan ikke kopiere programtillegg til mappe {0}"
 
 #: ../java/src/net/i2p/router/update/PluginUpdateRunner.java:490
 msgid "Plugin will be installed on next restart."
-msgstr ""
+msgstr "Programtillegg vil installeres ved neste omstart."
 
 #: ../java/src/net/i2p/router/update/PluginUpdateRunner.java:508
 msgid "Plugin is for upgrades only, but the plugin is not installed"
-msgstr ""
+msgstr "Programtillegg er kun for oppgraderinger, men programtillegget er ikke installert"
 
 #: ../java/src/net/i2p/router/update/PluginUpdateRunner.java:521
 #, java-format
 msgid "Failed to install plugin in {0}"
-msgstr ""
+msgstr "Klarte ikke å installere programtillegg i {0}"
 
 #: ../java/src/net/i2p/router/update/PluginUpdateRunner.java:528
 #: ../java/src/net/i2p/router/update/PluginUpdateRunner.java:556
@@ -888,21 +888,21 @@ msgstr "Ingen ny versjon funnet på {0}"
 
 #: ../java/src/net/i2p/router/web/BanlistRenderer.java:68
 msgid "Permanently banned"
-msgstr ""
+msgstr "Bannlyst for godt"
 
 #: ../java/src/net/i2p/router/web/BanlistRenderer.java:70
 #, java-format
 msgid "Temporary ban expiring in {0}"
-msgstr ""
+msgstr "Midlertidig bannlysning uløper om {0}"
 
 #: ../java/src/net/i2p/router/web/BanlistRenderer.java:72
 #, java-format
 msgid "Banned until restart or in {0}"
-msgstr ""
+msgstr "Bannlyst til omstart eller i {0}"
 
 #: ../java/src/net/i2p/router/web/BanlistRenderer.java:85
 msgid "unban now"
-msgstr ""
+msgstr "fjern bannlysning nå"
 
 #: ../java/src/net/i2p/router/web/CSSHelper.java:149
 #: ../java/src/net/i2p/router/web/HomeHelper.java:37
@@ -1015,7 +1015,7 @@ msgstr "I2P Ruter Konsoll"
 
 #: ../java/src/net/i2p/router/web/CertHelper.java:27
 msgid "Local SSL Certificates"
-msgstr ""
+msgstr "Lokale SSL-sertifikat"
 
 #: ../java/src/net/i2p/router/web/CertHelper.java:48
 #: ../java/src/net/i2p/router/web/CertHelper.java:53
@@ -1025,16 +1025,16 @@ msgstr "I2P-Tunnel"
 
 #: ../java/src/net/i2p/router/web/CertHelper.java:56
 msgid "Local Router Family Certificate"
-msgstr ""
+msgstr "Lokalt sertifikat for ruterfamilie"
 
 #: ../java/src/net/i2p/router/web/CertHelper.java:62
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:214
 msgid "Family"
-msgstr ""
+msgstr "Familie"
 
 #: ../java/src/net/i2p/router/web/ConfigAdvancedHandler.java:62
 msgid "Error updating the configuration - please see the error logs"
-msgstr ""
+msgstr "Fel ved oppdatering av oppsett - sjekk feilloggene"
 
 #: ../java/src/net/i2p/router/web/ConfigAdvancedHandler.java:72
 #: ../java/src/net/i2p/router/web/ConfigAdvancedHandler.java:96
@@ -1056,7 +1056,7 @@ msgstr "Innstillingene er lagret"
 msgid ""
 "Error saving the configuration (applied but not saved) - please see the "
 "error logs"
-msgstr ""
+msgstr "Feil ved oppsett (lagt til men ikke lagret) - sjekk feilloggene"
 
 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:48
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:565
@@ -1088,12 +1088,12 @@ msgstr "Installer Plugin"
 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:77
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configplugins_jsp.java:579
 msgid "Install Plugin from File"
-msgstr ""
+msgstr "Installer programtillegg fra fil"
 
 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:86
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configplugins_jsp.java:590
 msgid "Update All Installed Plugins"
-msgstr ""
+msgstr "Oppdater alle installerte programtillegg"
 
 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:138
 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:175
@@ -1119,7 +1119,7 @@ msgstr "Stoppet plugin {0}"
 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:180
 #, java-format
 msgid "Stopped webapp {0}"
-msgstr ""
+msgstr "Stoppet vevapp {0}"
 
 #. label (IE)
 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:209
@@ -1134,7 +1134,7 @@ msgstr "Ny klient lagt til"
 
 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:287
 msgid "Client configuration saved successfully"
-msgstr ""
+msgstr "Klientoppsett lagret"
 
 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:297
 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:323
@@ -1145,17 +1145,17 @@ msgstr "DÃ¥rlig klient indeks."
 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:306
 #, java-format
 msgid "Client {0} stopped"
-msgstr ""
+msgstr "Klienten {0} stoppet"
 
 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:328
 #, java-format
 msgid "Client {0} started"
-msgstr ""
+msgstr "Klient {0} startet"
 
 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:343
 #, java-format
 msgid "Client {0} deleted"
-msgstr ""
+msgstr "Klient {0} slettet"
 
 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:358
 msgid "WebApp configuration saved."
@@ -1190,11 +1190,11 @@ msgstr "Ingen plugin URL er satt."
 #: ../java/src/net/i2p/router/web/ConfigFamilyHandler.java:47
 #: ../java/src/net/i2p/router/web/ConfigReseedHandler.java:79
 msgid "You must enter a file"
-msgstr ""
+msgstr "Du må angi ei fil"
 
 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:460
 msgid "Install from file failed"
-msgstr ""
+msgstr "Installasjon fra fil mislyktes"
 
 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:475
 #, java-format
@@ -1204,16 +1204,16 @@ msgstr "Ingen oppdaterings URL spesifisert for {0}"
 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:484
 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:508
 msgid "Plugin or update download already in progress."
-msgstr ""
+msgstr "Programtillegg- eller oppdaterings-nedlasting allerede underveis."
 
 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:489
 msgid "Updating all plugins"
-msgstr ""
+msgstr "Oppdaterer alle programtillegg"
 
 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:524
 #, java-format
 msgid "Installing plugin from {0}"
-msgstr ""
+msgstr "Installerer programtillegg fra {0}"
 
 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:545
 #, java-format
@@ -1235,11 +1235,11 @@ msgstr "Feil ved starting av plugin {0}"
 #: ../java/src/net/i2p/router/web/ConfigUIHandler.java:105
 #, java-format
 msgid "Added user {0}"
-msgstr ""
+msgstr "La til bruker {0}"
 
 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:626
 msgid "Interface configuration saved"
-msgstr ""
+msgstr "Grensesnittoppsett lagret"
 
 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:627
 #: ../java/src/net/i2p/router/web/ConfigFamilyHandler.java:38
@@ -1251,7 +1251,7 @@ msgstr ""
 #: ../java/src/net/i2p/router/web/ConfigUIHandler.java:108
 #: ../java/src/net/i2p/router/web/ConfigUIHandler.java:132
 msgid "Restart required to take effect"
-msgstr ""
+msgstr "Omstart påkrevd for at endringer skal tre i effekt"
 
 #: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:98
 #: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:361
@@ -1358,11 +1358,11 @@ msgstr "Er du sikker på at du vil slette {0}?"
 #: ../java/src/net/i2p/router/web/ConfigFamilyHandler.java:27
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configfamily_jsp.java:555
 msgid "Create New Router Family"
-msgstr ""
+msgstr "Opprett ny ruterfamilie"
 
 #: ../java/src/net/i2p/router/web/ConfigFamilyHandler.java:31
 msgid "You must enter a family name"
-msgstr ""
+msgstr "Du må skrive inn et familienavn"
 
 #: ../java/src/net/i2p/router/web/ConfigFamilyHandler.java:37
 #: ../java/src/net/i2p/router/web/ConfigFamilyHandler.java:101
@@ -1373,17 +1373,17 @@ msgstr "Konfigurasjonen ble lagret"
 #: ../java/src/net/i2p/router/web/ConfigFamilyHandler.java:42
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configfamily_jsp.java:545
 msgid "Join Existing Router Family"
-msgstr ""
+msgstr "Ta del i eksisterende ruterfamilie"
 
 #: ../java/src/net/i2p/router/web/ConfigFamilyHandler.java:88
 #: ../java/src/net/i2p/router/web/ConfigFamilyHandler.java:90
 msgid "Load from file failed"
-msgstr ""
+msgstr "Innlasting fra fil mislyktes"
 
 #: ../java/src/net/i2p/router/web/ConfigFamilyHandler.java:95
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configfamily_jsp.java:590
 msgid "Leave Router Family"
-msgstr ""
+msgstr "Forlat ruterfamilie"
 
 #: ../java/src/net/i2p/router/web/ConfigHomeHandler.java:21
 #: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:22
@@ -1406,7 +1406,7 @@ msgstr "Slett markerte"
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:586
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:594
 msgid "Add item"
-msgstr ""
+msgstr "Legg til element"
 
 #: ../java/src/net/i2p/router/web/ConfigHomeHandler.java:23
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:556
@@ -1426,24 +1426,24 @@ msgstr "Lagre"
 
 #: ../java/src/net/i2p/router/web/ConfigHomeHandler.java:29
 msgid "Home page changed"
-msgstr ""
+msgstr "Hjemmeside endret"
 
 #: ../java/src/net/i2p/router/web/ConfigHomeHandler.java:51
 msgid "Restored default settings"
-msgstr ""
+msgstr "Gjenopprettet forvalgte innstillinger"
 
 #: ../java/src/net/i2p/router/web/ConfigHomeHandler.java:63
 msgid "No name entered"
-msgstr ""
+msgstr "Inget navn angitt"
 
 #: ../java/src/net/i2p/router/web/ConfigHomeHandler.java:68
 msgid "No URL entered"
-msgstr ""
+msgstr "Ingen nettadresse angitt"
 
 #: ../java/src/net/i2p/router/web/ConfigHomeHandler.java:84
 #: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:81
 msgid "Added"
-msgstr ""
+msgstr "Lagt til"
 
 #: ../java/src/net/i2p/router/web/ConfigHomeHandler.java:101
 #: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:107
@@ -1505,17 +1505,17 @@ msgstr "Logg konfigurasjon lagret"
 #: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:46
 #, java-format
 msgid "Add additional logging statements above (e.g. {0})."
-msgstr ""
+msgstr "Legg til ytterligere innloggingspåstander ovenfor (f.eks. {0})."
 
 #: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:48
 #, java-format
 msgid "Alternatively, put entries in the file {0} (e.g. {1})."
-msgstr ""
+msgstr "Alternativt, putt oppføringer i fila {0}  (f.eks. {1})."
 
 #: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:50
 #, java-format
 msgid "Valid log levels are {0}."
-msgstr ""
+msgstr "Følgende loggføringsnivå er gyldige {0}."
 
 #. Homeland Security Advisory System
 #. http://www.dhs.gov/xinfoshare/programs/Copy_of_press_release_0046.shtm
@@ -1621,7 +1621,7 @@ msgstr "Nettverk"
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/viewprofile_jsp.java:354
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/webmail_jsp.java:370
 msgid "Summary Bar"
-msgstr ""
+msgstr "Sammendragsfelt"
 
 #: ../java/src/net/i2p/router/web/ConfigNavHelper.java:26
 msgid "UI"
@@ -1661,7 +1661,7 @@ msgstr "Statestikk"
 
 #: ../java/src/net/i2p/router/web/ConfigNavHelper.java:29
 msgid "I2CP"
-msgstr ""
+msgstr "I2CP"
 
 #: ../java/src/net/i2p/router/web/ConfigNavHelper.java:29
 msgid "Plugins"
@@ -1669,7 +1669,7 @@ msgstr "Programtillegg"
 
 #: ../java/src/net/i2p/router/web/ConfigNavHelper.java:29
 msgid "Web Apps"
-msgstr ""
+msgstr "Vevapper"
 
 #: ../java/src/net/i2p/router/web/ConfigNavHelper.java:30
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:251
@@ -1678,7 +1678,7 @@ msgstr "Avansert"
 
 #: ../java/src/net/i2p/router/web/ConfigNavHelper.java:30
 msgid "Router Family"
-msgstr ""
+msgstr "Ruterfamilie"
 
 #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:61
 #: ../java/src/net/i2p/router/web/ConfigReseedHandler.java:97
@@ -1700,7 +1700,7 @@ msgstr "Oppdaterer IP adressen"
 
 #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:241
 msgid "Updating IPv6 setting"
-msgstr ""
+msgstr "Oppdaterer IPv6-innstilling"
 
 #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:258
 msgid "Disabling TCP completely"
@@ -1709,7 +1709,7 @@ msgstr "Srku av TCP helt"
 #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:263
 #, java-format
 msgid "Updating TCP address to {0}"
-msgstr ""
+msgstr "Oppdaterer TCP-adresse til {0}"
 
 #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:270
 msgid "Disabling inbound TCP"
@@ -1722,7 +1722,7 @@ msgstr "Oppdaterer inngående TCP adresse til automatisk"
 #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:285
 #, java-format
 msgid "Updating TCP port to {0}"
-msgstr ""
+msgstr "Oppdaterer TCP-port til {0}"
 
 #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:287
 #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:312
@@ -1741,15 +1741,15 @@ msgstr "Oppdaterer inngående TCP port til automatisk"
 #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:310
 #, java-format
 msgid "Updating UDP port to {0}"
-msgstr ""
+msgstr "Oppdaterer UDP-port til {0}"
 
 #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:335
 msgid "Gracefully restarting into Hidden Router Mode"
-msgstr ""
+msgstr "Forsiktig omstart inn i skjult rutermodus"
 
 #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:337
 msgid "Gracefully restarting to exit Hidden Router Mode"
-msgstr ""
+msgstr "Omstarter forsiktig for å gå ut av skjult rutermodus"
 
 #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:346
 msgid "Enabling UPnP"
@@ -1769,27 +1769,27 @@ msgstr "Skru av laptop modus"
 
 #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:366
 msgid "Disabling inbound IPv4"
-msgstr ""
+msgstr "Skrur av innkommende IPv4"
 
 #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:368
 msgid "Enabling inbound IPv4"
-msgstr ""
+msgstr "Aktiverer innkommende IPv4"
 
 #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:376
 msgid "Disabling inbound IPv6"
-msgstr ""
+msgstr "Skrur av innkommende IPv6"
 
 #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:378
 msgid "Enabling inbound IPv6"
-msgstr ""
+msgstr "Aktiverer innkommende IPv6"
 
 #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:386
 msgid "Disabling UDP"
-msgstr ""
+msgstr "Aktiver UDP"
 
 #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:388
 msgid "Enabling UDP"
-msgstr ""
+msgstr "Aktiverer UDP"
 
 #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:395
 msgid "Requiring SSU introducers"
@@ -1802,7 +1802,7 @@ msgstr "Ugyldig adresse"
 #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:459
 #, java-format
 msgid "The hostname or IP {0} is not publicly routable"
-msgstr ""
+msgstr "Vertsnavn eller IP {0} ikke offentlig rutbar"
 
 #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:484
 msgid "Updating bandwidth share percentage"
@@ -1820,7 +1820,7 @@ msgstr "ukjent"
 
 #: ../java/src/net/i2p/router/web/ConfigNetHelper.java:229
 msgid "Add host name or IP"
-msgstr ""
+msgstr "Legg til vertsnavn eller IP"
 
 #: ../java/src/net/i2p/router/web/ConfigNetHelper.java:252
 msgid "bits per second"
@@ -1878,7 +1878,7 @@ msgstr "er ikke for øyeblikket blokkert"
 #: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:39
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:578
 msgid "Adjust peer bonuses"
-msgstr ""
+msgstr "Juster likemannsbonuser"
 
 #: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:47
 msgid "Bad speed value"
@@ -1911,45 +1911,45 @@ msgstr "Starter reseed prosessen"
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:543
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:549
 msgid "Reseed from URL"
-msgstr ""
+msgstr "SÃ¥ igjen fra nettadresse"
 
 #: ../java/src/net/i2p/router/web/ConfigReseedHandler.java:37
 msgid "You must enter a URL"
-msgstr ""
+msgstr "Du må angi en nettadresse"
 
 #: ../java/src/net/i2p/router/web/ConfigReseedHandler.java:66
 msgid "Reseed in progress, check summary bar for status"
-msgstr ""
+msgstr "Omsåing underveis, sjekk oppsummeringsfelt for status"
 
 #: ../java/src/net/i2p/router/web/ConfigReseedHandler.java:68
 msgid "Reseed complete, check summary bar for status"
-msgstr ""
+msgstr "Omsåing fullført, sjekk sammendragsfelt for status"
 
 #: ../java/src/net/i2p/router/web/ConfigReseedHandler.java:74
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:557
 msgid "Reseed from file"
-msgstr ""
+msgstr "SÃ¥ om igjen fra fil"
 
 #: ../java/src/net/i2p/router/web/ConfigReseedHandler.java:84
 #: ../java/src/net/i2p/router/web/ConfigReseedHandler.java:91
 msgid "Reseed from file failed"
-msgstr ""
+msgstr "Omsåing fra fil mislyktes"
 
 #: ../java/src/net/i2p/router/web/ConfigReseedHandler.java:86
 #, java-format
 msgid "Reseed successful, loaded {0} router info from file"
 msgid_plural "Reseed successful, loaded {0} router infos from file"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Omsåing lyktes, lastet {0} ruterinfo fra fil"
+msgstr[1] "Omsåing lyktes, lastet {0}. ruterinformasjoner fra fil"
 
 #: ../java/src/net/i2p/router/web/ConfigReseedHandler.java:99
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:599
 msgid "Reset URL list"
-msgstr ""
+msgstr "Tilbakestill nettadresseliste"
 
 #: ../java/src/net/i2p/router/web/ConfigReseedHandler.java:107
 msgid "URL list reset successfully"
-msgstr ""
+msgstr "Nettadresseliste tilbakestilt"
 
 #. Normal browsers send value, IE sends button label
 #: ../java/src/net/i2p/router/web/ConfigRestartBean.java:34
@@ -2076,12 +2076,12 @@ msgstr "Ikke kjøre I2P ved oppstart"
 #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:264
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:612
 msgid "Dump threads"
-msgstr ""
+msgstr "Dump tråder"
 
 #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:271
 #, java-format
 msgid "Threads dumped to {0}"
-msgstr ""
+msgstr "Tråder dumpet til {0}"
 
 #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:272
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:620
@@ -2104,21 +2104,21 @@ msgstr "Konsoll skal ikke vises ved oppstart"
 #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:278
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:608
 msgid "Force GC"
-msgstr ""
+msgstr "PÃ¥tving SO"
 
 #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:280
 msgid "Full garbage collection requested"
-msgstr ""
+msgstr "Full søppeloppsamling forespurt"
 
 #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:281
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:565
 msgid "Show systray icon"
-msgstr ""
+msgstr "Vis systemkurvsikon"
 
 #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:283
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:569
 msgid "Hide systray icon"
-msgstr ""
+msgstr "Skjul systemkurvsikon"
 
 #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:293
 msgid "Service installed"
@@ -2139,31 +2139,31 @@ msgstr "Advarsel: kunne ikke fjerne tjenesten"
 #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:343
 #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:358
 msgid "Enabled system tray"
-msgstr ""
+msgstr "Systemkurv påskrudd"
 
 #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:348
 msgid "Disabled system tray"
-msgstr ""
+msgstr "Systemkurv avskrudd"
 
 #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:363
 msgid "Failed to start systray"
-msgstr ""
+msgstr "Klarte ikke å starte systemkurv"
 
 #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:365
 msgid "Failed to stop systray"
-msgstr ""
+msgstr "Klarte ikke å stoppe systemkurv"
 
 #: ../java/src/net/i2p/router/web/ConfigStatsHandler.java:118
 msgid "Stat filter and location updated successfully to"
-msgstr ""
+msgstr "Statistikkfilter og plassering oppdatert til"
 
 #: ../java/src/net/i2p/router/web/ConfigStatsHandler.java:121
 msgid "Full statistics enabled"
-msgstr ""
+msgstr "Full statistikk påskrudd"
 
 #: ../java/src/net/i2p/router/web/ConfigStatsHandler.java:123
 msgid "Full statistics disabled"
-msgstr ""
+msgstr "Full statistikk avskrudd"
 
 #: ../java/src/net/i2p/router/web/ConfigStatsHandler.java:127
 #, java-format
@@ -2174,16 +2174,16 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:24
 msgid "Save order"
-msgstr ""
+msgstr "Lagre rekkefølge"
 
 #: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:31
 msgid "Refresh interval changed"
-msgstr ""
+msgstr "Oppdateringsintervall endret"
 
 #: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:33
 #, java-format
 msgid "Refresh interval must be at least {0} seconds"
-msgstr ""
+msgstr "Oppdateringsintervall må være minst {0} sekunder"
 
 #: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:35
 msgid "Refresh interval must be a number"
@@ -2192,40 +2192,40 @@ msgstr ""
 #: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:38
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configsidebar_jsp.java:550
 msgid "Restore full default"
-msgstr ""
+msgstr "Gjenopprett fullt forvalg"
 
 #: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:40
 msgid "Full summary bar default restored."
-msgstr ""
+msgstr "Fullt forvalg for sammendragsfelt gjenopprettet."
 
 #: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:41
 #: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:45
 #: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:137
 msgid "Summary bar will refresh shortly."
-msgstr ""
+msgstr "Sammendragsfeltet vil gjenoppfriskes snart."
 
 #: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:42
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configsidebar_jsp.java:552
 msgid "Restore minimal default"
-msgstr ""
+msgstr "Gjenopprett minimalt forvalg."
 
 #: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:44
 msgid "Minimal summary bar default restored."
-msgstr ""
+msgstr "Minimalt forvalg for sammendragsfelt gjenopprettet."
 
 #: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:61
 #: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:83
 #: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:131
 msgid "Order must be an integer"
-msgstr ""
+msgstr "Rekkefølgen må være et heltall"
 
 #: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:68
 msgid "No section selected"
-msgstr ""
+msgstr "Ingen del valgt"
 
 #: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:73
 msgid "No order entered"
-msgstr ""
+msgstr "Ingen rekkefølge oppgitt"
 
 #: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:129
 msgid "Moved"
@@ -2233,7 +2233,7 @@ msgstr "Flyttet"
 
 #: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:136
 msgid "Saved order of sections."
-msgstr ""
+msgstr "Rekkefølge for deler lagret."
 
 #. the count isn't really correct anyway, since we don't check for actual
 #. changes
@@ -2267,13 +2267,13 @@ msgstr[1] ""
 #, java-format
 msgid "1 tunnel"
 msgid_plural "{0} tunnels"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Én tunnel"
+msgstr[1] "{0} tunneler"
 
 #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:33
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:36
 msgid "Exploratory tunnels"
-msgstr ""
+msgstr "Utforskningstunneler"
 
 #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:49
 #, java-format
@@ -2282,19 +2282,19 @@ msgstr "Klient-tunneler for {0}"
 
 #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:78
 msgid "ANONYMITY WARNING - Settings include 0-hop tunnels."
-msgstr ""
+msgstr "ANONYMITETSADVARSEL - Innstillingene inneholder 0-hopp tunneler."
 
 #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:83
 msgid "ANONYMITY WARNING - Settings include 1-hop tunnels."
-msgstr ""
+msgstr "ANONYMITETSADVARSEL - Innstillingene inneholder 1-hopp tunneler."
 
 #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:86
 msgid "PERFORMANCE WARNING - Settings include very long tunnels."
-msgstr ""
+msgstr "YTELSESADVARSEL - Innstillingene inneholder veldig lange tunneler."
 
 #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:89
 msgid "PERFORMANCE WARNING - Settings include high tunnel quantities."
-msgstr ""
+msgstr "YTELSESADVARSEL - Innstillingnee inneholder høye tunnelmengder."
 
 #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:91
 #: ../java/src/net/i2p/router/web/PeerHelper.java:211
@@ -2315,7 +2315,7 @@ msgstr "Lengde"
 #. tunnel depth variance
 #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:114
 msgid "Randomization"
-msgstr ""
+msgstr "Tilfeldiggjøring"
 
 #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:139
 msgid "Quantity"
@@ -2327,11 +2327,11 @@ msgstr "Sikkerhetskopi-mengde"
 
 #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:179
 msgid "Inbound options"
-msgstr ""
+msgstr "Innkommende valg"
 
 #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:191
 msgid "Outbound options"
-msgstr ""
+msgstr "Utgående valg"
 
 #: ../java/src/net/i2p/router/web/ConfigUIHandler.java:23
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:533
@@ -2341,16 +2341,16 @@ msgstr "Legg til bruker"
 
 #: ../java/src/net/i2p/router/web/ConfigUIHandler.java:65
 msgid "Theme change saved."
-msgstr ""
+msgstr "Draktendring lagret."
 
 #: ../java/src/net/i2p/router/web/ConfigUIHandler.java:67
 #: ../java/src/net/i2p/router/web/ConfigUIHandler.java:72
 msgid "Refresh the page to view."
-msgstr ""
+msgstr "Gjenoppfrisk siden for å vise."
 
 #: ../java/src/net/i2p/router/web/ConfigUIHandler.java:70
 msgid "Mobile console option saved."
-msgstr ""
+msgstr "Mobilkonsollvalg lagret."
 
 #: ../java/src/net/i2p/router/web/ConfigUIHandler.java:82
 msgid "No user name entered"
@@ -2360,7 +2360,7 @@ msgstr "Inget brukernavn angitt"
 msgid ""
 "Warning: User names outside the ISO-8859-1 character set are not "
 "recommended. Support is not standardized and varies by browser."
-msgstr ""
+msgstr "Advarsel: Brukernavn utenfor ISO-8859-1-tegnsett er ikke anbefalt. Støtte er ikke standarisert og varierer avhengig av nettleser."
 
 #: ../java/src/net/i2p/router/web/ConfigUIHandler.java:97
 msgid "No password entered"
@@ -2371,7 +2371,7 @@ msgstr "Inget passord innskrevet"
 msgid ""
 "To recover from a forgotten or non-working password, stop I2P, edit the file"
 " {0}, delete the line {1}, and restart I2P."
-msgstr ""
+msgstr "For å gjenopprette fra et glemt eller ikke-fungerende passord, stopp I2P, rediger fila {0}, slett linjen {1}, og start I2P på nytt."
 
 #: ../java/src/net/i2p/router/web/ConfigUIHandler.java:125
 #, java-format
@@ -2380,11 +2380,11 @@ msgstr "Fjernet bruker {0}"
 
 #: ../java/src/net/i2p/router/web/ConfigUIHelper.java:33
 msgid "Set theme universally across all apps"
-msgstr ""
+msgstr "Bruk drakt i alle program"
 
 #: ../java/src/net/i2p/router/web/ConfigUIHelper.java:45
 msgid "Force the mobile console to be used"
-msgstr ""
+msgstr "PÃ¥tving bruk av mobilkonsoll"
 
 #: ../java/src/net/i2p/router/web/ConfigUIHelper.java:190
 msgid "Add a user and password to enable."
@@ -2393,7 +2393,7 @@ msgstr "Legg til et brukernavn og passord for å aktivere."
 #: ../java/src/net/i2p/router/web/ConfigUIHelper.java:194
 #: ../java/src/net/i2p/router/web/HomeHelper.java:211
 msgid "Mark for deletion"
-msgstr ""
+msgstr "Marker for sletting"
 
 #: ../java/src/net/i2p/router/web/ConfigUIHelper.java:198
 #: ../java/src/net/i2p/router/web/ConfigUIHelper.java:213
@@ -2408,7 +2408,7 @@ msgstr "Passord"
 
 #: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:167
 msgid "Update or check already in progress"
-msgstr ""
+msgstr "Oppdatering eller sjekk allerede underveis"
 
 #: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:190
 msgid "Update available, attempting to download now"
@@ -2425,7 +2425,7 @@ msgstr "Ingen oppdatering tilgjengelig"
 #: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:216
 #, java-format
 msgid "Updating news URL to {0}"
-msgstr ""
+msgstr "Oppdaterer nyhetsnettadresse til {0}"
 
 #: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:223
 #: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:231
@@ -2437,17 +2437,17 @@ msgstr "Internt"
 #: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:227
 #, java-format
 msgid "Updating proxy host to {0}"
-msgstr ""
+msgstr "Oppdaterer mellomgjeningsvert til {0}"
 
 #: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:235
 #, java-format
 msgid "Updating proxy port to {0}"
-msgstr ""
+msgstr "Oppdaterer mellomtjeningsport til {0}"
 
 #: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:251
 #, java-format
 msgid "Updating refresh frequency to {0}"
-msgstr ""
+msgstr "Oppdaterer gjenoppfriskningsfrekvens til {0}"
 
 #: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:252
 #: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:126
@@ -2458,25 +2458,25 @@ msgstr "Aldri"
 #: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:259
 #, java-format
 msgid "Updating update policy to {0}"
-msgstr ""
+msgstr "Oppdaterer oppdateringspraksis til {0}"
 
 #: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:268
 msgid "Updating update URLs."
-msgstr ""
+msgstr "Oppdaterer oppdateringsnettadresser."
 
 #: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:280
 msgid "Updating trusted keys."
-msgstr ""
+msgstr "Oppdaterer betrodde nøkler."
 
 #: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:292
 #, java-format
 msgid "Updating unsigned update URL to {0}"
-msgstr ""
+msgstr "Oppdaterer usignert oppdateringsadresse til {0}"
 
 #: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:304
 #, java-format
 msgid "Updating signed development build URL to {0}"
-msgstr ""
+msgstr "Oppdaterer signert utviklingsbyggnettadresse til {0}"
 
 #: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:128
 msgid "Every"
@@ -2496,19 +2496,19 @@ msgstr "Last ned, kontrollere og ta omstart"
 
 #: ../java/src/net/i2p/router/web/EventLogHelper.java:34
 msgid "Aborted startup"
-msgstr ""
+msgstr "Oppstart avbrutt"
 
 #: ../java/src/net/i2p/router/web/EventLogHelper.java:35
 msgid "Enabled floodfill"
-msgstr ""
+msgstr "Flodfyll påskrudd"
 
 #: ../java/src/net/i2p/router/web/EventLogHelper.java:36
 msgid "Changed IP"
-msgstr ""
+msgstr "Endret IP"
 
 #: ../java/src/net/i2p/router/web/EventLogHelper.java:37
 msgid "Changed port"
-msgstr ""
+msgstr "Endret port"
 
 #: ../java/src/net/i2p/router/web/EventLogHelper.java:38
 msgid "Clock shifted"
@@ -2516,104 +2516,104 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/EventLogHelper.java:39
 msgid "Crashed"
-msgstr ""
+msgstr "Kræsjet"
 
 #: ../java/src/net/i2p/router/web/EventLogHelper.java:40
 msgid "Critical error"
-msgstr ""
+msgstr "Kritisk feil"
 
 #: ../java/src/net/i2p/router/web/EventLogHelper.java:41
 msgid "Installed new version"
-msgstr ""
+msgstr "Installerte ny versjon"
 
 #: ../java/src/net/i2p/router/web/EventLogHelper.java:42
 msgid "Install failed"
-msgstr ""
+msgstr "Installasjon mislyktes"
 
 #: ../java/src/net/i2p/router/web/EventLogHelper.java:43
 msgid "Network error"
-msgstr ""
+msgstr "Nettverksfeil"
 
 #: ../java/src/net/i2p/router/web/EventLogHelper.java:44
 #: ../java/src/net/i2p/router/web/EventLogHelper.java:48
 msgid "New router identity"
-msgstr ""
+msgstr "Ny ruteridentitet"
 
 #: ../java/src/net/i2p/router/web/EventLogHelper.java:45
 msgid "Disabled floodfill"
-msgstr ""
+msgstr "Flodfyll avskrudd"
 
 #: ../java/src/net/i2p/router/web/EventLogHelper.java:46
 msgid "Out of memory error"
-msgstr ""
+msgstr "Mangler minne"
 
 #: ../java/src/net/i2p/router/web/EventLogHelper.java:47
 msgid "Reachability change"
-msgstr ""
+msgstr "Tilgangstilstand endret"
 
 #: ../java/src/net/i2p/router/web/EventLogHelper.java:49
 msgid "Reseeded router"
-msgstr ""
+msgstr "SÃ¥dde om ruter"
 
 #: ../java/src/net/i2p/router/web/EventLogHelper.java:50
 msgid "Soft restart"
-msgstr ""
+msgstr "Myk omstart"
 
 #: ../java/src/net/i2p/router/web/EventLogHelper.java:51
 msgid "Started router"
-msgstr ""
+msgstr "Ruter startet"
 
 #: ../java/src/net/i2p/router/web/EventLogHelper.java:52
 msgid "Stopped router"
-msgstr ""
+msgstr "Ruter stoppet"
 
 #: ../java/src/net/i2p/router/web/EventLogHelper.java:53
 msgid "Updated router"
-msgstr ""
+msgstr "Ruter oppdatert"
 
 #: ../java/src/net/i2p/router/web/EventLogHelper.java:54
 msgid "Watchdog warning"
-msgstr ""
+msgstr "Vakthundsadvarsel"
 
 #: ../java/src/net/i2p/router/web/EventLogHelper.java:102
 msgid "Display Events"
-msgstr ""
+msgstr "Vis hendleser"
 
 #: ../java/src/net/i2p/router/web/EventLogHelper.java:106
 msgid "Events since"
-msgstr ""
+msgstr "Hendelser siden"
 
 #: ../java/src/net/i2p/router/web/EventLogHelper.java:111
 msgid "Event type"
-msgstr ""
+msgstr "Hendelsestype"
 
 #: ../java/src/net/i2p/router/web/EventLogHelper.java:117
 #: ../java/src/net/i2p/router/web/EventLogHelper.java:148
 msgid "All events"
-msgstr ""
+msgstr "Alle hendleser"
 
 #: ../java/src/net/i2p/router/web/EventLogHelper.java:122
 msgid "Filter events"
-msgstr ""
+msgstr "Filtrer hendleser"
 
 #: ../java/src/net/i2p/router/web/EventLogHelper.java:170
 msgid "No events found"
-msgstr ""
+msgstr "Ingen hendelser funnet"
 
 #: ../java/src/net/i2p/router/web/EventLogHelper.java:171
 #, java-format
 msgid "No events found in previous {0}"
-msgstr ""
+msgstr "Ingen hendelser funnet i forrige {0}"
 
 #: ../java/src/net/i2p/router/web/EventLogHelper.java:174
 #, java-format
 msgid "No \"{0}\" events found"
-msgstr ""
+msgstr "Ingen \"{0}\"-hendelser funnet"
 
 #: ../java/src/net/i2p/router/web/EventLogHelper.java:175
 #, java-format
 msgid "No \"{0}\" events found in previous {1}"
-msgstr ""
+msgstr "Ingen \"{0}\"-hendelser funnet i forrige {1}"
 
 #: ../java/src/net/i2p/router/web/EventLogHelper.java:179
 #: ../java/src/net/i2p/router/web/JobQueueHelper.java:154
@@ -2622,11 +2622,11 @@ msgstr "Tid"
 
 #: ../java/src/net/i2p/router/web/EventLogHelper.java:182
 msgid "Event"
-msgstr ""
+msgstr "Hendelse"
 
 #: ../java/src/net/i2p/router/web/EventLogHelper.java:184
 msgid "Details"
-msgstr ""
+msgstr "Detaljer"
 
 #: ../java/src/net/i2p/router/web/FormHandler.java:253
 msgid ""
@@ -2649,21 +2649,21 @@ msgstr ""
 #: ../java/src/net/i2p/router/web/GraphHelper.java:236
 #, java-format
 msgid "{0} for {1}"
-msgstr ""
+msgstr "{0} for {1}"
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:223
 #: ../java/src/net/i2p/router/web/StatSummarizer.java:333
 msgid "Bandwidth usage"
-msgstr ""
+msgstr "BÃ¥ndbreddebruk"
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:238
 #, java-format
 msgid "ending {0} ago"
-msgstr ""
+msgstr "sluttet for {0}  siden"
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:240
 msgid "Return to main graphs page"
-msgstr ""
+msgstr "Tilbake til hovedgrafsiden"
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:254
 msgid "Larger"
@@ -2691,35 +2691,35 @@ msgstr "Smalere"
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:291
 msgid "Larger interval"
-msgstr ""
+msgstr "Større intervall"
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:297
 msgid "Smaller interval"
-msgstr ""
+msgstr "Mindre intervall"
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:304
 msgid "Previous interval"
-msgstr ""
+msgstr "Forrige intervall"
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:315
 msgid "Next interval"
-msgstr ""
+msgstr "Neste intervall"
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:322
 msgid "Plot averages"
-msgstr ""
+msgstr "Grafgjennomsnitt"
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:322
 msgid "plot events"
-msgstr ""
+msgstr "Grafhendelser"
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:325
 msgid "All times are UTC."
-msgstr ""
+msgstr "Alle tider i UTV."
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:357
 msgid "Configure Graph Display"
-msgstr ""
+msgstr "Sett opp grafvisning"
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:357
 msgid "Select Stats"
@@ -2727,7 +2727,7 @@ msgstr "Velg statistikk"
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:361
 msgid "Display period"
-msgstr ""
+msgstr "Visningsperiode"
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:361
 msgid "minutes"
@@ -2735,32 +2735,32 @@ msgstr "minutter"
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:362
 msgid "Plot type"
-msgstr ""
+msgstr "Graftype"
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:363
 msgid "Averages"
-msgstr ""
+msgstr "Gjennomsnitt  "
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:364
 msgid "Events"
-msgstr ""
+msgstr "Hendelser"
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:365
 msgid "Graph size"
-msgstr ""
+msgstr "Grafstørrelse"
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:366
 msgid "pixels wide"
-msgstr ""
+msgstr "piksler bred"
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:367
 msgid ""
 "Note: Dimensions are for graph only (excludes title, labels and legend)."
-msgstr ""
+msgstr "Merk: Dimensjonene er bare for grafer (utelater tittel, merkelapper og påskrift)."
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:367
 msgid "pixels high"
-msgstr ""
+msgstr "piksler høy"
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:368
 msgid "Refresh delay"
@@ -2768,19 +2768,19 @@ msgstr "Oppfriskningsforsinkelse"
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:382
 msgid "Persistence"
-msgstr ""
+msgstr "Vedvarelse"
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:387
 msgid "Store graph data on disk"
-msgstr ""
+msgstr "Lagre grafdata på disk"
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:388
 msgid "Save settings and redraw graphs"
-msgstr ""
+msgstr "Lagre innstillinger og tegn om grafer"
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:444
 msgid "Graph settings saved"
-msgstr ""
+msgstr "Grafinnstillinger lagret"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:30
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:188
@@ -2790,38 +2790,38 @@ msgstr "Adressebok"
 #: ../java/src/net/i2p/router/web/HomeHelper.java:30
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:186
 msgid "Manage your I2P hosts file here (I2P domain name resolution)"
-msgstr ""
+msgstr "Behandle din I2P-vertsfil her (I2P-domenenavnsoppløsning)"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:31
 msgid "Configure Bandwidth"
-msgstr ""
+msgstr "Sett opp båndbredde"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:31
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:390
 msgid "I2P Bandwidth Configuration"
-msgstr ""
+msgstr "I2P-båndbreddejustering"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:32
 msgid "Configure UI"
-msgstr ""
+msgstr "Sett opp UI"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:32
 msgid "Select console theme & language & set optional console password"
-msgstr ""
+msgstr "Velg konsolldrakt og språk og sett opp valgfritt konsollpassord"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:33
 msgid "Customize Home Page"
-msgstr ""
+msgstr "Tilpass startside"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:33
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:408
 msgid "I2P Home Page Configuration"
-msgstr ""
+msgstr "Sett opp I2P-startside"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:34
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:148
 msgid "Anonymous webmail client"
-msgstr ""
+msgstr "Anonym vevpostklient"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:34
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:150
@@ -2836,15 +2836,15 @@ msgstr "Hjelp"
 #: ../java/src/net/i2p/router/web/HomeHelper.java:35
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:322
 msgid "I2P Router Help"
-msgstr ""
+msgstr "Hjelp for I2P-ruter"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:36
 msgid "Install and configure I2P plugins"
-msgstr ""
+msgstr "Installer og sett opp I2P-programtillegg"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:36
 msgid "Manage Plugins"
-msgstr ""
+msgstr "Behandle programtillegg"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:37
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:231
@@ -2854,7 +2854,7 @@ msgstr "Ruter Konsoll"
 #: ../java/src/net/i2p/router/web/HomeHelper.java:38
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:154
 msgid "Built-in anonymous BitTorrent Client"
-msgstr ""
+msgstr "Innebygd anonym BitTorrent-klient"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:38
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:156
@@ -2863,40 +2863,40 @@ msgstr "Torrents"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:39
 msgid "Local web server for hosting your own content on I2P"
-msgstr ""
+msgstr "Lokal vevtjener for versskap for ditt innhold på I2P"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:39
 #: ../java/src/net/i2p/router/web/HomeHelper.java:179
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:166
 msgid "Web Server"
-msgstr ""
+msgstr "Vevtjener"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:44
 msgid "The Anoncoin project"
-msgstr ""
+msgstr "Anoncoin-prosjektet"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:45
 msgid "Bug tracker"
-msgstr ""
+msgstr "Feilsporer"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:45
 msgid "I2P Bug Reports"
-msgstr ""
+msgstr "I2P-feilrapporter"
 
 #. "colombo-bt.i2p" + S + _x("The Italian Bittorrent Resource") + S + "http
 #. ://colombo-bt.i2p/" + S + I + "colomboicon.png" + S +
 #: ../java/src/net/i2p/router/web/HomeHelper.java:47
 msgid "Dev Forum"
-msgstr ""
+msgstr "Utviklerforum"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:47
 msgid "Development forum"
-msgstr ""
+msgstr "Utviklingsforumet"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:48
 #: ../java/src/net/i2p/router/web/HomeHelper.java:65
 msgid "Bittorrent tracker"
-msgstr ""
+msgstr "BitTorrent-sporer"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:48
 msgid "diftracker"
@@ -2904,11 +2904,11 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:49
 msgid "I2P Applications"
-msgstr ""
+msgstr "I2P-programmer"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:50
 msgid "Anonymous cryptocurrency exchange"
-msgstr ""
+msgstr "Anonym kryptovaluta-børs"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:51
 msgid "Frequently Asked Questions"
@@ -2916,35 +2916,35 @@ msgstr "Ofte-Stilte-Spørsmål"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:51
 msgid "I2P FAQ"
-msgstr ""
+msgstr "I2P O-S-S"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:52
 msgid "Community forum"
-msgstr ""
+msgstr "Fellesskapsforum"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:52
 msgid "I2P Forum"
-msgstr ""
+msgstr "I2P-forum"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:53
 msgid ""
 "A public anonymous Git hosting site - supports pulling via Git and HTTP and "
 "pushing via SSH"
-msgstr ""
+msgstr "En offentlig og anonym Git-vertsskapsside - støtter innhenting via Git og HTTP og utdytting via SSH"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:55
 msgid "Anonymous wiki - share the knowledge"
-msgstr ""
+msgstr "Anonym wiki - del kunnskapen"
 
 #. "hiddengate [ru]" + S + _x("Russian I2P-related wiki") + S +
 #. "http://hiddengate.i2p/" + S + I + "hglogo32.png" + S +
 #: ../java/src/net/i2p/router/web/HomeHelper.java:55
 msgid "I2P Wiki"
-msgstr ""
+msgstr "I2P-wiki"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:61
 msgid "Free eepsite hosting with PHP and MySQL"
-msgstr ""
+msgstr "Gratis eepside-vertsskap med PGP og MySQL"
 
 #. "Ident " + _x("Microblog") + S + _x("Your premier microblogging service on
 #. I2P") + S + "http://id3nt.i2p/" + S + I + "ident_icon_blue.png" + S +
@@ -2970,7 +2970,7 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:63
 msgid "I2P News"
-msgstr ""
+msgstr "I2P-nyheter"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:63
 msgid "Planet I2P"
@@ -2978,23 +2978,23 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:64
 msgid "Add-on directory"
-msgstr ""
+msgstr "Tilleggsmappe"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:64
 msgid "I2P Plugins"
-msgstr ""
+msgstr "I2P-programtillegg"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:65
 msgid "Postman's Tracker"
-msgstr ""
+msgstr "Postman sin sporer"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:66
 msgid "I2P home page"
-msgstr ""
+msgstr "I2P-startside"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:66
 msgid "Project Website"
-msgstr ""
+msgstr "Prosjektets nettside"
 
 #. _x("lenta news [ru]") + S + _x("Russian News Feed") + S +
 #. "http://lenta.i2p/" + S + I + "lenta_main_logo.png" + S +
@@ -3002,11 +3002,11 @@ msgstr ""
 #. "salt_console.png" + S +
 #: ../java/src/net/i2p/router/web/HomeHelper.java:69
 msgid "I2P Network Statistics"
-msgstr ""
+msgstr "I2P-nettverksstatistikk"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:70
 msgid "I2P Technical Docs"
-msgstr ""
+msgstr "Teknisk I2P-dokumentasjon"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:70
 msgid "Technical documentation"
@@ -3014,24 +3014,24 @@ msgstr "Teknisk dokumentasjon"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:71
 msgid "Privacy guides and tutorials"
-msgstr ""
+msgstr "Personvernsguider og veiledninger"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:71
 msgid "The Tin Hat"
-msgstr ""
+msgstr "Sølvpapirhatten"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:72
 msgid "Trac Wiki"
-msgstr ""
+msgstr "Trac-wiki"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:114
 msgid "The HTTP proxy is not up"
-msgstr ""
+msgstr "HTTP-mellomtjeneren er ikke oppe"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:116
 #, java-format
 msgid "Your browser is not properly configured to use the HTTP proxy at {0}"
-msgstr ""
+msgstr "Din nettleser er ikke satt opp rett for å bruke HTTP-mellomtjener på {0} "
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:215
 #: ../java/src/net/i2p/router/web/SummaryHelper.java:978
@@ -3052,29 +3052,29 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/JobQueueHelper.java:58
 msgid "Active jobs"
-msgstr ""
+msgstr "Aktive jobber"
 
 #: ../java/src/net/i2p/router/web/JobQueueHelper.java:62
 #, java-format
 msgid "started {0} ago"
-msgstr ""
+msgstr "startet {0} siden"
 
 #: ../java/src/net/i2p/router/web/JobQueueHelper.java:68
 msgid "Just finished jobs"
-msgstr ""
+msgstr "Akkurat fullførte jobber"
 
 #: ../java/src/net/i2p/router/web/JobQueueHelper.java:72
 #, java-format
 msgid "finished {0} ago"
-msgstr ""
+msgstr "fullført {0} siden"
 
 #: ../java/src/net/i2p/router/web/JobQueueHelper.java:78
 msgid "Ready/waiting jobs"
-msgstr ""
+msgstr "Klare/ventende jobber"
 
 #: ../java/src/net/i2p/router/web/JobQueueHelper.java:97
 msgid "Scheduled jobs"
-msgstr ""
+msgstr "Planlagte jobber"
 
 #. translators: {0} is a job name, {1} is a time, e.g. 6 min
 #: ../java/src/net/i2p/router/web/JobQueueHelper.java:108
@@ -3089,7 +3089,7 @@ msgstr ""
 #: ../java/src/net/i2p/router/web/JobQueueHelper.java:135
 #: ../java/src/net/i2p/router/web/JobQueueHelper.java:152
 msgid "Job"
-msgstr ""
+msgstr "Jobb"
 
 #: ../java/src/net/i2p/router/web/JobQueueHelper.java:135
 msgid "Queued"
@@ -3129,57 +3129,57 @@ msgstr "Utestående"
 #: ../java/src/net/i2p/router/web/JobQueueHelper.java:208
 #: ../java/src/net/i2p/router/web/NetDbHelper.java:19
 msgid "Summary"
-msgstr ""
+msgstr "Sammendrag"
 
 #: ../java/src/net/i2p/router/web/LogsHelper.java:78
 #: ../java/src/net/i2p/router/web/LogsHelper.java:134
 msgid "File location"
-msgstr ""
+msgstr "Filplassering"
 
 #: ../java/src/net/i2p/router/web/LogsHelper.java:131
 msgid "File not found"
-msgstr ""
+msgstr "Fil ikke funnet"
 
 #: ../java/src/net/i2p/router/web/LogsHelper.java:149
 msgid "No log messages"
-msgstr ""
+msgstr "Ingen loggmeldinger"
 
 #. 0
 #: ../java/src/net/i2p/router/web/NetDbHelper.java:20
 msgid "Local Router"
-msgstr ""
+msgstr "Lokal ruter"
 
 #. 1
 #: ../java/src/net/i2p/router/web/NetDbHelper.java:21
 msgid "Router Lookup"
-msgstr ""
+msgstr "Ruter-oppslag"
 
 #. 2
 #: ../java/src/net/i2p/router/web/NetDbHelper.java:22
 msgid "All Routers"
-msgstr ""
+msgstr "Alle rutere"
 
 #. 3
 #: ../java/src/net/i2p/router/web/NetDbHelper.java:23
 msgid "All Routers with Full Stats"
-msgstr ""
+msgstr "Alle rutere med fullstendig statistikk"
 
 #. 4
 #. 5
 #: ../java/src/net/i2p/router/web/NetDbHelper.java:25
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:287
 msgid "LeaseSets"
-msgstr ""
+msgstr "LeieSett"
 
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:206
 #: ../java/src/net/i2p/router/web/SybilRenderer.java:797
 #: ../java/strings/Strings.java:69
 msgid "Router"
-msgstr ""
+msgstr "Ruter"
 
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:215
 msgid "not found in network database"
-msgstr ""
+msgstr "ikke funnet i nettverksdatabasen"
 
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:259
 msgid "Manually Configure Floodfill Participation"
@@ -3213,7 +3213,7 @@ msgstr "Destinasjon"
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:338
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:353
 msgid "Add to addressbook"
-msgstr ""
+msgstr "Legg til i adressebok"
 
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:340
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:355
@@ -3235,11 +3235,11 @@ msgstr "Utløp for {0} siden"
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:387
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:167
 msgid "Gateway"
-msgstr ""
+msgstr "Portner"
 
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:387
 msgid "Lease"
-msgstr ""
+msgstr "Leie"
 
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:389
 msgid "Tunnel"
@@ -3247,7 +3247,7 @@ msgstr "Tunnel"
 
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:430
 msgid "Not initialized"
-msgstr ""
+msgstr "Ikke igangsatt"
 
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:486
 msgid "Network Database Router Statistics"
@@ -3274,16 +3274,16 @@ msgstr "VÃ¥r informasjon"
 
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:601
 msgid "Peer info for"
-msgstr ""
+msgstr "Likemannsinfo for"
 
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:603
 msgid "View extended router info"
-msgstr ""
+msgstr "Vis utvidet ruterinfo"
 
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:605
 #: ../java/src/net/i2p/router/web/SybilRenderer.java:799
 msgid "Full entry"
-msgstr ""
+msgstr "Full oppføring"
 
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:611
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:294
@@ -3328,7 +3328,7 @@ msgstr "Publisert"
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:625
 #: ../java/src/net/i2p/router/web/SybilRenderer.java:882
 msgid "Signing Key"
-msgstr ""
+msgstr "Signeringsnøkkel"
 
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:629
 msgid "Address(es)"
@@ -3352,15 +3352,15 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:670
 msgid "NTCP"
-msgstr ""
+msgstr "NTCP"
 
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:670
 msgid "NTCP and SSU"
-msgstr ""
+msgstr "NTCP og SSU"
 
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:670
 msgid "NTCP and SSU with introducers"
-msgstr ""
+msgstr "NTCP og SSU med introduserere"
 
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:671
 msgid "IPv6 Only SSU, introducers"
@@ -3368,19 +3368,19 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:671
 msgid "IPv6 SSU"
-msgstr ""
+msgstr "IPv6-SSU"
 
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:671
 msgid "IPv6 SSU, introducers"
-msgstr ""
+msgstr "IPv6-SSU, introduserere"
 
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:672
 msgid "IPv6 NTCP"
-msgstr ""
+msgstr "IPv6-NTCP"
 
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:672
 msgid "IPv6 NTCP, SSU"
-msgstr ""
+msgstr "IPv6-NTCP, SSU"
 
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:672
 msgid "IPv6 NTCP, SSU, introducers"
@@ -3393,17 +3393,17 @@ msgstr ""
 #: ../java/src/net/i2p/router/web/NewsFeedHelper.java:92
 #, java-format
 msgid "{0}"
-msgstr ""
+msgstr "{0}"
 
 #: ../java/src/net/i2p/router/web/NewsHelper.java:293
 #, java-format
 msgid "News last updated {0} ago."
-msgstr ""
+msgstr "Nyheter sist oppdatert {0} siden."
 
 #: ../java/src/net/i2p/router/web/NewsHelper.java:299
 #, java-format
 msgid "News last checked {0} ago."
-msgstr ""
+msgstr "Nyheter sist sjekket {0} siden."
 
 #: ../java/src/net/i2p/router/web/NewsHelper.java:308
 msgid "Hide news"
@@ -3415,7 +3415,7 @@ msgstr "Vis nyheter"
 
 #: ../java/src/net/i2p/router/web/NewsHelper.java:315
 msgid "Show all news"
-msgstr ""
+msgstr "Vis alle nyheter"
 
 #: ../java/src/net/i2p/router/web/PeerHelper.java:97
 msgid "Router Transport Addresses"
@@ -3532,7 +3532,7 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/PeerHelper.java:142
 msgid "The slow start threshold"
-msgstr ""
+msgstr "Terskel for treg start"
 
 #: ../java/src/net/i2p/router/web/PeerHelper.java:143
 msgid "The round trip time in milliseconds"
@@ -3614,15 +3614,15 @@ msgstr "Backlogged?"
 
 #: ../java/src/net/i2p/router/web/PeerHelper.java:198
 msgid "Is peer backlogged?"
-msgstr ""
+msgstr "Er likemannen overøst?"
 
 #: ../java/src/net/i2p/router/web/PeerHelper.java:268
 #: ../java/src/net/i2p/router/web/PeerHelper.java:571
 #, java-format
 msgid "{0} peer"
 msgid_plural "{0} peers"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} likemann"
+msgstr[1] "{0} likemenn"
 
 #: ../java/src/net/i2p/router/web/PeerHelper.java:337
 msgid "UDP connections"
@@ -3666,7 +3666,7 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/PeerHelper.java:369
 msgid "Sort by slow start threshold"
-msgstr ""
+msgstr "Sorter etter terskel for treg start"
 
 #: ../java/src/net/i2p/router/web/PeerHelper.java:372
 msgid "Sort by round trip time"
@@ -3767,7 +3767,7 @@ msgstr[1] ""
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:91
 msgid "Groups"
-msgstr ""
+msgstr "Grupper"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:92
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:206
@@ -3793,7 +3793,7 @@ msgstr "Integrasjon"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:97
 msgid "View/Edit"
-msgstr ""
+msgstr "Vis/rediger"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:134
 msgid "Fast, High Capacity"
@@ -3821,7 +3821,7 @@ msgstr "Integrert"
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:172
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:310
 msgid "Unreachable"
-msgstr ""
+msgstr "Ikke tilgjengelige"
 
 #. hide if < 10%
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:180
@@ -3834,7 +3834,7 @@ msgstr "profil"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:188
 msgid "Configure peer"
-msgstr ""
+msgstr "Sett opp likemann"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:207
 msgid "Integ. Value"
@@ -3842,19 +3842,19 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:208
 msgid "Last Heard About"
-msgstr ""
+msgstr "Sist hørt om"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:209
 msgid "Last Heard From"
-msgstr ""
+msgstr "Sist hørt fra"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:210
 msgid "Last Good Send"
-msgstr ""
+msgstr "Siste gode forsendelse"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:211
 msgid "Last Bad Send"
-msgstr ""
+msgstr "Siste dårlige forsendelse"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:212
 msgid "10m Resp. Time"
@@ -3870,19 +3870,19 @@ msgstr "1d svartid"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:215
 msgid "Last Good Lookup"
-msgstr ""
+msgstr "Siste gode oppslag"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:216
 msgid "Last Bad Lookup"
-msgstr ""
+msgstr "Siste dårlige oppslag"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:217
 msgid "Last Good Store"
-msgstr ""
+msgstr "Siste gode lagring"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:218
 msgid "Last Bad Store"
-msgstr ""
+msgstr "Siste dårlige lagring"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:219
 msgid "1h Fail Rate"
@@ -3894,19 +3894,19 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:264
 msgid "Thresholds"
-msgstr ""
+msgstr "Terskler"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:273
 msgid "fast peers"
-msgstr ""
+msgstr "raske likemenn"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:275
 msgid "high capacity peers"
-msgstr ""
+msgstr "høykapasitetslikemenn"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:277
 msgid " well integrated peers"
-msgstr ""
+msgstr "godt integrerte likemenn"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:282
 msgid "as determined by the profile organizer"
@@ -3914,7 +3914,7 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:282
 msgid "groups"
-msgstr ""
+msgstr "grupper"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:285
 msgid "capabilities in the netDb, not used to determine profiles"
@@ -3938,7 +3938,7 @@ msgstr ""
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:293
 #: ../java/src/net/i2p/router/web/ProfilesHelper.java:12
 msgid "Floodfill"
-msgstr ""
+msgstr "Flodfyll"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:297
 #, java-format
@@ -3956,7 +3956,7 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:309
 msgid "Reachable"
-msgstr ""
+msgstr "Tilgjengelige"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:313
 #, java-format
@@ -3971,7 +3971,7 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:319
 msgid "speed"
-msgstr ""
+msgstr "Hastighet"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:321
 msgid ""
@@ -3981,19 +3981,19 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:324
 msgid "capacity"
-msgstr ""
+msgstr "kapasitet"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:326
 msgid "how many tunnels can we ask them to join in an hour?"
-msgstr ""
+msgstr "Hvor mange tunneler kan vi spørre dem om å ta del i på en time?"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:329
 msgid "integration"
-msgstr ""
+msgstr "integrasjon"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:331
 msgid "how many new peers have they told us about lately?"
-msgstr ""
+msgstr "hvor mange nye likemenn har de fortalt oss om i det siste?"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:334
 msgid "status"
@@ -4001,12 +4001,12 @@ msgstr "status"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:336
 msgid "is the peer banned, or unreachable, or failing tunnel tests?"
-msgstr ""
+msgstr "er likemannen bannlyst, ikke tilgjengelig eller feiler tunneltester?"
 
 #. 2
 #: ../java/src/net/i2p/router/web/ProfilesHelper.java:14
 msgid "All"
-msgstr ""
+msgstr "Alt"
 
 #: ../java/src/net/i2p/router/web/SearchHelper.java:76
 msgid "Select search engine"
@@ -4014,7 +4014,7 @@ msgstr "Velg søkemotor"
 
 #: ../java/src/net/i2p/router/web/StatsGenerator.java:36
 msgid "Statistics gathered during this router's uptime"
-msgstr ""
+msgstr "Statestikk innhentet i løpet av denne ruterens oppetid"
 
 #: ../java/src/net/i2p/router/web/StatsGenerator.java:39
 msgid ""
@@ -4028,16 +4028,16 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/StatsGenerator.java:44
 msgid "Jump to section"
-msgstr ""
+msgstr "Hopp til del"
 
 #: ../java/src/net/i2p/router/web/StatsGenerator.java:67
 msgid "GO"
-msgstr ""
+msgstr "GÃ…"
 
 #: ../java/src/net/i2p/router/web/StatsGenerator.java:109
 #: ../java/src/net/i2p/router/web/StatsGenerator.java:160
 msgid "No lifetime events"
-msgstr ""
+msgstr "Ingen livstidshendelser"
 
 #: ../java/src/net/i2p/router/web/StatsGenerator.java:120
 msgid "frequency"
@@ -4045,11 +4045,11 @@ msgstr "frekvens"
 
 #: ../java/src/net/i2p/router/web/StatsGenerator.java:124
 msgid "Rolling average events per period"
-msgstr ""
+msgstr "Rullende gjennomsnitts hendelser per periode"
 
 #: ../java/src/net/i2p/router/web/StatsGenerator.java:128
 msgid "Highest events per period"
-msgstr ""
+msgstr "Høyeste antall hendelser per periode"
 
 #. if (showAll && (curFreq.getMaxAverageEventsPerPeriod() > 0) &&
 #. (curFreq.getAverageEventsPerPeriod() > 0) ) {
@@ -4074,12 +4074,12 @@ msgstr ""
 #, java-format
 msgid "1 event"
 msgid_plural "{0} events"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Én hendelse"
+msgstr[1] "{0} hendelser"
 
 #: ../java/src/net/i2p/router/web/StatsGenerator.java:172
 msgid "rate"
-msgstr ""
+msgstr "hastighet"
 
 #: ../java/src/net/i2p/router/web/StatsGenerator.java:174
 msgid "Average"
@@ -4093,13 +4093,13 @@ msgstr "Høyeste gjennomsnitt"
 #, java-format
 msgid "There was 1 event in this period."
 msgid_plural "There were {0} events in this period."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Én hendelse denne perioden."
+msgstr[1] "{0} hendelser denne perioden."
 
 #: ../java/src/net/i2p/router/web/StatsGenerator.java:207
 #, java-format
 msgid "The period ended {0} ago."
-msgstr ""
+msgstr "Perioden sluttet {0} siden."
 
 #: ../java/src/net/i2p/router/web/StatsGenerator.java:210
 msgid "No events"
@@ -4115,7 +4115,7 @@ msgstr "Hendelser i høytrafikksperiode"
 
 #: ../java/src/net/i2p/router/web/StatsGenerator.java:225
 msgid "Graph Data"
-msgstr ""
+msgstr "Grafdata"
 
 #: ../java/src/net/i2p/router/web/StatsGenerator.java:228
 msgid "Graph Event Count"
@@ -4124,15 +4124,15 @@ msgstr ""
 #. Display the strict average
 #: ../java/src/net/i2p/router/web/StatsGenerator.java:237
 msgid "Lifetime average value"
-msgstr ""
+msgstr "Livstidsgjennomsnittsverdi"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:130
 msgid "I2P Router Help &amp; FAQ"
-msgstr ""
+msgstr "I2P-ruterhjelp og O-S-S"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:132
 msgid "Help &amp; FAQ"
-msgstr ""
+msgstr "Hjelp og O-S-S"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:140
 msgid ""
@@ -4142,7 +4142,7 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:142
 msgid "I2P Services"
-msgstr ""
+msgstr "I2P-tjenester"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:164
 msgid "Local web server"
@@ -4150,15 +4150,15 @@ msgstr "Lokal vev-tjener"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:178
 msgid "Configure I2P Router"
-msgstr ""
+msgstr "Sett opp I2P-ruter"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:180
 msgid "I2P Internals"
-msgstr ""
+msgstr "Interne I2P-bestanddeler"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:193
 msgid "Graph router performance"
-msgstr ""
+msgstr "Graf over ruterytelse"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:195
 msgid "Graphs"
@@ -4167,17 +4167,17 @@ msgstr "Grafer"
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:200
 #: ../java/src/net/i2p/router/web/SummaryHelper.java:482
 msgid "Local Tunnels"
-msgstr ""
+msgstr "Lokale tunneler"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:202
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/i2ptunnelmgr_jsp.java:232
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/i2ptunnelmgr_jsp.java:397
 msgid "Hidden Services Manager"
-msgstr ""
+msgstr "Behandler for skjulte tjenester"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:212
 msgid "Health Report"
-msgstr ""
+msgstr "Helserapport"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:214
 msgid "Logs"
@@ -4185,16 +4185,16 @@ msgstr "Logger"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:218
 msgid "Show list of all known I2P routers"
-msgstr ""
+msgstr "Vis liste over alle kjente I2P-rutere"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:220
 msgid "NetDB"
-msgstr ""
+msgstr "NetDB"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:224
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:469
 msgid "Show all current peer connections"
-msgstr ""
+msgstr "Vis alle nåværende likemannstilkoblinger"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:230
 msgid "Show recent peer performance profiles"
@@ -4202,7 +4202,7 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:232
 msgid "Profiles"
-msgstr ""
+msgstr "Profiler"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:236
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:583
@@ -4211,7 +4211,7 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:249
 msgid "Advanced Configuration"
-msgstr ""
+msgstr "Avansert oppsett"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:257
 msgid "Review active encryption certificates used in console"
@@ -4219,27 +4219,27 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:259
 msgid "Certs"
-msgstr ""
+msgstr "Sertifikat"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:263
 msgid "View full changelog"
-msgstr ""
+msgstr "Vis full endringslogg"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:265
 msgid "Changelog"
-msgstr ""
+msgstr "Endringslogg"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:269
 msgid "View router debug information"
-msgstr ""
+msgstr "Vis ruterfeilrettingsinformasjon"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:271
 msgid "Debug"
-msgstr ""
+msgstr "Feilretting"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:275
 msgid "Review extended info about installed .jar and .war files"
-msgstr ""
+msgstr "Se over utvidet info om installerte .jar og .war-filer"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:277
 msgid "Jars"
@@ -4251,15 +4251,15 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:291
 msgid "Network database search tool"
-msgstr ""
+msgstr "Søkedatabase for nettverksdatabase"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:293
 msgid "NetDB Search"
-msgstr ""
+msgstr "NetDB-søk"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:297
 msgid "Signed proof of ownership of this router"
-msgstr ""
+msgstr "Signert eierskapsforhold for denne ruteren"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:299
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/proof_jsp.java:218
@@ -4268,7 +4268,7 @@ msgstr "Bevis"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:303
 msgid "Textual router performance statistics"
-msgstr ""
+msgstr "Tekstbasert statistikk av ruterytelse"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:309
 msgid "Review possible sybils in network database"
@@ -4294,29 +4294,29 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:332
 msgid "Local Identity"
-msgstr ""
+msgstr "Lokal identitet"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:336
 msgid "Your unique I2P router identity is"
-msgstr ""
+msgstr "Din unike I2P-identitet er"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:340
 msgid "never reveal it to anyone"
-msgstr ""
+msgstr "aldri avslør det til noen"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:342
 msgid "show"
-msgstr ""
+msgstr "vis"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:347
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:374
 msgid "The version of the I2P software we are running"
-msgstr ""
+msgstr "Versjonen av I2P-versjonen vi kjører"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:358
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:384
 msgid "How long we've been running for this session"
-msgstr ""
+msgstr "Hvor lenge denne økta har forløpt"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:418
 msgid ""
@@ -4325,25 +4325,25 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:429
 msgid "See more information on the wiki"
-msgstr ""
+msgstr "Se mer informasjon på wiki-en"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:431
 msgid "Warning: ECDSA is not available. Update your Java or OS"
-msgstr ""
+msgstr "Advarsel: ECDSA er ikke tilgjengelig. Oppdater Java eller OS-et ditt."
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:436
 #, java-format
 msgid "Warning: Java version {0} is no longer supported by I2P."
-msgstr ""
+msgstr "Advarsel: Java-versjon {0} støttes ikke lenger av I2P."
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:438
 #, java-format
 msgid "Update Java to version {0} or higher to receive I2P updates."
-msgstr ""
+msgstr "Oppdater Java til versjon {0} eller høyere for å motta I2P-oppdateringer."
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:450
 msgid "Configure I2P Updates"
-msgstr ""
+msgstr "Sett opp I2P-oppdateringer"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:452
 msgid "I2P Update"
@@ -4351,47 +4351,47 @@ msgstr "I2P-oppdatering"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:477
 msgid "Peers we've been talking to in the last few minutes/last hour"
-msgstr ""
+msgstr "Likemenn vi har vært i kontakt med de siste minuttene/siste timen."
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:480
 msgid "Active"
-msgstr ""
+msgstr "Aktiv"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:489
 msgid "The number of peers available for building client tunnels"
-msgstr ""
+msgstr "Antall likemenn tilgjengelig for bygging av klienttunneler"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:492
 msgid "Fast"
-msgstr ""
+msgstr "Rask"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:498
 msgid "The number of peers available for building exploratory tunnels"
-msgstr ""
+msgstr "Antall likemenn tilgjengelig for bygging av utforskningstunneler"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:501
 msgid "High capacity"
-msgstr ""
+msgstr "Høy kapasitet"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:507
 msgid "The number of peers available for network database inquiries"
-msgstr ""
+msgstr "Antall likemen tilgjengelig for nettverksdatabasespørringer"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:516
 msgid "The total number of peers in our network database"
-msgstr ""
+msgstr "Totalt antall likemenn i vår nettverksdatabse"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:519
 msgid "Known"
-msgstr ""
+msgstr "Kjent"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:539
 msgid "Configure router bandwidth allocation"
-msgstr ""
+msgstr "Sett opp ruterbåndbreddetildelig"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:541
 msgid "Bandwidth in/out"
-msgstr ""
+msgstr "BÃ¥ndbredde inn/ut"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:561
 msgid "Total"
@@ -4399,31 +4399,31 @@ msgstr "Total"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:568
 msgid "Used"
-msgstr ""
+msgstr "Brukt"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:590
 msgid ""
 "Used for building and testing tunnels, and communicating with floodfill "
 "peers"
-msgstr ""
+msgstr "Brukt for bygging og testing av tunneler, og kommunikasjon med flodfyll-likemenn"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:593
 msgid "Exploratory"
-msgstr ""
+msgstr "Utforskende"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:599
 msgid "Tunnels we are using to provide or access services on the network"
-msgstr ""
+msgstr "Tunneler brukt til å tilby eller nå tjenester på nettverket"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:608
 msgid ""
 "Tunnels we are participating in, directly contributing bandwidth to the "
 "network"
-msgstr ""
+msgstr "Tunneler brukt til deltagelse i, direkte bidrag av båndbredde til nettverket."
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:611
 msgid "Participating"
-msgstr ""
+msgstr "Deltagende"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:617
 msgid ""
@@ -4433,7 +4433,7 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:620
 msgid "Share ratio"
-msgstr ""
+msgstr "Delingsforhold"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:633
 msgid "What's in the router's job queue?"
@@ -4441,11 +4441,11 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:635
 msgid "Congestion"
-msgstr ""
+msgstr "Kødannelse"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:640
 msgid "Indicates router performance"
-msgstr ""
+msgstr "Indikerer ruterytelse"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:643
 msgid "Job lag"
@@ -4465,7 +4465,7 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:662
 msgid "Tunnel lag"
-msgstr ""
+msgstr "Tunnelforsinkelse"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:669
 msgid "Queued requests from other routers to participate in tunnels"
@@ -4477,7 +4477,7 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:708
 msgid "News &amp; Updates"
-msgstr ""
+msgstr "Nyheter og oppdateringer"
 
 #: ../java/src/net/i2p/router/web/SummaryHelper.java:185
 msgid "ERR-Client Manager I2CP Error - check logs"
@@ -4510,7 +4510,7 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/SummaryHelper.java:237
 msgid "Disconnected - check network connection"
-msgstr ""
+msgstr "Frakoblet - sjekk nettverkstilkobling"
 
 #: ../java/src/net/i2p/router/web/SummaryHelper.java:240
 msgid ""
@@ -4536,39 +4536,39 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/SummaryHelper.java:494
 msgid "Hidden Service"
-msgstr ""
+msgstr "Skjult tjeneste"
 
 #: ../java/src/net/i2p/router/web/SummaryHelper.java:498
 msgid "Show tunnels"
-msgstr ""
+msgstr "Vis tunneler"
 
 #: ../java/src/net/i2p/router/web/SummaryHelper.java:509
 msgid "Leases expired"
-msgstr ""
+msgstr "Leier utløpt"
 
 #. red or yellow light
 #: ../java/src/net/i2p/router/web/SummaryHelper.java:509
 #: ../java/src/net/i2p/router/web/SummaryHelper.java:510
 msgid "Rebuilding"
-msgstr ""
+msgstr "Gjenoppbygger"
 
 #: ../java/src/net/i2p/router/web/SummaryHelper.java:510
 msgid "ago"
-msgstr ""
+msgstr "siden"
 
 #. green light
 #: ../java/src/net/i2p/router/web/SummaryHelper.java:513
 msgid "Ready"
-msgstr ""
+msgstr "Klar"
 
 #. yellow light
 #: ../java/src/net/i2p/router/web/SummaryHelper.java:517
 msgid "Building"
-msgstr ""
+msgstr "Bygger"
 
 #: ../java/src/net/i2p/router/web/SummaryHelper.java:517
 msgid "Building tunnels"
-msgstr ""
+msgstr "Bygger tunneler"
 
 #. tunnel nicknames, taken from i2ptunnel.config so they will display
 #. nicely under 'local destinations' in the summary bar
@@ -4577,7 +4577,7 @@ msgstr ""
 #: ../java/src/net/i2p/router/web/SummaryHelper.java:532
 #: ../java/strings/Strings.java:36
 msgid "shared clients"
-msgstr ""
+msgstr "delte klienter"
 
 #: ../java/src/net/i2p/router/web/SummaryHelper.java:760
 msgid "Click Restart to install"
@@ -4605,7 +4605,7 @@ msgstr "Oppdateringer tilgjengelig"
 #: ../java/src/net/i2p/router/web/SummaryHelper.java:827
 #, java-format
 msgid "Download {0} Update"
-msgstr ""
+msgstr "Last ned {0} oppdatering"
 
 #. Note to translators: parameter is a router version, e.g. "0.9.19-16"
 #. <br> is optional, to help the browser make the lines even in the button
@@ -4614,7 +4614,7 @@ msgstr ""
 #: ../java/src/net/i2p/router/web/SummaryHelper.java:835
 #, java-format
 msgid "Download Signed<br>Development Update<br>{0}"
-msgstr ""
+msgstr "Last ned signert <br>utviklingsoppdatering<br>{0}"
 
 #. Note to translators: parameter is a date and time, e.g. "02-Mar 20:34 UTC"
 #. <br> is optional, to help the browser make the lines even in the button
@@ -4623,79 +4623,79 @@ msgstr ""
 #: ../java/src/net/i2p/router/web/SummaryHelper.java:843
 #, java-format
 msgid "Download Unsigned<br>Update {0}"
-msgstr ""
+msgstr "Last ned usignert<br>oppdatering {0}"
 
 #: ../java/src/net/i2p/router/web/SummaryHelper.java:867
 msgid "Help with firewall configuration"
-msgstr ""
+msgstr "Hjelp med brannmursoppsett"
 
 #: ../java/src/net/i2p/router/web/SummaryHelper.java:869
 msgid "Check network connection and NAT/firewall"
-msgstr ""
+msgstr "Sjekk nettverkstilkobling og NAT/brannmur"
 
 #: ../java/src/net/i2p/router/web/SummaryHelper.java:888
 msgid ""
 "Attempt to download router reference files (if automatic reseed has failed)"
-msgstr ""
+msgstr "Forsøk å laste ned ruterreferansefiler (hvis automatisk omsåing har mislyktes)"
 
 #: ../java/src/net/i2p/router/web/SummaryHelper.java:889
 msgid "Reseed"
-msgstr ""
+msgstr "SÃ¥ om"
 
 #: ../java/src/net/i2p/router/web/SummaryHelper.java:980
 msgid "Order"
-msgstr ""
+msgstr "Rekkefølge"
 
 #: ../java/src/net/i2p/router/web/SummaryHelper.java:1001
 msgid "Top"
-msgstr ""
+msgstr "Topp"
 
 #: ../java/src/net/i2p/router/web/SummaryHelper.java:1006
 msgid "Move to top"
-msgstr ""
+msgstr "Flytt til toppen"
 
 #: ../java/src/net/i2p/router/web/SummaryHelper.java:1016
 msgid "Move up"
-msgstr ""
+msgstr "Flytt oppover"
 
 #: ../java/src/net/i2p/router/web/SummaryHelper.java:1024
 msgid "Down"
-msgstr ""
+msgstr "Nedover"
 
 #: ../java/src/net/i2p/router/web/SummaryHelper.java:1029
 msgid "Move down"
-msgstr ""
+msgstr "Flytt nedover"
 
 #: ../java/src/net/i2p/router/web/SummaryHelper.java:1034
 msgid "Bottom"
-msgstr ""
+msgstr "Bunn"
 
 #: ../java/src/net/i2p/router/web/SummaryHelper.java:1039
 msgid "Move to bottom"
-msgstr ""
+msgstr "Flytt til bunnen"
 
 #: ../java/src/net/i2p/router/web/SummaryHelper.java:1050
 msgid "Select a section to add"
-msgstr ""
+msgstr "Velg en del å legge til"
 
 #: ../java/src/net/i2p/router/web/SummaryRenderer.java:163
 #, java-format
 msgid "events in {0}"
-msgstr ""
+msgstr "hendelser i {0}"
 
 #: ../java/src/net/i2p/router/web/SummaryRenderer.java:165
 #, java-format
 msgid "averaged for {0}"
-msgstr ""
+msgstr "gjennomsnitt for {0}"
 
 #: ../java/src/net/i2p/router/web/SummaryRenderer.java:175
 msgid "Events per period"
-msgstr ""
+msgstr "Hendelser per periode"
 
 #: ../java/src/net/i2p/router/web/SummaryRenderer.java:199
 #: ../java/src/net/i2p/router/web/SummaryRenderer.java:212
 msgid "Now"
-msgstr ""
+msgstr "NÃ¥"
 
 #: ../java/src/net/i2p/router/web/SybilRenderer.java:884
 msgid "Addresses"
@@ -4703,12 +4703,12 @@ msgstr "Adresser"
 
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:36
 msgid "Configure tunnels"
-msgstr ""
+msgstr "Sett opp tunneler"
 
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:36
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:60
 msgid "configure"
-msgstr ""
+msgstr "sett opp"
 
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:58
 msgid "Client tunnels for"
@@ -4716,40 +4716,40 @@ msgstr "Klient-tunneler for"
 
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:60
 msgid "Configure tunnels for session"
-msgstr ""
+msgstr "Sett opp tunneler for økt"
 
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:62
 msgid "dead"
-msgstr ""
+msgstr "død"
 
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:67
 msgid "Participating tunnels"
-msgstr ""
+msgstr "Deltagende tunneler"
 
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:70
 msgid "Receive on"
-msgstr ""
+msgstr "Ta imot på"
 
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:71
 msgid "Expiration"
-msgstr ""
+msgstr "Utløp"
 
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:71
 msgid "Send on"
-msgstr ""
+msgstr "Send på"
 
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:72
 msgid "Rate"
-msgstr ""
+msgstr "Hastighet"
 
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:72
 msgid "Role"
-msgstr ""
+msgstr "Rolle"
 
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:72
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:167
 msgid "Usage"
-msgstr ""
+msgstr "Bruk"
 
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:112
 msgid "grace period"
@@ -4757,16 +4757,16 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:122
 msgid "Outbound Endpoint"
-msgstr ""
+msgstr "Utgående endepunkt"
 
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:124
 msgid "Inbound Gateway"
-msgstr ""
+msgstr "Inngående portner"
 
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:126
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:173
 msgid "Participant"
-msgstr ""
+msgstr "Deltager"
 
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:132
 #, java-format
@@ -4780,36 +4780,36 @@ msgstr ""
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:137
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:232
 msgid "Lifetime bandwidth usage"
-msgstr ""
+msgstr "Livslang båndbreddebruk"
 
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:166
 msgid "Inbound or outbound?"
-msgstr ""
+msgstr "Inngående eller utgående?"
 
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:167
 msgid "Expiry"
-msgstr ""
+msgstr "Utløp"
 
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:170
 msgid "Participants"
-msgstr ""
+msgstr "Deltagere"
 
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:176
 msgid "Endpoint"
-msgstr ""
+msgstr "Sluttpunkt"
 
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:218
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:226
 msgid "Build in progress"
-msgstr ""
+msgstr "Innebygd prosess"
 
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:218
 msgid "inbound"
-msgstr ""
+msgstr "innkommende"
 
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:226
 msgid "outbound"
-msgstr ""
+msgstr "utgående"
 
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:231
 msgid "No tunnels; waiting for the grace period to end."
@@ -4817,11 +4817,11 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:233
 msgid "in"
-msgstr ""
+msgstr "inn"
 
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:234
 msgid "out"
-msgstr ""
+msgstr "ut"
 
 #. wars for ConfigClientsHelper
 #: ../java/strings/Strings.java:12
@@ -4831,30 +4831,30 @@ msgstr "adressebok"
 
 #: ../java/strings/Strings.java:13
 msgid "i2psnark"
-msgstr ""
+msgstr "i2psnark"
 
 #: ../java/strings/Strings.java:14
 msgid "i2ptunnel"
-msgstr ""
+msgstr "i2ptunnel"
 
 #: ../java/strings/Strings.java:15
 msgid "susimail"
-msgstr ""
+msgstr "susimail"
 
 #: ../java/strings/Strings.java:16
 msgid "susidns"
-msgstr ""
+msgstr "susidns"
 
 #: ../java/strings/Strings.java:17
 msgid "routerconsole"
-msgstr ""
+msgstr "ruterkonsoll"
 
 #. clients, taken from clients.config, for ConfigClientsHelper
 #. note that if the wording changes in clients.config, we have to
 #. keep the old string here as well for existing installs
 #: ../java/strings/Strings.java:22
 msgid "Web console"
-msgstr ""
+msgstr "Vevkonsoll"
 
 #: ../java/strings/Strings.java:23
 msgid "SAM application bridge"
@@ -4862,7 +4862,7 @@ msgstr ""
 
 #: ../java/strings/Strings.java:24
 msgid "Application tunnels"
-msgstr ""
+msgstr "Programtunneler"
 
 #: ../java/strings/Strings.java:25
 msgid "My eepsite web server"
@@ -4874,7 +4874,7 @@ msgstr ""
 
 #: ../java/strings/Strings.java:27
 msgid "Browser launch at startup"
-msgstr ""
+msgstr "Nettleserigangsettelse ved oppstart"
 
 #: ../java/strings/Strings.java:28
 msgid "BOB application bridge"
@@ -4890,7 +4890,7 @@ msgstr ""
 
 #: ../java/strings/Strings.java:38
 msgid "IRC proxy"
-msgstr ""
+msgstr "IRC-mellomtjener"
 
 #: ../java/strings/Strings.java:39
 msgid "eepsite"
@@ -4898,11 +4898,11 @@ msgstr ""
 
 #: ../java/strings/Strings.java:40
 msgid "I2P webserver"
-msgstr ""
+msgstr "I2P-vevtjener"
 
 #: ../java/strings/Strings.java:41
 msgid "HTTP Proxy"
-msgstr ""
+msgstr "HTTP-mellomtjener"
 
 #. older names for pre-0.7.4 installs
 #: ../java/strings/Strings.java:43
@@ -4911,7 +4911,7 @@ msgstr ""
 
 #: ../java/strings/Strings.java:44
 msgid "ircProxy"
-msgstr ""
+msgstr "ircProxy"
 
 #. hardcoded in i2psnark
 #: ../java/strings/Strings.java:46
@@ -4921,7 +4921,7 @@ msgstr "I2PSnark"
 #. hardcoded in iMule?
 #: ../java/strings/Strings.java:48
 msgid "iMule"
-msgstr ""
+msgstr "iMule"
 
 #. standard themes for ConfigUIHelper
 #: ../java/strings/Strings.java:52
@@ -4930,23 +4930,23 @@ msgstr "klassisk"
 
 #: ../java/strings/Strings.java:53
 msgid "dark"
-msgstr ""
+msgstr "mørk"
 
 #: ../java/strings/Strings.java:54
 msgid "light"
-msgstr ""
+msgstr "lys"
 
 #: ../java/strings/Strings.java:55
 msgid "midnight"
-msgstr ""
+msgstr "midnatt"
 
 #: ../java/strings/Strings.java:59
 msgid "BandwidthLimiter"
-msgstr ""
+msgstr "BÃ¥ndbreddebegrenser"
 
 #: ../java/strings/Strings.java:60
 msgid "ClientMessages"
-msgstr ""
+msgstr "Klientmeldinger"
 
 #: ../java/strings/Strings.java:61
 msgid "Encryption"
@@ -4954,7 +4954,7 @@ msgstr "Kryptering"
 
 #: ../java/strings/Strings.java:62
 msgid "i2cp"
-msgstr ""
+msgstr "i2cp"
 
 #: ../java/strings/Strings.java:64
 msgid "InNetPool"
@@ -4966,7 +4966,7 @@ msgstr ""
 
 #: ../java/strings/Strings.java:66
 msgid "NetworkDatabase"
-msgstr ""
+msgstr "Nettverksdatabase"
 
 #: ../java/strings/Strings.java:67
 msgid "ntcp"
@@ -4974,38 +4974,38 @@ msgstr ""
 
 #: ../java/strings/Strings.java:70
 msgid "Stream"
-msgstr ""
+msgstr "Strøm"
 
 #: ../java/strings/Strings.java:71
 msgid "Throttle"
-msgstr ""
+msgstr "Begrens"
 
 #: ../java/strings/Strings.java:72
 msgid "Transport"
-msgstr ""
+msgstr "Overføring"
 
 #: ../java/strings/Strings.java:74
 msgid "udp"
-msgstr ""
+msgstr "UDP"
 
 #. parameters in transport addresses (netdb.jsp)
 #. may or may not be worth translating
 #: ../java/strings/Strings.java:78
 msgid "host"
-msgstr ""
+msgstr "vert"
 
 #: ../java/strings/Strings.java:79
 msgid "key"
-msgstr ""
+msgstr "nøkkel"
 
 #: ../java/strings/Strings.java:80
 msgid "port"
-msgstr ""
+msgstr "port"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/certs_jsp.java:216
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/certs_jsp.java:380
 msgid "Certificates"
-msgstr ""
+msgstr "Sertifikater"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/certs_jsp.java:219
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:221
@@ -5111,7 +5111,7 @@ msgstr "Ruter er nede"
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/viewprofile_jsp.java:367
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/webmail_jsp.java:383
 msgid "Refresh (s)"
-msgstr ""
+msgstr "Gjenoppfrisk (s)"
 
 #. ditto
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/certs_jsp.java:371
@@ -5168,15 +5168,15 @@ msgstr "Slå på"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:218
 msgid "configure bandwidth"
-msgstr ""
+msgstr "sett opp båndbredde"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:493
 msgid "Bandwidth Limiter"
-msgstr ""
+msgstr "BÃ¥ndbreddebegrenser"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:495
 msgid "Advanced Network Configuration"
-msgstr ""
+msgstr "Avansert nettverksoppsett"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:497
 msgid ""
@@ -5186,11 +5186,11 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:501
 msgid "KBps In"
-msgstr ""
+msgstr "KBps inn"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:515
 msgid "KBps Out"
-msgstr ""
+msgstr "KBps ut"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:530
 msgid "Share"
@@ -5199,16 +5199,16 @@ msgstr "Del"
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:537
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:541
 msgid "NOTE"
-msgstr ""
+msgstr "MERK"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:539
 #, java-format
 msgid "You have configured I2P to share only {0} KBps."
-msgstr ""
+msgstr "Du har satt opp I2P til å bare bruke {0} KBps."
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:542
 msgid "I2P requires at least 12KBps to enable sharing. "
-msgstr ""
+msgstr "I2P krever minst 12KBps for å skru på deling. "
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:543
 msgid ""
@@ -5219,12 +5219,12 @@ msgstr ""
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:544
 msgid ""
 "It improves your anonymity by creating cover traffic, and helps the network."
-msgstr ""
+msgstr "Det forbedrer din anonymitetsgrad ved å lage dekningstrafikk, og hjelper nettverket."
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:546
 #, java-format
 msgid "You have configured I2P to share {0} KBps."
-msgstr ""
+msgstr "Du har satt opp I2P til å dele {0} KBps."
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:549
 msgid ""
@@ -5257,15 +5257,15 @@ msgstr "Avbryt"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:218
 msgid "config advanced"
-msgstr ""
+msgstr "sett opp avansert"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:390
 msgid "I2P Advanced Configuration"
-msgstr ""
+msgstr "Avansert oppsett av I2P"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:491
 msgid "Floodfill Configuration"
-msgstr ""
+msgstr "Flodfyll-oppsett"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:493
 msgid ""
@@ -5275,23 +5275,23 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:498
 msgid "This router is currently a floodfill participant."
-msgstr ""
+msgstr "Denne ruteren er for tiden en flodfyll-deltager."
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:502
 msgid "This router is not currently a floodfill participant."
-msgstr ""
+msgstr "Denne ruteren er for tiden ikke en flodfyll-deltager."
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:509
 msgid "Enrollment"
-msgstr ""
+msgstr "Innrullering"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:515
 msgid "Automatic"
-msgstr ""
+msgstr "Automatisk"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:521
 msgid "Force On"
-msgstr ""
+msgstr "Tving på"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:527
 msgid "Disable"
@@ -5299,63 +5299,63 @@ msgstr "Skru av"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:531
 msgid "Advanced I2P Configuration"
-msgstr ""
+msgstr "Avansert I2p-oppsett"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:543
 msgid "Some changes may require a restart to take effect."
-msgstr ""
+msgstr "Noen endringer kan kreve en omstart for å tre i effekt."
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:547
 #, java-format
 msgid "To make changes, edit the file: {0}"
-msgstr ""
+msgstr "For å gjøre endringer, rediger filen: {0}"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:220
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configi2cp_jsp.java:220
 msgid "config clients"
-msgstr ""
+msgstr "sett opp klienter"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:422
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configi2cp_jsp.java:422
 msgid "I2P Client Configuration"
-msgstr ""
+msgstr "I2P-klientoppsett"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:535
 msgid "Client Configuration"
-msgstr ""
+msgstr "Klientoppsett"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:537
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configi2cp_jsp.java:535
 msgid "Advanced Client Interface Configuration"
-msgstr ""
+msgstr "Avansert klientgrensesnitt-oppsett"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:539
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configplugins_jsp.java:422
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configplugins_jsp.java:540
 msgid "Plugin Configuration"
-msgstr ""
+msgstr "Programtilleggsoppsett"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:541
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configwebapps_jsp.java:422
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configwebapps_jsp.java:535
 msgid "WebApp Configuration"
-msgstr ""
+msgstr "WebApp-oppsett"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:543
 msgid ""
 "The Java clients listed below are started by the router and run in the same "
 "JVM."
-msgstr ""
+msgstr "Javaklientene listet opp nedenfor blir startet av samme ruter og kjører i samme JVM."
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:545
 msgid "To change other client options, edit the file"
-msgstr ""
+msgstr "For å endre andre klientvalg, rediger fila"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:549
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configi2cp_jsp.java:545
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configwebapps_jsp.java:541
 msgid "All changes require restart to take effect."
-msgstr ""
+msgstr "Alle endringer krever at du starter om før de trer i effekt."
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:551
 msgid ""
@@ -5374,7 +5374,7 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configfamily_jsp.java:531
 msgid "Routers in the same family share a family key."
-msgstr ""
+msgstr "Rutere i samme familie deler en familienøkkel."
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configfamily_jsp.java:533
 msgid ""
@@ -5384,7 +5384,7 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configfamily_jsp.java:535
 msgid "To start a new family, enter a family name."
-msgstr ""
+msgstr "For å starte en ny familie, skriv inn et familienavn."
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configfamily_jsp.java:547
 msgid ""
@@ -5394,34 +5394,34 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configfamily_jsp.java:549
 msgid "Select secret key file"
-msgstr ""
+msgstr "Velg hemmelig nøkkelfil"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configfamily_jsp.java:551
 msgid "Join Family"
-msgstr ""
+msgstr "Ta del i familie"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configfamily_jsp.java:557
 msgid "Family Name"
-msgstr ""
+msgstr "Familienavn"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configfamily_jsp.java:559
 msgid "Create Family"
-msgstr ""
+msgstr "Opprett familie"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configfamily_jsp.java:569
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configfamily_jsp.java:573
 msgid "Export Family Key"
-msgstr ""
+msgstr "Eksporter familienøkkel"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configfamily_jsp.java:571
 msgid ""
 "Export the secret family key to be imported into other routers you control."
-msgstr ""
+msgstr "Eksporter den hemmelige familienøkkelen for import inn i andre rutere du kontrollerer."
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configfamily_jsp.java:580
 #, java-format
 msgid "Restart required to activate family {0}."
-msgstr ""
+msgstr "Omstart kreves for å aktivere familien {0}."
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configfamily_jsp.java:582
 msgid "After restarting, you may export the family key."
@@ -5434,7 +5434,7 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configfamily_jsp.java:594
 msgid "Leave Family"
-msgstr ""
+msgstr "Forlat familie"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:220
 msgid "config home"
@@ -5442,11 +5442,11 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:530
 msgid "Default Home Page"
-msgstr ""
+msgstr "Forvalgt hjemmeside"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:536
 msgid "Use old home page"
-msgstr ""
+msgstr "Bruk gammel hjemmeside"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:544
 msgid "Search Engines"
@@ -5455,18 +5455,18 @@ msgstr "Søkemotorer"
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:564
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/home_jsp.java:474
 msgid "Applications and Configuration"
-msgstr ""
+msgstr "Programmer og oppsett"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:580
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/home_jsp.java:478
 msgid "Hidden Services of Interest"
-msgstr ""
+msgstr "Skjul tjenester av interesse"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configi2cp_jsp.java:539
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:540
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:571
 msgid "The default settings will work for most people."
-msgstr ""
+msgstr "De forvalgte innstillingene vil fungere for de fleste"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configi2cp_jsp.java:541
 msgid "Any changes made here must also be configured in the external client."
@@ -5478,7 +5478,7 @@ msgstr "Mange klienter støtter ikke SSL eller identitetsbekreftelse."
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configi2cp_jsp.java:547
 msgid "External I2CP (I2P Client Protocol) Interface Configuration"
-msgstr ""
+msgstr "Ekstern I2CP (I2P-klientprotokoll) Grensesnittsoppsett"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configi2cp_jsp.java:553
 msgid "Enabled without SSL"
@@ -5490,31 +5490,31 @@ msgstr "Aktivert med SSL påkrevd"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configi2cp_jsp.java:565
 msgid "Disabled - Clients outside this Java process may not connect"
-msgstr ""
+msgstr "Avskrudd - Det kan hende klienter utenfor denne Java-prosessen ikke kobler til"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configi2cp_jsp.java:567
 msgid "I2CP Interface"
-msgstr ""
+msgstr "I2CP-grensesnitt"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configi2cp_jsp.java:583
 msgid "I2CP Port"
-msgstr ""
+msgstr "I2CP-port"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configi2cp_jsp.java:587
 msgid "Authorization"
-msgstr ""
+msgstr "Identitetsbekreftelse"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configi2cp_jsp.java:593
 msgid "Require username and password"
-msgstr ""
+msgstr "Krev brukernavn og passord"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:220
 msgid "config keyring"
-msgstr ""
+msgstr "sett opp nøkkelring"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:408
 msgid "I2P Keyring Configuration"
-msgstr ""
+msgstr "I2P-nøkkelringsoppsett"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:533
 msgid "The router keyring is used to decrypt encrypted leaseSets."
@@ -5539,7 +5539,7 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:549
 msgid "I2PTunnel page"
-msgstr ""
+msgstr "I2P-tunnelside"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:551
 msgid "Dest. name, hash, or full key"
@@ -5555,32 +5555,32 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:390
 msgid "I2P Logging Configuration"
-msgstr ""
+msgstr "Oppsett av I2P-innlogging"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:493
 msgid "Configure I2P Logging Options"
-msgstr ""
+msgstr "Sett opp I2P-loggføringsalternativ"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:495
 msgid "View Router Logs"
-msgstr ""
+msgstr "Vis ruterloggføring"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:497
 msgid "View Logs"
-msgstr ""
+msgstr "Vis loggføring"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:499
 msgid "Log file"
-msgstr ""
+msgstr "Loggfil"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:501
 #, java-format
 msgid "Edit {0} to change"
-msgstr ""
+msgstr "Rediger {0} for å endre"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:505
 msgid "(the symbol '@' will be replaced during log rotation)"
-msgstr ""
+msgstr "(symbolet '@' vil bli erstattet under loggrotering)"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:507
 msgid "Log record format"
@@ -5593,7 +5593,7 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:513
 msgid "Log date format"
-msgstr ""
+msgstr "Datologgformat"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:517
 msgid ""
@@ -5603,7 +5603,7 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:519
 msgid "Max log file size"
-msgstr ""
+msgstr "Maks. loggføringsstørrelse"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:523
 msgid "Default log level"
@@ -5617,27 +5617,27 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:529
 msgid "Log level overrides"
-msgstr ""
+msgstr "Loggnivå overstyrer"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:533
 msgid "New override"
-msgstr ""
+msgstr "Ny overstyring"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:220
 msgid "config networking"
-msgstr ""
+msgstr "sett opp nettverk"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:419
 msgid "I2P Network Configuration"
-msgstr ""
+msgstr "I2P-nettverksoppsett"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:534
 msgid "IP and Transport Configuration"
-msgstr ""
+msgstr "IP og transport-oppsett"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:536
 msgid "Help with router configuration"
-msgstr ""
+msgstr "Hjelp med ruteroppsett"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:538
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005far_jsp.java:398
@@ -5646,40 +5646,40 @@ msgstr ""
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005fru_jsp.java:397
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_jsp.java:409
 msgid "Configuration Help"
-msgstr ""
+msgstr "Oppsettshjelp"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:542
 msgid "Changing these settings will restart your router."
-msgstr ""
+msgstr "Endring av disse innstillingene vil starte ruteren din på nytt."
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:544
 msgid "UPnP Configuration"
-msgstr ""
+msgstr "UPnP-oppsett"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:550
 msgid "Enable UPnP to open firewall ports"
-msgstr ""
+msgstr "Aktiver UPnP for å åpne brannmursporter."
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:552
 msgid "IP Configuration"
-msgstr ""
+msgstr "IP-oppsett"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:554
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:652
 msgid "Externally reachable hostname or IP address"
-msgstr ""
+msgstr "Eksternt tilgjengelig vertsnavn eller IP-adresse"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:558
 msgid "Use all auto-detect methods"
-msgstr ""
+msgstr "Bruk automatiske oppdagningsmetoder"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:562
 msgid "Disable UPnP IP address detection"
-msgstr ""
+msgstr "Skru av UPnP-basert oppdagelse av IP-adresser"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:566
 msgid "Ignore local interface IP address"
-msgstr ""
+msgstr "Ignorer IP-adresser på lokalt grensesnitt"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:570
 msgid "Use SSU IP address detection only"
@@ -5687,35 +5687,35 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:574
 msgid "Hidden mode - do not publish IP"
-msgstr ""
+msgstr "Skjult modus - ikke offentliggjør IP"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:576
 msgid "(prevents participating traffic)"
-msgstr ""
+msgstr "(forhindrer deltagende trafikk)"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:580
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:670
 msgid "Specify hostname or IP"
-msgstr ""
+msgstr "Spesifiser vertsnavn eller IP"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:584
 msgid "Action when IP changes"
-msgstr ""
+msgstr "Handling når IP endres"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:588
 msgid ""
 "Laptop mode - Change router identity and UDP port when IP changes for "
 "enhanced anonymity"
-msgstr ""
+msgstr "Bærbarmodus - Endre ruteridentitet og UDP-port når IP endres for forbedret anonymitet"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:590
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:624
 msgid "Experimental"
-msgstr ""
+msgstr "Eksperimentelt"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:592
 msgid "IPv4 Configuration"
-msgstr ""
+msgstr "IPv4-oppsett"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:596
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:602
@@ -5724,7 +5724,7 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:598
 msgid "IPv6 Configuration"
-msgstr ""
+msgstr "IPv6-oppsett"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:606
 msgid "Disable IPv6"
@@ -5744,11 +5744,11 @@ msgstr "Foretrekk IPv6 over IPv4"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:622
 msgid "Use IPv6 only (disable IPv4)"
-msgstr ""
+msgstr "Kun bruk IPv6 (skru av IPv4)"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:626
 msgid "UDP Configuration"
-msgstr ""
+msgstr "UDP-oppsett"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:628
 msgid ""
@@ -5758,12 +5758,12 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:630
 msgid "UDP port:"
-msgstr ""
+msgstr "UDP-port:"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:636
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:680
 msgid "Completely disable"
-msgstr ""
+msgstr "Skru av helt"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:638
 msgid "(select only if behind a firewall that blocks outbound UDP)"
@@ -5771,37 +5771,37 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:650
 msgid "TCP Configuration"
-msgstr ""
+msgstr "TCP-oppsett"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:656
 msgid "Use auto-detected IP address"
-msgstr ""
+msgstr "Bruk automatisk oppdaget IP-adresse"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:658
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:690
 msgid "currently"
-msgstr ""
+msgstr "nåværende"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:662
 msgid "if we are not firewalled"
-msgstr ""
+msgstr "hvis vi ikke er brannmurt"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:666
 msgid "Always use auto-detected IP address (Not firewalled)"
-msgstr ""
+msgstr "Alltid bruk automatisk oppdaget IP-adresse (Ikke brannmurt)"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:676
 msgid "Disable inbound (Firewalled)"
-msgstr ""
+msgstr "Skru av inngående (Brannmurt)"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:682
 msgid ""
 "(select only if behind a firewall that throttles or blocks outbound TCP)"
-msgstr ""
+msgstr "(velg bare hvis bak brannmur som begrenser eller blokerer utgående TCP)"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:684
 msgid "Externally reachable TCP port"
-msgstr ""
+msgstr "Eksternt tilgjengelig TCP-port"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:688
 msgid "Use the same port configured for UDP"
@@ -5809,19 +5809,19 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:696
 msgid "Specify Port"
-msgstr ""
+msgstr "Angi port"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:220
 msgid "config peers"
-msgstr ""
+msgstr "sett opp likemenn"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:408
 msgid "I2P Peer Configuration"
-msgstr ""
+msgstr "I2P-likemannsoppsett"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:540
 msgid "Manual Peer Controls"
-msgstr ""
+msgstr "Manuelll likemannskontroll"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:542
 msgid "Router Hash"
@@ -5850,19 +5850,19 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:562
 msgid "profiles page"
-msgstr ""
+msgstr "side for profiler"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:580
 msgid "Banned Peers"
-msgstr ""
+msgstr "Bannlyste likemenn"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:599
 msgid "Banned IPs"
-msgstr ""
+msgstr "Bannlyste IP-er"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configplugins_jsp.java:220
 msgid "config plugins"
-msgstr ""
+msgstr "sett opp programtillegg"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configplugins_jsp.java:542
 msgid "The plugins listed below are started by the webConsole client."
@@ -5870,24 +5870,24 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configplugins_jsp.java:557
 msgid "Plugin Installation"
-msgstr ""
+msgstr "Installasjon av programtillegg"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configplugins_jsp.java:559
 #, java-format
 msgid "Look for available plugins on {0}."
-msgstr ""
+msgstr "Se etter tilgjengelig programtillegg på {0}."
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configplugins_jsp.java:561
 msgid "Installation from URL"
-msgstr ""
+msgstr "Installasjon fra nettadresse"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configplugins_jsp.java:565
 msgid "To install a plugin, enter the download URL:"
-msgstr ""
+msgstr "For å installere et programtillegg, skriv inn nedlastningsnettadressen:"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configplugins_jsp.java:573
 msgid "Installation from File"
-msgstr ""
+msgstr "Installasjon fra fil"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configplugins_jsp.java:577
 msgid "Select xpi2p or su3 file"
@@ -5895,7 +5895,7 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configplugins_jsp.java:586
 msgid "Update All Plugins"
-msgstr ""
+msgstr "Oppdater alle programtillegg"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:220
 msgid "config reseeding"
@@ -5987,15 +5987,15 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:581
 msgid "Try SSL first then non-SSL"
-msgstr ""
+msgstr "Prøv SSL først og så unngå det"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:587
 msgid "Use SSL only"
-msgstr ""
+msgstr "Bare bruk SSL"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:593
 msgid "Use non-SSL only"
-msgstr ""
+msgstr "Unngå bruk av SSL"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:595
 msgid "Reseed URLs"
@@ -6003,15 +6003,15 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:601
 msgid "Enable HTTP Proxy?"
-msgstr ""
+msgstr "Skru på HTTP-mellomtjener?"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:605
 msgid "HTTP Proxy Host"
-msgstr ""
+msgstr "HTTP-mellomtjeningsvert"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:609
 msgid "HTTP Proxy Port"
-msgstr ""
+msgstr "HTTP-mellomtjeningsport"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:613
 msgid "Use HTTP Proxy Authorization?"
@@ -6019,35 +6019,35 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:617
 msgid "HTTP Proxy Username"
-msgstr ""
+msgstr "Brukernavn for HTTP-mellomtjener"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:621
 msgid "HTTP Proxy Password"
-msgstr ""
+msgstr "Passord for HTTP-mellomtjener"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:625
 msgid "Enable HTTPS Proxy?"
-msgstr ""
+msgstr "Skru på HTTPS-mellomtjener?"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:629
 msgid "HTTPS Proxy Host"
-msgstr ""
+msgstr "HTTPS-mellomtjeningsvert"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:633
 msgid "HTTPS Proxy Port"
-msgstr ""
+msgstr "HTTPS-mellomtjeningsport"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:637
 msgid "Use HTTPS Proxy Authorization?"
-msgstr ""
+msgstr "Bruk identitetsbekreftelse for HTTPS-mellomtjener"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:641
 msgid "HTTPS Proxy Username"
-msgstr ""
+msgstr "Brukernavn for HTTPS-mellomtjener"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:645
 msgid "HTTPS Proxy Password"
-msgstr ""
+msgstr "Passord for HTTPS-mellomtjener"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:220
 msgid "config service"
@@ -6055,11 +6055,11 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:408
 msgid "I2P Service Configuration"
-msgstr ""
+msgstr "Oppsett av I2P-tjeneste"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:523
 msgid "Shutdown the router"
-msgstr ""
+msgstr "Skru av ruteren"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:525
 msgid ""
@@ -6075,13 +6075,13 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:541
 msgid "Restart the router"
-msgstr ""
+msgstr "Start ruteren på nytt"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:543
 msgid ""
 "If you want the router to restart itself after shutting down, you can choose"
 " one of the following."
-msgstr ""
+msgstr "Hvis du ønsker at ruteren skal starte på nytt etter å ha slått seg av, kan du velge én av følgende:"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:545
 msgid ""
@@ -6104,11 +6104,11 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:559
 msgid "Systray integration"
-msgstr ""
+msgstr "Systemkurvintegrasjon"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:561
 msgid "Control the system tray icon"
-msgstr ""
+msgstr "Kontroller systremkurvikonet"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:578
 msgid "Run on startup"
@@ -6130,7 +6130,7 @@ msgstr "eller"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:590
 msgid "Note"
-msgstr ""
+msgstr "Merk"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:592
 msgid ""
@@ -6179,11 +6179,11 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configsidebar_jsp.java:534
 msgid "Refresh Interval"
-msgstr ""
+msgstr "Oppdateringsintervall"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configsidebar_jsp.java:540
 msgid "seconds"
-msgstr ""
+msgstr "sekunder"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configsidebar_jsp.java:544
 msgid "Customize Summary Bar"
@@ -6195,11 +6195,11 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:382
 msgid "I2P Stats Configuration"
-msgstr ""
+msgstr "Oppsett av I2P-statistikk"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:493
 msgid "Configure I2P Stat Collection"
-msgstr ""
+msgstr "Sett opp innsamling av I2P-statistikk"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:495
 msgid "Toggle full stat collection and all graphing options"
@@ -6208,19 +6208,19 @@ msgstr ""
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:497
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:536
 msgid "toggle all"
-msgstr ""
+msgstr "veksle alle"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:499
 msgid "Enable full stats?"
-msgstr ""
+msgstr "Skru på all statistikk?"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:506
 msgid "change requires restart to take effect"
-msgstr ""
+msgstr "endring krever omstart før den trer i effekt"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:515
 msgid "Stat file"
-msgstr ""
+msgstr "Statistikkfil"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:532
 msgid "Toggle section graphing options"
@@ -6228,7 +6228,7 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:544
 msgid "Log"
-msgstr ""
+msgstr "Logg"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:552
 msgid "Select stats for visualization on /graphs"
@@ -6236,11 +6236,11 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:555
 msgid "Graph"
-msgstr ""
+msgstr "Graf"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:616
 msgid "Advanced filter"
-msgstr ""
+msgstr "Avansert filter"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:220
 msgid "config tunnels"
@@ -6248,7 +6248,7 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:419
 msgid "I2P Tunnel Configuration"
-msgstr ""
+msgstr "I2P-tunneloppsett"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:531
 msgid "The default settings work for most people."
@@ -6292,19 +6292,19 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:218
 msgid "config UI"
-msgstr ""
+msgstr "oppsettsgrensesnitt"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:390
 msgid "I2P UI Configuration"
-msgstr ""
+msgstr "I2P-grensesnittsoppsett"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:491
 msgid "Router Console Theme"
-msgstr ""
+msgstr "Ruterkonsolldrakt"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:503
 msgid "Theme selection disabled for Internet Explorer, sorry."
-msgstr ""
+msgstr "Draktvalg avskrudd for Internet Explorer, beklager."
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:505
 msgid ""
@@ -6316,11 +6316,11 @@ msgstr ""
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:511
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:525
 msgid "Apply"
-msgstr ""
+msgstr "Bruk"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:513
 msgid "Router Console Language"
-msgstr ""
+msgstr "Ruterkonsollspråk"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:521
 msgid ""
@@ -6330,23 +6330,23 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:527
 msgid "Router Console Password"
-msgstr ""
+msgstr "Passord for ruterkonsoll"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:218
 msgid "config update"
-msgstr ""
+msgstr "oppsettsoppdatering"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:382
 msgid "I2P Update Configuration"
-msgstr ""
+msgstr "I2P-oppdateringsoppsett"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:499
 msgid "Check for I2P and News Updates"
-msgstr ""
+msgstr "Se etter I2P-nyheter og -oppdateringer"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:501
 msgid "News &amp; I2P Updates"
-msgstr ""
+msgstr "Nyheter og I2P-oppdateringer"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:505
 msgid "Check for news updates"
@@ -6358,67 +6358,67 @@ msgstr "Nyhetsoppdateringer"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:515
 msgid "Update In Progress"
-msgstr ""
+msgstr "Oppdatering underveis"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:523
 msgid "News URL"
-msgstr ""
+msgstr "Nyhetsnettadresse"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:531
 msgid "Refresh frequency"
-msgstr ""
+msgstr "Oppdateringsfrekvens"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:537
 msgid "Update policy"
-msgstr ""
+msgstr "Oppdateringspraksis"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:543
 msgid "Fetch news through the eepProxy?"
-msgstr ""
+msgstr "Hent nyheter gjennom eepProxy?"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:547
 msgid "Update through the eepProxy?"
-msgstr ""
+msgstr "Oppdater gjennom eepProxy?"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:553
 msgid "eepProxy host"
-msgstr ""
+msgstr "eepProxy-vert"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:557
 msgid "eepProxy port"
-msgstr ""
+msgstr "eepProxy-port"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:565
 msgid "Update URLs"
-msgstr ""
+msgstr "Oppdateringsnettadresser"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:569
 msgid "Trusted keys"
-msgstr ""
+msgstr "Betrodde nøkler"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:573
 msgid "Update with signed development builds?"
-msgstr ""
+msgstr "Oppdater med signerte utviklingsbygg?"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:577
 msgid "Signed Build URL"
-msgstr ""
+msgstr "Signert byggnettadresse"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:581
 msgid "Update with unsigned development builds?"
-msgstr ""
+msgstr "Oppdater med usignerte utviklingsbygg?"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:585
 msgid "Unsigned Build URL"
-msgstr ""
+msgstr "Usignert byggnettadresse"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:592
 msgid "Updates will be dispatched via your package manager."
-msgstr ""
+msgstr "Oppdateringer vil avhendes via din pakkebehandler."
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configwebapps_jsp.java:220
 msgid "config webapps"
-msgstr ""
+msgstr "sett oppvevprogrammer"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configwebapps_jsp.java:537
 msgid ""
@@ -6428,7 +6428,7 @@ msgid ""
 "(e.g. i2psnark), front-ends to another client or application which must be "
 "separately enabled (e.g. susidns, i2ptunnel), or have no web interface at "
 "all (e.g. addressbook)."
-msgstr ""
+msgstr "Java-vevprogrammene listet opp nedenfor startes av webConsole-kklienten og kjører i samme JVM som ruteren. De er vanligvis vevprogrammer tilgjengelige gjennom ruterkonsollen. De kan komplettere programmer (f.eks. i2psnark), grenseflater til en annen klient eller program som må skrus på separat (f.eks. sisidns, i2ptunnel), eller ikke ha noe vevgrensesnitt i det hele tatt (f.eks. adresseboka)."
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configwebapps_jsp.java:539
 msgid ""
@@ -6436,12 +6436,12 @@ msgid ""
 "directory; however the .war file and web app will reappear when you update "
 "your router to a newer version, so disabling the web app here is the "
 "preferred method."
-msgstr ""
+msgstr "Et vevprogram kan også skrus av ved å fjerne .war-fila fra vevprogram-mappa; dog vil .war-fila og vevprogrammet gjenoppstå når du oppdaterer din ruter til en nyere versjon, så å skru av vevprogrammet her er foretrukket metode."
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/console_jsp.java:216
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/home_jsp.java:216
 msgid "home"
-msgstr ""
+msgstr "hjem"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/console_jsp.java:472
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/home_jsp.java:448
@@ -6450,28 +6450,28 @@ msgstr "Velkommen til I2P"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/dns_jsp.java:396
 msgid "I2P Addressbook"
-msgstr ""
+msgstr "I2P-adressebok"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/dns_jsp.java:398
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/i2ptunnelmgr_jsp.java:399
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/torrents_jsp.java:398
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/webmail_jsp.java:398
 msgid "Open in new tab"
-msgstr ""
+msgstr "Ã…pne i ny fane"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/dns_jsp.java:402
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/i2ptunnelmgr_jsp.java:403
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/torrents_jsp.java:402
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/webmail_jsp.java:402
 msgid "Your browser does not support iFrames."
-msgstr ""
+msgstr "Din nettleser støtter ikke iFrames"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/dns_jsp.java:404
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/i2ptunnelmgr_jsp.java:405
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/torrents_jsp.java:404
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/webmail_jsp.java:404
 msgid "Click here to continue."
-msgstr ""
+msgstr "Klikk her for å fortsette"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:229
 msgid "Internal Error"
@@ -6515,7 +6515,7 @@ msgstr "Feil {0}"
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:277
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:421
 msgid "I2P Version and Running Environment"
-msgstr ""
+msgstr "I2P-versjon og kjørbart miljø"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:326
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:411
@@ -6537,29 +6537,29 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:402
 msgid "Error 404"
-msgstr ""
+msgstr "Feil 404"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:407
 msgid "not found"
-msgstr ""
+msgstr "ikke funnet"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/events_jsp.java:216
 msgid "events"
-msgstr ""
+msgstr "hendelser"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/events_jsp.java:394
 msgid "I2P Event Log"
-msgstr ""
+msgstr "I2P-hendelseslogg"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/graph_jsp.java:218
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/graphs_jsp.java:216
 msgid "graphs"
-msgstr ""
+msgstr "grafer"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/graph_jsp.java:439
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/graphs_jsp.java:399
 msgid "I2P Performance Graphs"
-msgstr ""
+msgstr "I2P-ytelsesgrafer"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005far_jsp.java:400
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005far_jsp.java:446
@@ -6583,7 +6583,7 @@ msgstr ""
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005fru_jsp.java:401
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_jsp.java:413
 msgid "Network Configuration"
-msgstr ""
+msgstr "Nettverksoppsett"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005far_jsp.java:404
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005ffr_jsp.java:403
@@ -6656,7 +6656,7 @@ msgstr ""
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005fru_jsp.java:417
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_jsp.java:429
 msgid "UPnP disabled on the device"
-msgstr ""
+msgstr "UPnP avskrudd på enheten"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005far_jsp.java:420
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005ffr_jsp.java:419
@@ -6706,7 +6706,7 @@ msgstr ""
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005fru_jsp.java:429
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_jsp.java:441
 msgid "Review the UPnP status here."
-msgstr ""
+msgstr "Se over UPnP-statusen her."
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005far_jsp.java:432
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005ffr_jsp.java:431
@@ -6716,7 +6716,7 @@ msgstr ""
 msgid ""
 "Hostnames entered on the Network Configuration page will be published in the"
 " network database."
-msgstr ""
+msgstr "Vertsnavn oppgitt på nettverksoppsettssiden vil bli offentliggjort i nettverksdatabasen."
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005far_jsp.java:434
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005ffr_jsp.java:433
@@ -6724,7 +6724,7 @@ msgstr ""
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005fru_jsp.java:433
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_jsp.java:445
 msgid "They are <b>not private</b>."
-msgstr ""
+msgstr "De er <b>ikke private</b>."
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005far_jsp.java:436
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005ffr_jsp.java:435
@@ -6734,7 +6734,7 @@ msgstr ""
 msgid ""
 "Also, <b>do not enter a private IP address</b> like 127.0.0.1 or "
 "192.168.1.1."
-msgstr ""
+msgstr "Ytterligere, <b>ikke skriv inn en privat IP-adresse</b> som 127.0.0.1 eller 192.168.1.1."
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005far_jsp.java:438
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005ffr_jsp.java:437
@@ -6745,7 +6745,7 @@ msgid ""
 "If you specify the wrong IP address or hostname, or do not properly "
 "configure your NAT or firewall, your network performance will degrade "
 "substantially."
-msgstr ""
+msgstr "Om du angir feil IP-adresse eller vertsnavn, eller ikke setter opp ditt NAT eller din brannmur riktig, vil nettverksytelsen gå ned betraktelig."
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005far_jsp.java:440
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005ffr_jsp.java:439
@@ -6753,7 +6753,7 @@ msgstr ""
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005fru_jsp.java:439
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_jsp.java:451
 msgid "When in doubt, leave the settings at the defaults."
-msgstr ""
+msgstr "Om du er i tvil, ikke rør innstillingnee."
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005far_jsp.java:444
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005ffr_jsp.java:443
@@ -6761,7 +6761,7 @@ msgstr ""
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005fru_jsp.java:443
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_jsp.java:455
 msgid "Reachability Help"
-msgstr ""
+msgstr "Tilgjengelighetshjelp"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005far_jsp.java:448
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005ffr_jsp.java:447
@@ -6790,7 +6790,7 @@ msgstr ""
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005fru_jsp.java:453
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_jsp.java:465
 msgid "Your UDP port does not appear to be firewalled."
-msgstr ""
+msgstr "Din UDP-port later til ikke å være brannmurt."
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005far_jsp.java:458
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005ffr_jsp.java:457
@@ -6798,7 +6798,7 @@ msgstr ""
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005fru_jsp.java:457
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_jsp.java:469
 msgid "Your UDP port appears to be firewalled."
-msgstr ""
+msgstr "Din UDP-port later til å være brannmurt."
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005far_jsp.java:460
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005ffr_jsp.java:459
@@ -7222,7 +7222,7 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/jobs_jsp.java:216
 msgid "job queue"
-msgstr ""
+msgstr "jobbkø"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/jobs_jsp.java:380
 msgid "I2P Router Job Queue"
@@ -7244,15 +7244,15 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:495
 msgid "Critical Logs"
-msgstr ""
+msgstr "Kritiske logger"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:499
 msgid "Router Logs"
-msgstr ""
+msgstr "Ruterlogger"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:501
 msgid "Configure router logging options"
-msgstr ""
+msgstr "Sett opp ruterloggingsvalg"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:503
 msgid "Configure"
@@ -7260,11 +7260,11 @@ msgstr "Sett opp"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:507
 msgid "Event Logs"
-msgstr ""
+msgstr "Hendelseslogger"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:509
 msgid "View event logs"
-msgstr ""
+msgstr "Vis hendelseslogger"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:511
 msgid "Service (Wrapper) Logs"
@@ -7272,11 +7272,11 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/netdb_jsp.java:216
 msgid "network database"
-msgstr ""
+msgstr "nettverksdatabase"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/netdb_jsp.java:380
 msgid "I2P Network Database"
-msgstr ""
+msgstr "I2P-nettverksdatabase"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/news_jsp.java:218
 msgid "News"
@@ -7284,7 +7284,7 @@ msgstr "Nyheter"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/news_jsp.java:406
 msgid "Latest News"
-msgstr ""
+msgstr "Siste nytt"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/nowebapp_jsp.java:222
 msgid "WebApp Not Found"
@@ -7305,63 +7305,63 @@ msgstr ""
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/peers_jsp.java:216
 msgid "peer connections"
-msgstr ""
+msgstr "likemannstilkoblinger"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/peers_jsp.java:380
 msgid "I2P Network Peers"
-msgstr ""
+msgstr "I2P-nettverkslikemenn"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/profiles_jsp.java:216
 msgid "peer profiles"
-msgstr ""
+msgstr "likemannsprofiler"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/profiles_jsp.java:380
 msgid "I2P Network Peer Profiles"
-msgstr ""
+msgstr "I2P-nettverkets likemannsprofiler"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/stats_jsp.java:216
 msgid "statistics"
-msgstr ""
+msgstr "statistikk"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/stats_jsp.java:391
 msgid "I2P Router Statistics"
-msgstr ""
+msgstr "I2P-ruterstatistikk"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/summaryframe_jsp.java:374
 #, java-format
 msgid "Disable {0} Refresh"
-msgstr ""
+msgstr "Skru av {0} Oppdater"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/torrents_jsp.java:232
 msgid "torrents"
-msgstr ""
+msgstr "torrenter"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/torrents_jsp.java:396
 msgid "I2P Torrent Manager"
-msgstr ""
+msgstr "I2P torrentbehandler"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/tunnels_jsp.java:216
 msgid "tunnel summary"
-msgstr ""
+msgstr "tunnelsammendrag"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/tunnels_jsp.java:380
 msgid "I2P Tunnel Summary"
-msgstr ""
+msgstr "I2P-tunnelsammendrag"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/viewprofile_jsp.java:216
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/viewprofile_jsp.java:380
 msgid "Peer Profile"
-msgstr ""
+msgstr "Likemannsprofil"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/viewprofile_jsp.java:402
 #, java-format
 msgid "Profile for peer {0}"
-msgstr ""
+msgstr "Profil for likemannen {0}"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/webmail_jsp.java:232
 msgid "webmail"
-msgstr ""
+msgstr "vevpost"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/webmail_jsp.java:396
 msgid "I2P Webmail"
-msgstr ""
+msgstr "I2P-vevpost"
diff --git a/apps/routerconsole/locale/messages_nl.po b/apps/routerconsole/locale/messages_nl.po
index b4c55dfc16e853bdd4fded181465a1d5fa73d8f5..7030458b8aeb4b9829d2e9725f5a0b833a3fe72d 100644
--- a/apps/routerconsole/locale/messages_nl.po
+++ b/apps/routerconsole/locale/messages_nl.po
@@ -18,7 +18,7 @@
 # Nathan Follens, 2015
 # Nathan Follens, 2015
 # attesor <random901@zoho.com>, 2012
-# skoning <skoning@onenetbeyond.org>, 2014
+# skoning <skoning@onenetbeyond.org>, 2014,2017
 # skoning <skoning@onenetbeyond.org>, 2014
 # susbarbatus <susbarbatus@i2pmail.org>, 2014
 msgid ""
@@ -26,8 +26,8 @@ msgstr ""
 "Project-Id-Version: I2P\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-06-05 23:01+0000\n"
-"PO-Revision-Date: 2017-06-30 21:42+0000\n"
-"Last-Translator: zzzi2p\n"
+"PO-Revision-Date: 2017-07-22 11:20+0000\n"
+"Last-Translator: skoning <skoning@onenetbeyond.org>\n"
 "Language-Team: Dutch (http://www.transifex.com/otf/I2P/language/nl/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -144,11 +144,11 @@ msgstr "IPs verbannen tot herstart"
 
 #: ../../../router/java/src/net/i2p/router/Blocklist.java:1026
 msgid "IPv4 Addresses"
-msgstr ""
+msgstr "IPv4 adressen"
 
 #: ../../../router/java/src/net/i2p/router/Blocklist.java:1050
 msgid "IPv6 Addresses"
-msgstr ""
+msgstr "IPv6 adressen"
 
 #: ../../../router/java/src/net/i2p/router/Blocklist.java:1068
 msgid "IPs Permanently Banned"
@@ -1516,7 +1516,7 @@ msgstr "Log configuratie opgeslagen"
 #: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:46
 #, java-format
 msgid "Add additional logging statements above (e.g. {0})."
-msgstr ""
+msgstr "Voeg additionele logging regels boven toe (bijvoorbeeld {0})."
 
 #: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:48
 #, java-format
@@ -1672,7 +1672,7 @@ msgstr "Statistieken"
 
 #: ../java/src/net/i2p/router/web/ConfigNavHelper.java:29
 msgid "I2CP"
-msgstr ""
+msgstr "I2CP"
 
 #: ../java/src/net/i2p/router/web/ConfigNavHelper.java:29
 msgid "Plugins"
@@ -1680,7 +1680,7 @@ msgstr "Plugins"
 
 #: ../java/src/net/i2p/router/web/ConfigNavHelper.java:29
 msgid "Web Apps"
-msgstr ""
+msgstr "Web-applicaties"
 
 #: ../java/src/net/i2p/router/web/ConfigNavHelper.java:30
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:251
@@ -2746,15 +2746,15 @@ msgstr "minuten"
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:362
 msgid "Plot type"
-msgstr ""
+msgstr "Plot type"
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:363
 msgid "Averages"
-msgstr ""
+msgstr "Gemiddelden"
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:364
 msgid "Events"
-msgstr ""
+msgstr "Gebeurtenissen"
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:365
 msgid "Graph size"
@@ -2762,7 +2762,7 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:366
 msgid "pixels wide"
-msgstr ""
+msgstr "pixels breed"
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:367
 msgid ""
@@ -2771,7 +2771,7 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:367
 msgid "pixels high"
-msgstr ""
+msgstr "pixels hoog"
 
 #: ../java/src/net/i2p/router/web/GraphHelper.java:368
 msgid "Refresh delay"
@@ -2851,11 +2851,11 @@ msgstr "I2P Router Hulp"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:36
 msgid "Install and configure I2P plugins"
-msgstr ""
+msgstr "I2P pligins installeren en configureren"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:36
 msgid "Manage Plugins"
-msgstr ""
+msgstr "Beheer plugins"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:37
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:231
@@ -2880,7 +2880,7 @@ msgstr ""
 #: ../java/src/net/i2p/router/web/HomeHelper.java:179
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:166
 msgid "Web Server"
-msgstr ""
+msgstr "Webserver"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:44
 msgid "The Anoncoin project"
@@ -2927,7 +2927,7 @@ msgstr "Vaak gestelde vragen"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:51
 msgid "I2P FAQ"
-msgstr ""
+msgstr "I2P FAQ"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:52
 msgid "Community forum"
@@ -2935,7 +2935,7 @@ msgstr "Community forum"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:52
 msgid "I2P Forum"
-msgstr ""
+msgstr "I2P Forum"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:53
 msgid ""
@@ -2993,7 +2993,7 @@ msgstr "Add-on map"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:64
 msgid "I2P Plugins"
-msgstr ""
+msgstr "I2P plugins"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:65
 msgid "Postman's Tracker"
@@ -3017,7 +3017,7 @@ msgstr "I2P Netwerkstatistieken"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:70
 msgid "I2P Technical Docs"
-msgstr ""
+msgstr "I2P technische documenten"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:70
 msgid "Technical documentation"
@@ -3224,7 +3224,7 @@ msgstr "Bestemming"
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:338
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:353
 msgid "Add to addressbook"
-msgstr ""
+msgstr "Toevoegen aan adresboek"
 
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:340
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:355
@@ -3404,7 +3404,7 @@ msgstr "IPv6 Only NTCP, SSU, aanbieders"
 #: ../java/src/net/i2p/router/web/NewsFeedHelper.java:92
 #, java-format
 msgid "{0}"
-msgstr ""
+msgstr "{0}"
 
 #: ../java/src/net/i2p/router/web/NewsHelper.java:293
 #, java-format
@@ -3778,7 +3778,7 @@ msgstr[1] "{0} standaard profielen verborgen."
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:91
 msgid "Groups"
-msgstr ""
+msgstr "Groepen"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:92
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:206
@@ -3804,7 +3804,7 @@ msgstr "Integratie"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:97
 msgid "View/Edit"
-msgstr ""
+msgstr "Bekijken/bewerken"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:134
 msgid "Fast, High Capacity"
@@ -3939,17 +3939,17 @@ msgstr "caps"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:289
 msgid "SSU Testing"
-msgstr ""
+msgstr "SSU testen"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:290
 msgid "SSU Introducer"
-msgstr ""
+msgstr "SSU aanbieder"
 
 #. 0
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:293
 #: ../java/src/net/i2p/router/web/ProfilesHelper.java:12
 msgid "Floodfill"
-msgstr ""
+msgstr "Floodfill"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:297
 #, java-format
@@ -4039,7 +4039,7 @@ msgstr "Deze statistieken worden primair gebruikt voor ontwikkeling en debugging
 
 #: ../java/src/net/i2p/router/web/StatsGenerator.java:44
 msgid "Jump to section"
-msgstr ""
+msgstr "Ga naar sectie"
 
 #: ../java/src/net/i2p/router/web/StatsGenerator.java:67
 msgid "GO"
@@ -4230,7 +4230,7 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:259
 msgid "Certs"
-msgstr ""
+msgstr "Certificaten"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:263
 msgid "View full changelog"
@@ -4266,7 +4266,7 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:293
 msgid "NetDB Search"
-msgstr ""
+msgstr "NetDB zoeken"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:297
 msgid "Signed proof of ownership of this router"
@@ -4714,7 +4714,7 @@ msgstr "Adressen"
 
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:36
 msgid "Configure tunnels"
-msgstr ""
+msgstr "Configureer tunnels"
 
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:36
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:60
@@ -5409,7 +5409,7 @@ msgstr "Selecteer geheime sleutel bestand"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configfamily_jsp.java:551
 msgid "Join Family"
-msgstr ""
+msgstr "Familie bijwonen"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configfamily_jsp.java:557
 msgid "Family Name"
@@ -5417,7 +5417,7 @@ msgstr "Familie naam"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configfamily_jsp.java:559
 msgid "Create Family"
-msgstr ""
+msgstr "Familie aanmaken"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configfamily_jsp.java:569
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configfamily_jsp.java:573
@@ -5445,7 +5445,7 @@ msgstr "Je bent niet langer lid van familie {0}."
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configfamily_jsp.java:594
 msgid "Leave Family"
-msgstr ""
+msgstr "Familie verlaten"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:220
 msgid "config home"
diff --git a/apps/routerconsole/locale/messages_pl.po b/apps/routerconsole/locale/messages_pl.po
index 29623b4cde2719e4f1068745358d91a3b26b7e7b..3128445fa8f94de587386bee5d7f0688b8d61e88 100644
--- a/apps/routerconsole/locale/messages_pl.po
+++ b/apps/routerconsole/locale/messages_pl.po
@@ -25,7 +25,7 @@ msgstr ""
 "Project-Id-Version: I2P\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-06-05 23:01+0000\n"
-"PO-Revision-Date: 2017-06-30 21:42+0000\n"
+"PO-Revision-Date: 2017-07-15 18:56+0000\n"
 "Last-Translator: Verdulo :-)\n"
 "Language-Team: Polish (http://www.transifex.com/otf/I2P/language/pl/)\n"
 "MIME-Version: 1.0\n"
@@ -3424,7 +3424,7 @@ msgstr "IPv6 NTCP, SSU, przedstawiciele"
 
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:672
 msgid "IPv6 Only NTCP, SSU, introducers"
-msgstr "IPv6 tylko NTCP, SSU, przedstawicieli"
+msgstr "IPv6 tylko NTCP, SSU, przedstawiciele"
 
 #: ../java/src/net/i2p/router/web/NewsFeedHelper.java:92
 #, java-format
diff --git a/apps/routerconsole/locale/messages_sv.po b/apps/routerconsole/locale/messages_sv.po
index 34ecb09c137602a1120794db8eb9c56d2b8fea38..07b3cefedfbd773ecfb50cc66301bc0965425816 100644
--- a/apps/routerconsole/locale/messages_sv.po
+++ b/apps/routerconsole/locale/messages_sv.po
@@ -5,6 +5,7 @@
 # 
 # Translators:
 # 123hund123 <M8R-ra4r1r@mailinator.com>, 2011
+# Allan Nordhøy <epost@anotheragency.no>, 2017
 # Anders Nilsson <anders@devode.se>, 2016
 # Anders Nilsson <anders@devode.se>, 2015-2016
 # cacapo <handelsehorisont@gmail.com>, 2015
@@ -24,8 +25,8 @@ msgstr ""
 "Project-Id-Version: I2P\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-06-05 23:01+0000\n"
-"PO-Revision-Date: 2017-06-30 21:42+0000\n"
-"Last-Translator: Jony\n"
+"PO-Revision-Date: 2017-07-16 15:14+0000\n"
+"Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n"
 "Language-Team: Swedish (Sweden) (http://www.transifex.com/otf/I2P/language/sv_SE/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -1159,7 +1160,7 @@ msgstr "Klient {0} stannades"
 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:328
 #, java-format
 msgid "Client {0} started"
-msgstr "Klient{0} startades"
+msgstr "Klient {0} startades"
 
 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:343
 #, java-format
@@ -1217,7 +1218,7 @@ msgstr "Insticksmodul- eller uppdateringshämtning pågår redan"
 
 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:489
 msgid "Updating all plugins"
-msgstr "Uppdatera alla insticksmodul"
+msgstr "Alla insticksmodul uppdateras"
 
 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:524
 #, java-format
@@ -1754,11 +1755,11 @@ msgstr "Uppdaterar UDP-port till {0}"
 
 #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:335
 msgid "Gracefully restarting into Hidden Router Mode"
-msgstr "Försiktig omstart till dolt routerläge"
+msgstr "Omstartar försiktigt till dolt routerläge"
 
 #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:337
 msgid "Gracefully restarting to exit Hidden Router Mode"
-msgstr "Försiktig omstart ut ur dolt routerläge"
+msgstr "Omstartar försiktigt ut ur dolt routerläge"
 
 #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:346
 msgid "Enabling UPnP"
@@ -1794,11 +1795,11 @@ msgstr "Aktiverar inkommande IPv6"
 
 #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:386
 msgid "Disabling UDP"
-msgstr "Avaktivera UDP"
+msgstr "Avaktiverar UDP"
 
 #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:388
 msgid "Enabling UDP"
-msgstr "Aktivera UDP"
+msgstr "Aktiverar UDP"
 
 #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:395
 msgid "Requiring SSU introducers"
diff --git a/apps/routerconsole/locale/messages_zh.po b/apps/routerconsole/locale/messages_zh.po
index 5dbb4ebc8d11c2a361ab144eff3dbb2ed7e9156b..798d0e0a78c2f616665c6ec64f6097b0441510c9 100644
--- a/apps/routerconsole/locale/messages_zh.po
+++ b/apps/routerconsole/locale/messages_zh.po
@@ -25,7 +25,7 @@ msgstr ""
 "Project-Id-Version: I2P\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-06-05 23:01+0000\n"
-"PO-Revision-Date: 2017-06-30 21:42+0000\n"
+"PO-Revision-Date: 2017-07-13 15:53+0000\n"
 "Last-Translator: YF <yfdyh000@gmail.com>\n"
 "Language-Team: Chinese (China) (http://www.transifex.com/otf/I2P/language/zh_CN/)\n"
 "MIME-Version: 1.0\n"
@@ -1506,17 +1506,17 @@ msgstr "日志设置已保存"
 #: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:46
 #, java-format
 msgid "Add additional logging statements above (e.g. {0})."
-msgstr ""
+msgstr "添加上述额外日志(例如 {0})。"
 
 #: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:48
 #, java-format
 msgid "Alternatively, put entries in the file {0} (e.g. {1})."
-msgstr ""
+msgstr "或者,将条目放入文件 {0}(例如 {1})。"
 
 #: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:50
 #, java-format
 msgid "Valid log levels are {0}."
-msgstr ""
+msgstr "有效的日志级别:{0}。"
 
 #. Homeland Security Advisory System
 #. http://www.dhs.gov/xinfoshare/programs/Copy_of_press_release_0046.shtm
@@ -2804,7 +2804,7 @@ msgstr "配置 UI"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:32
 msgid "Select console theme & language & set optional console password"
-msgstr ""
+msgstr "选择控制台主题、语言和设置可选的控制台密码"
 
 #: ../java/src/net/i2p/router/web/HomeHelper.java:33
 msgid "Customize Home Page"
@@ -3188,7 +3188,7 @@ msgstr "配置参与播种"
 
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:294
 msgid "No Leasesets currently active."
-msgstr ""
+msgstr "目前无租契活动。"
 
 #: ../java/src/net/i2p/router/web/NetDbRenderer.java:310
 msgid "LeaseSet"
@@ -3611,7 +3611,7 @@ msgstr "积压?"
 
 #: ../java/src/net/i2p/router/web/PeerHelper.java:198
 msgid "Is peer backlogged?"
-msgstr ""
+msgstr "目前对等端积压?"
 
 #: ../java/src/net/i2p/router/web/PeerHelper.java:268
 #: ../java/src/net/i2p/router/web/PeerHelper.java:571
@@ -3759,7 +3759,7 @@ msgstr[0] "已隐藏{0}个标准摘要。"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:91
 msgid "Groups"
-msgstr ""
+msgstr "群组"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:92
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:206
@@ -3826,7 +3826,7 @@ msgstr "摘要"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:188
 msgid "Configure peer"
-msgstr ""
+msgstr "配置对等端"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:207
 msgid "Integ. Value"
@@ -3920,11 +3920,11 @@ msgstr "容量"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:289
 msgid "SSU Testing"
-msgstr ""
+msgstr "SSU 测试"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:290
 msgid "SSU Introducer"
-msgstr ""
+msgstr "SSU 引导器"
 
 #. 0
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:293
@@ -4020,7 +4020,7 @@ msgstr "统计主要用于I2P的开发和调试。"
 
 #: ../java/src/net/i2p/router/web/StatsGenerator.java:44
 msgid "Jump to section"
-msgstr ""
+msgstr "跳转"
 
 #: ../java/src/net/i2p/router/web/StatsGenerator.java:67
 msgid "GO"
@@ -4205,11 +4205,11 @@ msgstr "高级配置"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:257
 msgid "Review active encryption certificates used in console"
-msgstr ""
+msgstr "查看控制台中使用的加密证书"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:259
 msgid "Certs"
-msgstr ""
+msgstr "证书"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:263
 msgid "View full changelog"
@@ -4237,7 +4237,7 @@ msgstr "Jar"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:285
 msgid "View active leasesets (debug mode)"
-msgstr ""
+msgstr "查看活动租契(调试模式)"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:291
 msgid "Network database search tool"
@@ -4249,7 +4249,7 @@ msgstr "网络数据库搜索"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:297
 msgid "Signed proof of ownership of this router"
-msgstr ""
+msgstr "此路由器所有权的签名证明"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:299
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/proof_jsp.java:218
@@ -4266,7 +4266,7 @@ msgstr ""
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:311
 msgid "Sybils"
-msgstr ""
+msgstr "Sybils"
 
 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:324
 msgid "General"
@@ -4626,7 +4626,7 @@ msgstr "检查网络连接和NAT/防火墙"
 #: ../java/src/net/i2p/router/web/SummaryHelper.java:888
 msgid ""
 "Attempt to download router reference files (if automatic reseed has failed)"
-msgstr ""
+msgstr "尝试下载路由器引用文件(如果自动播种失败)"
 
 #: ../java/src/net/i2p/router/web/SummaryHelper.java:889
 msgid "Reseed"
@@ -4706,7 +4706,7 @@ msgstr "客户隧道 - "
 
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:60
 msgid "Configure tunnels for session"
-msgstr ""
+msgstr "配置会话隧道"
 
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:62
 msgid "dead"
@@ -4774,7 +4774,7 @@ msgstr "本次运行带宽使用量"
 
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:166
 msgid "Inbound or outbound?"
-msgstr ""
+msgstr "入站或出站?"
 
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:167
 msgid "Expiry"
@@ -5273,7 +5273,7 @@ msgstr "这个路由器目前不参与播种。"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:509
 msgid "Enrollment"
-msgstr ""
+msgstr "注册"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:515
 msgid "Automatic"
@@ -5298,7 +5298,7 @@ msgstr "某些设置需要程序重启后生效。"
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:547
 #, java-format
 msgid "To make changes, edit the file: {0}"
-msgstr ""
+msgstr "要做更改,编辑文件:{0}"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:220
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configi2cp_jsp.java:220
@@ -6214,7 +6214,7 @@ msgstr "统计文件"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:532
 msgid "Toggle section graphing options"
-msgstr ""
+msgstr "切换板块图形选项"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:544
 msgid "Log"
@@ -6222,7 +6222,7 @@ msgstr "日志"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:552
 msgid "Select stats for visualization on /graphs"
-msgstr ""
+msgstr "选择图表可视化统计信息"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:555
 msgid "Graph"
@@ -6418,7 +6418,7 @@ msgid ""
 "(e.g. i2psnark), front-ends to another client or application which must be "
 "separately enabled (e.g. susidns, i2ptunnel), or have no web interface at "
 "all (e.g. addressbook)."
-msgstr ""
+msgstr "下面列出的 Java Web 应用程序由 webConsole 客户端启动,并在与路由器相同的 JVM 中运行。它们通常是通过路由器控制台访问的 Web 应用程序。它们可以是完整的应用程序(例如 i2psnark),对另一必须单独启用客户端或应用程序的前端(例如 susidns、i2ptunnel),或完全没有 Web 界面(例如地址簿)。"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configwebapps_jsp.java:539
 msgid ""
@@ -6604,7 +6604,7 @@ msgid ""
 "Most of the options on the Network Configuration page are for special "
 "situations, for example where UPnP does not work correctly, or a firewall "
 "not under your control is doing harm."
-msgstr ""
+msgstr "“网络配置”页面上的大多数选项适用于特殊情况,例如 UPnP 无法正常工作,或者您无法控制的防火墙造成损害。"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005far_jsp.java:410
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005ffr_jsp.java:409
@@ -6688,7 +6688,7 @@ msgstr "UPnP设备变化、重置或地址变更"
 msgid ""
 "UPnP may be enabled or disabled on the Network Configuration page, but a "
 "change requires a router restart to take effect."
-msgstr ""
+msgstr "可以在“网络配置”页面上启用或禁用 UPnP,但更改需要重启路由器才能生效。"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005far_jsp.java:430
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005ffr_jsp.java:429
@@ -6706,7 +6706,7 @@ msgstr "在这里检查UPnP状态。"
 msgid ""
 "Hostnames entered on the Network Configuration page will be published in the"
 " network database."
-msgstr ""
+msgstr "网络配置页面上输入的主机名将被发布在网络数据库。"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005far_jsp.java:434
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005ffr_jsp.java:433
@@ -7057,7 +7057,7 @@ msgstr "您不能发布一个公网无法访问的 IP 地址,例如127.0.0.1
 msgid ""
 "Correct the address or disable inbound TCP on the Network Configuration "
 "page."
-msgstr ""
+msgstr "在网络配置页面上更正地址或禁用入站 TCP。"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005far_jsp.java:519
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005ffr_jsp.java:518
@@ -7150,7 +7150,7 @@ msgstr "错误 - UDP已禁用,且TCP入站主机与端口未设置"
 msgid ""
 "You have not configured inbound TCP with a hostname and port on the Network "
 "Configuration page, however you have disabled UDP."
-msgstr ""
+msgstr "您尚未在“网络配置”页面上配置带有主机名和端口的入站 TCP,但是您已禁用 UDP。"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005far_jsp.java:538
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005ffr_jsp.java:537
@@ -7168,7 +7168,7 @@ msgstr "因此您的路由器无法接收入站连接。"
 msgid ""
 "Please configure a TCP host and port on the Network Configuration page or "
 "enable UDP."
-msgstr ""
+msgstr "请在“网络配置”页面上配置 TCP 主机和端口,或启用 UDP。"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005far_jsp.java:542
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005ffr_jsp.java:541
@@ -7200,7 +7200,7 @@ msgstr "您是否已经运行了另一个 I2P 实例?请关掉冲突的程序
 msgid ""
 "Click a flag to select a language. Click 'Configure UI' below to change it "
 "later."
-msgstr ""
+msgstr "单击一个标志来选择一种语言。以后点击下面的“配置用户界面”进行更改。"
 
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/home_jsp.java:456
 msgid "Search"
diff --git a/apps/sam/java/src/net/i2p/sam/SAMv3Handler.java b/apps/sam/java/src/net/i2p/sam/SAMv3Handler.java
index 0b918186225fa1aa20c5aeb9c23bc41152a9f9fa..e7c5f55bc85ac595aaa9f55c9cd0d65656e06856 100644
--- a/apps/sam/java/src/net/i2p/sam/SAMv3Handler.java
+++ b/apps/sam/java/src/net/i2p/sam/SAMv3Handler.java
@@ -173,8 +173,6 @@ class SAMv3Handler extends SAMv1Handler
 
 		try {
 			Socket socket = getClientSocket().socket();
-			InputStream in = socket.getInputStream();
-
 			StringBuilder buf = new StringBuilder(1024);
 			boolean gotFirstLine = false;
 			while (true) {
diff --git a/apps/susidns/locale/messages_fr.po b/apps/susidns/locale/messages_fr.po
index a062288e71ff09176dbbf9e54a7a6af457168bd9..95fb7c9dc42ea99ba25b3ba025f9d91c32caf3a8 100644
--- a/apps/susidns/locale/messages_fr.po
+++ b/apps/susidns/locale/messages_fr.po
@@ -21,8 +21,8 @@ msgstr ""
 "Project-Id-Version: I2P\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-06-05 23:01+0000\n"
-"PO-Revision-Date: 2017-07-08 14:01+0000\n"
-"Last-Translator: zzzi2p\n"
+"PO-Revision-Date: 2017-07-14 18:45+0000\n"
+"Last-Translator: French language coordinator <french.coordinator@rbox.me>\n"
 "Language-Team: French (http://www.transifex.com/otf/I2P/language/fr/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
diff --git a/apps/susidns/locale/messages_it.po b/apps/susidns/locale/messages_it.po
index 3f7e4c6dfcc51897c91aaa5633a4b6ab031a6c44..5f377ead498c4acbd4f526696150ff279b9d993f 100644
--- a/apps/susidns/locale/messages_it.po
+++ b/apps/susidns/locale/messages_it.po
@@ -19,8 +19,8 @@ msgstr ""
 "Project-Id-Version: I2P\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-06-05 23:01+0000\n"
-"PO-Revision-Date: 2017-06-30 21:32+0000\n"
-"Last-Translator: zzzi2p\n"
+"PO-Revision-Date: 2017-07-19 11:28+0000\n"
+"Last-Translator: Sebastiano Pistore <SebastianoPistore.info@protonmail.ch>\n"
 "Language-Team: Italian (http://www.transifex.com/otf/I2P/language/it/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -426,11 +426,11 @@ msgstr "Ricerca"
 #: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:552
 #: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:236
 msgid "Hostname"
-msgstr ""
+msgstr "Nome host"
 
 #: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:357
 msgid "Link (b32)"
-msgstr ""
+msgstr "Link (base32)"
 
 #: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:359
 #: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:556
@@ -440,7 +440,7 @@ msgstr "Destinazione"
 
 #: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:371
 msgid "Select hosts for deletion from addressbook"
-msgstr ""
+msgstr "Seleziona gli host da cancellare dalla rubrica"
 
 #: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:406
 msgid "View larger version of identicon for this hostname"
diff --git a/apps/susidns/src/jsp/addressbook.jsp b/apps/susidns/src/jsp/addressbook.jsp
index 627dc6f60400a58cc8c899dd88496c8cf8284219..953296185ee080cbf88c0c236b3b8c3d66eccd48 100644
--- a/apps/susidns/src/jsp/addressbook.jsp
+++ b/apps/susidns/src/jsp/addressbook.jsp
@@ -28,7 +28,7 @@
         request.setCharacterEncoding("UTF-8");
 
     response.setHeader("X-Frame-Options", "SAMEORIGIN");
-    response.setHeader("Content-Security-Policy", "default-src 'self'");
+    response.setHeader("Content-Security-Policy", "default-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'");
     response.setHeader("X-XSS-Protection", "1; mode=block");
     response.setHeader("X-Content-Type-Options", "nosniff");
     response.setHeader("Referrer-Policy", "no-referrer");
@@ -51,6 +51,7 @@
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>${book.book} <%=intl._t("address book")%> - susidns</title>
 <link rel="stylesheet" type="text/css" href="<%=book.getTheme()%>susidns.css?<%=net.i2p.CoreVersion.VERSION%>">
+<script src="/js/resetScroll.js" type="text/javascript"></script>
 </head>
 <body>
 <div class="page">
@@ -184,7 +185,7 @@ ${book.loadBookMessages}
 <td class="names"><span class="addrhlpr"><a href="http://${addr.b32}/" target="_blank" title="<%=intl._t("Base 32 address")%>">b32</a></span></td>
 <td class="helper"><a href="http://${addr.name}/?i2paddresshelper=${addr.destination}" target="_blank" title="<%=intl._t("Helper link to share host address with option to add to addressbook")%>">link</a></td>
 <td class="names"><span class="addrhlpr"><a href="details?h=${addr.name}&amp;book=${book.book}" title="<%=intl._t("More information on this entry")%>"><%=intl._t("details")%></a></span></td>
-<td class="destinations"><div class="destaddress" name="dest_${addr.name}" width="200px" tabindex="0">${addr.destination}</div></td>
+<td class="destinations"><div class="destaddress" name="dest_${addr.name}" width="200px" tabindex="0" onblur="resetScrollLeft(this)">${addr.destination}</div></td>
 
 <c:if test="${book.validBook}">
 <td class="checkbox"><input type="checkbox" name="checked" value="${addr.name}" title="<%=intl._t("Mark for deletion")%>"></td>
diff --git a/apps/susimail/locale/messages_fr.po b/apps/susimail/locale/messages_fr.po
index fdba181854b18be13a6bfec408e0943d8919afd0..277763e1163b1677b31fd7e9e1b24ee468724b9b 100644
--- a/apps/susimail/locale/messages_fr.po
+++ b/apps/susimail/locale/messages_fr.po
@@ -17,8 +17,8 @@ msgstr ""
 "Project-Id-Version: I2P\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-06-05 23:01+0000\n"
-"PO-Revision-Date: 2017-07-08 13:50+0000\n"
-"Last-Translator: zzzi2p\n"
+"PO-Revision-Date: 2017-07-18 14:52+0000\n"
+"Last-Translator: French language coordinator <french.coordinator@rbox.me>\n"
 "Language-Team: French (http://www.transifex.com/otf/I2P/language/fr/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
diff --git a/apps/susimail/locale/messages_in.po b/apps/susimail/locale/messages_in.po
index 47fc55a55255c52fd8ef80c1c0f13e62a04ac3f6..e6c4bc76762d26086c130db8a1dbfce3c43a9c34 100644
--- a/apps/susimail/locale/messages_in.po
+++ b/apps/susimail/locale/messages_in.po
@@ -5,13 +5,14 @@
 # 
 # Translators:
 # Khairul Agasta <khairuldroids@gmail.com>, 2014
+# Robert Dafis <robertdafis@gmail.com>, 2017
 msgid ""
 msgstr ""
 "Project-Id-Version: I2P\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-06-05 23:01+0000\n"
-"PO-Revision-Date: 2017-06-30 21:32+0000\n"
-"Last-Translator: zzzi2p\n"
+"PO-Revision-Date: 2017-07-27 00:09+0000\n"
+"Last-Translator: Robert Dafis <robertdafis@gmail.com>\n"
 "Language-Team: Indonesian (http://www.transifex.com/otf/I2P/language/id/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -165,7 +166,7 @@ msgstr "Lampiran tidak dietmukan."
 #: src/src/i2p/susi/webmail/WebMail.java:1356
 #: src/src/i2p/susi/webmail/WebMail.java:1358
 msgid "Message not found."
-msgstr ""
+msgstr "Pesan tidak ditemukan"
 
 #: src/src/i2p/susi/webmail/WebMail.java:1403
 #: src/src/i2p/susi/webmail/WebMail.java:1541
@@ -185,7 +186,7 @@ msgstr[0] "{0} pesan dihapus."
 #: src/src/i2p/susi/webmail/WebMail.java:1505
 #, java-format
 msgid "Host unchanged. Edit configation file {0} to change host."
-msgstr ""
+msgstr "Host tidak berubah. Ubah file pengaturan {0} untuk mengubah host"
 
 #: src/src/i2p/susi/webmail/WebMail.java:1520
 msgid "Configuration saved"
@@ -309,7 +310,7 @@ msgstr "Hapus lampiran yang dipilih"
 
 #: src/src/i2p/susi/webmail/WebMail.java:2215
 msgid "I2PMail Login"
-msgstr ""
+msgstr "Masuk ke I2PMail"
 
 #. current postman hq length limits 16/12, new postman version 32/32
 #: src/src/i2p/susi/webmail/WebMail.java:2217
@@ -374,7 +375,7 @@ msgstr "Keluar"
 
 #: src/src/i2p/susi/webmail/WebMail.java:2268
 msgid "Mark for deletion"
-msgstr ""
+msgstr "Tandai untuk dihapus"
 
 #: src/src/i2p/susi/webmail/WebMail.java:2271
 #: src/src/i2p/susi/webmail/WebMail.java:2431
@@ -471,7 +472,7 @@ msgstr "Teruskan"
 
 #: src/src/i2p/susi/webmail/WebMail.java:2410
 msgid "Save As"
-msgstr ""
+msgstr "Simpan sebagai"
 
 #: src/src/i2p/susi/webmail/WebMail.java:2412
 #: src/src/i2p/susi/webmail/WebMail.java:2414
diff --git a/apps/susimail/locale/messages_it.po b/apps/susimail/locale/messages_it.po
index c1b797c844954055706787e5582b28bb2b3fb34b..4d25048d90b7e20c054e1d42809be2f270d86181 100644
--- a/apps/susimail/locale/messages_it.po
+++ b/apps/susimail/locale/messages_it.po
@@ -11,14 +11,15 @@
 # mkkid <jokjok@hotmail.it>, 2011
 # mkkid <jokjok@hotmail.it>, 2011
 # Sebastiano Pistore <SebastianoPistore.info@protonmail.ch>, 2016
+# Sebastiano Pistore <SebastianoPistore.info@protonmail.ch>, 2016
 # Tristano Ajmone <tajmone@gmail.com>, 2015
 msgid ""
 msgstr ""
 "Project-Id-Version: I2P\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-06-05 23:01+0000\n"
-"PO-Revision-Date: 2017-06-30 21:32+0000\n"
-"Last-Translator: zzzi2p\n"
+"PO-Revision-Date: 2017-07-19 11:18+0000\n"
+"Last-Translator: Sebastiano Pistore <SebastianoPistore.info@protonmail.ch>\n"
 "Language-Team: Italian (http://www.transifex.com/otf/I2P/language/it/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -166,7 +167,7 @@ msgstr "Errore nella lettura del file inviato: {0}"
 #: src/src/i2p/susi/webmail/WebMail.java:1326
 #: src/src/i2p/susi/webmail/WebMail.java:1329
 msgid "Attachment not found."
-msgstr "Impossibile trovare l'allegato"
+msgstr "Impossibile trovare l'allegato."
 
 #. error if we get here
 #: src/src/i2p/susi/webmail/WebMail.java:1356
@@ -318,7 +319,7 @@ msgstr "Cancella gli allegati selezionati"
 
 #: src/src/i2p/susi/webmail/WebMail.java:2215
 msgid "I2PMail Login"
-msgstr ""
+msgstr "Accesso a I2PMail"
 
 #. current postman hq length limits 16/12, new postman version 32/32
 #: src/src/i2p/susi/webmail/WebMail.java:2217
@@ -493,7 +494,7 @@ msgstr "Torna alla Cartella"
 
 #: src/src/i2p/susi/webmail/WebMail.java:2444
 msgid "Could not fetch mail."
-msgstr "Non è stato possibile recuperare la mail"
+msgstr "Non è stato possibile recuperare la mail."
 
 #: src/src/i2p/susi/webmail/WebMail.java:2462
 msgid "Folder Page Size"
@@ -530,7 +531,7 @@ msgstr "Errore nell'apertura della mailbox"
 #: src/src/i2p/susi/webmail/pop3/POP3MailBox.java:1025
 #: src/src/i2p/susi/webmail/smtp/SMTPClient.java:249
 msgid "Login failed"
-msgstr "Login fallito "
+msgstr "Autenticazione fallita"
 
 #: src/src/i2p/susi/webmail/smtp/SMTPClient.java:214
 msgid "Cannot connect"
diff --git a/apps/susimail/locale/messages_ko.po b/apps/susimail/locale/messages_ko.po
index 53289e3e86a02adec116fdfbba6edc54cb172064..494de5bac5ef9b6098b6c81bfed45075f25a61bc 100644
--- a/apps/susimail/locale/messages_ko.po
+++ b/apps/susimail/locale/messages_ko.po
@@ -4,14 +4,15 @@
 # To contribute translations, see http://www.i2p2.de/newdevelopers
 # 
 # Translators:
+# HelloKS <kqwe1859@gmail.com>, 2017
 # SEPT____ <xpressengine3@mail.beo.kr>, 2016
 msgid ""
 msgstr ""
 "Project-Id-Version: I2P\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-06-05 23:01+0000\n"
-"PO-Revision-Date: 2017-06-30 21:32+0000\n"
-"Last-Translator: zzzi2p\n"
+"PO-Revision-Date: 2017-07-15 04:19+0000\n"
+"Last-Translator: HelloKS <kqwe1859@gmail.com>\n"
 "Language-Team: Korean (http://www.transifex.com/otf/I2P/language/ko/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -309,7 +310,7 @@ msgstr "선택한 첨부파일 삭제"
 
 #: src/src/i2p/susi/webmail/WebMail.java:2215
 msgid "I2PMail Login"
-msgstr ""
+msgstr "I2P메일 로그인"
 
 #. current postman hq length limits 16/12, new postman version 32/32
 #: src/src/i2p/susi/webmail/WebMail.java:2217
diff --git a/apps/susimail/locale/messages_nb.po b/apps/susimail/locale/messages_nb.po
index 739755e67e3f11841c6dad3494ced36ad2043365..8227363735358f5da169f9e4737a2d2466c0a10a 100644
--- a/apps/susimail/locale/messages_nb.po
+++ b/apps/susimail/locale/messages_nb.po
@@ -10,7 +10,7 @@ msgstr ""
 "Project-Id-Version: I2P\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-06-05 23:01+0000\n"
-"PO-Revision-Date: 2017-06-30 21:32+0000\n"
+"PO-Revision-Date: 2017-07-27 01:20+0000\n"
 "Last-Translator: zzzi2p\n"
 "Language-Team: Norwegian Bokmål (http://www.transifex.com/otf/I2P/language/nb/)\n"
 "MIME-Version: 1.0\n"
@@ -376,7 +376,7 @@ msgstr ""
 
 #: src/src/i2p/susi/webmail/WebMail.java:2268
 msgid "Mark for deletion"
-msgstr ""
+msgstr "Marker for sletting"
 
 #: src/src/i2p/susi/webmail/WebMail.java:2271
 #: src/src/i2p/susi/webmail/WebMail.java:2431
@@ -401,7 +401,7 @@ msgstr ""
 
 #: src/src/i2p/susi/webmail/WebMail.java:2328
 msgid "No messages"
-msgstr ""
+msgstr "Ingen meldinger"
 
 #. TODO ngettext
 #: src/src/i2p/susi/webmail/WebMail.java:2340
@@ -469,7 +469,7 @@ msgstr ""
 
 #: src/src/i2p/susi/webmail/WebMail.java:2409
 msgid "Forward"
-msgstr ""
+msgstr "Videresend"
 
 #: src/src/i2p/susi/webmail/WebMail.java:2410
 msgid "Save As"
@@ -498,7 +498,7 @@ msgstr ""
 
 #: src/src/i2p/susi/webmail/WebMail.java:2468
 msgid "Advanced Configuration"
-msgstr ""
+msgstr "Avansert oppsett"
 
 #: src/src/i2p/susi/webmail/WebMail.java:2478
 msgid "Save Configuration"
diff --git a/apps/susimail/locale/messages_nl.po b/apps/susimail/locale/messages_nl.po
index 9ca33b8c431fa1a93698c1ce95215e2f1117eed1..33314fd3b5f855ff5915a467c5c0fae9673c7131 100644
--- a/apps/susimail/locale/messages_nl.po
+++ b/apps/susimail/locale/messages_nl.po
@@ -8,13 +8,14 @@
 # foo <foo@bar>, 2009
 # Nathan Follens, 2015
 # attesor <random901@zoho.com>, 2012
+# skoning <skoning@onenetbeyond.org>, 2017
 msgid ""
 msgstr ""
 "Project-Id-Version: I2P\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-06-05 23:01+0000\n"
-"PO-Revision-Date: 2017-06-30 21:32+0000\n"
-"Last-Translator: zzzi2p\n"
+"PO-Revision-Date: 2017-07-22 11:00+0000\n"
+"Last-Translator: skoning <skoning@onenetbeyond.org>\n"
 "Language-Team: Dutch (http://www.transifex.com/otf/I2P/language/nl/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -189,7 +190,7 @@ msgstr[1] "{0} berichten verwijderd."
 #: src/src/i2p/susi/webmail/WebMail.java:1505
 #, java-format
 msgid "Host unchanged. Edit configation file {0} to change host."
-msgstr ""
+msgstr "Host onveranderd. Pas het configuratiebestand {0} aan om de host aan te passen."
 
 #: src/src/i2p/susi/webmail/WebMail.java:1520
 msgid "Configuration saved"
@@ -314,7 +315,7 @@ msgstr "Geselecteerde bijlagen verwijderen"
 
 #: src/src/i2p/susi/webmail/WebMail.java:2215
 msgid "I2PMail Login"
-msgstr ""
+msgstr "I2PMail Login"
 
 #. current postman hq length limits 16/12, new postman version 32/32
 #: src/src/i2p/susi/webmail/WebMail.java:2217
diff --git a/apps/susimail/src/src/i2p/susi/webmail/WebMail.java b/apps/susimail/src/src/i2p/susi/webmail/WebMail.java
index a01c1861059fa47ba29f0dba7ac5404be5102508..035d1d472f8d34ef58cccc0153bcfb49843fd3ca 100644
--- a/apps/susimail/src/src/i2p/susi/webmail/WebMail.java
+++ b/apps/susimail/src/src/i2p/susi/webmail/WebMail.java
@@ -1811,10 +1811,10 @@ public class WebMail extends HttpServlet
 					"<input type=\"hidden\" name=\"" + SUSI_NONCE + "\" value=\"" + nonce + "\">");
 
 				if( sessionObject.error != null && sessionObject.error.length() > 0 ) {
-					out.println( "<div class=\"notifications\"><p class=\"error\">" + quoteHTML(sessionObject.error).replace("\n", "<br>") + "</p></div>" );
+					out.println( "<div class=\"notifications\" onclick=\"this.remove()\"><p class=\"error\">" + quoteHTML(sessionObject.error).replace("\n", "<br>") + "</p></div>" );
 				}
 				if( sessionObject.info != null && sessionObject.info.length() > 0 ) {
-					out.println( "<div class=\"notifications\"><p class=\"info\"><b>" + quoteHTML(sessionObject.info).replace("\n", "<br>") + "</b></p></div>" );
+					out.println( "<div class=\"notifications\" onclick=\"this.remove()\"><p class=\"info\"><b>" + quoteHTML(sessionObject.info).replace("\n", "<br>") + "</b></p></div>" );
 				}
 				/*
 				 * now write body
@@ -2049,7 +2049,7 @@ public class WebMail extends HttpServlet
 				ok = false;
 				sessionObject.error += e.getMessage();
 			}
-			String boundary = "_="+(int)(Math.random()*Integer.MAX_VALUE)+""+(int)(Math.random()*Integer.MAX_VALUE);
+			String boundary = "_=" + I2PAppContext.getGlobalContext().random().nextLong();
 			boolean multipart = false;
 			if( sessionObject.attachments != null && !sessionObject.attachments.isEmpty() ) {
 				multipart = true;
@@ -2233,7 +2233,7 @@ public class WebMail extends HttpServlet
 			 spacer +
 			 button(CONFIGURE, _t("Settings")) +
 			"</td></tr>\n" +
-			"<tr><td align=\"center\" colspan=\"2\"><hr><a href=\"http://hq.postman.i2p/?page_id=14\">" + _t("Learn about I2P mail") + "</a> | <a href=\"http://hq.postman.i2p/?page_id=16\">" + _t("Create Account") + "</a></td></tr>\n" +
+			"<tr><td align=\"center\" colspan=\"2\"><hr><a href=\"http://hq.postman.i2p/?page_id=14\" target=\"_blank\">" + _t("Learn about I2P mail") + "</a> | <a href=\"http://hq.postman.i2p/?page_id=16\" target=\"_blank\">" + _t("Create Account") + "</a></td></tr>\n" +
 			"</table></div>");
 	}
 
diff --git a/build.xml b/build.xml
index 4acd0ba3f19781a2bcb208cc2f5bfc1aeb9ea99a..da1504b8bed9992be72675d4745af76733c951d9 100644
--- a/build.xml
+++ b/build.xml
@@ -1394,8 +1394,8 @@
           <fileset dir="installer/resources/proxy/" includes="*.ht" />
           <!-- lang_ar.png added in 0.8.4; a1,a2,je, and eu.png added in 0.8.9; gg.png added in 0.8.10;
                im.png added in 0.8.12; cw.png added in 0.9.5; ap,bl,bq,ss,sx added in 0.9.21;
-               lang_gl added in 0.9.28 -->
-          <fileset dir="installer/resources/" includes="icons/flags/lang_ar.png icons/flags/gg.png icons/flags/je.png icons/flags/eu.png icons/flags/im.png icons/flags/a1.png icons/flags/a2.png icons/flags/cw.png icons/flags/ap.png icons/flags/bl.png icons/flags/bq.png icons/flags/ss.png icons/flags/sx.png icons/flags/lang_gl.png" />
+               lang_gl added in 0.9.28; a0.png added in 0.9.31 -->
+          <fileset dir="installer/resources/" includes="icons/flags/lang_ar.png icons/flags/gg.png icons/flags/je.png icons/flags/eu.png icons/flags/im.png icons/flags/a1.png icons/flags/a2.png icons/flags/cw.png icons/flags/ap.png icons/flags/bl.png icons/flags/bq.png icons/flags/ss.png icons/flags/sx.png icons/flags/lang_gl.png icons/flags/a0.png" />
         </copy>
     </target>
 
diff --git a/core/java/src/freenet/support/CPUInformation/IntelInfoImpl.java b/core/java/src/freenet/support/CPUInformation/IntelInfoImpl.java
index eb6ec0fe31089c8bb07606a365b8d4302c3a5b0f..21b1dde098dd801439c4b227ffda3c3a0f34de2f 100644
--- a/core/java/src/freenet/support/CPUInformation/IntelInfoImpl.java
+++ b/core/java/src/freenet/support/CPUInformation/IntelInfoImpl.java
@@ -437,6 +437,8 @@ class IntelInfoImpl extends CPUIDCPUInfo implements IntelCPUInfo
                     // See reference link errata #SKD052 re: BMI
                     // ref: http://www.intel.com/content/dam/www/public/us/en/documents/specification-updates/desktop-6th-gen-core-family-spec-update.pdf
                     // See Haswell notes above
+                    case 0x4e:
+                    case 0x55:
                     case 0x5e: {
                         CPUIDCPUInfo c = new CPUIDCPUInfo();
                         if (c.hasAVX2() && c.hasBMI1()  && c.hasBMI2() &&
diff --git a/core/java/src/net/i2p/CoreVersion.java b/core/java/src/net/i2p/CoreVersion.java
index 905aaf3238d3521c643b7ee1c7bcc6e68843f5ae..e9dd043666fc5b2761b6b5b02ad1091b77951f13 100644
--- a/core/java/src/net/i2p/CoreVersion.java
+++ b/core/java/src/net/i2p/CoreVersion.java
@@ -18,7 +18,7 @@ public class CoreVersion {
     /** deprecated */
     public final static String ID = "Monotone";
 
-    public final static String VERSION = "0.9.30";
+    public final static String VERSION = "0.9.31";
 
     /**
      *  For Vuze.
diff --git a/core/java/src/net/i2p/crypto/KeyStoreUtil.java b/core/java/src/net/i2p/crypto/KeyStoreUtil.java
index 89689fe5d8d893110fc2ddfceb4623079a6130e3..ffea5085908a9dc625eea7c0515a819f8b358e71 100644
--- a/core/java/src/net/i2p/crypto/KeyStoreUtil.java
+++ b/core/java/src/net/i2p/crypto/KeyStoreUtil.java
@@ -599,10 +599,10 @@ public final class KeyStoreUtil {
                 throw new IOException("Can't create directory " + dir);
         }
         Object[] rv = SelfSignedGenerator.generate(cname, ou, null, "I2P Anonymous Network", null, null, validDays, type);
-        PublicKey jpub = (PublicKey) rv[0];
+        //PublicKey jpub = (PublicKey) rv[0];
         PrivateKey jpriv = (PrivateKey) rv[1];
         X509Certificate cert = (X509Certificate) rv[2];
-        X509CRL crl = (X509CRL) rv[3];
+        //X509CRL crl = (X509CRL) rv[3];
         List<X509Certificate> certs = Collections.singletonList(cert);
         storePrivateKey(ks, ksPW, alias, keyPW, jpriv, certs);
         return rv;
diff --git a/core/java/src/net/i2p/crypto/SelfSignedGenerator.java b/core/java/src/net/i2p/crypto/SelfSignedGenerator.java
index 5f525b2d7a59bef19eec2ee18aa11fd4b867a3fd..75f51b2f93d1973ad9d05e5c59390373462dcbd2 100644
--- a/core/java/src/net/i2p/crypto/SelfSignedGenerator.java
+++ b/core/java/src/net/i2p/crypto/SelfSignedGenerator.java
@@ -713,7 +713,7 @@ public final class SelfSignedGenerator {
 
     private static final void test(String name, SigType type) throws Exception {
             Object[] rv = generate("cname@example.com", "ou", "o", null, "st", "c", 3652, type);
-            PublicKey jpub = (PublicKey) rv[0];
+            //PublicKey jpub = (PublicKey) rv[0];
             PrivateKey jpriv = (PrivateKey) rv[1];
             X509Certificate cert = (X509Certificate) rv[2];
             X509CRL crl = (X509CRL) rv[3];
diff --git a/core/java/src/net/i2p/data/SigningPublicKey.java b/core/java/src/net/i2p/data/SigningPublicKey.java
index 1234d1b7038e1079a7c89a4a38cec8f20d3a3ea7..2c28e3b241141de292c5532589f45ecc1814aeb1 100644
--- a/core/java/src/net/i2p/data/SigningPublicKey.java
+++ b/core/java/src/net/i2p/data/SigningPublicKey.java
@@ -132,10 +132,20 @@ public class SigningPublicKey extends SimpleDataStructure {
         if (newType == null)
             return new SigningPublicKey(null, _data);
         int newLen = newType.getPubkeyLen();
-        if (newLen == SigType.DSA_SHA1.getPubkeyLen())
+        int ctype = kcert.getCryptoTypeCode();
+        if (ctype == 0) {
+            // prohibit excess key data
+            // TODO non-zero crypto type if added
+            int sz = 7;
+            if (newLen > KEYSIZE_BYTES)
+                sz += newLen - KEYSIZE_BYTES;
+            if (kcert.size() != sz)
+                throw new IllegalArgumentException("Excess data in key certificate");
+        }
+        if (newLen == KEYSIZE_BYTES)
             return new SigningPublicKey(newType, _data);
         byte[] newData = new byte[newLen];
-        if (newLen < SigType.DSA_SHA1.getPubkeyLen()) {
+        if (newLen < KEYSIZE_BYTES) {
             // right-justified
             System.arraycopy(_data, _data.length - newLen, newData, 0, newLen);
         } else {
@@ -163,9 +173,9 @@ public class SigningPublicKey extends SimpleDataStructure {
         if (_type != SigType.DSA_SHA1)
             throw new IllegalStateException("Cannot convert " + _type + " to " + newType);
         int newLen = newType.getPubkeyLen();
-        if (newLen >= SigType.DSA_SHA1.getPubkeyLen())
+        if (newLen >= KEYSIZE_BYTES)
             return null;
-        int padLen = SigType.DSA_SHA1.getPubkeyLen() - newLen;
+        int padLen = KEYSIZE_BYTES - newLen;
         byte[] pad = new byte[padLen];
         System.arraycopy(_data, 0, pad, 0, padLen);
         return pad;
diff --git a/core/java/src/net/i2p/kademlia/KBucketSet.java b/core/java/src/net/i2p/kademlia/KBucketSet.java
index 29af4c144f19aabb127727eeb00f20df6915ba8a..c3b28943c2f0cb573039a63f21c7b84e28dba55d 100644
--- a/core/java/src/net/i2p/kademlia/KBucketSet.java
+++ b/core/java/src/net/i2p/kademlia/KBucketSet.java
@@ -730,13 +730,13 @@ public class KBucketSet<T extends SimpleDataStructure> {
         public void getEntries(SelectionCollector<T> collector) {
             throw new UnsupportedOperationException();
         }
-    
+
         public void clear() {}
 
         public boolean add(T peer) {
             throw new UnsupportedOperationException();
         }
-    
+
         public boolean remove(T peer) {
             return false;
         }
@@ -765,6 +765,7 @@ public class KBucketSet<T extends SimpleDataStructure> {
     @Override
     public String toString() {
         StringBuilder buf = new StringBuilder(1024);
+        buf.append("<div class=\"debug_container buckets\">");
         buf.append("<hr><b>Bucket set rooted on:</b> ").append(_us.toString())
            .append(" K=").append(BUCKET_SIZE)
            .append(" B=").append(B_VALUE)
@@ -779,6 +780,7 @@ public class KBucketSet<T extends SimpleDataStructure> {
                 buf.append(b.toString()).append("<br>\n");
             }
         } finally { releaseReadLock(); }
+        buf.append("</div>");
         return buf.toString();
     }
 }
diff --git a/core/java/src/net/i2p/util/EepGet.java b/core/java/src/net/i2p/util/EepGet.java
index 9d4656cee60dcaf321ee7fc2051b50f1c309429d..9534d79db5e6139a1c0d82ab12738ec29cec387b 100644
--- a/core/java/src/net/i2p/util/EepGet.java
+++ b/core/java/src/net/i2p/util/EepGet.java
@@ -1396,7 +1396,8 @@ public class EepGet {
         if (  /* (!_shouldProxy) && */
             // This is kindof a hack, but if we are downloading a gzip file
             // we don't want to transparently gunzip it and save it as a .gz file.
-            (!path.endsWith(".gz")) && (!path.endsWith(".tgz")))
+            path == null ||
+            (!path.endsWith(".gz") && !path.endsWith(".tgz")))
             buf.append("gzip");
         buf.append("\r\n");
         if(!uaOverridden)
diff --git a/core/java/src/net/i2p/util/PortMapper.java b/core/java/src/net/i2p/util/PortMapper.java
index 5dcf55c1bf6e5388e574bcb0c600e0b108e036de..105dc1f07487f4a72994137e61adee9f8ac3b9a8 100644
--- a/core/java/src/net/i2p/util/PortMapper.java
+++ b/core/java/src/net/i2p/util/PortMapper.java
@@ -179,7 +179,7 @@ public class PortMapper {
      */
     public void renderStatusHTML(Writer out) throws IOException {
         List<String> services = new ArrayList<String>(_dir.keySet());
-        out.write("<h2>Port Mapper</h2><table><tr><th>Service<th>Host<th>Port\n");
+        out.write("<h2 id=\"debug_portmapper\">Port Mapper</h2><table id=\"portmapper\"><tr><th>Service<th>Host<th>Port\n");
         Collections.sort(services);
         for (String s : services) {
             InetSocketAddress ia = _dir.get(s);
diff --git a/debian-alt/doc/debian-build.txt b/debian-alt/doc/debian-build.txt
index 38f7805d4e42fe30c92d362bdf99b678bc5d7552..3182f84e8c5f85a5631d353e8ee3408d433fc018 100644
--- a/debian-alt/doc/debian-build.txt
+++ b/debian-alt/doc/debian-build.txt
@@ -75,8 +75,8 @@ reprepro -v update precise
 reprepro -v update trusty
 reprepro -v update vivid
 reprepro -v update xenial
-reprepro -v update yakkety
 reprepro -v update zesty
+reprepro -v update artful
 # todo when set up
 # To add or remove distributions, edit /var/www/debian/conf/distributions
 # and /var/www/debian/conf/updates
@@ -89,22 +89,25 @@ reprepro -v update zesty
 # Note that syntax is reprepro copysrc TO FROM package!
 reprepro -v copysrc wheezy precise i2p
 
-# To copy libjbigi-jni i386 (only) from trusty to jessie:
+# To copy trusty to jessie:
 # Note that syntax is reprepro copysrc TO FROM package!
-reprepro -v -A i386 copy jessie trusty libjbigi-jni
+reprepro -v copysrc jessie trusty i2p
 
-# To copy jessie to sid:
+# To copy xenial to stretch:
 # Note that syntax is reprepro copysrc TO FROM package!
-reprepro -v copysrc sid jessie i2p
+reprepro -v copysrc stretch xenial i2p
 
 # install in the architectures not copied from ubuntu
 # 'flood' should do this but forgot how, can't make it work any more
-reprepro -v -A 'armel|armhf|powerpc' includedeb wheezy i2p_0.9.xxp-1ubuntu1_all.deb
-reprepro -v -A 'armel|armhf|powerpc' includedeb wheezy i2p-doc_0.9.xxp-1ubuntu1_all.deb
-reprepro -v -A 'armel|armhf|powerpc' includedeb wheezy i2p-router_0.9.xxp-1ubuntu1_all.deb
-reprepro -v -A 'armel|armhf|powerpc' includedeb jessie i2p_0.9.xx-1ubuntu1_all.deb
-reprepro -v -A 'armel|armhf|powerpc' includedeb jessie i2p-doc_0.9.xx-1ubuntu1_all.deb
-reprepro -v -A 'armel|armhf|powerpc' includedeb jessie i2p-router_0.9.xx-1ubuntu1_all.deb
+reprepro -v -A 'armel|armhf|powerpc' includedeb wheezy i2p_0.9.xxp-1precise1_all.deb
+reprepro -v -A 'armel|armhf|powerpc' includedeb wheezy i2p-doc_0.9.xxp-1precise1_all.deb
+reprepro -v -A 'armel|armhf|powerpc' includedeb wheezy i2p-router_0.9.xxp-1precise1_all.deb
+reprepro -v -A 'armel|armhf|powerpc' includedeb jessie i2p_0.9.xxp-1trusty1_all.deb
+reprepro -v -A 'armel|armhf|powerpc' includedeb jessie i2p-doc_0.9.xxp-1trusty1_all.deb
+reprepro -v -A 'armel|armhf|powerpc' includedeb jessie i2p-router_0.9.xxp-1trusty1_all.deb
+reprepro -v -A 'armel|armhf' includedeb stretch i2p_0.9.xx-1ubuntu1_all.deb
+reprepro -v -A 'armel|armhf' includedeb stretch i2p-doc_0.9.xx-1ubuntu1_all.deb
+reprepro -v -A 'armel|armhf' includedeb stretch i2p-router_0.9.xx-1ubuntu1_all.deb
 reprepro -v -A 'armel|armhf' includedeb sid i2p_0.9.xx-1ubuntu1_all.deb
 reprepro -v -A 'armel|armhf' includedeb sid i2p-doc_0.9.xx-1ubuntu1_all.deb
 reprepro -v -A 'armel|armhf' includedeb sid i2p-router_0.9.xx-1ubuntu1_all.deb
diff --git a/debian-alt/precise/changelog b/debian-alt/precise/changelog
index 590957b562d7017e20254019dad78158bbfba7e4..b1558b2de6d79e56e92a5b64834fde977fa0507b 100644
--- a/debian-alt/precise/changelog
+++ b/debian-alt/precise/changelog
@@ -1,3 +1,9 @@
+i2p (0.9.31p-1~precise+1) precise; urgency=medium
+
+  * Backport to Precise
+
+ -- zzz on i2p (key signing) <zzz@i2pmail.org>  Wed, 09 Aug 2017 12:12:12 +0000
+
 i2p (0.9.30p-1~precise+1) precise; urgency=medium
 
   * Backport to Precise
diff --git a/debian-alt/trusty/changelog b/debian-alt/trusty/changelog
index 4deb2882a7a374f819194314f553980103297656..6ca1fcbcff89ac9e6d5fb309575358f091dc2d4d 100644
--- a/debian-alt/trusty/changelog
+++ b/debian-alt/trusty/changelog
@@ -1,3 +1,9 @@
+i2p (0.9.31p-2~trusty+1) trusty; urgency=medium
+
+  * Backport to Trusty
+
+ -- zzz on i2p (key signing) <zzz@i2pmail.org>  Wed, 09 Aug 2017 12:12:12 +0000
+
 i2p (0.9.30p-2~trusty+1) trusty; urgency=medium
 
   * Restore systemd usage
diff --git a/debian-alt/xenial/changelog b/debian-alt/xenial/changelog
index 3c78095d49b0a8edfeb16793ee2c40098929b13d..ee4debe5e8339fc51bcdfc602493620c8014c660 100644
--- a/debian-alt/xenial/changelog
+++ b/debian-alt/xenial/changelog
@@ -1,3 +1,9 @@
+i2p (0.9.31-1ubuntu1) xenial; urgency=medium
+
+  * New upstream version 0.9.31
+
+ -- zzz on i2p (key signing) <zzz@i2pmail.org>  Wed, 09 Aug 2017 12:12:12 +0000
+
 i2p (0.9.30-3ubuntu1) xenial; urgency=medium
 
   * New upstream version 0.9.30
diff --git a/debian/patches/0001-path-substitution.patch b/debian/patches/0001-path-substitution.patch
index 1fab6f69ac89a9d03ad5f442ed881a75c9c424aa..d96b0ca465a848b65d780aa654c2b4ff72a01cb6 100644
--- a/debian/patches/0001-path-substitution.patch
+++ b/debian/patches/0001-path-substitution.patch
@@ -14,6 +14,8 @@ Debian wrapper.config to try to prevent confusion.
  installer/resources/wrapper.config |   70 ++++++------------------------
  4 files changed, 24 insertions(+), 134 deletions(-)
 
+Index: b/installer/resources/eepget
+===================================================================
 --- a/installer/resources/eepget
 +++ b/installer/resources/eepget
 @@ -1,3 +1,3 @@
@@ -22,6 +24,8 @@ Debian wrapper.config to try to prevent confusion.
 -java -cp "$I2P/lib/i2p.jar" net.i2p.util.EepGet "$@"
 +I2P="/usr/share/i2p"
 +java -cp "$I2P/lib/i2p.jar:/usr/share/java/gnu-getopt.jar" net.i2p.util.EepGet "$@"
+Index: b/installer/resources/i2prouter
+===================================================================
 --- a/installer/resources/i2prouter
 +++ b/installer/resources/i2prouter
 @@ -10,7 +10,7 @@
@@ -61,7 +65,7 @@ Debian wrapper.config to try to prevent confusion.
  # PORTABLE installation:
  # Use the following instead.
  #I2PTEMP="%INSTALL_PATH"
-@@ -69,8 +60,8 @@
+@@ -69,8 +60,8 @@ fi
  #RUN_AS_USER=
  
  # Wrapper
@@ -72,7 +76,7 @@ Debian wrapper.config to try to prevent confusion.
  
  # Priority at which to run the wrapper.  See "man nice" for valid priorities.
  #  nice is only used if a priority is specified.
-@@ -177,77 +168,8 @@
+@@ -177,77 +168,8 @@ if [ ! -e "$WRAPPER_CONF" ]; then
         exit 1
  fi
  
@@ -150,7 +154,7 @@ Debian wrapper.config to try to prevent confusion.
  if [ -n "$FIXED_COMMAND" ]
  then
      COMMAND="$FIXED_COMMAND"
-@@ -1068,7 +982,6 @@
+@@ -1068,7 +990,6 @@ startwait() {
          if [ "X$pid" = "X" ]
          then
              eval echo " `gettext 'WARNING: $APP_LONG_NAME may have failed to start.'`"
@@ -158,7 +162,7 @@ Debian wrapper.config to try to prevent confusion.
          else
              eval echo ' running: PID:$pid'
          fi
-@@ -1871,7 +1784,7 @@
+@@ -1871,7 +1792,7 @@ showUsage() {
  }
  
  showsetusermesg()  {
@@ -167,7 +171,7 @@ Debian wrapper.config to try to prevent confusion.
  }
  
  checkifstartingasroot() {
-@@ -1879,7 +1792,7 @@
+@@ -1879,7 +1800,7 @@ checkifstartingasroot() {
          echo "`gettext 'Running I2P as the root user is *not* recommended.'`"
          showsetusermesg
          echo
@@ -176,7 +180,7 @@ Debian wrapper.config to try to prevent confusion.
          exit 1
      fi
  }
-@@ -1946,24 +1859,10 @@
+@@ -1946,24 +1867,10 @@ docommand() {
              status
              ;;
  
@@ -205,6 +209,8 @@ Debian wrapper.config to try to prevent confusion.
  
          'dump')
              checkUser "" "$COMMAND"
+Index: b/installer/resources/runplain.sh
+===================================================================
 --- a/installer/resources/runplain.sh
 +++ b/installer/resources/runplain.sh
 @@ -11,8 +11,8 @@
@@ -218,6 +224,8 @@ Debian wrapper.config to try to prevent confusion.
  
  # Having IPv6 enabled can cause problems with certain configurations. Changing the
  # next value to true may help.
+Index: b/installer/resources/wrapper.config
+===================================================================
 --- a/installer/resources/wrapper.config
 +++ b/installer/resources/wrapper.config
 @@ -8,22 +8,13 @@
@@ -245,7 +253,7 @@ Debian wrapper.config to try to prevent confusion.
  #
  #********************************************************************
  # Java Application
-@@ -60,13 +51,14 @@
+@@ -60,13 +51,14 @@ wrapper.java.mainclass=org.tanukisoftwar
  # classes, or all the classes of i2p.jar, are in a different directory).
  # Be sure there are no other duplicate classes.
  #
@@ -265,7 +273,7 @@ Debian wrapper.config to try to prevent confusion.
  
  # Java Bits.  On applicable platforms, tells the JVM to run in 32 or 64-bit mode.
  wrapper.java.additional.auto_bits=TRUE
-@@ -74,7 +66,7 @@
+@@ -74,7 +66,7 @@ wrapper.java.additional.auto_bits=TRUE
  # Java Additional Parameters
  # Numbers must be consecutive (except for stripquotes)
  wrapper.java.additional.1=-DloggerFilenameOverride=logs/log-router-@.txt
@@ -274,7 +282,7 @@ Debian wrapper.config to try to prevent confusion.
  wrapper.java.additional.2.stripquotes=TRUE
  
  # Prevent the JVM from exporting stats (and thereby causing hundreds of
-@@ -146,11 +138,7 @@
+@@ -146,11 +138,7 @@ wrapper.console.loglevel=INFO
  # You may wish to change this.
  # NOTE: On Linux/Mac this is overridden in the i2prouter script; changes here will have no effect.
  # System temp directory:
@@ -287,7 +295,7 @@ Debian wrapper.config to try to prevent confusion.
  
  # Format of output for the log file.
  # The format consists of the tokens 'L' for log level, 'P' for prefix, 'D' for thread,
-@@ -220,11 +208,7 @@
+@@ -220,11 +208,7 @@ wrapper.use_system_time=false
  # Linux/Mac users, do not set here, see settings in the i2prouter script.
  # Directory must exist or the wrapper will fail to start.
  # System temp directory:
@@ -300,7 +308,7 @@ Debian wrapper.config to try to prevent confusion.
  #
  # From i2prouter:
  #
-@@ -238,10 +222,7 @@
+@@ -238,10 +222,7 @@ wrapper.use_system_time=false
  # Linux/Mac users, do not set here, see settings in the i2prouter script.
  # Directory must exist or the wrapper will fail to start.
  # System temp directory:
@@ -312,7 +320,7 @@ Debian wrapper.config to try to prevent confusion.
  
  #********************************************************************
  # Wrapper General Properties
-@@ -259,32 +240,6 @@
+@@ -259,32 +240,6 @@ wrapper.umask=0022
  wrapper.java.umask=0022
  wrapper.logfile.umask=0077
  
@@ -345,31 +353,33 @@ Debian wrapper.config to try to prevent confusion.
  # http://wrapper.tanukisoftware.com/doc/english/prop-check-deadlock.html
  # requires wrapper 3.5.0 or higher
  # interval is seconds
+Index: b/installer/resources/locale/po/messages_de.po
+===================================================================
 --- a/installer/resources/locale/po/messages_de.po
 +++ b/installer/resources/locale/po/messages_de.po
-@@ -195,15 +195,15 @@
+@@ -190,13 +190,13 @@ msgid "Request a Java thread dump if run
  msgstr "Falls gestartet, fordere einen Java Thread dump an"
  
- #: ../i2prouter:1864
+ #: ../i2prouter:1874
 -msgid "Please edit i2prouter and set the variable RUN_AS_USER"
 -msgstr "Bitte bearbeite i2prouter und setze die Variable RUN_AS_USER"
 +msgid "Please edit /etc/default/i2p and set the variable RUN_AS_USER"
 +msgstr "Bitte bearbeite /etc/default/i2p und setze die Variable RUN_AS_USER"
  
- #: ../i2prouter:1869
+ #: ../i2prouter:1879
  msgid "Running I2P as the root user is *not* recommended."
  msgstr "I2P als root Benutzer auszuführen ist *nicht* empfehlenswert."
  
- #: ../i2prouter:1872
+ #: ../i2prouter:1882
 -msgid "To run as root anyway, edit i2prouter and set ALLOW_ROOT=true."
+-msgstr "Um I2P trotzdem als root auszuführen bearbeite i2prouter und setze ALLOW_ROOT=true."
 +msgid "To run as root anyway, edit /etc/default/i2p and set ALLOW_ROOT=true."
- msgstr ""
--"Um I2P trotzdem als root auszuführen bearbeite i2prouter und setze "
-+"Um I2P trotzdem als root auszuführen bearbeite /etc/default/i2p und setze "
- "ALLOW_ROOT=true."
++msgstr "Um I2P trotzdem als root auszuführen bearbeite /etc/default/i2p und setze ALLOW_ROOT=true."
+Index: b/installer/resources/locale/po/messages_en.po
+===================================================================
 --- a/installer/resources/locale/po/messages_en.po
 +++ b/installer/resources/locale/po/messages_en.po
-@@ -185,7 +185,7 @@
+@@ -185,7 +185,7 @@ msgid "Request a Java thread dump if run
  msgstr ""
  
  #: ../i2prouter:1874
@@ -378,187 +388,194 @@ Debian wrapper.config to try to prevent confusion.
  msgstr ""
  
  #: ../i2prouter:1879
-@@ -193,5 +193,5 @@
+@@ -193,5 +193,5 @@ msgid "Running I2P as the root user is *
  msgstr ""
  
  #: ../i2prouter:1882
 -msgid "To run as root anyway, edit i2prouter and set ALLOW_ROOT=true."
 +msgid "To run as root anyway, edit /etc/default/i2p and set ALLOW_ROOT=true."
  msgstr ""
+Index: b/installer/resources/locale/po/messages_it.po
+===================================================================
 --- a/installer/resources/locale/po/messages_it.po
 +++ b/installer/resources/locale/po/messages_it.po
-@@ -187,7 +187,7 @@
- msgstr ""
+@@ -189,13 +189,13 @@ msgid "Request a Java thread dump if run
+ msgstr "Richiedi un Java thread dump se è in esecuzione."
  
- #: ../i2prouter:1864
+ #: ../i2prouter:1874
 -msgid "Please edit i2prouter and set the variable RUN_AS_USER"
+-msgstr "Modifica i2prouter e imposta la variabile RUN_AS_USER"
 +msgid "Please edit /etc/default/i2p and set the variable RUN_AS_USER"
- msgstr ""
++msgstr "Modifica /etc/default/i2p e imposta la variabile RUN_AS_USER"
  
- #: ../i2prouter:1869
-@@ -195,5 +195,5 @@
- msgstr ""
+ #: ../i2prouter:1879
+ msgid "Running I2P as the root user is *not* recommended."
+ msgstr "Eseguire I2P come amministratore *non* è consigliato."
  
- #: ../i2prouter:1872
+ #: ../i2prouter:1882
 -msgid "To run as root anyway, edit i2prouter and set ALLOW_ROOT=true."
+-msgstr "Per eseguirlo comunque come amministratore, modifica  i2prouter e imposta ALLOW_ROOT=true."
 +msgid "To run as root anyway, edit /etc/default/i2p and set ALLOW_ROOT=true."
- msgstr ""
++msgstr "Per eseguirlo comunque come amministratore, modifica  /etc/default/i2p e imposta ALLOW_ROOT=true."
+Index: b/installer/resources/locale/po/messages_zh.po
+===================================================================
 --- a/installer/resources/locale/po/messages_zh.po
 +++ b/installer/resources/locale/po/messages_zh.po
-@@ -187,13 +187,13 @@
+@@ -186,13 +186,13 @@ msgid "Request a Java thread dump if run
  msgstr "请求Java转储(如果在运行)。"
  
- #: ../i2prouter:1864
+ #: ../i2prouter:1874
 -msgid "Please edit i2prouter and set the variable RUN_AS_USER"
 -msgstr "请编辑 i2prouter 设置 RUN_AS_USER 变量"
 +msgid "Please edit /etc/default/i2p and set the variable RUN_AS_USER"
 +msgstr "请编辑 /etc/default/i2p 设置 RUN_AS_USER 变量"
  
- #: ../i2prouter:1869
+ #: ../i2prouter:1879
  msgid "Running I2P as the root user is *not* recommended."
  msgstr "推荐 *不要* 以 root 身份运行 I2P 。"
  
- #: ../i2prouter:1872
+ #: ../i2prouter:1882
 -msgid "To run as root anyway, edit i2prouter and set ALLOW_ROOT=true."
 -msgstr "要以root运行,请编辑 i2prouter 并设置 ALLOW_ROOT=true。"
 +msgid "To run as root anyway, edit /etc/default/i2p and set ALLOW_ROOT=true."
 +msgstr "要以root运行,请编辑 /etc/default/i2p 并设置 ALLOW_ROOT=true。"
+Index: b/installer/resources/locale/po/messages_tr.po
+===================================================================
 --- a/installer/resources/locale/po/messages_tr.po
 +++ b/installer/resources/locale/po/messages_tr.po
-@@ -188,15 +188,15 @@
+@@ -186,13 +186,13 @@ msgid "Request a Java thread dump if run
  msgstr "Çalışıyorsa Java iş parçacığı dökümü isteyin."
  
- #: ../i2prouter:1864
+ #: ../i2prouter:1874
 -msgid "Please edit i2prouter and set the variable RUN_AS_USER"
 -msgstr "i2prouter dosyasını düzenleyin ve RUN_AS_USER değişkenini ayarlayın"
 +msgid "Please edit /etc/default/i2p and set the variable RUN_AS_USER"
 +msgstr "/etc/default/i2p dosyasını düzenleyin ve RUN_AS_USER değişkenini ayarlayın"
  
- #: ../i2prouter:1869
+ #: ../i2prouter:1879
  msgid "Running I2P as the root user is *not* recommended."
  msgstr "I2P yazılımının root olarak çalıştırmanız *önerilmez*."
  
- #: ../i2prouter:1872
+ #: ../i2prouter:1882
 -msgid "To run as root anyway, edit i2prouter and set ALLOW_ROOT=true."
+-msgstr "Root olarak çalıştırmak için i2prouter dosyasını düzenleyin ve ALLOW_ROOT=true ayarını yapın."
 +msgid "To run as root anyway, edit /etc/default/i2p and set ALLOW_ROOT=true."
- msgstr ""
--"Root olarak çalıştırmak için i2prouter dosyasını düzenleyin ve "
-+"Root olarak çalıştırmak için /etc/default/i2p dosyasını düzenleyin ve "
- "ALLOW_ROOT=true ayarını yapın."
++msgstr "Root olarak çalıştırmak için /etc/default/i2p dosyasını düzenleyin ve ALLOW_ROOT=true ayarını yapın."
+Index: b/installer/resources/locale/po/messages_es.po
+===================================================================
 --- a/installer/resources/locale/po/messages_es.po
 +++ b/installer/resources/locale/po/messages_es.po
-@@ -193,15 +193,15 @@
+@@ -190,13 +190,13 @@ msgid "Request a Java thread dump if run
  msgstr "Solicitar un volcado del hilo JAVA si se está ejecutando."
  
- #: ../i2prouter:1864
+ #: ../i2prouter:1874
 -msgid "Please edit i2prouter and set the variable RUN_AS_USER"
 -msgstr "Por favor edite i2prouter e introduzca la variable RUN_AS_USER"
 +msgid "Please edit /etc/default/i2p and set the variable RUN_AS_USER"
 +msgstr "Por favor edite /etc/default/i2p e introduzca la variable RUN_AS_USER"
  
- #: ../i2prouter:1869
+ #: ../i2prouter:1879
  msgid "Running I2P as the root user is *not* recommended."
  msgstr "\"No\" se recomienda ejecutar I2P como root."
  
- #: ../i2prouter:1872
+ #: ../i2prouter:1882
 -msgid "To run as root anyway, edit i2prouter and set ALLOW_ROOT=true."
+-msgstr "Para ejecutar como root de todos modos, edite i2prouter y ponga la variable ALLOW_ROOT=true."
 +msgid "To run as root anyway, edit /etc/default/i2p and set ALLOW_ROOT=true."
- msgstr ""
--"Para ejecutar como root de todos modos, edite i2prouter y ponga la variable "
-+"Para ejecutar como root de todos modos, edite /etc/default/i2p y ponga la variable "
- "ALLOW_ROOT=true."
++msgstr "Para ejecutar como root de todos modos, edite /etc/default/i2p y ponga la variable ALLOW_ROOT=true."
+Index: b/installer/resources/locale/po/messages_pt.po
+===================================================================
 --- a/installer/resources/locale/po/messages_pt.po
 +++ b/installer/resources/locale/po/messages_pt.po
-@@ -189,15 +189,15 @@
+@@ -190,13 +190,13 @@ msgid "Request a Java thread dump if run
  msgstr "Requisitar o histórico Java se iniciado."
  
- #: ../i2prouter:1864
+ #: ../i2prouter:1874
 -msgid "Please edit i2prouter and set the variable RUN_AS_USER"
--msgstr "Favor editar o arquivo i2prouter e configurar a variável RUN_AS_USER"
+-msgstr "Por favor, edite i2prouter e defina a variável RUN_AS_USER"
 +msgid "Please edit /etc/default/i2p and set the variable RUN_AS_USER"
-+msgstr "Favor editar o arquivo /etc/default/i2p e configurar a variável RUN_AS_USER"
++msgstr "Por favor, edite /etc/default/i2p e defina a variável RUN_AS_USER"
  
- #: ../i2prouter:1869
+ #: ../i2prouter:1879
  msgid "Running I2P as the root user is *not* recommended."
  msgstr "Iniciar I2P como permissões root *não* é recomendado."
  
- #: ../i2prouter:1872
+ #: ../i2prouter:1882
 -msgid "To run as root anyway, edit i2prouter and set ALLOW_ROOT=true."
+-msgstr "Para continuar a executar como \"root\", edite i2prouter e defina ALLOW_ROOT=true."
 +msgid "To run as root anyway, edit /etc/default/i2p and set ALLOW_ROOT=true."
- msgstr ""
--"Para executar como root mesmo assim, editar o i2prouter e configurar a "
-+"Para executar como root mesmo assim, editar o /etc/default/i2p e configurar a "
- "variável ALLOW_ROOT=true."
++msgstr "Para continuar a executar como \"root\", edite /etc/default/i2p e defina ALLOW_ROOT=true."
+Index: b/installer/resources/locale/po/messages_fr.po
+===================================================================
 --- a/installer/resources/locale/po/messages_fr.po
 +++ b/installer/resources/locale/po/messages_fr.po
-@@ -190,8 +190,8 @@
- msgstr "Request a Java thread dump if running."
+@@ -188,13 +188,13 @@ msgid "Request a Java thread dump if run
+ msgstr "Demander un vidage des fils d'exécution de Java si elle est en cours d'exécution."
  
- #: ../i2prouter:1864
+ #: ../i2prouter:1874
 -msgid "Please edit i2prouter and set the variable RUN_AS_USER"
--msgstr "Veuillez éditer i2prouter et paramétrer la variable RUN_AS_USER"
+-msgstr "Veuillez modifier i2prouter et définir la variable RUN_AS_USER"
 +msgid "Please edit /etc/default/i2p and set the variable RUN_AS_USER"
-+msgstr "Veuillez éditer /etc/default/i2p et paramétrer la variable RUN_AS_USER"
++msgstr "Veuillez modifier /etc/default/i2p et définir la variable RUN_AS_USER"
  
- #: ../i2prouter:1869
+ #: ../i2prouter:1879
  msgid "Running I2P as the root user is *not* recommended."
-@@ -199,7 +199,7 @@
- "Faire fonctionner I2P en tant qu'utilisateur root n'est *pas* recommandé."
+ msgstr "Il n'est *pas* recommandé d'exécuter I2P en tant que root."
  
- #: ../i2prouter:1872
+ #: ../i2prouter:1882
 -msgid "To run as root anyway, edit i2prouter and set ALLOW_ROOT=true."
+-msgstr "Pour quand même exécuter en tant que root, modifier i2prouter et définir ALLOW_ROOT=true."
 +msgid "To run as root anyway, edit /etc/default/i2p and set ALLOW_ROOT=true."
- msgstr ""
--"Pour exécuter en tant que root de toute façon, éditer i2prouter et mettre "
-+"Pour exécuter en tant que root de toute façon, éditer /etc/default/i2p et mettre "
- "ALLOW_ROOT=true."
++msgstr "Pour quand même exécuter en tant que root, modifier /etc/default/i2p et définir ALLOW_ROOT=true."
+Index: b/installer/resources/locale/po/messages_ru.po
+===================================================================
 --- a/installer/resources/locale/po/messages_ru.po
 +++ b/installer/resources/locale/po/messages_ru.po
-@@ -193,16 +193,16 @@
+@@ -191,13 +191,13 @@ msgid "Request a Java thread dump if run
  msgstr "Запросить дамп нитей Java, если запущено."
  
- #: ../i2prouter:1864
+ #: ../i2prouter:1874
 -msgid "Please edit i2prouter and set the variable RUN_AS_USER"
+-msgstr "Пожалуйста, отредактируйте i2prouter и установите переменную RUN_AS_USER"
 +msgid "Please edit /etc/default/i2p and set the variable RUN_AS_USER"
- msgstr ""
--"Пожалуйста, отредактируйте i2prouter и установите переменную RUN_AS_USER"
-+"Пожалуйста, отредактируйте /etc/default/i2p и установите переменную RUN_AS_USER"
++msgstr "Пожалуйста, отредактируйте /etc/default/i2p и установите переменную RUN_AS_USER"
  
- #: ../i2prouter:1869
+ #: ../i2prouter:1879
  msgid "Running I2P as the root user is *not* recommended."
  msgstr "Запускать I2P от имени root'а *НЕ* рекомендуется."
  
- #: ../i2prouter:1872
+ #: ../i2prouter:1882
 -msgid "To run as root anyway, edit i2prouter and set ALLOW_ROOT=true."
+-msgstr "Чтобы всё равно запустить под root'ом, отредактируйте i2prouter и установите ALLOW_ROOT=true."
 +msgid "To run as root anyway, edit /etc/default/i2p and set ALLOW_ROOT=true."
- msgstr ""
--"Чтобы всё равно запустить под root'ом, отредактируйте i2prouter и установите "
-+"Чтобы всё равно запустить под root'ом, отредактируйте /etc/default/i2p и установите "
- "ALLOW_ROOT=true."
++msgstr "Чтобы всё равно запустить под root'ом, отредактируйте /etc/default/i2p и установите ALLOW_ROOT=true."
+Index: b/installer/resources/locale/po/messages_sv.po
+===================================================================
 --- a/installer/resources/locale/po/messages_sv.po
 +++ b/installer/resources/locale/po/messages_sv.po
-@@ -187,14 +187,14 @@
+@@ -187,13 +187,13 @@ msgid "Request a Java thread dump if run
  msgstr "Fråga efter en Java thread dump vid drift."
  
- #: ../i2prouter:1864
+ #: ../i2prouter:1874
 -msgid "Please edit i2prouter and set the variable RUN_AS_USER"
 -msgstr "Var god ändra i2prouter och set variabeln RUN_AS_USER"
 +msgid "Please edit /etc/default/i2p and set the variable RUN_AS_USER"
 +msgstr "Var god ändra /etc/default/i2p och set variabeln RUN_AS_USER"
  
- #: ../i2prouter:1869
+ #: ../i2prouter:1879
  msgid "Running I2P as the root user is *not* recommended."
  msgstr "Att köra I2P som användare root är *inte* rekommenderat."
  
- #: ../i2prouter:1872
+ #: ../i2prouter:1882
 -msgid "To run as root anyway, edit i2prouter and set ALLOW_ROOT=true."
+-msgstr "För att köra som root oavsett, ändra i2prouter och sätt ALLOW_ROOT=true"
 +msgid "To run as root anyway, edit /etc/default/i2p and set ALLOW_ROOT=true."
- msgstr ""
--"För att köra som root oavsett, ändra i2prouter och sätt ALLOW_ROOT=true"
-+"För att köra som root oavsett, ändra /etc/default/i2p och sätt ALLOW_ROOT=true"
++msgstr "För att köra som root oavsett, ändra /etc/default/i2p och sätt ALLOW_ROOT=true"
+Index: b/installer/resources/locale/po/messages_ro.po
+===================================================================
 --- a/installer/resources/locale/po/messages_ro.po
 +++ b/installer/resources/locale/po/messages_ro.po
-@@ -187,13 +187,13 @@
+@@ -186,13 +186,13 @@ msgid "Request a Java thread dump if run
  msgstr "Solicită Java thread dump dacă rulează."
  
  #: ../i2prouter:1874
@@ -576,87 +593,91 @@ Debian wrapper.config to try to prevent confusion.
 -msgstr "Pentru a rula ca root, oricum, editați i2prouter și setați ALLOW_ROOT=true."
 +msgid "To run as root anyway, edit /etc/default/i2p and set ALLOW_ROOT=true."
 +msgstr "Pentru a rula ca root, oricum, editați /etc/default/i2p și setați ALLOW_ROOT=true."
+Index: b/installer/resources/locale/po/messages_pt_BR.po
+===================================================================
 --- a/installer/resources/locale/po/messages_pt_BR.po
 +++ b/installer/resources/locale/po/messages_pt_BR.po
-@@ -189,13 +189,13 @@
+@@ -189,13 +189,13 @@ msgid "Request a Java thread dump if run
  msgstr "Solicitar um despejo de thread se está sendo executado."
  
- #: ../i2prouter:1864
+ #: ../i2prouter:1874
 -msgid "Please edit i2prouter and set the variable RUN_AS_USER"
 -msgstr "Por favor, edite i2prouter e especifique a variável RUN_AS_USER"
 +msgid "Please edit /etc/default/i2p and set the variable RUN_AS_USER"
 +msgstr "Por favor, edite /etc/default/i2p e especifique a variável RUN_AS_USER"
  
- #: ../i2prouter:1869
+ #: ../i2prouter:1879
  msgid "Running I2P as the root user is *not* recommended."
  msgstr "Executar o roteador I2P como usuário root *não* é recomendado."
  
- #: ../i2prouter:1872
+ #: ../i2prouter:1882
 -msgid "To run as root anyway, edit i2prouter and set ALLOW_ROOT=true."
 -msgstr "De qualquer forma, se quiser mesmo executar o roteador como root, edite i2prouter e ponha ALLOW_ROOT=true."
 +msgid "To run as root anyway, edit /etc/default/i2p and set ALLOW_ROOT=true."
 +msgstr "De qualquer forma, se quiser mesmo executar o roteador como root, edite /etc/default/i2p e ponha ALLOW_ROOT=true."
+Index: b/installer/resources/locale/po/messages_pl.po
+===================================================================
 --- a/installer/resources/locale/po/messages_pl.po
 +++ b/installer/resources/locale/po/messages_pl.po
-@@ -191,13 +191,13 @@
+@@ -186,13 +186,13 @@ msgid "Request a Java thread dump if run
  msgstr "Zażądaj zrzutu wątków Java jeśli jest uruchomiona."
  
- #: ../i2prouter:1864
+ #: ../i2prouter:1874
 -msgid "Please edit i2prouter and set the variable RUN_AS_USER"
 -msgstr "ProszÄ™ edytuj i2prouter i ustaw zmiennÄ… RUN_AS_USER"
 +msgid "Please edit /etc/default/i2p and set the variable RUN_AS_USER"
 +msgstr "ProszÄ™ edytuj /etc/default/i2p i ustaw zmiennÄ… RUN_AS_USER"
  
- #: ../i2prouter:1869
+ #: ../i2prouter:1879
  msgid "Running I2P as the root user is *not* recommended."
  msgstr "Nie jest polecane uruchamianie I2P jako root."
  
- #: ../i2prouter:1872
+ #: ../i2prouter:1882
 -msgid "To run as root anyway, edit i2prouter and set ALLOW_ROOT=true."
 -msgstr "Aby uruchomić jako root, edytuj i2prouter i ustaw ALLOW_ROOT=true."
 +msgid "To run as root anyway, edit /etc/default/i2p and set ALLOW_ROOT=true."
 +msgstr "Aby uruchomić jako root, edytuj /etc/default/i2p i ustaw ALLOW_ROOT=true."
+Index: b/installer/resources/locale/po/messages_ja.po
+===================================================================
 --- a/installer/resources/locale/po/messages_ja.po
 +++ b/installer/resources/locale/po/messages_ja.po
-@@ -189,15 +189,15 @@
+@@ -186,13 +186,13 @@ msgid "Request a Java thread dump if run
  msgstr "起動中の場合、 Java スレッドダンプを要求"
  
- #: ../i2prouter:1864
+ #: ../i2prouter:1874
 -msgid "Please edit i2prouter and set the variable RUN_AS_USER"
 -msgstr "i2prouter を編集して、変数 RUN_AS_USER を設定してください"
 +msgid "Please edit /etc/default/i2p and set the variable RUN_AS_USER"
 +msgstr "/etc/default/i2p を編集して、変数 RUN_AS_USER を設定してください"
  
- #: ../i2prouter:1869
+ #: ../i2prouter:1879
  msgid "Running I2P as the root user is *not* recommended."
  msgstr "root ユーザーとしての I2P の起動は推奨され*ません*。"
  
- #: ../i2prouter:1872
+ #: ../i2prouter:1882
 -msgid "To run as root anyway, edit i2prouter and set ALLOW_ROOT=true."
+-msgstr "とにかく root として起動し、 i2prouter を編集して、ALLOW_ROOT=true と設定する。"
 +msgid "To run as root anyway, edit /etc/default/i2p and set ALLOW_ROOT=true."
- msgstr ""
--"とにかく root として起動し、 i2prouter を編集して、ALLOW_ROOT=true と設定す"
-+"とにかく root として起動し、 /etc/default/i2p を編集して、ALLOW_ROOT=true と設定す"
- "る。"
++msgstr "とにかく root として起動し、 /etc/default/i2p を編集して、ALLOW_ROOT=true と設定する。"
+Index: b/installer/resources/locale/po/messages_sk.po
+===================================================================
 --- a/installer/resources/locale/po/messages_sk.po
 +++ b/installer/resources/locale/po/messages_sk.po
-@@ -189,15 +189,15 @@
+@@ -187,13 +187,13 @@ msgid "Request a Java thread dump if run
  msgstr "Vyžiadať zrušenie vlákna Javy, ak je spustený."
  
- #: ../i2prouter:1864
+ #: ../i2prouter:1874
 -msgid "Please edit i2prouter and set the variable RUN_AS_USER"
 -msgstr "Prosím upravte i2prouter a nastavte premennú RUN_AS_USER"
 +msgid "Please edit /etc/default/i2p and set the variable RUN_AS_USER"
 +msgstr "Prosím upravte /etc/default/i2p a nastavte premennú RUN_AS_USER"
  
- #: ../i2prouter:1869
+ #: ../i2prouter:1879
  msgid "Running I2P as the root user is *not* recommended."
  msgstr "Spúšťať I2P ako root *nie* je odporúčané."
  
- #: ../i2prouter:1872
+ #: ../i2prouter:1882
 -msgid "To run as root anyway, edit i2prouter and set ALLOW_ROOT=true."
+-msgstr "Ak ho chcete spustiť ako root aj tak, upravte i2prouter a nastavte ALLOW_ROOT=true."
 +msgid "To run as root anyway, edit /etc/default/i2p and set ALLOW_ROOT=true."
- msgstr ""
--"Ak ho chcete spustiť ako root aj tak, upravte i2prouter a nastavte "
-+"Ak ho chcete spustiť ako root aj tak, upravte /etc/default/i2p a nastavte "
- "ALLOW_ROOT=true."
++msgstr "Ak ho chcete spustiť ako root aj tak, upravte /etc/default/i2p a nastavte ALLOW_ROOT=true."
diff --git a/debian/po/fr.po b/debian/po/fr.po
index 40ca5e5d0fb45eedcd277a568b75fd58be4c8fdd..b531848295664fb641b54a0342c2e0828512a710 100644
--- a/debian/po/fr.po
+++ b/debian/po/fr.po
@@ -13,7 +13,7 @@ msgstr ""
 "Project-Id-Version: I2P\n"
 "Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
 "POT-Creation-Date: 2015-02-18 22:14+0000\n"
-"PO-Revision-Date: 2017-07-04 12:12+0000\n"
+"PO-Revision-Date: 2017-07-13 21:06+0000\n"
 "Last-Translator: French language coordinator <french.coordinator@rbox.me>\n"
 "Language-Team: French (http://www.transifex.com/otf/I2P/language/fr/)\n"
 "MIME-Version: 1.0\n"
@@ -70,7 +70,7 @@ msgstr "Mémoire qui peut être allouée à I2P :"
 #. Description
 #: ../i2p.templates:4001
 msgid "By default, I2P will only be allowed to use up to 128MB of RAM."
-msgstr "Par défaut, I2P ne sera autorisé à utiliser que jusqu'à 128 Mo de RAM."
+msgstr "Par défaut, I2P ne sera autorisé à utiliser que jusqu'à 128 Mo de mémoire vive."
 
 #. Type: string
 #. Description
diff --git a/history.txt b/history.txt
index f164aaf9595f67b66a05497105495933628260ff..cf5565d90fb8fb8a525d4a0072c77d23c8bbaa30 100644
--- a/history.txt
+++ b/history.txt
@@ -1,3 +1,141 @@
+2017-09-02 zzz
+ * Data: Prohibit excess key data in certs (ticket #2035)
+ * i2psnark: New open trackers
+ * Startup: Add property to disable output redirect (ticket #2037)
+
+2017-08-26 str4d
+ * Console (light):
+   - Sidebar Restart/Shutdown buttons:
+     - Increase width to better occupy available space and increase width of
+       containing form to ensure browser scaling doesn't wrap buttons
+     - Reduce vertical padding
+     - Reduce height of buttons in console_big.css
+   - /debug:
+     - Multi-column view for Session Key Manager expiry IDs
+     - Fix color mismatch of inbound/outbound h3s
+ * I2PSnark (ubergine):
+   - Fix hover state for inert section headings
+   - Minor adjustments to DHT debug section
+ * Susimail (light): Minor adjustment of notifications in embedded view
+
+* 2017-08-07 0.9.31 released
+
+2017-07-31 zzz
+ * Translations update, Debian patch refresh
+
+2017-07-31 str4d
+ * Console: fix router family page form (ticket #2022)
+
+2017-07-30 str4d
+ * Console
+   - light theme:
+     - Fix spacing issue with banned peers list
+     - Tweak font sizes for Arabic
+   - Shrink icons in sidepanel network status span
+   - Add single graph view buttons to classic theme
+   - Better separation of graphing controls in single graph view
+   - Enhance presentation of /oldconsole and /proof
+
+2017-07-28 str4d
+ * Console:
+   - Enhance presentation of show/hide news links on home page
+   - Fix some issues with Arabic CSS (light/dark)
+   - Further tweaks to graphs display and fixes for borderless single graphs
+     in midnight/dark themes
+   - Fix minor coloring issues with light theme post-rework
+   - Misc theme fixes
+ * I2PSnark:
+   - Move </center> tag in fileinfo view that prevented sticky navbar from
+     working
+   - ubergine:
+     - Alternative panel tabs for embedded view
+     - Tighten .snarkTorrents thead/tfoot spacing
+     - Tweak embedded navbar coloring
+     - Reduce height of download bars
+
+2017-07-26 str4d
+ * Themes:
+   - 'light' theme (console & apps):
+     - Rework to reduce contrast (ticket #1996)
+     - Add custom radio/checkbox icons for Chrome/Blink
+ * Console:
+   - Add JavaScript snippet to reset dest address scroll position onblur (fixes
+     Chrome/Blink disappearing text bugs in i2ptunnel and susidns)
+   - Fix reseed failure notice overlap when "check connection" message shown
+   - Enhance presentation of console "error 500" messages
+   - Cosmetic tweaks to welcome page presentation, arabic welcome page tidyup
+   - Migrate .smallhead th class to tr to simplify markup
+   - Sidebar:
+     - Remove "Congestion" from default sidebar (still present in default
+       advanced sidebar)
+     - Fix label wrapping issue with translations
+     - Migrate sidepanel news section to tables to permit better control over
+       wrapping and placement (ticket #1996)
+     - Move news item dates to tooltips to lessen chance of headlines wrapping
+       and cleanup presentation
+     - Increase maximum length of local tunnel links in the sidebar (and handle
+       overflow with CSS) to minimize chance of default tunnels display
+       truncating in translations
+     - Add the power off icon to sidebar restart button on hover to clarify
+       button function (ticket #1996)
+   - /configadvanced: Move floodfill status to row above to remove unnecessary
+     whitespace and cleanup UI
+   - /debug:
+     - Add container divs and styling markup
+     - Add top navigation menu
+     - Add debug icon to h2 headers to aid navigation
+   - /graphs: Improve presentation of graph images by removing rendered border
+     and setting background color to better integrate with themes
+   - /home: Widen div.app to lessen chance of truncation (classic/midnight)
+   - /jars:
+     - JARs, WARs & individual plugins separated with headers
+     - Filenames stripped of path info (path indicated on headers and tooltips)
+     - Add container divs and styling markup
+     - Minimize table overflow with conditional scaling of content
+     - One-click select for revision, sha256 & unsigned mods
+   - /logs:
+     - Reduce line/entry spacing for router and critical logs (#ticket 1996)
+     - Multi-column view for changelog at >=1400px to address horizontal
+       whitespace issue
+   - /netdb:
+     - Multi-column display of Leases in LeaseSet tables
+     - Better alignment of Lease elements, iconify gateway
+     - Placeholder flag for unknown/unresolved peers for [flag+dest] combos to
+       improve presentation / fix deadspace issue
+   - Chinese:
+     - Fix alignment of table contents in /tunnels (classic)
+     - Fix sidebar content display width (midnight)
+     - Cosmetic fixes (all themes)
+ * I2PSnark:
+   - Mitigate truncation of ratings dropdown in comments section (translations)
+   - light: Reduce contrast of display text
+   - light/classic: Increase contrast of download bars
+   - Create Torrent trackers table: Replace "Tracker URL" with "Tracker Type"
+     (ticket #1996)
+   - Add a persistent warning to the messagelog when JavaScript is disabled to
+     indicate potential loss of form data upon refresh (ticket #1996)
+   - Migrate "view or change bandwidth" to [Configure] tooltip to standardize
+     configuration links, allow for more space for option labels and lessen
+     chance of option labels wrapping in translations
+ * I2PTunnel:
+   - Ensure message log font scales proportionately
+   - Fix overflow issue with dropdowns in Chrome/blink (dark/midnight)
+ * SusiDNS
+   - Reduce width of filter buttons to lessen chance of wrapping (ticket #1996)
+   - Add non-selectable items to improve copy/paste of hosts in address books
+   - Make dest addresses in host list only display scrollbar on focus to reduce
+     screen clutter
+   - Hide broken imagegen images
+ * SusiMail:
+   - Dismiss notifications on click
+   - Enhance presentation of 'postman' links on login panel
+
+2017-07-25 str4d
+ * Console: Move JRobin default color and font changes into SummaryRenderer
+
+2017-07-16 zzz
+ * Imagegen: Test page text fixups
+
 2017-07-15 zzz
  * Console: Fix compile error with Jetty 9.2.22 (ticket #2019)
 
@@ -17,7 +155,7 @@
    - Reduce size of screenlog font at 1400-1600px viewport width to lessen
      chance of text-wrapping (ticket #1996)
    - classic: Fix a linespacing issue in the config section (options:) that only
-     triggers in foreign languages that force the options td to wrap
+     triggers in foreign languages that force the options labels to wrap
  * Fix HTML tags across non-default conditional branches
 
 2017-07-08 zzz
@@ -45,13 +183,13 @@
        - Each transport instance on own line
        - Better presentation of address characteristics
        - Place flag in table header
-     - Container div for leasesets to allow 2 column display at wider viewport width
+     - Container div for leasesets to allow responsive 2 column display
      - Increased spacing of lease information in leaseset tables
      - Add div for "not initialized" message
-     - Reorganize content display in sybil database to reduce horizontal whitespace:
+     - Reorganize content in sybil db to reduce horizontal whitespace:
        - Conditional 2-column display of sybil families
-       - Sybil router characteristics & threatpoints presented in multi-column view
-       - Added empty (n/a) fields to maintain visual consistency in column view
+       - Multi-column view for sybil router characteristics & threatpoints
+       - Empty (n/a) fields to maintain visual consistency in column view
    - /tunnels:
      - Tag "Local" for translation (and convert to lowercase in CSS)
      - Arabic: ensure our tunnel tables display correctly
@@ -74,8 +212,8 @@
      - Fix commenting out of forum.i2p where it impacts surrounding text
      - Cleanup unneeded CSS classes
      - Enhance Chinese legibility
-   - Add untagged strings for /tunnels tooltips and local tunnel indicator (to
-     be tagged for translation post .31 release)
+   - Add untagged strings for /tunnels tooltips and local tunnel indicator
+     (to be tagged for translation post .31 release)
    - classic: reduce color contrast of main display font
    - classic/dark/midnight: alignment on /peers and /tunnels
    - /tunnels:
@@ -119,7 +257,7 @@
    - Arabic (light) adjust font size for sidebar elements
    - Sidebar network status display (ticket #1996)
    - Usability:
-     - Enhance presentation of tables on /peers (improve header/column alignment,
+     - Enhance presentation of tables on /peers (header/column alignment,
        center to separator for multi-value rows)
      - Enhance presentation of tables on /tunnels (reliable alignment of mixed
        content in rows, more prominence to bandwidth tiers)
diff --git a/installer/install.xml b/installer/install.xml
index d60e888496474372fa9fc907be3fc77816015c51..24884b25a29f2dbe8abc2acdc81510682ae80941 100644
--- a/installer/install.xml
+++ b/installer/install.xml
@@ -4,7 +4,7 @@
 
     <info>
         <appname>i2p</appname>
-        <appversion>0.9.30</appversion>
+        <appversion>0.9.31</appversion>
         <authors>
             <author name="I2P" email="https://geti2p.net/"/>
         </authors>
diff --git a/installer/resources/certificates/reseed/igor_at_novg.net.crt b/installer/resources/certificates/reseed/igor_at_novg.net.crt
new file mode 100644
index 0000000000000000000000000000000000000000..12ce7a61f7beb33531f3204d0649d8b374191022
--- /dev/null
+++ b/installer/resources/certificates/reseed/igor_at_novg.net.crt
@@ -0,0 +1,33 @@
+-----BEGIN CERTIFICATE-----
+MIIFvjCCA6agAwIBAgIQIDtv8tGMh0FyB2w5XjfZxTANBgkqhkiG9w0BAQsFADBt
+MQswCQYDVQQGEwJYWDELMAkGA1UEBxMCWFgxCzAJBgNVBAkTAlhYMR4wHAYDVQQK
+ExVJMlAgQW5vbnltb3VzIE5ldHdvcmsxDDAKBgNVBAsTA0kyUDEWMBQGA1UEAwwN
+aWdvckBub3ZnLm5ldDAeFw0xNzA3MjQxODI4NThaFw0yNzA3MjQxODI4NThaMG0x
+CzAJBgNVBAYTAlhYMQswCQYDVQQHEwJYWDELMAkGA1UECRMCWFgxHjAcBgNVBAoT
+FUkyUCBBbm9ueW1vdXMgTmV0d29yazEMMAoGA1UECxMDSTJQMRYwFAYDVQQDDA1p
+Z29yQG5vdmcubmV0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxst4
+cam3YibBtQHGPCPX13uRQti56U3XZytSZntaKrUFmJxjt41Q/mOy3KYo+lBvhfDF
+x3tWKjgP9LJOJ28zvddFhZVNxqZRjcnAoPuSOVCw88g01D9OAasKF11hCfdxZP6h
+vGm8WCnjD8KPcYFxJC4HJUiFeProAwuTzEAESTRk4CAQe3Ie91JspuqoLUc5Qxlm
+w5QpjnjfZY4kaVHmZDKGIZDgNIt5v85bu4pWwZ6O+o90xQqjxvjyz/xccIec3sHw
+MHJ8h8ZKMokCKEJTaRWBvdeNXki7nf3gUy/3GjYQlzo0Nxk/Hw4svPcA+eL0AYiy
+Jn83bIB5VToW2zYUdV4u3qHeAhEg8Y7HI0kKcSUGm9AQXzbzP8YCHxi0sbb0GAJy
+f1Xf3XzoPfT64giD8ReUHhwKpyMB6uvG/NfWSZAzeAO/NT7DAwXpKIVQdkVdqy8b
+mvHvjf9/kWKOirA2Nygf3r79Vbg2mqbYC/b63XI9hheU689+O7qyhTEhNz+11X0d
+Zax7UPrLrwOeB9TNfEnztsmrHNdv2n+KcOO2o11Wvz2nHP9g+dgwoZSD1ZEpFzWP
+0sD5knKLwAL/64qLlAQ1feqW7hMr80IADcKjLSODkIDIIGm0ksXqEzTjz1JzbRDq
+jUjq7EAlkw3G69rv1gHxIntllJRQidAqecyWHOMCAwEAAaNaMFgwDgYDVR0PAQH/
+BAQDAgKEMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAPBgNVHRMBAf8E
+BTADAQH/MBYGA1UdDgQPBA1pZ29yQG5vdmcubmV0MA0GCSqGSIb3DQEBCwUAA4IC
+AQADyPaec28qc1HQtAV5dscJr47k92RTfvan+GEgIwyQDHZQm38eyTb05xipQCdk
+5ruUDFXLB5qXXFJKUbQM6IpaktmWDJqk4Zn+1nGbtFEbKgrF55pd63+NQer5QW9o
+3+dGj0eZJa3HX5EBkd2r7j2LFuB6uxv3r/xiTeHaaflCnsmyDLfb7axvYhyEzHQS
+AUi1bR+ln+dXewdtuojqc1+YmVGDgzWZK2T0oOz2E21CpZUDiP3wv9QfMaotLEal
+zECnbhS++q889inN3GB4kIoN6WpPpeYtTV+/r7FLv9+KUOV1s2z6mxIqC5wBFhZs
+0Sr1kVo8hB/EW/YYhDp99LoAOjIO6nn1h+qttfzBYr6C16j+8lGK2A12REJ4LiUQ
+cQI/0zTjt2C8Ns6ueNzMLQN1Mvmlg1Z8wIB7Az7jsIbY2zFJ0M5qR5VJveTj33K4
+4WSbC/zMWOBYHTVBvGmc6JGhu5ZUTZ+mWP7QfimGu+tdhvtrybFjE9ROIE/4yFr6
+GkxEyt0UY87TeKXJ/3KygvkMwdvqGWiZhItb807iy99+cySujtbGfF2ZXYGjBXVW
+dJOVRbyGQkHh6lrWHQM4ntBv4x+5QA+OAan5PBF3tcDx1vefPx+asYslbOXpzII5
+qhvoQxuRs6j5jsVFG6RdsKNeQAt87Mb2u2zK2ZakMdyD1w==
+-----END CERTIFICATE-----
diff --git a/installer/resources/hosts.txt b/installer/resources/hosts.txt
index 8a2cae375c0ea8d81301ae0dbc9db37ea0538fe2..cd6d567d1ffd919c81c5e791a47101c72dfb0181 100644
--- a/installer/resources/hosts.txt
+++ b/installer/resources/hosts.txt
@@ -366,3 +366,4 @@ i2pwiki.i2p=Zr1YUKIKooxymZRqLvtfSYuZggqv5txkLE8Ks~FTh3A8JDmhOV8C82dUBKJhzst~Pcbq
 lenta.i2p=DnW8NqbKilYLcIx5g5CG4mWVHkzrCkl0MbV4a5rGJku4BSs7HjvzjZpCoXWFky9JCUlHzjFotMETxQBhaKl0Q46vu-plKQ4BLnYyo45p7j2lTiejWvV4SDuXU4IAdmug27i~Jl4N44zwe9KYy~gMfY1Vsgv4bH9ov7X7l2iS-bycfcd9nE7JfycwFc4e0XU-dx7xf~tHw7I5--25dp-SsRX3-UYz4ygb58aD8UsKfQaFZtMy4x~Z1ufNEftuekb1HH9g2Rhhq8Bl62ad8PWSDa9Ne-SkCQsqTYjrCsvMY2DMvWgmZxI1hJYqzjRdFV6JEprrr~CJgHGJXr~KdnZhX12Vm4bKisZK847wBm42CoBQBT5HRzDkeflkbsliirRuKSUxVYMoZ1vic~avPZZl~pvIKZsz-YtiKha4vjCNE1zD-tHIS~2qq4uEO546Ol9pNokPaNttV6r7D2-zurEDx~9grJ8LhBozTxtdTdfZv2OqN4bVhrE7xUrxe0flIFKEAAAA
 secure.thetinhat.i2p=0ncSrtVS20zwfcM7h2S6SSF56uVM2bftQwf40jsWKASNQnzyDVEzXpS04y-DJpm9EwKMGkgvx8ICBX-80W4E9xPJEdGFbb2u34fWmpTVMc3vwwB9ywmSXoxFbwiFx2sm7-HCcdALZwrjU3J41AfBvpEVkB5dXklTZIh~bU0JBTK2JIvQMD0XrSOztEruTc5kYymtkiCUpJaJJFXyIM3lKRcNlZ76UidE8AyQxHX7s9OR02pk7FhYV8Uh-Bs8loAZg6IPZzoYnnBYyi--b1-N8Ipv3aKmqSZPbQEzfQxU8-BE74xBLNEWAJtB8ptKMiKfHphO7qDKWqTzOU-7BtGXZAEOA3oblRAQcgqUbi~aICj0V0MAuYAdj7f-8BIi2k3Qfcl6k6XOFEpZqYFle71LeCjIZN~0mDDzxlr0Scx6LKMGnQAtYlGXFq99urp1MutPDZEu47mdxGWqc9CoNNNsE2UgS9ykvWygefNpZhkmceBXmDxWhuAPD1M2~eNF-fCMBQAIAAMAADZv~vU=
 zerobin.i2p=Jf64hlpW8ILKZGDe61ljHU5wzmUYwN2klOyhM2iR-8VkUEVgDZRuaToRlXIFW4k5J1ccTzGzMxR518BkCAE3jCFIyrbF0MjQDuXO5cwmqfBFWrIv72xgKDizu3HytE4vOF2M730rv8epSNPAJg6OpyXkf5UQW96kgL8SWcxWdTbKU-O8IpE3O01Oc6j0fp1E4wVOci7qIL8UEloNN~mulgka69MkR0uEtXWOXd6wvBjLNrZgdZi7XtT4QlDjx13jr7RGpZBJAUkk~8gLqgJwoUYhbfM7x564PIn3IlMXHK5AKRVxAbCQ5GkS8KdkvNL7FsQ~EiElGzZId4wenraHMHL0destUDmuwGdHKA7YdtovXD~OnaBvIbl36iuIduZnGKPEBD31hVLdJuVId9RND7lQy5BZJHQss5HSxMWTszAnWJDwmxqzMHHCiL6BMpZnkz8znwPDSkUwEs3P6-ba7mDKKt8EPCG0nM6l~BvPl2OKQIBhXIxJLOOavGyqmmYmAAAA
+tracker.crypthost.i2p=trpQW0FUpHOYshwhmf7OPQr4Pyqz8Sfgm85Fz5AzeE-BqLZPvJSQwRWEPG3v4oTfVrhvRwtUU3vtzgtK4RgozFwS-IyyFRie7gI6tyLIJ9OR2EegO9xDlz6leuXwJ6GgZJwUTLD0ahXjmVYhKpY~iMDAXMe7rWTylKNA3MdfPNHrpdJE0lekgZMhErWar19Xwz93RtNx1iWgHAG2WaMov-591nLQbvLlZOkFj47dkftQ8jTI2gobG6vlwg7uQVe93K4JCGbb8rhQyG6vV9YMJKoDFa5X7KcLqWulwqqN3hiWYjKNZ~0pGjRfyD0n2Dkt~3YRcwCBg54uDrQ~ZyKnBU4ZuiXzMpdER002N5pMqt2I5BoI~c2zkjoK8m-hzFqHLqkyCzTetmEg-TBnkVleOqKrCFQVfLPwaTYL4S88r5Ks9QBnt1vwrWz6Ly7Xtg2hhPPJCc2tfwpzPxwj5zO9FEjTg-upVXtzzZFH13mAdP0ThNqxs9lpyv2iST6qUFvgAAAA
diff --git a/installer/resources/icons/flags/a0.png b/installer/resources/icons/flags/a0.png
new file mode 100644
index 0000000000000000000000000000000000000000..fccea5487636ad9eeb6362db4932726edbeb45e8
Binary files /dev/null and b/installer/resources/icons/flags/a0.png differ
diff --git a/installer/resources/locale-man/man_fr.po b/installer/resources/locale-man/man_fr.po
index 37a2b075127d7e495843e43215e8dc04895ecd92..6ec8d6e10ce5f40ba9834df845785e6f25c36c1b 100644
--- a/installer/resources/locale-man/man_fr.po
+++ b/installer/resources/locale-man/man_fr.po
@@ -74,7 +74,7 @@ msgid ""
 "the regular Internet are supported."
 msgstr ""
 "Télécharger un fichier de façon non interactive par HTTP. Les transferts "
-"sont pris en charge à la fois par I2P et l'Internet habituel."
+"sont pris en charge à la fois par I2P et l'Internet ordinaire."
 
 #. type: Plain text
 #: man/eepget.1:21
diff --git a/installer/resources/locale-man/man_it.po b/installer/resources/locale-man/man_it.po
index 21abd2b1331ded907b9296d9d0f9e3a2c2f432e5..d69f2275bcd78d6b3ba544eb1da8928eb995999a 100644
--- a/installer/resources/locale-man/man_it.po
+++ b/installer/resources/locale-man/man_it.po
@@ -7,12 +7,13 @@
 # Translators:
 # Sebastiano Pistore <SebastianoPistore.info@protonmail.ch>, 2017
 # Kereus <williamdicicco@protonmail.com>, 2017
+# zzzi2p <zzz@i2pmail.org>, 2017
 msgid ""
 msgstr ""
 "Project-Id-Version: I2P man pages\n"
 "POT-Creation-Date: 2017-01-26 15:24+0000\n"
 "PO-Revision-Date: 2017-01-26 15:24+0000\n"
-"Last-Translator: Kereus <williamdicicco@protonmail.com>, 2017\n"
+"Last-Translator: zzzi2p <zzz@i2pmail.org>, 2017\n"
 "Language-Team: Italian (https://www.transifex.com/otf/teams/12694/it/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -100,7 +101,7 @@ msgstr "B<-c>"
 #: man/eepget.1:25
 #, no-wrap
 msgid "Clearnet. Do not use a proxy. Same as B<-p> :0 ."
-msgstr "Clearnet. Non utilizzare un proxy. Uguale a <-p> :0 ."
+msgstr "Clearnet. Non utilizzare un proxy. Uguale a B<-p> :0 ."
 
 #. type: Plain text
 #: man/eepget.1:31
diff --git a/installer/resources/man/eepget.fr.1 b/installer/resources/man/eepget.fr.1
index 9608e7f5501c1a65614192ae8ed96605936eceb9..4d5c9267d80efc0bfc6585038ad6eb4a2a87dfc7 100644
--- a/installer/resources/man/eepget.fr.1
+++ b/installer/resources/man/eepget.fr.1
@@ -6,7 +6,7 @@
 .TH EEPGET 1 "26 janvier 2017" "" I2P
 
 .SH NOM
-Eepget \- téléchargeur I2P
+Eepget \- Téléchargeur d'I2P
 
 .SH SYNOPSIS
 \fBeepget\fP [\fIoptions\fP]\fIURL\fP
@@ -14,82 +14,82 @@ Eepget \- téléchargeur I2P
 
 .SH DESCRIPTION
 .P
-Télécharge un fichier de façon non interactive via HTTP. Les transferts sont
-permis aussi bien via I2P que via l'Internet habituel.
+Télécharger un fichier de façon non interactive par HTTP. Les transferts
+sont pris en charge à la fois par I2P et l'Internet ordinaire.
 .P
-Eepget est capable de faire face aux connexions réseau lentes ou instables;
-si un téléchargement ne réussit pas à cause d'un problème de réseau, il
-continuera à réessayer jusqu'à ce que le fichier entier aie été téléchargé
-(si l'option \-n est mise). S'il est supporté par le serveur distant, Eepget
+Eepget peut faire face à des connexions réseau lentes ou instables ; si un
+téléchargement ne réussit pas à cause d'un problème de réseau, il ressayera
+jusqu'à ce que le fichier entier soit téléchargé (si l'option \-n est
+définie). S'il cela est pris en charge par le serveur distant, Eepget
 demandera au serveur de continuer le téléchargement à partir du point
 d'interruption.
 
 .SH OPTIONS
 \fB\-c\fP
 .TP 
-Clearnet. N'utilise pas un proxy. Pareil que \fB\-p\fP :0 .
+Réseau visible. N'utilise aucun mandataire. Identique à \fB\-p\fP :0 .
 .TP 
 
 \fB\-e\fP etag
 .TP 
-Sets the etag value in the request headers.
+Définit la valeur etag dans les en\-têtes des demandes.
 .TP 
 
-\fB\-h\fP name=value
+\fB\-h\fP nom=valeur
 .TP 
-Ajoute une en\-tête de demande arbitraire avec nom précisé et valeur.
+Ajoute un en\-tête de requête arbitraire avec les nom et valeur donnés.
 .TP 
 
 \fB\-l\fP lineLen
 .TP 
-Contrôle l'affichage de la progression. \fB\ lineLen \fP est la longueur en caractères d'une ligne de progression. Le nombre par défaut est 40.
+Contrôle l'affichage de la progression. \fB\ lineLen \fP est la longueur en caractères d'une ligne de progression. La valeur par défaut est 40.
 .TP 
 
 \fB\-m\fP markSize
 .TP 
-Controls the progress display. \fB\ markSize \fP is the number of bytes one '#' character represents. The default is 1024.
+Contrôle l'affichage de la progression. \fB\ markSize \fP est le nombre d'octets qu'un caractère '#' représente. La valeur par défaut est 1024.
 .TP 
 
-\fB\-n\fP réessais
+\fB\-n\fP relances
 .TP 
-Spécifie le nombre de fois à réessayer le téléchargement si le téléchargement n'a pas réussi. Si cette option n'est pas spécifiée, Eepget ne réessayera pas.
+Indiquer le nombre de relances du téléchargement si le téléchargement ne réussit pas. Si cette option n'est pas précisée, Eepget ne ressayera pas.
 .TP 
 
-\fB\-o\fP file
+\fB\-o\fP fichier
 .TP 
-Sets the output file to write to. If this option is not given, the output filename will be determined by the URL.
+Définit le fichier de sortie vers lequel écrire. Si cette option n'est pas renseignée, le nom du fichier de sortie sera déterminé par l'URL.
 .TP 
 
-\fB\-p\fP proxy_host[:port]
+\fB\-p\fP mandataire_hôte[:port]
 .TP 
-Specify an I2P proxy server (eeproxy) to use. If the port is not specified, eepget will use 4444. If this option is not specified, eepget will use 127.0.0.1:4444. Specify \fB\-c\fP or \fB\-p\fP :0 to disable the eeproxy.
+Spécifier un serveur mandataire d'I2P (eeproxy) à utiliser. Si le port n'est pas indiqué, eepget utilisera 4444. Si cette option n'est pas indiquée, eepget utilisera 127.0.0.1:444. Indiquer \fB\-c\fP ou \fB\-p\fP :0 pour désactiver le mandataire eeproxy.
 .TP 
 
-\fB\-t\fP seconds
+\fB\-t\fP secondes
 .TP 
-Met le délai d'inactivité. Il est prédéfini à 60 secondes.
+Définit la temporisation d'inactivité, 60 secondes par défaut.
 .TP 
 
-\fB\-u\fP username
+\fB\-u\fP nomd'utilisateur
 .TP 
-Met le nom d'utilisateur pour l'autorisation de proxy, si nécessaire.
+Définit le nom d'utilisateur pour l'autorisation du mandataire, si requise.
 .TP 
 
-\fB\-x\fP password
+\fB\-x\fP motdepasse
 .TP 
-Met le mot de passe pour l'autorisation de proxy, si nécessaire. Si un nom d'utilisateur est spécifié, mais pas un mot de passe, EepGet demandera le mot de passe.
+Définit le mot de passe pour l'autorisation du mandataire, si requise. Si un nom d'utilisateur est indiqué, mais pas un mot de passe, EepGet demandera le mot de passe.
 
-.SH "EXIT STATUS"
+.SH "ÉTAT DE SORTIE"
 
-\fBeepget\fP exits with status zero upon successful transfer and non\-zero if
-there were problems with the download.
+\fBeepget\fP quitte avec un état zéro si le transfert est réussi et différent
+de zéro s'il y a eu des problèmes de téléchargement.
 
-.SH "RAPPORTER DES BUGS"
-Veuillez créer un ticket sur
+.SH "SIGNALER DES BOGUES"
+Veuillez créer un billet sur
 .UR https://trac.i2p2.de/
 la page Trac d'I2P
 .UE .
 
 .SH "VOIR AUSSI"
-\fBi2prouter\fP(1)  \fBcurl\fP(1)  \fBwget\fP(1)
+\fBi2prouter\fP(1) \fBcurl\fP(1) \fBwget\fP(1)
 
diff --git a/installer/resources/man/eepget.it.1 b/installer/resources/man/eepget.it.1
index 0f94836a69b553107a4a74f2d6226693df0003f2..d467713fc1b29f25992b38dccb3f70078c724a66 100644
--- a/installer/resources/man/eepget.it.1
+++ b/installer/resources/man/eepget.it.1
@@ -14,8 +14,8 @@ Eepget \- Downloader I2P
 
 .SH DESCRIZIONE
 .P
-Download a file non\-interactively via HTTP. Transfers through both I2P and
-the regular Internet are supported.
+Scarica un file non interattivo via HTTP. I trasferimenti tramite I2P e il
+regolare internet è supportato.
 .P
 Eepget is able to cope with slow or unstable network connections; if a
 download is not successful because of a network problem, it will keep
@@ -26,22 +26,22 @@ continue the download from the point of interruption.
 .SH OPZIONI
 \fB\-c\fP
 .TP 
-Clearnet. Do not use a proxy. Same as \fB\-p\fP :0 .
+Clearnet. Non utilizzare un proxy. Uguale a \fB\-p\fP :0 .
 .TP 
 
 \fB\-e\fP etag
 .TP 
-Sets the etag value in the request headers.
+Imposta il valore di etag nelle intestazioni di richiesta.
 .TP 
 
 \fB\-h\fP nome=valore
 .TP 
-Adds an arbitrary request header with the given name and value.
+Aggiunge un'intestazione di richiesta arbitraria con il nome e valore specificati.
 .TP 
 
 \fB\-l\fP lineLen
 .TP 
-Controls the progress display. \fB\ lineLen \fP is the length of one progress line in characters. The default is 40.
+Controlla il display di avanzamento. \fB\ lineLen \fP è la lunghezza di una linea di progresso in caratteri. L'impostazione predefinita è 40.
 .TP 
 
 \fB\-m\fP markSize
@@ -61,22 +61,22 @@ Sets the output file to write to. If this option is not given, the output filena
 
 \fB\-p\fP proxy_host[:port]
 .TP 
-Specify an I2P proxy server (eeproxy) to use. If the port is not specified, eepget will use 4444. If this option is not specified, eepget will use 127.0.0.1:4444. Specify \fB\-c\fP or \fB\-p\fP :0 to disable the eeproxy.
+Specifica un server proxy I2P (eeproxy) da utilizzare. Se la porta non è specificata, eepget userà la porta 4444. Se questa opzione non è specificata, eepget userà 127.0.0.1:4444. Specifica \fB\-c\fP oppure \fB\-p\fP :0 to disable the eeproxy.
 .TP 
 
 \fB\-t\fP secondi
 .TP 
-Sets the inactivity timeout. The default is 60 seconds.
+Imposta il tempo di inattività. L'impostazione predefinita è di 60 secondi.
 .TP 
 
 \fB\-u\fP username
 .TP 
-Sets the username for proxy authorization, if required.
+Imposta il nome utente per l'autorizzazione proxy, se necessario.
 .TP 
 
 \fB\-x\fP password
 .TP 
-Sets the password for proxy authorization, if required. If a username is specified but not a password, EepGet will prompt for the password.
+Imposta la password per l'autorizzazione proxy, se necessario. se è specificato un nome utente ma non una password, EepGet richiederà la password.
 
 .SH "EXIT STATUS"
 
diff --git a/installer/resources/man/eepget.ru.1 b/installer/resources/man/eepget.ru.1
index 289b8f27757162c1d148489c84f6cb920ec8184a..606635667e1394f1caa71769c4d0b5de5eba2b6c 100644
--- a/installer/resources/man/eepget.ru.1
+++ b/installer/resources/man/eepget.ru.1
@@ -6,9 +6,9 @@
 .TH EEPGET 1 "26 января 2017" "" I2P
 
 .SH ИМЯ
-Eepget \- I2P downloader
+Eepget \- загрузчик I2P
 
-.SH SYNOPSIS
+.SH СИНОПСИС
 \fBeepget\fP [\fIoptions\fP]\fIURL\fP
 .br
 
@@ -83,7 +83,7 @@ Sets the password for proxy authorization, if required. If a username is specifi
 \fBeepget\fP exits with status zero upon successful transfer and non\-zero if
 there were problems with the download.
 
-.SH "REPORTING BUGS"
+.SH "СООБЩИТЬ ОБ ОШИБКАХ"
 Please enter a ticket on
 .UR https://trac.i2p2.de/
 the I2P trac page
diff --git a/installer/resources/man/eepget.sv.1 b/installer/resources/man/eepget.sv.1
index 0100f381eb45d7236f6266356979672b20c1715f..9807406574f98de479ab75fde68f2523c670af66 100644
--- a/installer/resources/man/eepget.sv.1
+++ b/installer/resources/man/eepget.sv.1
@@ -3,9 +3,9 @@
 .\" This file was generated with po4a. Translate the source file.
 .\"
 .\"*******************************************************************
-.TH EEPGET 1 "January 26, 2017" "" I2P
+.TH EEPGET 1 "Januari 26, 2017" "" I2P
 
-.SH NAME
+.SH NAMN
 Eepget \- I2P downloader
 
 .SH SYNOPSIS
@@ -89,6 +89,6 @@ Please enter a ticket on
 the I2P trac page
 .UE .
 
-.SH "SEE ALSO"
+.SH "SE OCKSÃ…"
 \fBi2prouter\fP(1)  \fBcurl\fP(1)  \fBwget\fP(1)
 
diff --git a/installer/resources/man/i2prouter-nowrapper.fr.1 b/installer/resources/man/i2prouter-nowrapper.fr.1
index fde9f8a942b0a9d3a383a636c3d6fdbca17c0e8e..b25619c323d037e924e90d8544af114eeb63a3cf 100644
--- a/installer/resources/man/i2prouter-nowrapper.fr.1
+++ b/installer/resources/man/i2prouter-nowrapper.fr.1
@@ -6,26 +6,26 @@
 .TH I2PROUTER\-NOWRAPPER 1 "26 janvier 2017" "" I2P
 
 .SH NOM
-i2prouter\-nowrapper \- démarre le routeur I2P
+i2prouter\-nowrapper \- démarrer le routeur d'I2P
 
 .SH SYNOPSIS
 \fBi2prouter\-nowrapper\fP
 .br
 
 .SH DESCRIPTION
-Démarre le routeur I2P, sans le wrapper (emballeur) de service. Cela
-signifie que le routeur ne redémarrera pas si se plante. Aussi, il utilisera
-la taille de mémoire par défaut, laquelle peut parfois être insuffisante
-pour I2P.
+Démarrer le routeur d'I2P, sans l'enveloppeur de services. Cela signifie que
+le routeur ne redémarrera pas s'il plante. Il utilisera aussi la taille de
+mémoire par défaut, ce qui pourrait ne pas être suffisant pour I2P.
 .P
-You should really use the \fBi2prouter\fP(1)  script instead.  There are no
-options.  To stop the router, use your browser to access
+Vous devriez vraiment utiliser plutôt le script \fBi2prouter\fP(1). Il n'y a
+pas d'options. Pour arrêter le routeur, utilisez votre navigateur pour
+accéder à
 .UR http://localhost:7657/
-the router console
+la console du routeur
 .UE .
 
-.SH "RAPPORTER DES BUGS"
-Veuillez créer un ticket sur
+.SH "SIGNALER DES BOGUES"
+Veuillez créer un billet sur
 .UR https://trac.i2p2.de/
 la page Trac d'I2P
 .UE .
diff --git a/installer/resources/man/i2prouter-nowrapper.it.1 b/installer/resources/man/i2prouter-nowrapper.it.1
index 774da433ce15ccb7c721e253399e2ab7ff41b3ef..c6036282a907198716d94a894561815e7f609f3c 100644
--- a/installer/resources/man/i2prouter-nowrapper.it.1
+++ b/installer/resources/man/i2prouter-nowrapper.it.1
@@ -13,9 +13,10 @@ i2prouter\-nowrapper \- avvia il router I2P
 .br
 
 .SH DESCRIZIONE
-Start the I2P router, without the service wrapper.  This means the router
-will not restart if it crashes.  Also, it will use the default memory size,
-which may not be enough for I2P.
+Avvia il router I2P, senza il wrapper di servizio. Ciò significa che il
+router non si riavvierà se si dovesse bloccare. Inoltre, utilizzerà la
+dimensione di memoria predefinita, che potrebbe non essere sufficiente per
+I2P.
 .P
 You should really use the \fBi2prouter\fP(1)  script instead.  There are no
 options.  To stop the router, use your browser to access
diff --git a/installer/resources/man/i2prouter-nowrapper.ru.1 b/installer/resources/man/i2prouter-nowrapper.ru.1
index f2950c44d46ea5128bf18bbf74e013e1fdf5374e..17734c0db810451be1ca6cd0e5eff7a7933eef5c 100644
--- a/installer/resources/man/i2prouter-nowrapper.ru.1
+++ b/installer/resources/man/i2prouter-nowrapper.ru.1
@@ -6,16 +6,16 @@
 .TH I2PROUTER\-NOWRAPPER 1 "26 января 2017" "" I2P
 
 .SH ИМЯ
-i2prouter\-nowrapper \- start the I2P router
+i2prouter\-nowrapper \- запускает роутер I2P
 
-.SH SYNOPSIS
+.SH СИНОПСИС
 \fBi2prouter\-nowrapper\fP
 .br
 
 .SH ОПИСАНИЕ
-Start the I2P router, without the service wrapper.  This means the router
-will not restart if it crashes.  Also, it will use the default memory size,
-which may not be enough for I2P.
+Запускает роутер I2P без сервисного враппера. Это значит что роутер не будет
+перезапущен в случае ошибки.  Также по умолчанию используется стандартный
+лимит память, чего может быть недостаточно для I2P.
 .P
 You should really use the \fBi2prouter\fP(1)  script instead.  There are no
 options.  To stop the router, use your browser to access
@@ -23,7 +23,7 @@ options.  To stop the router, use your browser to access
 the router console
 .UE .
 
-.SH "REPORTING BUGS"
+.SH "СООБЩИТЬ ОБ ОШИБКАХ"
 Please enter a ticket on
 .UR https://trac.i2p2.de/
 the I2P trac page
diff --git a/installer/resources/man/i2prouter-nowrapper.sv.1 b/installer/resources/man/i2prouter-nowrapper.sv.1
index 10bf94017d38d7f2eb8bee5bef8c1afbac0be366..94a440e3d23ee3e68ff108598e0c6ac9e1c5c4c7 100644
--- a/installer/resources/man/i2prouter-nowrapper.sv.1
+++ b/installer/resources/man/i2prouter-nowrapper.sv.1
@@ -3,9 +3,9 @@
 .\" This file was generated with po4a. Translate the source file.
 .\"
 .\"*******************************************************************
-.TH I2PROUTER\-NOWRAPPER 1 "January 26, 2017" "" I2P
+.TH I2PROUTER\-NOWRAPPER 1 "Januari 26, 2017" "" I2P
 
-.SH NAME
+.SH NAMN
 i2prouter\-nowrapper \- start the I2P router
 
 .SH SYNOPSIS
@@ -29,5 +29,5 @@ Please enter a ticket on
 the I2P trac page
 .UE .
 
-.SH "SEE ALSO"
+.SH "SE OCKSÃ…"
 \fBi2prouter\fP(1)
diff --git a/installer/resources/man/i2prouter.fr.1 b/installer/resources/man/i2prouter.fr.1
index 31226806fdf1c6def3e818ccf2163469eddf2032..d20ebcda80692cce4f0c4b9e567d55f734cf2b3d 100644
--- a/installer/resources/man/i2prouter.fr.1
+++ b/installer/resources/man/i2prouter.fr.1
@@ -6,7 +6,7 @@
 .TH I2PROUTER 1 "26 janvier 2017" "" I2P
 
 .SH NOM
-i2prouter \- démarre et stoppe le routeur I2P
+i2prouter \- démarrer et arrêter le routeur d'I2P
 
 .SH SYNOPSIS
 \fBi2prouter\fP
@@ -14,42 +14,42 @@ i2prouter \- démarre et stoppe le routeur I2P
 .br
 
 .SH DESCRIPTION
-Contrôle le service I2P.
+Contrôler le service d'I2P.
 
 .IP \fBconsole\fP
-Exécute I2P en tant qu'un application de console, sous le compte de
-l'utilisateur actuel.
+Exécute I2P en tant qu'application de console, sous le compte utilisateur
+actuel.
 
 .IP \fBstart\fP
-Démarre le service I2P.
+Démarre le service d'I2P.
 
 .IP \fBstop\fP
-Stoppe le service I2P.
+Arrête le service d'I2P.
 
 .IP \fBrestart\fP
-Stoppe le service I2P puis le démarre.
+Arrête le service d'I2P et le démarre ensuite.
 
 .IP \fBcondrestart\fP
-Redémarre le service I2P seulement si il est déjà en cours d'exécution.
+Redémarrer le service d'I2P seulement s'il est déjà en cours d'exécution.
 
 .IP \fBgraceful\fP
-Stoppe I2P gracieusement (cela peut prendre jusqu'à 11 minutes).
+Arrêter I2P respectueusement (peut prendre jusqu'à 11 minutes)
 
 .IP \fBinstall\fP
-Installe un script d'initialisation pour exécuter automatiquement I2P
-lorsque le système démarre.
+Installer un script d'initialisation pour lancer I2P automatiquement lorsque
+le système démarre.
 
 .IP \fBremove\fP
-Désinstalle le script d'initialisation qui a été installé avec \fBinstall\fP
+Désinstaller le script d'initialisation qui a été installé avec \fBinstall\fP
 
 .IP \fBstatus\fP
-Imprime lorsque le service d'I2P est en cours d'exécution.
+Imprime l'état d'exécution du service d'I2P.
 
 .IP \fBdump\fP
-Dumps the current threads into \fBwrapper.log\fP.
+Vide les fils d'exécution actuels dans \fBwrapper.log\fP.
 
-.SH "RAPPORTER DES BUGS"
-Veuillez créer un ticket sur
+.SH "SIGNALER DES BOGUES"
+Veuillez créer un billet sur
 .UR https://trac.i2p2.de/
 la page Trac d'I2P
 .UE .
diff --git a/installer/resources/man/i2prouter.it.1 b/installer/resources/man/i2prouter.it.1
index cba030a2b5b7505caffc7897ee71a579b945901f..1c9e4f068f8264b3ed2e17317cc2257ebff13ce8 100644
--- a/installer/resources/man/i2prouter.it.1
+++ b/installer/resources/man/i2prouter.it.1
@@ -17,7 +17,7 @@ i2prouter \- lancia e termina il router I2P
 Permette di controllare il servizio I2P.
 
 .IP \fBconsole\fP
-Runs I2P as a console application under the current user.
+Esegui I2P come applicazione di console sotto l'utente attuale.
 
 .IP \fBstart\fP
 Avvia il servizio I2P.
@@ -29,13 +29,14 @@ Arresta il servizio I2P.
 Arresta e poi riavvia il servizio I2P.
 
 .IP \fBcondrestart\fP
-Restart the I2P service only if it is already running.
+Riavvia il servizio I2P solo se è già in esecuzione.
 
 .IP \fBgraceful\fP
-Stop I2P gracefully (may take up to 11 minutes)
+Ferma I2P graziosamente (può richiedere fino a 11 minuti)
 
 .IP \fBinstall\fP
-Install initscript to start I2P automatically when the system boots.
+Installa initscript per avviare I2P automaticamente quando il sistema viene
+avviato.
 
 .IP \fBremove\fP
 Uninstall initscript that was installed with \fBinstall\fP
diff --git a/installer/resources/man/i2prouter.ru.1 b/installer/resources/man/i2prouter.ru.1
index e9362e246cf547350f78684cb5dd04188671fb26..9f94e6318c5ac561dbe21552e8d7fead802bebf0 100644
--- a/installer/resources/man/i2prouter.ru.1
+++ b/installer/resources/man/i2prouter.ru.1
@@ -6,9 +6,9 @@
 .TH I2PROUTER 1 "26 января 2017" "" I2P
 
 .SH ИМЯ
-i2prouter \- start and stop the I2P router
+i2prouter \- запускает и останавливает роутер I2P
 
-.SH SYNOPSIS
+.SH СИНОПСИС
 \fBi2prouter\fP
 {\fIconsole\fP|\fIstart\fP|\fIstop\fP|\fIgraceful\fP|\fIrestart\fP|\fIcondrestart\fP|\fIstatus\fP|\fIdump\fP|\fIinstall\fP|\fIremove\fP}
 .br
@@ -47,7 +47,7 @@ Uninstall initscript that was installed with \fBinstall\fP
 .IP \fBdump\fP
 Dumps the current threads into \fBwrapper.log\fP.
 
-.SH "REPORTING BUGS"
+.SH "СООБЩИТЬ ОБ ОШИБКАХ"
 Please enter a ticket on
 .UR https://trac.i2p2.de/
 the I2P trac page
diff --git a/installer/resources/man/i2prouter.sv.1 b/installer/resources/man/i2prouter.sv.1
index caee8e6f8ae1da3279d29a289696922a28b6e1df..88c9c2dacef00b51c9126fd07cca96fb247ca5d9 100644
--- a/installer/resources/man/i2prouter.sv.1
+++ b/installer/resources/man/i2prouter.sv.1
@@ -3,9 +3,9 @@
 .\" This file was generated with po4a. Translate the source file.
 .\"
 .\"*******************************************************************
-.TH I2PROUTER 1 "January 26, 2017" "" I2P
+.TH I2PROUTER 1 "Januari 26, 2017" "" I2P
 
-.SH NAME
+.SH NAMN
 i2prouter \- start and stop the I2P router
 
 .SH SYNOPSIS
@@ -52,5 +52,5 @@ Please enter a ticket on
 the I2P trac page
 .UE .
 
-.SH "SEE ALSO"
+.SH "SE OCKSÃ…"
 \fBi2prouter\-nowrapper\fP(1)
diff --git a/installer/resources/readme/readme_ar.html b/installer/resources/readme/readme_ar.html
index f9e9766a03d141be3846c36603b2bfb92fb4e26f..322ed406b465fa970c818fe89791d750fb708273 100644
--- a/installer/resources/readme/readme_ar.html
+++ b/installer/resources/readme/readme_ar.html
@@ -7,7 +7,7 @@
 
 <ul>
 
-<ul class="links">
+<ul class="links twocol">
 
 <!--
 <li><a href="http://forum.i2p/">forum.i2p</a> وصلة آمنة ومجهولة الى المنتدى الرسمي <a href="http://forum.i2p/">forum.i2p</a></li>
@@ -16,12 +16,9 @@
 <li><a href="http://i2pwiki.i2p/">i2pwiki.i2p</a> ويكي مفتوح التي يستطيع الجميع تحريرها مع الكثير من المعلومات حول الشبكة</li>
 <li><a href="http://echelon.i2p">echelon.i2p</a> موقع لتحميل مجموعة من البرامج مثل</li>
 <li><a href="http://zerobin.i2p">zerobin.i2p</a> موقع لمشاركة المحتوى النصي</li>
-
+<li>هناك العديد من eepsites، فقط اتبع هذه الروابط لإكتشاف المزيد!</li>
 </ul>
 
-<p>هناك العديد من eepsites، فقط اتبع هذه الروابط لإكتشاف المزيد!</p>
-<br>
-
 <li><b>تصفح الانترنت</b> شبكة I2P مصممة لتقديم اكبر قدر من الامان والخصوصية للاتصال داخل الشبكة المغلقة، لذلك ينصح عدم استخدامها للوصول الى المواقع العادية مثل غوغل وغيرها لانها <b>لم تصمم كبروكسي خارجي للوصول لمواقع محجوبة</b>. يمكن معرفة استخدام الشبكة لكن بما أن الاتصال مجهول ومشفر لا يمكن معرفة النشاط الذي تقوم به (مشاركة الملفات، بريد الكتروني، دردشة...).</li>
 <li><b>مشاركة الملفات</b> يحتوي حزمة البرامج على برنامج تورنت <a href="i2psnark/">I2PSnark</a> يوفر امكانية مشاركة الملفات داخل الشبكة بصفة مشفرة وسرية، لكن لا يصلح لتحميل ملفات تورنت من الانترنت العادية.</li>
 <li><b>بريد الكتروني المجهول</b> يمكن تبادل بريد الكتروني المجهول داخل الشبكة وايضا مع شبكة الانترنت العادية عبر واجهة ويب <a href="/susimail/susimail">susimail</a> او اي برنامج متوافق مع (POP3/SMTP). يمكن التسجيل في الخدمة عبر <a href="http://hq.postman.i2p/">hq.postman.i2p</a><br>
diff --git a/installer/resources/themes/console/classic/console.css b/installer/resources/themes/console/classic/console.css
index 067093bb6f24e6c09cc67a1995bfdf3498b206e1..8a8ddb8aa178ac1da9a786d73b6dccc154c06b39 100644
--- a/installer/resources/themes/console/classic/console.css
+++ b/installer/resources/themes/console/classic/console.css
@@ -39,7 +39,7 @@ body {
 }
 
 .routersummary img[src$="i2plogo.png"], .routersummary h3, .confignav, *::before, *::after, div.app, .themechoice, .langselect, .langbox,
-.newsAuthor, #netdbcountrylist img, .viewfullentry, .sybil_routerinfo th img, .graphspanel {
+.newsAuthor, #newsDisplay, #netdbcountrylist img, .viewfullentry, .sybil_routerinfo th img, .graphspanel {
      -moz-user-select: none;
      -webkit-user-select: none;
      user-select: none;
@@ -320,12 +320,16 @@ img {
 
 /* console error messages */
 
+img[src="/themes/console/images/i2plogo.png"] {
+     box-shadow: none !important;
+}
+
 .sorry {
-     padding: 20px 20px 20px 60px;
-     background: #fff url(/themes/console/images/info/errortriangle.png) 10px center no-repeat;
-     background: url(/themes/console/images/info/errortriangle.png) 10px center no-repeat, linear-gradient(to bottom, #fff, #ffe);
+     padding: 20px 20px 20px 75px;
+     background: #fff url(/themes/console/images/info/errortriangle.png) 20px 40% no-repeat;
+     background: url(/themes/console/images/info/errortriangle.png) 20px 40% no-repeat, linear-gradient(to bottom, #fff, #ffe);
      margin: -1px 0 0 211px;
-     min-width: 490px;
+     min-width: 475px;
      border: 1px solid #89f;
      box-shadow: inset 0 0 0 1px #ff9;
      text-align: justify;
@@ -342,6 +346,39 @@ img {
      margin: 10px 0;
 }
 
+.sorry p {
+    padding: 0 !important;
+}
+
+#warning2 {
+     min-width: 540px;
+     background: linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0.2)) repeat scroll 0 0 / 100% 100%, rgba(0, 0, 0, 0) url(images/bg0.png) repeat scroll 0 0 / 120px 120px;
+     margin-top: -15px;
+     padding: 0 15px 5px;
+     box-shadow: inset 0 0 0 1px #f99;
+     font-weight: normal;
+     color: #2c354f;
+}
+
+#warning2 h3 {
+     margin: -1px -16px 15px;
+     color: #2c354f;
+     box-shadow: inset 0 0 0 1px #f99;
+     padding: 8px 10px;
+}
+
+#warning2 b {
+     margin-right: 3px;
+     display: inline-block;
+     min-width: 140px;
+     text-align: right;
+}
+
+#warning2 p {
+     margin-left: 10px;
+     margin-right: 10px;
+}
+
 /* sidebar */
 
 .routersummaryouter {
@@ -441,7 +478,7 @@ img {
      border: 0;
      border-bottom: 0 !important;
      font-size: 8.5pt;
-     letter-spacing: 0.05em;
+/*     letter-spacing: 0.05em;*/
      margin: -7px -1px -7px -1px !important;
      padding: 8px 2px;
      text-transform: capitalize;
@@ -561,9 +598,13 @@ img {
 }
 
 #sb_localtunnels a {
-     text-transform: capitalize;
+     text-transform: none;
      display: inline-block;
      width: 100%;
+     max-width: 180px;
+     overflow: hidden;
+     text-overflow: ellipsis;
+     white-space: nowrap;
 }
 
 #sb_localtunnels td:first-child {
@@ -594,9 +635,15 @@ img {
      background: #fff;
      border: 1px solid #89f;
      border-radius: 2px;
-     box-shadow: 0 0 1px #bbb;
-     margin: -5px 1px -6px;
-     padding: 5px 3px;
+     box-shadow: 0 0 1px #bbb, inset 0 0 0 1px #fbb;
+     margin: -4px 2px -5px;
+     padding: 6px 5px;
+     line-height: 110%;
+     font-size: 8pt;
+}
+
+#sb_warning + .sb_notice {
+     margin-top: 10px;
 }
 
 p:empty + .sb_notice {
@@ -607,41 +654,67 @@ p:empty + .sb_notice {
      margin: -2px 0;
 }
 
-.newsheadings {
+/* sidebar news */
+
+.sb_newsheadings {
      text-align: right;
-     margin: -1px 5px -5px -23px;
+     margin: -1px 5px -5px 0;
+     margin: -3px 0 -7px 0;
      padding: 0;
      font-size: 8pt;
 }
 
-.newsheadings ul {
-     margin: 2px 5px -1px 38px;
-     padding: 0;
-     display: inline-block;
-     width: 171px;
+.sb_newsheadings table {
+     margin: -6px 0 2px !important;
+     width: 100%;
+     table-layout: auto;
+     background: #fff;
 }
 
-.newsheadings li {
-     list-style: none outside url(images/newsbullet_mini.png);
-     margin: 2px -4px 2px 8px;
-     vertical-align: middle;
-     line-height: 110%;
+.sb_newsheadings td {
+     text-align: left;
+     border: none;
+     padding: 5px 3px;
+     border-collapse: collapse;
+     border-bottom: 1px solid #fff !important;
+     line-height: 100%;
 }
 
-.newsheadings li a {
-     margin-top: -2px;
-     margin-left: -3px;
-     display: inline-block;
+.sb_newsheadings table tr:last-child td {
+     border-bottom: none !important;
+     padding-bottom: 3px !important;
+}
+
+.sb_newsheadings td {
+     background: #eff2ff;
+     padding-left: 20px;
+     padding-right: 8px;
+     text-align: left;
+     background: url(images/link.png) 4px 4px no-repeat !important;
+     background-size: 12px auto !important;
+     background-blend-mode: luminosity;
+     vertical-align: middle !important;
+     transition: ease background 0.2s;
+     word-spacing: 0.1em;
 }
 
-.newsheadings li:first-child {
-     margin-top: -3px;
+.sb_newsheadings tr:hover td {
+     background: url(images/link.png) 4px 4px no-repeat #ffd !important;
+     background-size: 12px auto !important;
+     background-blend-mode: normal;
+     transition: ease background 0.2s;
 }
 
-.newsheadings li:last-child {
-     margin-bottom: 0;
+.sb_newsheadings td a {
+     line-height: 110%;
+     display: inline-block;
+     margin: 0;
+     padding: 0;
+     width: 100%;
 }
 
+/* end sidebar news */
+
 div.refresh {
      margin-top: 10px !important;
      margin-bottom: 10px !important;
@@ -683,9 +756,9 @@ div.refresh {
      vertical-align: middle;
      border: 1px solid #88f;
      border-radius: 2px;
-     padding: 6px 3px;
-     width: calc(100% - 10px);
-     margin: -5px 0 -6px;
+     padding: 6px 5px;
+     width: calc(100% - 12px);
+     margin: -6px 0 -7px;
      box-shadow: inset 0 0 0 1px #fff, 0 0 1px rgba(96,96,96,0.5);
      text-shadow: 0 1px 1px #fff;
 }
@@ -719,10 +792,11 @@ div.refresh {
 
 .routersummary .error::before, .routersummary .warn::before, .routersummary .testing::before, .routersummary .hidden::before,
 .routersummary .running::before, .routersummary .firewalled::before, .routersummary .vmcomm::before, .routersummary .clockskew::before {
-     padding-right: 2px;
+     padding-right: 1px;
      vertical-align: middle;
      display: inline-block;
      filter: drop-shadow(0 0 1px rgba(96,96,96,0.5));
+     transform: scale(0.9);
 }
 
 .routersummary .error::before, .routersummary .clockskew::before {
@@ -764,6 +838,14 @@ div.refresh {
 
 /* welcome */
 
+div[lang="es"] li, div[lang="pt"] li, div[lang="sv"] li, div[lang="zh"] li {
+     list-style: none;
+}
+
+div[lang="sv"] li::first-letter {
+     text-transform: uppercase !important;
+}
+
 div[lang="ar"] li {
      margin: 0 10px 0 30px;
 }
@@ -774,6 +856,33 @@ div[lang="ar"] h3, div[lang="ar"] li {
 
 div[lang="de"] .twocol {
      margin-left: 50px !important;
+     margin-top: -8px !important;
+}
+
+div[lang="sv"] .twocol {
+     margin-top: 2px !important;
+}
+
+div[lang="es"] li {
+    list-style-type: none;
+    margin-left: -10px;
+}
+
+div[lang="es"] .twocol {
+     background: #eff2ff;
+     border-radius: 1px;
+     box-shadow: 0 0 0 1px #bbf;
+     padding: 5px 0 8px 48px;
+     margin-top: 15px !important;
+}
+
+div[lang="es"] .twocol:not(old) {
+     margin-left: 0 !important;
+     margin-right: 0 !important;
+}
+
+div[lang="pt"] li br {
+     display: none;
 }
 
 #console .links {
@@ -784,6 +893,11 @@ div[lang="de"] .twocol {
      padding-top: 10px;
 }
 
+#console li {
+     line-height: 140%;
+     text-align: justify;
+}
+
 .langbox {
      margin: 3.5px 2px 0;
      color: #001;
@@ -799,7 +913,7 @@ div[lang="de"] .twocol {
      padding: 0 !important;
      margin: 0 1px -1px;
      opacity: 0.9;
-     border: 1px solid #999;
+     border: 1px solid #bbf;
      transform: none !important;
 }
 
@@ -808,6 +922,10 @@ div[lang="de"] .twocol {
      transform: scale(1.1) !important;
 }
 
+.langbox img:hover:active {
+     transform: none !important;
+}
+
 .links {
      padding-bottom: 0;
      text-align: justify;
@@ -819,8 +937,36 @@ div[lang="de"] .twocol {
      padding: 5px 10px 0 !important;
 }
 
+.links:not(old) {
+     margin-left: -15px !important;
+     margin-right: -15px !important;
+}
+
+.links li:not(old) {
+     list-style: url(/themes/console/images/transparent.gif) !important;
+     list-style-position: outside;
+     padding: 5px 10px 0 !important;
+}
+
+.links li::before {
+     content: "";
+     display: inline-block;
+     width: 16px;
+     height: 18px;
+     background: url(images/link.png) left top 4px no-repeat !important;
+     background-size: 14px 14px !important;
+     margin-right: 4px;
+     margin-left: -20px;
+}
+
+div[lang="ar"] .links li::before {
+     background-position: right top 4px !important;
+     margin-right: -20px;
+     margin-left: 4px;
+}
+
 .links li:first-child {
-     padding: 14px 10px 5px !important;
+     padding: 15px 10px 5px !important;
 }
 
 .links li:last-child {
@@ -838,9 +984,9 @@ div[lang="de"] .twocol {
      -moz-columns: 2 400px;
      -webkit-columns: 2 400px;
      columns: 2 400px;
-     -moz-column-gap: 20px !important;
-     -webkit-column-gap: 20px !important;
-     column-gap: 20px !important;
+     -moz-column-gap: 40px !important;
+     -webkit-column-gap: 40px !important;
+     column-gap: 40px !important;
      display: block;
      margin: 10px 0 !important;
 }
@@ -864,6 +1010,10 @@ p + .twocol {
      margin-left: 30px !important;
 }
 
+#console div[lang="es"] .twocol {
+     margin-left: 0 !important;
+}
+
 .twocol li {
      margin-left: 20px;
 }
@@ -889,7 +1039,7 @@ a:link {
      word-wrap: break-word;
 }
 
-a:visited {
+a:visited, #graphopts a, #graphopts a:visited {
      color: #448 !important;
      text-decoration: none;
      font-weight: bold;
@@ -922,8 +1072,7 @@ pre {
 }
 
 tt, code {
-     font-size: 9pt;
-     font-weight: bold !important;
+     font: bold 8pt "Droid Sans Mono", "Andale Mono", "DejaVu Sans Mono", "Lucida Console", monospace !important;
      color: darkgreen;
 }
 
@@ -947,6 +1096,12 @@ select {
      cursor: pointer;
 }
 
+@media screen and (-webkit-min-device-pixel-ratio:0) {
+select {
+     padding: 5px 16px 5px 8px !important;
+}
+}
+
 select option {
      background: #fff;
 }
@@ -1084,6 +1239,8 @@ input.search[type="text"] {
 
 input[name="refreshInterval"] {
      text-align: right;
+     min-width: 80px;
+     width: 80px;
 }
 
 input[type="submit"], input[type="reset"], button, .optbox {
@@ -1509,6 +1666,7 @@ button::-moz-focus-inner, input[type="submit"]::-moz-focus-inner, input[type="re
 
 .routersummary .reload:hover, .routersummary .reload:focus {
      background: url(/themes/console/images/buttons/restart_hover.png) center center no-repeat, linear-gradient(to bottom, #ddd 0%, #fff 100%) !important;
+     background: url(/themes/console/images/buttons/shutdown_hover.png) 37% center no-repeat, url(/themes/console/images/buttons/restart_hover.png) 63% center no-repeat, linear-gradient(to bottom, #ddd 0%, #fff 100%) !important;
      border: 1px solid #89f;
 }
 
@@ -1678,17 +1836,6 @@ div.welcome {
      min-width: 570px;
 }
 
-.main#jardump {
-     padding: 0;
-     overflow-y: hidden !important;
-     min-width: 570px;
-}
-
-.main#proof {
-     padding: 0;
-     min-width: 570px;
-}
-
 .main#tunnelmgr {
      padding: 0 10px;
      min-width: 550px;
@@ -1767,6 +1914,10 @@ div.news h3 {
      letter-spacing: 0.1em;
 }
 
+.newsentry:first-child {
+     margin-top: -6px;
+}
+
 .newsentry h3 {
      letter-spacing: 0.1em;
      box-shadow: none;
@@ -1794,27 +1945,33 @@ div.news p:last-child {
      margin-bottom: 10px;
 }
 
-div.news a {
-     color: #663;
+div.news a, #warning a {
+     color: #7f560f !important;
 }
 
-div.news a:hover, div.news a:visited:hover {
+div.news a:hover, div.news a:focus, div.news a:visited:hover, div.news a:visited:focus, #warning a:hover, #warning a:focus {
      color: #f60 !important;
 }
 
-div.news a:visited {
-     color: #773 !important;
+div.news a:visited, #warning a:visited {
+     color: #5f4312 !important;
 }
 
 div.news hr {
      color: #cc7;
      background: #775628;
-     height: 1px;
-     border: 0 solid #cc7;
-     margin: 10px 0 2px !important;
+     height: 2px;
+     border-bottom: 1px solid #fff9ef;
+     margin: 10px 0 1px !important;
      opacity: 0.7;
 }
 
+@media screen and (-webkit-min-device-pixel-ratio:0) {
+div.news hr {
+     height: 1px;
+}
+}
+
 div.news hr:last-child {
      margin-bottom: 10px !important;
 }
@@ -1869,7 +2026,7 @@ div.news hr:last-child {
 /* top navigation */
 
 div.confignav {
-     padding: 6px 5px;
+     padding: 5px;
      margin: -16px -16px 5px -16px;
      border: 1px solid #89f;
      font-size: 9pt;
@@ -2115,8 +2272,8 @@ table.configtable, #permabanned, #loggingoptions, #configstats, ul#banlist {
      display: none;
 }
 
-#profilelist tr:hover, #floodfills tr:hover,  #ntcpconnections tr:hover, #udpconnections tr:hover,
-.homelinkedit tr:hover, .main#debug table:first-of-type tr:hover td {
+#profilelist tr:hover td, #floodfills tr:hover td,  #ntcpconnections tr:hover td, #udpconnections tr:hover td,
+.homelinkedit tr:hover td, #portmapper tr:hover td {
      background: #ffe;
      background: linear-gradient(to bottom, #fff, #ffe);
      color: #104e99;
@@ -2296,6 +2453,17 @@ tr:hover th {
      width: 16px;
 }
 
+#capabilities_key b {
+     text-transform: none !important;
+     display: inline-block;
+     min-width: 16px;
+     background: #dfe4ff;
+     text-align: center;
+     text-shadow: 0 1px 1px #fff;
+     border-radius: 2px;
+     padding: 1px 2px;
+}
+
 #thresholds tr:hover td, #profile_defs tr:hover td {
      background: none;
 }
@@ -2358,6 +2526,7 @@ ul#banlist + h3.tabletitle {
      -webkit-column-break-inside: avoid;
      display: table;
      padding: 3px !important;
+     line-height: 100%;
 }
 
 #banlist li img {
@@ -2631,9 +2800,9 @@ div.configure h2:first-child {
      vertical-align: middle;
 }
 
-#addkeyring tr, #loggingoptions tr, #profilelist tr:hover, #floodfills tr:hover, #jardump tr {
-     border-top: 1px inset #cfd6ff !important;
-     border-bottom: 1px inset #cfd6ff !important;
+#addkeyring tr td, #loggingoptions tr td, #profilelist tr:hover, #floodfills tr:hover {
+     border-top: 1px solid #cfd6ff !important;
+     border-bottom: 1px solid #cfd6ff !important;
 }
 
  tr.tablefooter {
@@ -2641,15 +2810,13 @@ div.configure h2:first-child {
      border-bottom: 1px solid #89f !important;
 }
 
-#sidebarconf tr:hover, #eventlog tr:hover, .tunneldisplay tr:hover, #jobstats tr:hover, #schedjobs tr:hover, #jardump tr:hover {
+#sidebarconf tr:hover td, #eventlog tr:hover td, .tunneldisplay tr:hover td, #jobstats tr:hover td, #schedjobs tr:hover td, #jardump tr:hover td {
      background: #ffd;
      background: linear-gradient(to bottom, #fff, #ffe);
      color: #104e99;
-     border-top: 1px solid #89f !important;
-     border-bottom: 1px solid #89f;
 }
 
-#sidebarconf tr:last-child, #sidebarconf tr:last-child:hover {
+#sidebarconf tr:last-child td, #sidebarconf tr:last-child:hover td {
      border-top: 1px solid #89f;
      background: #eff1ff;
 }
@@ -2991,6 +3158,10 @@ th.th_title {
      line-height: normal;
 }
 
+.smallhead th {
+     font-size: 8pt;
+}
+
 td {
      padding: 3px 5px;
 }
@@ -3098,11 +3269,19 @@ h4.app, h4.app2 {
 
 h4.app {
      margin-top: -5px;
+     background: url(/themes/console/images/eepsite.png) 8px center no-repeat, linear-gradient(to bottom, #fff 50%, #eff2ff 50%);
+     background-size: 16px 16px, 100% 100%;
+     background-blend-mode: luminosity, normal;
+     padding-left: 32px;
 }
 
 h4.app2 {
      clear: left;
      margin-top: 5px !important;
+     background: url(/themes/console/images/info/globe.png) 8px center no-repeat, linear-gradient(to bottom, #fff 50%, #eff2ff 50%);
+     background-size: 16px 16px, 100% 100%;
+     background-blend-mode: luminosity, normal;
+     padding-left: 32px;
 }
 
 div.ag2 {
@@ -3112,7 +3291,7 @@ div.ag2 {
 div.app {
      float: left;
      padding: 0;
-     min-width: 104px;
+     width: 140px;
      text-align: center !important;
      border: none;
      margin: 3px ;
@@ -3137,14 +3316,14 @@ div.app:hover a {
      vertical-align: middle;
 }
 
-div.applabel {
+.applabel {
      background: url(images/tinytitle.png) center center repeat-x;
      background: linear-gradient(to bottom, #fff 50%, #eff2ff 50%);
      font-size: 9pt;
      margin: 0;
      padding: 4px 2px;
      text-align: center;
-     width: 120px;
+     width: 136px;
      line-height: 110%;
      text-transform: lowercase;
      font-size: 8pt;
@@ -3165,7 +3344,7 @@ div.applabel {
      text-overflow: ellipsis;
 }
 
-.app:hover div.applabel {
+.app:hover .applabel {
      border-top: 1px solid #f60;
      background: #fff;
 }
@@ -3270,7 +3449,7 @@ table.search {
      padding: 0;
 }
 
-div.applabel:hover {
+.applabel:hover {
      box-shadow: none;
 }
 
@@ -3327,27 +3506,6 @@ h3#servicedebug a, h3#graphinfo a {
      filter: drop-shadow(0 0 1px #f60);
 }
 
-.main#debug h2 {
-     padding: 6px 10px;
-     font-size: 12pt;
-}
-
-.main#debug h3 {
-     padding: 4px 10px;
-}
-
-.main#debug th:last-child, .main#debug td:last-child {
-     text-align: right;
-}
-
-.main#debug td[colspan="2"] {
-     text-align: left;
-}
-
-.main#debug h2 + hr {
-     display: none;
-}
-
 h3 + .statusnotes {
      margin-top: -1px;
 }
@@ -3779,29 +3937,41 @@ p#enablefullstats {
      font-weight: bold;
 }
 
-div.graphspanel {
-     padding: 15px 5px 0;
+/* graphs */
+
+.graphspanel {
+     padding: 15px 5px 1px;
      margin: -16px -16px -11px -16px;
      text-align: center !important;
      overflow: hidden;
 }
 
-div.graphspanel img {
-     margin: 5px;
-     border: 1px solid #777;
+#graphs .graphspanel {
+     margin: -16px;
+}
+
+h3#graphdisplay {
+     margin: 12px -16px 10px;
+}
+
+.graphspanel img {
+     margin: 5px 4px;
+     padding: 1px;
+     background: #fff;
+     border: 1px solid #9af;
+     box-shadow: 0 0 1px 0 #abf;
      max-width: 95%;
      max-width: calc(100% - 50px);
 }
 
-div.graphspanel a img {
-     border: 1px solid #77f;
-     padding: 2px;
-     background: #ccf;
+.graphspanel a img {
+     background: #fff;
+     border: 1px solid #89f;
      opacity: 0.9;
      vertical-align: top;
 }
 
-div.graphspanel a img:hover {
+.graphspanel a img:hover {
      border: 1px solid #f60;
      text-align: center !important;
      background: #ccf;
@@ -3809,16 +3979,20 @@ div.graphspanel a img:hover {
      cursor: url(/themes/console/images/cursor_zoom.png), pointer;
 }
 
-div.graphspanel hr {
+.graphspanel a:active img {
+     border: 1px solid #f90;
+}
+
+.graphspanel hr {
      margin: 10px 0;
 }
 
-div.graphspanel form:last-child {
+.graphspanel form:last-child {
      text-align: left;
      margin: 0 20px;
 }
 
-div.graphspanel h3 {
+.graphspanel h3 {
      text-align: left;
      margin: 10px 20px 10px 20px;
 }
@@ -3830,6 +4004,10 @@ form[action="graphs"] {
      background: #eef;
 }
 
+#graphs form[action="graphs"] {
+     margin: -11px -16px;
+}
+
 form[action="graphs"] hr {
      margin: 5px -11px 3px;
      height: 1px;
@@ -3839,34 +4017,11 @@ form[action="graphs"] input[type="text"] {
      min-width: 80px !important;
 }
 
-p#graphopts {
-     text-align: center;
-     border: 1px solid #89f;
-     background: rgba(255,255,255,0.8);
-     margin: 25px -5px 0;
-     padding: 10px;
-     text-transform: capitalize;
-}
-
-h3#graphinfo {
-     margin: 5px 10px 15px;
-     text-transform: capitalize;
-}
-
-p#graphopts + p {
-     text-align: right;
-     background: #fff;
-     margin: -1px -5px 0;
-     padding: 10px;
-     border: 1px solid #89f;
-     display: none;
-}
-
 .formaction#graphing {
      margin: -3px -10px -5px;
 }
 
-/* new graphs optionbox */
+/* graphs optionbox */
 
 #graphs form {
      padding: 0 !important;
@@ -3894,9 +4049,10 @@ p#graphopts + p {
 
 #graphs td:first-child {
      text-align: right;
-     width: 85px;
+     min-width: 100px;
      white-space: nowrap;
      padding: 13px 3px 13px 5px;
+     font-weight: bold;
 }
 
 #graphs td:nth-child(2) {
@@ -3922,43 +4078,114 @@ p#graphopts + p {
      min-width: 60px;
 }
 
-/* end new graphs optionbox */
+/* end graphs optionbox */
 
-div.footnote {
-     text-align: right;
-     color: #339;
-     font-size: 7pt;
-     margin-bottom: -4px !important;
-}
+/* single view */
 
-div.footnote hr {
-     margin: 10px 0 5px 0 !important;
-     color: #99f;
-     background: #99f;
-     height: 1px;
-     border: 0 solid #99f;
+#graph_single {
+     padding-left: 0;
+     padding-right: 0;
 }
 
-.topness {
-     font-size: 7.5pt;
-     text-align: right;
-     margin-top: -8px;
-     margin-bottom: -5px;
-     margin-right: 5px;
+#graph_single .graphspanel {
+     margin: 0 -1px -13px;
+     padding: 3px 0 0 !important;
 }
 
-/* Fixes for when app is not started and console error loads inside iframe */
-
-body.iframed {
-     background: transparent url(/themes/console/images/transparent.gif) !important;
+#graph_single .graphspanel img {
+     margin: 10px 0;
 }
 
-.iframed .routersummaryouter {
-     display: none !important;
+#graphopts {
+     text-align: center;
+     border: 1px solid #89f;
+     background: rgba(255,255,255,0.8);
+     margin: 25px -1px -11px;
+     padding: 10px 10px 9px;
+     text-transform: capitalize;
+     color: transparent;
 }
 
-.iframed h1 {
-     margin: 0 !important;
+h3#graphinfo {
+     margin: 0 15px 9px;
+     text-transform: capitalize;
+}
+
+#graphopts + p {
+     text-align: right;
+     background: #fff;
+     margin: -1px -5px 0;
+     padding: 10px;
+     border: 1px solid #89f;
+     display: none;
+}
+
+#graphopts a {
+     display: inline-block;
+     border: 1px solid #8b8edf;
+     padding: 1px 10px;
+     border-radius: 15px;
+     background: #f8f8ff;
+     background: rgba(248,248,255,0.3);
+     margin: 3px -2px;
+     box-shadow: 0 0 0 1px #ddf;
+     box-shadow: 0 0 0 1px rgba(220,220,255,0.6);
+}
+
+#graphopts a:empty {
+     display: none;
+}
+
+#graphopts a:hover, #graphopts a:focus {
+     border: 1px solid #7778bf;
+     background: #e2e2ff;
+     background: linear-gradient(to bottom, #fff 50%, #d8d4ff 50%);
+     box-shadow: 0 0 0 1px rgba(220,220,255,0.6), inset 0 0 0 1px #d8d4ff;
+}
+
+#graphopts a:active {
+     box-shadow: inset 3px 3px 3px rgba(41,61,95,0.8);
+     color: #557 !important;
+}
+
+/* end single view */
+/* end graphs */
+
+.footnote {
+     text-align: right;
+     color: #339;
+     font-size: 8pt;
+     margin-bottom: -4px !important;
+}
+
+.footnote hr {
+     margin: 10px 0 5px 0 !important;
+     color: #99f;
+     background: #99f;
+     height: 1px;
+     border: 0 solid #99f;
+}
+
+.topness {
+     font-size: 7.5pt;
+     text-align: right;
+     margin-top: -8px;
+     margin-bottom: -5px;
+     margin-right: 5px;
+}
+
+/* Fixes for when app is not started and console error loads inside iframe */
+
+body.iframed {
+     background: transparent url(/themes/console/images/transparent.gif) !important;
+}
+
+.iframed .routersummaryouter {
+     display: none !important;
+}
+
+.iframed h1 {
+     margin: 0 !important;
 }
 
 .iframed .sorry {
@@ -4291,44 +4518,6 @@ td#pw_adduser input {
 
 /* end configui */
 
-.main#jardump {
-     overflow: auto;
-}
-
-#jardump table {
-     border-left: none;
-     border-right: none;
-     margin-top: -1px;
-     margin-bottom: -1px;
-     font-size: 8pt;
-}
-
-#jardump th {
-     padding: 5px;
-     font-size: 9pt;
-}
-
-#jardump td {
-     vertical-align: top;
-}
-
-.main#jardump th:nth-child(1), .main#jardump th:nth-child(3), .main#jardump th:nth-child(6), .main#jardump th:nth-child(7) {
-     text-align: left;
-}
-
-#jardump tt {
-     letter-spacing: -0.05em;
-}
-
-#jardump a tt {
-     color: #006 !important;
-}
-
-#jardump a:hover tt {
-     color: #f60 !important;
-}
-
-
 .main#netdb > .confignav {
      margin-bottom: 15px;
 }
@@ -4721,6 +4910,80 @@ p:empty { /* empty paragraph nuke */
      font-size: 10pt !important;
 }
 
+/* leasesets */
+
+.netdb_leases, .netdb_leases li {
+     margin: -1px 0 0 !important;
+     padding: 0 !important;
+     columns: 400px auto;
+     column-rule: 1px solid #ccdeff;
+}
+
+.netdb_leases li {
+     line-height: 140%;
+     list-style: none;
+     vertical-align: middle;
+     border-bottom: 1px solid #ccdeff;
+     padding: 2px 0 3px !important;
+}
+
+.netdb_leases b:first-child {
+    display: inline-block;
+    min-width: 80px;
+    margin-right: 2px;
+    text-align: right;
+}
+
+.netdb_leases .tunnel_peer img {
+     margin-bottom: -1px;
+}
+
+.netdb_gateway img {
+     vertical-align: middle;
+}
+
+.netdb_tunnel {
+     display: inline-block;
+     background: #ddf;
+     padding: 0 4px;
+     margin-right: -4px;
+     border-radius: 2px;
+}
+
+.netdb_leases .tunnel_peer {
+     margin-left: 2px;
+}
+
+.netdb_leases .tunnel_peer tt, .netdb_leases .tunnel_peer tt a {
+     letter-spacing: 0.1em;
+}
+
+.netdb_leases .tunnel_id {
+     min-width: 74px;
+}
+
+.netdb_leases .tunnel_peer tt {
+     margin: 0 3px;
+}
+
+.main li .netdb_expiry {
+     font-weight: normal;
+     text-transform: lowercase;
+     color: #2c354f !important;
+     font-style: italic;
+}
+
+#console h2, #console h3 {
+     border-radius: 2px;
+     box-shadow: 0 0 2px rgba(200,200,200,0.5);
+}
+
+img.unknownflag {
+     opacity: 0.8;
+}
+
+/* end leasesets */
+
 /* end netdb */
 
 /* /stats */
@@ -4971,6 +5234,10 @@ h3.stats {
      padding: 2px 0 !important;
 }
 
+#volunteer .links:not(old) {
+     margin: -10px 10px 0 !important;
+}
+
 #sidebarhelp h2 {
      margin-bottom: 5px !important;
 }
@@ -5037,9 +5304,20 @@ p#fullhistory {
      text-align: right;
      margin-bottom: -5px;
      margin: -5px -1px -6px !important;
-     border: 1px solid #89f;
-     padding: 5px 10px 5px 5px !important;
      background: #fff;
+     background: linear-gradient(to right, #eff2ff 50%, #fff);
+     border: 1px solid #89f;
+     padding: 7px 10px 4px 5px !important;
+}
+
+#fullhistory::before {
+     content: "";
+     display: inline-block;
+     vertical-align: middle;
+     width: 18px;
+     height: 20px;
+     background: url(/themes/console/images/buttons/fullview.png) left 45% no-repeat;
+     background-size: 14px auto;
 }
 
 .main#help td.infohelp, .main#help td.infowarn, .main#help td.infohelp, .main#help p.infohelp {
@@ -5133,54 +5411,51 @@ p#fullhistory {
      text-align: left;
 }
 
+.main#proof {
+     padding: 10px;
+     min-width: 570px;
+}
+
 #proof p {
      margin: 0;
-     padding: 0;
+     padding: 20px 10px 10px;
+     border: 1px solid #89f;
+     box-shadow: inset 0 0 0 1px #fff, 0 0 1px #ccc;
+     background: url(/themes/console/images/info/rosette.png) right 8px top 8px no-repeat #eeeffb;
+     background: url(/themes/console/images/info/rosette.png) right 8px top 8px no-repeat rgba(220,225,252,0.3);
+     background-blend-mode: luminosity;
 }
 
 #proof textarea, #proof textarea:focus {
-     border: none;
+     line-height: 180%;
      margin: 0;
+     border: none;
      padding: 15px 20px;
      width: 100%;
      box-shadow: none;
      color: #333;
      background: none;
+     height: 200px;
+     overflow: hidden;
+     white-space: pre-wrap;
+     word-break: break-all;
 }
 
-#debug h2 + table {
-     margin-top: -11px;
-}
-
-#debug th {
-     text-align: left;
-}
-
-#debug tr {
-     border-bottom: 1px solid #89f;
-}
-
-#debug td {
-     padding: 2px 5px;
-}
-
-#debug ul {
-      line-height: 120%;
-}
-
-#debug li:first-child {
-     padding: 10px 0 0;
-}
-
-#debug li:last-child {
-     padding-bottom: 0;
-     margin-bottom: -9px;
+#oldconsole p {
+     margin: 0 0 5px;
+     padding: 10px 20px;
+     line-height: 200%;
+     border: 1px solid #89f;
+     box-shadow: inset 0 0 0 1px #fff, 0 0 1px #ccc;
+     background: #eeeffb;
+     background: rgba(220,225,252,0.3);
 }
 
-#debug li {
-     padding-bottom: 0;
-     margin-left: -5px;
-     margin-bottom: -2px;
+#oldconsole b {
+     display: inline-block;
+     min-width: 120px;
+     margin-right: 8px;
+     text-align: right;
 }
 
 #certs p {
@@ -5208,13 +5483,6 @@ p#fullhistory {
      margin: -1px 0;
 }
 
-#advancedsettings td.infowarn {
-     padding: 10px 10px 10px 40px !important;
-     border: 1px solid #89f;
-     background: #fffff5 url(/themes/console/images/info/infowarn.png) 10px center no-repeat !important;
-     background-size: 22px 22px !important;
-}
-
 #configinfo th {
      text-align: left;
      font-family: "Droid Sans Mono", "Andale Mono", "DejaVu Sans Mono", "Lucida Console", monospace;
@@ -5229,6 +5497,13 @@ p#fullhistory {
      background: rgba(230,230,255,0.5);
 }
 
+.main#help #configinfo td.infowarn {
+     padding: 10px 10px 10px 38px !important;
+     border: 1px solid #89f;
+     background: #fffff5 url(/themes/console/images/info/infowarn.png) 10px center no-repeat !important;
+     background-size: 20px 20px !important;
+}
+
 /* informational images */
 
 #bugreports td.infohelp {
@@ -5296,6 +5571,14 @@ p.infowarn {
      background-size: 28px 28px;
 }
 
+#floodfillconfig tr:nth-child(2) td {
+     padding: 8px 10px 8px 18px;
+}
+
+#floodfillconfig tr:nth-child(2) b {
+     margin-right: 8px;
+}
+
 p#clientconf.infohelp, p#webappconfigtext.infohelp {
      background: #fff url(/themes/console/images/info/java_edit.png) 12px center no-repeat;
      padding: 15px 15px 15px 50px;
@@ -5925,6 +6208,309 @@ b.netdb_transport {
 
 /* end sybils */
 
+/* debug */
+
+.main#debug h2 {
+     padding: 8px 10px;
+     font-size: 12pt;
+}
+
+.main#debug h3 {
+     padding: 5px 10px;
+}
+
+.main#debug td[colspan="2"] {
+     text-align: left;
+}
+
+.main#debug h2 + hr {
+     display: none;
+}
+
+#debug h2 + table {
+     margin-top: -11px;
+}
+
+#debug th {
+     text-align: left;
+}
+
+#debug tr {
+     border-bottom: 1px solid #89f;
+}
+
+#debug td {
+     padding: 2px 5px;
+}
+
+#debug .expiry ul {
+     margin: 3px 0 10px -35px !important;
+}
+
+#debug li:first-child {
+     padding: 10px 0 0;
+}
+
+#debug li:last-child {
+     padding-bottom: 0;
+     margin-bottom: -9px;
+}
+
+#debug li {
+     list-style: none;
+     line-height: 150%;
+     padding-bottom: 0;
+     margin-left: -5px;
+     margin-bottom: -2px;
+}
+
+.debug_container {
+     background: #eef;
+     border: 1px solid #89f;
+     padding: 10px 15px;
+     margin-top: -16px;
+}
+
+.debug_container:empty, #debug ul:empty {
+     display: none;
+}
+
+.debug_container, #debug td {
+     line-height: 140%;
+}
+
+.main#debug h3 + table {
+     margin-top: -11px;
+}
+
+#debug td {
+    padding-top: 5px;
+    padding-bottom: 5px;
+}
+
+#debug h2 {
+     margin: 12px 0 0;
+     background: url(/themes/console/images/info/debug.png) right 6px center no-repeat, linear-gradient(to bottom, #fff 50%, #eff2ff 50%) !important;
+     background-size: 20px 20px, 100% 100% !important;
+     background-blend-mode: luminosity, normal, normal;
+}
+
+h2#debug_portmapper {
+     margin-top: 14px !important;
+}
+
+#debug h3 {
+     padding-left: 10px;
+}
+
+.debug_container + h3 {
+     margin-top: -1px;
+}
+
+.debug_section h2 + h3, .debug_container:empty + h3, h3 + .debug_container, .debug_section table + h3, .debug_container.buckets {
+     margin-top: -11px !important;
+}
+
+.expiry td {
+     padding-left: 3% !important;
+}
+
+.debug_container.buckets {
+     word-break: break-all;
+     margin-bottom: 5px;
+     padding-bottom: 0;
+     max-height: 600px;
+     overflow: auto;
+}
+
+.buckets hr {
+     display: none;
+}
+
+#debug th:first-child, #debug td:first-child {
+     padding-left: 10px;
+}
+
+#debug td:last-child {
+     text-align: right;
+     vertical-align: top;
+     padding-right: 10px;
+}
+
+.debug_outboundtarget td:first-child {
+     padding-left: 3% !important;
+}
+
+#portmapper td:first-child {
+     font-weight: bold;
+}
+
+#portmapper th:last-child, #portmapper td:last-child {
+     text-align: left !important;
+}
+
+#debug h3.debug_outboundsessions, #debug h3.debug_inboundsessions {
+     padding: 6px 10px 6px 28px;
+     background-blend-mode: luminosity, normal;
+}
+
+#debug h3.debug_outboundsessions {
+     margin-top: -6px !important;
+     background: url(/themes/console/images/outbound.png) 6px center no-repeat, linear-gradient(to bottom, #fff 50%, #eff2ff 50%) !important;
+}
+
+#debug h3.debug_inboundsessions {
+     background: url(/themes/console/images/inbound.png) 6px center no-repeat, linear-gradient(to bottom, #fff 50%, #eff2ff 50%) !important;
+}
+
+.debug_version {
+     color: #070;
+}
+
+/* end debug */
+
+/* jar dump */
+
+#jardump {
+     padding: 0;
+     overflow-x: auto;
+     overflow-y: hidden;
+     min-width: 570px;
+}
+
+#jardump table {
+     border-left: none;
+     border-right: none;
+     margin-top: -1px;
+     margin-bottom: -1px;
+     font-size: 8pt;
+}
+
+#jardump th {
+     padding: 5.5px 5px;
+     font-size: 9pt;
+     text-align: center;
+     border-left: none !important;
+     border-right: none !important;
+}
+
+#jardump th:first-child {
+     text-align: left;
+}
+
+#jardump tr td {
+     border-top: 1px solid #cfd6ff !important;
+}
+
+#jardump td {
+     vertical-align: top;
+}
+
+#jardump td:nth-child(2) {
+     font-style: italic;
+}
+
+#jardump tt {
+     letter-spacing: -0.05em;
+}
+
+#jardump a tt {
+     color: #006 !important;
+}
+
+#jardump a:hover tt {
+     color: #f60 !important;
+}
+
+.sha256 tt, .revision tt {
+     font-weight: normal !important;
+}
+
+.revision, .sha256, .unsignedmod {
+     -moz-user-select: all;
+     -webkit-user-select: all;
+     user-select: all;
+}
+
+.subheading.routerfiles {
+     background: url(/themes/console/images/eepsite.png) right 5px center no-repeat, linear-gradient(to right, #fff, #eef) !important;
+     background-size: 16px auto, 100% 100% !important;
+     background-blend-mode: luminosity, normal;
+}
+
+.subheading.pluginfiles {
+     background: url(/themes/console/images/plugin.png) right 5px center no-repeat, linear-gradient(to right, #fff, #eef) !important;
+     background-size: 16px auto, 100% 100% !important;
+     background-blend-mode: luminosity, normal;
+}
+
+.subheading.pluginfiles {
+     border-top: 1px solid #89f !important;
+}
+
+#jardump td {
+     border-left: 1px inset #cfd6ff !important;
+     vertical-align: middle;
+     text-align: center;
+}
+
+#jardump td:first-child, #jardump td:last-child {
+     text-align: left;
+}
+
+#jardump td:nth-child(2) {
+     text-align: right;
+}
+
+#jardump td:first-child {
+     border-left: none;
+     transition: ease padding 0.05s;
+}
+
+#jardump td:last-child {
+     padding: 1px 0;
+}
+
+.unsignedmod {
+     display: inline-block;
+     padding: 1px 2px;
+     word-break: break-all;
+     -moz-user-select: all;
+     -webkit-user-select: all;
+     user-select: all;
+}
+
+#jardump hr {
+     margin: 2px 0 !important;
+     background: #cfd6ff;
+}
+
+.unsignedmod:empty {
+     display: none;
+}
+
+#jardump td:first-child {
+     padding-left: 26px;
+     background-image: url(/themes/console/images/info/box.png);
+     background-position: 5px center;
+     background-repeat: no-repeat;
+     background-size: 16px 16px;
+}
+
+#jardump tr:hover td:first-child {
+     background: url(/themes/console/images/info/box.png) 5px center no-repeat, linear-gradient(to bottom, #fff, #ffe);
+     background: url(/themes/console/images/info/box.png) 5px center no-repeat #ffe;
+     background-size: 16px 16px;
+}
+
+@media screen and (-webkit-min-device-pixel-ratio:0) {
+#jardump td:last-child {
+     word-break: break-all;
+}
+}
+
+/* end jardump */
+
 /* responsive layout */
 
 @media screen and (max-width: 900px) {
@@ -6344,15 +6930,26 @@ table.sybil_routerinfo:last-child {
 }
 }
 
+@media screen and (min-width: 1400px) {
+.main#help #changelog pre:not(old) {
+     columns: 560px auto;
+     column-gap: 40px;
+     column-rule: 1px dotted #abf;
+     margin-left: 0;
+     padding-left: 10px;
+}
+}
+
 @media screen and (min-width: 1500px) {
-body, .main, .main td, .news p, #news p, .tab, .tab2, .main li b, .joblog li, .themelabel, .ui_lang, .applabel a, .statusnotes, .routersummary button.download,
-#peerdefs, #profile_defs, #thresholds, #configinfo, .infohelp, .infowarn, button, input, select, textarea, code, tt, pre, .netdbentry th, .configtable th, .statlist a[name],
+body, .main, .main td, .news p, #news p, .tab, .tab2, .main li b, .joblog li, .themelabel, .ui_lang, .applabel a,
+.statusnotes, .routersummary button.download, #peerdefs, #profile_defs, #thresholds, #configinfo, .infohelp, .infowarn,
+button, input, select, textarea, code, tt, pre, .netdbentry th, .configtable th, .statlist a[name],
 .statlist b, .statlist li b, .statlist a[name]:hover, div.messages, th {
      font-size: 10pt !important;
 }
 
 .routersummary td, .routersummary a, .routersummary button, .routersummary h4, .routersummary h4 a, div.news, #banlist li,
-.news #newsStatus, .news #ewsDisplay, .topness, .footnote, .cells tt, #profilelist tt {
+.news #newsStatus, .news #newsDisplay, .topness, .footnote, .cells tt, #profilelist tt, .sb_notice {
      font-size: 9pt !important;
 }
 
@@ -6394,13 +6991,14 @@ tt a, .cells tt, #profilelist tt {
 #sb_internals a, #sb_services a, #sb_advanced a {
      max-width: 212px;
 }
+
 .routersummary button[type="submit"] {
      min-width: 100px;
      margin: 2px 4px 1px;
 }
 
 div.app {
-     width: 154px;
+     width: 160px !important;
 }
 
 .app img {
@@ -6408,7 +7006,7 @@ div.app {
 }
 
 .applabel {
-     width: 150px !important;
+     width: 156px !important;
      padding: 4px 2px 2px !important;
 }
 
@@ -6425,8 +7023,8 @@ h3, h3.ptitle, h3.tabletitle, th.th_title {
      font-size: 11pt;
 }
 
-.newsheadings ul {
-     width: 202px;
+.sb_newsheadings ul {
+     width: 193px;
 }
 
 .newsentry h3, .newsentry h3 a, #news.main h3, .newsDate {
@@ -6562,6 +7160,14 @@ div.news {
 .langselect img[src^="/flags"] {
      margin-left: -81px !important;
 }
+
+.sb_newsheadings table {
+     width: 224px !important;
+}
+
+.sb_newsheadings td:last-child, .sb_newsheadings tr:hover td:last-child {
+     background-position: 4px 5px !important;
+}
 }
 
 /* end responsive layout */
diff --git a/installer/resources/themes/console/classic/console_big.css b/installer/resources/themes/console/classic/console_big.css
index 5f4cbde9473c23937dc3b3afeb22168f41b0a4ca..65b2e7a7623edacbb148d3b226c3d0aaf06ebe6b 100644
--- a/installer/resources/themes/console/classic/console_big.css
+++ b/installer/resources/themes/console/classic/console_big.css
@@ -11,6 +11,10 @@
      line-height: 140% !important;
 }
 
+b {
+     font-weight: normal !important;
+}
+
 input[type="submit"], input[type="cancel"], input[type="file"], button, button.search, input.cancel {
      font-size: 11pt !important;
      padding-top: 3px;
@@ -26,28 +30,30 @@ input[type="submit"], input[type="cancel"], input[type="file"], button, button.s
 
 .routersummary button {
      min-width: 100px !important;
+     padding-top: 3px !important;
+     padding-bottom: 3px !important;
 }
 
 /* sidepanel */
 
-div.routersummary h3, .routersummary h3 a  {
+.routersummary h3, .routersummary h3 a  {
      font-size: 13pt !important;
 }
 
-div.routersummary h4, .routersummary h4 a {
+.routersummary h4, .routersummary h4 a {
      font-size: 13pt !important;
      letter-spacing: 0;
 }
 
-div.routersummary td {
+.routersummary td {
      font-size: 11pt;
 }
 
-div.routersummary {
+.routersummary {
      width: 220px;
 }
 
-div.routersummary table {
+.routersummary table {
      width: 219px !important;
 }
 
@@ -64,7 +70,7 @@ div.routersummary table {
      font-size: 10pt !important;
 }
 
-div.routersummary table a:link, div.routersummary table a:visited {
+.routersummary table a:link, .routersummary table a:visited {
      font-size: 12pt;
      font-weight: normal;
      text-shadow: none;
@@ -74,7 +80,7 @@ div.routersummary table a:link, div.routersummary table a:visited {
 
 /* global overrides */
 
-a, b, div.routersummary h3 a, div.routersummary h4 {
+a, b, .routersummary h3 a, .routersummary h4 {
     font-weight: normal !important;
     font-size: 100%;
 }
@@ -158,11 +164,11 @@ div.main, div.news, h1, .sorry {
      margin-right: 8px;
 }
 
-div.joblog li i {
-     font-weight: normaL;
+.joblog li i {
+     font-weight: normal;
 }
 
-b, div.joblog b {
+.joblog b {
     color: #003;
     font-size: 110%;
 }
@@ -173,7 +179,7 @@ table code {
 
 .tab, .tab2 {
      font-size: 11pt;
-} 
+}
 
 .applabel a {
      padding: 0 2px 6px !important;
@@ -343,23 +349,25 @@ h3#iptransport a::after, h3#advancedconfig a::after {
      background: #eef;
      margin-top: 15px !important;
      margin-bottom: -20px !important;
-     padding: 10px 10px 5px;
+     padding: 10px;
      border-radius: 4px;
 }
 
+@media screen and (-webkit-min-device-pixel-ratio:0) {
+.twocol {
+     margin-top: 5px !important;
+}
+}
+
 .twocol li {
-     margin-left: 35px !important;
-     margin-right: 0;
-     margin-top: 0;
-     margin: 0 0 0 35px !important;
+     margin: 0 0 0 20px !important;
      padding: 0 0 10px !important;
 }
 
 .twocol li:first-child {
-     margin-top: 0 !important;
+     margin-top: 5px !important;
      margin-bottom: 10px !important;
      padding-top: 0 !important;
-     padding-left: 0 !important;
 }
 
 div[lang="zh"] a {
@@ -404,12 +412,11 @@ a:hover code {
 div.applabel {
      height: 22px !important;
      padding: 2px;
-     width: 140px;
 }
 }
 
 @media screen and (min-width: 0) {
-div.routersummary img[src$="i2plogo.png"] {
+.routersummary img[src$="i2plogo.png"] {
      margin-top: -1px;
      transform: none;
      width: 210px;
@@ -486,6 +493,31 @@ div.news h3, .newsDate, div.news a {
 #netdboverview th {
      font-size: 12pt !important;
 }
+
+.sb_newsheadings td, .sb_newsheadings tr:hover td {
+     background-position: 4px center !important;
+}
+
+.sb_newsheadings td a {
+     font-size: 9pt !important;
+}
+
+.main#tunnels td, .tunnel_cap, .tunnel_id, #tunnels .cells, #tunnels tt a {
+     font-size: 10pt !important;
+     letter-spacing: 0 !important;
+     word-spacing: 0 !important;
+}
+
+.tunnel_peer {
+     min-width: 60px !important;
+}
+
+b.tunnel_cap, .tunnel_cap b {
+     min-width: 18px;
+     color: #fff !important;
+     font-size: 10pt !important;
+     text-shadow: 0 1px 1px #555 !important;
+}
 }
 
 @media screen and (min-width: 1200px) {
@@ -513,7 +545,7 @@ body, .main, .main td, .news p, #news p, .main li b, div.joblog li, .themelabel,
      margin-top: 2px !important;
 }
 
-div.routersummary img[src$="i2plogo.png"] {
+.routersummary img[src$="i2plogo.png"] {
      margin-left: 1px;
 }
 
@@ -521,17 +553,10 @@ div.routersummary img[src$="i2plogo.png"] {
      width: 225px !important;
 }
 
-div.app {
-     width: 164px;
-}
-
-div.applabel {
+.applabel {
      padding: 3px 2px 4px !important;
-     width: 160px !important;
-}
 }
 
-@media screen and (min-width: 1500px) {
 .langselect img[src^="/flags"] {
     margin-left: -92px !important;
 }
@@ -539,6 +564,15 @@ div.applabel {
 .langselect input[name="lang"]:checked + img {
     margin-left: -93px !important;
 }
+
+.newsheadings {
+     margin-left: -2px !important;
+     margin-right: 0 !important;
+}
+
+.newsheadings ul {
+     width: 178px !important;
+}
 }
 
 /* end responsive layout */
\ No newline at end of file
diff --git a/installer/resources/themes/console/classic/i2ptunnel.css b/installer/resources/themes/console/classic/i2ptunnel.css
index 1a60d23ff17e29ca0943777c323a1f8fb192485c..2790ecfa5d0a257a549a716fe5b94c61e4c42031 100644
--- a/installer/resources/themes/console/classic/i2ptunnel.css
+++ b/installer/resources/themes/console/classic/i2ptunnel.css
@@ -512,6 +512,7 @@ textarea#statusMessages {
      border: none;
      margin: 0;
      font-family: "Droid Sans Mono", "Noto Mono", Consolas, "Lucida Console", "DejaVu Sans Mono", monospace;
+     font-size: 8pt;
 }
 
 textarea#statusMessages:focus {
@@ -662,7 +663,7 @@ td.blankColumn {
      background: rgba(240,240,255,0.5);
 }
 
-#throttler tr:nth-child(even),  #wizardTunnelTypes tr:nth-child(even), #wizardSummary tr:nth-child(even) {
+#throttler tr:nth-child(even), #wizardTunnelTypes tr:nth-child(even), #wizardSummary tr:nth-child(even) {
      background: #e7e7ff;
      background: rgba(220,220,255,0.5);
 }
@@ -785,7 +786,7 @@ input[type="file"] {
      border: none;
 }
 
-#wizardTunnelTypes select {
+#wizardTunnelTypes select, #wizardPanel .freetext {
      margin-left: 0 !important;
 }
 
@@ -851,6 +852,12 @@ input[type="file"] {
      padding: 0;
 }
 
+#tunnelWizardPage #targetDestination {
+     width: 50% !important;
+}
+
+/* end wizard specifics */
+
 /* more space */
 
 .freetext, .tunnelConfig textarea, #customOptions, #userAgents, #hostField  {
@@ -933,6 +940,10 @@ div[class^="status"] {
 .control, .control:link, .control:visited {
      min-width: 60px !important;
 }
+
+#tunnelWizardPage #targetDestination {
+     width: 200px !important;
+}
 }
 
 @media screen and (min-width: 1200px) {
@@ -1086,6 +1097,10 @@ input[type="text"] + label {
      width: 552px;
 }
 
+textarea#statusMessages {
+     font-size: 9pt;
+}
+
 #registration .displayText {
      width: 800px;
 }
diff --git a/installer/resources/themes/console/classic/mobile.css b/installer/resources/themes/console/classic/mobile.css
index 96e5f5d104c1b47077b9aeecfb189e43d57f0de1..f98ee30c70e2f76d9fee8fd2f7b80e34af95879b 100644
--- a/installer/resources/themes/console/classic/mobile.css
+++ b/installer/resources/themes/console/classic/mobile.css
@@ -31,10 +31,21 @@ body {
 }
 
 .routersummary div[style="height: 36px;"] + a {
-     margin: -5px 0 -3px !important;
      display: inline-block;
 }
 
+div[style="height: 36px;"] + a, a[href="/summaryframe"] {
+     display: inline-block;
+     margin: -3px 0 !important;
+     padding: 2px 10px;
+     border-radius: 15px;
+     border: 1px solid #7778bf;
+}
+
+a[href="/summaryframe"] {
+     margin: 2px 0 !important;
+}
+
 .routersummary hr:first-child {
      margin-bottom: 11px;
 }
diff --git a/installer/resources/themes/console/dark/console.css b/installer/resources/themes/console/dark/console.css
index 211fdf0a57855e114aa656aed175419d57f60b0d..eaed62430acff7de2853bacf8d1bf48836638949 100644
--- a/installer/resources/themes/console/dark/console.css
+++ b/installer/resources/themes/console/dark/console.css
@@ -8,7 +8,7 @@ body {
      padding: 0;
      text-align: center;
      background: #010 url(images/camotile.png) top left fixed;
-     color: #EE9;
+     color: #ee9;
      font: 8.5pt/130% "Droid Sans", "Noto Sans", Ubuntu, "Segoe UI", "Bitstream Vera Sans", "DejaVu Sans", Verdana, "Lucida Grande", Helvetica, sans-serif;
 }
 
@@ -68,7 +68,7 @@ pre {
      overflow-x: auto;
      text-align: left;
      font: 8.5pt "Droid Sans Mono", "Noto Mono", "Lucida Console", "DejaVu Sans Mono", monospace;
-     color: #EE9;
+     color: #ee9;
 }
 
 /* proxy errors */
@@ -77,7 +77,7 @@ div.logo { /* proxy error "fake" sidebar */
      float: left;
      padding: 10px;
      text-align: center;
-     color: #EE9;
+     color: #ee9;
      margin: -1px 20px 0;
      border: 1px solid #494;
      background: #000 url(images/camotile2.png);
@@ -255,6 +255,8 @@ div.warning {
 
 /* end proxy errors */
 
+/* sidebar */
+
 .routersummaryouter {
      float: left;
      width: 200px;
@@ -285,7 +287,7 @@ div.warning {
 .routersummary img[src$="i2plogo.png"] {
      opacity: 0.9;
      transition: ease filter 0.3s, ease opacity 0.3s;
-     margin-top: -2px;
+     margin-top: -1px;
      margin-left: -4px;
      width: 193px;
      height: auto;
@@ -406,6 +408,14 @@ div.warning {
    min-height: 14px;
 }
 
+#sb_general td, #sb_shortgeneral td {
+     white-space: nowrap;
+}
+
+#sb_general td:first-child, #sb_shortgeneral td:first-child {
+     max-width: 130px;
+}
+
 #sb_localtunnels {
      margin: -4px -7px -7px -8px !important;
 }
@@ -426,6 +436,11 @@ div.warning {
 
 #sb_localtunnels a {
      display: inline-block;
+     width: 100%;
+     max-width: 156px;
+     overflow: hidden;
+     text-overflow: ellipsis;
+     white-space: nowrap;
 }
 
 #sb_localtunnels td:last-child {
@@ -451,7 +466,7 @@ div.warning {
 }
 
 #sb_internals a, #sb_services a, #sb_advanced a {
-     padding: 1px 2px;
+     padding: 1px 3px;
      display: inline-block;
      vertical-align: middle;
 }
@@ -479,10 +494,24 @@ div.warning {
      border: 1px solid #262;
      border-radius: 2px;
      box-shadow: inset 0 0 0 1px #000;
-     margin: -2px -5px -4px;
+     margin: -4px -7px -6px;
      padding: 5px 3px;
 }
 
+#sb_warning {
+     border-bottom: 1px solid #494 !important;
+     margin-left: -10px !important;
+     margin-right: -10px !important;
+}
+
+#sb_warning + .sb_notice {
+     margin-top: 11px;
+}
+
+#sb_warning + hr {
+     margin-top: 7px !important;
+}
+
 p:empty + .sb_notice {
      margin-top: 9px;
 }
@@ -618,78 +647,117 @@ div.refresh {
      margin-bottom: -5px !important;
 }
 
-div.newsheadings {
-     text-align: center;
-     margin: -3px 0 -5px 10px;
-     word-spacing: 0;
-}
+/* sidebar news */
 
-div.newsheadings li {
-     list-style: none outside url(images/newsbullet_mini.png);
-     margin: 0 -6px 2px 4px;
-     line-height: 110%;
-     text-transform: capitalize;
+.sb_newsheadings {
+     width: 192px;
+     margin-left: 0;
+     margin-bottom: -7px !important;
+     text-align: right;
 }
 
-div.newsheadings li b {
-     font-weight: normal !important;
+.sb_newsheadings table {
+     margin-bottom: 3px !important;
 }
 
-div.newsheadings button {
-     margin: 4px 0 2px;
-}
+.sb_newsheadings a {
+     display: inline-block;
+     padding: 0 3px 0 0;
 
-div.tunnels {
-     padding-top: 3px !important;
-     margin-left: -4px;
-     text-align: center;
 }
 
-div.tunnels table {
-     margin: -5px 0 -5px -3px !important;
+.sb_newsheadings td {
+     padding: 4px 5px 4px 24px;
+     text-align: left;
+     background: url(images/newsbullet_mini.png) 4px center no-repeat !important;
+     border-bottom: 1px solid #131 !important;
 }
 
-div.tunnels td {
-     padding: 1px 0 1px 0;
-     text-transform: capitalize;
+.sb_newsheadings tr:last-child td {
+     border-bottom: none !important;
 }
 
-div.tunnels td:first-child {
-     width: 16px;
-     text-align: left;
-     padding-right: 2px;
+/* end sidebar news */
+/* end sidebar */
+
+/* console error messages */
+
+img[src="/themes/console/images/i2plogo.png"] {
+     margin-top: 2px !important;
+     margin-left: -1px !important;
+     width: 180px !important;
+     filter: invert(1) sepia(100%) hue-rotate(70deg) !important;
 }
 
-div.tunnels td:last-child {
-     text-align: right;
-     padding-right: 1px;
+img[src="/themes/console/images/i2plogo.png"]:hover,
+img[src="/themes/console/images/i2plogo.png"]:focus {
+     filter: invert(1) sepia(100%) hue-rotate(70deg) drop-shadow(0 0 2px #930) !important;
 }
 
-/* console error messages */
+a:active img[src="/themes/console/images/i2plogo.png"] {
+     filter: invert(1) sepia(100%) hue-rotate(70deg) drop-shadow(0 0 3px #f60) !important;
+}
 
-div.sorry {
+.sorry {
      margin: -1px 5px 10px 216px;
-     padding: 20px 20px 20px 75px;
-     background: #020;
+     padding: 20px 20px 20px 70px;
+     background: #010;
      border: 1px solid #494;
      border-radius: 0 0 4px 4px;
      text-align: justify;
-     background-image:url(/themes/console/images/info/errortriangle.png);
-     background-position:15px center;
-     background-repeat:no-repeat;
-     box-shadow: inset 0 0 0 1px #d00;
+     background: url(/themes/console/images/info/errortriangle.png) 15px 45% no-repeat #010;
+     box-shadow: inset 0 0 0 1px #700;
      word-wrap: break-word;
-     min-width: 555px;
-     color: #EE9;
+     min-width: 560px;
+     color: #ee9;
      font-size: 10pt;
 }
 
+.sorry p {
+     line-height: 130% !important;
+}
+
+#warning2 {
+     min-width: 610px;
+     margin-top: -14px;
+     margin-bottom: 5px;
+     background: #010;
+     padding: 10px 20px 5px;
+}
+
+#warning2 h3 {
+     border-width: 1px;
+     border-radius: 0;
+     border-left: none;
+     border-right: none;
+     margin: -21px -20px 0;
+     padding: 10px;
+     box-shadow: inset 0 0 0 1px #700;
+}
+
+#warning2 p {
+     font-size: 9pt;
+}
+
+#warning2 p + h3 {
+     margin-top: -5px;
+}
+
+#warning2 b {
+     display: inline-block;
+     min-width: 140px;
+     text-align: right;
+     margin-right: 5px;
+     line-height: 150%;
+}
+
 .sorry hr {
-     color: #EE9;
-     background: #EE9;
+     color: #ee9;
+     background: #ee9;
      height: 1px;
-     border: 1px solid #EE9;
+     border-top: 1px solid #ee9;
      margin: 10px 0;
+     opacity: 0.7;
 }
 
 /* main section */
@@ -698,19 +766,19 @@ div.sorry {
      margin: -1px 5px 5px 216px;
      padding: 0 15px 5px 15px;
      text-align: left;
-     color: #EE9;
+     color: #ee9;
      width: auto;
      border: 1px solid #494;
      border-radius: 0 0 2px 2px;
-     background:  #000 url("images/camotile2.png") !important;
+     background:  #000 url(images/camotile2.png) !important;
      min-width: 620px;
      box-shadow: 0 1px 5px #000;
      font-size: 9pt;
 }
 
 .main, .routersummary {
-     background:  #000 url("images/camotile2.png") !important;
-     background:  linear-gradient(to bottom, rgba(0,0,0,0.3), rgba(0,0,0,0.45)), url("images/camotile2.png") #000 !important;
+     background:  #000 url(images/camotile2.png) !important;
+     background:  linear-gradient(to bottom, rgba(0,0,0,0.3), rgba(0,0,0,0.45)), url(images/camotile2.png) #000 !important;
      box-shadow: inset 0 0 0 1px #000, 0 1px 5px #000;
 }
 
@@ -735,7 +803,7 @@ div.sorry {
      background-size: 3px 3px, 175px 175px;
 }
 
-div.main#news {
+.main#news {
      background: #000 url(images/news.png) no-repeat scroll bottom right !important;
 }
 
@@ -759,25 +827,29 @@ div.news h3, #newspage h3 {
      color: #ee9;
 }
 
-div.main textarea {
+.news .newsentry:first-child {
+     margin-top: -3px;
+}
+
+.main textarea {
      background: #000;
-     color: #EE9;
+     color: #ee9;
      font: 8pt "Droid Sans Mono", "Noto Mono", "Lucida Console", "DejaVu Sans Mono", monospace;
      resize: none;
 }
 
 div.news {
      margin: -1px 5px 0 216px;
-     padding: 6px 20px 5px;
+     padding: 6px 15px 8px;
      border: 1px solid #494;
      background: #000 url(images/news.png) no-repeat scroll bottom right;
-     background: linear-gradient(to bottom, rgba(0,0,0,0.3), rgba(0,0,0,0.5)), url("images/news.png") no-repeat scroll right bottom,  url("images/camotile2.png") #000 !important;
+     background: linear-gradient(to bottom, rgba(0,0,0,0.3), rgba(0,0,0,0.5)), url(images/news.png) no-repeat scroll right bottom, url(images/camotile2.png) #000 !important;
      background-blend-mode: lighten;
      color: #ee9;
      font-size: 8pt;
      text-align: right;
      box-shadow: 0 1px 5px #000;
-     min-width: 610px !important;
+     min-width: 620px !important;
 }
 
 /* MS Edge 14+ fix (no support for blend-mode) */
@@ -814,7 +886,7 @@ div.news h4 {
 
 div.news p, div.newscontent p {
      font-size: 9pt;
-     color: #EE9;
+     color: #ee9;
      margin: 0 !important;
 }
 
@@ -823,11 +895,13 @@ div.news p:nth-child(n+2), div.newscontent p:nth-child(n+2) {
 }
 
 div.news hr {
-     margin: 8px 0 3px 0;
+     margin: 8px 0 5px 0;
 }
 
 #newsStatus {
      float: left;
+     padding-top: 3px;
+     padding-bottom: 1px;
 }
 
 #newsDisplay {
@@ -835,6 +909,40 @@ div.news hr {
      margin-left: 10px;
 }
 
+#news #newsDisplay, #graphopts {
+     color: transparent;
+}
+
+#newsStatus, #news #newsDisplay, #news #newsDisplay a {
+     display: inline-block;
+}
+
+#news #newsDisplay a, #graphopts a {
+     border: 1px solid #010;
+     margin: 0 -2px;
+     padding: 1px 10px;
+     background: #020;
+     background: rgba(0,48,0,0.6);
+     border-radius: 15px;
+     filter: drop-shadow(0 0 1px rgba(0,16,0,0.4));
+}
+
+#news #newsDisplay a:hover, #news #newsDisplay a:focus, #graphopts a:hover, #graphopts a:focus {
+     background: #030;
+     background: linear-gradient(to bottom, #030 50%, #010 50%);
+     border: 1px solid #020;
+}
+
+#news #newsDisplay a:active, #graphopts a:active {
+     background: #020;
+     box-shadow: inset 2px 2px 2px #000;
+}
+
+.news #newsDisplay, .news #newsStatus {
+     margin-top: 3px !important;
+     display: inline-block;
+}
+
 .newsAuthor {
      float: right;
      background: url(/themes/console/images/info/author_dark.png) left 2px center no-repeat;
@@ -869,7 +977,7 @@ div.widescroll { /* only scroll content, not entire page eg /peers */
 .confignav {
      background: url(images/header.png) repeat-x scroll center center #000;
      background: linear-gradient(to bottom, #001000, #001900 50%, #000 51%, #000) !important;
-     padding: 7px 5px !important;
+     padding: 7px !important;
      margin: -1px -16px 15px;
      border: 1px solid #494;
      font-weight: bold !important;
@@ -961,7 +1069,7 @@ div.messages li {
 
 div.widepanel h3 {
      text-align: left !important;
-     padding: 6px 10px;
+     padding: 8px 10px;
      text-transform: uppercase;
      font-size: 10.5pt;
      letter-spacing: 0.08em;
@@ -978,8 +1086,13 @@ div.widepanel h3 {
 
 /* graphs */
 
+#graphs {
+     padding-left: 10px;
+     padding-right: 10px;
+}
+
 #graphs .messages {
-     margin-top: 15px;
+     margin: 15px 5px -5px;
 }
 
 .graphspanel {
@@ -1000,7 +1113,7 @@ div.widepanel h3 {
 .graphspanel a img {
      border: 1px solid #494;
      padding: 3px;
-     margin: 5px;
+     margin: 6px 4px;
      text-align: center !important;
      opacity: 0.9;
      transition: ease all 0.3s;
@@ -1009,7 +1122,6 @@ div.widepanel h3 {
 .graphspanel a img:hover {
      border: 1px solid #f60;
      padding: 3px;
-     margin: 5px;
      text-align: center !important;
      opacity: 1;
      transition: ease all 0.3s;
@@ -1032,8 +1144,12 @@ div.widepanel h3 {
      mix-blend-mode: lighten;
 }
 
+.graphspanel img:not(old) {
+     border: 1px solid #fcf;
+}
+
 .graphspanel a img:not(old) {
-     border: 1px solid #bb66bb;
+     border: 1px solid #b6b;
 }
 
 .graphspanel a img:hover:not(old) {
@@ -1048,16 +1164,35 @@ div.widepanel h3 {
      padding: 10px 10px 15px;
 }
 
-p#graphopts {
-     margin: 30px 0 5px !important;
+#graphopts {
+     margin: 30px -15px -5px !important;
+     padding: 11px 10px 10px;
+     border-top: 1px solid #494;
+     text-align: center;
+     background: #010;
+     background: rgba(0,16,0,0.5);
+}
+
+#graphopts a {
+     display: inline-block;
+     filter: none;
+     border: 1px solid #030;
+     padding: 1px 10px;
+     line-height: 130%;
+     margin: 3px -1px;
+     text-transform: capitalize;
+}
+
+#graphopts a:empty {
+     display: none;
 }
 
-p#graphopts + p {
+#graphopts + p {
      display: none;
 }
 
 h3#graphinfo {
-     margin-top: 0;
+     margin-top: 15px;
      border-radius: 0 !important;
 }
 
@@ -1065,14 +1200,6 @@ h3#graphinfo {
      display: none;
 }
 
-form[action="graphs"] {
-     border: 1px solid #494;
-     padding: 10px 10px 0 !important;
-     background: #000;
-     margin-top: -11px;
-     margin-bottom: 10px;
-}
-
 .formaction#graphing {
      margin: -4px -5px 5px !important;
      border-left: none;
@@ -1091,6 +1218,12 @@ h3#graphinfo {
      word-spacing: normal;
 }
 
+/* new graphs optionbox */
+
+h3#graphdisplay {
+     margin: 15px 10px 10px;
+}
+
 h3#graphdisplay a {
      text-transform: capitalize;
      letter-spacing: normal;
@@ -1098,7 +1231,11 @@ h3#graphdisplay a {
      font-size: 9pt;
 }
 
-/* new graphs optionbox */
+form[action="graphs"] {
+     border: 1px solid #494;
+     background: #000;
+     margin: -11px 10px 13px;
+}
 
 #graphs form {
      padding: 0 !important;
@@ -1176,7 +1313,7 @@ table hr {
 
 th {
      padding: 7px 2px;
-     color: #EE9;
+     color: #ee9;
      text-align: center;
      font-size: 9pt;
      background: #000 url(images/header.png) center center repeat-x;
@@ -1304,7 +1441,7 @@ td img {
 /* end peer sort */
 
 tt {
-     font: bold 9pt "Droid Sans Mono", "Noto Mono", "Lucida Console", "DejaVu Sans Mono", monospace;
+     font: bold 8pt "Droid Sans Mono", "Noto Mono", "Lucida Console", "DejaVu Sans Mono", monospace;
      color: #FF0;
 }
 
@@ -1375,7 +1512,7 @@ code {
      color: #dd0;
 }
 
-a:link, h2 a:link {
+a:link, h2 a:link, #graphopts a:visited {
      color: #494;
      text-decoration: none;
      font-weight: bold;
@@ -1442,6 +1579,14 @@ div[lang="de"] .twocol, div[lang="pt"] .twocol, div[lang="es"] .twocol, div[lang
      margin: 10px -5px 5px !important;
 }
 
+div[lang="es"] li, div[lang="pt"] li, div[lang="sv"] li {
+     list-style: none;
+}
+
+div[lang="sv"] li::first-letter {
+     text-transform: uppercase !important;
+}
+
 p + .twocol, div[lang="de"] p + .twocol {
      margin: 10px 25px !important;
 }
@@ -1489,7 +1634,7 @@ p:empty { /* kills empty paragraphs that are likely erroneous eg. see top of /pr
 
 h1 {
      text-align: left;
-     color: #EE9;
+     color: #ee9;
      padding: 13px 15px;
      margin: 0 5px 0 216px !important;
      font-size: 17pt;
@@ -1546,7 +1691,7 @@ h2 a:hover {
 h3, h3.welcome {
      border: 1px solid #494;
      border-left: 5px solid #494;
-     padding: 6px 10px;
+     padding: 7px 10px;
      margin: 12px 0 10px 0;
      border-radius: 0 2px 2px 0;
      background: #000 url(images/header.png) center center ;
@@ -1573,7 +1718,7 @@ h2, h3, h4 {
 }
 
 h1, h4.app, h4.app2 {
-     background: linear-gradient(to bottom, #1a261a 0%, #223022 7%, #212f21 9%, #172317 21%, #091109 49%, #050d05 50%, #020602 51%, #010301 53%, #000000 56%, #000000 100%), url("images/camotile2.png") #000 !important;
+     background: linear-gradient(to bottom, #1a261a 0%, #223022 7%, #212f21 9%, #172317 21%, #091109 49%, #050d05 50%, #020602 51%, #010301 53%, #000000 56%, #000000 100%), url(images/camotile2.png) #000 !important;
      background-blend-mode: exclusion;
      box-shadow: inset 0 0 0 1px #000;
      text-shadow: 0 1px 1px #000;
@@ -1590,7 +1735,6 @@ button, button:visited {
      padding: 4px 2px !important;
      text-decoration: none;
      border-radius: 2px;
-     font-size: 8pt;
      font-weight: bold;
      margin: 2px 3px;
      text-align: center;
@@ -1690,7 +1834,7 @@ input {
      background: #000;
      color: #494;
      margin: 5px;
-     font: bold 8pt "Droid Sans", "Noto Sans", Ubuntu, "Segoe UI", "Bitstream Vera Sans", "DejaVu Sans", Verdana, "Lucida Grande", Helvetica, sans-serif;
+     font: bold 9pt "Droid Sans", "Noto Sans", Ubuntu, "Segoe UI", "Bitstream Vera Sans", "DejaVu Sans", Verdana, "Lucida Grande", Helvetica, sans-serif;
      padding: 4px 2px;
      text-decoration: none;
      min-width: 110px;
@@ -1724,8 +1868,8 @@ input[type="text"], input[type="password"] {
      background: linear-gradient(to bottom, #000 0%, #010 100%);
      color: #ee9;
      margin: 5px 10px;
-     padding: 4px 3px;
-     font: bold 8pt "Droid Sans", "Noto Sans", Ubuntu, "Segoe UI", "Bitstream Vera Sans", "DejaVu Sans", Verdana, "Lucida Grande", Helvetica, sans-serif;
+     padding: 5px;
+     font: bold 9pt "Droid Sans", "Noto Sans", Ubuntu, "Segoe UI", "Bitstream Vera Sans", "DejaVu Sans", Verdana, "Lucida Grande", Helvetica, sans-serif;
      border: 1px solid #494 !important;
      text-decoration: none;
      border-radius: 2px;
@@ -1819,7 +1963,7 @@ select {
      border: 1px outset #191;
      border-radius: 2px;
      min-width: 110px;
-     font: 8pt "Droid Sans", "Noto Sans", Ubuntu, "Segoe UI", "Bitstream Vera Sans", "DejaVu Sans", Verdana, "Lucida Grande", Helvetica, sans-serif;
+     font: 9pt "Droid Sans", "Noto Sans", Ubuntu, "Segoe UI", "Bitstream Vera Sans", "DejaVu Sans", Verdana, "Lucida Grande", Helvetica, sans-serif;
      font-weight: bold;
      padding: 4px 16px 4px 4px !important;
      cursor: pointer;
@@ -1901,12 +2045,13 @@ textarea[readonly]:focus {
      font-weight: normal;
 }
 
-input[type="submit"], input[type="reset"], select, button { /* webkit/blink fix for oversaturated colors */
+input[type="submit"], input[type="reset"], select, button {
      border: 1px solid #8b8;
      border-bottom: 1px solid #171;
      border-right: 1px solid #171;
      background: linear-gradient(to bottom, #020 0%, #000 20%, #000 80%, #010 100%);
      filter: drop-shadow(0 0 1px #131);
+     font-size: 8pt;
 }
 
 input[type="submit"], input[type="reset"], button {
@@ -1916,8 +2061,8 @@ input[type="submit"], input[type="reset"], button {
 
 .statusnotes {
      font-style: italic;
-     font-size: 8pt;
-     color: #EE9;
+     font-size: 9pt;
+     color: #ee9;
      text-align: center;
      border: 1px solid #494 !important;
      margin: -2px 0 5px 0;
@@ -2276,7 +2421,7 @@ form[action="events"] {
      background: #000;
 }
 
-.smallhead {
+.smallhead th {
      font-size: 8pt
 }
 
@@ -2514,15 +2659,6 @@ tr#addnew, tr#addnew:hover {
      border-radius: 2px;
 }
 
-/* fixes weird height variation */
-/*
-@-moz-document url-prefix() {
-.themechoice {
-     min-height: 75px;
-}
-}
-*/
-
 .themechoice:hover {
      border: 1px solid #f60;
      background: #000;
@@ -2653,7 +2789,7 @@ p#helptranslate {
 h3#themeheading, h3#langheading, h3#passwordheading {
      border-radius: 0;
      border: 1px solid #494;
-     padding: 6px 10px;
+     padding: 8px 10px;
      font-size: 10.5pt;
      word-spacing: 0.1em;
      letter-spacing: 0.08em;
@@ -3002,6 +3138,11 @@ ul#banlist {
      margin-top: -2px;
 }
 
+#profiles #banlist {
+     border: none;
+     margin: 0;
+}
+
 /* /confignet */
 
 h3#iptransport {
@@ -3459,6 +3600,10 @@ h3#servicedebug a, h3#graphinfo a {
      letter-spacing: normal;
 }
 
+/* end /configservice */
+
+/* /tunnels */
+
 .main#tunnels h3 {
      padding-right: 5px;
 }
@@ -3475,7 +3620,6 @@ h3#servicedebug a, h3#graphinfo a {
      content: url(/themes/console/images/buttons/configure.png);
      float: right;
      padding: 0;
-
 }
 
 .main#tunnels h3 a[href^="/configtunnels#"]:hover, h3.tabletitle a:hover::after,
@@ -3483,6 +3627,8 @@ h3#servicedebug a, h3#graphinfo a {
      filter: drop-shadow(0 0 1px #f60);
 }
 
+/* end /tunnels */
+
 /* configclients */
 
 table#clientconfig th:first-child {
@@ -3874,6 +4020,83 @@ th > img[src^="/imagegen"] { /* scale down header images */
      margin-bottom: 8px;
 }
 
+/* leasesets */
+
+.netdb_leases, .netdb_leases li, .netdb_leases li:first-child {
+     margin: 0 !important;
+}
+
+.netdb_leases {
+     columns: auto 420px !important;
+     column-rule: 1px solid #131;
+     column-gap: 1em;
+}
+
+.netdb_leases li {
+     list-style: none;
+     display: inline-block;
+     padding: 1px 20px 1px 0;
+     margin: 1px 0;
+     min-width: 400px;
+}
+
+.netdb_leases li b:first-child {
+     display: inline-block;
+     min-width: 80px !important;
+     text-align: right;
+     margin: 0 !important;
+     padding: 0 !important;
+}
+
+.netdb_gateway {
+     margin-left: 0 !important;
+     margin-right: -10px !important;
+     vertical-align: bottom;
+}
+
+.netdb_gateway img {
+     vertical-align: bottom;
+}
+
+.netdb_tunnel {
+     display: inline-block;
+     background: #030;
+     padding: 0 4px;
+     margin-left: 4px;
+     margin-right: -4px;
+     border-radius: 2px;
+}
+
+.netdb_leases .tunnel_id {
+     min-width: 74px;
+}
+
+.netdb_leases .tunnel_peer, .tunneldisplay .tunnel_peer {
+     min-width: 64px;
+}
+
+.netdb_leases .tunnel_peer tt, .netdb_leases .tunnel_peer tt a {
+     font-size: 8pt !important;
+     font-weight: bold !important;
+}
+
+.netdb_leases .tunnel_peer tt, .netdb_leases .tunnel_peer a {
+     letter-spacing: 0.1em !important;
+     margin: 0 !important;
+     padding: 0 !important;
+}
+
+.main li .netdb_expiry {
+     font-weight: normal;
+     text-transform: lowercase;
+     font-style: italic;
+}
+
+img.unknownflag {
+     opacity: 0.8;
+}
+
+/* end leasesets */
 /* end netdb */
 
 /* logs */
@@ -3949,7 +4172,7 @@ table[id$="logs"] tr:nth-child(even){
 }
 
 table[id$="logs"] ul {
-     margin: -5px 12px -5px -18px !important;
+     margin: -6px 12px -5px -18px !important;
 }
 
 #wrapperlogs {
@@ -3980,7 +4203,7 @@ table[id$="logs"] ul {
 #logs li {
      list-style: none;
      font: bold 8pt "Droid Sans Mono",  "Lucida Console", "DejaVu Sans Mono", monospace;
-     line-height: 130%;
+     line-height: 115%;
      text-align: left;
      display: inline-block;
      width: 100%;
@@ -3990,15 +4213,15 @@ table[id$="logs"] ul {
 #criticallogs li {
      width: auto;
      width: calc(100% - 15px);
-     margin: 2px -10px 0 7px;
+     margin: 2px -10px 2px 7px;
 }
 
 #logs li::after {
      content: "";
      display: block;
-     border-top: 1px dotted #030;
+     border-top: 1px dashed #001000;
      width: 100%;
-     margin: 5px 0 -3px;
+     margin: 3px 0 -6px;
 }
 
 #logs li:last-child::after {
@@ -4178,6 +4401,17 @@ table#profile_defs td, table#thresholds td {
      width: 16px;
 }
 
+#capabilities_key b {
+     text-transform: none !important;
+     display: inline-block;
+     min-width: 16px;
+     background: #002000;
+     text-align: center;
+     text-shadow: 0 1px 1px #000;
+     border-radius: 2px;
+     padding: 1px 2px;
+}
+
 #profile_defs b {
      text-transform: capitalize;
 }
@@ -4244,26 +4478,26 @@ h3#bannedpeers {
 ul#banlist {
      border: 1px solid #494;
      background: #000;
-     padding: 10px 10px 10px 0;
+     padding: 10px 5px 10px 0;
      margin: -1px 0 13px;
      -moz-column-count: auto;
-     -moz-column-width: 300px;
-     -moz-column-gap: 10px;
+     -moz-column-width: 280px;
+     -moz-column-gap: 5px;
      -moz-column-rule: 1px dotted #494;
      -webkit-column-count: auto;
-     -webkit-column-width: 300px;
-     -webkit-column-gap: 10px;
+     -webkit-column-width: 280px;
+     -webkit-column-gap: 5px;
      -webkit-column-rule: 1px dotted #494;
      column-count: auto;
-     column-width: 300px;
-     column-gap: 10px;
-     column-rule: 1px dotted #494;
+     column-width: 280px;
+     column-gap: 5px;
+     column-rule: 1px dotted #151;
 }
 
 #banlist li {
      list-style: none !important;
-     border-bottom: 1px dotted #494;
-     margin: 0 10px 3px;
+     border-bottom: 1px dotted #151;
+     margin: 0 8px 3px;
      padding-top: 3px;
      min-width: 250px;
      width: 88%;
@@ -4380,15 +4614,48 @@ ul#banlist + hr {
      margin-right: 5px;
 }
 
+#proof p {
+     margin: 15px;
+     padding: 30px 5px 0;
+     border: 1px solid #000;
+     border-radius: 2px;
+     box-shadow: inset 0 0 0 1px #020, 0 0 1px #000;
+     background: url(/themes/console/images/info/rosette.png) right 8px top 8px no-repeat #001900;
+     background: url(/themes/console/images/info/rosette.png) right 8px top 8px no-repeat rgba(0,32,0,0.4);
+     background-blend-mode: color-burn;
+}
+
 #proof textarea {
      line-height: 160%;
      font-size: 9pt;
-}
+     overflow: hidden;
+     word-break: break-all;
+     white-space: pre-wrap;
+     height: 200px;
+}
 
 #proof textarea:focus {
      outline: none;
 }
 
+#oldconsole p {
+     margin: 15px 0 10px;
+     padding: 10px 20px;
+     line-height: 200%;
+     border: 1px solid #000;
+     border-radius: 2px;
+     box-shadow: inset 0 0 0 1px #020, 0 0 1px #000;
+     background: #001900;
+     background: rgba(0,32,0,0.4);
+}
+
+#oldconsole b {
+     display: inline-block;
+     min-width: 120px;
+     margin-right: 8px;
+     text-align: right;
+}
+
 /* begin home page */
 
 #homepanel {
@@ -4758,53 +5025,6 @@ table#leasesetdebug th a:hover, table#leasesetsummary th a:hover {
      filter: drop-shadow(0 0 1px #f60);
 }
 
-.main#debug {
-     line-height: 140%;
-     padding-bottom: 0;
-}
-
-.main#debug table {
-     margin-top: -13px;
-}
-
-.main#debug th, .main#debug td {
-     text-align: left;
-     padding: 5px 10px;
-}
-
-.main#debug th:last-child {
-     text-align: right;
-}
-
-.main#debug td:last-child {
-     vertical-align: top;
-     text-align: right;
-}
-
-.main#debug li:last-child {
-     padding-bottom: 2px;
-}
-
-.main#debug h2 {
-     border-radius: 0;
-     padding: 5px 10px;
-     font-size: 11pt;
-}
-
-.main#debug h3 {
-     border-radius: 0;
-     padding: 3px 10px;
-     font-size: 10pt;
-}
-
-.main#debug h2 + hr {
-     display: none;
-}
-
-div.debugcontainer {
-     border: 1px solid #f00;
-}
-
 .main#certs {
      padding-top: 3px;
 }
@@ -4842,64 +5062,6 @@ div.debugcontainer {
      width: 100%;
 }
 
-.main#jardump {
-     overflow: auto !important;
-     padding: 0;
-/*     display: inline-table;*/
-     min-width: 650px !important;
-}
-
-.main#jardump table {
-     margin: -1px 0 0;
-     border: 0;
-     border-collapse: collapse;
-     font-size: 8pt;
-     color: #bb7;
-}
-
-.main#jardump th {
-     padding: 9px 5px;
-}
-
-.main#jardump th:nth-child(1), .main#jardump th:nth-child(3), .main#jardump th:nth-child(6), .main#jardump th:nth-child(7) {
-     text-align: left;
-}
-
-.main#jardump tr:hover, .main#jardump tr:hover td {
-     background: #020;
-     color: #ee9;
-}
-
-.main#jardump td {
-     vertical-align: top;
-     padding: 2px 5px;
-     color: #bb7;
-}
-
-.main#jardump td:first-child {
-     color: #eea;
-}
-
-.main#jardump th:nth-child(4), .main#jardump th:nth-child(5) {
-     white-space: nowrap !important;
-}
-
-.main#jardump tt {
-     letter-spacing: -0.03em;
-}
-
-.main#jardump font[color="red"] {
-     color: #d00;
-}
-
-@media screen and (-webkit-min-device-pixel-ratio:0) { /* fixes column wrapping on webkit */
-.main#jardump td {
-     word-break: break-word !important;
-     word-break: break-all !important;
-     max-width: 230px;
-}
-}
-
 .main#proof {
      padding: 0;
 }
@@ -5238,6 +5400,7 @@ textarea#advancedsettings {
      white-space: pre-wrap;
      border: 0 none transparent;
      border-radius: 0;
+     word-break: break-all;
 }
 
 .configtable td.infohelp, p.infohelp, td.infohelp, p.infowarn, td.infowarn, p#debugmode, p#sybilinfo {
@@ -5292,7 +5455,7 @@ h3#updateplugins, h3#pluginmanage, h3#bannedpeers, h3.ptitle, h3#transports, h3#
      border: 1px solid #494;
      text-transform: uppercase;
      letter-spacing: 0.08em;
-     padding: 7px 10px;
+     padding: 8px 10px;
 }
 
 h3#pluginmanage {
@@ -5384,7 +5547,7 @@ table#externali2cp th {
 }
 
 th.th_title {
-     padding: 10px;
+     padding: 8px 10px !important;
      text-align: left;
      background: linear-gradient(to bottom, #1a261a 0%,#223022 7%,#212f21 9%,#172317 21%,#091109 49%,#050d05 50%,#020602 51%,#010301 53%,#000000 56%,#000000 100%) !important;
 }
@@ -5609,6 +5772,14 @@ p#sybilinfo {
      background-size: 28px 28px !important;
 }
 
+#floodfillconfig tr:nth-child(2) td {
+     padding: 8px 10px 8px 18px;
+}
+
+#floodfillconfig tr:nth-child(2) b {
+     margin-right: 10px;
+}
+
 p#clientconf.infohelp, p#webappconfigtext.infohelp {
      background: #000 url(/themes/console/images/info/java_edit.png) 12px center no-repeat !important;
      padding: 15px 15px 15px 50px;
@@ -5818,10 +5989,11 @@ p#profiles_overview {
 
 .routersummary .error::before, .routersummary .warn::before, .routersummary .testing::before, .routersummary .hidden::before,
 .routersummary .running::before, .routersummary .firewalled::before, .routersummary .vmcomm::before, .routersummary .clockskew::before {
-     padding: 0 2px;
+     margin-right: 2px;
      vertical-align: middle;
      display: inline-block;
      filter: drop-shadow(0 0 1px rgba(192,192,192,0.5));
+     transform: scale(0.8);
 }
 
 .routersummary .error::before, .routersummary .clockskew::before {
@@ -5838,7 +6010,7 @@ p#profiles_overview {
 
 .routersummary .hidden::before {
      content: url(/themes/console/images/info/network_status/network_hidden.png);
-     padding: 0 3px;
+     margin-right: 3px;
 }
 
 .routersummary .running::before {
@@ -5848,7 +6020,7 @@ p#profiles_overview {
 .routersummary .firewalled::before {
      content: url(/themes/console/images/info/network_status/network_firewalled.png);
      filter: drop-shadow(0 1px 1px rgba(255,120,120,0.8));
-     padding: 0 4px;
+     margin-right: 4px;
      opacity: 0.7;
 }
 
@@ -5864,7 +6036,7 @@ p#profiles_overview {
 
 /* /tunnels */
 
-tt a {
+tt a, .tunnel_peer tt {
      letter-spacing: 0.07em;
 }
 
@@ -5906,6 +6078,14 @@ tt a {
      text-align: right;
 }
 
+.tunnel_peer img {
+     margin-right: 2px;
+}
+
+.tunnel_peer tt {
+     margin-left: 0;
+}
+
 .tunnel_local {
      font-size: 8pt;
      text-transform: lowercase;
@@ -6299,6 +6479,325 @@ b.netdb_transport {
 
 /* end sybils */
 
+/* debug */
+
+#debug {
+     line-height: 140%;
+     padding-bottom: 0;
+}
+
+#debug table {
+     margin-top: -13px;
+}
+
+#debug th, #debug td {
+     text-align: left;
+     padding: 5px 10px;
+}
+
+#debug th {
+     padding: 7px 10px;
+}
+
+#debug th:last-child, #debug td:last-child {
+     text-align: right;
+}
+
+#debug td:last-child {
+     vertical-align: top;
+}
+
+#debug h2, #debug h3 {
+     border-radius: 0;
+}
+
+#debug h2 {
+     padding: 8px 10px;
+     font-size: 11.5pt;
+     background: url(/themes/console/images/info/debug.png) right 5px center no-repeat, linear-gradient(to bottom, #1a261a 0%, #223022 7%, #212f21 9%, #172317 21%, #091109 49%, #050d05 50%, #020602 51%, #010301 53%, #000000 56%, #000000 100%) !important;
+     background-size: 20px 20px, 100% 100% !important;
+     background-blend-mode: luminosity, normal;
+}
+
+#debug h2 + hr, .buckets hr {
+     display: none;
+}
+
+#debug h3 {
+     border-width: 1px !important;
+     padding: 5px 10px !important;
+     font-size: 10pt;
+}
+
+.debug_container {
+     margin-top: -11px;
+     border: 1px solid #494;
+     padding: 10px 15px;
+     background: #000800;
+}
+
+.debug_container:empty::after {
+     content: "None";
+     display: inline-block;
+     font-style: italic;
+}
+
+.buckets {
+     margin-top: -13px;
+     margin-bottom: 15px;
+     max-height: 600px;
+     overflow: auto;
+     word-break: break-all;
+}
+
+.debug_container + h3, .debug_outboundsessions {
+     margin-top: -1px;
+}
+
+#debug h2 + h3, .buckets {
+     margin-top: -13px;
+}
+
+#debug ul, #debug li {
+     margin: 0 !important;
+     text-align: left !important;
+}
+
+#debug li:last-child {
+     padding-bottom: 2px;
+}
+
+#debug li {
+     display: inline-block;
+     padding: 2px 0 !important;
+     min-width: 400px !important;
+}
+
+#debug ul, .debug_targetinfo {
+     columns: 400px 2;
+     column-rule: 1px solid #131;
+     column-gap: 30px;
+}
+
+.debug_targetinfo {
+     line-height: 140%;
+}
+
+.debug_targetinfo b {
+     margin-right: 3px;
+}
+
+#debug h3.debug_outboundsessions, #debug h3.debug_inboundsessions {
+     padding: 6px 10px 6px 28px !important;
+     background-blend-mode: luminosity, normal;
+}
+
+#debug h3.debug_outboundsessions {
+     margin-top: -2px !important;
+     background: url(/themes/console/images/outbound.png) 6px center no-repeat, linear-gradient(to bottom, #1a261a 0%, #223022 7%, #212f21 9%, #172317 21%, #091109 49%, #050d05 50%, #020602 51%, #010301 53%, #000 56%) !important;
+}
+
+#debug h3.debug_inboundsessions {
+     background: url(/themes/console/images/inbound.png) 6px center no-repeat, linear-gradient(to bottom, #1a261a 0%, #223022 7%, #212f21 9%, #172317 21%, #091109 49%, #050d05 50%, #020602 51%, #010301 53%, #000 56%) !important;
+}
+
+.debug_version {
+     color: #aa0;
+     font-weight: bold;
+}
+
+#portmapper td:first-child {
+     font-weight: bold;
+}
+
+#portmapper th:last-child, #portmapper td:last-child {
+     text-align: left !important;
+}
+
+/* end debug */
+
+/* jardump */
+
+#jardump {
+     overflow: auto !important;
+     padding: 0;
+     min-width: 650px !important;
+}
+
+#jardump table {
+     margin: -1px 0 0;
+     border: 0;
+     border-collapse: collapse;
+     font-size: 8pt;
+     color: #bb7;
+}
+
+#jardump th {
+     padding: 9px 5px;
+}
+
+#jardump th:nth-child(4), #jardump th:nth-child(5) {
+     white-space: nowrap !important;
+}
+
+#jardump th {
+     border-right: none;
+     border-left: none;
+}
+
+#jardump th, #jardump td {
+     vertical-align: middle !important;
+     text-align: center !important;
+}
+
+#jardump th:first-child, #jardump td:first-child {
+     text-align: left !important;
+}
+
+#jardump td {
+     border-right: 1px inset #131;
+     vertical-align: top;
+     padding: 2px 5px;
+     color: #bb7;
+}
+
+#jardump td:first-child, #jardump tr:hover td:first-child {
+     padding-left: 24px;
+     padding-right: 0 !important;
+     background-image: url(/themes/console/images/info/box.png) !important;
+     background-position: 6px center;
+     background-repeat: no-repeat;
+     background-size: 16px 16px;
+}
+
+#jardump td:first-child {
+     color: #eea;
+}
+
+#jardump td:first-child b {
+     display: inline-block;
+     padding: 4px;
+     border-radius: 2px;
+     margin-right: 4px;
+}
+
+#jardump td:nth-child(2) {
+     text-align: right !important;
+     font-style: italic;
+}
+
+#jardump td:last-child {
+     word-break: break-all;
+     text-align: left !important;
+     border-right: none;
+     padding: 0;
+}
+
+#jardump tr:hover td {
+     background: #020;
+     color: #ee9;
+     border: 1px solid #151;
+     border-left: 1px solid transparent;
+     border-right: 1px solid transparent;
+}
+
+#jardump tr:hover .unsignedmod:not(:empty) {
+     background: #600;
+     color: #fff;
+     border-radius: 2px;
+}
+
+#jardump tr:hover td:first-child b {
+     background: #030;
+     border: 1px solid #010;
+     margin-right: 0;
+     box-shadow: 0 0 1px 0 #010;
+     width: 95%;
+     width: calc(100% - 10px);
+}
+
+#jardump tr:hover hr {
+     background: transparent;
+}
+
+#jardump tr:hover td:first-child {
+     padding-left: 26px !important;
+     padding-right: 0 !important;
+}
+
+#jardump tt {
+     letter-spacing: -0.03em;
+}
+
+#jardump font[color="red"] {
+     color: #d00;
+}
+
+@media screen and (-webkit-min-device-pixel-ratio:0) { /* fixes column wrapping on webkit */
+#jardump td {
+     word-break: break-word !important;
+     word-break: break-all !important;
+     max-width: 230px;
+}
+}
+
+.revision, .sha256, .unsignedmod {
+     display: inline-block;
+     -moz-user-select: all;
+     -webkit-user-select: all;
+     user-select: all;
+}
+
+.unsignedmod {
+     padding: 2px 2px 2px 4px;
+     margin: 0;
+}
+
+#jardump hr {
+     margin: 1px 0;
+     width: 100%;
+     height: 1px;
+     background: #131;
+     display: block !important;
+}
+
+#jardump .subheading {
+     padding-top: 6px !important;
+     padding-bottom: 6px !important
+}
+
+.subheading.routerfiles {
+     background: url(/themes/console/images/eepsite.png) right 5px center no-repeat, linear-gradient(to right, #000, #001000 40%) !important;
+     background-size: 16px auto, 100% 100% !important;
+     background-blend-mode: luminosity, normal;
+}
+
+.subheading.pluginfiles {
+     background: url(/themes/console/images/plugin.png) right 5px center no-repeat, linear-gradient(to right, #000, #001000 40%) !important;
+     background-size: 16px auto, 100% 100% !important;
+     background-blend-mode: luminosity, normal;
+}
+
+.unsignedmod {
+     display: inline-block;
+     word-break: break-all;
+}
+
+@media screen and (max-width: 1400px) {
+.revision, .sha256 {
+     display: inline-block;
+     max-width: 100px !important;
+     overflow: hidden;
+     text-overflow: ellipsis
+}
+
+.revision:hover, .sha256:hover {
+     overflow: auto;
+     text-overflow: clip;
+}
+}
+/* end jardump */
+
 /* responsive layout */
 
 @media screen and (max-width: 900px) {
@@ -6431,9 +6930,33 @@ td.optionsave {
 }
 }
 
+@media screen and (min-width: 1400px) {
+#profiles #banlist {
+     border: none;
+     margin: -15px -15px -5px;
+     padding: 10px 5px;
+}
+
+.main#help #changelog pre:not(old) {
+     columns: 550px auto;
+     column-gap: 40px;
+     column-rule: 1px dotted #151;
+     margin-left: 0;
+     padding-left: 10px;
+     width: calc(100% - 22px) !important;
+     overflow-y: hidden;
+}
+}
+
+@media screen and (min-width: 1460px) {
+input[type="submit"], input[type="reset"], select, button {
+     font-size: 9pt;
+}
+}
+
 @media screen and (min-width: 1500px) {
 body, .main, .main td, .news p, #news p, textarea, .main textarea, code, tt, #changelog pre,
-ul.statlist a[name], ul.statlist b, ul.statlist li b, ul.statlist a[name]:hover, .confignav {
+ul.statlist a[name], ul.statlist b, ul.statlist li b, ul.statlist a[name]:hover, .confignav, th, #configinfo th {
      font-size: 10pt !important;
 }
 
@@ -6452,7 +6975,7 @@ ul.statlist a[name], ul.statlist b, ul.statlist li b, ul.statlist a[name]:hover,
      margin-left: 242px !important;
 }
 
-pre, #logs li, .smallhead {
+pre, #logs li, .smallhead th {
      font-size: 9pt !important;
 }
 
@@ -6496,8 +7019,8 @@ div.app {
      font-size: 10pt !important;
 }
 
-th, #configinfo th, code, tt {
-     font-size: 10pt;
+code, tt {
+     font-size: 9pt !important;
 }
 
 table#floodfills th:first-child, table#floodfills td:first-child {
@@ -6522,7 +7045,7 @@ h4#updateplugins {
 }
 
 .sorry {
-     margin-left: 232px !important;
+     margin-left: 242px !important;
 }
 
 div.joblog h3 {
@@ -6629,12 +7152,25 @@ table#reseedconfig input[type="text"], table#reseedconfig input[type="password"]
 .langselect .optbox {
      min-width: 144px !important;
 }
+
 .langselect img {
      margin-left: -81px !important;
 }
+
 .langselect input[name="lang"]:checked + img {
      margin-left: -82px !important;
 }
+
+ul#banlist {
+     -moz-column-width: 300px;
+     -webkit-column-width: 300px;
+     column-width: 300px;
+}
+
+img[src="/themes/console/images/i2plogo.png"] {
+     margin-top: 3px !important;
+     width: 200px !important;
+}
 }
 
 @media screen and (-webkit-min-device-pixel-ratio:0) and (min-width: 1500px) {
@@ -6763,3 +7299,31 @@ _:-ms-lang(x), .tunnels_client th:first-child::after {
 
 /* end Edge/IE tweaks */
 
+/* TODO: can we simplify sidebar element positioning by getting a handle on the #xhr div? */
+/*
+#xhr {
+     width: 204px;
+     background: rgba(255,255,0,0.1);
+     margin: 0 0 0 -10px;
+     text-align: center !important;
+}
+
+.routersummary table, #sb_localtunnels {
+     width: 200px !important;
+     margin-left: 2px !important;
+     margin-right: 2px !important;
+}
+
+.routersummary h4 {
+     width: 198px !important;
+     margin: 0 0 0 2px; !important;
+     display: inline-block;
+}
+
+.routersummary h3, .routersummary hr {
+     width: 100% !important;
+     margin-left: 0 !important;
+     margin-right: 0 !important;
+}
+*/
+
diff --git a/installer/resources/themes/console/dark/console_ar.css b/installer/resources/themes/console/dark/console_ar.css
index dba52016958ae26917204206710385048ff08ac0..aa23b1b310f5661b9c32160e6d7b4b6bf3c11c5a 100644
--- a/installer/resources/themes/console/dark/console_ar.css
+++ b/installer/resources/themes/console/dark/console_ar.css
@@ -42,7 +42,6 @@ div.news {
 
 div.main {
      margin: -1px 205px 5px 5px;
-     background: url("images/scarface.jpg") no-repeat scroll left bottom #000000 !important;
 }
 
 h1 {
@@ -54,6 +53,15 @@ h1, h2, h3, h4 {
      text-align: right;
 }
 
+#debug h2 {
+     background-position: 8px center !important;
+}
+
+#debug h3.debug_inboundsessions, #debug h3.debug_outboundsessions {
+     background-position: right 5px center !important;
+     padding-right: 26px !important;
+}
+
 h3, h3.welcome {
      border-width: 1px 5px 1px 1px;
 }
@@ -70,6 +78,11 @@ button.search {
      margin-right: 30px;
 }
 
+input.search, input.search:focus {
+     padding: 4px 24px 4px 3px !important;
+     background-position: right 4px center !important;
+}
+
 .routersummary img[src$="i2plogo.png"] {
      margin-top: -2px !important;
      margin-left: 0 !important;
@@ -81,7 +94,11 @@ div.routersummary h3, div.routersummary h4, .routersummary a, .routersummary b {
      font-weight: normal;
 }
 
-div.routersummary h3, div.routersummary h4 {
+div.routersummary h3 {
+     font-size: 11pt;
+}
+
+div.routersummary h4 {
      font-size: 10pt;
 }
 
@@ -94,7 +111,7 @@ div.routersummary td:last-child {
      margin-left: 3px;
 }
 
-div.routersummary td:first-child {
+.routersummary td:first-child {
      text-align: right;
 }
 
@@ -106,6 +123,16 @@ div.routersummary td:first-child {
      text-align: left;
 }
 
+#sb_localtunnels a {
+     display: inline;
+     margin-right: 2px;
+     font-size: 9pt;
+}
+
+#sb_localtunnels td:nth-child(2) {
+     text-align: right !important;
+}
+
 .langbox {
      float: left;
      text-align: left;
@@ -127,7 +154,7 @@ div.routersummary form {
     text-align: center;
 }
 
-div.joblog li, div.newsheadings li {
+div.joblog li {
     text-align: left;
     direction: ltr;
 }
@@ -493,6 +520,35 @@ a.viewfullentry::after, a[href^="viewprofile"]::after {
      margin-left: 3px !important;
 }
 
+.sb_newsheadings td, .sb_newsheadings tr:hover td {
+     background-position: right 4px center !important;
+     padding-right: 22px !important;
+     padding-left: 8px !important;
+     text-align: right !important;
+}
+
+.sb_newsheadings td a {
+     font-size: 9pt !important;
+     font-weight: bold;
+}
+
+.main#console .twocol {
+     margin: 15px 35px 5px 0 !important;
+     background: rgba(0, 32, 0, 0.5);
+     border-radius: 3px;
+     padding-top: 10px;
+     padding-bottom: 10px;
+     line-height: 120% !important;
+}
+
+.twocol li {
+     list-style-position: inside !important;
+     padding-right: 0 !important;
+     margin-right: 0 !important;
+}
+
+/* responsive layout */
+
 @media screen and (min-width: 1500px) {
 .main, .news, h1, .sorry {
      margin-right: 232px !important;
@@ -551,4 +607,7 @@ div[lang="ar"], div[lang="ar"] code, div[lang="ar"] b {
      margin-right: -10px;
      margin-top: -19px !important;
 }
-}
\ No newline at end of file
+}
+
+/* end responsive layout */
+
diff --git a/installer/resources/themes/console/dark/console_big.css b/installer/resources/themes/console/dark/console_big.css
index 3ac97129a88a81025fba5b099d5baf927ecf8363..43d531da5f43d2346f3cec5decf98b47fcf2d871 100644
--- a/installer/resources/themes/console/dark/console_big.css
+++ b/installer/resources/themes/console/dark/console_big.css
@@ -7,31 +7,31 @@ h1, h2, h3, h4 {
      font-weight: normal !important;
 }
 
-div.routersummary table td {
+.routersummary table td {
      padding: 2px 1px;
 }
 
-div.routersummary h3, div.routersummary h4, div.routersummary p, div.routersummary h3 a, div.routersummary a {
+.routersummary h3, .routersummary h4, .routersummary p, .routersummary h3 a, .routersummary a {
      text-shadow: none !important;
 }
 
-div.routersummary h3 a {
+.routersummary h3 a {
      font-size: 14pt !important;
      text-transform: uppercase !important;
      letter-spacing: 0.15em !important;
 }
 
-div.routersummary h4, .routersummary h4 a {
+.routersummary h4, .routersummary h4 a {
      font-size: 11pt !important;
      font-weight: normal;
 }
 
-div.routersummary b {
+.routersummary b {
      font-size: 10pt;
      font-weight: normal;
 }
 
-div.routersummary a {
+.routersummary a {
      font-size: 10pt;
      font-weight: normal;
 }
@@ -41,7 +41,7 @@ div.routersummary a {
      padding-bottom: 10px;
 }
 
-div.messages, div.error, .error ul li {
+.messages, .messages li, div.error, .error ul li {
      font-size: 11pt;
      font-weight: normal !important;
 }
@@ -134,19 +134,6 @@ input[type="submit"], input[type="reset"], .cancel, .accept {
      font-size: 9pt !important;
 }
 
-.langselect .optbox {
-     min-height: 68px;
-}
-
-.langselect img {
-     margin-top: 8px !important;
-}
-
-.langselect input[name="lang"]:checked + img, .langselect input[name="lang"]:checked + #config_ui img[src="/flags.jsp?c=a1"] {
-     margin-top: 6px !important;
-     margin-left: -66px !important;
-}
-
 table#leasesetdebug th a:not(old), table#leasesetsummary th a:not(old), #tunnels.main h3 a:not(old), #logs h3 a:not(old),
 a[href^="configpeer?peer"], h3#iptransport a:not(old), h3#iptransport a:not(old) {
      font-size: 0 !important;
@@ -209,6 +196,20 @@ li .twocol {
      line-height: 180%;
 }
 
+.sb_notice, .sb_notice a {
+     font-size: 10pt !important;
+     line-height: 120% !important;
+}
+
+.sb_newsheadings td, .sb_newsheadings tr:hover td {
+     background-position: 4px center !important;
+     padding-left: 24px !important;
+}
+
+.search select, .search button, .search input[type="text"] {
+     font-size: 10pt !important;
+}
+
 @media screen and (min-width: 0) {
 body {
      font-family: "Droid Sans", "Noto Sans", Verdana, "Bitstream Vera Sans", Tahoma, Helvetica, sans-serif;
@@ -229,11 +230,11 @@ div.main, div.news, h1, .sorry {
      font-size: 12pt !important;
 }
 
-div.routersummary {
+.routersummary {
      width: 200px !important;
 }
 
-div.routersummary table, table#sb_localtunnels {
+.routersummary table, table#sb_localtunnels {
     font-size: 10pt;
     width: 215px !important;
 }
@@ -279,7 +280,7 @@ p#fullhistory {
      margin-top: -13px !important;
 }
 
-div.routersummary img[src$="i2plogo.png"] {
+.routersummary img[src$="i2plogo.png"] {
     margin-left: -5px;
     margin-top: -3px;
     width: 211px;
diff --git a/installer/resources/themes/console/dark/i2ptunnel.css b/installer/resources/themes/console/dark/i2ptunnel.css
index 4ca8e32120f5572c078e59543a91422ea9c620be..a2b1776403a42201e36196437453e4325a0dd2cb 100644
--- a/installer/resources/themes/console/dark/i2ptunnel.css
+++ b/installer/resources/themes/console/dark/i2ptunnel.css
@@ -119,7 +119,7 @@ hr {
      margin: 8px auto;
      padding: 5px 3px 5px 1px !important;
      width: calc(100% - 14px);
-     min-width: 540px;
+     min-width: 700px;
      max-width: 1400px;
      overflow: hidden;
      text-align: left;
@@ -404,6 +404,7 @@ textarea#statusMessages, textarea#statusMessages:active, textarea#statusMessages
      padding: 2px 4px;
      color: #69f;
      font-family: "Droid Sans Mono", "Noto Mono", Consolas, "Lucida Console", "DejaVu Sans Mono", monospace;
+     font-size: 8pt;
 }
 
 _:-ms-lang(x), textarea#statusMessages, textarea#statusMessages:active, textarea#statusMessages:focus {
@@ -599,8 +600,9 @@ a.control {
 
 select {
      color: #494;
-     font: 8pt "Droid Sans", "Noto Sans", Ubuntu, "Segoe UI", "Bitstream Vera Sans", "DejaVu Sans", Verdana, "Lucida Grande", Helvetica, sans-serif;
+     font-family: "Droid Sans", "Noto Sans", Ubuntu, "Segoe UI", "Bitstream Vera Sans", "DejaVu Sans", Verdana, "Lucida Grande", Helvetica, sans-serif;
      font-weight: bold;
+     font-size: 8pt !important;
      padding: 4px 16px 4px 4px !important;
      -moz-appearance: none;
      -webkit-appearance: none;
@@ -1090,24 +1092,26 @@ h2, h3 {
 
 @media screen and (min-width: 1400px) {
 
-body, td, a, button, input, .control, select, textarea#statusMessages, .freetext, textarea {
-     font-size: 10pt;
+body, td, a, button, input, .control, select, .freetext, textarea {
+     font-size: 10pt !important;
 }
 
 h2, h3 {
      font-size: 12pt;
 }
+
+textarea#statusMessages, textarea#statusMessages:active, textarea#statusMessages:focus {
+     font-size: 9pt;
+}
 }
 
-/* TO DO: merge with main classes */
+/* end responsive layout */
 
-.panel {
-     min-width: 700px;
-}
+/* TO DO: merge with main classes */
 
 @media screen and (-webkit-min-device-pixel-ratio:0) { /* fixes chrome/blinkoverflow issue */
 select {
-     white-space: normal;
+     white-space: normal !important;
 }
 }
 
diff --git a/installer/resources/themes/console/dark/mobile.css b/installer/resources/themes/console/dark/mobile.css
index da7435d2c641e1f952cf339b3b38bd86d2ccae48..855a0d5dae476a8b41d3a59778cf917c91a122de 100644
--- a/installer/resources/themes/console/dark/mobile.css
+++ b/installer/resources/themes/console/dark/mobile.css
@@ -27,6 +27,18 @@ div[style="height: 36px;"] {
      height: auto !important;
 }
 
+div[style="height: 36px;"] + a, a[href="/summaryframe"] {
+     display: inline-block;
+     margin: 7px 0 0 !important;
+     padding: 4px 15px !important;
+     border-radius: 15px;
+     border: 1px solid #494;
+}
+
+a[href="/summaryframe"] {
+     margin: 3px 0 2px !important;
+}
+
 div.routersummary img[src$="i2plogo.png"] {
      width: 357px;
      margin-top: 6px;
@@ -42,11 +54,6 @@ div.routersummary {
 }
 }
 
-div[style^='height'] + a {
-     display: inline-block;
-     padding-top: 8px !important;
-}
-
 .routersummary td,
 .routersummary a,
 .routersummary h4,
diff --git a/installer/resources/themes/console/images/info/gateway.png b/installer/resources/themes/console/images/info/gateway.png
new file mode 100644
index 0000000000000000000000000000000000000000..f232015caf546740bd81781a252ab5250b2e22e6
Binary files /dev/null and b/installer/resources/themes/console/images/info/gateway.png differ
diff --git a/installer/resources/themes/console/images/info/rosette.png b/installer/resources/themes/console/images/info/rosette.png
new file mode 100644
index 0000000000000000000000000000000000000000..1c809b05f602c959b5304ed3892175ada192c83d
Binary files /dev/null and b/installer/resources/themes/console/images/info/rosette.png differ
diff --git a/installer/resources/themes/console/light/console.css b/installer/resources/themes/console/light/console.css
index e3f4eecb2b140b424632b055f2d721a161adbbba..4ec879dd581cc1a29370cf5b55abc7963fb9e397 100644
--- a/installer/resources/themes/console/light/console.css
+++ b/installer/resources/themes/console/light/console.css
@@ -9,7 +9,7 @@ html {
 body {
      margin: 6px;
      text-align: center;
-     color: #333;
+     color: #33333f;
      font: 9pt/130% "Droid Sans", "Noto Sans", Ubuntu, "Segoe UI", "Lucida Grande", Verdana, Helvetica, sans-serif;
      background: #a4a4cb url(images/tile2.png) fixed;
      background-size: 32px 32px;
@@ -29,6 +29,10 @@ body {
      background-size: 32px 32px, 0 0, 0 0, 0 0, 0 0, 0 0, 0 0, 0 0, 0 0;
 }
 
+b {
+     color: #41465f;
+}
+
 .hide, .hideme {
      display: none;
 }
@@ -52,7 +56,7 @@ div.clearer {
 }
 
 .routersummary img[src$="i2plogo.png"], .routersummary h3, .confignav, *::before, *::after, div.app, .themechoice, .langselect, .langbox,
-.newsAuthor, #netdbcountrylist img, .viewfullentry, .sybil_routerinfo th img, .graphspanel {
+.newsAuthor, #netdbcountrylist img, .viewfullentry, .sybil_routerinfo th img, .graphspanel, #themeoptions, #graphopts, #newsDisplay {
      -moz-user-select: none;
      -webkit-user-select: none;
      user-select: none;
@@ -71,7 +75,7 @@ img[src$="bound.png"] {
 }
 
 a img[src$="bound.png"] {
-     filter: hue-rotate(-40deg) drop-shadow(0 0 1px #ccc);
+     filter: hue-rotate(-40deg) drop-shadow(0 0 1px #ccf);
 }
 
 a:hover img[src$="bound.png"] {
@@ -79,7 +83,7 @@ a:hover img[src$="bound.png"] {
 }
 
 a img {
-     filter: drop-shadow(0 0 1px #ccc);
+     filter: drop-shadow(0 0 1px #ccf);
 }
 
 a:hover img {
@@ -91,7 +95,7 @@ pre {
      overflow: auto;
      text-align: left;
      font: 8pt "Droid Sans Mono", "Noto Mono", "Lucida Console", "DejaVu Sans Mono", monospace;
-     color: #333;
+     color: #33333f;
      margin: 10px;
 }
 
@@ -110,18 +114,18 @@ pre {
 }
 
 .routersummary {
-     width: 190px;
+     width: 192px;
      padding: 8px 8px 10px;
-     margin-bottom: 8px;
+     margin-bottom: 2px;
      text-align: center !important;
      border: 1px solid #447;
-     color: #333;
+     color: #33333f;
      font-size: 8pt;
      clear: left;/* fixes a bug in Opera */
      border-radius: 2px;
-     background: #fff;
+     background: #fafaff;
      box-shadow: inset 0 0 0 1px #bbf;
-     filter: drop-shadow(0 0 1px #999);
+     filter: drop-shadow(0 0 1px #999daf);
 }
 
 .routersummary div[style="height: 36px;"] {
@@ -141,9 +145,15 @@ pre {
      transition: ease filter 0.3s 0s, ease opacity 0.3s 0s;
      margin-top: -1px;
      margin-left: -1px !important;
-     width: 192px;
+     width: 194px;
      height: auto;
-     filter: drop-shadow(0 0 1px #ccc);
+     filter: drop-shadow(0 0 1px #ccf);
+}
+
+@media screen and (-webkit-min-device-pixel-ratio: 0) {
+.routersummary img[src$="i2plogo.png"] {
+     margin-top: -2px !important;
+}
 }
 
 .routersummary img[src$="i2plogo.png"]:hover {
@@ -165,10 +175,14 @@ pre {
 }
 
 .routersummary form {
-     margin: 0;
+     margin: 0 -7px;
      padding: 0 0 3px;
 }
 
+.routersummary form[action="/config"] {
+     margin: -2px -7px;
+}
+
 .routersummary form button.download {
      display: inline-block;
      vertical-align: middle;
@@ -208,7 +222,7 @@ pre {
      background: #e7e7ff !important;
      background: #e7e7ff url(images/header.png) center center repeat-x !important;
      background: linear-gradient(to bottom, #fff 50%, #eef 50%) !important;
-     background: #e7e7ff linear-gradient(to bottom, #fff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)) !important;
+     background: #e7e7ff linear-gradient(to bottom, #fff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,255,0.4)) !important;
      border: 1px solid #99f;
      border-left: none;
      border-right: none;
@@ -309,7 +323,7 @@ h4.sb_info + hr + form {
      border: 0;
      text-align: center !important;
      margin: -8px -5px -5px -5px;
-     width: 200px !important;
+     width: 202px !important;
      overflow: hidden;
      font-size: 8pt;
      background-image: none !important;
@@ -337,7 +351,7 @@ h4.sb_info + hr + form {
 }
 
 #sb_localtunnels td img {
-     filter: drop-shadow(0 0 1px rgba(204, 204, 204, 0.6));
+     filter: drop-shadow(0 0 1px #ccf);
 }
 
 #sb_localtunnels td:last-child {
@@ -350,6 +364,10 @@ h4.sb_info + hr + form {
 #sb_localtunnels a {
      display: inline-block;
      width: 100%;
+     max-width: 158px;
+     white-space: nowrap;
+     overflow: hidden;
+     text-overflow: ellipsis;
 }
 
 #sb_localtunnels tr:hover td {
@@ -378,6 +396,14 @@ h4.sb_info + hr + form {
      margin-top: -7px !important;
 }
 
+#sb_general td, #sb_shortgeneral td {
+     white-space: nowrap;
+}
+
+#sb_general td:first-child, #sb_shortgeneral td:first-child {
+     max-width: 130px;
+}
+
 #sb_general td::after, #sb_shortgeneral td::after, #sb_bandwidth td::after,
 #sb_peers td::after, #sb_tunnels td::after, #sb_queue td::after {
    content: "";
@@ -397,13 +423,21 @@ h4.sb_info + hr + form {
      margin-top: 6px;
 }
 
+#sb_warning + .sb_notice {
+     margin-top: 10px;
+}
+
+#sb_warning a {
+     line-height: 100%;
+}
+
 .sb_notice {
-     background: #eef;
+     background: #f2f2ff;
      border: 1px solid #89f;
      border-radius: 2px;
      box-shadow: 0 0 1px #bbb, inset 0 0 0 1px #fff;
      margin: -5px;
-     padding: 5px 3px;
+     padding: 5px;
      line-height: 140%;
 }
 
@@ -413,88 +447,90 @@ p:empty + .sb_notice {
 
 @media screen and (-webkit-min-device-pixel-ratio:0) {
 .sb_notice {
-     margin-bottom: -7px;
+     margin-bottom: -6px;
 }
 }
 
 /* experimental sidebar navigation for webapps */
 
+#sb_services {
+     margin: -15px -9px -11px -7px;
+     width: 206px !important;
+}
+
 #sb_services td {
-     background: url(images/noise.png);
+     padding-top: 4px;
+     padding-bottom: 4px;
 }
 
 #sb_services a:link, #sb_services a:visited {
      display: inline-block;
      width: 100%;
-     padding: 4px 2px 4px 20px;
+     padding: 4px 2px 4px 24px;
      text-align: left;
      border-bottom: 1px dotted #ddf;
-     background: url(images/application.png) left center no-repeat;
-     background-size: 14px 14px;
-}
-
-#sb_services a:link:first-child {
-     padding-top: 2px;
+     background: #f8f8ff url(/themes/console/images/plugin.png) 3px center no-repeat;
+     background: rgba(248, 248, 255, 0.8) url(/themes/console/images/plugin.png) 3px center no-repeat;
+     background-size: 16px 16px !important;
 }
 
 #sb_services a:link:last-child {
      border-bottom: none;
-     padding-bottom: 2px;
 }
 
 #sb_services a {
-     background-blend-mode: luminosity, normal;
+     background-blend-mode: luminosity;
+     vertical-align: sub !important;
 }
 
 #sb_services a:hover {
      background-blend-mode: normal;
+     background-color: #ffe;
 }
 
 #sb_services a[href="/susimail/susimail"] {
-     background: #fbfbfe url(images/inbox.png) left center no-repeat;
+     background: #f8f8ff url(images/inbox.png) 3px center no-repeat;
+     background: rgba(248, 248, 255, 0.8) url(images/inbox.png) 3px center no-repeat;
 }
 
 #sb_services a[href="/susimail/susimail"]:hover {
-     background: #ffe url(images/inbox.png) left center no-repeat;
-     border-radius: 2px;
+     background: #ffe url(images/inbox.png) 3px center no-repeat;
 }
 
 #sb_services a[href="/i2psnark/"] {
-     background: #fbfbfe url(/themes/console/images/i2psnark.png) left center no-repeat;
-     background-size: 16px 16px;
+     background: #f8f8ff url(/themes/console/images/i2psnark.png) 3px center no-repeat;
+     background: rgba(248, 248, 255, 0.8) url(/themes/console/images/i2psnark.png) 3px center no-repeat;
 }
 
 #sb_services a[href="/i2psnark/"]:hover {
-     background: #ffe url(/themes/console/images/i2psnark.png) left center no-repeat;
-     background-size: 16px 16px;
-     border-radius: 2px;
+     background: #ffe url(/themes/console/images/i2psnark.png) 3px center no-repeat;
 }
 
 #sb_services a[href="http://127.0.0.1:7658/"] {
-     background: #fbfbfe url(images/server.png) left center no-repeat;
+     background: #f8f8ff url(images/server.png) 3px center no-repeat;
+     background: rgba(248, 248, 255, 0.8) url(images/server.png) 3px center no-repeat;
 }
 
 #sb_services a[href="http://127.0.0.1:7658/"]:hover {
-     background: #ffe url(images/server.png) left center no-repeat;
-     border-radius: 2px;
+     background: #ffe url(images/server.png) 3px center no-repeat;
 }
 
 #sb_services a[href="/orchid/"] {
-     background: #fbfbfe url(images/flower.png) left center no-repeat;
+     background: #f8f8ff url(images/flower.png) 3px center no-repeat;
+     background: rgba(248, 248, 255, 0.8) url(images/flower.png) 3px center no-repeat;
 }
 
 #sb_services a[href="/orchid/"]:hover {
-     background: #ffe url(images/flower.png) left center no-repeat;
-     border-radius: 2px;
+     background: #ffe url(images/flower.png) 3px center no-repeat;
 }
 
 #sb_services a[href*="bote"] {
-     background: #fbfbfe url(images/mail_black.png) left center no-repeat;
+     background: #f8f8ff url(images/mail_black.png) 3px center no-repeat;
+     background: rgba(248, 248, 255, 0.8) url(images/mail_black.png) 3px center no-repeat;
 }
 
 #sb_services a[href*="bote"]:hover {
-     background: #ffe url(images/mail_black.png) left center no-repeat;
-     border-radius: 2px;
+     background: #ffe url(images/mail_black.png) 3px center no-repeat;
 }
 
 /* end webapp navigation */
@@ -533,7 +569,7 @@ p:empty + .sb_notice {
      vertical-align: middle;
      border: 1px solid #88f;
      border-radius: 2px;
-     padding: 6px 3px;
+     padding: 5px 6px;
      width: calc(100% - 10px);
      width: 100%;
      margin: -4px -1px;
@@ -550,7 +586,6 @@ p:empty + .sb_notice {
      background: rgba(255,110,110,0.1);
      box-shadow: inset 0 0 0 1px rgba(255,0,0,0.3), 0 0 1px rgba(96,96,96,0.5);
      background: repeating-linear-gradient(135deg, rgba(255,100,100,0.1) 2px, rgba(255,200,200,0.3) 3px,  rgba(255,100,100,0.1) 5px);
-     border: 1px dotted #d33;
 }
 
 .routersummary .warn, .routersummary .clockskew {
@@ -567,7 +602,7 @@ p:empty + .sb_notice {
 }
 
 .routersummary .vmcomm {
-     border: 1px dotted #999;
+     border: 1px dotted #999daf;
 }
 
 .routersummary .running {
@@ -576,13 +611,14 @@ p:empty + .sb_notice {
 
 .routersummary .error::before, .routersummary .warn::before, .routersummary .testing::before, .routersummary .hidden::before,
 .routersummary .running::before, .routersummary .firewalled::before, .routersummary .vmcomm::before, .routersummary .clockskew::before {
-     padding-right: 3px;
+     padding-right: 2px;
      vertical-align: middle;
      display: inline-block;
      filter: drop-shadow(0 0 1px rgba(96,96,96,0.5));
+     transform: scale(0.9);
 }
 
-.routersummary .error::before, .routersummary .clockskew::before {
+.routersummary .error::before {
      content: url(/themes/console/images/info/network_status/network_error.png);
 }
 
@@ -669,29 +705,59 @@ p:empty + .sb_notice {
 */
 /* end tunnel build status */
 
-.newsheadings {
-     text-align: right;
-     margin: -5px 0 -3px 8px;
+/* sidebar news */
+
+.sb_newsheadings {
+     margin: -5px 0 0 8px;
 }
 
-.newsheadings li {
-     list-style: none outside url(images/newsbullet_mini.png);
-     margin: 4px -4px 2px 10px;
-     line-height: 120%;
+.sb_newsheadings table {
+     table-layout: auto;
+     width: 202px !important;
+     margin: -12px 0 -8px -14px;
 }
 
-.newsheadings li:first-child {
-     margin-top: 0;
+.sb_newsheadings td a {
+     padding: 2px 0 !important;
+     display: inline-block;
+     width: 100%;
 }
 
-.refresh {
-     padding: 1px 0 0 0 !important;
+.sb_newsheadings a {
+     display: inline-block;
+     margin: -1px 0 -2px;
 }
 
-.routersummary p {
-     padding: 0;
+.sb_newsheadings td {
+     background: url(images/newsbullet_mini.png) 2px 7px no-repeat !important;
+     padding-left: 19px !important;
+     border-bottom: 1px dotted #ddf !important;
+     padding: 6px 1px;
+     text-align: left;
+     line-height: 100%;
+}
+
+.sb_newsheadings tr:hover td {
+     background: url(images/newsbullet_mini.png) 2px 7px no-repeat #ffe !important;
+     background-blend-mode: luminosity;
+}
+
+@media screen and (-webkit-min-device-pixel-ratio:0) {
+.sb_newsheadings table {
+     width: 202px !important;
+     margin-bottom: -10px;
+}
+
+.sb_newsheadings td, .sb_newsheadings tr:hover td {
+     background-position: 2px 6px !important;
+}
+}
+
+.sb_newsheadings tr:last-child td {
+     border-bottom: none !important;
 }
 
+/* end sidebar news */
 /* end sidebar */
 
 /* proxy error messages */
@@ -704,25 +770,20 @@ p:empty + .sb_notice {
      margin: 0 10px;
      border: 1px solid #447;
      border-radius: 2px;
-     background: #fff;
+     background: #f8f8ff;
      width: 185px;
      box-shadow: inset 0 0 0 1px #bbf;
 }
 
-.logo:not(old) {
-     background: linear-gradient(to bottom, rgba(255,255,255,0.8), rgba(255,255,255,0.3)), url(images/noise.png) #fff;
-     background-size: 100% 100%, 50px 50px;
-}
-
 .logo hr {
      margin: 8px -10px;
-     background: #7789bf;
+     background: #7778bf;
      height: 1px
 }
 
 .warning hr {
-     background: #7789bf;
-     background: linear-gradient(to right, #7789bf, #c2c4ef);
+     background: #7778bf;
+     background: linear-gradient(to right, #7778bf, #c2c4ef);
 }
 
 .logo a {
@@ -737,9 +798,9 @@ p:empty + .sb_notice {
 .warning {
      margin: 16px 12px 30px 232px;
      padding: 10px 25px 20px 75px;
-     background: #fff;
+     background: #fafaff;
      border: 1px solid #447;
-     color: #333;
+     color: #33333f;
      border-radius: 2px;
      text-align: justify;
      background-image: url(/themes/console/images/itoopie_sm.png);
@@ -751,8 +812,8 @@ p:empty + .sb_notice {
 }
 
 .warning:not(old) {
-     background: url("/themes/console/images/itoopie_sm.png") no-repeat scroll 10px center, linear-gradient(to bottom, rgba(255,255,255,0.8), rgba(255,255,255,0.3)), url(images/noise.png) #fff;
-     background-size: 54px auto, 100% 100%, 50px 50px;
+     background: url(/themes/console/images/itoopie_sm.png) no-repeat scroll 10px center, linear-gradient(to bottom, rgba(248,248,255,0.8), rgba(240,240,255,0.8)) #f8f8ff;
+     background-size: 54px auto, 100% 100%;
      background-position: 10px calc(50% + 16px);
 }
 
@@ -804,8 +865,7 @@ p:empty + .sb_notice {
 .warning {
      margin: 114px 5px 0 !important;
      background: #fff !important;
-     background: linear-gradient(to bottom, rgba(255,255,255,0.8), rgba(255,255,255,0.3)), url(images/noise.png) #fff !important;
-     background-size: 100% 100%, 50px 50px !important;
+     background: linear-gradient(to bottom, rgba(255,255,255,0.8), rgba(255,255,255,0.3)) #f8f8ff !important;
      padding-left: 25px !important;
 }
 
@@ -946,8 +1006,8 @@ p:empty + .sb_notice {
 
 #jumplinks h4 {
      margin-bottom: 10px;
-     border-color: #113;
-     color: #333;
+     border-color: #41465f;
+     color: #41465f;
 }
 
 .warning p + .formaction {
@@ -968,95 +1028,163 @@ p:empty + .sb_notice {
      border: 1px solid #447;
      border-radius: 0 0 2px 2px;
      text-align: justify;
-     background: #fffff9 url(/themes/console/images/info/errortriangle.png) 20px center no-repeat;
+     background: #fafaff url(/themes/console/images/info/errortriangle.png) 16px 40% no-repeat;
+     background: url(/themes/console/images/info/errortriangle.png) 16px 40% no-repeat, linear-gradient(to top, rgba(250, 250, 255, 0.5), #f8f8ff 40px), repeating-linear-gradient(135deg, #fafaff 2px, rgba(248, 248, 255, 0.8) 3px, #fafaff 5px) #f8f8ff;
      box-shadow: inset 0 0 1px #f00;
      word-wrap: break-word;
      font-weight: bold;
-     color: #531;
-     min-width: 455px;
+     min-width: 481px;
 }
 
-.sorry hr {
-     color: #531;
-     background: #531;
+.sorry hr, .sorry hr:last-child {
+     color: #558;
+     background: #558;
+     background: linear-gradient(to right, #558, #77a);
      height: 1px;
-     border: 1px solid #531;
      margin: 10px 0 !important;
 }
 
+#warning2 {
+     min-width: 536px;
+     margin-top: -25px;
+     margin-bottom: 5px;
+     padding: 20px 20px 5px;
+     background: #fafaff;
+     background: linear-gradient(to bottom, rgba(252, 252, 255, 0.8), rgba(252, 252, 255, 0.5)) #fafaff;
+     color: #33333f;
+     font-weight: normal;
+}
+
+#warning2 h3 {
+     margin: -21px -19px 5px;
+     padding: 8px 10px;
+     border-width: 1px;
+     border-left: none;
+     border-right: none;
+     border-radius: 0;
+}
+
+#warning2 p:first-of-type {
+     font-weight: bold;
+     color: #41465f;
+}
+
+#warning2 p + h3 {
+     margin-top: -10px !important;
+}
+
+#warning2 b {
+     display: inline-block;
+     min-width: 140px;
+     margin-right: 5px;
+     text-align: right;
+}
+
+/* end console error messages */
+
+/* main content div & variations */
+
+.main, .routersummary, .logo {
+     background: #f8f8ff !important;
+     background: linear-gradient(to bottom, rgba(248,248,255,0.5), rgba(240,240,255,0.5)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px) #fafaff !important;
+}
+
 .main {
      margin: -12px 0 8px 214px;
      padding: 0 15px 10px 15px;
      text-align: left;
-     color: #333;
+     color: #33333f;
      width: auto;
      min-width: 546px;
      border: 1px solid #447;
      border-radius: 0 0 2px 2px;
      box-shadow: inset 0 0 0 1px #bbf;
-     background: #fff;
-     background: linear-gradient(to right, #fff, #f7f8ff, #fff);
-     background-size: 100% 100%;
-     filter: drop-shadow(0 1px 1px #999);
+     filter: drop-shadow(0 1px 1px #999daf);
 }
 
 .main[id^="config_"] {
      padding-bottom: 5px !important;
 }
 
-.main li:first-child {
-     margin-top: 10px;
+.main#console {
+     box-shadow: inset 0 0 0 1px #bbf !important;
 }
 
-.main#debug {
-     background: #fff;
+.news, .main#news, .main#proof, .main#oldconsole, #warning2 {
+     background: #f8f8ff url(/themes/snark/ubergine/images/hat.png) no-repeat scroll right bottom;
+     background: linear-gradient(to bottom, rgba(248,248,255,0.5), rgba(240,240,255,0.5)), url(/themes/snark/ubergine/images/hat.png) no-repeat right bottom, repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px) #f8f8ff !important;
+     background-size: 100% 100%, auto 160px, 100% 100% !important;
 }
 
-.main#debug li:first-child {
-     margin-top: 0 !important;
+.main#news {
+     padding: 3px 15px 5px;
 }
 
-.main#debug table:first-of-type td:first-child {
-     font-weight: bold;
+.news#news {
+     margin: -12px 0 5px 214px;
+     padding: 5px 15px 12px;
+     border: 1px solid #447;
+     color: #224;
+     border-radius: 0 0 2px 2px;
+     text-align: right !important;
+     font-size: 8pt;
+     line-height: 140%;
+     box-shadow: inset 0 0 0 1px #bbf;
+     min-width: 546px;
+     filter: drop-shadow(0 1px 1px #999daf);
 }
 
-.main#debug table:first-of-type td:last-child {
-     text-align: left;
+.main#proof, .main#oldconsole {
+     background-size: 100% 100%, auto 70%, 100% 100% !important;
 }
 
-.main#debug td:first-child, .main#debug th:first-child {
-     padding-left: 10px;
+.main#torrents {
+     padding: 0;
+     min-width: 576px;
 }
-.main#debug td:last-child {
-     text-align: right;
-     vertical-align: top;
+
+#i2psnarkframe {
+     margin: 0;
 }
 
-.main#debug ul li {
-     list-style: none;
-     margin-left: 0;
+.main#webmail {
+     padding: 0 8px;
+}
+
+#susimailframe {
+     margin-top: 3px;
+}
+
+.main#dns {
      padding: 0;
+     min-width: 576px;
 }
 
-.main#debug h2 {
-     border-radius: 0;
-     padding: 8px 10px;
+#susidnsframe {
+     margin: 0 0 -2px;
+     height: 100%;
+     width: 100%;
+     overflow: hidden;
 }
 
-.main#debug h3 {
-     border-radius: 0;
+.main#tunnelmgr {
+     padding: 0 10px;
+     min-width: 556px;
 }
 
-.main#debug table {
-     filter: drop-shadow(0 0 1px #ccc);
+#i2ptunnelframe {
+     margin: -4px 0 -1px;
+     overflow: hidden;
 }
 
-.main#debug h2 + table {
-     margin-top: -16px;
+.main#embedded {
+     padding: 1px 11px 4px;
 }
 
-.main#debug hr {
-     display: none;
+/* end main content div & variations */
+
+.main li:first-child {
+     margin-top: 10px;
 }
 
 .main hr, hr {
@@ -1072,8 +1200,7 @@ hr:last-child {
 }
 
 .main textarea {
-     background: #fff;
-     color: #001;
+     color: #33333f;
      font: 9pt "Droid Sans Mono", "Noto Mono", "Lucida Console", "DejaVu Sans Mono", monospace;
      margin: 5px 0;
      resize: none;
@@ -1081,10 +1208,17 @@ hr:last-child {
 
 td.tabletextarea {
      padding: 0 !important;
-     background: #fff;
+     background: #fafaff;
+}
+
+textarea[id="advancedsettings"]:focus {
+     background: #fff !important;
+     color: #19191f;
+     border-radius: 0 !important;
 }
 
-textarea[id="advancedsettings"] {
+textarea[id="advancedsettings"], textarea[id="advancedsettings"][disabled]:focus {
+     background: #f8f8ff !important;
      width: 99% !important;
      width: calc(100% - 3px) !important;
      border: none !important;
@@ -1094,6 +1228,7 @@ textarea[id="advancedsettings"] {
      box-shadow: none;
      filter: none !important;
      font-size: 9pt;
+     color: #33333f;
 }
 
 textarea[name="reseedURL"] {
@@ -1121,22 +1256,6 @@ textarea[name="reseedURL"] {
 
 /* news */
 
-div.news {
-     margin: -12px 0 5px 214px;
-     padding: 5px 15px 12px;
-     border: 1px solid #447;
-     color: #224;
-     border-radius: 0 0 2px 2px;
-     text-align: right !important;
-     font-size: 8pt;
-     line-height: 140%;
-     box-shadow: inset 0 0 0 1px #bbf;
-     background: #fff url(/themes/snark/ubergine/images/hat.png) no-repeat scroll right bottom;
-     background: url(/themes/snark/ubergine/images/hat.png) no-repeat scroll right bottom, linear-gradient(to right, #fff, #f7f8ff, #fff);
-     min-width: 546px;
-     filter: drop-shadow(0 1px 1px #999);
-}
-
 .news hr {
      background: #339;
      opacity: 0.6;
@@ -1156,8 +1275,8 @@ div.news {
 }
 
 .newscontent {
-     background-color: rgba(220,220,255,0.6);
-     background: linear-gradient(to bottom, #eef, rgba(220,220,255,0.3)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px) !important;
+     background: #eef !important;
+     background: linear-gradient(to bottom, rgba(240,240,255,0.8), rgba(220,220,255,0.3)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px) !important;
      border: 1px solid #7778bf;
      border-radius: 0 0 2px 2px;
      margin: 0 0 14px;
@@ -1192,13 +1311,57 @@ div.newscontent p {
 
 #newsStatus, #newsDisplay {
      display: inline-block;
+     color: #41465f;
+}
+
+#newsStatus, .news #newsDisplay {
+     padding-top: 6px !important;
+     padding-bottom: 3px !important;
+}
+
+.news #newsdisplay, #graphopts {
+     color: transparent;
+}
+
+.news #newsdisplay a, #graphopts a {
+     border: 1px solid #8b8edf;
+     padding: 2px 10px;
+     border-radius: 15px;
+     background: #f8f8ff;
+     background: rgba(248,248,255,0.5);
+     margin-left: -3px;
+     box-shadow: 0 0 0 1px #ddf;
+     box-shadow: 0 0 0 1px rgba(220,220,255,0.6);
+}
+
+.news #newsdisplay a:hover, .news #newsdisplay a:focus,
+#graphopts a:hover, #graphopts a:visited:hover, #graphopts a:focus, #graphopts a:visited:focus {
+     color: #4f8fff;
+     border: 1px solid #7778bf;
+     background: #e2e2ff;
+     background: linear-gradient(to bottom, #f8f8ff 50%, #e2e2ff 50%);
+     box-shadow: 0 0 0 1px rgba(220,220,255,0.6), inset 0 0 0 1px #efefff;
+}
+
+.news #newsdisplay a:focus, #graphopts a:focus, #graphopts a:visited:focus {
+     border: 1px solid #f60;
+}
+
+.news #newsdisplay a:active, #graphopts a:active, #graphopts a:visited:active {
+     box-shadow: inset 3px 3px 3px rgba(41,61,95,0.8);
+     color: #559 !important;
+     border: 1px solid #7778bf;
 }
 
 .newsentry + hr + #newsStatus, .newsentry + hr + #newsStatus + #newsDisplay {
      margin-top: -6px !important;
 }
 
-#newsStatus {
+hr + #newsStatus, hr + #newsStatus + #newsDisplay {
+     padding-top: 1px !important;
+}
+
+#news #newsStatus {
      float: left;
      text-align: justify;
      margin-bottom: 6px !important;
@@ -1217,27 +1380,21 @@ div.newscontent p {
      background-size: 10px 10px;
      font-size: 8pt !important;
      display: inline-block;
-     opacity: 0.8;
+     opacity: 0.9;
      letter-spacing: 0.1em !important;
      text-transform: none;
 }
 
 .newsDate {
-     opacity: 0.8;
+     opacity: 0.9;
      margin-right: 1px;
 }
 
-.main#news {
-     padding: 3px 15px 5px;
-     background: #fff url(/themes/snark/ubergine/images/hat.png) no-repeat scroll right bottom;
-     background: url(/themes/snark/ubergine/images/hat.png) no-repeat scroll right bottom, linear-gradient(to right, #fff, #f7f8ff, #fff);
-}
-
 div.news h3, #news h3 {
-     background: url(images/news.png) 8px center no-repeat #fff !important;
-     background: url(images/news.png) 8px center no-repeat, linear-gradient(to bottom, #fff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), linear-gradient(to right, #fff 5%, rgba(231, 231, 255, 0.8)) 15% !important;
+     background: url(images/news.png) 8px center no-repeat #fcfcff !important;
+     background: url(images/news.png) 8px center no-repeat, linear-gradient(to bottom, #fff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,255,0.4)), linear-gradient(to right, #fafaff 5%, rgba(231, 231, 255, 0.8)) 15% !important;
      text-align: left;
-     padding: 5px 10px 5px 30px;
+     padding: 6px 10px 5px 30px;
      border: 1px solid #7778bf;
      border-radius: 2px 2px 0 0;
      font-size: 10pt !important;
@@ -1248,6 +1405,12 @@ div.news h3, #news h3 {
      filter: none;
 }
 
+@media screen and (-webkit-min-device-pixel-ratio: 0) {
+div.news h3, #news h3 {
+     padding: 7px 10px 5px 30px;
+}
+}
+
 div.newscontent h4 {
      border-bottom: 0;
      padding: 0;
@@ -1272,23 +1435,8 @@ div.newscontent h6 {
      text-align: left;
 }
 
-#news {
-     background: linear-gradient(to bottom, rgba(255,255,255,0.8), rgba(255,255,255,0.3)), url(/themes/snark/ubergine/images/hat.png) bottom right no-repeat, url(images/noise.png) #fff !important;
-     background-size: 100% 100%, 140px auto, 50px 50px !important;
-}
-
 /* end news */
 
-.main#torrents {
-     padding: 0 10px;
-     min-width: 576px;
-}
-
-.main, .routersummary, .logo {
-     background: #fff url(images/noise.png) 0 0 / 50px 50px !important;
-     background: linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0.5)) 0 0 / 100% 100%, #fff url("images/noise.png") 0 0 / 50px 50px !important;
-}
-
 /* top navigation */
 
 h1, .confignav {
@@ -1297,15 +1445,16 @@ h1, .confignav {
 
 .confignav, .main#help div.confignav {
      padding: 8px;
-     margin: -1px -16px 5px -16px;
+     margin: -1px -15px 5px -15px;
      border: 1px solid #7778bf;
+     border-left: none;
+     border-right: none;
      box-shadow: inset 0 0 0 1px #bbf;
      font-size: 9pt;
      text-align: center;
      font-weight: bold;
-     color: #000;
-     background: linear-gradient(to bottom, #fff 50%, rgba(255, 255, 255, 0.6) 52%, rgba(240, 240, 240, 0.4)) #efefff !important;
-     background: linear-gradient(to right, rgba(255,255,255,0.7), rgba(255,255,255,0) 15%, rgba(255,255,255,0) 85%, rgba(255,255,255,0.7)), linear-gradient(to bottom, #fff 50%, rgba(255, 255, 255, 0.6) 52%, rgba(240, 240, 240, 0.4)) #efefff !important;
+     color: #33333f;
+     background: linear-gradient(to bottom, #fbfbff 50%, rgba(248,248,255,0.6) 50%), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px) #fafaff !important;
 }
 
 .tab, .tab2 {
@@ -1360,7 +1509,7 @@ h1, .confignav {
 }
 
 @media screen and (min-width: 1400px) {
-#help .confignav {
+#help .confignav, #debug .confignav {
      position: sticky;
      top: -1px;
      z-index: 999;
@@ -1370,7 +1519,7 @@ h1, .confignav {
 /* end topnav */
 
 .th_title a, .th_title a:hover {
-     color: #31334f !important;
+     color: #41465f !important;
 }
 
 .configure {
@@ -1381,10 +1530,8 @@ h1, .confignav {
 .configure h3, .graphspanel h3 {
      border: 1px solid #7778bf;
      border-left: 5px solid #7778bf;
-     padding: 5px;
      margin: 15px 0 15px 0;
      border-radius: 0 2px 2px 0;
-     background: #ffe;
      text-align: left;
 }
 
@@ -1426,7 +1573,8 @@ h3#iptransport a::after, h3#advancedconfig a::after {
      margin: 0;
      vertical-align: text-top;
      cursor: help;
-     filter: hue-rotate(-20deg) saturate(200%) drop-shadow(0 0 1px #999);
+     filter: hue-rotate(-20deg) saturate(200%) drop-shadow(0 0 1px #999daf);
+     mix-blend-mode: luminosity;
 }
 
 h3#iptransport a:hover, h3#advancedconfig a:hover {
@@ -1434,23 +1582,23 @@ h3#iptransport a:hover, h3#advancedconfig a:hover {
 }
 
 h3#transports, h3#upnp {
-     border: 1px solid #7789bf;
+     border: 1px solid #7778bf;
 }
 
 pre#transports {
      display: inline-block;
-     border: 1px solid #7789bf;
-     background: #fff;
+     border: 1px solid #7778bf;
+     background: #fafaff;
      padding: 10px 0 0 10px;
      width: calc(100% - 12px);
      margin: -16px 0 0;
 }
 
 #upnpscan {
-     border: 1px solid #7789bf;
+     border: 1px solid #7778bf;
      margin: -16px 0 5px;
      padding: 5px 10px;
-     background: #fff;
+     background: #fafaff;
      background: repeating-linear-gradient(135deg, rgba(255, 255, 255, 0.5) 2px, rgba(240, 240, 255, 0.3) 3px, #fff 5px);
 }
 
@@ -1486,18 +1634,22 @@ b.suboption {
 
 /* end confignet tidyup */
 
-.main#tunnels h3 a:not(old), #criticallogs + h3.tabletitle a:not(old) {
+h3#exploratorytunnels {
+     margin-top: 15px;
+}
+
+#tunnels h3 a:not(old), #criticallogs + h3.tabletitle a:not(old) {
      font-size: 0;
 }
 
-.main#tunnels h3 a[href^="/configtunnels#"]::after, #criticallogs + h3.tabletitle a::after {
+#tunnels h3 a[href^="/configtunnels#"]::after, #criticallogs + h3.tabletitle a::after {
      content: url(/themes/console/images/buttons/configure.png);
      float: right;
      padding: 0;
-     filter: drop-shadow(0 0 1px #999);
+     filter: drop-shadow(0 0 1px #999daf);
 }
 
-.main#tunnels h3 a[href^="/configtunnels#"]:hover, #criticallogs + h3.tabletitle a:hover {
+#tunnels h3 a[href^="/configtunnels#"]:hover, #criticallogs + h3.tabletitle a:hover {
      filter: drop-shadow(0 0 1px #f60);
 }
 
@@ -1554,7 +1706,7 @@ p#enablefullstats {
 
 #configstats td:first-child:empty + td > label { /* remove pointer from inert labels */
      cursor: text;
-     color: #333;
+     color: #33333f;
 }
 
 #configstats td:last-child {
@@ -1616,25 +1768,46 @@ p#tunnelconfig {
      margin-bottom: -14px;
 }
 
+/* graphs */
+
 .graphspanel {
      text-align: center !important;
      margin: 15px 0 -15px;
 }
 
+#graph_single h3 {
+     margin: 15px 0 0 !important;
+}
+
+#graph_single .graphspanel {
+     margin: 9px -9px -20px;
+}
+
 .graphspanel img {
-     border: 1px solid #7778bf;
-     padding: 2px;
-     margin: 6px;
+     padding: 1px;
+     margin: 6px 5px;
      text-align: center !important;
      vertical-align: top !important;
-     background: #001;
-     box-shadow: inset 0 0 1px 1px #99f;
+     background: #fff;
+     border: 1px solid #7778bf;
+     box-shadow: 0 0 1px #ccc;
      max-width: 98%;
 }
 
+.graphspanel a img {
+     box-shadow: 0 0 1px #ccf;
+     filter: none !important;
+}
+
 .graphspanel a img:hover {
-     box-shadow: inset 0 0 2px 1px #f60;
+     box-shadow: inset 0 0 1px 1px #f60;
      cursor: url(/themes/console/images/cursor_zoom.png), pointer;
+     mix-blend-mode: multiply;
+}
+
+.graphspanel a img:active {
+     box-shadow: inset 0 0 1px 1px #f90;
+     border: 1px solid #f90;
 }
 
 .graphspanel form {
@@ -1647,10 +1820,26 @@ p#tunnelconfig {
 
 #graphopts {
      text-align: center;
-     margin-top: 20px;
-     margin-bottom: 15px;
      text-transform: capitalize;
-}
+     padding: 10px 0 9px;
+     margin: 30px -14px -9px;
+     border-top: 1px solid #77789f;
+     box-shadow: inset 0 0 0 1px #fff;
+     background: #e8e8ff;
+     background: repeating-linear-gradient(135deg, rgba(248,248,255,0.6) 2px, rgba(220, 220, 255, 0.3) 3px, #f8f8ff 5px), #f8f8ff;
+     filter: drop-shadow(0 0 1px #ccc);
+}
+
+#graphopts a {
+     margin: 3px -2px !important;
+     display: inline-block;
+     padding: 1px 10px !important;
+     line-height: 140%;
+}
+
+#graphopts a:empty {
+     display: none;
+}
 
 #graphopts + p {
      text-align: right;
@@ -1730,6 +1919,7 @@ h3#graphdisplay {
 }
 
 /* end new graphs optionbox */
+/* end graphs */
 
 .messages {
      padding: 15px;
@@ -1737,22 +1927,22 @@ h3#graphdisplay {
      border-radius: 2px;
      border: 1px solid #7778bf;
      background: #eef;
-     background: url(/themes/snark/ubergine/images/hat.png) bottom right no-repeat, linear-gradient(to right, #fff, #eef);
+     background: url(/themes/snark/ubergine/images/hat.png) bottom right no-repeat, linear-gradient(to right, #fafaff, #eef);
      background-size: auto 100%, 100% 100%;
      font-weight: bold;
      box-shadow: inset 0 0 0 1px #fff;
      line-height: 130%;
-     filter: drop-shadow(0 0 1px #ccc);
+     filter: drop-shadow(0 0 1px #ccf);
 }
 
 .main#config_update .messages {
-     background: url(/themes/console/images/info/newspaper.png) 12px center no-repeat, url(/themes/snark/ubergine/images/hat.png) bottom right no-repeat, linear-gradient(to right, #fff, #eef);
+     background: url(/themes/console/images/info/newspaper.png) 12px center no-repeat, url(/themes/snark/ubergine/images/hat.png) bottom right no-repeat, linear-gradient(135deg, #fafaff, #f8f8ff);
      padding: 15px 15px 15px 50px;
      background-size: 28px 28px, auto 100%, 100% 100% !important;
 }
 
-.main#graphs .messages { /* "graphing not supported" error */
-     margin-bottom: 20px;
+.main#graphs .messages {
+     margin-bottom: -5px;
 }
 
 .main#events .messages {
@@ -1800,7 +1990,7 @@ table {
      border: 1px solid #7778bf;
      margin: 1px 0 5px 0;
      font-size: 9pt;
-     background: #fff;
+     background: #fafaff;
 }
 
 #configinfo th {
@@ -1815,17 +2005,17 @@ table {
 td.optionsave {
      text-align: right;
      padding: 5px !important;
-     background: #fff;
+     background: #fafaff;
      border-top: 1px solid #7778bf !important;
 }
 
 td.optionsave, .formaction, form[action="configpeer"] tr:last-child td, table#addkeyring tr:last-child td {
-     background: linear-gradient(to bottom, #fff 50%, rgba(220,220,255,0.3)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px) !important;
+     background: linear-gradient(to bottom, #fafaff 50%, rgba(220,220,255,0.3)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px) !important;
 }
 
 #pluginupdater {
      padding: 15px 5px 15px 50px;
-     background: url(/themes/console/images/info/update.png) 12px center no-repeat, linear-gradient(to bottom, #fff 50%, rgba(220,220,255,0.3)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px) !important;
+     background: url(/themes/console/images/info/update.png) 12px center no-repeat, linear-gradient(to bottom, #fafaff 50%, rgba(220,220,255,0.3)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px) !important;
      background-size: 28px 28px, 100% 100% !important;
 }
 
@@ -1839,6 +2029,7 @@ td.optionsave, .formaction, form[action="configpeer"] tr:last-child td, table#ad
 
 td.infohelp, #help tr:hover td.infohelp, #eventlog tr:hover .infohelp {
      background: #fff url(/themes/console/images/info/infohelp.png) 12px center no-repeat;
+     background: url(/themes/console/images/info/infohelp.png) 12px center no-repeat, linear-gradient(135deg, #fafaff, #f8f8ff);
      padding: 15px 15px 15px 50px;
      border-bottom: 1px solid #7778bf !important;
      border-top: 1px solid #7778bf !important;
@@ -1847,6 +2038,7 @@ td.infohelp, #help tr:hover td.infohelp, #eventlog tr:hover .infohelp {
 
 td.infowarn, #help tr:hover td.infowarn {
      background: #fff url(/themes/console/images/info/infowarn.png) 12px center no-repeat;
+     background: url(/themes/console/images/info/infowarn.png) 12px center no-repeat, linear-gradient(135deg, #fafaff, #f8f8ff);
      padding: 15px 15px 15px 50px !important;
      border-bottom: 1px solid #7778bf !important;
      border-top: 1px solid #7778bf !important;
@@ -1883,7 +2075,7 @@ table#wrapperlogs {
 }
 
 #logs table[id$="logs"] tr:first-child td, .subheading {
-     background: linear-gradient(45deg, #fff, #eef) !important;
+     background: linear-gradient(45deg, #fcfcff, #eef) !important;
      box-shadow: inset 0 0 0 1px #fff;
 }
 
@@ -1902,8 +2094,7 @@ table#wrapperlogs {
 }
 
 #logs ul {
-     margin-left: 0;
-     margin-right: -26px;
+     margin: -3px -26px -3px 0;
      display: inline-block;
      word-break: break-all;
 }
@@ -1915,6 +2106,7 @@ table#wrapperlogs {
      text-align: left;
      display: inline-block;
      width: calc(100% - 48px);
+     padding-top: 1px !important;
 }
 
 #logs li::after {
@@ -1922,7 +2114,7 @@ table#wrapperlogs {
      display: block;
      border-top: 1px dotted #ddf;
      width: 100%;
-     margin: 5px 0 0;
+     margin: 2px 0 -3px;
 }
 
 #logs li:last-child::after {
@@ -1989,6 +2181,7 @@ table#wrapperlogs {
      background: rgba(255,255,239,0.4);
      border-top: 1px inset transparent;
      border-bottom: 1px inset transparent;
+     color: #19191f;
 }
 
 #enviro td:first-child {
@@ -1999,6 +2192,10 @@ table#wrapperlogs {
      padding-left: 10px;
 }
 
+#enviro:hover td:first-child b {
+     color: #26262f !important;
+}
+
 table[id$="logs"] td {
      padding: 5px;
 }
@@ -2033,7 +2230,7 @@ table hr {
 
 th {
      padding: 6px 5px;
-     color: #31334f;
+     color: #41465f;
      background: #eef url(images/header.png) center center repeat-x;
      background: linear-gradient(to bottom, #fff 50%, rgba(238, 238, 255, 0.2) 50%, #eef 100%) !important;
      text-align: left;
@@ -2041,39 +2238,60 @@ th {
      line-height: 110%;
      border-bottom: 1px solid #7778bf !important;
      border-top: 1px solid #7778bf !important;
+     vertical-align: middle;
+}
+
+th img[src="/themes/console/images/outbound.png"] {
+     vertical-align: middle;
+}
+
+th img[src="/themes/console/images/outbound.png"] {
+     vertical-align: text-top;
 }
 
 .main[id^="config_"] th {
      font-size: 10pt;
 }
 
+.main[id^="config_"] th:first-child {
+     padding-left: 10px;
+}
+
 tr {
      vertical-align: middle !important;
 }
 
 tr:nth-child(even), pre#transports {
      background: #efefff;
-     background: repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(240, 240, 255, 0.3) 3px, #fff 5px), #fff;
+     background: repeating-linear-gradient(135deg, rgba(252,252,255,0.5) 2px, rgba(240, 240, 255, 0.3) 3px, #fafaff 5px) #fafaff;
 }
 
 tr:nth-child(odd) {
      background: #f7f8ff;
-     background: repeating-linear-gradient(45deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px), #fff;
+     background: repeating-linear-gradient(45deg, rgba(255,255,255,0.5) 2px, rgba(200, 200, 255, 0.3) 3px, #fafaff 5px), #fafaff;
 }
 
 tr th {
      background: #eef url(images/header.png) center center repeat-x;
-     background: linear-gradient(to bottom, #fff 50%, rgba(238, 238, 255, 0.2) 50%, #eef 100%) #fff !important;
+     background: linear-gradient(to bottom, #fafaff 50%, rgba(252, 252, 255, 0.8) 50%, #e2e2ff 100%) #fafaff !important;
 }
 
 td {
      padding: 3px 5px;
-     color: #333;
+     color: #33333f;
      vertical-align: middle;
      border-top: 1px inset #ddf;
      border-bottom: 1px inset #ddf;
 }
 
+#floodfillconfig tr:nth-child(2) td {
+     padding: 8px 10px 8px 18px;
+}
+
+#floodfillconfig tr:nth-child(2) b {
+     margin-right: 10px;
+}
+
 #tunnelconfig tr:last-child, #webappconfig tr:last-child {
      background: #efefff;
      background: repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(240, 240, 255, 0.3) 3px, #fff 5px);
@@ -2096,7 +2314,7 @@ td {
 }
 
 #netconfig tr {
-     background: #fff;
+     background: #fafaff;
      background: repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(240, 240, 255, 0.3) 3px, #fff 5px);
 }
 
@@ -2134,11 +2352,11 @@ h4.app, h4.app2 {
      display: inline-block;
      width: calc(100% - 44px);
      border-radius: 2px;
-     color: #31334f;
+     color: #41465f;
 }
 
 h4.app {
-     background: url(/themes/console/images/eepsite.png) 10px center no-repeat, linear-gradient(to bottom, #fff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), linear-gradient(to right, #fff 5%, rgba(231, 231, 255, 0.8) 25%) !important;
+     background: url(/themes/console/images/eepsite.png) 10px center no-repeat, linear-gradient(to bottom, #fff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,255,0.4)), linear-gradient(to right, #fcfcff 5%, rgba(231, 231, 255, 0.8) 25%) #f8f8ff !important;
      background-size: 16px 16px, 100% 100%, 100% 100% !important;
      margin-top: 15px;
 }
@@ -2146,7 +2364,7 @@ h4.app {
 h4.app2 {
      clear: left;
      margin-top: 10px !important;
-     background: url(images/globe.png) 10px center no-repeat, linear-gradient(to bottom, #fff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), linear-gradient(to right, #fff 5%, rgba(231, 231, 255, 0.8) 25%) !important;
+     background: url(images/globe.png) 10px center no-repeat, linear-gradient(to bottom, #fff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,255,0.4)), linear-gradient(to right, #fcfcff 5%, rgba(231, 231, 255, 0.8) 25%) #f8f8ff !important;
      background-size: 16px 16px, 100% 100%, 100% 100% !important;
 }
 
@@ -2213,6 +2431,8 @@ div.appgroup {
      width: auto;
 }
 
+/* optional homepage search */ 
+
 div.search {
      margin: 10px 10px 0 0;
      padding: 8px 8px 0 8px;
@@ -2223,15 +2443,16 @@ table.search {
      border-collapse: separate;
      border-spacing: 0;
      border-radius: 0 0 2px 2px;
-     border: 1px solid #7778bf;
-     background: none;
-     background: linear-gradient(to bottom, #fff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px) !important;
-     padding: 8px;
+     border: 1px solid #595a8f;
+     border-top: 1px solid #447;
+     background: #fafaff !important;
+     background: linear-gradient(to bottom, #fafaff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,255,0.4)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px) !important;
+     padding: 4px 6px;
      width: 70%;
-     margin-left:auto;
-     margin-right:auto;
+     margin-left: auto;
+     margin-right: auto;
      margin-top: -19px;
-     box-shadow: 0 1px 1px 1px rgba(200, 200, 200, 0.3);
+     box-shadow: 0 1px 1px 1px rgba(210, 210, 255, 0.3), inset 0 0 1px 1px #bbf;
 }
 
 .search tr {
@@ -2273,6 +2494,8 @@ table.search select {
      text-overflow: ellipsis;
 }
 
+/* end optional homepage search */
+
 .app img {
      width: auto;
      height: 32px;
@@ -2280,7 +2503,7 @@ table.search select {
      max-width: 32px;
      padding: 6px;
      padding: 10px 60px;
-     filter: drop-shadow(0 0 1px #ccc);
+     filter: drop-shadow(0 0 1px #ccf);
      opacity: 0.9;
 }
 
@@ -2329,7 +2552,7 @@ table.search select {
 /* end home page */
 
 tt, code {
-     font: bold 9pt "Droid Sans Mono", "Noto Mono", "Lucida Console", "DejaVu Sans Mono", monospace !important;
+     font: bold 8pt "Droid Sans Mono", "Noto Mono", "Lucida Console", "DejaVu Sans Mono", monospace;
      color: #050;
 }
 
@@ -2347,8 +2570,8 @@ tt::-moz-selection {
      word-wrap: break-word;
 }
 
-.main li b, .statlist b a:hover {
-     color: #335 !important;
+.statlist b a:hover {
+     color: #41465f !important;
 }
 
 .tidylist {
@@ -2403,7 +2626,7 @@ button:hover, button:focus, button:active, select:hover, select:focus, select:ac
      text-shadow: none;
 }
 
-a:link {
+a:link, #graphopts a:visited, .news #newsdisplay a, .news #newsdisplay a:visited {
      color: #3b6bbf;
      text-decoration: none;
      font-weight: bold;
@@ -2411,7 +2634,7 @@ a:link {
      outline: none;
 }
 
-a:visited {
+a:visited, .tab a {
      color: #2c4e8f;
      text-decoration: none;
      font-weight: bold;
@@ -2446,6 +2669,8 @@ a:active {
 
 .links code, #console code {
      color: #910;
+     font-size: 8pt !important;
+     font-weight: bold;
 }
 
 p {
@@ -2457,13 +2682,14 @@ p.infohelp, p#sybilinfo, p#debugmode, p#upnpstatus, p#pluginconfigtext, p#gather
      border: 1px solid #7778bf;
      padding: 15px 15px 15px 50px;
      background: #fff url(/themes/console/images/info/infohelp.png) 12px center no-repeat;
+     background: url(/themes/console/images/info/infohelp.png) 12px center no-repeat, linear-gradient(135deg, #fafaff, #f8f8ff);
      line-height: 130%;
 }
 
 p#upnpstatus, p#keyringhelp, .widescroll + p.infohelp, #profiles ul#banlist, #config_reseed .confignav + p.infohelp 
 p#sybilinfo, p#debugmode, #config_family p.infohelp, p#profiles_overview, p#gatherstats {
      border-radius: 2px;
-     filter: drop-shadow(0 0 1px #ccc);
+     filter: drop-shadow(0 0 1px #ccf);
 }
 
 p#profiles_overview {
@@ -2474,18 +2700,33 @@ p#profiles_overview {
      margin-bottom: -5px;
 }
 
+#profiles .tunnel_peer {
+     margin-left: -6px;
+}
+
+#profiles .tunnel_peer img {
+     margin-left: -6px;
+}
+
 .infohelp + hr {
      display: none;
 }
 
 #bugreports {
+    padding: 10px 0 10px 10px;
     border-collapse: separate;
     border-radius: 2px;
-    filter: drop-shadow(0 0 1px #ccc)
+    filter: drop-shadow(0 0 1px #ccf);
+    background: linear-gradient(135deg, #fafaff, #f8f8ff);
+}
+
+#bugreports tr {
+     background: transparent
 }
 
 #bugreports td.infohelp {
      background: #fff url(/themes/console/images/info/bugreport.png) no-repeat left center !important;
+     background: url(/themes/console/images/info/bugreport.png) no-repeat left center !important;
      padding: 10px 15px 10px 40px;
      background-size: 28px 28px;
      border: none !important;
@@ -2495,59 +2736,66 @@ p#profiles_overview {
 p#debugmode {
      padding: 15px 15px 15px 50px;
      background: #fff url(/themes/console/images/info/debug.png) 12px center no-repeat;
+     background: url(/themes/console/images/info/debug.png) 12px center no-repeat, linear-gradient(135deg, #fafaff, #f8f8ff);
      background-size: 28px 28px;
 }
 
 p#sybilinfo {
      padding: 15px 15px 15px 50px;
      background: #fff url(/themes/console/images/info/experimental.png) 12px center no-repeat;
+     background: url(/themes/console/images/info/experimental.png) 12px center no-repeat, linear-gradient(135deg, #fafaff, #f8f8ff);
      background-size: 28px 28px;
      border-radius: 2px;
-     filter: drop-shadow(0px 0 1px #ccc);
+     filter: drop-shadow(0px 0 1px #ccf);
 }
 
 p.infowarn {
      border: 1px solid #7778bf;
      padding: 15px 15px 15px 50px;
      background: #fff url(/themes/console/images/info/infowarn.png) 10px center no-repeat;
+     background: url(/themes/console/images/info/infowarn.png) 10px center no-repeat, linear-gradient(135deg, #fafaff, #f8f8ff);
      line-height: 130%;
 }
 
 #bandwidthconfig tr:first-child .infohelp {
      background: #fff url(/themes/console/images/info/bandwidth.png) 12px center no-repeat;
+     background: url(/themes/console/images/info/bandwidth.png) 12px center no-repeat, linear-gradient(135deg, #fafaff, #f8f8ff);
      padding: 15px 15px 15px 50px;
      background-size: 28px 28px;
 }
 
 #addkeyring td.infohelp {
      background: #fff url(/themes/console/images/info/keys.png) 12px center no-repeat;
+     background: url(/themes/console/images/info/keys.png) 12px center no-repeat, linear-gradient(135deg, #fafaff, #f8f8ff);
      padding: 15px 15px 15px 50px;
      background-size: 28px 28px;
 }
 
 #joinfamily tr:nth-child(3) td:first-child {
      background: #fff url(/themes/console/images/info/key.png) 12px center no-repeat;
-     background: url(/themes/console/images/info/key.png) 12px center no-repeat, linear-gradient(to bottom, #fff 50%, rgba(220,220,255,0.3)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px), #fff !important;
+     background: url(/themes/console/images/info/key.png) 12px center no-repeat, linear-gradient(to bottom, #fafaff 50%, rgba(220,220,255,0.3)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px), #fff !important;
      padding: 15px 15px 15px 50px;
      background-size: 28px 28px, 100% 100%, 100% 100% !important;
 }
 
 #joinfamily tr:nth-child(2) td {
-     background: #fff;
+     background: #fafaff;
+     background: linear-gradient(135deg, #fafaff, #f8f8ff);
      padding: 10px 15px;
 }
 
 #newfamily tr:last-child td:first-child {
      background: #fff url(/themes/console/images/info/label.png) 12px center no-repeat;
-     background: url(/themes/console/images/info/label.png) 12px center no-repeat, linear-gradient(to bottom, #fff 50%, rgba(220,220,255,0.3)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px), #fff !important;
+     background: url(/themes/console/images/info/label.png) 12px center no-repeat, linear-gradient(to bottom, #fafaff 50%, rgba(220,220,255,0.3)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px), #fff !important;
      padding: 15px 15px 15px 50px;
      background-size: 28px 28px, 100% 100%, 100% 100% !important;
 }
 
 #exportfamily tr:nth-child(2) td:first-child {
      background: url(/themes/console/images/info/export_key.png) 12px center no-repeat, #fff !important;
+     background: url(/themes/console/images/info/export_key.png) 12px center no-repeat, linear-gradient(135deg, #fafaff, #f8f8ff) !important;
      padding: 20px 15px 20px 50px;
-     background-size: 28px 28px;
+     background-size: 28px 28px, 100% 100%;
 }
 
 #leavefamily {
@@ -2556,16 +2804,16 @@ p.infowarn {
 
 #leavefamily tr:last-child td:first-child {
      background: #fff url(/themes/console/images/info/leave_family.png) 12px center no-repeat;
-     background: url(/themes/console/images/info/leave_family.png) 12px center no-repeat, linear-gradient(to bottom, #fff 50%, rgba(220,220,255,0.3)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px), #fff !important;
+     background: url(/themes/console/images/info/leave_family.png) 12px center no-repeat, linear-gradient(to bottom, #fafaff 50%, rgba(220,220,255,0.3)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px), #fff !important;
      padding: 15px 15px 15px 50px;
      background-size: 28px 28px;
 }
 
 #oldhome td:first-child {
      background: #fff url(/themes/console/images/info/home.png) 12px center no-repeat;
-     background: url(/themes/console/images/info/home.png) 12px center no-repeat, linear-gradient(to bottom, #fff 50%, rgba(220,220,255,0.3)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px), #fff !important;
+     background: url(/themes/console/images/info/home.png) 12px center no-repeat, linear-gradient(to bottom, #fafaff 50%, rgba(220,220,255,0.3)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px), #fff !important;
      padding: 15px 15px 15px 50px;
-     background-size: 28px 28px;
+     background-size: 28px 28px, 100% 100%, 100% 100%;
 }
 
 #oldhome input[type="checkbox"], #enablefullstats input[type="checkbox"] {
@@ -2574,8 +2822,9 @@ p.infowarn {
 
 #floodfillconfig tr:first-child .infohelp {
      background: #fff url(/themes/console/images/info/floodfill_32x32.png) 12px center no-repeat;
+     background: url(/themes/console/images/info/floodfill_32x32.png) 12px center no-repeat, linear-gradient(135deg, #fafaff, #f8f8ff);
      padding: 15px 15px 15px 50px;
-     background-size: 28px 28px;
+     background-size: 28px 28px, 100% 100%;
 }
 
 #floodfillconfig label {
@@ -2584,31 +2833,34 @@ p.infowarn {
 
 p#clientconf.infohelp, p#webappconfigtext.infohelp {
      background: #fff url(/themes/console/images/info/java_edit.png) 12px center no-repeat;
+     background: url(/themes/console/images/info/java_edit.png) 12px center no-repeat, linear-gradient(135deg, #fafaff, #f8f8ff);
      padding: 15px 15px 15px 50px;
-     background-size: 28px 28px;
+     background-size: 28px 28px, 100% 100%;
 }
 
 p#pluginconfigtext {
      background: #fff url(/themes/console/images/info/plugin_edit.png) 12px center no-repeat;
+     background: url(/themes/console/images/info/plugin_edit.png) 12px center no-repeat, linear-gradient(135deg, #fafaff, #f8f8ff);
      padding: 15px 15px 15px 50px;
-     background-size: 28px 28px;
+     background-size: 28px 28px, 100% 100%;
 }
 
 #plugininstall .infohelp {
      background: #fff url(/themes/console/images/info/plugin_link.png) 12px center no-repeat;
+     background: url(/themes/console/images/info/plugin_link.png) 12px center no-repeat, linear-gradient(135deg, #fafaff, #f8f8ff);
      padding: 15px 15px 15px 50px;
-     background-size: 28px 28px;
+     background-size: 28px 28px, 100% 100%;
 }
 
 #plugininstall tr:nth-child(3) td:nth-last-child(2), #manualreseed tr:nth-child(3) td:nth-last-child(2) {
-     background: #fff url(/themes/console/images/info/url.png) 12px center no-repeat;
-     background: url(/themes/console/images/info/url.png) 12px center no-repeat, linear-gradient(to bottom, #fff 50%, rgba(220,220,255,0.3)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px), #fff !important;
+     background: #fafaff url(/themes/console/images/info/url.png) 12px center no-repeat;
+     background: url(/themes/console/images/info/url.png) 12px center no-repeat, linear-gradient(to bottom, #fafaff 50%, rgba(220,220,255,0.3)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px), #fff !important;
      padding: 15px 15px 15px 50px;
      background-size: 28px 28px, 100% 100%, 100% 100% !important;
 }
 
 #plugininstall tr:nth-child(3) td:nth-last-child(1), #manualreseed tr:nth-child(3) td:nth-last-child(1), #manualreseed tr:nth-child(5) td:nth-last-child(1) {
-     background: #fff;
+     background: #fafaff;
 }
 
 .optionsave form {
@@ -2617,88 +2869,87 @@ p#pluginconfigtext {
 }
 
 #manualreseed tr:nth-child(5) td:nth-last-child(2), #plugininstall tr:nth-child(5) td:nth-last-child(2) {
-     background: #fff url(/themes/console/images/info/from_file.png) 12px center no-repeat;
-     background: url(/themes/console/images/info/from_file.png) 12px center no-repeat, linear-gradient(to bottom, #fff 50%, rgba(220,220,255,0.3)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px), #fff !important;
+     background: #fafaff url(/themes/console/images/info/from_file.png) 12px center no-repeat;
+     background: url(/themes/console/images/info/from_file.png) 12px center no-repeat, linear-gradient(to bottom, #fafaff 50%, rgba(220,220,255,0.3)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px), #fff !important;
      padding: 15px 15px 15px 50px;
      background-size: 28px 28px, 100% 100%, 100% 100% !important;
 }
 
 #manualreseed tr:nth-last-child(2) td.infohelp {
-     background: #fff url(/themes/console/images/info/box.png) 12px center no-repeat;
+     background: #fafaff url(/themes/console/images/info/box.png) 12px center no-repeat;
+     background: url(/themes/console/images/info/box.png) 12px center no-repeat, linear-gradient(135deg, #fafaff, #f8f8ff);
      padding: 15px 15px 15px 50px;
-     background-size: 28px 28px;
+     background-size: 28px 28px, 100% 100%;
 }
 
 #config_peers tr:nth-child(3) td.infohelp {
-     background: #fff url(/themes/console/images/info/blocked.png) 12px center no-repeat;
+     background: #fafaff url(/themes/console/images/info/blocked.png) 12px center no-repeat;
+     background: url(/themes/console/images/info/blocked.png) 12px center no-repeat, linear-gradient(135deg, #fafaff, #f8f8ff);
      padding: 15px 15px 15px 50px;
-     background-size: 28px 28px;
+     background-size: 28px 28px, 100% 100%;
 }
 
 h3#shutdownrouter + p.infohelp {
-     background: #fff url(/themes/console/images/info/power.png) 12px center no-repeat;
+     background: #fafaff url(/themes/console/images/info/power.png) 12px center no-repeat;
+     background: url(/themes/console/images/info/power.png) 12px center no-repeat, linear-gradient(135deg, #fafaff, #f8f8ff);
      padding: 15px 15px 15px 50px;
-     background-size: 28px 28px;
+     background-size: 28px 28px, 100% 100%;
 }
 
 h3#restartrouter + p.infohelp, #config_family .infohelp.needrestart {
-     background: #fff url(/themes/console/images/info/reboot.png) 12px center no-repeat;
+     background: url(/themes/console/images/info/reboot.png) 12px center no-repeat, linear-gradient(135deg, #fafaff, #f8f8ff);
      padding: 15px 15px 15px 50px;
-     background-size: 28px 28px;
+     background-size: 28px 28px, 100% 100%;
 }
 
-h3#shutdownrouter, h3#systray {
-     margin-bottom: -15px;
+h3#shutdownrouter, h3#systray, h3#servicedebug {
+     margin-bottom: -13px;
 }
 
 h3#systray + p.infohelp {
-     background: #fff url(/themes/console/images/info/systray.png) 12px center no-repeat;
+     background: #fafaff url(/themes/console/images/info/systray.png) 12px center no-repeat;
+     background: url(/themes/console/images/info/systray.png) 12px center no-repeat, linear-gradient(135deg, #fafaff, #f8f8ff);
      padding: 15px 15px 15px 50px;
-     background-size: 28px 28px;
-}
-
-h3#servicedebug {
-     margin-bottom: -15px;
+     background-size: 28px 28px, 100% 100%;
 }
 
 h3#servicedebug + p.infohelp {
-     background: #fff url(/themes/console/images/info/debug.png) 12px center no-repeat;
+     background: #fafaff url(/themes/console/images/info/debug.png) 12px center no-repeat;
+     background: url(/themes/console/images/info/debug.png) 12px center no-repeat, linear-gradient(135deg, #fafaff, #f8f8ff);
      padding: 15px 15px 15px 50px;
-     background-size: 28px 28px;
+     background-size: 28px 28px, 100% 100%;
 }
 
 h3#browseronstart + p.infohelp {
-     background: #fff url(/themes/console/images/info/launch_browser.png) 12px center no-repeat;
+     background: #fafaff url(/themes/console/images/info/launch_browser.png) 12px center no-repeat;
+     background: url(/themes/console/images/info/launch_browser.png) 12px center no-repeat, linear-gradient(135deg, #fafaff, #f8f8ff);
      padding: 15px 15px 15px 50px;
-     background-size: 28px 28px;
+     background-size: 28px 28px, 100% 100%;
 }
 
 .main#config_reseed p.infohelp {
-     background: #fff url(/themes/console/images/info/connect.png) 12px center no-repeat;
+     background: #fafaff url(/themes/console/images/info/connect.png) 12px center no-repeat;
+     background: url(/themes/console/images/info/connect.png) 12px center no-repeat, linear-gradient(135deg, #fafaff, #f8f8ff);
      padding: 15px 15px 15px 50px;
-     background-size: 28px 28px;
+     background-size: 28px 28px, 100% 100%;
 }
 
 p#enablefullstats, p#gatherstats {
-     background: #fff url(/themes/console/images/info/statistics.png) 12px center no-repeat;
+     background: #fafaff url(/themes/console/images/info/statistics.png) 12px center no-repeat;
+     background: url(/themes/console/images/info/statistics.png) 12px center no-repeat, linear-gradient(135deg, #fafaff, #f8f8ff);
      padding: 15px 15px 15px 50px;
-     background-size: 28px 28px;
+     background-size: 28px 28px, 100% 100%;
 }
 
 #config_family .infohelp {
-      background: #fff url(/themes/console/images/info/family.png) 12px center no-repeat !important;
+      background: #fafaff url(/themes/console/images/info/family.png) 12px center no-repeat !important;
+      background: url(/themes/console/images/info/family.png) 12px center no-repeat, linear-gradient(135deg, #fafaff, #f8f8ff) !important;
       padding: 15px 15px 15px 50px !important;
-      background-size: 28px 28px !important;
+      background-size: 28px 28px, 100% 100% !important;
 }
 
 /* stats page */
 
-p#gatherstats + form, ul.statlist {
-     border: 1px solid #7778bf;
-     padding: 10px;
-     background: #fff;
-}
-
 .main#stats {
      padding-bottom: 15px;
 }
@@ -2711,6 +2962,13 @@ p#gatherstats + form, ul.statlist {
      margin-top: -1px;
 }
 
+p#gatherstats + form, ul.statlist {
+     border: 1px solid #7778bf;
+     padding: 10px;
+     background: #fafaff;
+     background: linear-gradient(135deg, #fafaff, #f8f8ff);
+}
+
 ul.statlist {
      border: 1px solid #7778bf;
      padding: 0 10px 10px;
@@ -2832,18 +3090,18 @@ li.noevents {
 
 h1 {
      text-align: left;
-     color: #31334f;
+     color: #41465f;
      padding: 17px 15px 14px;
      margin: 0 0 10px 214px;
      font-size: 18pt;
      line-height: 90%;
      letter-spacing: 0.12em;
      text-transform: uppercase;
+     text-shadow: 0 1px 1px #fff;
      box-shadow: inset 0 0 0 1px #bbf;
      white-space: normal;
-     background: #fff;
-     background: linear-gradient(to bottom, rgba(255,255,255,0.8) 50%, rgba(255,255,255,0.7) 50%),  url(images/noise.png) #fff !important;
-     background-size: 100% 100%, 50px 50px !important;
+     background: #fcfcff;
+     background: linear-gradient(135deg, #fcfcff, rgba(252,252,255,0) 600px), linear-gradient(to bottom, #fcfcff 50%, rgba(248,248,255,0.6) 50%), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px) #fafaff !important;
      border: 1px solid #447;
      border-radius: 2px;
      min-width: 546px;
@@ -2859,6 +3117,7 @@ span.newtab {
 
 .newtab img {
      margin-top: -3px;
+     opacity: 0.8;
 }
 
 .newtab img:hover {
@@ -2867,7 +3126,7 @@ span.newtab {
 
 h2 {
      font-size: 13pt;
-     color: #31334f;
+     color: #41465f;
      letter-spacing: 0.08em;
      word-spacing: 0.1em;
      background: url(images/header.png) center center repeat-x;
@@ -2910,9 +3169,9 @@ h2 img {
 }
 
 h3 {
-     border: 1px solid #7789bf;
-     border-left: 5px solid #7789bf;
-     padding: 6px 5px 5px 7px;
+     border: 1px solid #7778bf;
+     border-left: 5px solid #7778bf;
+     padding: 7px 5px 6px 7px;
      margin: 12px 0 15px 0;
      border-radius: 0 2px 2px 0;
      background: url(images/header.png) center center repeat-x !important;
@@ -2921,7 +3180,7 @@ h3 {
      text-transform: uppercase;
      letter-spacing: 0.08em;
      word-spacing: 0.1em;
-     color: #31334f;
+     color: #41465f;
      box-shadow: inset 0 0 0 1px #fff, 0 0 1px #ccc;
 }
 
@@ -2933,7 +3192,7 @@ h3.tabletitle, h3.ptitle, #config_advanced h3.tabletitle, h3#bannedpeers {
 }
 
 h3.ptitle {
-     margin-bottom: -14px;
+     margin-bottom: -13px;
 }
 
 h3#bannedpeers {
@@ -2941,7 +3200,7 @@ h3#bannedpeers {
 }
 
 h2, h3 {
-     background: linear-gradient(to bottom, #fff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), linear-gradient(to right, #fff 5%, rgba(231, 231, 255, 0.8) 25%) !important;
+     background: linear-gradient(to bottom, #fff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,255,0.4)), linear-gradient(to right, #fafaff 5%, rgba(231, 231, 255, 0.8) 25%) !important;
 }
 
 /* /configpeers */
@@ -3038,7 +3297,7 @@ h4 {
      border-radius: 2px;
      background: #eef;
      background: linear-gradient(to right, #fff, #eef);
-     color: #31334f;
+     color: #41465f;
      box-shadow: inset 0 0 0 1px #fff;
 }
 
@@ -3100,10 +3359,34 @@ h4 {
 
 /* welcome section */
 
+div[lang="es"] li, div[lang="pt"] li, div[lang="sv"] li, div[lang="zh"] li {
+     margin-left: 15px;
+     margin-right: 15px;
+     list-style: none;
+     text-align: justify;
+}
+
+@media screen and (-webkit-min-device-pixel-ratio:0) {
+div[lang="es"] li, div[lang="pt"] li, div[lang="sv"] li, div[lang="zh"] li {
+     margin-left: 25px;
+}
+}
+
+div[lang="es"] .twocol, div[lang="pt"] .twocol, div[lang="sv"] .twocol, div[lang="zh"] .twocol {
+     margin-left: 25px;
+}
+
+div[lang="sv"] li::first-letter {
+     text-transform: uppercase !important;
+}
+
+div[lang="de"] .links li {
+     padding-left: 0;
+}
+
 .langbox {
      margin: 3px 1px 0 5px;
      padding: 2px 3px;
-     color: #001;
      font-size: 7pt;
      width: 360px;
      text-align: right;
@@ -3168,30 +3451,32 @@ input[type="submit"], input[type="reset"], button, .optbox, select {
 
 button.search {
      background: url(/themes/console/images/buttons/search.png) no-repeat 6px center, linear-gradient(to bottom, #fff, #ddd);
-     padding: 5px 7px 5px 22px;
+     padding: 5px 7px 5px 24px;
 }
 
-button.search:hover {
-     background: url(/themes/console/images/buttons/search_hover.png) no-repeat 6px center, linear-gradient(to bottom, #ddd, #fff);
+button.search:hover, button.search:focus, button.search:active {
+     background: url(/themes/console/images/buttons/search_hover.png) no-repeat 6px center, linear-gradient(to bottom, #ddd, #fff) !important;
+     background-size: 14px 14px, 100% 100% !important;
 }
 
 input.search[type="text"] {
-     background: #fff url(/themes/console/images/buttons/search.png) no-repeat 4px center;
+     background: #f8f8ff url(/themes/console/images/buttons/search.png) no-repeat 4px center !important;
      padding: 4px 3px 4px 22px;
      background-size: 16px 16px !important;
      background-blend-mode: luminosity;
 }
 
 input.search[type="text"]:focus {
+     background: #fff url(/themes/console/images/buttons/search.png) no-repeat 4px center !important;
      background-blend-mode: normal;
 }
 
 input, input:visited, button, button:visited {
-     border: 1px solid #999;
+     border: 1px solid #999daf;
      box-shadow: inset 0 0 0 1px #fff;
      background: #eee;
      background: linear-gradient(to bottom, #fff, #ddd);
-     color: #333;
+     color: #41465f;
      margin: 3px;
      font: 9pt "Droid Sans", "Noto Sans", Ubuntu, "Segoe UI", "Lucida Grande", Verdana, Helvetica, sans-serif;
      padding: 4px 5px;
@@ -3199,7 +3484,15 @@ input, input:visited, button, button:visited {
      border-radius: 2px;
      opacity: 1;
      background-size: 14px auto, 100% 100% !important;
-     filter: saturate(70%) drop-shadow(0 0 1px rgba(204, 204, 204, 0.6));
+     filter: drop-shadow(0 0 1px #ccf);
+}
+
+input[type="text"], textarea, input[type="password"] {
+     filter: drop-shadow(0 0 1px #ccf);
+}
+
+input[type="submit"], input[type="reset"], button {
+     filter: saturate(70%) drop-shadow(0 0 1px #ccf);
 }
 
 button::-moz-focus-inner, input[type="submit"]::-moz-focus-inner, input[type="reset"]::-moz-focus-inner {
@@ -3537,6 +3830,8 @@ button.download.control:hover, button.download.control:focus {
 .routersummary .reload, .routersummary .stop {
      text-indent: -99999px;
      background-size: 16px 16px, 100% 100% !important;
+     min-width: 93px;
+     margin: 0 2px -3px;
 }
 
 .routersummary .reload {
@@ -3545,6 +3840,7 @@ button.download.control:hover, button.download.control:focus {
 
 .routersummary .reload:hover, .routersummary .reload:focus {
      background: url(/themes/console/images/buttons/restart_hover.png) center center no-repeat, linear-gradient(to bottom, #ddd, #fff) !important;
+     background: url(/themes/console/images/buttons/shutdown_hover.png) 37% center no-repeat, url(/themes/console/images/buttons/restart_hover.png) 63% center no-repeat,  linear-gradient(to bottom, #ddd, #fff) !important;
      border: 1px solid #f60;
 }
 
@@ -3638,15 +3934,23 @@ button.download.control:hover, button.download.control:focus {
 /* end sidebar buttons */
 
 input[type="text"], input[type="password"] {
-     background: #fff;
-     box-shadow: inset 2px 2px 1px rgba(204, 204, 204, 0.6);
+     background: #f8f8ff;
+     box-shadow: inset 1px 1px 1px rgba(204, 204, 204, 0.6);
      font-family: "Droid Sans", "Noto Sans", Ubuntu, "Segoe UI", "Lucida Grande", Verdana, Helvetica, sans-serif;
 }
 
+input[name="refreshInterval"] {
+     text-align: right;
+     min-width: 80px;
+     width: 80px;
+}
+
 input[type="text"]:focus, input[type="password"]:focus {
+     background: #fff;
      box-shadow: none;
      filter: drop-shadow(0 0 1px #89f);
-     color: #000;
+     color: #19191f;
+     border: 1px solid #676c7f;
 }
 
 .main[id^="config_"] input[name="port"] {
@@ -3659,6 +3963,7 @@ input[type="file"] {
      padding: 0;
      background: none;
      box-shadow: none;
+     cursor: pointer;
 }
 
 .optbox, input[type="checkbox"], input[type="radio"] {
@@ -3674,23 +3979,25 @@ input[type="file"] {
      border: 0;
      box-shadow: none;
      cursor: pointer;
+     filter: sepia(100%) hue-rotate(185deg) drop-shadow(0 0 1px #ccf);
 }
 
 .optbox:hover, input[type="checkbox"]:hover, input[type="radio"]:hover,
 input[type="checkbox"]:focus, input[type="radio"]:focus {
      outline: none;
-     filter: drop-shadow(0 0 3px #89f);
      min-height: 16px;
      height: 16px;
      min-width: 16px !important;
      width: 16px !important;
      opacity: 1.0;
      border: 0;
+     filter: sepia(100%) hue-rotate(185deg) drop-shadow(0 0 3px #89f);
 }
 
+input[type="checkbox"][disabled], input[type="radio"][disabled],
 input[type="checkbox"][disabled]:hover, input[type="radio"][disabled]:hover,
 input[type="checkbox"][disabled]:focus, input[type="radio"][disabled]:focus {
-     filter: none;
+     filter: sepia(100%) hue-rotate(185deg);
      box-shadow: none;
 }
 
@@ -3699,7 +4006,7 @@ label {
 }
 
 label:hover {
-     color: #000;
+     color: #19191f;
 }
 
 .main#config_clients label[for="0"] {
@@ -3712,21 +4019,28 @@ select {
      appearance: none;
      background: url(images/dropdown.png) right center no-repeat #fff;
      background: url(images/dropdown.png) right center no-repeat, linear-gradient(to bottom, #fff, #ddd);
+     background-blend-mode: hard-light, normal;
      padding: 4px 16px 4px 4px !important;
-     color: #333;
+     color: #33333f;
      margin: 5px;
-     border: 1px solid #999;
+     border: 1px solid #999daf;
      min-width: 120px;
      font: 9pt "Droid Sans", "Noto Sans", Ubuntu, "Segoe UI", "Lucida Grande", Verdana, Helvetica, sans-serif;
      border-radius: 2px;
      text-align: left !important;
      box-shadow: inset 0 0 0 1px #fff;
-     filter: drop-shadow(0 0 1px rgba(204, 204, 204, 0.6));
+     filter: drop-shadow(0 0 1px #ccf);
+}
+
+@media screen and (-webkit-min-device-pixel-ratio: 0) {
+select {
+     padding: 5px 16px 5px 6px !important;
+}
 }
 
 select:focus {
      box-shadow: 0 0 0 1px #89f;
-     color: #000;
+     color: #19191f;
 }
 
 select option {
@@ -3752,8 +4066,8 @@ select::-ms-expand {
 
 input[readonly], input[disabled], input[readonly]:focus, input[disabled]:focus {
      background: #e9e9e9;
-     box-shadow: inset 2px 2px 1px rgba(204, 204, 204, 0.6);
-     color: #333;
+     box-shadow: inset 1px 1px 1px rgba(204, 204, 204, 0.6);
+     color: #4d4d5f;
      filter: none;
      cursor: default;
 }
@@ -3761,19 +4075,21 @@ input[readonly], input[disabled], input[readonly]:focus, input[disabled]:focus {
 textarea {
      padding: 5px;
      margin: 5px !important;
-     background: #ffe;
-     color: #333 !important;
+     background: #f8f8ff;
+     color: #33333f !important;
      border-radius: 2px;
      font: 8pt "Droid Sans Mono", "Noto Mono", "Lucida Console", "DejaVu Sans Mono", monospace;
      min-height: 100px;
      min-width: 97%;
-     border: 1px solid #999;
-     box-shadow: inset 2px 2px 1px rgba(204, 204, 204, 0.6);
+     border: 1px solid #999daf;
+     box-shadow: inset 1px 1px 1px rgba(204, 204, 204, 0.6);
 }
 
 textarea:focus {
-     color: #001 !important;
+     background: #fff;
+     color: #19191f !important;
      box-shadow: none;
+     border: 1px solid #676c7f;
      filter: drop-shadow(0 0 1px #89f);
 }
 
@@ -3786,7 +4102,7 @@ textarea:focus {
      margin: -5px 0 5px 0;
      padding: 7px;
      background: #eef;
-     background: linear-gradient(to right, #efefff, #fff, #efefff) #fff;
+     background: linear-gradient(to right, #efefff, #fafaff, #efefff) #fff;
      letter-spacing: 0em !important;
      box-shadow: inset 0 0 0 1px #fff;
 }
@@ -3894,7 +4210,7 @@ h3#activejobs + ol li:before, h3#scheduledjobs + ol li:before, h3#readyjobs + ol
      font-weight: bold;
      line-height: 50%;
      vertical-align: sub;
-     color: #393;
+     color: #41465f;
 }
 
 h3#finishedjobs + ol li:before {
@@ -3922,7 +4238,7 @@ h3#scheduledjobs + ol li:before {
      margin-bottom: -2px;
 }
 
-.smallhead {
+.smallhead th {
      font-size: 8pt
 }
 
@@ -3934,14 +4250,16 @@ h3#scheduledjobs + ol li:before {
      border-left: 1px inset #ddf;
      border-top: 1px inset #ddf !important;
      border-bottom: 1px inset #ddf !important;
+     padding-top: 4px;
+     padding-bottom: 4px;
 }
 
 .tablefooter {
-     background: #fff;
+     background: #f8f8ff;
 }
 
 .tablefooter tr, .tablefooter td {
-     background: #fff;
+     background: #f8f8ff;
      border-top: 1px solid #7778bf;
      border-bottom: 1px solid #7778bf !important;
      padding: 8px 2px;
@@ -3954,7 +4272,7 @@ h3#scheduledjobs + ol li:before {
      border: 1px solid #7778bf;
      margin-top: -15px;
      padding: 5px;
-     background: #fff;
+     background: #fafaff;
 }
 
 #config_homepage .formaction, #config_clients .formaction, #webappconfigactions {
@@ -3998,40 +4316,6 @@ iframe.iframed {
      margin: 10px 0 0;
 }
 
-.main#webmail {
-     padding: 0 8px;
-}
-
-#susimailframe {
-     margin-top: 3px;
-}
-
-.main#dns {
-     padding: 0;
-     min-width: 576px;
-}
-
-#susidnsframe {
-     margin: 0 0 -2px;
-     height: 100%;
-     width: 100%;
-     overflow: hidden;
-}
-
-.main#tunnelmgr {
-     padding: 0 10px;
-     min-width: 556px;
-}
-
-#i2ptunnelframe {
-     margin: -4px 0 -1px;
-     overflow: hidden;
-}
-
-.main#embedded {
-     padding: 1px 11px 4px;
-}
-
 /* Fixes for when app is not started and console error loads inside iframe */
 
 body.iframed {
@@ -4068,11 +4352,12 @@ body.iframed {
 
 #consolepass tr:first-child td {
      background: #fff url(/themes/console/images/info/user_add.png) 12px center no-repeat;
+     background: url(/themes/console/images/info/user_add.png) 12px center no-repeat, linear-gradient(135deg, #fafaff, #f8f8ff);
      background-size: 28px 28px;
      padding: 15px 15px 15px 50px;
 }
 
-.main#config_ui .themechoice .optbox, .main#config_ui .langselect .optbox {
+#config_ui .themechoice .optbox, #config_ui .langselect .optbox {
      vertical-align: text-bottom;
 }
 
@@ -4091,7 +4376,7 @@ body.iframed {
      background: linear-gradient(to bottom, #fff, #ddf);
      transition: filter ease 0.3s 0s;
      box-shadow: inset 0 0 0 1px #fff;
-     filter: drop-shadow(0 0 1px #ccc);
+     filter: drop-shadow(0 0 1px #ccf);
 }
 
 .themechoice:hover {
@@ -4116,7 +4401,7 @@ body.iframed {
      filter: drop-shadow(0 0 1px #f60);
 }
 
-.main#config_ui .themechoice .optbox {
+#config_ui .themechoice .optbox {
      min-height: 88px !important;
      min-width: 123px !important;
      opacity: 0; /* hide the radio icon so we can use thumbnail img instead */
@@ -4141,7 +4426,7 @@ body.iframed {
 #themeoptions {
      clear: both;
      border-top: 1px solid #ddf;
-     background: repeating-linear-gradient(45deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px), #fff;
+     background: repeating-linear-gradient(45deg, rgba(252,252,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fafaff 5px), #fafaff;
      margin: 0 -5px 5px;
      position: relative;
      top: 4px;
@@ -4165,6 +4450,7 @@ p#helptranslate {
      text-align: left !important;
      border-top: 1px solid #7778bf;
      background: url(/themes/console/images/info/notice.png) left 14px center no-repeat, #fff;
+     background: url(/themes/console/images/info/notice.png) left 14px center no-repeat, linear-gradient(135deg, #fafaff, #f8f8ff);
      background-size: 28px 28px;
 }
 
@@ -4221,16 +4507,16 @@ div#themesettings {
      padding: 4px 5px 0;
      margin: -16px 0 0;
      border: 1px solid #7778bf;
-     background: #fff;
-     background: repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(248, 248, 255, 0.3) 3px, #fff 5px);
+     background: #fafaff;
+     background: repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(248, 248, 255, 0.3) 3px, #fafaff 5px);
 }
 
 div#langsettings {
      padding: 4px 5px 0;
      border: 1px solid #7778bf;
      margin: -16px 0 0;
-     background: #fff;
-     background: repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(248, 248, 255, 0.3) 3px, #fff 5px);
+     background: #fafaff;
+     background: repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(248, 248, 255, 0.3) 3px, #fafaff 5px);
 }
 
 #themesettings hr, #langsettings hr {
@@ -4249,7 +4535,7 @@ div#langsettings {
      background: linear-gradient(to bottom, #fff, #ddf);
      transition: transform 0.3s ease 0s;
      box-shadow: inset 0 0 0 1px #fff;
-     filter: drop-shadow(0 0 1px #ccc);
+     filter: drop-shadow(0 0 1px #ccf);
 }
 
 .langselect:hover {
@@ -4257,7 +4543,7 @@ div#langsettings {
      background: #fff;
 }
 
-.main#config_ui .langselect .optbox, .main#config_ui .langselect .optbox:hover, .main#config_ui .langselect .optbox:focus {
+#config_ui .langselect .optbox, #config_ui .langselect .optbox:hover, #config_ui .langselect .optbox:focus {
      width: 118px !important;
      min-height: 56px !important;
      height: 56px !important;
@@ -4301,7 +4587,7 @@ div#langsettings {
      color: #f60;
      border-top: 1px solid #f60;
      background: #fff !important;
-     background: linear-gradient(to bottom, #fff 0%, #fff 50%, #ffe8bf 50%, #efd9b3 100%) !important;
+     background: linear-gradient(to bottom, #fff 50%, #ffe8bf 50%, #efd9b3 100%) !important;
 }
 
 .langselect:active > input[name="lang"] + img + .ui_lang {
@@ -4399,16 +4685,25 @@ table#consolepass input[name="name"] {
      margin-right: 20px;
 }
 
-#consolepass input[name="name"], #externali2cp input[name="user"], #reseedconfig input[name="username"] {
-     background: #fff url(/themes/console/images/buttons/user.png) 5px center no-repeat;
+#consolepass input[name="name"], #externali2cp input[name="user"], #reseedconfig input[name="username"],
+#consolepass input[name="nofilter_pw"], #externali2cp input[name="nofilter_pw"], #reseedconfig input[type="password"] {
      padding: 4px 5px 4px 26px !important;
      background-size: 16px 16px !important;
+     background-blend-mode: luminosity;
+}
+
+#consolepass input[name="name"], #externali2cp input[name="user"], #reseedconfig input[name="username"] {
+     background: #f8f8ff url(/themes/console/images/buttons/user.png) 5px center no-repeat;
 }
 
 #consolepass input[name="nofilter_pw"], #externali2cp input[name="nofilter_pw"], #reseedconfig input[type="password"] {
-     background: #fff url(/themes/console/images/buttons/password.png) 5px center no-repeat !important;
-     padding: 4px 5px 4px 26px !important;
-     background-size: 16px 16px !important;
+     background: #f8f8ff url(/themes/console/images/buttons/password.png) 5px center no-repeat !important;
+}
+
+#consolepass input[name="name"]:focus, #externali2cp input[name="user"]:focus, #reseedconfig input[name="username"]:focus,
+#consolepass input[name="nofilter_pw"]:focus, #externali2cp input[name="nofilter_pw"]:focus, #reseedconfig input[type="password"]:focus {
+     background-color: #fff !important;
+     background-blend-mode: normal;
 }
 
 /* end configui */
@@ -4425,16 +4720,12 @@ table#addkeyring tr:last-child td {
 #config_summarybar .configtable td:not(.optionsave) {
      padding-left: 50px;
      background: url(/themes/console/images/info/interval.png) 12px center no-repeat;
-     background: url(/themes/console/images/info/interval.png) 12px center no-repeat, linear-gradient(to bottom, #fff 50%, rgba(220,220,255,0.3)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px), #fff !important;
+     background: url(/themes/console/images/info/interval.png) 12px center no-repeat, linear-gradient(to bottom, #fafaff 50%, rgba(220,220,255,0.3)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px), #fff !important;
      background-size: 28px 28px, 100% 100%, 100% 100% !important;
 }
 
 /* peers, profiles, tunnels */
 
-#ntcpconnections tr:nth-child(odd), #udpconnections tr:nth-child(odd), #profilelist tr:nth-child(odd), .tunneldisplay  tr:nth-child(odd) {
-     background: repeating-linear-gradient(45deg, rgba(255,255,255,0.5) 2px, rgba(201, 201, 255, 0.3) 3px, #fff 5px), #fff;
-}
-
 .cells tt, #profilelist tt, tt a {
      font-size: 8pt !important;
      margin-left: 2px !important;
@@ -4517,7 +4808,8 @@ table#addkeyring tr:last-child td {
 }
 
 #peerdefs td {
-     line-height: 130%;
+     line-height: 150%;
+     padding: 5px;
 }
 
 .peer_arrow {
@@ -4548,6 +4840,10 @@ tt a {
      text-shadow: 0 1px 1px #555;
 }
 
+#tunnel_defs b {
+     color: #fff !important;
+}
+
 .tunnel_cap:empty {
      border: none;
 }
@@ -4567,10 +4863,10 @@ tt a {
      display: inline-block;
 }
 
-.tunnel_peer {
+#tunnels .tunnel_peer {
      display: inline-block;
      min-width: 64px;
-     text-align: right;
+     text-align: center;
 }
 
 .tunnel_local {
@@ -4613,10 +4909,6 @@ tt a {
 
 /* netdb */
 
-.main#netdb, .main#events {
-     background: #fff;
-}
-
 .confignav + .netdbentry {
      margin-top: 10px;
 }
@@ -4666,7 +4958,7 @@ a.viewfullentry:not(old), #profilelist a[href^="viewprofile"]:not(old) {
 a.viewfullentry::after, #profilelist a[href^="viewprofile"]::after {
      content: url(/themes/console/images/buttons/fullview.png);
      vertical-align: text-top;
-     filter: drop-shadow(0 0 1px #999);
+     filter: drop-shadow(0 0 1px #999daf);
 }
 
  #profilelist a[href^="viewprofile"]::after {
@@ -4685,7 +4977,7 @@ a.viewfullentry:hover {
      content: url(/themes/console/images/buttons/floodfill.png);
      vertical-align: text-top;
      padding-right: 0;
-     filter: drop-shadow(0 0 1px #999);
+     filter: drop-shadow(0 0 1px #999daf);
 }
 
 #leasesetdebug th a:hover, table#leasesetsummary th a:hover {
@@ -4701,7 +4993,7 @@ a.viewfullentry:hover {
      font-size: 11pt !important;
      letter-spacing: 0.08em;
      word-spacing: 0.1em;
-     background:  url(/themes/console/images/info/globe.png) 8px center no-repeat, linear-gradient(to bottom, #fff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), linear-gradient(to right, #fff 5%, rgba(231, 231, 255, 0.8) 25%) !important;
+     background:  url(/themes/console/images/info/globe.png) 8px center no-repeat, linear-gradient(to bottom, #fcfcff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,255,0.4)), linear-gradient(to right, #fcfcff 5%, rgba(231, 231, 255, 0.8) 25%) !important;
      background-size: 18px 18px, 100% 100%, 100% 100% !important;
      padding: 8px 5px 8px 32px;
 }
@@ -4732,7 +5024,7 @@ a.viewfullentry:hover {
      text-transform: none;
      letter-spacing: normal;
      word-spacing: normal;
-     background: linear-gradient(to bottom, #fff 50%, rgba(255, 255, 255, 0.6) 50%, rgba(240, 240, 240, 0.4)) #eef !important;
+     background: linear-gradient(to bottom, #fcfcff 50%, rgba(255, 255, 255, 0.6) 50%, rgba(240, 240, 255, 0.4)) !important;
      background-size: 100% 100%;
      padding: 8px 5px;
      font-size: 9pt;
@@ -4869,10 +5161,11 @@ a.viewfullentry:hover {
      border: 1px solid #7778bf;
      padding: 20px;
      font-weight: bold;
-     background: #fff;
+     background: #fafaff;
      margin-top: -6px;
      margin-bottom: 5px;
      text-align: center;
+     color: #41465f;
 }
 
 #notinitialized, .netdbnotfound {
@@ -4880,20 +5173,29 @@ a.viewfullentry:hover {
 }
 
 #sybilnav {
+     padding: 10px;
+     border-radius: 2px;
      -moz-columns: 4;
      -webkit-columns: 4;
      columns: 4;
      -moz-column-gap: 10px;
      -webkit-column-gap: 10px;
      column-gap: 10px;
-     border-radius: 2px;
 }
 
 #sybilnav, #sybils_summary {
      border: 1px solid #7778bf;
-     padding: 10px;
      margin-bottom: 10px;
-     background: repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(240, 240, 255, 0.3) 3px, #fff 5px), #fff;
+     background: repeating-linear-gradient(135deg, rgba(248,238,255,0.5) 2px, rgba(240, 240, 255, 0.3) 3px, #fafaff 5px), #fafaff;
+     box-shadow: inset 0 0 0 1px #fff;
+}
+
+#sybils_summary {
+     padding: 5px 10px;
+     line-height: 160%;
+     -moz-columns: 400px auto;
+     -webkit-columns: 400px auto;
+     columns: 400px auto;
 }
 
 h3.sybils {
@@ -4916,9 +5218,9 @@ h3.sybils {
      box-shadow: inset 0 0 0 1px #fff;
      margin: 2px 0;
      background: #eef url(images/eye.png) 5px center no-repeat;
-     background: url(images/eye.png) 5px center no-repeat, linear-gradient(to right, #fff 70%, #eef);
+     background: url(images/eye.png) 5px center no-repeat, linear-gradient(45deg, #fafaff 60%, #eef);
      line-height: 88%;
-     filter: drop-shadow(0 0 1px #ccc);
+     filter: drop-shadow(0 0 1px #ccf);
 }
 
 #sybilnav li a {
@@ -4930,6 +5232,10 @@ h3.sybils {
      margin-bottom: 10px;
 }
 
+.sybil_routerinfo:last-of-type {
+     margin-bottom: 5px;
+}
+
 .sybil_routerinfo th {
      padding: 1px 1px 1px 6px !important;
 }
@@ -4958,12 +5264,14 @@ h3.sybils {
 }
 
 p.sybil_info, p.family, p.threatpoints, p.hashdist, p#sybil_totals, p.notfound {
-     border: 1px solid #7778bf;
-     padding: 5px 5px 5px 30px;
      margin: 3px 0;
+     padding: 7px 5px 7px 30px;
+     border: 1px solid #7778bf;
+     box-shadow: inset 0 0 0 1px #fff;
      font-weight: bold;
+     color: #41465f;
      text-align: left;
-     background: url(images/eye.png) 8px center no-repeat, repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(240, 240, 255, 0.3) 3px, #fff 5px), #fff;
+     background: url(images/eye.png) 8px center no-repeat, repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(240, 240, 255, 0.3) 3px, #fafaff 5px), #fafaff;
 }
 
 p#sybil_totals {
@@ -4974,14 +5282,14 @@ p.family + p.family, p.sybil_info + p.sybil_info {
      margin-top: -4px;
 }
 
-p.family:nth-child(even), p.sybil_info:nth-child(even) {
+p.family:nth-child(even) {
      background: #efefff;
-     background: url(images/eye.png) 8px center no-repeat, repeating-linear-gradient(45deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px), #fff;
+     background: url(images/eye.png) 8px center no-repeat, repeating-linear-gradient(45deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fafaff 5px), #fafaff;
 }
 
-p.family:nth-child(odd), p.sybil_info:nth-child(odd) {
+p.family:nth-child(odd) {
      background: #f7f8ff;
-     background: url(images/eye.png) 8px center no-repeat, repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(240, 240, 255, 0.3) 3px, #fff 5px), #fff;
+     background: url(images/eye.png) 8px center no-repeat, repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(240, 240, 255, 0.3) 3px, #fafaff 5px), #fff;
 }
 
 p.sybil_info + a[name] + table.sybil_routerinfo, p.hashdist + a[name] + table.sybil_routerinfo, table.sybil_routerinfo + p {
@@ -4995,7 +5303,7 @@ p.sybil_info + a[name] + table.sybil_routerinfo, p.hashdist + a[name] + table.sy
      width: calc(100% - 22px);
      margin: -4px 0 8px;
      background: #eef;
-     background: repeating-linear-gradient(45deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px), #fff;
+     background: repeating-linear-gradient(45deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fafaff 5px), #fafaff;
      box-shadow: inset 0 0 0 1px #fff;
 }
 
@@ -5024,6 +5332,7 @@ p:empty { /* empty paragraph nuke */
      width: 100px;
      white-space: nowrap;
      font-weight: bold;
+     color: #41465f;
 }
 
 #netdblookup td:nth-child(2) {
@@ -5032,7 +5341,7 @@ p:empty { /* empty paragraph nuke */
 
 .subheading {
      text-align: left !important;
-     background: #fff;
+     background: #fafaff;
      padding: 10px;
      border: 1px solid #7778bf;
 }
@@ -5055,53 +5364,138 @@ p:empty { /* empty paragraph nuke */
      font-weight: bold;
 }
 
-/* end netdb */
+/* leasesets */
 
-ul#banlist {
-     background: #fff;
-     border: 1px solid #7778bf;
-     border-radius: 2px;
+.netdb_leases, .netdb_leases li, .netdb_leases li:first-child {
+     margin: 0;
+}
+
+.netdb_leases {
+     columns: auto 420px !important;
+     column-rule: 1px solid #ccf;
+     column-gap: 1em;
      display: block;
-     padding: 5px 1px;
-     -moz-columns: 2;
-     -moz-column-gap: 0;
-     -webkit-columns: 2;
-     -webkit-column-gap: 0;
-     columns: 2;
-     column-gap: 0;
 }
 
-#banlist li {
+.netdb_leases li {
      list-style: none;
-     margin: 5px;
-     border: 1px solid #7778bf;
-     border-radius: 2px;
-     padding: 5px 5px 5px 35px;
-     line-height: 120%;
-     background: #eef url(/themes/console/images/buttons/ban.png) 10px center no-repeat;
-     background: url(/themes/console/images/buttons/ban.png) 10px center no-repeat, repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(240, 240, 255, 0.3) 3px, #fff 5px) #fff;
-     break-inside: avoid;
-     page-break-inside: avoid;
-     -webkit-break-inside: avoid;
-     min-height: 33px;
-     font-size: 9pt;
-     box-shadow: inset 0 0 0 1px #fff;
-     filter: drop-shadow(0 0 1px #ccc);
+     display: inline-block;
+     padding: 1px 0;
+     margin: 1px 0;
+     min-width: 400px;
 }
 
-#banlist li:first-child {
-     margin-top: 0;
+.netdb_leases li b:first-child {
+     display: inline-block;
+     min-width: 80px !important;
+     text-align: right;
+     margin: 0 !important;
+     padding: 0 !important;
 }
 
-#banlist a[href^="configpeer?peer"]::after {
-     vertical-align: top;
+.netdb_gateway {
+     margin-left: -3px !important;
+     margin-right: -3px !important;
 }
 
-.main#profiles #banlist li {
-     margin-bottom: 0;
+.netdb_tunnel {
+     display: inline-block;
+     background: #e2e2ff;
+     background: rgba(204, 204, 255, 0.4);
+     padding: 0 4px;
+     margin-left: 4px;
+     margin-right: -4px;
+     border-radius: 2px;
 }
 
-#tunnelconfig th[colspan="3"] {
+.netdb_leases .tunnel_id {
+     min-width: 74px;
+}
+
+.netdb_leases .tunnel_peer {
+     min-width: 64px;
+}
+
+.netdb_leases .tunnel_peer tt, .netdb_leases .tunnel_peer tt a {
+     font-size: 8pt !important;
+     font-weight: bold !important;
+}
+
+.netdb_leases .tunnel_peer tt, .netdb_leases .tunnel_peer a {
+     letter-spacing: 0.1em !important;
+     margin: 0 !important;
+     padding: 0 !important;
+}
+
+.main li .netdb_expiry {
+     font-weight: normal;
+     text-transform: lowercase;
+     font-style: italic;
+}
+
+img.unknownflag {
+     opacity: 0.8;
+}
+
+/* end leasesets */
+
+/* end netdb */
+
+ul#banlist {
+     background: #fafaff;
+     border: 1px solid #7778bf;
+     border-radius: 2px;
+     display: block;
+     padding: 2px 0;
+     -moz-columns: auto;
+     -webkit-columns: auto;
+     columns: auto;
+     -moz-column-gap: 0;
+     -webkit-column-gap: 0;
+     column-gap: 0;
+}
+
+#profiles #banlist {
+    border: none;
+    background: none;
+}
+
+#banlist li {
+     display: inline-block;
+     min-width: 300px;
+     line-height: 120%;
+     margin: 3px 0 3px 5px !important;
+     padding: 8px 10px 0 35px;
+     list-style: none;
+     border: 1px solid #7778bf;
+     border-radius: 2px;
+     box-shadow: inset 0 0 0 1px #fff;
+     background: #eef url(/themes/console/images/buttons/ban.png) 10px center no-repeat;
+     background: url(/themes/console/images/buttons/ban.png) 10px center no-repeat, repeating-linear-gradient(135deg, rgba(252,252,255,0.5) 2px, rgba(240, 240, 255, 0.3) 3px, #fff 5px) #fafaff;
+     font-size: 9pt;
+     filter: drop-shadow(0 0 1px #f8f8ff);
+     -webkit-break-inside: avoid;
+     break-inside: avoid;
+     page-break-inside: avoid;
+}
+
+#config_peers #banlist li {
+     margin: 0 -2px 5px 5px;
+}
+
+#banlist li:first-child {
+     margin-top: 0;
+}
+
+#banlist a[href^="configpeer?peer"]::after {
+     vertical-align: top;
+}
+
+#banlist tt {
+     margin-left: 2px;
+}
+
+#tunnelconfig th[colspan="3"] {
      text-transform: uppercase;
      letter-spacing: 0.08em;
      word-spacing: 0.1em;
@@ -5206,13 +5600,19 @@ ul#banlist {
 
 #capabilities_key b {
      text-transform: none !important;
+     display: inline-block;
+     min-width: 16px;
+     background: #e2e2ff;
+     text-align: center;
+     border-radius: 2px;
+     padding: 1px 2px;
 }
 
 #profilelist tr:hover td, #floodfills tr:hover td, #ntcpconnections tr:nth-last-child(n+2):hover td, #udpconnections tr:nth-last-child(n+2):hover td,
 #schedjobs tr:hover td, #jobstats tr:nth-last-child(n+2):hover td, #jardump tr:hover td, #sidebarconf tr:nth-last-child(n+2):hover td, #eventlog tr:hover td,
 #netdboverview table tr:hover td, #debug tr:hover td, #clientconfig tr:hover td, #webappconfig tr:hover td, #portfaq tr:hover td, .tunneldisplay tr:hover td {
      background: #ffd;
-     color: #111;
+     color: #19191f;
 }
 
 /* peers - sort icons */
@@ -5224,7 +5624,7 @@ ul#banlist {
 
 .sortup, .sortdown, .sortupactive, .sortdownactive {
      padding: 1px 0;
-     border: 1px solid #999;
+     border: 1px solid #999daf;
      border-radius: 2px;
      margin: 3px 1px 0 !important;
      vertical-align: middle;
@@ -5317,16 +5717,6 @@ table#schedjobs {
      padding: 5px;
 }
 
-.main#jardump {
-     overflow-x: auto;
-     min-width: 576px;
-}
-
-table#jardump {
-     margin: 15px 0 0;
-     font-size: 8pt;
-}
-
 #advconf {
      margin-bottom: 12px;
 }
@@ -5337,7 +5727,6 @@ table#jardump {
 
 #peerdefs td:first-child {
      text-align: right;
-     width: 50px;
      white-space: nowrap;
 }
 
@@ -5440,45 +5829,7 @@ h3#ntcpcon, h3#udpcon {
 #loggingoptions p {
      text-align: left;
      margin: 0 5px 2px 5px;
-}
-
-.main#proof textarea, .main#proof textarea:focus {
-     background: none;
-     border: none;
-     box-shadow: none;
-     color: #001 !important;
-     filter: none;
-     outline: none;
-     line-height: 140%;
-}
-
-.main#jardump {
-     padding: 0;
-}
-
-.main#jardump table {
-     margin: -1px 0 0;
-     border: none;
-}
-
-#jardump tt {
-     letter-spacing: -0.03em;
-}
-
-#jardump a tt {
-     color: #359;
-}
-
-#jardump a:visited tt {
-    color: #218;
-}
-
-#jardump a:hover tt {
-     color: #f60;
-}
-
-#jardump a:active tt {
-     color: #f90;
+     line-height: 150%;
 }
 
 #volunteer, #sidebarhelp, #configurationhelp, #reachabilityhelp, #advancedsettings, #legal, #changelog, #faq {
@@ -5486,7 +5837,7 @@ h3#ntcpcon, h3#udpcon {
      border-radius: 2px;
      margin-bottom: 10px;
      padding: 0 10px 5px;
-     background: #fff;
+     background: #fafaff;
 }
 
 #volunteer {
@@ -5521,18 +5872,14 @@ h3#ntcpcon, h3#udpcon {
     margin-right: -1px !important;
 }
 
-.main#help div, .logtable tr:nth-child(n+2) td, .main#console {
-     background: linear-gradient(to bottom, #fff, rgba(250,250,255,0.3)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px) #fff !important;
+.main#help div, .logtable tr:nth-child(n+2) td, .main#console, .debug_container {
+     background: linear-gradient(to bottom, rgba(248,248,255,0.5), rgba(250,250,255,0.3)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px) #fafaff !important;
      margin-bottom: 13px;
      box-shadow: inset 0 0 0 1px #fff;
 }
 
-.main#console {
-     box-shadow: inset 0 0 0 1px #bbf;
-}
-
 .main#help #volunteer, #wrapperlogs pre {
-     background: linear-gradient(to bottom, #fff, rgba(250,250,255,0.3)), url(/themes/snark/ubergine/images/hat.png) no-repeat right -3px bottom -3px / auto 80%, repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px) !important;
+     background: linear-gradient(to bottom, #fafaff, rgba(248,248,255,0.3)), url(/themes/snark/ubergine/images/hat.png) no-repeat right -3px bottom -3px / auto 80%, repeating-linear-gradient(135deg, rgba(252,252,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fafaff 5px) #fafaff !important;
      box-shadow: inset 0 0 0 1px #fff;
 }
 
@@ -5548,7 +5895,7 @@ h3#ntcpcon, h3#udpcon {
 .main#help td.infohelp, .main#help td.infowarn, .main#help td.infohelp:hover, .main#help td.infowarn:hover {
      background-size: 24px 24px !important;
      padding-left: 46px !important;
-     color: #333 !important;
+     color: #33333f !important;
      padding-right: 15px !important;
 }
 
@@ -5565,7 +5912,7 @@ h3#ntcpcon, h3#udpcon {
 
 #faq h3 {
      padding: 5px 10px 6px 35px;
-     background: url(/themes/console/images/info/question.png) 10px center no-repeat, linear-gradient(to bottom, #fff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), linear-gradient(to right, #fff 5%, rgba(231, 231, 255, 0.8) 25%) !important;
+     background: url(/themes/console/images/info/question.png) 10px center no-repeat, linear-gradient(to bottom, #fcfcff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,255,0.4)), linear-gradient(to right, #fcfcff 5%, rgba(231, 231, 255, 0.8) 25%) !important;
      background-size: 18px 18px, 100% 100%, 100% 100% !important;
      background-blend-mode: luminosity, normal, normal;
      text-transform: none;
@@ -5630,28 +5977,81 @@ h3#ntcpcon, h3#udpcon {
 #fullhistory {
      text-align: right;
      margin: 0 0 0 -10px;
-     padding: 5px 8px;
+     padding: 6px 5px 5px;
      border-top: 1px solid #7778bf;
-     background: linear-gradient(to right, #efefff 65%, #fff)
+     background: linear-gradient(to right, #efefff 65%, #fafaff);
 }
 
-.main#torrents {
-     padding: 0;
+#fullhistory a {
+     margin-right: -4px;
 }
 
-#i2psnarkframe {
-     margin: 0;
+#fullhistory::before {
+     content: "";
+     display: inline-block;
+     background: url(/themes/console/images/buttons/fullview.png) left center no-repeat !important;
+     background-size: 14px 14px !important;
+     height: 20px;
+     width: 18px;
+     vertical-align: middle;
+     margin-bottom: 1px;
 }
 
-.main#proof {
-     background: linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0.5)), url(/themes/snark/ubergine/images/hat.png) no-repeat right -3px bottom -3px, url(images/noise.png), #fff !important;
-     background-size: 100% 100%, auto 80%, 50px 50px !important;
+#oldconsole p, #proof p {
+     margin: 20px 5px 10px;
+     padding: 10px 0;
+     line-height: 180%;
+     background: #f2f2ff;
+     background: linear-gradient(135deg, #fafaff, rgba(240,240,255,0.5));
+     border: 1px solid #99b;
+     border-radius: 2px;
+     box-shadow: inset 0 0 0 1px #fff, 0 0 1px #ccf;
+}
+
+#oldconsole b {
+     margin-right: 5px;
+     display: inline-block;
+     min-width: 160px;
+     text-align: right;
+}
+
+#proof textarea, #proof textarea:focus, #proof p {
+     margin: 0 !important;
+     padding: 0 !important;
+}
+
+#proof p {
+     margin: 15px 0 5px !important;
+     padding: 15px 0 0 20px !important;
+     width: calc(100% - 22px);
+}
+
+#proof p::before {
+     content: "";
+     display: inline-block;
+     background: url(/themes/console/images/info/rosette.png) right 5px top no-repeat !important;
+     background-size: 24px 24px;
+     height: 32px;
+     width: 100%;
+     margin: -8px 0 -10px;
+     opacity: 0.7;
+}
+
+#proof textarea, #proof textarea:focus {
+     background: none;
+     border: none;
+     box-shadow: none;
+     color: #33333f !important;
+     filter: none;
+     outline: none;
+     line-height: 160%;
+     height: 200px;
 }
 
 .homelinkedit th:first-child, #sidebarconf th:first-child, #consolepass th:first-child {
      text-align: center;
      background: url(/themes/console/images/buttons/delete.png) center center no-repeat, url(images/header.png) center center repeat-x #eef;
-     background: url(/themes/console/images/buttons/delete.png) center center no-repeat, linear-gradient(to bottom, #fff 50%, rgba(238, 238, 255, 0.2) 50%, #eef 100%) #fff !important;
+     background: url(/themes/console/images/buttons/delete.png) center center no-repeat, linear-gradient(to bottom, #fafaff 50%, rgba(252, 252, 255, 0.8) 50%, #e2e2ff 100%) #fafaff !important;
      font-size: 0 !important;
      width: 5%;
 }
@@ -5726,7 +6126,7 @@ h4#updateplugins {
      margin: -15px 0 14px;
      text-transform: none;
      letter-spacing: normal;
-     color: #31334f;
+     color: #41465f;
 }
 
 .formaction#pluginupdater, table#permabanned, table#i2pupdates {
@@ -5769,6 +6169,7 @@ a[href^="configpeer?peer"] {
 
 a[href^="configpeer?peer"]::after {
      content: url(/themes/console/images/buttons/edit.png);
+     display: inline-block;
      vertical-align: bottom;
      margin: 0 0 0 3px;
 }
@@ -5950,10 +6351,10 @@ b.netdb_transport {
      -moz-column-gap: 0;
      -webkit-column-gap: 0;
      column-gap: 0;
-     background: #efefff;
-     background: rgba(240,240,255,0.5);
-     background: repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(240, 240, 255, 0.3) 3px, #fff 5px), #fff;
+     background: #f8f8ff;
+     background: repeating-linear-gradient(135deg, rgba(252,252,255,0.5) 2px, rgba(240, 240, 255, 0.3) 3px, #fafaff 5px), #f9f9ff;
      padding: 4px 5px;
+     box-shadow: inset 0 0 0 1px #fff;
 }
 
 .sybilinfo_container b {
@@ -6050,6 +6451,423 @@ b.netdb_transport {
 
 /* end sybils */
 
+/* debug */
+
+#debug {
+     background: #fafaff;
+}
+
+#debug li:first-child {
+     margin-top: 0 !important;
+}
+
+#debug td:first-child, #debug th:first-child {
+     padding-left: 10px;
+     color: #41465f;
+}
+
+#debug td:last-child {
+     text-align: right;
+     vertical-align: top;
+}
+
+#debug ul li {
+     list-style: none;
+     margin-left: 0;
+     padding: 0;
+}
+
+#debug h2 {
+     border-radius: 0;
+     padding: 8px 10px;
+}
+
+#debug h3 {
+     border-radius: 0;
+}
+
+#debug table {
+     filter: drop-shadow(0 0 1px #ccf);
+}
+
+#debug h2 + table {
+     margin-top: -16px;
+}
+
+#debug hr {
+     display: none;
+}
+
+.debug_container, #debug td {
+     line-height: 140%;
+}
+
+.debug_container {
+     padding: 10px 15px;
+     margin-top: -16px;
+     background: linear-gradient(to bottom, #fafaff, rgba(250,250,255,0.3)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px) #efefff !important;
+     border: 1px solid #7778bf;
+     box-shadow: inset 0 0 0 1px #fff;
+     filter: drop-shadow(0px 0 1px #ccf);
+}
+
+.debug_container:empty {
+     display: none;
+}
+
+.debug_container.buckets {
+     word-break: break-all;
+     margin-bottom: 5px;
+     padding-bottom: 0;
+     max-height: 600px;
+     overflow: auto;
+}
+
+.main#debug h3 {
+     border-width: 1px;
+}
+
+.main#debug h3 + table {
+     margin-top: -16px;
+}
+
+#debug td {
+    padding-top: 5px;
+    padding-bottom: 5px;
+}
+
+#debug h2 {
+     background: url(/themes/console/images/info/debug.png) right 6px center no-repeat, linear-gradient(to bottom, #fcfcff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,255,0.4)), linear-gradient(to right, #fcfcff 5%, rgba(231, 231, 255, 0.8) 25%) !important;
+     background-size: 20px 20px, 100% 100%, 100% 100% !important;
+     background-blend-mode: luminosity, normal, normal;
+}
+
+#debug h3 {
+     padding-left: 10px;
+}
+
+.debug_section {
+     margin-bottom: 29px !important;
+}
+
+.debug_section + .debug_section {
+     margin-top: -13px !important;
+}
+
+.debug_section h2 + h3 {
+     margin-top: -16px !important;
+}
+
+.debug_section table {
+     margin-bottom: -13px !important;
+}
+
+.debug_section .debug_container {
+     margin-bottom: -13px;
+}
+
+.debug_container:empty+ h3 {
+     margin-top: -16px !important;
+}
+
+.expiry td {
+     padding-left: 3% !important;
+}
+
+.expiry ul {
+     display: block;
+     columns: auto 400px;
+}
+
+#debug h2, #debug h3 {
+     position: relative;
+     z-index: 100;
+}
+
+#portmapper td:first-child {
+     font-weight: bold;
+}
+
+#portmapper tr:hover td:first-child {
+     color: #363b4f !important;
+}
+
+#portmapper td:last-child {
+     text-align: left !important;
+}
+
+#debug h3.debug_outboundsessions, #debug h3.debug_inboundsessions {
+     padding: 6px 10px 6px 28px;
+     background-blend-mode: luminosity, normal, normal;
+}
+
+#debug h3.debug_outboundsessions {
+     background: url(/themes/console/images/outbound.png) 6px center no-repeat, linear-gradient(to bottom, #fcfcff 50%, rgba(255, 255, 255, 0.6) 50%, rgba(240, 240, 255, 0.4)), linear-gradient(to right, #fcfcff 5%, rgba(231, 231, 255, 0.8) 25%) !important;
+}
+
+#debug h3.debug_inboundsessions {
+     background: url(/themes/console/images/inbound.png) 6px center no-repeat, linear-gradient(to bottom, #fcfcff 50%, rgba(255, 255, 255, 0.6) 50%, rgba(240, 240, 255, 0.4)), linear-gradient(to right, #fcfcff 5%, rgba(231, 231, 255, 0.8) 25%) !important;
+}
+
+.debug_version {
+     color: #050;
+}
+
+/* end debug */
+
+/* jardump */
+
+#jardump {
+     overflow-x: auto;
+     min-width: 576px;
+     padding: 0;
+}
+
+#jardump table {
+     margin: -1px 0 0;
+     border: none;
+     font-size: 8pt;
+}
+
+#jardump .subheading {
+     padding: 5px;
+     border-left: none !important;
+     border-right: none !important;
+}
+
+#jardump .subheading code {
+     font-weight: bold !important;
+}
+
+.subheading.routerfiles {
+     padding-left: 10px !important;
+     background: url(/themes/console/images/eepsite.png) right 7px center no-repeat, linear-gradient(to right, #7778bf 5px, #fafaff 5px, #eef) !important;
+     background-size: 16px auto, 100% 100% !important;
+}
+
+.subheading.pluginfiles {
+     padding-left: 10px !important;
+     background: url(/themes/console/images/plugin.png) right 7px center no-repeat, linear-gradient(to right, #7778bf 5px, #fafaff 5px, #eef) !important;
+     background-size: 16px auto, 100% 100% !important;
+}
+
+@media screen and (-webkit-min-device-pixel-ratio:0) {
+#jardump table {
+     border: 1px solid #7778bf !important;
+     border-bottom: none !important;
+     border-top: none !important;
+}
+
+#jardump, #jardump tr {
+     border-left: none !important;
+     border-right: none !important;
+}
+
+.subheading.routerfiles {
+     padding-left: 5px !important;
+     background: url(/themes/console/images/eepsite.png) right 5px center no-repeat, linear-gradient(to right, #fafaff, #eef) !important;
+     background-size: 16px auto, 100% 100% !important;
+     box-shadow: none !important;
+}
+
+.subheading.pluginfiles {
+     padding-left: 5px !important;
+     background: url(/themes/console/images/plugin.png) right 5px center no-repeat, linear-gradient(to right, #fafaff, #eef) !important;
+     background-size: 16px auto, 100% 100% !important;
+     box-shadow: none !important;
+}
+}
+
+#jardump th {
+     padding-top: 7px !important;
+     padding-bottom: 7px !important;
+     font-size: 10pt;
+}
+
+#jardump th:nth-child(n+2) {
+     text-align: center;
+}
+
+#jardump td {
+     border-right: 1px inset #ddf;
+     text-align: center;
+}
+
+#jardump td:first-child {
+     padding-right: 3px;
+}
+
+#jardump td:first-child, #jardump td:last-child {
+     text-align: left;
+}
+
+#jardump td:nth-child(2) {
+     text-align: right;
+     font-style: italic;
+}
+
+.revision, .sha256, .unsignedmod {
+     -moz-user-select: all;
+     -webkit-user-select: all;
+     user-select: all;
+}
+
+.unsignedmod::-moz-selection {
+     background: #f00 !important;
+     color: #fff;
+}
+
+#jardump tt {
+     letter-spacing: -0.03em;
+     font-size: 8pt !important;
+     font-weight: normal !important;
+}
+
+#jardump a tt {
+     color: #359;
+}
+
+#jardump code {
+     font-weight: normal !important;
+}
+
+#jardump a:visited tt {
+    color: #218;
+}
+
+#jardump a:hover tt {
+     color: #f60;
+}
+
+#jardump a:active tt {
+     color: #f90;
+}
+
+#jardump hr {
+     margin: 0 !important;
+     background: #ddf;
+     width: 100%;
+     height: 1px;
+     display: block;
+}
+
+#jardump td:first-child {
+     padding-left: 26px;
+     background-image: url(/themes/console/images/info/box.png);
+     background-position: 5px center;
+     background-repeat: no-repeat;
+     background-size: 16px 16px;
+}
+
+#jardump tr:hover td:first-child {
+     background: url(/themes/console/images/info/box.png) 5px center no-repeat #ffd;
+     background-size: 16px 16px;
+}
+
+#jardump tr:hover td:first-child b, #portmapper tr:hover td:first-child, #portfaq tr:hover td:first-child {
+     color: #26262f;
+}
+
+#jardump tr:hover .unsignedmod:not(:empty) {
+     background: #8f0000;
+     color: #fff;
+}
+
+#jardump tr:hover hr {
+     background: transparent;
+}
+
+.unsignedmod {
+     display: inline-block;
+     padding: 2px;
+     border-radius: 1px;
+}
+
+#jardump td:last-child {
+     word-break: break-all;
+     padding: 1px;
+}
+
+/* end jardump */
+
+/* custom radios/checkboxes for chrome/blink  */
+
+@media screen and (-webkit-min-device-pixel-ratio: 0) and (min-resolution:.001dpcm) {
+input[type="checkbox"], input[type="checkbox"]:checked, input[type="checkbox"][disabled], input[type="checkbox"][disabled]:checked {
+     background: #f8f8ff;
+     width: 19px !important;
+     height: 19px !important;
+     box-shadow: inset 1px 1px 1px rgba(204, 204, 204, 0.6);
+     border-radius: 2px;
+     -webkit-appearance: inherit;
+     border: 1px solid #999daf !important;
+     position: relative;
+     box-sizing: border-box;
+     filter: drop-shadow(0 0 1px #ccf);
+     vertical-align: middle !important;
+}
+
+#netconfig .optbox {
+     vertical-align: middle !important;
+}
+
+input[type="checkbox"]:checked::before {
+     position: absolute;
+     top: 1px;
+     left: 1px;
+     content: "\2714";
+     border-radius: 1px;
+     font-size: 15pt;
+     color: #41465f;
+     line-height: 80%;
+     font-family: sans-serif;
+     overflow: hidden;
+     width: 16px;
+     height: 16px;
+}
+
+input[type="radio"], input[type="radio"]:checked, input[type="radio"][disabled], input[type="radio"][disabled]:checked {
+     background: #f8f8ff;
+     width: 19px !important;
+     height: 19px !important;
+     box-shadow: inset 0 0 2px #7778bf;
+     border-radius: 50%;
+     -webkit-appearance: none;
+     border: 1px solid #999daf !important;
+     position: relative;
+     box-sizing: border-box;
+     filter: drop-shadow(0 0 1px #ccf);
+     vertical-align: middle !important;
+}
+
+input[type="radio"]:checked::before {
+     content: "";
+     position: absolute;
+     border-radius: 50%;
+     left: 25%;
+     top: 25%;
+     width: 9px;
+     height: 9px;
+     background: #41465f;
+}
+
+input[type="checkbox"]:hover, input[type="radio"]:hover, input[type="checkbox"]:focus, input[type="radio"]:focus {
+     background: #fff;
+     width: 19px !important;
+     height: 19px !important;
+     filter: drop-shadow(0 0 3px #89f) !important;
+}
+
+input[type="checkbox"][disabled], input[type="radio"][disabled], input[type="checkbox"][disabled]:hover, input[type="radio"][disabled]:hover,
+input[type="checkbox"][disabled]:checked, input[type="radio"][disabled]:checked, input[type="checkbox"][disabled]:checked:hover, input[type="radio"][disabled]:checked:hover {
+     filter: none !important;
+     box-shadow: none !important;
+     opacity: 0.5;
+}
+}
+
+/* end custom radios/checkboxes */
+
 /* responsive layout */
 
 @media screen and (max-width: 900px) {
@@ -6225,6 +7043,31 @@ input[name="pluginURL"] {
 .main#help h3, #faq h3, #leasesetdebug th, table#leasesetsummary th {
      font-size: 10pt !important;
 }
+
+#jardump td:first-child, #jardump td:nth-child(6), #jardump td:last-child {
+     word-break: break-all;
+     min-width: 100px;
+}
+
+.sha256, .revision {
+     display: inline-block;
+     width: 100px;
+     overflow: auto;
+}
+
+#proof p {
+     border: none;
+     box-shadow: none;
+     background: none;
+}
+
+#proof p::before {
+     display: inline;
+}
+
+#proof textarea {
+     padding-right: 15px !important;
+}
 }
 
 @media screen and (max-width: 1500px) {
@@ -6271,6 +7114,22 @@ body {
      border-left: none;
      border-right: none;
 }
+
+#jardump {
+     overflow: hidden;
+}
+}
+
+@media screen and (min-width: 1400px) {
+.main#help #changelog pre:not(old) {
+     columns: 550px auto;
+     column-gap: 25px;
+     column-rule: 1px solid rgba(64, 64, 128, 0.5);
+     margin-left: -10px !important;
+     padding-left: 10px;
+     padding-bottom: 5px;
+     height: 75%;
+}
 }
 
 @media screen and (min-width: 1500px) {
@@ -6280,7 +7139,7 @@ body, .main, .main td, .news p, #news p, .tab, .tab2, .main li b, div.joblog li,
 }
 
 .routersummary td, .routersummary a, .routersummary button, .routersummary h4, .routersummary h4 a, div.news, pre,
-#jardump tt, #jardump td, div.news, #logs li, tt, .cells tt, #profilelist tt, .leaseset tt {
+#jardump tt, #jardump td, div.news, #logs li, tt, .cells tt, #profilelist tt, .leaseset tt, .links code, #console code {
      font-size: 9pt !important;
 }
 
@@ -6296,7 +7155,7 @@ tt a, .cells tt, #profilelist tt, .cells tt a, #profilelist tt a, .leaseset td t
      letter-spacing: 0.1em !important;
 }
 
-.tunnel_peer tt {
+#tunnels .tunnel_peer tt {
      margin-left: 3px !important;
 }
 
@@ -6308,6 +7167,10 @@ tt a, .cells tt, #profilelist tt, .cells tt a, #profilelist tt a, .leaseset td t
      font-size: 0 !important;
 }
 
+h3#shutdownrouter, h3#systray, h3#servicedebug {
+     margin-bottom: -15px;
+}
+
 .main, .news, h1 {
      margin-left: 232px !important;
 }
@@ -6325,6 +7188,14 @@ tt a, .cells tt, #profilelist tt, .cells tt a, #profilelist tt a, .leaseset td t
      width: 218px !important;
 }
 
+#sb_services {
+     width: 222px !important;
+}
+
+.sb_newsheadings table {
+     width: 220px !important;
+}
+
 .routersummary h3::after {
      content: "";
      display: inline-block;
@@ -6354,7 +7225,7 @@ h3#pconfig, h3#webappconfig, h3#i2pclientconfig, h3#pluginmanage, p#clientconf.i
 }
 
 .routersummary .reload, .routersummary .stop {
-     min-width: 95px;
+     min-width: 100px;
      margin: 0 3px -5px;
 }
 
@@ -6366,6 +7237,10 @@ h3#restartrouter, p#tunnelconfig {
      margin-bottom: -15px !important;
 }
 
+h3.ptitle {
+     margin-bottom: -14px;
+}
+
 h1 {
      padding: 21px 15px 17px;
      font-size: 19pt;
@@ -6458,18 +7333,18 @@ button.control {
      width: 140px !important;
 }
 
-.main#config_ui .themechoice .optbox, .main#config_ui .langselect .optbox,
-.main#config_ui .themechoice .optbox:hover, .main#config_ui .langselect .optbox:hover,
-.main#config_ui .themechoice .optbox:focus, .main#config_ui .langselect .optbox:focus {
+#config_ui .themechoice .optbox, #config_ui .langselect .optbox,
+#config_ui .themechoice .optbox:hover, #config_ui .langselect .optbox:hover,
+#config_ui .themechoice .optbox:focus, #config_ui .langselect .optbox:focus {
      width: 144px !important;
 }
 
-.main#config_ui .themechoice .optbox {
+#config_ui .themechoice .optbox {
      margin-left: -49px !important;
      min-height: 92px !important;
 }
 
-.main#config_ui .langselect .optbox, .main#config_ui .langselect .optbox:hover, .main#config_ui .langselect .optbox:focus {
+#config_ui .langselect .optbox, #config_ui .langselect .optbox:hover, #config_ui .langselect .optbox:focus {
      margin-left: -2px !important;
 }
 
@@ -6506,6 +7381,7 @@ _:-ms-lang(x), .tab, .tab2 {
 }
 
 /* Edge/IE tweaks */
+
 _:-ms-lang(x), *, *:hover, *:focus, input, input:hover, input:focus, a:hover, a:focus, h1, h2, h3, h4 {
      filter: none !important;
      text-shadow: none !important;
diff --git a/installer/resources/themes/console/light/console_ar.css b/installer/resources/themes/console/light/console_ar.css
index 22f4d195525d17d3695b1f91087697ef1831d2fa..bb1d413315377c2d1260cc3dc3989b54a6d3661e 100644
--- a/installer/resources/themes/console/light/console_ar.css
+++ b/installer/resources/themes/console/light/console_ar.css
@@ -33,13 +33,27 @@ h2, h3 {
      background: linear-gradient(to bottom, #fff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), linear-gradient(to left, #fff 5%, rgba(231, 231, 255, 0.8) 15%) !important;
 }
 
+#debug h2 {
+     background: url(/themes/console/images/info/debug.png) 6px center no-repeat, linear-gradient(to bottom, #fcfcff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,255,0.4)), linear-gradient(to left, #fcfcff 5%, rgba(231, 231, 255, 0.8) 25%) !important;
+     background-size: 20px 20px, 100% 100%, 100% 100% !important;
+}
+
+#portmapper th:last-child, #portmapper td:last-child {
+     text-align: center !important;
+}
+
+.buckets {
+     margin-bottom: -10px !important;
+}
+
 .routersummary h4 {
      text-align: center;
 }
 
 h1 {
      margin: 0 212px -15px 0;
-     padding: 20px 20px 20px 10px;
+     padding: 15px 20px 15px 10px;
+     background: linear-gradient(to left, #fcfcff, rgba(252,252,255,0) 600px), linear-gradient(to bottom, #fcfcff 50%, rgba(248,248,255,0.6) 50%), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px) #fafaff !important;
 }
 
 h2 {
@@ -47,7 +61,8 @@ h2 {
 }
 
 h3 {
-     font-size: 14pt;
+     font-size: 13pt;
+     padding-right: 10px;
 }
 
 form {
@@ -59,6 +74,11 @@ form {
      margin: 0;
 }
 
+.routersummary img[src$="i2plogo.png"] {
+     margin-left: 0 !important;
+     margin-right: -1px !important;
+}
+
 table.search td:nth-child(2) {
      padding: 0 10px 0 0;
 }
@@ -67,9 +87,21 @@ table.search td:nth-child(3) {
      padding: 0 2px 0 8px;
 }
 
-input.search[type="text"] {
-     background-position: right 4px center;
-     padding: 5px 24px 5px 5px;
+input.search[type="text"], input.search[type="text"]:focus {
+     background-position: right 4px center !important;
+     padding: 5px 24px 5px 5px !important;
+}
+
+button, input[type="submit"], input[type="reset"] {
+     display: inline-block;
+     line-height: 120%;
+     font-size: 10pt;
+     font-weight: bold;
+}
+
+#config_homepage.main input.delete {
+     float: right;
+     margin-top: 5px !important;
 }
 
 button.search, input[type="submit"], input[type="reset"],
@@ -104,7 +136,7 @@ input[name="refreshInterval"] {
       text-align: right;
 }
 
-#statsForm, #joinfamily, #newfamily, table#permabanned {
+#statsForm, #joinfamily, #newfamily, #permabanned {
      margin-left: 0;
      margin-right: 0;
 }
@@ -123,7 +155,7 @@ form[action="configpeer"] > h3.tabletitle {
      margin-right: 0;
 }
 
-div.routersummary form {
+.routersummary form {
     text-align: center;
 }
 
@@ -133,33 +165,53 @@ div.wideload {
 }
 
 .routersummary h3 a {
-     font-size: 140% !important;
+     font-size: 120% !important;
 }
 
 .routersummary h3, .routersummary h4 {
      text-align: center !important;
 }
 
+.sb_newsheadings {
+     margin: 5px -8px 0 0 !important;
+}
+ 
+.sb_newsheadings:hover {
+     margin: 5px -5px 0 0 !important;
+}
+
+.sb_newsheadings table {
+     margin: -12px 0 -8px -10px;
+     border-collapse: separate;
+     border-spacing: 0;
+}
+
+.sb_newsheadings table:hover {
+     padding-right: 3px;
+}
+
+.sb_newsheadings tr td, .sb_newsheadings tr:hover td {
+     padding-right: 24px !important;
+     padding-left: 6px !important;
+     background-position: right 6px center !important;
+     background-color: none !important;
+}
+
 #sb_services a {
      text-align: right !important;
-     padding-right: 20px !important;
-     background-position: right center !important;
+     padding-right: 28px !important;
+     background-position: right 6px center !important;
 }
 
-div.routersummary td:last-child {
+.routersummary td:last-child {
      text-align: left;
-     margin-left: 3px;
 }
 
-div.logo {
+.logo {
      float:right;
 }
 
-div.tunnels td:first-child {
-     text-align: right;
-}
-
-div.messages li, .messages li:first-child, .error li:first-child, .error li {
+.messages li, .messages li:first-child, .error li:first-child, .error li {
      padding: 0 24px 0 0 !important;
      font-size: 12pt;
 }
@@ -169,22 +221,22 @@ div.messages li, .messages li:first-child, .error li:first-child, .error li {
      font-size: 12pt;
 }
 
-div.warning {
+.warning {
      text-align: right;
 }
 
-div.main {
+.main {
      margin: 10px 212px 0 0;
      padding: 7px 20px 30px 20px;
 }
 
-div.sorry {
+.sorry {
      margin: 14px 212px 0 0;
      padding: 20px 70px 20px 20px !important;
      background: url(/themes/console/images/info/errortriangle.png) right 15px center no-repeat #fff;
 }
 
-div.main li {
+.main li {
      text-align: right;
 }
 
@@ -193,7 +245,7 @@ div.main li {
 }
 
 div.news {
-     margin: 10px 212px -12px 0;
+     margin: 10px 212px -12px 0 !important;
      padding: 7px 20px 10px 20px;
      direction: ltr;
 }
@@ -202,7 +254,7 @@ div.news {
      direction: ltr;
 }
 
-div.graphspanel form {
+.graphspanel form {
      text-align: right;
 }
 
@@ -231,8 +283,8 @@ p#helptranslate {
 }
 
 .confignav {
-     margin-left: -21px !important;
-     margin-right: -21px !important;
+     margin-left: -20px !important;
+     margin-right: -20px !important;
      margin-top: -5px !important;
      direction: ltr;
 }
@@ -247,8 +299,17 @@ p#helptranslate {
      margin-bottom: 15px !important;
 }
 
+#clientconfig, #webappconfig {
+     margin-right: -32px;
+}
+
+#clientconfig td:nth-child(2), #clientconfig td:nth-child(3) {
+     text-align: center;
+}
+
+#clientconfig th:first-child, #clientconfig td:first-child,
 #webappconfig th:first-child, #webappconfig td:first-child {
-     text-align: right;
+     text-align: left !important;
 }
 
 #webappconfig th:nth-child(2), #webappconfig td:nth-child(2),
@@ -269,6 +330,7 @@ div[lang="ar"] p, div[lang="ar"] ul {
 div[lang="ar"] .links li {
      list-style: none;
      margin-bottom: 15px;
+     padding-right: 5px !important;
 }
 
 div[lang="ar"] ul li {
@@ -312,11 +374,15 @@ th {
      text-align:right;
 }
 
+.links code, #console code {
+     font-size: 10pt !important;
+}
+
 th a.script {
      float: left;
 }
 
-div.joblog li, div.newsheadings li {
+div.joblog li {
     text-align: left;
     direction: ltr;
 }
@@ -361,12 +427,12 @@ span.newtab {
      overflow: hidden;
 }
 
-td.optionsave {
+td.optionsave, #peerdefs td:first-child {
      text-align: left;
 }
 
 p.infohelp, p.infowarn, td.infohelp, td.infowarn,
-table#bugreports td.infohelp, p#debugmode, p#sybilinfo,
+#bugreports td.infohelp, p#debugmode, p#sybilinfo,
 #bandwidthconfig tr:first-child .infohelp,
 #addkeyring td.infohelp, #joinfamily tr:nth-child(3) td:first-child,
 #newfamily tr:last-child td:first-child,
@@ -414,32 +480,37 @@ div.themechoice, div.langselect {
      text-align: right;
 }
 
-table#manualreseed, #config_keyring .configtable { 
-     margin-right: 0 !important;
+#sidebarconf th:last-child {
+     text-align: center !important;
 }
 
-#config_keyring form h3, #config_update form h3, form h3 {
-     margin-right: -16px;
-     margin-left: 16px;
+#sidebarconf th {
+     text-align: right !important;
 }
 
-#clientconfig, #webappconfig {
-     margin-right: -32px;
+#sidebarconf td:last-child {
+     text-align: right !important;
+     padding-left: 10px !important;
 }
 
-#clientconfig th:first-child {
-     text-align: left;
+#sidebarconf td:nth-last-child(2) {
+     text-align: left !important;
 }
 
-#clientconfig td:nth-child(2), #clientconfig td:nth-child(3) {
-     text-align: center;
+#manualreseed, #config_keyring .configtable { 
+     margin-right: 0 !important;
+}
+
+#config_keyring form h3, #config_update form h3, form h3 {
+     margin-right: -16px;
+     margin-left: 16px;
 }
 
-table#plugininstall {
+#plugininstall {
      margin-right: 0 !important;
 }
 
-table#pluginconfig {
+#pluginconfig {
      margin-right: -32px !important;
 }
 
@@ -463,17 +534,14 @@ table#pluginconfig {
 
 #configstats td:nth-child(2) {
      padding-right: 10px;
+     direction: ltr;
 }
 
-#configstats tr:last-child td {
+#i2pupdates td:first-child, #reseedconfig td:first-child, #configstats tr:last-child td, textarea[name="levels"] {
      text-align: left !important;
 }
 
-textarea[name="levels"] {
-     text-align: left;
-}
-
-textarea#advancedsettings, #i2pupdates textarea, #addkeyring textarea, #reseedconfig textarea {
+textarea#advancedsettings, #i2pupdates textarea, #addkeyring textarea, #reseedconfig textarea, #enviro {
      direction: ltr;
 }
 
@@ -485,10 +553,6 @@ textarea#advancedsettings, #i2pupdates textarea, #addkeyring textarea, #reseedco
     width: calc(100% - 10px);
 }
 
-#i2pupdates td:first-child, #reseedconfig td:first-child {
-     text-align: left;
-}
-
 .homelinkedit th:first-child, .homelinkedit td:first-child {
      text-align: center;
 }
@@ -507,7 +571,7 @@ textarea#advancedsettings, #i2pupdates textarea, #addkeyring textarea, #reseedco
      direction: ltr !important;
 }
 
-.mediumtags {
+.mediumtags, #enviro td {
      text-align: left;
 }
 
@@ -534,7 +598,7 @@ h3#advancedconfig a, h3#bwlimiter a, h3.tabletitle a, h3.ptitle a, th a.script,
      padding-right: 50px;
 }
 
-table#addkeyring tr:last-child td {
+#addkeyring tr:last-child td {
      text-align: left;
 }
 
@@ -544,8 +608,16 @@ table#addkeyring tr:last-child td {
 }
 
 .tab, .tab2 {
-     font-size: 12pt !important;
+     display: inline-block;
+     font-size: 11pt !important;
      margin-top: -5px;
+     padding-top: 6px !important;
+     padding-bottom: 6px !important;
+}
+
+.tab a {
+     padding: 0 5px;
+     display: inline;
 }
 
 table.search {
@@ -553,6 +625,11 @@ table.search {
      margin-bottom: 15px;
 }
 
+.search td {
+     padding-top: 4px !important;
+     padding-bottom: 0 !important;
+}
+
 h4.app {
      background: url(/themes/console/images/eepsite.png) 10px center no-repeat, linear-gradient(to bottom, #fff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), linear-gradient(to left, #fff 5%, rgba(231, 231, 255, 0.8) 15%) right center !important;
      background-size: 16px 16px, 100% 100%, 100% 100% !important;
@@ -567,11 +644,15 @@ h4.app2 {
 }
 
 h4.app, h4.app2, #news h3, .news h3 {
-     background-position: right 10px center, right center, right center !important;
-     padding: 6px 32px 6px 10px;
+     background-position: right 7px center, right center, right center !important;
+     padding: 6px 30px 6px 10px;
      direction: ltr !important;
 }
 
+.applabel a {
+    font-size: 11pt;
+}
+
 div.news h3, #news h3 {
      background: url(images/news.png) right 8px center no-repeat, linear-gradient(to left, #fff, #eef) !important;
      background: url(images/news.png) right 8px center no-repeat, linear-gradient(to bottom, #fff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), linear-gradient(to left, #fff 5%, rgba(231, 231, 255, 0.8) 15%) right center !important;
@@ -583,11 +664,11 @@ div.news h3, #news h3 {
 }
 
 #newsDisplay {
-     float: left;
      margin-left: 0 !important;
 }
 
-#newsStatus, #newsDisplay {
+#news #newsStatus, #newsDisplay {
+     margin-top: 6px;
      margin-bottom: -2px !important;
 }
 
@@ -607,12 +688,21 @@ div.news h3, #news h3 {
      text-align: center;
 }
 
-table#leasesetdebug th:last-child, table#leasesetsummary th:last-child,
+#sb_localtunnels td {
+     vertical-align: top; !important;
+}
+
+#sb_localtunnels td:last-child {
+     text-align: left !important;
+     padding-left: 1px;
+}
+
+#leasesetdebug th:last-child, #leasesetsummary th:last-child,
 table.leaseset th:last-child, table.leaseset td:nth-child(2) {
      text-align: left;
 }
 
-table#leasesetdebug th, table#leasesetsummary th, table.leaseset th {
+#leasesetdebug th, #leasesetsummary th, table.leaseset th {
      text-align: right;
 }
 
@@ -625,15 +715,15 @@ table#leasesetdebug th, table#leasesetsummary th, table.leaseset th {
      padding-right: 5px;
 }
 
-table#leasesetdebug td:nth-child(2n+1) {
+#leasesetdebug td:nth-child(2n+1) {
      text-align: left;
 }
 
-table#leasesetdebug td:nth-child(2n) {
+#leasesetdebug td:nth-child(2n) {
      text-align: right;
 }
 
-table#leasesetdebug, table#leasesetsummary, table.leaseset, table.sybil_routerinfo, #netdboverview, .netdbentry {
+#leasesetdebug, #leasesetsummary, table.leaseset, table.sybil_routerinfo, #netdboverview, .netdbentry {
      margin-right: 0;
 }
 
@@ -665,7 +755,7 @@ table.leaseset:last-child, .netdbentry:last-child, #profile_defs {
      margin-bottom: -10px;
 }
 
-table#leasesetdebug td:first-child, table#leasesetsummary td:first-child {
+#leasesetdebug td:first-child, #leasesetsummary td:first-child {
      text-align: left;
 }
 
@@ -778,18 +868,32 @@ p#profiles_overview, #profiles .widescroll + h3, #thresholds + h3, #profiles #ba
      margin-right: 0 !important;
 }
 
+#bugreports {
+     padding: 10px 10px 10px 0;
+}
+
+#logs #bugreports td.infohelp {
+     padding: 5px 65px 5px 0 !important;
+}
+
 #logs table td:first-child {
-     text-align: left;
      padding-right: 15px;
 }
 
 .logtable tr:first-child td {
      direction: ltr;
+     text-align: right !important;
 }
 
 #wrapperlogs pre {
      text-align: left;
      direction: ltr;
+     width: 100%;
+     margin-right: -15px;
+}
+
+#wrapperlogs {
+     margin-bottom: -10px !important;
 }
 
 #pluginconfigactions {
@@ -851,26 +955,31 @@ label {
 
 #graphs td:first-child {
      padding-right: 10px;
+     text-align: left;
 }
 
 #consolepass tr:first-child td, p#clientconf.infohelp, p#webappconfigtext.infohelp, #floodfillconfig .infohelp, 
 #bandwidthconfig tr:first-child .infohelp, h3#shutdownrouter + p.infohelp, h3#restartrouter + p.infohelp, h3#systray + p.infohelp, 
-h3#servicedebug + p.infohelp, h3#browseronstart + p.infohelp, table#addkeyring td:first-child, #config_peers tr:nth-child(3) td.infohelp, 
+h3#servicedebug + p.infohelp, h3#browseronstart + p.infohelp, #addkeyring td:first-child, #config_peers tr:nth-child(3) td.infohelp, 
 #config_reseed.main p.infohelp, #plugininstall tr:nth-child(3) td:nth-last-child(2), #manualreseed tr:nth-child(3) td:nth-last-child(2), 
 #manualreseed tr:nth-child(5) td:nth-last-child(2), #plugininstall tr:nth-child(5) td:nth-last-child(2), #manualreseed tr:nth-last-child(2) td.infohelp, 
 p#enablefullstats, p#gatherstats, #oldhome td:first-child, p#pluginconfigtext, #plugininstall .infohelp, #config_family .infohelp, 
 #joinfamily tr:nth-child(3) td:first-child, #newfamily tr:last-child td:first-child, #config_summarybar .configtable td:not(.optionsave),
-table#bugreports td.infohelp {
+#bugreports td.infohelp {
      background-position: right 12px center !important;
      padding: 15px 50px 15px 15px !important;
 }
 
-.routersummary h4, .routersummary h4 span, .routersummary h4 span a {
+.routersummary h4 {
      font-size: 11pt !important;
 }
 
+.routersummary h4 span, .routersummary h4 span a {
+     font-size: 10pt !important;
+}
+
 .routersummary td:first-child, .routersummary td:nth-last-child(n+2), .routersummary td a {
-     font-size: 10.5pt !important;
+     font-size: 10pt !important;
 }
 
 .routersummary h4 span::before {
@@ -883,6 +992,17 @@ table#bugreports td.infohelp {
      padding-right: 0 !important;
 }
 
+.sb_newsheadings td, .sb_newsheadings tr:hover td {
+     background-position: right center !important;
+     padding-right: 18px !important;
+     padding-left: 8px !important;
+     text-align: right !important;
+}
+
+.sb_newsheadings td a {
+     font-size: 9pt !important;
+}
+
 #config_ui.main .themechoice .optbox {
     margin-left: 0;
     margin-right: -38px;
@@ -917,6 +1037,18 @@ table#bugreports td.infohelp {
      text-align: center !important;
 }
 
+@media screen and (min-width: 800px) {
+.main#console {
+     overflow: hidden;
+}
+}
+
+@media screen and (min-width: 1000px) {
+body {
+     overflow-x: hidden;
+}
+}
+
 @media screen and (min-width: 1500px) {
 .main, .news, h1, .sorry {
      margin-right: 232px !important;
diff --git a/installer/resources/themes/console/light/console_big.css b/installer/resources/themes/console/light/console_big.css
index bfde33dacfcb7f20dc08864344056d5a38fbfbf5..ed452d796b3249428aebc1644749b2bbd15158ba 100644
--- a/installer/resources/themes/console/light/console_big.css
+++ b/installer/resources/themes/console/light/console_big.css
@@ -31,8 +31,8 @@ button, input[type="submit"], input[type="reset"] {
 }
 
 button.reload[value="restart"], button.stop[value="shutdown"] {
-     padding-top: 5px !important;
-     padding-bottom: 5px !important;
+     padding-top: 3px !important;
+     padding-bottom: 3px !important;
 }
 
 button.control {
@@ -74,6 +74,11 @@ button.control {
      line-height: 130%;
 }
 
+.sb_newsheadings td, .sb_newsheadings tr:hover td {
+     background-position: 4px center !important;
+     padding-left: 22px !important;
+}
+
 div.news, .newscontent p {
      font-size: 10pt !important;
 }
@@ -194,7 +199,7 @@ p#enablefullstats {
 }
 
 #console .twocol {
-     margin-bottom: -20px !important;
+     margin-bottom: -25px !important;
 }
 
 #console li {
@@ -212,7 +217,6 @@ p#enablefullstats {
 #console a:hover code {
      color: #f60 !important;
 }
-}
 
 .tunnel_cap b, b.tunnel_cap {
      color: #fff !important;
@@ -223,6 +227,8 @@ p#enablefullstats {
      font-weight: bold !important;
 }
 
+/* responsive layout */
+
 @media screen and (min-width: 1500px) {
 .langbox {
      line-height: 115% !important;
@@ -245,3 +251,4 @@ p#enablefullstats {
 }
 }
 
+/* end responsive layout */
\ No newline at end of file
diff --git a/installer/resources/themes/console/light/i2ptunnel.css b/installer/resources/themes/console/light/i2ptunnel.css
index 66436e880d63152eca2cd33407c78bb9264a48ca..10006f55f6c4c635491d10232a452db07ca4baa0 100644
--- a/installer/resources/themes/console/light/i2ptunnel.css
+++ b/installer/resources/themes/console/light/i2ptunnel.css
@@ -7,7 +7,7 @@ body {
      padding: 0;
      text-align: center;
      font-family: "Droid Sans", "Noto Sans", "Ubuntu", "Segoe UI", Verdana, Helvetica, sans-serif;
-     color: #333;
+     color: #33333f;
      font-size: 9pt;
      background: #a4a4cb url(images/tile2.png) fixed;
      background-size: 32px 32px;
@@ -36,6 +36,10 @@ div {
      box-sizing: border-box;
 }
 
+b {
+     color: #41465f;
+}
+
 a {
      text-decoration: none;
 }
@@ -50,12 +54,13 @@ input[type="checkbox"], input[type="radio"] {
      vertical-align: sub;
      min-width: 16px;
      min-height: 16px;
+     filter: sepia(100%) hue-rotate(185deg) drop-shadow(0 0 1px #ccf);
 }
 
 input[type="checkbox"]:hover, input[type="checkbox"]:focus, input[type="radio"]:hover, input[type="radio"]:focus {
      box-shadow: 0 0 1px #89f;
-     filter: drop-shadow(0 0 2px #89f);
      outline: none;
+     filter: sepia(100%) hue-rotate(185deg) drop-shadow(0 0 3px #89f);
 }
 
 label {
@@ -63,7 +68,7 @@ label {
 }
 
 label:hover {
-     color: #000;
+     color: #19191f;
 }
 
 textarea, input, select, button {
@@ -82,18 +87,19 @@ button, input[type="submit"], input[type="reset"], a.control {
 }
 
 textarea {
+     background: #fafaff;
+     color: #33333f;
      font-family: "Droid Sans Mono", "Noto Mono", "Lucida Console", "DejaVu Sans Mono", monospace;
-     color: #333;
-     background: #fff;
-     border: 1px solid #999;
+     border: 1px solid #999daf;
      border-radius: 2px;
      resize: none;
-     box-shadow: inset 2px 2px 1px rgba(204, 204, 204, 0.6);
+     box-shadow: inset 1px 1px 1px rgba(204, 204, 204, 0.6);
 }
 
-textarea:focus {
-     box-shadow: inset 0 0 0 1px #89f;
-     color: #111;
+textarea:focus, textarea[name="accessList"]:focus {
+     background: #fff;
+     color: #19191f;
+     border: 1px solid #676c7f;
 }
 
 textarea#statusMessages {
@@ -105,6 +111,12 @@ textarea#statusMessages {
      border: none;
      box-shadow: none;
      font-family: "Droid Sans Mono", "Noto Mono", Consolas, "Lucida Console", "DejaVu Sans Mono", monospace;
+     font-size: 8pt;
+     filter: none;
+}
+
+textarea#statusMessages:focus {
+     background: #fafaff;
 }
 
 br {
@@ -136,36 +148,41 @@ br {
      font-size: 0 !important;
      text-align: center;
      overflow: hidden;
-     filter: drop-shadow(0 0 1px rgba(204, 204, 204, 0.6));
+     filter: drop-shadow(0 0 1px #ccf);
 }
 
 hr {
      display: none;
 }
 
-.freetext, textarea {
+.freetext, textarea, .displayText {
      font: 9pt "Droid Sans Mono", "Noto Mono", "Lucida Console", "DejaVu Sans Mono", monospace;
+     filter: drop-shadow(0 0 1px #ccf);
 }
 
 .freetext {
      width: 150px;
-     border: 1px solid #999;
+     border: 1px solid #999daf;
      padding: 4px;
-     background: #fff;
-     color: #333;
+     background: #fafaff;
+     color: #33333f;
      border-radius: 2px;
-     box-shadow: inset 2px 2px 1px rgba(204, 204, 204, 0.6);
+     box-shadow: inset 1px 1px 1px rgba(204, 204, 204, 0.6);
 }
 
-.freetext:focus {
+.freetext:focus, .displayText:focus, textarea:focus {
+     background: #fff;
+     color: #19191f;
+     border: 1px solid #676c7f;
      box-shadow: 0 0 1px #89f;
-     color: #111;
 }
 
 .freetext[readonly], .freetext[readonly]:focus {
      background: #e9e9e9;
-     box-shadow: inset 2px 2px 1px rgba(204, 204, 204, 0.6);
-     color: #333;
+     color: #4d4d5f;
+     border: 1px solid #999daf;
+     box-shadow: inset 1px 1px 1px rgba(204, 204, 204, 0.6);
+     filter: none;
 }
 
 #clientHost {
@@ -191,13 +208,13 @@ hr {
      text-decoration: none;
      font-style: normal;
      font-weight: normal;
-     color: #333;
-     border: 1px solid #999;
+     color: #33333f;
+     border: 1px solid #999daf;
      border-radius: 2px;
      background: #eee;
      background: linear-gradient(to bottom, #fff, #ddd);
      box-shadow: inset 0 0 0 1px #fff;
-     filter: drop-shadow(0 0 1px rgba(204, 204, 204, 0.6));
+     filter: drop-shadow(0 0 1px #ccf);
      box-sizing: border-box;
      margin: 2px 4px !important;
      min-width: 70px !important;
@@ -210,7 +227,7 @@ button.control, input.control {
 
 .control:hover, .control:focus {
      text-decoration: none;
-     color: #111;
+     color: #19191f;
      border: 1px solid #f60 !important;
      background: #ddd;
      background: linear-gradient(to bottom, #ddd, #fff);
@@ -221,7 +238,7 @@ button.control, input.control {
 
 .control:active {
      box-shadow: inset 2px 2px 1px #999 !important;
-     color: #333;
+     color: #33333f;
 }
 
 a.control {
@@ -269,10 +286,11 @@ select {
      min-width: 140px;
      background: #fff;
      background: url(images/dropdown.png) right center no-repeat, linear-gradient(to bottom, #fff, #ddd);
-     color: #333;
+     background-blend-mode: hard-light, normal;
+     color: #33333f;
      font-family: "Droid Sans", "Noto Sans", "Ubuntu", "Segoe UI", Verdana, Helvetica, sans-serif;
      font-size: 9pt;
-     border: 1px solid #999;
+     border: 1px solid #999daf;
      border-radius: 2px;
      box-shadow: inset 0 0 0 1px #fff;
      overflow: hidden;
@@ -280,11 +298,11 @@ select {
      -moz-appearance: none;
      -webkit-appearance: none;
      appearance: none;
-     filter: drop-shadow(0 0 1px rgba(204, 204, 204, 0.6));
+     filter: drop-shadow(0 0 1px #ccf);
 }
 
 select:hover {
-     color: #111;
+     color: #19191f;
 }
 
 select:hover, select:active, select:focus {
@@ -329,13 +347,14 @@ h2, h3 {
      padding: 9px 10px 7px 30px;
      border: 1px solid #7778bf;
      border-radius: 2px 2px 0 0;
-     background: linear-gradient(to bottom, #fff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), linear-gradient(to right, #fff 5%, rgba(231, 231, 255, 0.8) 15%) #fff !important;
+     background: #fcfcff;
+     background: linear-gradient(to bottom, #fcfcff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), linear-gradient(135deg, #fcfcff 5%, rgba(231, 231, 255, 0.8) 15%) #fff !important;
      font-size: 11.5pt;
      text-transform: uppercase;
      letter-spacing: 0.08em;
      word-spacing: 0.1em;
      margin: 10px 0 -1px;
-     color: #31334f;
+     color: #41465f;
      box-shadow: inset 0 0 0 1px #fff;
      position: relative;
 }
@@ -347,27 +366,27 @@ h2, h3 {
 /* title images */
 
 #messages h2 {
-     background: url(/themes/console/images/info/logs.png) left 5px center no-repeat, linear-gradient(to bottom, #fff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), linear-gradient(to right, #fff 15%, rgba(231, 231, 255, 0.8) 35%) #fff !important;
+     background: url(/themes/console/images/info/logs.png) left 5px center no-repeat, linear-gradient(to bottom, #fcfcff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), linear-gradient(135deg, #fcfcff 15%, rgba(231, 231, 255, 0.8) 35%) #fff !important;
 }
 
 #globalTunnelControl h2 {
-     background: url(/themes/console/images/info/control.png) left 5px center no-repeat, linear-gradient(to bottom, #fff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), linear-gradient(to right, #fff 15%, rgba(231, 231, 255, 0.8) 35%) #fff !important;
+     background: url(/themes/console/images/info/control.png) left 5px center no-repeat, linear-gradient(to bottom, #fcfcff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), linear-gradient(135deg, #fcfcff 15%, rgba(231, 231, 255, 0.8) 35%) #fff !important;
 }
 
 #servers h2 {
-     background: url(/themes/console/images/info/server.png) left 5px center no-repeat, linear-gradient(to bottom, #fff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), linear-gradient(to right, #fff 15%, rgba(231, 231, 255, 0.8) 35%) #fff !important;
+     background: url(/themes/console/images/info/server.png) left 5px center no-repeat, linear-gradient(to bottom, #fcfcff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), linear-gradient(135deg, #fcfcff 15%, rgba(231, 231, 255, 0.8) 35%) #fff !important;
 }
 
 #clients h2 {
-     background: url(/themes/console/images/info/client.png) left 5px center no-repeat, linear-gradient(to bottom, #fff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), linear-gradient(to right, #fff 15%, rgba(231, 231, 255, 0.8) 35%) #fff !important;
+     background: url(/themes/console/images/info/client.png) left 5px center no-repeat, linear-gradient(to bottom, #fcfcff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), linear-gradient(135deg, #fcfcff 15%, rgba(231, 231, 255, 0.8) 35%) #fff !important;
 }
 
 #tunnelEditPage h2, #tunnelEditPage h3, #registration h2, #registration h3 {
-     background: url(/themes/console/images/info/configure.png) left 5px center no-repeat, linear-gradient(to bottom, #fff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), linear-gradient(to right, #fff 15%, rgba(231, 231, 255, 0.8) 35%) #fff !important;
+     background: url(/themes/console/images/info/configure.png) left 5px center no-repeat, linear-gradient(to bottom, #fcfcff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), linear-gradient(135deg, #fcfcff 15%, rgba(231, 231, 255, 0.8) 35%) #fff !important;
 }
 
 #wizardPanel h2 {
-     background: url(/themes/console/images/info/wizard.png) left 5px center no-repeat, linear-gradient(to bottom, #fff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), linear-gradient(to right, #fff 15%, rgba(231, 231, 255, 0.8) 35%) #fff !important;
+     background: url(/themes/console/images/info/wizard.png) left 5px center no-repeat, linear-gradient(to bottom, #fcfcff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), linear-gradient(135deg, #fcfcff 15%, rgba(231, 231, 255, 0.8) 35%) #fff !important;
 }
 
 #messages h2, #globalTunnelControl h2, #servers h2, #clients h2, #tunnelEditPage h2, #tunnelEditPage h3, #registration h2, #registration h3, #wizardPanel h2 {
@@ -397,13 +416,12 @@ h2, h3 {
 th {
      background: #eef url(images/header.png) center center repeat-x;
      background: linear-gradient(to bottom, #fff 50%, rgba(238, 238, 255, 0.2) 50%, #eef 100%) !important;
-     color: #333;
      padding: 6px 5px;
      text-align: left;
      border-top: 1px solid #7778bf;
      border-bottom: 1px solid #7778bf;
      font-size: 10pt;
-     color: #31334f;
+     color: #41465f;
 }
 
 th::first-letter {
@@ -423,11 +441,11 @@ a:hover, a:focus, a:active, button:hover, button:focus, button:active, select:ho
 }
 
 .tunnelConfig tr, #wizardPanel tr, #registration tr {
-     background: repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(240, 240, 255, 0.3) 3px, #fff 5px) #fff;
+     background: repeating-linear-gradient(135deg, rgba(252,252,255,0.5) 2px, rgba(240, 240, 255, 0.3) 3px, #fafaff 5px) #fafaff;
 }
 
 #wizardPanel tr:first-child {
-     background: #fff;
+     background: #fafaff;
 }
 
 td {
@@ -466,7 +484,7 @@ td.infohelp {
 }
 
 .tunnelProperties {
-     background: #fff !important;
+     background: #fafaff !important;
 }
 
 .tunnelProperties td {
@@ -475,7 +493,7 @@ td.infohelp {
 
 .tunnelProperties:hover {
      background: #ffd !important;
-     color: #111;
+     color: #19191f;
 }
 
 .newTunnel {
@@ -549,8 +567,8 @@ th.tunnelControl {
      text-align: right;
      padding: 7px 5px;
      background: #fff;
-     background: linear-gradient(to bottom, #fff, #eef);
-     background: linear-gradient(to bottom, #fff 50%, rgba(220,220,255,0.3)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px) !important;
+     background: linear-gradient(to bottom, #fafaff, #eef);
+     background: linear-gradient(to bottom, #fafaff 50%, rgba(220,220,255,0.3)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px) !important;
      border-top: 1px solid #7778bf !important;
      box-shadow: inset 0 0 0 1px #fff;
 }
@@ -691,7 +709,7 @@ td.blankColumn {
 }
 
 table {
-     background: #fff;
+     background: #fafaff;
 }
 
 table#statusMessages textarea, table#statusMessages textarea:active {
@@ -699,7 +717,6 @@ table#statusMessages textarea, table#statusMessages textarea:active {
      border: 0;
      box-shadow: none;
      height: 80px;
-     font-size: 9pt;
 }
 
 #tunnelMessages {
@@ -745,16 +762,28 @@ input.tunnelName, input.tunnelDescription, #userAgents {
 
 .username, .password {
      width: 200px;
+     padding-left: 22px;
+     background-blend-mode: luminosity;
 }
 
 .username {
-     background: url(/themes/console/images/buttons/user.png) 3px center no-repeat #fff;
-     padding-left: 22px;
+     background: url(/themes/console/images/buttons/user.png) 3px center no-repeat #fafaff;
 }
 
 .password {
+     background: url(/themes/console/images/buttons/password.png) 3px center no-repeat #fafaff;
+}
+
+.username:focus, .password:focus {
+     background-blend-mode: normal;
+}
+
+.username:focus {
+     background: url(/themes/console/images/buttons/user.png) 3px center no-repeat #fff;
+}
+
+.password:focus {
      background: url(/themes/console/images/buttons/password.png) 3px center no-repeat #fff;
-     padding-left: 22px;
 }
 
 .proxyList {
@@ -796,6 +825,7 @@ input.tunnelName, input.tunnelDescription, #userAgents {
      min-width: 150px;
      text-align: right;
      white-space: nowrap;
+     color: #41465f;
 }
 
 #wizardTunnelTypes td:last-child {
@@ -813,7 +843,7 @@ input.tunnelName, input.tunnelDescription, #userAgents {
 }
 
 #wizardTunnelTypes tr:last-child {
-     background: #fff;
+     background: #fafaff;
 }
 
 #wizardPanel #name, #wizardPanel #description {
@@ -848,6 +878,7 @@ input.tunnelName, input.tunnelDescription, #userAgents {
      font-weight: bold;
      text-align: right;
      margin-right: 10px;
+     color: #41465f;
 }
 
 #wizardPanel select {
@@ -898,11 +929,11 @@ textarea[name="accessList"], #hostField, #localDestination, .authentication {
 }
 
 .tunnelDestination b, .tunnelDescription b {
-     color: #444;
+     color: #41465f;
 }
 
 td.tunnelDestination, td.tunnelDescription {
-     background: linear-gradient(to right, #fff, rgba(255,255,255,0.1) 50%, #eef);
+     background: linear-gradient(to right, #fafaff, rgba(255,255,255,0.1) 50%, #eef);
 }
 
 #oldDestFile {
@@ -991,6 +1022,10 @@ th {
      font-size: 10.5pt;
 }
 
+textarea#statusMessages {
+     font-size: 9pt;
+}
+
 .statusNotRunning, .statusRunning, .statusStarting {
      background-size: auto 18px;
 }
@@ -1027,6 +1062,7 @@ _:-ms-lang(x), td.tunnelDestination, td.tunnelDescription {
 @media screen and (-webkit-min-device-pixel-ratio:0) { /* fixes chrome/blinkoverflow issue */
 select {
      white-space: normal;
+     padding: 5px 16px 5px 6px !important;
 }
 }
 
@@ -1066,10 +1102,10 @@ input[type="text"] + label {
      -moz-user-select: all;
      -webkit-user-select: all;
      user-select: all;
-     border: 1px solid #999;
-     background: #fff;
+     border: 1px solid #999daf;
+     background: #fafaff;
      border-radius: 2px;
-     box-shadow: inset 2px 2px 1px rgba(204, 204, 204, 0.6);
+     box-shadow: inset 1px 1px 1px rgba(204, 204, 204, 0.6);
 }
 
 .displayText:empty, .displayText:empty:hover, .displayText:empty:focus {
@@ -1083,13 +1119,18 @@ input[type="text"] + label {
 }
 
 .displayText:hover, .displayText:focus {
+     box-shadow: 0 0 1px #89f;
+     background: #ffe;
+     outline: none;
+}
+
+.displayText:focus {
      overflow: auto;
      text-overflow: clip;
      margin: 0.5px 5px;
      padding: 2px 4px;
-     box-shadow: 0 0 1px #89f;
-     background: #ffe;
-     outline: none;
+     background: #fff;
+     border: 1px solid #676c7f;
 }
 
 #registration .displayText {
@@ -1133,3 +1174,82 @@ input[type="text"] + label {
 }
 }
 
+/* custom radios/checkboxes for chrome/blink  */
+
+@media screen and (-webkit-min-device-pixel-ratio: 0) and (min-resolution:.001dpcm) {
+
+label {
+     vertical-align: middle !important;
+}
+
+input[type="checkbox"], input[type="checkbox"]:checked, input[type="checkbox"][disabled], input[type="checkbox"][disabled]:checked {
+     background: #f8f8ff;
+     width: 19px !important;
+     height: 19px !important;
+     box-shadow: inset 1px 1px 1px rgba(204, 204, 204, 0.6);
+     border-radius: 2px;
+     -webkit-appearance: inherit;
+     border: 1px solid #999daf !important;
+     position: relative;
+     box-sizing: border-box;
+     filter: drop-shadow(0 0 1px #ccf);
+     vertical-align: middle !important;
+}
+
+input[type="checkbox"]:checked::before {
+     position: absolute;
+     top: 1px;
+     left: 1px;
+     content: "\2714";
+     border-radius: 1px;
+     font-size: 15pt;
+     color: #41465f;
+     line-height: 80%;
+     font-family: sans-serif;
+     overflow: hidden;
+     width: 16px;
+     height: 16px;
+}
+
+input[type="radio"], input[type="radio"]:checked, input[type="radio"][disabled], input[type="radio"][disabled]:checked {
+     background: #f8f8ff;
+     width: 19px !important;
+     height: 19px !important;
+     box-shadow: inset 0 0 2px #7778bf;
+     border-radius: 50%;
+     -webkit-appearance: none;
+     border: 1px solid #999daf !important;
+     position: relative;
+     box-sizing: border-box;
+     filter: drop-shadow(0 0 1px #ccf);
+     vertical-align: middle !important;
+}
+
+input[type="radio"]:checked::before {
+     content: "";
+     position: absolute;
+     border-radius: 50%;
+     left: 4px !important;
+     top: 4px !important;
+     width: 9px;
+     height: 9px;
+     background: #41465f;
+}
+
+input[type="checkbox"]:hover, input[type="radio"]:hover, input[type="checkbox"]:focus, input[type="radio"]:focus {
+     background: #fff;
+     width: 19px !important;
+     height: 19px !important;
+     filter: drop-shadow(0 0 3px #89f) !important;
+}
+
+input[type="checkbox"][disabled], input[type="radio"][disabled], input[type="checkbox"][disabled]:hover, input[type="radio"][disabled]:hover,
+input[type="checkbox"][disabled]:checked, input[type="radio"][disabled]:checked, input[type="checkbox"][disabled]:checked:hover, input[type="radio"][disabled]:checked:hover {
+     filter: none !important;
+     box-shadow: none !important;
+     opacity: 0.5;
+}
+}
+
+/* end custom radios/checkboxes */
+
diff --git a/installer/resources/themes/console/light/mobile.css b/installer/resources/themes/console/light/mobile.css
index 92834aedbf96758bcfa2642d3997a55fd9ebbc70..078ea6ba7cc2196f024cb449b7ddb5d75482e31e 100644
--- a/installer/resources/themes/console/light/mobile.css
+++ b/installer/resources/themes/console/light/mobile.css
@@ -1,21 +1,23 @@
 /* Console Theme "Light" - Mobile Override */
 
-div.routersummaryouter {
+.routersummaryouter {
      float: none;
      margin: 0 !important;
      position: relative;
      width: auto;
 }
 
-div.routersummary {
+.routersummary {
      float: none;
      width: auto;
      max-width: 600px;
      margin: 0 auto -6px;
+     padding-left: 0;
+     padding-right: 0;
 }
 
 @media screen and (min-width: 1500px) {
-div.routersummary {
+.routersummary {
      width: 600px !important;
 }
 
@@ -24,25 +26,55 @@ div.routersummary {
 }
 }
 
+div[style="height: 36px;"] + a, a[href="/summaryframe"] {
+     display: inline-block;
+     margin: 10px 0 -2px;
+     padding: 2px 10px;
+     border-radius: 15px;
+     border: 1px solid #7778bf;
+     background: #fafaff;
+}
+
+a[href="/summaryframe"] {
+     margin: 5px 0 2px;
+}
+
 #xhr {
      margin-top: 9px !important;
 }
 
+.routersummary h3, .routersummary h4, .routersummary hr {
+     margin-left: 1px;
+     margin-right: 1px;
+}
+
+.routersummary h3 {
+     padding-top: 5px;
+     padding-bottom: 5px;
+}
+
+.routersummary h3, .routersummary h3 a {
+     font-size: 11pt !important;
+}
+
 .routersummary hr:first-child {
-     margin-bottom: 11px;
+     margin-bottom: 8px;
 }
 
 .routersummary td, .routersummary h4, .routersummary a {
      font-size: 9pt !important;
 }
 
-div.routersummary table, table[id^="sb_"] {
+.routersummary table, table[id^="sb_"], #sb_services, #sb_internals, #sb_advanced {
      width: 100% !important;
-     margin: -7px 0 -4px !important;
+     margin: -9px 0 -7px !important;
+     border-radius: 4px;
+     border-collapse: separate;
+     border-spacing: 0;
 }
 
-table[id^="sb_"] td {
-     padding: 3px 2px;
+table[id^="sb_"] td, #sb_localtunnels td {
+     padding: 3px 6px !important;
 }
 
 table[id^="sb_"] tr:nth-child(even) td {
@@ -57,15 +89,25 @@ table[id^="sb_"] tr:nth-child(odd) td {
 
 #sb_services {
      text-align: center;
+     border-collapse: separate !important;
+     margin: -12px 0 -8px !important;
+}
+
+#sb_services td {
+     border-radius: 4px;
 }
 
 #sb_services a {
      display: inline-block;
      width: 24% !important;
      min-width: 100px;
-     box-sizing: border-box;
      white-space: nowrap;
      border: none !important;
+     border-radius: 4px;
+     padding: 4px 10px 4px 30px !important;
+     background-position: 8px center !important;
+     margin: 0 3px;
+     background-color: transparent !important;
 }
 
 .routersummary button[type="submit"], .routersummary button[type="cancel"] {
@@ -75,20 +117,25 @@ table[id^="sb_"] tr:nth-child(odd) td {
 }
 
 h1 {
-     margin: 14px 0 -1px;
+     margin: 14px 0 -11px;
      min-width: 0;
 }
 
-div.news {
-     margin: 0 0 -11px;
+.news, .news#news {
+     margin: 10px 0 -11px;
      min-width: 0;
 }
 
-div.main {
+.main {
      margin: 10px 0 0;
      min-width: 0;
 }
 
+.newsentry + hr + #newsStatus, .newsentry + hr + #newsStatus + #newsDisplay {
+     margin-top: -3px !important;
+     margin-bottom: -2px !important;
+}
+
 .sorry {
      margin-left: 0 !important;
 }
diff --git a/installer/resources/themes/console/midnight/console.css b/installer/resources/themes/console/midnight/console.css
index b1b3044a36500f90ebd30fd055cf57e319282528..2e32d66ccc6a94719bd5ca14bbb87f15f278cec1 100644
--- a/installer/resources/themes/console/midnight/console.css
+++ b/installer/resources/themes/console/midnight/console.css
@@ -46,6 +46,7 @@ div.clearer {
 
 ::selection {
      background: #22296f !important;
+     background: rgba(34, 41, 111, 0.9) !important;
      color: white;
 }
 
@@ -862,6 +863,7 @@ button::-moz-focus-inner, input[type="submit"]::-moz-focus-inner, input[type="re
 
 .routersummary .reload:hover, .routersummary .reload:focus, .routersummary .reload[value$="restart"]:hover, .routersummary .reload[value$="restart"]:focus {
      background: #000 url(/themes/console/images/buttons/restart_hover.png) center center no-repeat !important;
+     background: url(/themes/console/images/buttons/shutdown_hover.png) 37% 55% no-repeat, url(/themes/console/images/buttons/restart_hover.png) 63% 55% no-repeat,  #000 !important;
 }
 
 .routersummary .reload:active, .routersummary .reload[value$="restart"]:active {
@@ -1143,6 +1145,8 @@ div.logo hr {
 
 /* end proxy errors */
 
+/* sidebar */
+
 .routersummaryouter {
      float: left;
      width: 200px;
@@ -1276,6 +1280,19 @@ div.logo hr {
      background-color: transparent !important;
 }
 
+.routersummary td {
+     padding: 0 2px 0 2px;
+     background-image: none !important;
+     border: 0 !important;
+     word-spacing: -0.1em;
+     max-width: 180px;
+}
+
+.routersummary td:first-child {
+     max-width: 90px;
+     text-transform: capitalize;
+}
+
 #sb_general, #sb_shortgeneral, #sb_bandwidth, #sb_peers, #sb_tunnels, #sb_queue {
      margin-top: -6px !important;
      margin-bottom: -5px !important;
@@ -1289,17 +1306,25 @@ div.logo hr {
      min-height: 16px !important;
 }
 
+#sb_general td, #sb_shortgeneral td {
+     white-space: nowrap;
+}
+
 #sb_localtunnels {
      width: 200px !important;
      border-collapse: separate;
      border-spacing: 0;
-     margin-top: -5px !important;
-     margin-bottom: -9px !important;
+     margin-top: -6px !important;
+     margin-bottom: -8px !important;
 }
 
 #sb_localtunnels a {
      display: inline-block;
      width: 100%;
+     max-width: 156px;
+     overflow: hidden;
+     text-overflow: ellipsis;
+     white-space: nowrap;
 }
 
 #sb_localtunnels img {
@@ -1342,9 +1367,10 @@ div.logo hr {
      padding: 1px 3px;
 }
 
-#sb_services a:hover, #sb_internals a:hover, #sb_advanced a:hover, #sb_localtunnels tr:hover, #sb_localtunnels tr:hover a, .news a:hover, #console a:hover, tt a:hover {
+#sb_services a:hover, #sb_internals a:hover, #sb_advanced a:hover, #sb_localtunnels tr:hover, #sb_localtunnels tr:hover a,
+.news a:hover, #console a:hover, tt a:hover {
      background: #652787;
-     color: #fff; !important;
+     color: #fff !important;
      border-radius: 2px;
 }
 
@@ -1362,10 +1388,30 @@ div.logo hr {
      border: 1px solid #241f69;
      border-radius: 2px;
      box-shadow: inset 0 0 0 1px #000;
-     margin: 5px -4px -3px;
+     margin: -3px -6px -5px;
      padding: 5px 3px;
 }
 
+@media screen and (-webkit-min-device-pixel-ratio:0) {
+.sb_notice {
+     margin-bottom: -6px !important;
+}
+}
+
+#sb_warning {
+     border-bottom: 1px solid #443da0;
+     margin-left: -10px !important;
+     margin-right: -10px !important;
+}
+
+#sb_warning + .sb_notice {
+     margin-top: 12px;
+}
+
+#sb_warning + hr {
+     margin-top: 6px !important;
+}
+
 p:empty + .sb_notice {
      margin-top: 10px;
 }
@@ -1403,12 +1449,18 @@ p:empty + .sb_notice {
 
 .routersummary a:link, .routersummary a:visited {
      padding: 0 2px;
+     word-spacing: 0;
 }
 
-div.routersummary a:hover {
+.routersummary a:hover {
      color: #652787;
 }
 
+.routersummary hr:last-child {
+     margin-top: 5px;
+     margin-bottom: -5px !important;
+}
+
 /* "experimental" custom sidebar links for apps
 
 #sb_services {
@@ -1486,67 +1538,50 @@ div.routersummary a:hover {
 
 /* end custom sidebar links */
 
-.routersummary td {
-     padding: 0 2px 0 2px;
-     background-image: none !important;
-     border: 0 !important;
-     word-spacing: -0.1em;
-     max-width: 180px;
-     text-overflow: ellipsis; /* force ellipsis rather than truncate rare, overlong text strings eg. Swedish sidepanel */
-}
-
-.routersummary td:first-child {
-     max-width: 90px;
-     overflow: hidden;
-     text-transform: capitalize;
-}
+/* sidebar news */
 
-.routersummary hr:last-child {
-     margin-top: 5px;
-     margin-bottom: -5px !important;
+.sb_newsheadings {
+     width: 192px;
+     margin-left: 0;
+     margin-top: -6px !important;
+     margin-bottom: -8px !important;
+     text-align: right;
 }
 
-.newsheadings {
-     text-align: center;
-     margin: -3px 0 -5px 10px;
-     word-spacing: 0;
+.sb_newsheadings table {
+     margin-bottom: 3px !important;
 }
 
-div.newsheadings li {
-     list-style: none outside url(images/newsbullet_mini.png);
-     margin: 0 -6px 2px 4px;
-     line-height: 110%;
-     text-transform: capitalize;
+.sb_newsheadings a {
+     display: inline-block;
+     padding: 0 3px 0 0;
+     line-height: 140%;
 }
 
-div.tunnels {
-     padding-top: 3px !important;
-     margin-left: -4px;
-     text-align: center;
+.sb_newsheadings td {
+     padding: 4px 5px 4px 20px;
+     text-align: left;
+     background: url(images/newsbullet_mini.png) 4px center no-repeat !important;
+     border-bottom: 1px solid #113 !important;
 }
 
-.tunnels table {
-     margin: -5px 0 -5px -3px !important;
+.sb_newsheadings tr:last-child td {
+     border-bottom: none !important;
 }
 
-.tunnels td {
-     padding: 1px 0 1px 0;
-     text-transform: capitalize;
-}
+/* end sidebar news */
+/* end sidebar */
 
-.tunnels td:first-child {
-     width: 16px;
-     text-align: left;
-     padding-right: 2px;
-}
+/* console error messages */
 
-.tunnels td:last-child {
-     text-align: right;
-     padding-right: 1px;
+img[src="/themes/console/images/i2plogo.png"], img[src="/themes/console/images/i2plogo.png"]:hover,
+img[src="/themes/console/images/i2plogo.png"]:focus, a:active img[src="/themes/console/images/i2plogo.png"] {
+     margin-top: 6px !important;
+     margin-left: -1px !important;
+     filter: sepia(100%) invert(100%) !important;
+     width: 180px !important;
 }
 
-/* console error messages */
-
 .sorry {
      margin: -1px 5px 10px 215px;
      padding: 20px 20px 20px 75px;
@@ -1559,7 +1594,7 @@ div.tunnels {
      background-repeat:no-repeat;
      box-shadow: inset 0 0 0 1px #320951;
      word-wrap: break-word;
-     min-width: 555px;
+     min-width: 545px;
      color: #c9ceff;
      font-size: 10pt;
 }
@@ -1568,8 +1603,38 @@ div.sorry hr {
      color: #c9ceff;
      background: #c9ceff;
      height: 1px;
-     border: 1px solid #c9ceff;
+     border-top: 1px solid #c9ceff;
      margin: 10px 0;
+     opacity: 0.7;
+}
+
+#warning2 {
+     min-width: 580px;
+     background: #001;
+     background: #000 url(images/earth.jpg) no-repeat scroll bottom right !important;
+     background-size: auto 180px !important;
+     margin-top: -28px;
+     margin-bottom: 5px;
+     padding: 20px 30px 10px;
+     font-size: 9pt;
+}
+
+#warning2 h3 {
+     margin: -21px -31px 10px;
+     padding: 10px;
+     border-width: 1px;
+     box-shadow: inset 0 0 0 1px #320951;
+}
+
+#warning2 p {
+     line-height: 130% !important;
+}
+
+#warning2 b {
+     margin-right: 5px;
+     display: inline-block;
+     min-width: 140px;
+     text-align: right;
 }
 
 /* end error msgs */
@@ -1639,7 +1704,7 @@ div.sorry hr {
 }
 
 .news .newsentry:first-child {
-     margin-top: -7px !important;
+     margin-top: -10px !important;
 }
 
 .news h4 {
@@ -1672,6 +1737,10 @@ div.sorry hr {
      margin: 18px 5px; /* positional parity with homepage news */
 }
 
+#newsStatus, #news #newsDisplay a {
+     font-size: 8pt;
+}
+
 #newsStatus {
      float: left;
      color: #c9ceff;
@@ -1683,11 +1752,51 @@ div.sorry hr {
 }
 
 #news #newsDisplay {
-     margin-right: -5px;
+     margin-right: -10px;
 }
 
-#news #newsDisplay a {
-     padding: 2px 3px;
+#news #newsDisplay, #graphopts {
+     color: transparent;
+}
+
+#news #newsStatus {
+     padding-top: 2px;
+     margin-left: -10px;
+}
+
+#news #newsDisplay {
+     padding: 0 0 3px;
+}
+
+#newsStatus, #news #newsDisplay, #news #newsDisplay a, #graphopts a {
+     display: inline-block;
+}
+
+#news #newsDisplay a, #graphopts a {
+     border: 1px solid #005;
+     margin: 0 -2px;
+     padding: 1px 10px !important;
+     background: #002;
+     background: rgba(0,0,64,0.4);
+     border-radius: 15px;
+     filter: drop-shadow(0 0 1px rgba(0,0,64,0.8));
+}
+
+#news #newsDisplay a:hover, #news #newsDisplay a:focus, #graphopts a:hover, #graphopts a:focus {
+     background: #030;
+     background: linear-gradient(to bottom, #005 50%, #001 50%);
+     border: 1px solid #006;
+     text-shadow: 0 1px 1px #000;
+}
+
+#news #newsDisplay a:active, #graphopts a:active {
+     background: #004;
+     box-shadow: inset 2px 2px 2px #000;
+}
+
+.news #newsDisplay, .news #newsStatus {
+     margin-top: 3px !important;
+     display: inline-block;
 }
 
 .newsAuthor {
@@ -1959,7 +2068,7 @@ div.widepanel h3 {
 .graphspanel a img {
      border: 1px solid #443da0;
      padding: 3px;
-     margin: 5px;
+     margin: 5px 4px;
      text-align: center !important;
      background: #000;
      opacity: 0.9;
@@ -1969,7 +2078,6 @@ div.widepanel h3 {
 .graphspanel a img:hover {
      border: 1px solid #652787;
      padding: 3px;
-     margin: 5px;
      text-align: center !important;
      background: #000;
      opacity: 1;
@@ -1988,7 +2096,7 @@ div.widepanel h3 {
 .graphspanel img:not(old) {
      filter: invert(1) hue-rotate(180deg);
      background: #fff;
-     border: 1px solid #fff;
+     border: 1px solid #ddf;
 }
 
 .graphspanel a img:not(old) {
@@ -2010,19 +2118,44 @@ div.widepanel h3 {
      padding: 10px 10px 15px;
 }
 
-p#graphopts {
-     margin-top: 30px !important;
+#graphopts {
+     margin: 30px -10px 0 !important;
+     padding: 10px 0 8px;
+     text-align: center;
+     background: #001;
+     background: rgba(0,0,16,0.5);
+     border-top: 1px solid #443da0;
+}
+
+#graphopts a {
+     margin: 3px -2px;
+     background: #001;
+     border-color: #003;
+     padding: 0 10px !important;
+     text-transform: capitalize;
+}
+
+#graphopts a, #graphopts a:visited {
+     color: #54508f;
+}
+
+#graphopts a:hover, #graphopts a:visited:hover, #graphopts a:focus {
+     color: #6762af;
+}
+
+#graphopts a:active {
+     color: #2d277f !important;
 }
 
 h3#graphinfo {
-     margin-top: 0;
+     margin-top: 10px;
      border-radius: 0 !important;
      text-transform: capitalize;
      letter-spacing: normal;
      word-spacing: normal;
 }
 
-.graphspanel p:last-child {
+#graphopts + p {
      display: none;
 }
 
@@ -2362,6 +2495,7 @@ h3, h3.welcome, div.news h3 {
 
 div.news h3 {
      padding: 6px 10px 6px 0;
+     box-shadow: none;
 }
 
 h4 {
@@ -2373,7 +2507,7 @@ h4 {
      font-size: 11pt;
 }
 
-h1, h2, h3:not([id*="help"]), h4.app, h4.app2, div.routersummary h3, .confignav {
+h1, h2, h3:not([id*="help"]), h4.app, h4.app2, .routersummary h3, .confignav {
      background: linear-gradient(to bottom, #191729 0%, #000 50%) !important;
 }
 
@@ -2381,7 +2515,6 @@ h2, h3, h4, .confignav {
      box-shadow: inset 0 0 0 1px #000;
 }
 
-
 .news h3, #newspage h3 {
      padding-left: 30px !important;
      text-align: left !important;
@@ -2442,12 +2575,25 @@ h2, h3, h4, .confignav {
      margin: 5px 0 -5px;
 }
 
+div[lang="es"] li, div[lang="pt"] li, div[lang="sv"] li, div[lang="zh"] li {
+     list-style: none;
+     text-align: justify;
+}
+
+div[lang="pt"] li br {
+     display: none;
+}
+
+div[lang="sv"] li::first-letter {
+     text-transform: uppercase !important;
+}
+
 div[lang="de"] .twocol, div[lang="pt"] .twocol, div[lang="es"] .twocol, div[lang="sv"] .twocol {
      background: rgba(0,0,48,0.3);
      border: 1px solid #002;
      border-radius: 2px;
      box-shadow: inset 0 0 0 1px #000;
-     padding: 10px 10px 0;
+     padding: 10px;
      margin: 10px -5px 5px !important;
 }
 
@@ -2688,15 +2834,15 @@ form[action="events"] {
      background: #000;
 }
 
-.smallhead {
+.smallhead th {
      font-size: 8pt
 }
 
-.smallhead a:hover {
+.smallhead th a:hover {
      text-decoration: none;
 }
 
-.smallhead a img:hover {
+.smallhead th a img:hover {
      filter: drop-shadow(0 0 1px #652787);
 }
 
@@ -3430,7 +3576,6 @@ table#reseedconfig textarea {
 
 /* /configpeer */
 
-
 ul#banlist {
      margin-top: -2px;
 }
@@ -3445,16 +3590,16 @@ ul#banlist {
      padding: 10px 10px 10px 0;
      margin: -1px 0 13px;
      -moz-column-count: auto;
-     -moz-column-width: 300px;
-     -moz-column-gap: 10px;
+     -moz-column-width: 260px;
+     -moz-column-gap: 8px;
      -moz-column-rule: 1px dotted #443da0;
      -webkit-column-count: auto;
-     -webkit-column-width: 300px;
-     -webkit-column-gap: 10px;
+     -webkit-column-width: 260px;
+     -webkit-column-gap: 8px;
      -webkit-column-rule: 1px dotted #443da0;
      column-count: auto;
-     column-width: 300px;
-     column-gap: 10px;
+     column-width: 260px;
+     column-gap: 8px;
      column-rule: 1px dotted #443da0;
 }
 
@@ -3468,7 +3613,6 @@ ul#banlist {
      margin: 0 10px 3px;
      padding-top: 3px;
      min-width: 250px;
-     min-height: 46px;
      width: 88%;
      padding-bottom: 5px;
      break-inside: avoid;
@@ -4427,6 +4571,79 @@ th > img[src^="/imagegen"] { /* scale down header images */
      margin-bottom: 9px;
 }
 
+/* leasesets */
+
+.netdb_leases, .netdb_leases li, .netdb_leases li:first-child {
+     margin: 0 !important;
+}
+
+.netdb_leases {
+     columns: auto 420px !important;
+     column-rule: 1px solid #114;
+     column-gap: 1em;
+}
+
+.netdb_leases li {
+     list-style: none;
+     display: inline-block;
+     padding: 1px 5px 1px 0 !important;
+     margin: 1px 0;
+     min-width: 400px;
+}
+
+.netdb_leases li b:first-child {
+     display: inline-block;
+     min-width: 80px !important;
+     text-align: right;
+     margin: 0 !important;
+     padding: 0 !important;
+}
+
+.netdb_gateway {
+     margin-left: 0 !important;
+     margin-right: -8px !important;
+     vertical-align: bottom;
+}
+
+.netdb_gateway img {
+     vertical-align: bottom;
+}
+
+.netdb_tunnel {
+     display: inline-block;
+     background: #003;
+     padding: 0 4px;
+     margin-left: 4px;
+     margin-right: -4px;
+     border-radius: 2px;
+}
+
+.netdb_leases .tunnel_id {
+     min-width: 74px;
+}
+
+.netdb_leases .tunnel_peer {
+     min-width: 64px;
+}
+
+.netdb_leases .tunnel_peer tt, .netdb_leases .tunnel_peer tt a {
+     font-size: 8pt !important;
+     font-weight: bold !important;
+}
+
+.netdb_leases .tunnel_peer tt, .netdb_leases .tunnel_peer a {
+     letter-spacing: 0.1em !important;
+     margin: 0 !important;
+     padding: 0 !important;
+}
+
+.main li .netdb_expiry {
+     font-weight: normal;
+     text-transform: lowercase;
+     font-style: italic;
+}
+
+/* end leasesets */
 /* end netdb */
 
 /* logs */
@@ -4667,15 +4884,16 @@ font[color="#000099"] { /* info */
      border: 1px inset #000;
 }
 
-a[href^="configpeer?peer"] {
+a[href^="configpeer?peer"]:not(old) {
      font-size: 0;
      filter: drop-shadow(0 0 1px #777);
 }
 
 a[href^="configpeer?peer"]::after {
      content: url(/themes/console/images/buttons/edit.png);
-     vertical-align: bottom;
-     margin-left: 4px;
+     vertical-align: top;
+     margin: 0 0 0 4px !important;
+     line-height: 0;
 }
 
 a[href^="configpeer?peer"]:hover {
@@ -4725,6 +4943,23 @@ table#profile_defs td, table#thresholds td {
      width: 16px;
 }
 
+#capabilities_key td:nth-child(2) b, #capabilities_key td:nth-child(4) b {
+     display: inline-block;
+     min-width: 16px;
+     background: #003;
+     border-radius: 2px;
+     padding: 1px 2px;
+     text-align: center;
+}
+
+#capabilities_key td:nth-child(2), #capabilities_key td:nth-child(4) {
+     text-align: right;
+}
+
+#capabilities_key td[colspan="5"] {
+     text-align: left;
+}
+
 #profile_defs b {
      text-transform: capitalize;
 }
@@ -4832,22 +5067,161 @@ a[href^="/profiles"] ~ table > tbody > tr > th:first-child {
      text-align: center;
 }
 
-table#jardump { /* /jars */
+/* jardump */
+
+#jardump {
+     padding: 0;
+     overflow: auto;
+}
+
+table#jardump {
      margin-top: -1px;
      margin-bottom: 0;
      font-size: 8pt !important;
      border: none;
 }
 
-.main#jardump {
-     padding: 0;
-     overflow: auto;
+#jardump tt {
+     letter-spacing: -0.03em;
 }
 
-.main#jardump tt {
-     letter-spacing: -0.03em;
+#jardump hr {
+     margin: 1px 0 0;
+     width: 100%;
+     height: 1px;
+     background: #120f35;
+     display: block !important;
+}
+
+#jardump th {
+     border-right: none;
+     border-left: none;
+}
+
+#jardump th, #jardump td {
+     vertical-align: middle !important;
+     text-align: center !important;
+}
+
+#jardump th:first-child {
+     padding-left: 5px;
+}
+
+#jardump th:first-child, #jardump td:first-child {
+     text-align: left !important;
+}
+
+#jardump .subheading {
+     padding: 6px 5px !important;
+}
+
+#jardump .subheading code {
+     font-weight: bold;
+}
+
+.subheading.routerfiles {
+     background: url(/themes/console/images/eepsite.png) right 5px center no-repeat, linear-gradient(to right, #000, #000010 40%) !important;
+     background-size: 16px auto, 100% 100% !important;
+     background-blend-mode: luminosity, normal;
+}
+
+.subheading.pluginfiles {
+     background: url(/themes/console/images/plugin.png) right 5px center no-repeat, linear-gradient(to right, #000, #000010 40%) !important;
+     background-size: 16px auto, 100% 100% !important;
+     background-blend-mode: luminosity, normal;
+}
+
+#jardump td {
+     border-right: 1px inset #120f35;
+}
+
+#jardump td:nth-child(2) {
+     text-align: right !important;
+     font-style: italic;
+}
+
+#jardump td:last-child {
+     word-break: break-all;
+     text-align: left !important;
+     border-right: none;
+}
+
+#jardump tr:hover td {
+     border: 1px solid #115;
+     border-left: 1px solid transparent;
+     border-right: 1px solid transparent;
+}
+
+#jardump td:first-child {
+     padding-left: 22px;
+}
+
+#jardump td:first-child, #jardump tr:hover td:first-child {
+     background-image: url(/themes/console/images/info/box.png) !important;
+     background-position: 5px center;
+     background-repeat: no-repeat;
+     background-size: 16px 16px;
+}
+
+#jardump tr:hover td:first-child {
+     padding-left: 20px;
 }
 
+#jardump td:first-child b {
+     display: inline-block;
+     padding: 4px;
+     border-radius: 2px;
+     margin-right: 4px;
+     margin-left: 0;
+}
+
+#jardump tr:hover td:first-child b {
+     background: #004;
+     border: 1px solid #001;
+     margin-right: 0;
+     margin-left: 4px;
+     box-shadow: 0 0 1px 0 #001;
+     width: 95%;
+     width: calc(100% - 10px);
+}
+
+#jardump tr:hover hr {
+     background: transparent;
+}
+
+.revision, .sha256, .unsignedmod {
+     display: inline-block;
+     -moz-user-select: all;
+     -webkit-user-select: all;
+     user-select: all;
+}
+
+#jardump td:last-child {
+     word-break: break-all;
+     text-align: left !important;
+     border-right: none;
+     padding: 1px 0 1px;
+}
+
+.unsignedmod {
+     padding: 2px 3px 2px 4px;
+     margin: 0;
+}
+
+#jardump tr:hover .unsignedmod:not(:empty) {
+     background: #400;
+     color: #fff;
+     border-radius: 2px;
+}
+
+.revision:hover, .sha256:hover {
+     overflow: auto;
+     text-overflow: clip;
+}
+}
+
+/* end jardump */
+
 .main#certs {
      padding-top: 3px;
 }
@@ -4904,6 +5278,49 @@ table#jardump { /* /jars */
      line-height: 180%;
 }
 
+#proof p {
+     margin: 15px 5px;
+     padding: 30px 15px 0;
+     border: 1px solid #000;
+     border-radius: 2px;
+     box-shadow: inset 0 0 0 1px #225, 0 0 1px #000;
+     background: url(/themes/console/images/info/rosette.png) right 8px top 8px no-repeat #002;
+     background: url(/themes/console/images/info/rosette.png) right 8px top 8px no-repeat rgba(0,0,32,0.4);
+     background-blend-mode: color-burn;
+}
+
+#proof textarea {
+     line-height: 160%;
+     font-size: 9pt;
+     overflow: hidden;
+     word-break: break-all;
+     white-space: pre-wrap;
+     height: 200px;
+}
+
+#proof textarea:focus {
+     outline: none;
+}
+
+#oldconsole p {
+     margin: 17px 6px 15px;
+     padding: 10px 20px;
+     line-height: 200%;
+     border: 1px solid #000;
+     border-radius: 2px;
+     box-shadow: inset 0 0 0 1px #225, 0 0 1px #000;
+     background: #002;
+     background: rgba(0,0,32,0.4);
+}
+
+#oldconsole b {
+     display: inline-block;
+     min-width: 120px;
+     margin-right: 8px;
+     text-align: right;
+}
+
+
 .main#webmail {
      padding: 0;
      background: #000 !important;
@@ -4930,47 +5347,159 @@ table#jardump { /* /jars */
      margin: -5px 0;
 }
 
-.main#debug th {
-     text-align: left;
-     padding: 5px;
+/* debug */
+
+#debug h2, #debug h3 {
+     border-radius: 0;
 }
 
-.main#debug li:last-child {
-     padding-bottom: 0;
+#debug h2 {
+     padding: 10px !important;
+     background: url(/themes/console/images/info/debug.png) right 5px center no-repeat, linear-gradient(to bottom, #191729 0%, #000000 50%) !important;
+     background-size: 24px 24px, 100% 100% !important;
+     background-blend-mode: luminosity, normal;
 }
 
-.main#debug h2, .main#debug h3 {
-     border-radius: 0;
+#debug h2:first-child, #dht {
+     margin-top: 10px !important;
 }
 
-.main#debug h2 {
-     padding: 5px 10px;
+#debug h2 + table {
+     margin-top: -13px;
 }
 
-.main#debug h2:first-child {
-     margin-top: 10px !important;
+#debug th:last-child, #debug td:last-child {
+     text-align: right;
 }
 
-.main#debug h3 {
-     padding: 3px 8px;
-     font-size: 10pt;
+#debug td:last-child {
+     vertical-align: top;
+}
+
+#debug_portmapper {
+     margin-top: -4px !important;
+}
+
+#portmapper td {
+     padding: 5px 10px !important;
+}
+
+#portmapper th, #portmapper td {
+     text-align: left !important;
 }
 
-.main#debug h2 + table {
+#portmapper td:first-child {
+     font-weight: bold;
+}
+
+.debug_container {
+     margin-top: -11px;
+     border: 1px solid #443da0;
+     padding: 10px 15px;
+     background: #000008;
+}
+
+.debug_container:empty::after {
+     content: "None";
+     display: inline-block;
+     font-style: italic;
+}
+
+.buckets {
      margin-top: -13px;
+     margin-bottom: 9px;
+     max-height: 600px;
+     overflow: auto;
+     word-break: break-all;
 }
 
-.main#debug h2 + hr {
+.buckets hr {
      display: none;
 }
 
-div.footnote {
+.debug_container + h3, .debug_outboundsessions {
+     margin-top: -1px;
+}
+
+.debug_outboundsessions {
+     margin-top: -2px;
+}
+
+#debug h3.debug_outboundsessions, #debug h3.debug_inboundsessions {
+     padding: 6px 10px 6px 28px !important;
+     background-blend-mode: luminosity, normal;
+}
+
+#debug h3.debug_outboundsessions {
+     background: url(/themes/console/images/outbound.png) 6px center no-repeat, linear-gradient(to bottom, #191729 0%, #000 50%) !important;
+}
+
+#debug h3.debug_inboundsessions {
+     background: url(/themes/console/images/inbound.png) 6px center no-repeat, linear-gradient(to bottom, #191729 0%, #000 50%) !important;
+}
+
+.debug_version {
+     color: #060;
+}
+
+#debug h2 + h3, .buckets {
+     margin-top: -13px;
+}
+
+#debug h3 + table {
+     margin-top: -11px;
+}
+
+#debug th {
+     padding: 7px 10px !important;
+}
+
+#debug h3 {
+     border-width: 1px !important;
+     padding: 5px 10px !important;
+}
+
+#debug ul, .debug_targetinfo {
+     columns: 400px 2;
+     column-rule: 1px solid #113;
+     column-gap: 30px;
+     margin: 0 !important;
+     text-align: left;
+}
+
+.debug_targetinfo {
+     line-height: 140% !important;
+}
+
+.debug_container {
+     line-height: 160% !important;
+}
+
+.debug_container.buckets {
+     line-height: 140% !important;
+}
+
+.debug_targetinfo b {
+     margin-right: 3px;
+}
+
+#debug li {
+     display: inline-block;
+     text-align: left !important;
+     margin: 0 !important;
+     padding: 2px 0 !important;
+     min-width: 400px !important;
+}
+
+/* end debug */
+
+.footnote {
      text-align: right;
      font-size: 7pt;
      margin-bottom: 5px !important;
 }
 
-div.footnote hr {
+.footnote hr {
      margin: 10px 0 5px 0 !important;
      color: #443da0;
      background: #443da0;
@@ -5193,8 +5722,7 @@ div.app:hover .app img {
      line-height: 95%;
      text-transform: lowercase;
      border: none;
-     width: 130px;
-     min-width: 72px;
+     width: 150px;
      background: #001 url(images/titles.png) center center;
      background: linear-gradient(to bottom, #121225 50%, #000011 50%, #00000d 50%);
      border-radius: 0 0 2px 2px;
@@ -5215,7 +5743,7 @@ div.app:hover .app img {
 .applabel a, .applabel a:hover {
      text-decoration: none !important;
      outline: none;
-     max-width: 126px;
+     max-width: 144px;
      overflow: hidden;
      text-overflow: ellipsis;
      display: inline-block;
@@ -5254,7 +5782,7 @@ body.iframed {
      background: transparent url(/themes/console/images/transparent.gif) !important;
 }
 
-.iframed div.routersummaryouter {
+.iframed .routersummaryouter {
      display: none !important;
 }
 
@@ -6074,6 +6602,14 @@ p#sybilinfo {
      background-size: 28px 28px !important;
 }
 
+#floodfillconfig tr:nth-child(2) td {
+     padding: 10px 10px 10px 18px;
+}
+
+#floodfillconfig tr:nth-child(2) b {
+     margin-right: 8px;
+}
+
 p#clientconf.infohelp, p#webappconfig.infohelp {
      background: #000 url(/themes/console/images/info/java_edit.png) 12px center no-repeat !important;
      padding: 15px 15px 15px 50px;
@@ -6211,7 +6747,7 @@ form[action="events"] {
 }
 
 .routersummary .testing {
-     border: 1px dotted #4f4b1d;
+     border: 1px dotted #342f7f;
 }
 
 .routersummary .hidden, .routersummary .vmcomm {
@@ -6229,6 +6765,7 @@ form[action="events"] {
      vertical-align: middle;
      display: inline-block;
      filter: drop-shadow(0 0 1px rgba(220,220,220,0.7));
+     transform: scale(0.9);
 }
 
 .routersummary .error::before, .routersummary .clockskew::before {
@@ -6782,6 +7319,20 @@ table#i2pupdates td:first-child {
 }
 }
 
+@media screen and (max-width: 1400px) {
+.revision, .sha256 {
+     display: inline-block;
+     max-width: 100px !important;
+     overflow: hidden;
+     text-overflow: ellipsis;
+}
+
+.revision:hover, .sha256:hover {
+     overflow: auto;
+     text-overflow: clip;
+}
+}
+
 @media screen and (max-width: 1500px) {
 #sb_general td::after, #sb_shortgeneral td::after, #sb_bandwidth td::after,
 #sb_peers td::after, #sb_tunnels td::after, #sb_queue td::after {
@@ -6824,6 +7375,18 @@ table#i2pupdates td:first-child {
 }
 }
 
+@media screen and (min-width: 1400px) {
+.main#help #changelog pre:not(old) {
+     columns: 550px auto;
+     column-gap: 40px;
+     column-rule: 1px dotted #443da0;
+     margin-left: 0;
+     padding-left: 10px;
+     width: calc(100% - 22px) !important;
+     overflow-y: hidden;
+}
+}
+
 @media screen and (min-width: 1500px) {
 body, .main, .main td, .news p, #news p, .statusnotes, textarea, th, .applabel a, tt, code, .messages, .messages #newsStatus, .messages #newsDisplay, #changelog pre {
      font-size: 10pt !important;
@@ -6857,7 +7420,7 @@ h1 {
      margin-top: 3px;
 }
 
-div.routersummary img[src$="i2plogo.png"] {
+.routersummary img[src$="i2plogo.png"] {
      margin-left: -4px;
      transform: none;
      width: 204px;
@@ -6889,7 +7452,7 @@ div.routersummary img[src$="i2plogo.png"] {
 }
 
 div.app {
-     min-width: 138px;
+     min-width: 150px;
 }
 
 div.app:hover {
@@ -6983,12 +7546,29 @@ button.control, button.control:hover, button.control:focus {
      margin-bottom: -1px !important;
 }
 
-.newsAuthor {
+/* news @ home */
+
+#newsStatus, #news #newsDisplay a, .newsAuthor {
      font-size: 9pt !important;
+}
+
+.news #newsStatus, .news #newsDisplay {
+     display: inline-block;
+     padding-top: 2px;
+     padding-bottom: 4px;
+}
+
+.news hr {
+     margin-bottom: 6px;
+}
+
+.newsAuthor {
      background-size: 15px 15px !important;
      padding-left: 19px !important;
 }
 
+/* end news */
+
 table#reseedconfig input[type="text"], table#reseedconfig input[type="password"] {
      width: 250px;
 }
@@ -7023,6 +7603,15 @@ table#reseedconfig input[type="text"], table#reseedconfig input[type="password"]
 .langselect input[name="lang"]:checked + img {
     margin-left: -79px !important;
 }
+
+ul#banlist {
+     -moz-column-width: 300px;
+     -moz-column-gap: 10px;
+     -webkit-column-width: 300px;
+     -webkit-column-gap: 10px;
+     column-width: 300px;
+     column-gap: 10px;
+}
 }
 
 @media screen and (-webkit-min-device-pixel-ratio:0) and (min-width: 1500px) {
diff --git a/installer/resources/themes/console/midnight/console_ar.css b/installer/resources/themes/console/midnight/console_ar.css
index 37126b4a796d1655688496004642d307343c6ad3..bc85248d5549f0b3fff91e24bcabe3c0cae19be1 100644
--- a/installer/resources/themes/console/midnight/console_ar.css
+++ b/installer/resources/themes/console/midnight/console_ar.css
@@ -124,7 +124,7 @@ form {
     text-align: center;
 }
 
-div.joblog li, div.newsheadings li {
+div.joblog li {
     text-align: left;
     direction: ltr;
 }
@@ -477,6 +477,18 @@ h4.app, h4.app2 {
     margin-right: 12px;
 }
 
+.sb_newsheadings td, .sb_newsheadings tr:hover td {
+     background-position: right 4px center !important;
+     padding-right: 22px !important;
+     padding-left: 8px !important;
+     text-align: right !important;
+}
+
+.sb_newsheadings td a {
+     font-size: 9pt !important;
+     font-weight: bold;
+}
+
 /* responsive layout */
 
 @media screen and (max-width: 1500px) {
diff --git a/installer/resources/themes/console/midnight/console_big.css b/installer/resources/themes/console/midnight/console_big.css
index b8926519e9b482c1d801f61ce00dfa7d6b8dee3d..05043f9300a001491b5a6d66568fc8dc956e66d1 100644
--- a/installer/resources/themes/console/midnight/console_big.css
+++ b/installer/resources/themes/console/midnight/console_big.css
@@ -5,45 +5,51 @@
 
 /* sidepanel */
 
-div.routersummary {
+.routersummary {
      font: 9.5pt/125%;
 }
 
-div.routersummary h3, div.routersummary h3 a {
+.routersummary h3, .routersummary h3 a {
      font-size: 12.5pt !important;
 }
 
-div.routersummary h4, div.routersummary h4 a {
+.routersummary h4, .routersummary h4 a {
      font-size: 11.5pt !important;
      letter-spacing: 0;
 }
 
-div.routersummary table {
+.routersummary table {
      font-size: 9pt;
-     margin: -5px 0px -5px 1px;
-     width: 188px !important;
+     margin: -5px 0 -5px 1px;
+     width: 200px !important;
 }
 
-div.routersummary table a:link, div.routersummary table a:visited {
+.routersummary table a:link, .routersummary table a:visited {
      font-size: 11pt !important;
 }
 
-div.tunnels a {
-     font-size: 9pt !important;
+#sb_internals a, #sb_services a, #sb_advanced a {
+     font-size: 13pt !important;
 }
 
-div.tunnels table {
-     margin: -2px -0px -4px 2px !important;
-     width: 185px;
+.newsheadings li, .newsheadings li a {
+     letter-spacing: 0;
+     word-spacing: 0;
+     font-size: 10pt !important;
 }
 
-#sb_internals a, #sb_services a, #sb_advanced a {
-     font-size: 13pt !important;
+#sb_notice, #sb_notice a {
+     font-size: 10pt !important;
 }
 
 /* end sidepanel */
 
-#newsDisplay, #newsStatus {
+button.search {
+     white-space: nowrap;
+     font-size: 11pt !important;
+}
+
+#newsDisplay, #newsDisplay a, #newsStatus {
      font-size: 11pt !important;
 }
 
@@ -167,7 +173,7 @@ ul.links li {
 /* global overrides */
 
 @media screen and (min-width: 0) {
-a, b, div.routersummary h3 a, div.routersummary h4 {
+a, b, .routersummary h3 a, .routersummary h4 {
     font-weight: normal !important;
     font-size: 100%;
 }
diff --git a/installer/resources/themes/console/midnight/i2ptunnel.css b/installer/resources/themes/console/midnight/i2ptunnel.css
index 13f76b30fe35922ba377e599948a337ad4f831a8..db61c867ec90e8e36be16d28239d256845af9f3f 100644
--- a/installer/resources/themes/console/midnight/i2ptunnel.css
+++ b/installer/resources/themes/console/midnight/i2ptunnel.css
@@ -1061,9 +1061,9 @@ td {
      min-width: 600px;
 }
 
-@media screen and (-webkit-min-device-pixel-ratio:0) { /* fixes chrome/blinkoverflow issue */
+@media screen and (-webkit-min-device-pixel-ratio:0) { /* fixes chrome/blink overflow issue */
 select {
-     white-space: normal;
+     white-space: normal !important;
 }
 }
 
diff --git a/installer/resources/themes/console/midnight/mobile.css b/installer/resources/themes/console/midnight/mobile.css
index 318ac87241f30e13b02be07bb7807db17727ccc6..0e5bdb0dd9674ad63f70438ce56c6e34487d36c5 100644
--- a/installer/resources/themes/console/midnight/mobile.css
+++ b/installer/resources/themes/console/midnight/mobile.css
@@ -33,9 +33,16 @@ div.routersummary {
 }
 }
 
-div[style^='height'] + a {
+div[style="height: 36px;"] + a, a[href="/summaryframe"] {
      display: inline-block;
-     padding-top: 8px !important;
+     margin: 12px 0 0 !important;
+     padding: 4px 15px !important;
+     border-radius: 15px;
+     border: 1px solid #241f69;
+}
+
+a[href="/summaryframe"] {
+     margin: 3px 0 2px !important;
 }
 
 .routersummary td,
@@ -73,8 +80,8 @@ div.routersummary table,
 }
 
 .routersummary tr td {
-     border-top: 1px inset #000 !important;
-     border-bottom: 1px inset #000 !important;
+     border-top: 1px solid #000 !important;
+     border-bottom: 1px solid #000 !important;
 }
 
 .routersummary tr:hover td {
diff --git a/installer/resources/themes/snark/classic/snark.css b/installer/resources/themes/snark/classic/snark.css
index a6096a95ca04f54e5b83e44b13933cfe2556ddd6..c4544fefa16d99fb07a17217e8fd413a82d014a1 100644
--- a/installer/resources/themes/snark/classic/snark.css
+++ b/installer/resources/themes/snark/classic/snark.css
@@ -175,7 +175,7 @@ body.iframed {
 .snarkMessages {
      overflow: hidden;
      width: auto;
-     height: 53px;
+     height: 56px;
      margin: 0;
      padding: 3px 5px;
      text-align: left;
@@ -202,16 +202,20 @@ body.iframed {
 
 .snarkMessages li {
      margin-left: -15px;
-     font: normal 8pt "Droid Sans Mono", "Andale Mono", "DejaVu Sans Mono", "Lucida Console", monospace;
+     font: bold 8pt "Droid Sans Mono", "Andale Mono", "DejaVu Sans Mono", "Lucida Console", monospace;
+     color: #2c354f;
+     opacity: 0.95;
 }
 
 .snarkMessages li::before {
      content: "";
      display: inline-block;
-     background: url(images/bullet.png) left bottom no-repeat;
+     background: url(images/bullet.png) 1px bottom no-repeat;
      width: 13px;
      height: 11px;
+     margin: 1px 2px 0 1px;
      background-size: 9px 9px;
+     opacity: 0.7;
 }
 
 .snarkMessages a:link,
@@ -317,6 +321,11 @@ body.iframed {
      display: none;
 }
 
+.snarkTorrents img {
+     margin: 0 !important;
+     padding: 0 !important;
+}
+
 #totals {
      margin-left: 3px;
 }
@@ -352,6 +361,11 @@ body.iframed {
      width: 24px !important;
 }
 
+.snarkGraphicStatus img {
+     margin-top: 2px !important;
+     margin-bottom: 2px !important;
+}
+
 .snarkTorrentETA, .snarkTorrentUploaded, .snarkTorrentRateDown, .snarkTorrentRateUp {
      width: 5%;
      min-width: 40px;
@@ -524,11 +538,6 @@ td.snarkTrackerDetails {
      padding: 4px 2px !important;
 }
 
-.snarkTorrents img {
-     margin: 0 !important;
-     padding: 0 !important;
-}
-
 tt {
      font-family: "Droid Sans Mono", "Andale Mono", "DejaVu Sans Mono", "Lucida Console", monospace;
 }
@@ -793,7 +802,7 @@ td:first-child {
 }
 
 .snarkTorrentName {
-     line-height: 90%;
+     line-height: 110%;
      padding: 0;
 }
 
@@ -928,7 +937,7 @@ td:first-child {
 }
 
 tr:hover .percentBarText {
-     opacity: 0.75;
+     opacity: 0.85;
 }
 
 .snarkTorrentEven {
@@ -1039,7 +1048,7 @@ tr:hover .percentBarText {
      border: none;
      height: 14px;
      background: #bbf;
-     background: linear-gradient(to bottom, #fff 0%, #eef 50%, #ddf 50%, #bbf 100%);
+     background: linear-gradient(to bottom, #fff 0%, #eef 50%, #bbf 50%, #99f 100%);
      box-shadow: inset 0 0 0 1px #ddf;
      opacity: 0.8;
 }
@@ -1103,8 +1112,8 @@ tr:hover .percentBarText {
      margin-left: -5px;
      font-weight: normal;
      background: url(images/infocircle.png) left 10px center no-repeat;
-     background-size: 14px auto;
-     padding-left: 30px;
+     background-size: 13px auto;
+     padding-left: 26px;
 }
 
 .snarkConfigTitle:hover, label.toggleview:hover, input.toggle_input:focus + .toggleview {
@@ -1121,7 +1130,7 @@ input.toggle_input:focus + .toggleview img {
 }
 
 .snarkConfigTitle, label.toggleview, .configsectionpanel .snarkConfigTitle:hover {
-     font-size: 13pt;
+     font-size: 12pt;
      font-weight: bold;
      font-variant: small-caps !important;
      display: inline-block;
@@ -1141,6 +1150,7 @@ input.toggle_input:focus + .toggleview img {
 .snarkConfigTitle a {
      display: inline-block;
      width: 100%;
+     margin-bottom: -1px;
 }
 
 @media screen and (-webkit-min-device-pixel-ratio: 0) {
@@ -1158,7 +1168,7 @@ _:-ms-lang(x), .snarkConfigTitle, label.toggleview, .configsectionpanel .snarkCo
 }
 
 .snarkConfigTitle img, label.toggleview img {
-     margin-right: -2px;
+     margin-right: -1px;
      margin-top: -2px;
 }
 
@@ -1645,21 +1655,18 @@ img:hover {
 #trackerselect tr:first-child td {
      padding: 5px 10px;
      border-bottom: 1px solid #89f;
+     font-weight: bold !important;
 }
 
 #trackerselect td {
      padding: 3px 10px;
 }
 
-#trackerselect td:first-child {
-     width: 20%;
+#trackerselect td:first-child, #trackerselect td:last-child {
+     width: 40%;
      font-weight: normal;
 }
 
-#trackerselect td:nth-child(4) {
-     width: 70%;
-}
-
 #trackerselect input {
      margin: 3px !important;
 }
@@ -1897,7 +1904,7 @@ img:hover {
 }
 
 code {
-     font: bold 9pt "Droid Sans Mono", "Andale Mono", "DejaVu Sans Mono", "Lucida Console", monospace;
+     font: bold 8pt "Droid Sans Mono", "Andale Mono", "DejaVu Sans Mono", "Lucida Console", monospace;
      padding: 0 2px;
      color: #050;
 }
@@ -2224,6 +2231,7 @@ hr.debug:last-child {
 
 #configs td:first-child {
      min-width: 180px !important;
+     width: 25%;
      padding-left: 15px !important;
 }
 
@@ -2626,7 +2634,7 @@ body {
 }
 
 @media screen and (min-width: 1100px) {
-body, th, td, table a, input, input[type="text"], input.r, input[name="nofilter_dataDir"], select, textarea, textarea[name="i2cpOpts"], .snarkAddInfo, code, .snarkMessages li {
+body, th, td, table a, input, input[type="text"], input.r, input[name="nofilter_dataDir"], select, textarea, textarea[name="i2cpOpts"], .snarkAddInfo {
      font-size: 9pt !important;
 }
 
@@ -2648,12 +2656,12 @@ body, th, td, table a, input, input[type="text"], input.r, input[name="nofilter_
 }
 
 @media screen and (min-width: 1400px) {
-body, th, td, table a, input, input[type="text"], input.r, input[name="nofilter_dataDir"], select, textarea, textarea[name="i2cpOpts"], .snarkAddInfo, code, .snarkCommentInfo textarea {
+body, th, td, table a, input, input[type="text"], input.r, input[name="nofilter_dataDir"], select, textarea, textarea[name="i2cpOpts"], .snarkAddInfo, .snarkCommentInfo textarea {
      font-size: 10pt !important;
 }
 
-.snarkMessages li, .snarkTorrents tt {
-     font-size: 8pt !important;
+code, .snarkTorrents tt, #ourDest tt {
+     font-size: 9pt;
 }
 
 .snarkTorrentAction input[type="image"], .snarkTorrents th:last-child input[type="image"] {
diff --git a/installer/resources/themes/snark/dark/snark.css b/installer/resources/themes/snark/dark/snark.css
index 629690150733dec92753869a2dd67ddd4e7e7f1f..d242cbc146cd6b5303be284b627484f9a49bdfe0 100644
--- a/installer/resources/themes/snark/dark/snark.css
+++ b/installer/resources/themes/snark/dark/snark.css
@@ -2,7 +2,7 @@
 /* Author: dr|z3d */
 
 html {
-     height: 100%;
+     min-height: 100%;
 }
 
 body {
@@ -17,7 +17,7 @@ body {
 
 body {
      background: linear-gradient(to bottom, rgba(0,0,0,0.5), rgba(0,0,0,0.7)),
-     url(/themes/console/dark/images/camotile2.png) top left,
+     url(/themes/console/dark/images/camotile2.png) top left fixed,
      url(images/button_snark_hover.png) no-repeat,
      url(images/button_snark_active.png) no-repeat,
      url(images/button_tracker_hover.png) no-repeat,
@@ -113,7 +113,7 @@ body.iframed {
      text-decoration: none !important;
      text-transform: uppercase !important;
      letter-spacing: 0.1em;
-     margin: 0 -1px !important;
+     margin: 0 -2px !important;
      padding: 5px 7px 5px 22px !important;
      color: #3f3;
      text-shadow: 0 0 1px #000;
@@ -122,6 +122,7 @@ body.iframed {
      box-shadow: inset 0 0 0 1px #000;
      filter: drop-shadow(0 0 1px #000);
      opacity: 0.7;
+     position: relative;
 }
 
 .snarkNav:link, .snarkNav:hover, .snarkNav:focus {
@@ -130,6 +131,10 @@ body.iframed {
      background-repeat: no-repeat, repeat !important;
 }
 
+.snarkNav:hover, .snarkNav:focus {
+     z-index: 10;
+}
+
 .snarkNav:link:last-child {
       margin-left: 3px;
 }
@@ -224,7 +229,7 @@ body.iframed {
      overflow: hidden;
      resize: none;
      color: #69f;
-     height: 54px;
+     height: 56px;
      width: auto;
      background: #000 url(images/hat.png) no-repeat scroll right bottom;
      background: url(images/hat.png) no-repeat scroll right bottom, linear-gradient(to bottom, #010, #000);
@@ -261,6 +266,11 @@ _:-ms-lang(x), .snarkMessages {
      list-style: none;
 }
 
+.snarkMessages li, .snarkMessages li a, .snarkTorrents tt, #ourDest tt {
+     font-size: 8pt !important;
+     font-weight: bold;
+}
+
 .snarkMessages li {
      margin-left: -15px;
 }
@@ -268,8 +278,8 @@ _:-ms-lang(x), .snarkMessages {
 .snarkMessages li::before {
      content: "";
      display: inline-block;
-     background: url(images/bullet.png) left bottom no-repeat;
-     width: 14px;
+     background: url(images/bullet.png) 2px bottom no-repeat;
+     width: 16px;
      height: 11px;
      background-size: 9px 9px;
      filter: drop-shadow(0 0 1px #000);
@@ -483,6 +493,7 @@ th.snarkTorrentStatus {
      font-weight: bold;
      display: inline-block;
      line-height: 120%;
+     letter-spacing: 0.1em;
 }
 
 .snarkTorrentInfo img {
@@ -764,7 +775,7 @@ td {
      padding: 1px !important;
 }
 
-.snarkTorrents tr:hover, .snarkDirInfo tr:hover {
+.snarkTorrents tr:hover, .snarkDirInfo tr:hover, #trackerselect tr:nth-child(n+2):hover {
      background: #030 !important;
 }
 
@@ -993,10 +1004,14 @@ _:-ms-lang(x), .snarkTorrentOdd, .SnarkTorrentEven {
      font-variant: small-caps !important;
      display: inline-block;
      margin: 0 0 -3px !important;
-     min-width: 260px;
+     min-width: 300px;
      box-shadow: inset 0 0 0 1px #000, 0 1px 1px #000;
 }
 
+.toggleview {
+     padding-bottom: 4px !important;
+}
+
 @media screen and (-webkit-min-device-pixel-ratio:0) {
 .snarkConfigTitle, .toggleview {
      font-size: 13pt !important;
@@ -1014,6 +1029,7 @@ _:-ms-lang(x), .snarkTorrentOdd, .SnarkTorrentEven {
 .snarkConfigTitle a {
      display: inline-block;
      width: 100%;
+     padding-bottom: 1px !important;
 }
 
 .snarkConfigTitle:hover, .toggleview:hover, input.toggle_input:focus + .toggleview {
@@ -1500,6 +1516,8 @@ img[src$="magnet.png"] {
      width: 120px;
 }
 
+/* newtorrent tracker selection */
+
 #trackerselect {
      border: 1px solid #131;
      width: 100% !important;
@@ -1531,20 +1549,23 @@ _:-ms-lang(x), #trackerselect tr:last-child {
 }
 
 #trackerselect tr:first-child td {
-     padding: 3px 5px 3px 20px;
+     font-weight: bold;
+     color: #ee9 !important;
 }
 
 #trackerselect td {
-     padding: 5px 5px 5px 20px;
+     padding: 5px;
+     text-align: center;
+     color: #bb7 !important;
 }
 
-#trackerselect td:first-child {
-     width: 20%;
-     font-weight: normal;
+#trackerselect tr:nth-child(n+2):hover td {
+     color: #ee9 !important;
 }
 
-#trackerselect td:nth-child(4) {
-     width: 70%;
+#trackerselect td:first-child, #trackerselect td:last-child {
+     width: 40%;
+     font-weight: normal;
 }
 
 #trackerselect input {
@@ -1558,6 +1579,8 @@ _:-ms-lang(x), #trackerselect tr:last-child {
      text-overflow: ellipsis;
 }
 
+/* end newtorrent tracker selection */
+
 .configsectionpanel td:first-child {
      padding-right: 10px !important;
      padding-left: 5px !important;
@@ -1568,7 +1591,7 @@ _:-ms-lang(x), #trackerselect tr:last-child {
      min-width: 50px;
 }
 
-.trackerconfig th, .trackerselect th {
+.trackerconfig th, #trackerselect tr:first-child td {
      padding-top: 7px;
      padding-bottom: 7px;
 }
@@ -1666,6 +1689,7 @@ _:-ms-lang(x), #trackerselect tr:last-child {
 #configs td:first-child {
      padding-left: 15px !important;
      line-height: 80%;
+     width: 25%;
 }
 
 #configs td:first-child, .trackerconfig td:first-child {
@@ -2668,7 +2692,7 @@ body, .snarkTorrents td, .snarkAddInfo, th, td,  code, textarea, input, input[ty
 }
 
 .snarkConfigTitle, .toggleview {
-     min-width: 300px !important;
+     min-width: 340px !important;
      padding-top: 4px;
 }
 
@@ -2677,11 +2701,7 @@ body, .snarkTorrents td, .snarkAddInfo, th, td,  code, textarea, input, input[ty
 }
 
 .snarkConfigTitle a {
-     margin-bottom: 1px !important;
-}
-
-tt, .snarkTorrents tt, .snarkMessages, .snarkMessages a {
-     font-size: 9pt !important;
+     padding-bottom: 2px !important;
 }
 
 textarea[name="i2cpOpts"] {
@@ -2747,6 +2767,16 @@ textarea[name="i2cpOpts"] {
 }
 }
 
+@media screen and (min-width: 1600px) {
+.snarkMessages li, .snarkMessages li a, .snarkTorrents tt, #ourDest tt, tt {
+     font-size: 9pt !important
+}
+
+tt, .snarkTorrents tt, .snarkMessages, .snarkMessages a {
+     font-size: 9pt !important;
+}
+}
+
 /* mini-mode */
 
 @media screen and (max-width: 800px) {
diff --git a/installer/resources/themes/snark/light/snark.css b/installer/resources/themes/snark/light/snark.css
index 41a01b8657dfe1e9997fd188fbb9f348756d24cf..19de36f7032e3dd43a6f267fd4c024b9d8bc07e7 100644
--- a/installer/resources/themes/snark/light/snark.css
+++ b/installer/resources/themes/snark/light/snark.css
@@ -4,7 +4,7 @@
 /* Thanks to http://www.luxphile.com/2011/01/creative-commons-cat.html for the kitty image */
 
 body {
-     color: #272e3f;
+     color: #31334f;
      font: 9pt "Droid Sans", "Noto Sans", Ubuntu, "Segoe UI", "Bitstream Vera Sans", Verdana, "Lucida Grande", Helvetica, sans-serif;
      background: #a4a4cb url(/themes/console/light/images/tile2.png) center top fixed;
      background-size: 32px 32px;
@@ -38,19 +38,34 @@ body.iframed {
      url(images/button_forum_active.png) no-repeat !important;
 }
 
+b {
+     color: #41465f;
+}
+
 * {
      outline: none !important;
 }
 
+::selection {
+     background: #27377f !important;
+     color: white;
+     text-shadow: none;
+}
+
+::-moz-selection {
+     background: #27377f !important;
+     color: white;
+     text-shadow: none;
+}
+
 .toggleview, .snarkConfigTitle, .snarknavbar, img, input[type="image"] {
      -moz-user-select: none;
      -webkit-user-select: none;
      user-select: none;
 }
 
-a:focus img, input[type="image"]:focus, a.control:focus, input[type="radio"]:focus, input[type="checkbox"]:focus, select:focus,
-input[type="text"]:focus, input.r:focus, input[name="nofilter_dataDir"]:focus, textarea:focus {
-     filter: drop-shadow(0 0 1px #6f072b) !important;
+a:focus img, input[type="image"]:focus {
+     filter: drop-shadow(0 0 1px #f60) !important;
 }
 
 button::-moz-focus-inner, input::-moz-focus-inner {
@@ -59,7 +74,6 @@ button::-moz-focus-inner, input::-moz-focus-inner {
 }
 
 .page {
-     color: #310;
      min-width: 900px !important;
      margin: 5px 0 0 0;
      padding: 0;
@@ -85,7 +99,7 @@ button::-moz-focus-inner, input::-moz-focus-inner {
 
 .snarknavbar {
      margin: 0 auto -6px !important;
-     padding: 8px 10px;
+     padding: 8px 10px 7px;
      border: 1px solid #7778bf;
      box-shadow: inset 0 0 0 1px #fff;
      border-radius: 2px 2px 0 0;
@@ -93,7 +107,7 @@ button::-moz-focus-inner, input::-moz-focus-inner {
      width: auto;
      width: calc(100% - 22px);
      text-align: center;
-     background: linear-gradient(to bottom, #fff 50%, #eef 51%, #eef 100%);
+     background: linear-gradient(to bottom, #fafaff 50%, #eef 51%, #eef 100%);
      position: sticky;
      top: -1px;
      z-index: 999;
@@ -101,18 +115,22 @@ button::-moz-focus-inner, input::-moz-focus-inner {
 
 .iframed .snarknavbar {
      margin: -6px 0 -6px !important;
+     padding-top: 7px;
+     padding-bottom: 6px;
      border-radius: 0;
      border: none;
      border-bottom: 1px solid #7778bf;
      box-shadow: none;
      position: static;
+     background: linear-gradient(to bottom, #fcfcff 51%, #f8f8ff 51%, #f2f2ff 100%);
 }
 
 .snarkNav:link, .snarkNav:visited {
      text-decoration: none !important;
      text-transform: uppercase !important;
      padding: 4px 10px 4px 24px !important;
-     margin-right: -2px !important;
+     margin-right: -4px !important;
+     line-height: 125%;
      letter-spacing: 0.08em;
      font-weight: bold;
      font-size: 9pt;
@@ -122,7 +140,8 @@ button::-moz-focus-inner, input::-moz-focus-inner {
      box-shadow: inset 0 0 0 1px #fff;
      display: inline-block;
      outline: none;
-     filter: drop-shadow(0 0 1px #ccc);
+     filter: drop-shadow(0 0 1px #ccf);
+     position: relative;
 }
 
 .snarkNav:link, .snarkNav:hover, .snarkNav:focus, .snarkNav:active {
@@ -130,6 +149,10 @@ button::-moz-focus-inner, input::-moz-focus-inner {
      background-position: 8px center;
 }
 
+.snarkNav:hover, .snarkNav:focus {
+     z-index: 999;
+}
+
 .snarkNav:last-child {
      border-radius: 0 2px 2px 0;
 }
@@ -205,7 +228,7 @@ button::-moz-focus-inner, input::-moz-focus-inner {
      border-spacing: 0;
      overflow: hidden;
      color: #339;
-     height: 52px;
+     height: 56px;
      width: auto;
      min-width: 810px;
      background: #eef url(images/kitty.png) no-repeat scroll right bottom;
@@ -214,6 +237,7 @@ button::-moz-focus-inner, input::-moz-focus-inner {
      border-bottom: 1px solid #7778bf;
      box-shadow: inset 0 0 1px #fff;
      background-size: auto 100%, 100% 100%;
+     background-blend-mode: multiply;
 }
 
 .snarkMessages:hover, .snarkMessages:focus {
@@ -240,8 +264,19 @@ button::-moz-focus-inner, input::-moz-focus-inner {
 }
 
 .snarkMessages li {
-     margin-left: -15px;
+     margin-left: -18px;
+     margin-right: -5px;
+     padding: 1px 20px 0 5px;
      line-height: 120%;
+     font-weight: bold;
+     background: rgba(255, 255, 255, 0.25);
+     opacity: 0.9;
+     mix-blend-mode: darken;
+}
+
+.snarkMessages li:hover {
+     opacity: 1;
+     mix-blend-mode: multiply;
 }
 
 .snarkMessages li::before {
@@ -335,9 +370,9 @@ th {
      border-top: 1px solid #7778bf;
      border-bottom: 1px solid #7778bf;
      background: #fff url(/themes/console/light/images/header.png) repeat-x scroll center center;
-     background: linear-gradient(to bottom, #fff 0%, #fff 50%, #eef 51%, #eef 100%);
-     background: linear-gradient(to bottom, #fff 50%, rgba(240,240,255,1));
-     color: #31334f;
+     background: linear-gradient(to bottom, #fafaff 50%, #eef 51%, #eef 100%);
+     background: linear-gradient(to bottom, #fafaff 50%, rgba(240,240,255,1));
+     color: #41465f;
 }
 
 th:first-child {
@@ -366,7 +401,7 @@ tfoot th {
      opacity: 0.8;
      filter: drop-shadow(0 0 1px #bbb);
      width: 12px;
-     background: linear-gradient(to bottom, #fff 0%, #fff 50%, #eef 51%, #eef 100%);
+     background: linear-gradient(to bottom, #fff 50%, #eef 51%, #eef 100%);
      margin-right: -4px;
 }
 
@@ -398,7 +433,7 @@ tfoot th {
 }
 
 .ParentDir {
-     background: #fff;
+     background: #f8f8ff;
      font-size: 8pt;
      border: none;
      text-align: left !important;
@@ -419,8 +454,8 @@ tfoot th {
 /* main torrents listing */
 
 .snarkTorrents thead th {
-     padding-top: 4px;
-     padding-bottom: 4px;
+     padding-top: 2px;
+     padding-bottom: 2px;
 }
 
 .snarkTorrents {
@@ -445,13 +480,13 @@ tfoot th {
 }
 
 .snarkTorrents tfoot tr:first-child th {
-     padding: 5px 4px;
+     padding: 5px 0 5px 4px;
      background: #fff;
-     background: linear-gradient(to bottom, #fff 50%, rgb(240, 240, 255)) #fff;
+     background: linear-gradient(to bottom, #fafaff 50%, rgb(240, 240, 255)) #fafaff;
      vertical-align: middle;
      font-weight: bold;
      font-style: normal !important;
-     color: #31334f !important;
+     color: #41465f !important;
 }
 
 .snarkTorrents td {
@@ -482,7 +517,7 @@ tfoot th {
      padding-left: 0;
 }
 
-th.snarkTorrentStatus {
+th.snarkGraphicStatus, th.snarkTorrentStatus {
      text-align: center !important;
 }
 
@@ -515,6 +550,14 @@ th.snarkTorrentStatus {
 .snarkTorrentName a, .snarkFileName a {
      display: inline-block;
      width: 100%;
+     word-break: break-all;
+     line-height: 120%;
+     margin: 1px 0;
+     opacity: 0.85;
+}
+
+tr:hover .snarkTorrentName a, tr:hover .snarkFileName a {
+     opacity: 1;
 }
 
 .snarkTorrentETA, .snarkTorrentUploaded, .snarkTorrentRateDown, .snarkTorrentRateUp {
@@ -545,7 +588,7 @@ th.snarkTorrentStatus {
 .snarkTorrentAction input[type="image"], .snarkTorrents th:last-child input[type="image"] {
      padding: 3px !important;
      background: #339;
-     background: linear-gradient(to bottom, #fff 0%, #fff 50%, #ddf 51%, #ddf 100%);
+     background: linear-gradient(to bottom, #fff 50%, #ddf 51%);
      border-radius: 2px;
      border: 1px solid #89f;
      box-shadow: inset 0 0 0 1px #fff;
@@ -614,12 +657,15 @@ th.snarkTorrentStatus {
 }
 
 .snarkTorrents tt {
-     background: #99f;
+     background: #aaf;
      color: #fff;
      border-radius: 2px;
      padding: 2px 3px;
      margin: 0 3px;
      display: inline-block;
+     letter-spacing: 0.1em;
+     font-size: 8pt !important;
+     text-shadow: 0 1px 1px #333;
 }
 
 #totals {
@@ -640,41 +686,43 @@ th.snarkTorrentStatus {
 
 td {
      padding: 2px 4px;
-     color: #272e3f !important;
+     color: #31334f;
      opacity: 1;
      font-size: 9pt;
 }
 
 .mainsection td {
-     color: #272e3f;
+     color: #31334f;
 }
 
-.snarkTorrentEven {
+.snarkTorrentEven, .snarkTorrentInfo tr:nth-child(even),
+.snarkCommentInfo tr:nth-child(even), .snarkComments tr:nth-child(odd) {
      background: #eef;
-     background: repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(240, 240, 255, 0.3) 3px, #fff 5px) #fff;
+     background: repeating-linear-gradient(135deg, rgba(252,252,255,0.8) 2px, rgba(240, 240, 255, 0.8) 3px, #fafaff 5px) #fafaff;
 }
 
-.snarkTorrentOdd {
+.snarkTorrentOdd, .snarkTorrentInfo tr:nth-child(odd),
+.snarkCommentInfo tr:nth-child(odd), .snarkComments tr:nth-child(even) {
      background: #e0e0ff;
-     background: repeating-linear-gradient(45deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px) #fff;
+     background: repeating-linear-gradient(45deg, rgba(255,255,255,0.8) 2px, rgba(196, 196, 255, 0.3) 3px, #fafaff 5px) #fafaff;
 }
 
-.snarkTorrentOdd td, .snarkTorrentEven td {
+.snarkTorrentOdd td, .snarkTorrentEven td, .snarkCommentInfo tr, .snarkComments tr {
      border-top: 1px solid #bbf !important;
 }
 
 .snarkTorrents tr:hover, .snarkTorrents tr:hover td, .snarkDirInfo tr:hover {
      background: #ffd;
      box-shadow: none !important;
-     color: #0c111f !important;
+     color: #292b2f !important;
 }
 
-.snarkTorrents tr:hover img {
-     mix-blend-mode: normal;
+.snarkTorrents tr:hover td:nth-child(2) b {
+     color: #363b4f !important;
 }
 
 tr:hover .percentBarText {
-     opacity: 0.75;
+     opacity: 1;
 }
 
 .peerinfo:hover td:first-child {
@@ -748,7 +796,7 @@ tr:hover .percentBarText {
      border: none;
      height: 100%;
      background: #bbf;
-     background: linear-gradient(to bottom, rgba(255, 255, 255,0.6) 0%, rgba(238, 238, 255, 0.6) 50%, rgba(221, 221, 255, 0.7) 50%, rgba(187, 187, 255, 0.7) 100%);
+     background: linear-gradient(to bottom, rgba(255, 255, 255,0.6) 0%, rgba(238, 238, 255, 0.6) 50%, rgba(200, 200, 255, 0.7) 50%, rgba(160, 160, 255, 0.7) 100%);
      box-shadow: inset 0 0 0 1px #ddf;
 }
 
@@ -769,8 +817,8 @@ tr:hover .percentBarText {
      line-height: 15px;
      white-space: nowrap;
      display: block;
-     color: #005;
-     text-shadow: 0 0 1px rgba(255,255,255,0.5);
+     color: #00528f;
+     text-shadow: 0 1px 1px rgba(255,255,255,0.8);
      opacity: 0;
      transition: ease opacity 0.2s;
 }
@@ -786,7 +834,6 @@ tr:hover .percentBarText {
 }
 
 .percentBarText:hover, .percentBarText:focus {
-     opacity: 0.75;
      transition: ease opacity 0.2s;
 }
 
@@ -824,8 +871,8 @@ tr:hover .percentBarText {
      font-size: 9pt;
      display: inline-block;
      margin-top: 7px;
-     background: url(images/infocircle.png) left center no-repeat;
-     background-size: 16px auto;
+     background: url(images/infocircle.png) left top no-repeat;
+     background-size: 14px auto;
      padding-left: 20px;
      min-height: 16px;
 }
@@ -838,6 +885,7 @@ tr:hover .percentBarText {
      font-size: 11pt !important;
      display: inline-block;
      width: 100%;
+     margin-top: -1px;
 }
 
 .snarkConfigTitle:hover a, .snarkConfigTitle:focus a {
@@ -852,10 +900,10 @@ tr:hover .percentBarText {
      letter-spacing: 0.15em;
      border: 1px solid #7778bf;
      border-top: 0;
-     background: #fff url("../../console/light/images/header.png") repeat-x scroll center center;
-     background: linear-gradient(to bottom, #fff 0%, #fff 50%, #eef 51%, #eef 100%);
+     background: #fff url(/themes/console/light/images/header.png) repeat-x scroll center center;
+     background: linear-gradient(to bottom, #fff 50%, #eef 51%);
      font-variant: small-caps !important;
-     box-shadow: 0 1px 2px #ddd;
+     box-shadow: 0 1px 2px #ccf;
      display: inline-block;
      min-width: 260px;
      color: #559 !important;
@@ -868,9 +916,13 @@ tr:hover .percentBarText {
 @media screen and (-webkit-min-device-pixel-ratio:0) {
 .snarkConfigTitle, .snarkConfigTitle a, .toggleview,
 .configsectionpanel .snarkConfigTitle, .configsectionpanel .snarkConfigTitle:hover {
-     font-size: 14pt !important;
+     font-size: 12pt !important;
      padding: 3px 15px 4px;
 }
+
+.snarkConfigTitle a {
+     padding: 0 1px !important;
+}
 }
 
 .snarkConfigTitle a:visited {
@@ -884,16 +936,23 @@ tr:hover .percentBarText {
 
 .snarkConfigTitle:active, .toggleview:active {
      color: #f30 !important;
-     box-shadow: inset 0 0 0 1px #fff, inset 2px 2px 3px 1px #555;
+     box-shadow: inset 0 0 0 1px #fff, inset 2px 2px 3px 1px #558;
 }
 
 .snarkConfigTitle img, .toggleview img {
-     margin: -2px -3px 0 0;
+     margin: -2px -1px 0 0;
      vertical-align: middle;
+     mix-blend-mode: luminosity;
 }
 
-.snarkConfigTitle:hover img, .toggleview:hover img, input.toggle_input:focus + .toggleview img, .snarkConfigTitle a:focus img {
+.addtorrentsection .toggleview img {
+     margin-top: -1px;
+}
+
+.toggleview:hover img, input.toggle_input:focus + .toggleview img,
+.configsection .snarkConfigTitle a:focus img, .configsection .snarkConfigTitle:hover a img {
      filter: drop-shadow(0 0 1px #f60) !important;
+     mix-blend-mode: normal;
 }
 
 .snarkConfigTitle:active a img, .toggleview:active img {
@@ -902,12 +961,17 @@ tr:hover .percentBarText {
      transition: ease transform 0.3s 0s;
 }
 
+.configsectionpanel .snarkConfigTitle img, .configsectionpanel .snarkConfigTitle:hover img {
+     mix-blend-mode: luminosity !important;
+     filter: drop-shadow(0 0 1px #bbb);
+}
+
 .snarkConfigTitle {
      color: #446;
 }
 
 .configsectionpanel .snarkConfigTitle, .configsectionpanel .snarkConfigTitle:hover {
-     color: #31334f !important;
+     color: #555875 !important;
 }
 
 .snarkConfig {
@@ -929,33 +993,25 @@ tr:hover .percentBarText {
 
 .snarkTorrentInfo th {
      text-align: left;
-     padding: 6px 1px;
+     padding: 7px 1px;
 }
 
 .snarkTorrentInfo th:first-child {
-     background: url(images/file.png) center left 5px no-repeat, linear-gradient(to bottom, #fff 0%, #fff 50%, #eef 51%, #eef 100%);
+     background: url(images/file.png) center left 5px no-repeat, linear-gradient(to bottom, #fafaff 50%, #eef 51%);
      background-size: 14px auto, 100% 100%;
+     background-blend-mode: luminosity, normal;
 }
 
 .snarkTorrentInfo td {
      text-align: left !important;
-     padding: 4px 0 4px 1px !important;
+     padding: 5px 0 5px 1px !important;
      border-top: 1px solid #bbf;
      vertical-align: middle;
 }
 
 .snarkTorrentInfo img {
      max-height: 16px;
-}
-
-.snarkTorrentInfo tr:nth-child(odd) {
-     background: #e0e0ff;
-     background: repeating-linear-gradient(45deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px);
-}
-
-.snarkTorrentInfo tr:nth-child(even) {
-     background: #eef;
-     background: repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(240, 240, 255, 0.3) 3px, #fff 5px);
+     mix-blend-mode: luminosity;
 }
 
 .snarkTorrentInfo tr:last-child td {
@@ -975,46 +1031,6 @@ tr:hover .percentBarText {
      padding: 0 2px !important;
 }
 
-table#trackerselect {
-     width: 100% !important;
-     border-collapse: separate;
-     border-spacing: 5px;
-     margin-bottom: 0;
-}
-
-#trackerselect tr:first-child td:last-child {
-     width: 150px;
-     display: inline-block;
-     padding: 3px 5px;
-}
-
-#trackerselect tr:first-child td:nth-child(n+2) {
-     border: 1px solid #7778bf !important;
-     border-radius: 2px;
-     background: linear-gradient(to bottom, #fff 0%, #fff 50%, #eef 51%, #eef 100%) #fff;
-     box-shadow: inset 0 0 0 1px #fff, 0 0 1px #ccc;
-     white-space: nowrap;
-     overflow: hidden;
-     text-overflow: ellipsis;
-}
-
-#trackerselect td {
-     padding: 2px;
-}
-
-#trackerselect td:first-child {
-     width: 100px !important;
-     white-space: nowrap;
-}
-
-#trackerselect td:nth-child(2), #trackerselect td:nth-child(3) {
-}
-
-#trackerselect td:last-child {
-     overflow: hidden;
-     text-overflow: ellispis;
-}
-
 form {
      margin-bottom: 0;
 }
@@ -1047,16 +1063,14 @@ input[name="savepri"] {
 }
 
 input {
-     font-size: 9pt;
-     font-weight: bold;
+     font-family: "Droid Sans", "Noto Sans", Ubuntu, "Segoe UI", "Bitstream Vera Sans", Verdana, "Lucida Grande", Helvetica, sans-serif;
      text-align: left;
      padding: 4px !important;
      border-radius: 2px;
      border: 1px solid #7778bf;
      background: #fff;
-     color: #272e3f;
+     color: #33333f;
      margin: 2px 4px 2px 0;
-     font: bold 8pt "Droid Sans", "Noto Sans", Ubuntu, "Segoe UI", "Bitstream Vera Sans", Verdana, "Lucida Grande", Helvetica, sans-serif;
      box-shadow: inset 0 0 1px #fff, 0 0 1px #999;
 }
 
@@ -1064,27 +1078,29 @@ input.r {
      text-align: right;
      background: #fff;
      border: 1px solid #7778bf;
+     color: #33333f;
 }
 
 input[type=submit], a.control, input.disabled {
      color: #227;
      background: #fff;
-     background: linear-gradient(to bottom, #fff 0%, #fff 50%, #ddf 50%, #ddf 100%);
+     background: linear-gradient(to bottom, #fff 50%, #ddf 50%);
      border: 1px solid #7778bf;
-     padding: 5px 8px !important;
-     font: bold 8pt "Droid Sans", "Noto Sans", Ubuntu, "Segoe UI", "Bitstream Vera Sans", Verdana, "Lucida Grande", Helvetica, sans-serif;
+     padding: 6px 8px !important;
+     font: bold 9pt "Droid Sans", "Noto Sans", Ubuntu, "Segoe UI", "Bitstream Vera Sans", Verdana, "Lucida Grande", Helvetica, sans-serif;
      margin: 6px 3px 6px 6px !important;
      border-radius: 2px;
      min-width: 90px;
      text-align: center;
      box-shadow: inset 0 0 0 1px #fff, 0 0 1px #ddd;
+     filter: drop-shadow(0px 0 1px #ccf);
 }
 
 input[type=submit]:hover, input[type=submit]:focus, a.control:hover, a.control:focus {
      color: #f60;
      border: 1px solid #559;
      background: #eef;
-     background: linear-gradient(#fff 0%, #fff 50%, #ffe8bf 50%, #efd9b3 100%);
+     background: linear-gradient(#fff 50%, #ffe8bf 50%, #efd9b3 100%);
      box-shadow: inset 0 0 0 1px #fff;
 }
 
@@ -1099,7 +1115,7 @@ a.control, a.controld {
      border-radius: 2px;
      font-weight: bold;
      margin: 6px 3px 6px 3px !important;
-     padding: 4px 8px 4px 5px !important;
+     padding: 5px 8px 5px 5px !important;
      white-space: nowrap;
      display: inline-block;
      min-width: 0 !important;
@@ -1126,7 +1142,7 @@ input[type=image], thead img {
 }
 
 thead img {
-     filter: hue-rotate(45deg) drop-shadow(0 0 1px #ddd);
+     filter: hue-rotate(45deg) contrast(120%) drop-shadow(0 0 1px #ddd);
 }
 
 .iframed thead img {
@@ -1146,23 +1162,28 @@ thead a:active img {
      width: 80%;
 }
 
+.addtorrentsection tr:first-child td > *, .newtorrentsection tr:first-child td > * {
+     vertical-align: middle;
+}
+
 thead img.disable, img.disable:hover {
      opacity: 0.4;
 }
 
 input[type="text"]:focus, input.r:focus, textarea:focus, input[name="nofilter_dataDir"]:focus {
      background: #fff;
-     color: #009;
-     border: 1px solid #66f;
-     transition: ease filter 0.3s 0s;
-     box-shadow: none;
+     color: #19191f;
+     border: 1px solid #676c7f;
+     box-shadow: 0 0 1px #89f;
 }
 
 input[type="text"], input.r, input[name="nofilter_dataDir"], textarea, select {
      min-width: 120px;
-     box-shadow: 1px 1px 1px #aaa inset, 0 0 0 1px #fff;
-     background: #efefff;
+     box-shadow: inset 1px 1px 1px rgba(204, 204, 204, 0.6);
+     background: #f8f8ff;
      padding: 5px 4px !important;
+     filter: drop-shadow(0px 0 1px #ccf);
+     color: #47475f;
 }
 
 textarea[name="i2cpOpts"] {
@@ -1191,12 +1212,12 @@ input[type="radio"], input[type="checkbox"], .optbox {
      height: 16px;
      box-shadow: none;
      background: none;
+     filter: sepia(100%) hue-rotate(185deg) drop-shadow(0 0 1px #ccf);
 }
 
-input[type="checkbox"]:hover, input[type="radio"]:hover,
-input[type="checkbox"]:focus, input[type="radio"]:focus {
+input[type="radio"]:hover, input[type="checkbox"]:hover, input[type="radio"]:focus, input[type="checkbox"]:focus {
+     filter: sepia(100%) hue-rotate(185deg) drop-shadow(0 0 3px #89f);
      outline: none;
-     filter: drop-shadow(0 0 3px #89f);
 }
 
 input[type="checkbox"][disabled]:hover, input[type="radio"][disabled]:hover,
@@ -1235,8 +1256,8 @@ input.disabled, input.disabled:hover, input.disabled:active, a.controld {
 }
 
 select {
-     background: #efefff url(images/dropdown.png) right center no-repeat !important;
-     font: 8pt "Droid Sans", "Noto Sans", Ubuntu, "Segoe UI", "Bitstream Vera Sans", Verdana, "Lucida Grande", Helvetica, sans-serif;
+     background: url(images/dropdown.png) right center no-repeat #f8f8ff !important;
+     font: 9pt "Droid Sans", "Noto Sans", Ubuntu, "Segoe UI", "Bitstream Vera Sans", Verdana, "Lucida Grande", Helvetica, sans-serif;
      font-weight: bold;
      padding: 5px 16px 5px 3px !important;
      border-radius: 2px;
@@ -1244,11 +1265,17 @@ select {
      margin: 2px 4px 2px 0;
      -moz-appearance: none;
      -webkit-appearance: none;
-     color: #272e3f;
+     color: #41465f;
 }
 
-select:focus {
-     color: #001 !important;
+@media screen and (-webkit-min-device-pixel-ratio: 0) {
+select {
+     padding: 6px 16px 6px 6px !important;
+}
+}
+
+select:hover, select:focus {
+     color: #33333f !important;
      background: #fff url(images/dropdown.png) right center no-repeat !important;
      box-shadow: none;
 }
@@ -1258,7 +1285,7 @@ select:active, select option {
 }
 
 select[disabled], select[disabled]:hover {
-     background: #efefff url(images/dropdown.png) right center no-repeat !important;
+     background: #f8f8ff url(images/dropdown.png) right center no-repeat !important;
      opacity: 0.7;
      cursor: not-allowed;
 }
@@ -1268,7 +1295,8 @@ select::-ms-expand {
 }
 
 textarea {
-     color: #272e3f;
+     background: #f8f8ff;
+     color: #33333f;
      font-weight: bold;
      padding: 2px 4px;
      border-radius: 2px;
@@ -1288,7 +1316,7 @@ select:hover, input[type="checkbox"], input[type="radio"], input[type="submit"]
 
 img {
      border: none;
-     margin: 0 3px 1px 3px;
+     margin: 0 3px 0;
      vertical-align: middle;
      opacity: 1.0;
      line-height: 100%;
@@ -1309,6 +1337,11 @@ img[src$="details.png"] {
      mix-blend-mode: luminosity;
 }
 
+.snarkGraphicStatus img {
+     padding-top: 3px !important;
+     padding-bottom: 3px !important;
+}
+
 .newtorrentsection td:first-child, .addtorrentsection td:first-child, .configsectionpanel td:first-child {
      width: auto !important;
      text-align: right;
@@ -1318,10 +1351,6 @@ img[src$="details.png"] {
      padding-right: 5px;
 }
 
-.configsectionpanel .snarkConfigTitle:hover img {
-     filter: drop-shadow(0 0 1px #999);
-}
-
 .section, .mainsection .section, .mainsection {
      margin: 0;
      padding: 0;
@@ -1347,33 +1376,33 @@ img[src$="details.png"] {
 .newtorrentsection {
      margin: 0 0 10px 0;
      background: #fff url(images/snark_create.png) no-repeat right center;
-     background: url(images/snark_create.png) no-repeat right center, linear-gradient(to bottom, #fff, #e0e0ef);
-     background: url(images/snark_create.png) no-repeat scroll right center, linear-gradient(to top, rgba(224, 224, 255, 0.5), #fff), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 1) 3px, #fff 5px);
-     background-size: 80px 80px, 100%;
+     background: url(images/snark_create.png) no-repeat right center, linear-gradient(to bottom, #fafaff, #e0e0ef);
+     background: url(images/snark_create.png) no-repeat scroll right center, linear-gradient(to top, rgba(224, 224, 255, 0.5), #fafaff), repeating-linear-gradient(135deg, #fff 2px, rgba(221, 221, 255, 1) 3px, #fafaff 5px);
+     background-size: 80px 80px, 100% 100%;
 }
 
 .addtorrentsection {
      margin: 10px 0;
-     background: #fff url(images/snark_add.png) no-repeat right center;
-     background: url(images/snark_add.png) no-repeat 99% center, linear-gradient(to bottom, #fff, #e0e0ef);
-     background: url(images/snark_add.png) no-repeat scroll right center, linear-gradient(to top, rgba(224, 224, 255, 0.5), #fff), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 1) 3px, #fff 5px);
-     background-size: 61px 61px, 100%;
+     background: #fff url(images/snark_add.png) no-repeat right 15px center;
+     background: url(images/snark_add.png) no-repeat right 15px center, linear-gradient(to bottom, #fafaff, #e0e0ef);
+     background: url(images/snark_add.png) no-repeat scroll right 15px center, linear-gradient(to top, rgba(224, 224, 255, 0.5), #fafaff), repeating-linear-gradient(135deg, #fff 2px, rgba(221, 221, 255, 1) 3px, #fafaff 5px);
+     background-size: 61px 61px, 100% 100%;
 }
 
 .configsection {
      margin: 0;
      padding-bottom: 13px;
-     background: #fff url(images/configuration.png) 102% center no-repeat;
-     background: url(images/configuration.png) 102% center no-repeat, linear-gradient(to bottom, #fff, #e0e0ef);
-     background: url(images/configuration.png) no-repeat scroll right center, linear-gradient(to top, rgba(224, 224, 255, 0.5), #fff), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 1) 3px, #fff 5px);
-     background-size: 84px 82px, 100%;
+     background: #fff url(images/configuration.png) right -25px center no-repeat;
+     background: url(images/configuration.png) right -25px center no-repeat, linear-gradient(to bottom, #fafaff, #e0e0ef);
+     background: url(images/configuration.png) no-repeat scroll right -25px center, linear-gradient(to top, rgba(224, 224, 255, 0.5), #fafaff), repeating-linear-gradient(135deg, #fff 2px, rgba(221, 221, 255, 1) 3px, #fafaff 5px);
+     background-size: 84px 82px, 100% 100%;
 }
 
 .configsectionpanel {
      margin: -12px 0 0;
      background: #fff url(images/configuration.png) no-repeat scroll right center;
-     background: url(images/configuration.png) no-repeat scroll right center, linear-gradient(to bottom, #fff, #e0e0ef);
-     background: url(images/configuration.png) no-repeat scroll right center, linear-gradient(to top, rgba(224, 224, 255, 0.5), #efefff 55px, #fff), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 1) 3px, #efefef 5px);
+     background: url(images/configuration.png) no-repeat scroll right center, linear-gradient(to bottom, #fafaff, #e0e0ef);
+     background: url(images/configuration.png) no-repeat scroll right center, linear-gradient(to top, rgba(224, 224, 255, 0.5), #efefff 55px, #fafaff), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 1) 3px, #efefef 5px);
      background-size: 84px 82px, 100% 100%, 100% 100%;
 }
 
@@ -1405,10 +1434,6 @@ form:last-child .configsectionpanel {
      border-right: none;
 }
 
-.newtorrentsection form, .configsection form, .addtorrentsection form {
-     color: #001 !important;
-}
-
 .newtorrentsection table, .addtorrentsection table {
      margin-top: -5px;
 }
@@ -1418,18 +1443,68 @@ form:last-child .configsectionpanel {
      font-weight: bold;
 }
 
+/* new torrent -> tracker select */
+
 #trackerselect {
-     margin-top: 0;
+     width: 80% !important;
+     margin: 2px 0 0;
+     padding: 3px;
+     background: #f8f8ff;
+     background: linear-gradient(to bottom, #fafaff, #f2f2ff);
+     border-collapse: separate;
+     border-spacing: 5px;
+     border: 1px solid #7778bf;
+     border-radius: 2px;
+     box-shadow: inset 0 0 0 1px #fff, 0 0 1px #ccf;
 }
 
-#trackerselect tr:first-child {
+#trackerselect tr:first-child td {
+     border: 1px solid #9fa5ff !important;
+     border-radius: 2px;
+     background: linear-gradient(to right, #eef, #fafaff 30%, #fafaff 70%, #eef) #fafaff;
+     box-shadow: inset 0 0 0 1px #fff, 0 0 1px #ccc;
+     white-space: nowrap;
+     overflow: hidden;
+     text-overflow: ellipsis;
      font-weight: bold;
+     text-align: center;
+}
+
+#trackerselect td {
+     padding: 2px;
+     text-align: center;
 }
 
 #trackerselect td:first-child {
+     white-space: nowrap;
+}
+
+#trackerselect td:last-child {
+     overflow: hidden;
+     text-overflow: ellispis;
+}
+
+#trackerselect td:first-child, #trackerselect td:last-child {
      font-weight: normal;
+     width: 30% !important;
+}
+
+#trackerselect tr:nth-child(n+2):hover td {
+     background: #ffd;
+     color: #19191f !important;
+     border-radius: 6px !important;
+}
+
+#trackerselect tr:hover td:first-child {
+     border-radius: 3px 0 0 3px;
 }
 
+#trackerselect tr:hover td:last-child {
+     border-radius: 0 3px 3px 0;
+}
+
+/* end new torrent -> tracker select */
+
 .configsection a {
      color: #55a;
      font-weight: bold;
@@ -1456,7 +1531,7 @@ code, tt {
 .trackerconfig th:first-child {
      border-radius: 2px 0 0 2px;
      border-left: 1px solid #339;
-     background: url(/themes/snark/ubergine/images/nuke.png) center right 8px no-repeat, linear-gradient(to bottom, #fff 0%, #fff 50%, #eef 51%, #eef 100%);
+     background: url(/themes/snark/ubergine/images/nuke.png) center right 8px no-repeat, linear-gradient(to bottom, #fff 50%, #eef 51%, #eef 100%);
 }
 
 .trackerconfig th:last-child {
@@ -1542,6 +1617,10 @@ input#toggle_addtorrent:checked + label + hr + table, input#toggle_createtorrent
      word-spacing: 0em !important;
 }
 
+.peerinfo td[colspan="4"] {
+     padding-left: 0 !important;
+}
+
 /* debug */
 
 .debuginfo td {
@@ -1602,7 +1681,7 @@ input#toggle_addtorrent:checked + label + hr + table, input#toggle_createtorrent
 /* debug panel */
 
 #dhtdebugPanel {
-     background: linear-gradient(to top, rgba(224, 224, 255, 0.5), #fff), repeating-linear-gradient(135deg, rgba(255, 255, 255, 0.5) 2px, rgb(221, 221, 255) 3px, #fff 5px);
+     background: linear-gradient(to top, rgba(224, 224, 255, 0.5), #fafaff), repeating-linear-gradient(135deg, rgba(255, 255, 255, 0.5) 2px, rgb(221, 221, 255) 3px, #fff 5px);
      box-shadow: inset 0 0 0 1px #efefff;
      border: 1px solid #7778bf;
      border-top: none;
@@ -1784,7 +1863,9 @@ hr.debug:last-child {
 
 #configs td:first-child {
      min-width: 220px !important;
+     width: 30% !important;
      font-weight: bold;
+     color: #41465f;
 }
 
 #bwHelp {
@@ -1870,16 +1951,6 @@ hr.debug:last-child {
      padding: 8px 5px;
 }
 
-.snarkCommentInfo tr:nth-child(even), .snarkComments tr:nth-child(odd) {
-     border-top: 1px solid #bbf;
-     background: repeating-linear-gradient(135deg, rgba(255, 255, 255, 0.5) 2px, rgba(240, 240, 255, 0.3) 3px, #fff 5px) #fff;
-}
-
-.snarkCommentInfo tr:nth-child(odd), .snarkComments tr:nth-child(even) {
-     border-top: 1px solid #bbf;
-     background: repeating-linear-gradient(45deg, rgba(255, 255, 255, 0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px) #fff;
-}
-
 .snarkCommentInfo th {
      padding: 8px 5px;
      background: url(images/comment.png) 8px center no-repeat, linear-gradient(to bottom, #fff 50%, rgb(240, 240, 255));
@@ -1896,6 +1967,7 @@ hr.debug:last-child {
 
 .snarkCommentInfo td:first-child {
      font-weight: bold;
+     color: #41465f;
      white-space: nowrap;
 }
 
@@ -1914,6 +1986,7 @@ hr.debug:last-child {
 .snarkCommentInfo textarea {
      font-family: "Droid Sans", "Noto Sans", Ubuntu, "Segoe UI", "Bitstream Vera Sans", Verdana, "Lucida Grande", Helvetica, sans-serif !important;
      font-weight: normal;
+     font-size: 10pt;
      width: 100%;
      min-height: 64px;
      height: 64px;
@@ -2028,8 +2101,9 @@ hr.debug:last-child {
 }
 
 #newRating select {
-     width: 90%;
-     margin-left: 10px;
+     width: 99%;
+     margin-left: 2px;
+     text-overflow: ellipsis;
 }
 
 #myRating td:empty {
@@ -2053,6 +2127,87 @@ hr.debug:last-child {
 
 /* end Comments section */
 
+/* custom radios/checkboxes for chrome/blink  */
+
+@media screen and (-webkit-min-device-pixel-ratio: 0) and (min-resolution:.001dpcm) {
+input[type="checkbox"], input[type="checkbox"]:checked, input[type="checkbox"][disabled], input[type="checkbox"][disabled]:checked {
+     background: #f8f8ff;
+     width: 19px;
+     height: 19px;
+     box-shadow: inset 1px 1px 1px rgba(204, 204, 204, 0.6);
+     border-radius: 2px;
+     -webkit-appearance: inherit;
+     border: 1px solid #7778bf !important;
+     position: relative;
+     box-sizing: border-box;
+     filter: drop-shadow(0 0 1px #ccf);
+}
+
+input[type="checkbox"]:checked::before {
+     position: absolute;
+     top: 1px;
+     left: 1px;
+     content: "\2714";
+     border-radius: 1px;
+     font-size: 15pt;
+     color: #41465f;
+     line-height: 80%;
+     font-family: sans-serif;
+     overflow: hidden;
+     width: 16px;
+     height: 16px;
+}
+
+input[type="radio"], input[type="radio"]:checked, input[type="radio"][disabled], input[type="radio"][disabled]:checked {
+     background: #f8f8ff;
+     width: 19px;
+     height: 19px;
+     box-shadow: inset 0 0 2px #7778bf;
+     border-radius: 50%;
+     -webkit-appearance: none;
+     border: 1px solid #7778bf !important;
+     position: relative;
+     box-sizing: border-box;
+     filter: drop-shadow(0 0 1px #ccf);
+}
+
+input[type="radio"]:checked::before {
+     content: "";
+     position: absolute;
+     border-radius: 50%;
+     left: 25%;
+     top: 25%;
+     width: 9px;
+     height: 9px;
+     background: #41465f;
+}
+
+input[type="checkbox"]:hover, input[type="radio"]:hover, input[type="checkbox"]:focus, input[type="radio"]:focus {
+     background: #fff;
+     filter: drop-shadow(0 0 3px #89f) !important;
+}
+
+input[type="checkbox"][disabled], input[type="radio"][disabled], input[type="checkbox"][disabled]:hover, input[type="radio"][disabled]:hover,
+input[type="checkbox"][disabled]:checked, input[type="radio"][disabled]:checked, input[type="checkbox"][disabled]:checked:hover, input[type="radio"][disabled]:checked:hover,
+.knownTracker input[type="radio"]:hover, .knownTracker input[type="radio"]:checked:hover, .knownTracker input[type="radio"][disabled]:hover, .knownTracker input[type="radio"][disabled]:checked:hover {
+     filter: none !important;
+     box-shadow: none !important;
+     opacity: 0.5;
+}
+
+.priority input[type="radio"] {
+     transform: scale(0.8);
+}
+
+input.toggle_input, input.toggle_input:checked { /* hide checkbox and use label as faux panel heading */
+      position: absolute;
+      height: 0 !important;
+      width: 0 !important;
+}
+}
+
+/* end custom radios/checkboxes */
+
 /* MS Edge 14+ rendering bug fix */
 _:-ms-lang(x), *, *:hover, *:focus, input, input:hover, input:focus, a:hover, a:focus {
      filter: none !important;
@@ -2260,12 +2415,16 @@ b.alwaysShow {
 }
 
 @media screen and (min-width: 1400px) {
-body, td, button, input, select, .snarkAddInfo, code, tt, th, a, a:link, textarea, .snarkCommentInfo textarea {
+body, .snarkAddInfo, .snarkCommentInfo textarea {
      font-size: 10pt !important;
 }
 
-.snarkMessages li, .snarkMessages a {
+code, tt {
      font-size: 9pt !important;
+}
+
+.snarkMessages li, .snarkMessages a {
+     font-size: 8pt !important;
      line-height: 130%;
 }
 
@@ -2300,7 +2459,7 @@ input[type="submit"] {
 
 .snarkConfigTitle, .toggleview, .configsectionpanel .snarkConfigTitle, .configsectionpanel .snarkConfigTitle:hover {
      font-size: 12pt !important;
-     padding: 4px 1px !important;
+     padding: 4px 1px 5px !important;
      min-width: 300px;
 }
 
@@ -2326,27 +2485,33 @@ input[type="submit"] {
      padding-top: 4px !important;
      padding-bottom: 4px !important;
 }
-/*
-.debugConnection {
-     background: #337;
-     border-radius: 2px;
-     padding: 2px 4px;
-     color: #fff;
-     margin-top: 2px;
-     margin-bottom: 2px;
-     font-size: 9pt !important;
-     display: inline-block;
-}
-*/
 }
 
 @media screen and (-webkit-min-device-pixel-ratio:0) and (min-width: 1400px) {
-.snarkConfigTitle a, .toggleview,
-.configsectionpanel .snarkConfigTitle, .configsectionpanel .snarkConfigTitle:hover {
-     font-size: 14pt !important;
-     padding: 3px 1px 4px !important;
+.toggleview, .configsectionpanel .snarkConfigTitle, .configsectionpanel .snarkConfigTitle:hover {
+     font-size: 12.5pt !important;
+     padding: 4px 1px 4px !important;
      min-width: 300px;
 }
+
+.snarkConfigTitle a {
+     font-size: 12.5pt !important;
+     margin-top: 0 !important;
+}
+}
+
+@media screen and (min-width: 1600px) {
+.snarkMessages li, .snarkMessages a, .snarkTorrents tt {
+     font-size: 9pt !important;
+}
+
+a, a:link, th, td, button, input, select, textarea {
+     font-size: 10pt !important;
+}
+
+.snarkConfigTitle a {
+     font-size: 12.5pt !important;
+}
 }
 
 /* end responsive layout */
diff --git a/installer/resources/themes/snark/midnight/snark.css b/installer/resources/themes/snark/midnight/snark.css
index bf322ae7e1fa11c5fa7924c86cac5b2fcb52598e..69d56653a4aaf63eaef5301f041aed68d5430fc2 100644
--- a/installer/resources/themes/snark/midnight/snark.css
+++ b/installer/resources/themes/snark/midnight/snark.css
@@ -260,6 +260,11 @@ body.iframed {
      filter: drop-shadow(0 0 1px #000);
 }
 
+.snarkMessages li, .snarkMessages a {
+     font-weight: bold;
+     font-size: 8pt !important;
+}
+
 .snarkMessages img {
      float: right;
      margin: -3px -4px 4px 4px;
@@ -276,7 +281,7 @@ body.iframed {
      z-index: 1;
 }
 
-.snarkMessages img:hover, .snarkMessages img:focus {
+.snarkMessages img:hover, .snarkMessages img:focus, .closeLog img:hover, .closeLog img:focus {
      mix-blend-mode: normal !important;
      border: 1px solid #443da0 !important;
      border-top: 0 none !important;
@@ -432,8 +437,9 @@ tfoot tr:nth-child(n+1) {
      border-top: 1px solid #443da0 !important;
 }
 
-.snarkTorrents tfoot th::first-line {
-     font-weight: bold;
+.snarkTorrents tfoot tr:first-child th {
+     font-weight: bold !important;
+     color: #c9ceff !important;
 }
 
 .snarkTorrents tfoot th:nth-child(n+2) {
@@ -1115,9 +1121,9 @@ _:-ms-lang(x), .snarkTorrentOdd, .snarkTorrentOdd td, .SnarkTorrentEven, .SnarkT
      font-weight: bold;
      font-variant: small-caps !important;
      display: inline-block;
-     min-width: 260px;
+     min-width: 300px;
      margin: -1px 0 -5px 0;
-     padding: 3px 1px 3px 1px;
+     padding: 4px 1px 4px 1px;
      text-align: center !important;
      letter-spacing: .15em;
      border: 1px solid #443da0;
@@ -1127,6 +1133,15 @@ _:-ms-lang(x), .snarkTorrentOdd, .snarkTorrentOdd td, .SnarkTorrentEven, .SnarkT
      text-shadow: 0 0 1px #000;
 }
 
+.toggleview {
+     padding: 3px 1px 5px 1px;
+}
+
+.snarkConfigTitle a {
+     display: inline-block;
+     margin-top: -1px;
+}
+
 .snarkConfigTitle:hover, .toggleview:hover, input.toggle_input:focus + .toggleview {
      background: #002 !important;
      background: linear-gradient(to bottom, #004 50%, #002 50%) !important;
@@ -1604,7 +1619,7 @@ img.thumb {
 #trackerselect {
      width: 100% !important;
      width: calc(100% - 150px) !important;
-     margin: 2px 5px 0 5px;
+     margin: 8px 5px 4px 5px;
      border: 1px solid #120f35;
 }
 
@@ -1625,14 +1640,14 @@ _:-ms-lang(x), #trackerselect tr:last-child {
      border-bottom: 1px solid #120f35;
 }
 
-#trackerselect tr:first-child {
+#trackerselect tr:first-child td {
      font-weight: bold;
      border-bottom: 1px solid #120f35;
      background: linear-gradient(to bottom, #010011, #000);
 }
 
 #trackerselect tr:first-child td {
-     padding: 3px 5px 3px 20px;
+     padding: 7px 5px 7px 20px;
 }
 
 #trackerselect td {
@@ -1640,15 +1655,11 @@ _:-ms-lang(x), #trackerselect tr:last-child {
      font-size: 9pt;
 }
 
-#trackerselect td:first-child {
-     width: 20%;
+#trackerselect td:first-child, #trackerselect td:last-child {
+     width: 40%;
      font-weight: normal;
 }
 
-#trackerselect td:nth-child(4) {
-     width: 70%;
-}
-
 #trackerselect input {
      margin: 3px !important;
 }
@@ -1789,6 +1800,7 @@ input[name="nofilter_commentsName"] {
 
 #configs td:first-child {
      min-width: 200px;
+     width: 25%;
      padding-left: 10px !important;
 }
 
@@ -2746,15 +2758,11 @@ a, th, thead th, tfoot th, td, select, select option, .snarkAddInfo, .snarkFileN
 }
 
 @media screen and (min-width: 1400px) {
-code, textarea, input, tt {
+a, th, thead th, tfoot th, td, select, select option, .snarkAddInfo, .snarkFileName, textarea, input[name="nofilter_dataDir"], input {
      font-size: 10pt !important;
 }
 
-a, th, thead th, tfoot th, td, select, select option, .snarkAddInfo, .snarkFileName, code, textarea, input[name="nofilter_dataDir"], input, code {
-     font-size: 10pt !important;
-}
-
-.snarkMessages li, .snarkMessages a {
+code, tt {
      font-size: 9pt !important;
 }
 
@@ -2776,7 +2784,11 @@ a, th, thead th, tfoot th, td, select, select option, .snarkAddInfo, .snarkFileN
 }
 
 .snarkConfigTitle, .toggleview {
-     min-width: 300px !important;
+     min-width: 340px !important;
+}
+
+.snarkConfigTitle a {
+     margin-bottom: 0 !important;
 }
 
 .snarkMessages {
@@ -2843,5 +2855,11 @@ a, th, thead th, tfoot th, td, select, select option, .snarkAddInfo, .snarkFileN
 }
 }
 
+@media screen and (min-width: 1600px) {
+.snarkMessages li, .snarkMessages a {
+     font-size: 9pt !important;
+}
+}
+
 /* end responsive layout */
 
diff --git a/installer/resources/themes/snark/ubergine/snark.css b/installer/resources/themes/snark/ubergine/snark.css
index d37726fefd2fe6e65ad1b7ef2652a7edb4bde69d..94eb9018857da5e91ee22d9faac3aff82b357739 100644
--- a/installer/resources/themes/snark/ubergine/snark.css
+++ b/installer/resources/themes/snark/ubergine/snark.css
@@ -79,7 +79,7 @@ body.iframed:not(old) {
      box-shadow: inset 0 0 0 1px #3f173f, inset 0 0 3px 1px #212;
      filter: drop-shadow(0 1px 4px #000);
      background: #101 url(images/snarktopnav.png) repeat-x scroll center center;
-     background: linear-gradient(to bottom, #522852 0%, #4a2449 11%, #321831 33%, #281428 51%, #1c0e1c 52%, #101 54%, #101 100%);
+     background: linear-gradient(to bottom, #522852, #4a2449 11%, #321831 33%, #281428 51%, #1c0e1c 52%, #101 54%);
      min-width: 600px;
      width: 70%;
      text-align: center;
@@ -94,13 +94,14 @@ _:-ms-lang(x), .snarknavbar {
 }
 
 .iframed .snarknavbar {
-     padding-bottom: 16px;
+     padding-bottom: 14px;
      margin-top: 0 !important;
      margin-bottom: -6px !important;
      width: auto !important;
      border-radius: 0;
-     box-shadow: inset 0 0 1px 0 #7f2f7f;
+     box-shadow: inset 0 0 1px 0 #ffeffd;
      filter: none;
+     background: linear-gradient(to bottom, #522852, #4a2449 11%, #321831 33%, #281428 50%, #1c0e1c 50%, #101 54%);
      position: static;
 }
 
@@ -275,7 +276,9 @@ _:-ms-lang(x), .snarkNav:last-child[href="/i2psnark/"] {
 }
 
 .snarkMessages li {
-     margin-left: -15px;
+     margin-left: -18px;
+     padding-left: 10px;
+     padding-right: 10px;
 }
 
 .snarkMessages li::before {
@@ -285,7 +288,7 @@ _:-ms-lang(x), .snarkNav:last-child[href="/i2psnark/"] {
      width: 12px;
      height: 11px;
      background-size: 9px 9px;
-     margin-left: 2px;
+     margin-left: -6px;
      margin-right: 2px;
 }
 
@@ -422,16 +425,20 @@ tfoot td:first-child {
 }
 
 .snarkTorrents thead th  {
-     border-top: 1px solid transparent !important;
+     border-top: none !important;
      border-bottom: 1px solid #313 !important;
      padding-top: 3px;
-     padding-bottom: 6px;
+     padding-bottom: 4px;
      border-bottom: 1px solid #313;
      vertical-align: middle;
 }
 
+.iframed .snarkTorrents thead th {
+     padding-bottom: 3px;
+}
+
 .snarkTorrents thead th:nth-child(2) img {
-     margin-bottom: 3px;
+     margin-bottom: 2px;
 }
 
 .snarkGraphicStatus, .snarkTorrentStatus {
@@ -507,10 +514,11 @@ th.snarkTorrentStatus {
 }
 
 th.snarkTorrentAction input[type="image"] {
-     padding: 0;
+     margin-bottom: 1px;
+     padding: 1px 1px 0 0 !important;
      max-width: 32px;
      background: #40003f;
-     border-radius: 2px;
+     border-radius: 3px;
      border: 1px solid #202;
 }
 
@@ -541,6 +549,14 @@ th.snarkTorrentAction input[type="image"]:hover, .snarkTorrentAction input[type=
      vertical-align: middle;
 }
 
+.snarkTorrents tfoot tr:first-child th {
+     padding: 3px 2px;
+}
+
+.iframed .snarkTorrents tfoot tr:first-child th {
+     padding-top: 6px;
+}
+
 .snarkTorrents tfoot tr:first-child th {
      color: #ddd !important;
      font-weight: bold;
@@ -550,9 +566,11 @@ th.snarkTorrentAction input[type="image"]:hover, .snarkTorrentAction input[type=
 
 .snarkTorrents tt {
      font-family: "Droid Sans Mono", "Noto Mono", "Lucida Console", "DejaVu Sans Mono", monospace;
-     color: #cc0;
      font-weight: bold;
+     font-size: 8pt !important;
+     color: #cc0;
      margin-right: 2px;
+     letter-spacing: 0.1em;
 }
 
 #totals span, #ourDest {
@@ -839,7 +857,7 @@ _:-ms-lang(x), .snarkDirInfo img, .snarkTorrents img {
 }
 
 .priorityIndicator img[src*="clock"] {
-     margin-top: 3px;
+     margin-bottom: 1px;
 }
 
 .percentBarOuter {
@@ -853,6 +871,10 @@ _:-ms-lang(x), .snarkDirInfo img, .snarkTorrents img {
      margin: 0 !important;
 }
 
+tr:hover .percentBarOuter {
+     background: repeating-linear-gradient(135deg, rgba(0,0,0,0.7) 1px, rgba(0,0,0,0.7) 6px, rgba(16,0,16,0.7) 6px, rgba(16,0,16,0.7) 11px) !important;
+}
+
 .peerinfo .percentBarOuter {
      background: repeating-linear-gradient(135deg, #000 1px, #000 6px, #0f0a08 6px, #0f0a08 11px) !important;
      height: 16px;
@@ -868,6 +890,10 @@ _:-ms-lang(x), .snarkDirInfo img, .snarkTorrents img {
      box-shadow: inset 0 0 0 1px #000;
 }
 
+tr:hover .percentBarInner {
+     background: linear-gradient(to bottom, rgba(136, 17, 136, 0.2) 0%, rgba(85, 17, 85, 0.2) 50%, rgba(51, 17, 51, 0.2) 50%, rgba(0, 0, 0, 0.2) 100%);
+}
+
 .peerinfo .percentBarInner {
      background: linear-gradient(to bottom, rgba(82, 57, 67, 0.7) 0%, rgba(95, 70, 41, 0.7) 50%, rgba(63, 47, 27, 0.7) 50%, rgba(31, 23, 13, 0.9) 100%);
 }
@@ -897,7 +923,7 @@ _:-ms-lang(x), .snarkDirInfo img, .snarkTorrents img {
 .percentBarText {
      text-align: center;
      font-weight: bold;
-     padding: 2px 0;
+     padding: 1px 0;
      white-space: nowrap;
      display: block;
      color: #dd7;
@@ -905,6 +931,10 @@ _:-ms-lang(x), .snarkDirInfo img, .snarkTorrents img {
      transition: ease opacity 0.2s;
 }
 
+.snarkDirInfo .percentBarText {
+     padding: 0;
+}
+
 .iframed .percentBarText, .iframed .percentBarText:hover, .iframed .percentBarText:focus {
      transition: none;
 }
@@ -951,7 +981,6 @@ _:-ms-lang(x), .snarkDirInfo img, .snarkTorrents img {
 }
 
 .snarkAddInfo {
-     font-size: 8pt;
      line-height: 100% !important;
      white-space: normal;
      background: url(images/infocircle.png) left center no-repeat;
@@ -965,7 +994,8 @@ _:-ms-lang(x), .snarkDirInfo img, .snarkTorrents img {
      background: #101;
      background: rgba(17, 0, 17, 0.7);
      border-radius: 2px;
-     color: #fbf;
+     font-size: 8pt !important;
+     color: #ff7;
      padding: 2px 4px;
      box-shadow: inset 0 0 0 1px #212;
      -moz-user-select: all;
@@ -1037,8 +1067,77 @@ th.headerpriority br, .snarkTorrents thead th br {
      user-select: none;
 }
 
+.iframed .configsection .snarkConfigTitle, .iframed .toggleview {
+     border: 1px solid #878;
+     border-bottom: 1px solid #767;
+     border-top: none;
+     border-radius: 0 0 50px 50px;
+     background: linear-gradient(to bottom, #434, #656 48%, #434 52%, #212 54%, #101);
+     min-width: 320px;
+     padding: 4px 0 !important;
+     filter: drop-shadow(0 1px 2px #101);
+}
+
+.iframed .configsection .snarkConfigTitle {
+     padding-bottom: 5px !important;
+}
+
+.iframed .configsection .snarkConfigTitle a, .iframed .toggleview {
+     color: #a9a;
+}
+
+.iframed .configsection .snarkConfigTitle img, .iframed .toggleview img {
+     mix-blend-mode: luminosity;
+}
+
+.iframed .configsection .snarkConfigTitle:hover img, .iframed .toggleview:hover img {
+     mix-blend-mode: normal;
+}
+
+.iframed .newtorrentsection .toggleview img {
+     margin: -1px -2px 2px 0 !important;
+}
+
+.iframed .addtorrentsection .toggleview img {
+     margin: 0 -1px 0 0 !important;
+}
+
+.iframed .configsection .snarkConfigTitle img {
+     margin: 0 -2px 0 0 !important;
+}
+
+/* alternative iconified section tabs for iframed view */
+/*
+.iframed .configsection .snarkConfigTitle, .iframed .toggleview, .iframed .configsection .snarkConfigTitle:focus, .iframed .toggleview:focus {
+     font-size: 0;
+     min-width: 0;
+     width: 200px !important;
+     padding: 1px 5px !important;
+     border-radius: 0 0 3px 3px;
+}
+
+.iframed .configsection .snarkConfigTitle img, .iframed .toggleview img, .iframed .newtorrentsection .toggleview img {
+     background: #323;
+     background: linear-gradient(to bottom, #878 50%, #434 50%);
+     border-radius: 50%;
+     padding: 3px;
+     margin: 0 !important;
+     border: 2px solid #101;
+     box-shadow: none !important;
+     filter: none !important;
+     mix-blend-mode: normal;
+}
+
+.iframed .configsection .snarkConfigTitle:hover img, .iframed .toggleview:hover img,
+.iframed .configsection .snarkConfigTitle:focus img, .iframed .toggleview:focus img {
+     filter: drop-shadow(0 0 3px #730) !important;
+     box-shadow: none !important;
+     mix-blend-mode: normal !important;
+}
+*/
+
 .snarkConfigTitle:hover, .snarkConfigTitle:focus, label.toggleview:hover, label.toggleview:focus, .toggle_input:focus + label {
-     background: linear-gradient(to bottom, #5f475d 0%, #4f3b4f 50%, #1f001f 50%, #1f001f 100%);
+     background: linear-gradient(to bottom, #5f475d 0%, #4f3b4f 50%, #1f001f 50%, #1f001f 100%) !important;
      box-shadow: inset 0 0 1px #3f173f;
      color: #d2baff !important;
 }
@@ -1052,7 +1151,7 @@ th.headerpriority br, .snarkTorrents thead th br {
      border: 1px solid #101;
      border-top: none;
      background: #101 url(images/snarknav.png) repeat-x scroll center center;
-     background: linear-gradient(to bottom, #4a3d49 0%, #3d303d 50%, #0d000d 50%, #0d000d 100%);
+     background: linear-gradient(to bottom, #4a3d49 0%, #3d303d 50%, #0d000d 50%, #0d000d 100%) !important;
      font-variant: small-caps !important;
      letter-spacing: 0.15em;
      color: #f7e3fc;
@@ -1072,11 +1171,19 @@ th.headerpriority br, .snarkTorrents thead th br {
 }
 
 .snarkConfigTitle img, label.toggleview img {
-     margin: 1px -3px 2px 0;
+     margin: 1px -1px 2px 0;
      vertical-align: middle;
      filter: drop-shadow(0 0 1px #000);
 }
 
+.snarkConfigTitle img {
+     margin-right: -2px !important;
+}
+
+.configsectionpanel .snarkConfigTitle, .configsectionpanel .snarkConfigTitle:hover {
+     min-width: 400px;
+}
+
 .configsectionpanel .snarkConfigTitle:hover {
      color: #f7e3fc !important;
 }
@@ -1295,8 +1402,8 @@ input[name="upBW"] + i {
 }
 
 input.default {
-     width: 1px; 
-     height: 1px; 
+     width: 1px;
+     height: 1px;
      visibility: hidden;
 }
 
@@ -1474,21 +1581,6 @@ input.stoptorrent:hover, input.stoptorrent:focus {
      background: url(images/btn_stop.png), linear-gradient(to bottom, #767 0%, #989 100%);
 }
 
-/*
-a.control:active, input[type="submit"]:active, input[type="reset"]:active {
-     color: #ce1641 !important;
-     border: 1px solid #fff !important;
-     box-shadow: inset 3px 3px 3px #fff;
-}
-
-input[type=submit]:active, a.control:active {
-     background-blend-mode: soft-light;
-     color: #2e134c !important;
-     filter: drop-shadow(0 0 1px #f60) sepia(100%) invert(100%) !important;
-     mix-blend-mode: hard-light;
-}
-*/
-
 a.control:active, input[type="submit"]:active, input[type="reset"]:active {
      background-color: #322c5c !important;
      color: #c6bfff;
@@ -1510,6 +1602,7 @@ select {
      -webkit-appearance: none;
      -moz-appearance: none;
      box-shadow: inset 1px 1px 2px 1px #101;
+     text-overflow: ellipsis;
 }
 
 select:hover, select:focus, select:active  {
@@ -1608,7 +1701,6 @@ img[src$="magnet.png"] {
      word-wrap: break-word;
      background: #545;
      background: linear-gradient(to bottom, #545 0%, #434 100%);
-     background-position: top -1px center;
      overflow: auto;
 }
 
@@ -1659,6 +1751,7 @@ select, input, input.r, input[name="nofilter_dataDir"], textarea[name="i2cpOpts"
      border-radius: 0;
      box-shadow: inset 0 0 1px 0 #ffeffd;
      filter: none;
+     background-blend-mode: luminosity, normal;
 }
 
 .iframed .newtorrentsection, .iframed .addtorrentsection, .iframed .configsection, .iframed .configsectionpanel {
@@ -1969,12 +2062,21 @@ hr.debug + hr {
      white-space: normal;
      word-break: break-all;
      border-top: 1px solid #313;
+     border-bottom: none;
      background: #1f021f;
      padding: 0 10px 5px;
      padding: 0 0 4px;
      background: linear-gradient(to right, rgba(30,0,30,0.4) 0%, rgba(55,0,55,0.5) 50%, rgba(30,0,30,0.4) 100%), url(images/tile2.png);
 }
 
+.dhtdebug th:first-child {
+     border-radius: 0 0 0 4px;
+}
+
+.dhtdebug th:last-child {
+     border-radius: 0 0 4px 0;
+}
+
 .dhtDebug th > br:first-child {
      display: none;
 }
@@ -1995,16 +2097,15 @@ hr.debug + hr {
 }
 
 #dhtDebugPanel label {
-     padding: 8px 4px 4px !important;
+     padding: 4px !important;
      display: block;
-     margin: 0 0 -12px !important;
+     margin: 0 0 -13px !important;
      border-radius: 0 0 4px 4px;
      background: #202;
      box-shadow: none;
 }
 
 input#toggle_debug:not(checked) + label {
-     border-radius: 0;
      background: #101;
      background: linear-gradient(to bottom, #212 50%, #101 50%);
      text-align: center;
@@ -2173,6 +2274,7 @@ input#toggle_debug:checked + label + #dhtDebugInner {
 
 #configs td:first-child {
      min-width: 220px !important;
+     width: 25%;
      font-weight: bold;
 }
 
@@ -2405,7 +2507,7 @@ input#toggle_debug:checked + label + #dhtDebugInner {
 }
 
 #newRating select {
-     width: 90%;
+     width: 99%;
 }
 
 #myRating td:empty {
@@ -2646,6 +2748,10 @@ td.snarkTorrentStatus, td.snarkTorrentStatus a {
 #commentDeleteAction td {
     padding-top: 4px;
 }
+
+#trackerselect td {
+     font-size: 8pt !important;
+}
 }
 
 @media screen and (-webkit-min-device-pixel-ratio:0) and (max-width: 1200px) {
@@ -2778,14 +2884,14 @@ code {
 
 .snarkNav:link:first-child, .snarkNav:last-child[href="/i2psnark/"] {
      background-position: 11px 45%, center center !important;
-
 }
+
 .snarkNav:link {
      font-size: 11pt;
 }
 
 .snarkConfigTitle, label.toggleview {
-     font-size: 13pt !important;
+     font-size: 12pt !important;
      min-width: 320px !important;
 }
 
@@ -2897,7 +3003,17 @@ select {
 }
 
 #dhtdebugInner {
-     margin-top: -34px;
+     margin-top: -29px;
+}
+}
+
+@media screen and (min-width: 1400px) and (-webkit-min-device-pixel-ratio:0) {
+.snarkConfigTitle, label.toggleview {
+     font-size: 12.5pt !important;
+}
+
+select {
+     padding: 6px 18px 6px 8px !important;
 }
 }
 
@@ -2906,7 +3022,7 @@ select {
      padding-left: 6px;
 }
 
-.snarkMessages {
+.snarkMessages, .snarkTorrents tt, .snarkAddInfo code {
      font-size: 9pt !important;
 }
 }
@@ -3079,7 +3195,7 @@ th a img {
 }
 
 #dhtDebugInner {
-     margin-top: -28px !important;
+     margin-top: -25px !important;
 }
 
 .snarkTorrentStatus {
@@ -3089,12 +3205,6 @@ th a img {
 }
 }
 
-@media screen and (-webkit-min-device-pixel-ratio:0) and (max-width: 800px) {
-#dhtDebugInner {
-     margin-top: -29px !important;
-}
-}
-
 /* end mini-mode */
 
 /* hidpi devices only */
@@ -3107,3 +3217,152 @@ th a img {
 
 /* end responsive layout */
 
+
+.noscriptWarning {
+     margin-right: 7px !important;
+     font-family: "Droid Sans", "Noto Sans", Ubuntu, "Segoe UI", "Lucida Grande", "DejaVu Sans", Verdana, sans-serif;
+     font-size: 9pt;
+     mix-blend-mode: luminosity;
+     position: relative;
+     z-index: 1;
+}
+
+.noscriptWarning::before {
+     mix-blend-mode: luminosity;
+}
+
+#closeLog {
+     z-index: 1000;
+}
+
+/* create torrent -> trackers table */
+
+#trackerselect td:first-child, #trackerselect td:nth-child(2), #trackerselect td:nth-child(3) {
+     width: 20%;
+     min-width: 100px;
+     white-space: nowrap;
+}
+
+#trackerselect {
+     border: 1px solid #101;
+     border-collapse: separate;
+     border-spacing: 0;
+     width: 80% !important;
+     margin: 8px 0 4px 4px;
+     box-shadow: 0 0 1px 1px rgba(16, 8, 16, 0.3);
+}
+
+#trackerselect td {
+     padding: 5px !important;
+}
+
+#trackerselect td:first-child {
+/*     padding-right: 15px !important;*/
+     width: 30%;
+     text-align: center;
+}
+
+#trackerselect tr:first-child td {
+     background: #000;
+     background: linear-gradient(to bottom, #313, #000);
+     padding-top: 8px !important;
+     padding-bottom: 8px !important;
+     border-bottom: 1px solid #313;
+     font-weight: bold !important;
+}
+
+#trackerselect tr:nth-child(n+2) td {
+     border-right: 1px solid #101;
+     border-right: 1px solid rgba(16,0,16,0.5);
+}
+
+#trackerselect tr:nth-child(n+3) td {
+     border-top: 1px solid #101;
+}
+
+#trackerselect tr:nth-child(even) {
+     background: rgba(8,0,8,0.8);
+}
+
+#trackerselect tr:nth-child(odd) {
+     background: rgba(16,0,16,0.5);
+}
+
+#trackerselect td:nth-child(even) {
+     background: rgba(48,0,48,0.2);
+}
+
+#trackerselect td:nth-child(odd) {
+     background: rgba(64,0,64,0.2);
+}
+
+#trackerselect td:last-child {
+     text-align: center;
+     width: 30%;
+     border-right: none !important;
+}
+
+#trackerselect tr:nth-child(n+2):hover td {
+     background: #58165e !important;
+     background: linear-gradient(to bottom, #58165e, #4a0d56) !important;
+}
+
+#trackerselect tr:first-child td:first-child {
+     border-radius: 3px 0 0 0;
+}
+
+#trackerselect tr:first-child td:last-child {
+     border-radius: 0 3px 0 0;
+}
+
+#trackerselect tr:last-child td:first-child {
+     border-radius: 0 0 0 3px;
+}
+
+#trackerselect tr:last-child td:last-child {
+     border-radius: 0 0 3px 0;
+}
+
+#trackerselect input[type="radio"], #trackerselect input[type="checkbox"] {
+     margin: 2px !important;
+}
+
+.trackerName {
+     display: inline-block;
+     white-space: nowrap;
+     text-align: left;
+     border: 1px solid #101;
+     background: #202;
+     background: rgba(32,0,32,0.5);
+     border-radius: 3px;
+     padding: 1px 10px 1px 5px;
+     vertical-align: middle;
+}
+
+.trackerName::before {
+     content: "";
+     display: inline-block;
+     width: 20px;
+     height: 20px;
+     background: url(images/button_tracker_hover.png) left center no-repeat;
+     background-size: 16px auto;
+     vertical-align: middle;
+     opacity: 0.3;
+}
+
+@media screen and (max-width: 1050px) {
+#trackerselect {
+     width: 75% !important;
+}
+
+#trackerselect td {
+     min-width: 0;
+}
+
+#trackerselect td:first-child, #trackerselect td:last-child {
+     width: 15%;
+}
+}
+
+/* end create torrent -> trackers table */
+
diff --git a/installer/resources/themes/snark/vanilla/snark.css b/installer/resources/themes/snark/vanilla/snark.css
index 28217c7a83eaf5dd6737b4a465180fe3725b8554..2790b4ef8e73506b6a26e9abde7463b49805ba07 100644
--- a/installer/resources/themes/snark/vanilla/snark.css
+++ b/installer/resources/themes/snark/vanilla/snark.css
@@ -1129,7 +1129,15 @@ thead img.disable, img.disable:hover {
 }
 
 #trackerselect {
+     margin: 10px 0 5px 0;
      width: 100% !important;
+     width: calc(100% - 202px) !important;
+     border: 1px solid #6f533e;
+     margin-left: 5px;
+     border-collapse: separate;
+     border-spacing: 0;
+     border-radius: 2px;
+     box-shadow: 0 0 2px 1px rgba(77, 69, 62, 0.3);
 }
 
 #trackerselect tr:first-child td {
@@ -1140,10 +1148,25 @@ thead img.disable, img.disable:hover {
 
 #trackerselect td {
      white-space: nowrap !important;
+     text-align: center;
+}
+
+#trackerselect tr:nth-child(n+2) td {
+     border-right: 1px solid #6f533e;
+     border-right: 1px solid rgba(111, 83, 62, 0.5);
+}
+
+#trackerselect tr:nth-child(n+2) td:last-child {
+     border-right: none;
+}
+
+#trackerselect td:first-child, #trackerselect td:last-child {
+     width: 30% !important;
 }
 
 #trackerselect td:nth-child(2), #trackerselect td:nth-child(3) {
      min-width: 60px !important;
+     max-width: 200px !important;
 }
 
 .trackerconfig tr:first-child {
@@ -1151,11 +1174,25 @@ thead img.disable, img.disable:hover {
      filter: drop-shadow(0 0 1px #aaa);
 }
 
-#trackerselect td:first-child {
+#trackerselect tr:first-child td {
+     background: linear-gradient(to bottom, #efefef, #cfc7c2);
+     border-bottom: 1px solid #6f533e;
+}
+
+#trackerselect tr:nth-child(n+2):hover td {
+     background: #f9efcf !important;
+}
+
+#trackerselect td:first-child, #trackerselect td:last-child {
      font-weight: normal;
+     width: 20%;
+}
+
+#trackerselect input[type="radio"], #trackerselect input[type="checkbox"] {
+     margin: 4px !important;
 }
 
-#configs input[type="submit"], .trackerconfig input[type="submit"], input[name="savepri"] {
+#configs, input[type="submit"], .trackerconfig input[type="submit"], input[name="savepri"] {
      text-transform: capitalize;
 }
 
@@ -2097,11 +2134,11 @@ input#toggle_debug:checked + label + #dhtDebugInner {
      font-size: 10pt !important;
 }
 
-.resourceError tr:nth-child(odd) {
+.resourceError tr:nth-child(odd), #trackerselect tr:nth-child(odd) {
      background: #dfd6d1;
 }
 
-.resourceError tr:nth-child(even) {
+.resourceError tr:nth-child(even), #trackerselect tr:nth-child(even) {
      background: #efe6e0;
 }
 
@@ -2166,6 +2203,7 @@ input#toggle_debug:checked + label + #dhtDebugInner {
 
 #configs td:first-child {
      min-width: 240px !important;
+     width: 25%;
      font-weight: bold;
      text-align: right;
 }
@@ -2457,6 +2495,7 @@ td#bwHelp a {
      width: 90%;
      width: calc(100% - 10px);
      margin-left: 8px;
+     text-overflow: ellipsis;
 }
 
 #addCommentText {
@@ -2817,11 +2856,11 @@ body, .snarkTorrents td, .snarkAddInfo, th, td, .snarkFileName, a.control, input
      font-size: 10pt !important;
 }
 
-tt, .snarkTorrents tt, textarea {
+textarea {
      font-size: 9pt !important;
 }
 
-.snarkMessages {
+tt, .snarkTorrents tt, .snarkMessages {
      font-size: 8pt !important;
 }
 
@@ -2831,8 +2870,8 @@ tt, .snarkTorrents tt, textarea {
 }
 
 .snarkNav:link {
-     font-size: 12pt;
-     background-size: 18px auto, 100% 100%, 100% 100% !important;
+     font-size: 11.5pt;
+     background-size: 17px auto, 100% 100%, 100% 100% !important;
 }
 
 .nav_main:link, .nav_forum:link {
@@ -2939,9 +2978,15 @@ tr#torrentInfoStats td {
 }
 
 @media screen and (min-width: 1600px) {
-.snarkMessages {
+
+tt, .snarkTorrents tt, .snarkMessages {
      font-size: 9pt !important;
 }
+
+.snarkNav:link {
+     font-size: 12pt;
+     background-size: 18px auto, 100% 100%, 100% 100% !important;
+}
 }
 
 /* mini-mode */
@@ -2951,8 +2996,8 @@ tr#torrentInfoStats td {
      min-width: 650px !important;
 }
 
-.snarkNav:link, .snarkNav:visited {
-     font-size: 9pt !important;
+.snarkNav:link, .snarkNav:visited, #configs td, #configs input, #configs select {
+     font-size: 8pt !important;
 }
 
 th.snarkTorrentStatus a img, .snarkTorrentETA a img, .snarkTrackerDetails a img {
@@ -2972,6 +3017,17 @@ th.snarkTorrentStatus a img, .snarkTorrentETA a img, .snarkTrackerDetails a img
      max-height: 18px;
 }
 
+.snarkTorrents th:nth-child(2) img {
+     display: none !important;
+}
+
+.snarkTorrentName a {
+     white-space: nowrap;
+     overflow: hidden;
+     text-overflow: ellipsis !important;
+     max-width: 360px;
+}
+
 .snarkTorrentUploaded, .snarkTorrentRateUp, .peerinfo, .debuginfo {
      display: none;
 }
diff --git a/installer/resources/themes/susidns/classic/susidns.css b/installer/resources/themes/susidns/classic/susidns.css
index ade4d35491e7857d87d4910d07807b0761a24bf8..19d4acf479a0f1fb662166457fddecba03868bba 100644
--- a/installer/resources/themes/susidns/classic/susidns.css
+++ b/installer/resources/themes/susidns/classic/susidns.css
@@ -35,6 +35,12 @@ body.iframed {
      outline: none;
 }
 
+#navi, .buttons, #buttons, #host_list tr:first-child, #host_list img, #host_list td:nth-child(n+2) a {
+     -moz-user-select: none;
+     -webkit-user-select: none;
+     user-select: none;
+}
+
 hr {
      display: none;
 }
@@ -498,6 +504,10 @@ img[src*="imagegen"] {
      filter: drop-shadow(0 0 3px #ccc);
 }
 
+img[src="/imagegen/id?s=256&c="], img[src="/imagegen/id?s=20&c="] {
+     opacity: 0; /* hide broken identicons but ensure hostlist remains intact */
+}
+
 .illustrate {
      max-width: 700px;
      height: auto;
@@ -585,7 +595,7 @@ td.destinations textarea, td.destinations textarea:focus {
 }
 
 .fakebutton, input[type="submit"], input[type="reset"] {
-     padding: 4px 8px !important;
+     padding: 5px 8px !important;
      border-radius: 2px;
      border: 1px solid #bbb;
      box-shadow: inset 0 0 0 1px #fff, 0 0 1px 0 #ddd;
@@ -611,6 +621,15 @@ td.destinations textarea, td.destinations textarea:focus {
      color: #333;
 }
 
+.fakebutton {
+     margin: -4px 0 -4px 4px !important;
+     display: inline-block;
+}
+
+.iframed .fakebutton {
+     margin-bottom: -2px !important;
+}
+
 input[type="radio"], input[type="checkbox"] {
      min-width: 16px;
      min-height: 16px;
@@ -812,7 +831,7 @@ p.book {
      width: 20px;
      height: 20px;
      vertical-align: middle;
-     margin: 1px 10px 1px 1px;
+     margin: 3px 10px 3px 1px;
      padding: 1px;
      border: 1px solid #89f;
      border-radius: 2px;
@@ -877,6 +896,7 @@ p.book {
 #host_list td:nth-child(3) a::after {
      content: url(/themes/console/images/buttons/helper.png);
      cursor: pointer;
+     filter: drop-shadow(0 0 1px #555);
 }
 
 #host_list th:nth-child(4), #host_list td:nth-child(4) {
@@ -912,6 +932,19 @@ p.book {
      user-select: all;
 }
 
+#host_list .destaddress:not(old) {
+     overflow: hidden !important;
+     text-overflow: ellipsis;
+}
+
+#host_list .destaddress:not(old):focus {
+     padding-top: 0;
+     padding-bottom: 0;
+     overflow: auto !important;
+     text-overflow: clip;
+     margin: 1px 0 -1px;
+}
+
 /* end hostname list */
 
 .destaddress:focus {
@@ -934,6 +967,23 @@ td.destinations {
 }
 }
 
+@media screen and (max-width: 1200px) {
+#filter {
+     padding: 0 5px;
+}
+
+#filter p {
+     margin-left: 0;
+     margin-right: 0;
+}
+
+#filter a {
+     min-width: 6px;
+     padding: 0 6px !important;
+     line-height: 150%;
+}
+}
+
 @media screen and (min-width: 1400px) {
 body, p, td, textarea, input, button, li, a {
      font-size: 10pt !important;
diff --git a/installer/resources/themes/susidns/dark/susidns.css b/installer/resources/themes/susidns/dark/susidns.css
index 545aea13b43a3ab3e634e143e6cb27f7f3525de2..124bd3f85c446b06b0701024e3b1fedd76ab9aa0 100644
--- a/installer/resources/themes/susidns/dark/susidns.css
+++ b/installer/resources/themes/susidns/dark/susidns.css
@@ -30,6 +30,12 @@ body.iframed {
      text-shadow: none;
 }
 
+#navi, .buttons, #buttons, #host_list tr:first-child, #host_list img, #host_list td:nth-child(n+2) a {
+     -moz-user-select: none;
+     -webkit-user-select: none;
+     user-select: none;
+}
+
 .page {
      color:#ee9;
      margin: 10px 0;
@@ -53,7 +59,7 @@ body.iframed {
 
 /* topnav */
 
-div#navi  {
+#navi  {
      border: 1px solid #2a5f29;
      padding: 5px 3px;
      background: #000 url(/themes/console/dark/images/header.png) repeat-x scroll center center !important;
@@ -66,7 +72,7 @@ div#navi  {
      text-align: center;
 }
 
-.iframed div#navi  {
+.iframed #navi  {
      margin: -6px -15px 30px;
      border: 1px solid #494;
      border-right: none;
@@ -80,22 +86,30 @@ div#navi  {
      text-transform: capitalize;
 }
 
+#navi a:first-child {
+     border-radius: 4px 0 0 4px;
+}
+
+#navi a:last-child {
+     border-radius: 0 4px 4px 0;
+}
+
 #navi a, #navi a:visited {
      color: #494 !important;
      border: 1px solid #2a5f29;
-     border-radius: 2px;
      display: inline-block;
-     margin: 1px 0;
-     box-shadow: inset 0 0 0 1px #000;
-     filter: drop-shadow(0 0 1px #000);
-     padding: 2px 5px 3px 24px;
+     margin: 1px -2px;
+     box-shadow: inset 0 0 0 1px #000, 0 0 0 1px #000;
+     padding: 2px 6px 3px 24px;
+     position: relative;
+     text-shadow: 0 1px 1px #000;
 }
 
 #navi a:hover, #navi a:focus  {
     border: 1px solid #f60;
     color: #f60 !important;
     background: #000;
-    box-shadow: inset 0 1px 1px #ee9;
+    z-index: 10;
 }
 
 #navi a:active {
@@ -249,7 +263,7 @@ div#filter + div#search > form {
      border: 1px solid #2a5f29;
      margin: 1px 0 3px;
      padding: 1px 8px;
-     min-width: 18px;
+     min-width: 12px;
      border-radius: 2px;
      background: #000;
      background: linear-gradient(to bottom, #010 0%, #000 100%);
@@ -257,6 +271,7 @@ div#filter + div#search > form {
      text-transform: uppercase;
      white-space: nowrap;
      display: inline-block;
+     line-height: 160%;
 }
 
 #filter a:hover {
@@ -287,6 +302,8 @@ div#filter + div#search > form {
 #filter span a, #filter span a:hover {
      border: none;
      background: none;
+     margin: 0 0 0 10px;
+     padding: 0;
 }
 
 #filter span a:active {
@@ -341,6 +358,10 @@ h3 {
      border: none;
      border-bottom: 1px dotted #494;
      background: none;
+     box-shadow: none;
+     background: url(/themes/console/images/info/question.png) 5px center no-repeat;
+     background-size: 18px 18px;
+     padding-left: 30px;
 }
 
 #content h3:first-child {
@@ -348,7 +369,7 @@ h3 {
 }
 
 #content p {
-     line-height: 130%;
+     line-height: 150%;
 }
 
 .headline h3:first-child + h4 {
@@ -356,7 +377,7 @@ h3 {
      margin-bottom: 26px !important;
 }
 
-div.headline {
+.headline {
      margin-top: -16px;
 }
 
@@ -443,7 +464,7 @@ h4 {
      background: url(/themes/susidns/images/drive.png) 9px center no-repeat, linear-gradient(to bottom, #001000 0%, #001900 50%, #000 51%, #000 100%) !important;
 }
 
-a:link {
+a:link, #filter a:visited {
      color: #494;
      text-decoration: none;
      font-weight: bold;
@@ -548,6 +569,10 @@ td > img[width="320"], td > img[src^="/imagegen"] {
      background: #000;
 }
 
+img[src="/imagegen/id?s=256&c="], img[src="/imagegen/id?s=20&c="] {
+     opacity: 0; /* hide broken identicons but ensure hostlist remains intact */
+}
+
 ol, ul {
      margin: 0 20px 0 10px;
      display: table-row;
@@ -1074,8 +1099,7 @@ p.book {
      text-overflow: ellipsis;
 }
 
-#host_list .destaddress:hover, #host_list .destaddress:focus {
-     color: #bb0;
+#host_list .destaddress:focus {
      overflow: auto;
      text-overflow: clip;
 }
@@ -1088,6 +1112,10 @@ td.destinations {
      border-right: 1px solid #121;
 }
 
+tr:hover .destinations {
+     color: #bb0;
+}
+
 /* MS Edge fix */
 _:-ms-lang(x), * {
      filter: none !important;
@@ -1120,13 +1148,29 @@ _:-ms-lang(x), * {
 }
 }
 
+@media screen and (max-width: 1200px) {
+#filter {
+     padding: 0 5px;
+}
+
+#filter p {
+     margin-left: 0;
+     margin-right: 0;
+}
+
+#filter a {
+     min-width: 6px;
+     padding: 0 6px;
+}
+}
+
 @media screen and (min-width: 1400px) {
 
 body, input[type="submit"], input[type="reset"], .fakebutton, input, select, h4, td.names a, p, li, #filter a, #host_details td, textarea, th, #search td, .destaddress {
      font-size: 10pt !important;
 }
 
-div#navi {
+#navi {
      padding: 6px 5px !important;
 }
 
diff --git a/installer/resources/themes/susidns/light/susidns.css b/installer/resources/themes/susidns/light/susidns.css
index 559b670f6c969c935398dce81231d683c0e3f9a7..0e4e2a7db5caa915f45b189da06814a85292ccb5 100644
--- a/installer/resources/themes/susidns/light/susidns.css
+++ b/installer/resources/themes/susidns/light/susidns.css
@@ -4,9 +4,8 @@
 body {
      font-family: "Droid Sans", "Noto Sans", Ubuntu, "Segoe UI", "Lucida Grande", "Bitstream Vera Sans", Verdana, sans-serif;
      font-size: 9pt;
-     background-color: #fff;
      background: #a4a4cb url(/themes/console/light/images/tile2.png) center center;
-     color: #333;
+     color: #33333f;
      margin: 0 5px;
 }
 
@@ -28,10 +27,20 @@ body.iframed {
      text-shadow: none;
 }
 
+#navi, .buttons, #buttons, #host_list tr:first-child, #host_list img, #host_list td:nth-child(n+2) a {
+     -moz-user-select: none;
+     -webkit-user-select: none;
+     user-select: none;
+}
+
 * {
      outline: none;
 }
 
+b, td.search {
+     color: #41465f;
+}
+
 #logo {
      margin: -5px 0 -1px;
      text-align: center;
@@ -43,6 +52,22 @@ body.iframed {
      box-shadow: inset 0 0 0 1px #fff;
 }
 
+#logo:not(old) {
+     background: linear-gradient(to bottom, #fff, #eef);
+}
+
+#logo::before {
+     content: "";
+     display: inline-block;
+     background: url(/themes/susidns/images/logo.png) center center no-repeat;
+     background-size: auto 50px;
+     height: 55px;
+     width: 100%;
+     opacity: 0.7;
+     filter: sepia(100%) hue-rotate(180deg);
+     mix-blend-mode: multiply;
+}
+
 #logo img {
      display: none;
 }
@@ -73,7 +98,7 @@ code, tt, .destaddress {
      padding: 5px 3px;
      text-align: center;
      border: 1px solid #7778bf;
-     background: linear-gradient(to right, rgba(255, 255, 255, 1) 0%, rgba(239, 239, 255, 0.5) 50%, rgba(255, 255, 255, 1) 100%), linear-gradient(to bottom, #fff 0%, #fff 51%, #eef 51%, #ddf 100%);
+     background: linear-gradient(to bottom, #fafaff 51%, #f8f8ff 51%, #f2f2ff 100%);
      border-radius: 2px 2px 0 0;
      box-shadow: inset 0 0 0 1px #fff;
      z-index: 100;
@@ -92,7 +117,7 @@ code, tt, .destaddress {
 }
 
 #navi a, #navi a:visited {
-     border: 1px solid #77789f;
+     border: 1px solid #7778bf;
      border-radius: 2px;
      color: #3b6bbf;
      display: inline-block;
@@ -100,6 +125,7 @@ code, tt, .destaddress {
      text-transform: capitalize;
      box-shadow: inset 0 0 0 1px #fff;
      filter: drop-shadow(0 0 1px rgba(204, 204, 204, 0.6));
+     line-height: 110%;
 }
 
 #navi a:hover, #navi a:focus {
@@ -111,7 +137,7 @@ code, tt, .destaddress {
 }
 
 #navi a:active {
-     color: #555;
+     color: #5a5a6f;
      box-shadow: inset 0 0 0 1px #fff, inset 3px 3px 2px #999;
      mix-blend-mode: luminosity;
 }
@@ -142,6 +168,7 @@ code, tt, .destaddress {
      padding: 8px 5px;
      background: #fff;
      background: linear-gradient(to right, #fff 70%, #eef);
+     background: linear-gradient(135deg, #fafaff, #f2f2ff);
 }
 
 .iframed .headline {
@@ -149,22 +176,36 @@ code, tt, .destaddress {
 }
 
 h3, h4, th, #filter span {
-     color: #31334f;
+     color: #41465f;
+}
+
+h3 {
+     font-size: 11pt !important;
+     box-shadow: inset 0 0 0 1px #fff;
 }
 
 .headline h3 {
-     margin: 0;
-     padding: 2px 5px 3px 30px;
-     background: url(/themes/susidns/images/addressbook.png) left center no-repeat;
-     font-size: 11pt;
+     font-size: 11.5pt !important;
+     background: url(/themes/susidns/images/addressbook.png) 6px center no-repeat #fcfcff;
+     background: url(/themes/susidns/images/addressbook.png) 6px center no-repeat, linear-gradient(to bottom, #fcfcff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), linear-gradient(135deg, #fcfcff 5%, rgba(231, 231, 255, 0.8) 15%);
+     background-size: 22px 22px, 100% 100%, 100% 100%;
 }
 
 .headline#subscriptions h3 {
-     background: url(/themes/susidns/images/subs_24.png) left center no-repeat;
+     background: url(/themes/susidns/images/subs_24.png) 6px center no-repeat #fcfcff;
+     background: url(/themes/susidns/images/subs_24.png) 6px center no-repeat, linear-gradient(to bottom, #fcfcff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), linear-gradient(135deg, #fcfcff 5%, rgba(231, 231, 255, 0.8) 15%);
+     background-size: 22px 22px, 100% 100%, 100% 100%;
 }
 
 .headline#configure h3 {
-     background: url(/themes/susidns/images/configure_24.png) left center no-repeat;
+     background: url(/themes/susidns/images/configure_24.png) 6px center no-repeat #fcfcff;
+     background: url(/themes/susidns/images/configure_24.png) 6px center no-repeat, linear-gradient(to bottom, #fcfcff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), linear-gradient(135deg, #fcfcff 5%, rgba(231, 231, 255, 0.8) 15%);
+     background-size: 22px 22px, 100% 100%, 100% 100%;
+}
+
+.headline#subscriptions h3, .headline#configure h3, .headline#addressbook h3, .headline h3 {
+     margin: -8px -5px -5px;
+     padding: 9px 5px 8px 32px;
 }
 
 span.location {
@@ -178,7 +219,6 @@ span.location {
 .headline h4 {
      border-top: 1px solid #7778bf;
      margin: 5px -6px 0;
-     padding: 8px 10px 0;
      padding: 8px 10px 0 33px;
      background: url(/themes/susidns/images/drive.png) 9px 7px no-repeat;
 }
@@ -187,7 +227,7 @@ span.location {
      border: 1px solid #7778bf;
      padding: 0 15px;
      margin: -1px 0 0;
-     background: #fff;
+     background: #fafaff;
 }
 
 .iframed #content {
@@ -201,32 +241,19 @@ form[action="subscriptions"] #content {
      margin-top: 1px;
 }
 
-#content textarea  {
-     margin: 2px -15px;
-     padding: 5px 0;
-     border: none;
-     width: 100%;
-     resize: none;
-     filter: none;
-     box-shadow: none;
-}
-
-.iframed #content textarea {
-     border: 1px solid #7778bf;
-     margin: 0;
-}
-
 #content + #buttons {
      border: 1px solid #7778bf;
      margin: -1px 0 10px;
-     background: linear-gradient(to bottom, #fff 50%, rgba(220,220,255,0.3)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px), #fff !important;
+     background: linear-gradient(to bottom, #fafaff 50%, rgba(220,220,255,0.3)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px), #fff !important;
 }
 
 #content h3 {
-     border: 1px solid #77789f;
-     padding: 5px 8px;
+     border: 1px solid #7778bf;
+     padding: 5px 8px 5px 34px;
      border-radius: 2px;
-     background: linear-gradient(to bottom, #fff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), linear-gradient(to right, #fff 5%, rgba(231, 231, 255, 0.8) 15%) !important;
+     background: url(/themes/console/images/info/question.png) 8px center no-repeat, linear-gradient(to bottom, #fcfcff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), linear-gradient(135deg, #fcfcff 5%, rgba(231, 231, 255, 0.8) 15%) !important;
+     background-size: 20px 20px, 100% 100%, 100% 100% !important;
+     background-blend-mode: luminosity, normal, normal;
      box-shadow: inset 0 0 0 1px #fff, 0 0 1px #ccc;
      text-transform: none;
      letter-spacing: 0;
@@ -239,13 +266,14 @@ form[action="subscriptions"] #content {
 #content p {
      margin-left: 15px;
      margin-right: 15px;
+     line-height: 130%;
 }
 
 div#add {
      border: 1px solid #7778bf;
      margin-top: -1px;
      padding: 0 15px;
-     background: #fff;
+     background: #fafaff;
 }
 
 .iframed #add {
@@ -283,6 +311,7 @@ div.help {
      border: 1px solid #7778bf;
      padding: 0 15px;
      background: #eef;
+     background: linear-gradient(135deg, #fafaff, #f8f8ff);
      margin: -11px 0 0;
 }
 
@@ -292,15 +321,17 @@ div.help {
 
 .help#helpsubs {
      background: #eef url(/themes/console/images/info/infohelp.png) 10px center no-repeat;
+     background: url(/themes/console/images/info/infohelp.png) 10px center no-repeat, linear-gradient(135deg, #fafaff, #f8f8ff);
      padding: 0 15px 0 45px;
      font-size: 10pt;
 }
 
-div.help h3 {
+div.help h3, #add h3 {
      border: 1px solid #7778bf;
      padding: 5px 10px;
      margin: -1px -16px 0;
-     background: #fff;
+     background: #fcfcff;
+     background: linear-gradient(to bottom, #fcfcff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), linear-gradient(135deg, #fcfcff 5%, rgba(231, 231, 255, 0.8) 15%);
 }
 
 p#help {
@@ -438,7 +469,7 @@ p.messages {
 #footer {
      border: 1px solid #7778bf;
      background: #eef;
-     background: linear-gradient(to right, #eef, #fff, #eef);
+     background: linear-gradient(to right, #eef, #fafaff, #eef);
      margin: -1px 0 -5px;
      box-shadow: inset 0 0 0 1px #fff;
 }
@@ -465,10 +496,19 @@ p.footer {
      box-shadow: inset 0 0 0 1px #ccc;
      background: #fff;
      opacity: 0.85;
-     filter: drop-shadow(0 0 1px #999);
+     filter: drop-shadow(0 0 1px #ccc);
      text-align: center;
 }
 
+.iframed .illustrate {
+     background: #fafaff;
+     background: linear-gradient(to bottom, #fafaff 70%, rgba(220,220,255,0.1)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.6) 3px, #fff 5px) #fff;
+}
+
+.iframed .illustrate:hover {
+     background: #fff;
+}
+
 _:-ms-lang(x), img.illustrate {
      width: auto;
      max-width: 600px;
@@ -493,49 +533,74 @@ _:-ms-lang(x), img.illustrate {
      min-width: 520px;
 }
 
+input[type="text"], input[type="password"], textarea {
+     padding: 5px !important;
+     box-shadow: inset 1px 1px 1px rgba(204, 204, 204, 0.6);
+     border: 1px solid #999daf;
+     border-radius: 2px;
+     color: #33333f;
+     background: #f8f8ff;
+     font-family: "Droid Sans", "Noto Sans", Ubuntu, "Segoe UI", "Lucida Grande", "Bitstream Vera Sans", Verdana, sans-serif;
+     filter: drop-shadow(0px 0 1px #ccf);
+}
+
+input[type="text"]:focus, input[type="password"]:focus, textarea:focus {
+     color: #19191f;
+     box-shadow: 0 0 1px #89f;
+     background: #fff !important;
+     border: 1px solid #676c7f;
+}
+
 textarea {
      font-family: "Droid Sans Mono", "Noto Mono", "Lucida Console", "DejaVu Sans Mono", monospace;
      font-size: 9pt;
      width: 100%;
      border-radius: 2px;
-     border: 1px solid #7778bf;
+     border: 1px solid #999daf;
      padding: 1px 3px;
-     color: #333;
+     color: #33333f;
      resize: none;
 }
 
-input[type="text"], input[type="password"], textarea {
-     padding: 5px !important;
-     box-shadow: inset 1px 1px 2px #bbb;
-     border: 1px solid #999;
-     border-radius: 2px;
-     color: #333;
-     background: #fff;
+#content textarea  {
+     margin: 0 0 0 -15px;
+     border: none;
+     width: 100%;
+     resize: none;
+     filter: none;
+     box-shadow: none;
 }
 
-input[type="text"]:focus, input[type="password"]:focus, textarea:focus {
-     color: #111;
-     box-shadow: 0 0 1px #89f;
-     background: #fff !important;
+.iframed #content textarea {
+     border: 1px solid #7778bf;
+     margin: 0;
 }
 
-textarea[name="config"] {
+textarea[name="config"], textarea[name="content"] {
      border-radius: 0;
      box-shadow: none;
      border: 1px solid #7778bf;
+     background: #fafaff;
+     width: 100% !important;
+     padding: 3px 6px !important;
+     filter: none;
+}
+
+textarea[name="config"]:focus, textarea[name="content"]:focus {
+     background: #fff;
 }
 
 #config + #buttons {
      border: 1px solid #7778bf;
      margin: -2px 0 10px;
-     background: linear-gradient(to bottom, #fff 50%, rgba(220,220,255,0.3)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px), #fff !important;
+     background: linear-gradient(to bottom, #fafaff 50%, rgba(220,220,255,0.3)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px), #fff !important;
 }
 
 #filter, #search {
     border: 1px solid #7778bf;
     padding: 5px 15px;
     margin-bottom: -1px;
-    background: #fff;
+    background: #fafaff;
 }
 
 #search {
@@ -566,15 +631,16 @@ td.search:first-child {
      text-align: center;
 }
 
-#filter a {
-     border: 1px solid #7778bf;
-     padding: 4px 8px;
+#filter a, #filter a:visited {
      display: inline-block;
-     min-width: 20px;
-     text-align: center;
+     min-width: 10px;
+     margin: 2px 1px;
+     padding: 4px 8px;
+     border: 1px solid #7778bf;
      border-radius: 2px;
+     color: #3b6bbf;
+     text-align: center;
      text-transform: capitalize;
-     margin: 2px 1px;
      background: #fff;
      filter: drop-shadow(0 0 1px #ccc);
 }
@@ -588,7 +654,7 @@ td.search:first-child {
      background: #f60;
      text-decoration: none;
      box-shadow: inset 0 0 0 1px #fff;
-     box-shadow: inset 0 0 0 1px #fff, inset 3px 3px 3px #333;
+     box-shadow: inset 0 0 0 1px #fff, inset 3px 3px 3px #33333f;
 }
 
 #filter span {
@@ -598,14 +664,14 @@ td.search:first-child {
      letter-spacing: 0.08em;
      word-spacing: 0.1em;
      vertical-align: middle;
-     border: 1px solid #77789f;
+     border: 1px solid #7778bf;
      border-radius: 0 0 2px 2px;
      padding: 6px 10px;
      width: 40%;
      min-width: 300px;
      margin: -1px 10%;
      box-shadow: inset 0 0 0 1px #fff;
-     background: linear-gradient(to bottom, #fff 50%, #eef 50%);
+     background: linear-gradient(to bottom, #fcfcff 50%, #eef 50%);
 }
 
 #filter span a {
@@ -617,9 +683,8 @@ td.search:first-child {
 
 #filter span b {
      font-size: 11pt;
-     margin: 0 5px;
+     margin: 0 3px 0 0;
      text-transform: uppercase;
-     color: #111;
      line-height: 80%;
 }
 
@@ -653,12 +718,12 @@ form {
 }
 
 th {
-     background: linear-gradient(to bottom, #fff 50%, #eef 50%);
+     background: linear-gradient(to bottom, #fcfcff 50%, #eef 50%);
      font-size: 9pt;
 }
 
 table {
-     background: #fff;
+     background: #fafaff;
 }
 
 table.book {
@@ -671,7 +736,7 @@ table.book {
 
 .book th:last-child  {
      background: #fff url(/themes/console/images/buttons/delete.png) center center no-repeat;
-     background: url(/themes/console/images/buttons/delete.png) center center no-repeat, linear-gradient(to bottom, #fff 50%, #eef 50%);
+     background: url(/themes/console/images/buttons/delete.png) center center no-repeat, linear-gradient(to bottom, #fcfcff 50%, #eef 50%);
      width: 16px;
 }
 
@@ -684,6 +749,10 @@ table.book {
      background: #ffd;
 }
 
+tr:hover .destaddress {
+     color: #333 !important;
+}
+
 .book tr:first-child td, .book tr.head + .list1 td {
      border-top: none;
 }
@@ -712,7 +781,7 @@ table.book {
 }
 
 #host_list td:last-child {
-     width: 16px;
+     width: 1%;
      white-space: nowrap;
      font-weight: bold;
 }
@@ -744,6 +813,7 @@ table.book {
 
 #host_list td:nth-child(3) a::after {
      content: url(/themes/console/images/buttons/helper.png);
+     filter: drop-shadow(0 0 1px #555);
      cursor: pointer;
 }
 
@@ -768,7 +838,7 @@ table.book {
      filter: drop-shadow(0 0 1px #f60);
 }
 
-.destaddress:focus {
+#host_list .destaddress:focus {
      background: #ffd;
 }
 
@@ -777,16 +847,28 @@ table.book {
      white-space: nowrap;
      font-family: "Droid Sans Mono", "Noto Mono", "Lucida Console", "DejaVu Sans Mono", monospace;
      font-weight: normal;
-     color: #555;
+     color: #5a5a6f;
      padding: 3px !important;
 }
 
+#host_list .destaddress:not(old) {
+     overflow: hidden !important;
+     text-overflow: ellipsis;
+}
+
+#host_list .destaddress:not(old):focus {
+     overflow: auto !important;
+     text-overflow: clip;
+     padding: 1px 3px 3px !important;
+     margin-bottom: -2px;
+     color: #33333f;
+}
+
 td.destinations {
      max-width: 50px !important;
      border-left: 1px solid #ddf;
      border-right: 1px solid #ddf;
      padding: 0;
-     background: #fff;
 }
 
 td.destinations textarea {
@@ -799,7 +881,7 @@ td.destinations textarea {
 /* host details page */
 
 #host_details td {
-     padding: 5px 10px !important;
+     padding: 5px !important;
 }
 
 #host_details td:first-child {
@@ -837,7 +919,7 @@ td.destinations textarea {
      border: 1px solid #7778bf !important;
      margin-top: -1px;
      border-radius: 2px;
-     background: #fff;
+     background: #fafaff;
      padding-top: 0;
 }
 
@@ -849,12 +931,13 @@ td.destinations textarea {
      border-bottom: 1px solid #7778bf;
      padding: 8px 10px 6px;
      margin-top: 0;
-     background: linear-gradient(to bottom, #fff 50%, #eef 50%);
+     background: linear-gradient(to bottom, #fcfcff 50%, #eef 50%);
      box-shadow: inset 0 0 0 1px #fff;
 }
 
 #idAddress {
      text-transform: none;
+     letter-spacing: 0;
 }
 
 #visualid table {
@@ -879,10 +962,10 @@ td.destinations textarea {
 
 #visualid td[colspan="2"] {
      text-align: right;
-     padding: 20px 5px;
+     padding: 17px 5px;
      border-top: 1px solid #7778bf;
      background: #fff;
-     background: linear-gradient(to bottom, #fff 50%, rgba(220,220,255,0.3)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px), #fff !important;
+     background: linear-gradient(to bottom, #fafaff 50%, rgba(220,220,255,0.3)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px) #fafaff !important;
 }
 
 img[src^="/imagegen"] {
@@ -895,6 +978,10 @@ img[src^="/imagegen"] {
      filter: drop-shadow(0 0 1px #ccc);
 }
 
+img[src="/imagegen/id?s=256&c="], img[src="/imagegen/id?s=20&c="] {
+     opacity: 0; /* hide broken identicons but ensure hostlist remains intact */
+}
+
 /* end host details */
 
 /* host list identicons */
@@ -941,7 +1028,7 @@ img[src^="/imagegen"] {
 div#book {
     padding: 8px;
     background: #efefff;
-    background: repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(240, 240, 255, 0.5) 3px, #fff 5px), #fff;
+    background: repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(220, 220, 255, 0.5) 3px, #fff 5px) #fafaff;
     box-shadow: inset 0 0 0 1px #fff;
 }
 
@@ -950,15 +1037,15 @@ div#book {
 }
 
 p.book {
-     background: url(/themes/susidns/images/addressbook.png) 5px center no-repeat;
-     padding: 5px 5px 5px 33px;
+     background: url(/themes/susidns/images/abook.png) 2px center no-repeat;
+     padding: 5px 5px 5px 24px;
 }
 
 #buttons {
      padding: 5px;
      text-align: right;
-     background: #fff;
-     background: linear-gradient(to bottom, #fff 50%, rgba(220,220,255,0.3)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px), #fff !important;
+     background: #fafaff;
+     background: linear-gradient(to bottom, #fafaff 50%, rgba(220,220,255,0.3)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px) #fafaff !important;
 }
 
 p.buttons {
@@ -989,10 +1076,11 @@ input[type="radio"], input[type="checkbox"] {
      cursor: pointer;
      min-width: 16px !important;
      min-height: 16px !important;
+     filter: sepia(100%) hue-rotate(185deg) drop-shadow(0 0 1px #ccf);
 }
 
 input[type="checkbox"]:hover, input[type="checkbox"]:focus, input[type="radio"]:hover, input[type="radio"]:focus {
-     filter: drop-shadow(0 0 3px #89f);
+     filter: sepia(100%) hue-rotate(185deg) drop-shadow(0 0 3px #89f);
 }
 
 input[type="submit"]::-moz-focus-inner, input[type="reset"]::-moz-focus-inner, button::-moz-focus-inner  {
@@ -1006,17 +1094,17 @@ input[type="submit"], input[type="reset"], .fakebutton {
      padding: 4px 3px;
      text-decoration: none;
      border-radius: 2px;
-     border: 1px solid #999;
+     border: 1px solid #999daf;
      box-shadow: inset 0 0 0 1px #fff;
      background: #eee;
      background: linear-gradient(to bottom, #fff, #ddd);
-     color: #333;
-     filter: saturate(70%) drop-shadow(0 0 1px rgba(204, 204, 204, 0.6));
+     color: #33333f;
+     filter: saturate(70%) drop-shadow(0 0 1px #ccf);
      cursor: pointer;
 }
 
 a.fakebutton {
-     color: #333;
+     color: #33333f;
      font-weight: normal;
 }
 
@@ -1140,7 +1228,7 @@ input.search {
      background: #eee url(/themes/console/images/buttons/search.png) no-repeat 6px center;
      background: url(/themes/console/images/buttons/search.png) no-repeat 6px center, linear-gradient(to bottom, #fff, #ddd);
      background-size: 14px 14px, 100% 100%;
-     padding: 6px 8px 6px 22px;
+     padding: 5px 8px 5px 24px;
 }
 
 input.search:hover, input.search:focus {
@@ -1150,8 +1238,8 @@ input.search:hover, input.search:focus {
 }
 
 input.search[type="text"] {
-     background: #fff url(/themes/console/images/buttons/search.png) no-repeat 6px center;
-     padding: 5px 5px 5px 28px !important;
+     background: #f8f8ff url(/themes/console/images/buttons/search.png) no-repeat 6px center;
+     padding: 5px 5px 5px 26px !important;
      margin: 1px 5px 0;
 }
 
@@ -1197,6 +1285,81 @@ form[action="addressbook"] table {
      margin-top: -2px !important;
 }
 
+
+/* custom radios/checkboxes for chrome/blink  */
+
+@media screen and (-webkit-min-device-pixel-ratio: 0) and (min-resolution:.001dpcm) {
+input[type="checkbox"], input[type="checkbox"]:checked, input[type="checkbox"][disabled], input[type="checkbox"][disabled]:checked {
+     background: #f8f8ff;
+     width: 19px !important;
+     height: 19px !important;
+     box-shadow: inset 1px 1px 1px rgba(204, 204, 204, 0.6);
+     border-radius: 2px;
+     -webkit-appearance: inherit;
+     border: 1px solid #999daf !important;
+     position: relative;
+     box-sizing: border-box;
+     filter: drop-shadow(0 0 1px #ccf);
+     vertical-align: middle !important;
+}
+
+input[type="checkbox"]:checked::before {
+     position: absolute;
+     top: 1px;
+     left: 1px;
+     content: "\2714";
+     border-radius: 1px;
+     font-size: 15pt;
+     color: #41465f;
+     line-height: 80%;
+     font-family: sans-serif;
+     overflow: hidden;
+     width: 16px;
+     height: 16px;
+}
+
+input[type="radio"], input[type="radio"]:checked, input[type="radio"][disabled], input[type="radio"][disabled]:checked {
+     background: #f8f8ff;
+     width: 19px !important;
+     height: 19px !important;
+     box-shadow: inset 0 0 2px #7778bf;
+     border-radius: 50%;
+     -webkit-appearance: none;
+     border: 1px solid #999daf !important;
+     position: relative;
+     box-sizing: border-box;
+     filter: drop-shadow(0 0 1px #ccf);
+     vertical-align: middle !important;
+}
+
+input[type="radio"]:checked::before {
+     content: "";
+     position: absolute;
+     border-radius: 50%;
+     left: 25%;
+     top: 25%;
+     width: 9px;
+     height: 9px;
+     background: #41465f;
+}
+
+input[type="checkbox"]:hover, input[type="radio"]:hover, input[type="checkbox"]:focus, input[type="radio"]:focus {
+     background: #fff;
+     width: 19px !important;
+     height: 19px !important;
+     filter: drop-shadow(0 0 3px #89f) !important;
+}
+
+input[type="checkbox"][disabled], input[type="radio"][disabled], input[type="checkbox"][disabled]:hover, input[type="radio"][disabled]:hover,
+input[type="checkbox"][disabled]:checked, input[type="radio"][disabled]:checked, input[type="checkbox"][disabled]:checked:hover, input[type="radio"][disabled]:checked:hover {
+     filter: none !important;
+     box-shadow: none !important;
+     opacity: 0.5;
+}
+}
+
+/* end custom radios/checkboxes */
+
 /* responsive layout */
 
 @media screen and (max-width: 680px) {
@@ -1215,6 +1378,22 @@ form[action="addressbook"] table {
 }
 }
 
+@media screen and (max-width: 1200px) {
+#filter {
+     padding: 0 5px;
+}
+
+#filter p {
+     margin-left: 0;
+     margin-right: 0;
+}
+
+#filter a {
+     min-width: 6px;
+     padding: 2px 6px;
+}
+}
+
 @media screen and (min-width: 1400px) {
 body, p, td, textarea, input, button, li, a, th, h4 {
      font-size: 10pt !important;
@@ -1228,10 +1407,6 @@ code, tt, .destaddress {
      font-size: 11pt;
 }
 
-h3 {
-     font-size: 12pt !important;
-}
-
 #export {
      margin-top: -40px !important;
 }
@@ -1256,7 +1431,7 @@ input.export {
 }
 
 .headline h4 {
-     background: rgba(0, 0, 0, 0) url(/themes/susidns/images/drive.png) no-repeat scroll 10px 8px;
+     background: url(/themes/susidns/images/drive.png) no-repeat scroll 10px 8px;
 }
 }
 
diff --git a/installer/resources/themes/susidns/midnight/susidns.css b/installer/resources/themes/susidns/midnight/susidns.css
index a58b628b04fd01dfbda48f79ba5a6f51d01e53f8..49fb1789d5e29773ff9b2fbba699427531637acc 100644
--- a/installer/resources/themes/susidns/midnight/susidns.css
+++ b/installer/resources/themes/susidns/midnight/susidns.css
@@ -20,6 +20,23 @@ body.iframed {
      outline: none;
 }
 
+::selection {
+     background: #22296f !important;
+     background: rgba(34, 41, 111, 0.9) !important;
+     color: white;
+}
+
+::-moz-selection {
+     background: #22296f !important;
+     color: white;
+}
+
+#navi, .buttons, #buttons, #host_list tr:first-child, #host_list img, #host_list td:nth-child(n+2) a {
+     -moz-user-select: none;
+     -webkit-user-select: none;
+     user-select: none;
+}
+
 #logo {
      display: none;
 }
@@ -29,7 +46,7 @@ body.iframed {
 div#navi  {
      border: 1px solid #2d295f;
      padding: 3px 0 2px;
-     background: #002 url(/themes/console/midnight/images/header.png) repeat-x scroll center center !important;
+     background: #002 url(/themes/console/midnight/images/titles.png) repeat-x scroll center center !important;
      background: linear-gradient(to bottom, #191729 0%, #000 50%) !important;
      margin: -11px 0 27px;
      box-shadow: inset 0 0 0 1px #000;
@@ -248,7 +265,7 @@ p#filtered {
      white-space: nowrap;
      margin: -1px auto;
      box-shadow: inset 0 0 0 1px #000;
-     background: url(/themes/console/midnight/images/header.png) repeat-x scroll center center #000;
+     background: url(/themes/console/midnight/images/titles.png) repeat-x scroll center center #000;
      background-image: linear-gradient(to bottom, #010010 0%, #020019 50%, #060051%, #0100100%) !important;
 }
 
@@ -317,7 +334,7 @@ h3 {
      border: 1px solid #2d295f;
      padding: 7px 10px;
      border-radius: 2px;
-     background: #000 url(/themes/console/midnight/images/header.png) repeat-x scroll center center;
+     background: #000 url(/themes/console/midnight/images/titles.png) repeat-x scroll center center;
      background: linear-gradient(to bottom, #191729 0%, #000 50%);
      letter-spacing: 0.08em;
      word-spacing: 0.1em;
@@ -444,12 +461,6 @@ th {
      border-bottom: 1px solid #2d295f;
 }
 
-.book th:last-child {
-     background: #000 url(/themes/console/images/buttons/delete.png) center center no-repeat !important;
-     font-size: 0;
-     padding: 0 !important;
-}
-
 table.book td:first-child {
      font-weight: bold;
 }
@@ -479,6 +490,10 @@ td > img[width="320"], td > img[src^="/imagegen"] {
      background: #000;
 }
 
+img[src="/imagegen/id?s=256&c="], img[src="/imagegen/id?s=20&c="] {
+     opacity: 0; /* hide broken identicons but ensure hostlist remains intact */
+}
+
 ol, ul {
      margin: 0 20px 0 10px;
      display: table-row;
@@ -642,20 +657,30 @@ div#book {
 #book table {
      width: 100%;
      border: 1px solid #2d295f !important;
-/*     margin-top: -10px;*/
 }
 
 .iframed #book table {
      border: none !important;
 }
 
+.iframed #book #host_details {
+     border-top: 1px solid #2d295f !important;
+}
+
 #book table th {
      padding: 5px 0;
-     background: url(/themes/console/midnight/images/header.png) repeat-x scroll center center #000;
-     background-image: linear-gradient(to bottom, #010010 0%, #020019 50%, #060051%, #0100100%) !important;
+     background: url(/themes/console/midnight/images/titles.png) repeat-x scroll center center #000;
+     background: linear-gradient(to bottom, #191729 0%, #000 50%) !important;
      border-bottom: 1px solid #2d295f;
 }
 
+#book th:last-child {
+     background: url(/themes/console/images/buttons/delete.png) center center no-repeat, url(/themes/console/midnight/images/titles.png) repeat-x scroll center center #000 !important;
+     background: url(/themes/console/images/buttons/delete.png) center center no-repeat, linear-gradient(to bottom, #191729 0%, #000 50%) !important;
+     font-size: 0;
+     padding: 0 !important;
+}
+
 #book td {
      border-bottom: 1px solid #17142f;
      padding: 0;
@@ -1114,7 +1139,7 @@ p.book {
      user-select: all;
 }
 
-#host_list .destaddress:hover, #host_list .destaddress:focus {
+#host_list .destaddress:focus {
      overflow: auto !important;
      text-overflow: clip;
 }
@@ -1125,6 +1150,10 @@ td.destinations {
      border-right: 1px solid #2d295f;
 }
 
+tr:hover .destinations {
+     color: #aa0;
+}
+
 /* end hostname list */
 
 /* responsive layout */
@@ -1137,6 +1166,22 @@ td.destinations {
 }
 }
 
+@media screen and (max-width: 1200px) {
+#filter {
+     padding: 0 5px;
+}
+
+#filter p {
+     margin-left: 0;
+     margin-right: 0;
+}
+
+#filter a {
+     min-width: 6px;
+     padding: 0 6px;
+}
+}
+
 @media screen and (min-width: 1200px) {
 #filter a {
      font-size: 10pt;
diff --git a/installer/resources/themes/susimail/classic/susimail.css b/installer/resources/themes/susimail/classic/susimail.css
index 28b55b7f63fb07cab85918976eec17f149849835..7b0839d0637868558f33a719f62c55ee46127213 100644
--- a/installer/resources/themes/susimail/classic/susimail.css
+++ b/installer/resources/themes/susimail/classic/susimail.css
@@ -4,7 +4,7 @@
 body {
      background: #eef url(/themes/console/classic/images/bg0.png);
      background-size: 120px 120px;
-     color: #0c153d;
+     color: #2c354f;
      font-family: "Droid Sans", "Noto Sans", Ubuntu, "Segoe UI", "Bitstream Vera Sans", "DejaVu Sans", Verdana, "Lucida Grande", Helvetica, sans-serif;
      font-size: 9pt;
 }
@@ -26,6 +26,7 @@ div.header {
      border-bottom: 1px solid #89f;
      background: #fff url(/themes/susimail/images/susimail.png) center center no-repeat !important;
      background-size: auto 80% !important;
+     display: none;
 }
 
 .header img {
@@ -34,10 +35,11 @@ div.header {
 }
 
 h3#config {
-     border: 1px solid #89f;
+     margin: 0 auto 10px;
      padding: 5px 10px;
      width: 300px;
-     margin: 0 auto 10px;
+     border: 1px solid #89f;
+     color: #35415f;
      background: url(/themes/console/classic/images/titlebg.png) right center no-repeat;
      background: linear-gradient(to bottom, #fff 0%, #fff 50%, #eff2ff 50%, #eff2ff 100%);
      border-radius: 0 0 2px 2px;
@@ -924,18 +926,21 @@ div#composemail {
      font-weight: bold;
 }
 
-div#dologin {
-     border: 1px solid #777;
-     padding: 20px 0 0;
+/* login panel */
+
+#dologin {
+     border: 1px solid #89f;
+     padding: 10px 0 0;
      width: 500px;
-     margin: 60px auto 40px;
+     margin: 55px auto 40px;
      box-shadow: 0 0 0 1px #fff;
-     background: #fff;
+     background: #fefefe;
+     background: linear-gradient(to bottom, rgba(240,240,255,0.4), rgba(220,220,255,0.5)) #fefefe;
+     box-shadow: inset 0 0 0 1px #fff, 0 0 1px #999;
 }
 
 .iframed #dologin {
      margin: 18px auto 15px;
-     padding-top: 10px;
 }
 
 #dologin input[type="text"] {
@@ -969,7 +974,7 @@ div#dologin {
 #dologin td {
      padding: 3px;
      font-weight: bold !important;
-     color: #333;
+     color: #2c354f;
 }
 
 #dologin td:first-child {
@@ -992,29 +997,76 @@ div#dologin {
 }
 
 #dologin h1 {
-     border-bottom: 1px solid #777;
-     padding: 10px 15px;
      margin: -10px 0 10px;
+     padding: 10px 15px;
+     background: #fff;
+     background: linear-gradient(to right, #fff 30%, #eff2ff);
+     border-bottom: 1px solid #89f;
+     color: #35415f;
      font-size: 14pt;
      text-align: left;
-     background: #fff;
      letter-spacing: 0.08em;
      word-spacing: 0.1em;
-     background: linear-gradient(to right, #fff 30%, #eff2ff);
      box-shadow: inset 0 0 0 1px #fff;
-     display: none;
 }
 
 #dologin hr {
      display: block !important;
-     background: #777;
-     box-shadow: 0 1px 0 1px #fff;
+     background: #89f;
+     box-shadow: 0 0 0 1px rgba(255,255,255,0.5);
 }
 
-.iframed #dologin h1 {
-     display: block;
+#dologin tr:nth-child(6) hr {
+     margin-bottom: 4px;
+}
+
+#dologin tr:last-child hr {
+     margin-top: 3px;
+}
+
+.iframed #dologin tr:nth-child(6) hr {
+     margin-top: 5px;
 }
 
+#dologin tr:last-child a {
+     display: inline-block;
+     margin: 6px -2px 6px;
+     padding: 3px 10px;
+     border: 1px solid rgba(255,255,255,0);
+     border: 1px solid rgba(119, 120, 159, 0.3);
+     border-radius: 25px;
+     background: #efefff;
+     background: linear-gradient(to right, #f2f2ff, #f6f6ff, #f2f2ff);
+     box-shadow: 0 0 1px rgba(255,255,255,0);
+     transition: ease all 0.1s;
+}
+
+#dologin tr:last-child a:hover {
+     border: 1px solid #77789f;
+     border: 1px solid rgba(119, 120, 159, 0.5);
+     background: #f2f2ff;
+     background: linear-gradient(to bottom, #fafaff 50%, #e8e8ff 50%) #f2f2ff;
+     box-shadow: 0 0 1px #ccf;
+     transition: ease all 0.1s;
+}
+
+#dologin tr:last-child a:active {
+     border: 1px solid rgba(119, 120, 159, 0.3);
+     background: #e2e2ff;
+     background: linear-gradient(to bottom, #eaeaff 50%, #d9d9ff 50%);
+     box-shadow: inset 3px 3px 3px #779;
+     transition: ease all 0.1s;
+     color: rgba(65, 70, 95, 0.8) !important;
+     color: #99a5df !important;
+}
+
+#dologin tr:last-child td {
+     color: transparent;
+     color: rgba(119, 120, 159, 0);
+}
+
+/* end login panel */
+
 .iframed div.footer {
      margin-top: -10px;
 }
diff --git a/installer/resources/themes/susimail/dark/susimail.css b/installer/resources/themes/susimail/dark/susimail.css
index 597cf7750b3f6e262bdd6d3cee0132145b2882aa..8f713943671bb0796e8bea3e297175ee8e61b366 100644
--- a/installer/resources/themes/susimail/dark/susimail.css
+++ b/installer/resources/themes/susimail/dark/susimail.css
@@ -3,9 +3,15 @@
 /* Thanks to Florian Kuhlmann for the hatface images. [http://www.flickr.com/photos/floriankuhlmann/] */
 /* Droid Sans font family and css3 compliant browser recommended for optimal results */
 
+html {
+     min-height: 100%;
+}
+
 body {
-     background-color: #000;
-     color:#ee9;
+     background: url(/themes/console/dark/images/camotile2.png) top left fixed #000;
+     background: linear-gradient(to bottom, rgba(0,0,0,0.5), rgba(0,0,0,0.7)), url(/themes/console/dark/images/camotile2.png) top left fixed #000;
+     background-size: 100% 100%, 175px 175px !important;
+     color: #ee9;
      font-family: "Droid Sans", "Noto Sans", Ubuntu, "Segoe UI", "Bitstream Vera Sans", "DejaVu Sans", Verdana, "Lucida Grande", Helvetica, sans-serif;
      font-size: 9pt;
      margin: 8px 5px;
@@ -284,22 +290,24 @@ tr.bottombuttons:last-child td {
 }
 
 a:link {
-     color: #f60;
      color: #5a5;
      text-decoration: none;
      font-weight: bold;
 }
 
-a:hover, a:visited:hover, a:focus {
+a:hover, a:visited:hover, a:focus, tr:hover td[onclick] a {
      color: #f60 !important;
      outline: none;
 }
 
 a:visited {
-     color: #960;
      color: #272;
 }
 
+a:active, a:visited:active, tr:hover td[onclick]:active a {
+     color: #f30 !important;
+}
+
 td {
      color: #ee9;
      margin: 0 5px;
@@ -694,12 +702,12 @@ input[type="submit"], input[type="reset"], select, button { /* webkit/blink fix
 
 /* login + misc mods */
 
-div.notifications {
+.notifications {
      text-align: center;
      padding: 0 0 20px;
 }
 
-div#dologin {
+#dologin {
      border: 1px solid #494;
      margin: 20px auto;
      width: 600px;
@@ -712,6 +720,10 @@ div#dologin {
 
 }
 
+.iframed #dologin {
+     margin-top: 35px;
+}
+
 #dologin h1 {
      border: 1px solid #494;
      padding: 10px 10px 10px 48px;
@@ -723,9 +735,9 @@ div#dologin {
      word-spacing: 0.1em;
      text-align:left;
      background: #002000 url(images/mail.png) 8px center no-repeat;
-     background: url(images/mail.png) 8px center no-repeat, linear-gradient(to bottom, #001000 0%, #001900 50%, #000 51%, #000 100%);
+     background: url(images/mail.png) 8px center no-repeat, linear-gradient(to bottom, #030 50%, #000 50%);
      text-shadow: 0 1px 1px #000;
-     box-shadow: inset 0 0 1px 2px #020;
+     box-shadow: inset 0 0 0 1px #000;
 }
 
 #dologin table {
@@ -762,7 +774,44 @@ div#dologin {
      opacity: 0.5;
 }
 
-div.notifications + div#dologin {
+#dologin tr:last-child hr {
+     margin-top: 3px;
+}
+
+.iframed #dologin tr:nth-child(6) hr {
+     margin-top: 5px;
+}
+
+#dologin tr:last-child a {
+     display: inline-block;
+     margin: 8px -2px 6px;
+     padding: 3px 10px;
+     border: 1px solid #010;
+     border-radius: 25px;
+     background: #020;
+     box-shadow: 0 0 1px rgba(0,0,0,0);
+}
+
+#dologin tr:last-child a:hover {
+     background: #030;
+     background: linear-gradient(to bottom, #030 50%, #000 50%) #000;
+     box-shadow: 0 0 1px #000;
+     transition: ease all 0.2s;
+}
+
+#dologin tr:last-child a:active {
+     border: 1px solid #000;
+     background: #010;
+     box-shadow: inset 3px 3px 3px #000;
+     transition: ease all 0.2s;
+     color: #050 !important;
+}
+
+#dologin tr:last-child td {
+     color: transparent;
+}
+
+div.notifications + #dologin {
      margin-top: 0;
 }
 
diff --git a/installer/resources/themes/susimail/light/susimail.css b/installer/resources/themes/susimail/light/susimail.css
index 4dceda0b5be621d2ef9f47a33311d4b3e2796a17..d8aad1d58bf4321cd5972a42528d2631e6350c2a 100644
--- a/installer/resources/themes/susimail/light/susimail.css
+++ b/installer/resources/themes/susimail/light/susimail.css
@@ -3,7 +3,7 @@
 /* Author: dr|z3d */
 
 body {
-     color: #333;
+     color: #33333f;
      font-family: "Droid Sans", "NotoSans", Ubuntu, "Bitstream Vera Sans", "Segoe UI", Verdana, "Lucida Grande", Helvetica, sans-serif;
      font-size: 9pt;
      background: #a4a4cb url(/themes/console/light/images/tile2.png);
@@ -47,8 +47,33 @@ body.iframed {
      outline: none;
 }
 
+::selection {
+     background: #27377f !important;
+     color: white;
+     text-shadow: none;
+}
+
+::-moz-selection {
+     background: #27377f !important;
+     color: white;
+     text-shadow: none;
+}
+
+.footer, .bottombuttons, .topbuttons, th img, h3,
+#mailbox th:first-child, #mailbox th:nth-child(2), #mailbox th:nth-child(4), #mailbox th:nth-child(6), #mailbox th:nth-child(8),
+#mailbox td:first-child, #mailbox td:nth-child(2), #mailbox td:nth-child(4), #mailbox td:nth-child(6), #mailbox td:nth-child(8) {
+     -moz-user-select: none;
+     -webkit-user-select: none;
+     user-select: none;
+}
+
+b, h3, #pagenav td, th {
+     color: #41465f;
+     text-shadow: 0 1px 1px #fff;
+}
+
 li {
-     color: #333;
+     color: #33333f;
      line-height: 12pt;
      font-size: 8.5pt;
      margin-left: 5px;
@@ -56,7 +81,7 @@ li {
 }
 
 p {
-     color: #333;
+     color: #33333f;
      margin-left: 15px;
      margin-right: 15px;
      font-size: 8.5pt;
@@ -86,6 +111,7 @@ p.info {
 
 tr.mailbody, #message_full tr:first-child {
      box-shadow: inset 0 0 0 1px #fff;
+     background: #fafaff;
 }
 
 #mailhead tr {
@@ -126,7 +152,7 @@ div.footer {
      margin: -14px 0 10px;
      border: 1px solid #7778bf;
      background: #eef;
-     background: linear-gradient(to right, rgba(232,232,255,0.3) 35%, #fff 50%, rgba(232,232,255,0.3) 65%), repeating-linear-gradient(to bottom, #fff 1px, #ddf 2px, #fff 3px);
+     background: linear-gradient(to right, rgba(232,232,255,0.3) 35%, #fafaff 50%, rgba(232,232,255,0.3) 65%), repeating-linear-gradient(to bottom, #fff 1px, #ddf 2px, #fff 3px);
      box-shadow: inset 0 0 0 1px #fff;
 }
 
@@ -176,16 +202,16 @@ a:hover, a:focus, tr:hover td[onclick] a {
      color: #f60 !important;
 }
 
-a:active {
-     color: #f30;
-}
-
 a:visited {
      color: #6b97bf;
 }
 
+a:active, tr:hover td[onclick]:active a {
+     color: #f30 !important;
+}
+
 td {
-     color: #333;
+     color: #33333f;
      font-size:9pt;
      padding: 1px 3px;
 }
@@ -234,8 +260,8 @@ pre {
 }
 
 .page {
-     background-color: #fff;
-     color: #333;
+     background-color: #fcfcff;
+     color: #33333f;
      margin: 0;
      padding: 10px 10px 0;
      border-radius: 2px 2px 0 0;
@@ -251,7 +277,6 @@ pre {
      margin: 0;
      padding: 1px;
      border: none;
-     box-shadow: none;
      border-radius: 0;
 }
 
@@ -288,9 +313,8 @@ table#mailbox {
 }
 
 #mailbox th {
-     background: #fff;
-     background: linear-gradient(to bottom, #fff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), #efefff;
-     color: #555;
+     background: #fafaff;
+     background: linear-gradient(to bottom, #fafaff 50%, #f2f2ff 50%);
      border-bottom: 1px solid #7778bf;
      white-space: nowrap;
      padding: 6px 5px !important;
@@ -298,24 +322,28 @@ table#mailbox {
 
 #mailbox th:first-child {
      background: #fff url(/themes/console/images/buttons/delete.png) center center no-repeat;
-     background: url(/themes/console/images/buttons/delete.png) center center no-repeat, linear-gradient(to bottom, #fff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), #efefff;
+     background: url(/themes/console/images/buttons/delete.png) center center no-repeat, linear-gradient(to bottom, #fafaff 50%, #f2f2ff 50%);
 }
 
 #mailbox th:nth-child(2) {
      background: #fff url(/themes/susimail/images/status.png) center center no-repeat;
-     background: url(/themes/susimail/images/status.png) center center no-repeat, linear-gradient(to bottom, #fff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), #efefff;
+     background: url(/themes/susimail/images/status.png) center center no-repeat, linear-gradient(to bottom, #fafaff 50%, #f2f2ff 50%);
      background-blend-mode: luminosity, normal;
 }
 
 #mailbox th:nth-child(4) {
      background: #fff url(/susimail/icons/attach.png) center center no-repeat;
-     background: url(/susimail/icons/attach.png) center center no-repeat, linear-gradient(to bottom, #fff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), #efefff;
+     background: url(/susimail/icons/attach.png) center center no-repeat, linear-gradient(to bottom, #fafaff 50%, #f2f2ff 50%);
 }
 
 #mailbox th:nth-child(5) {
      text-align: left;
 }
 
+#mailbox td {
+     color: #41465f !important;
+}
+
 #mailbox td:nth-child(5) {
      white-space: normal;
      word-break: break-all;
@@ -353,7 +381,7 @@ table#mailbox {
 
 #mailbox td:nth-child(3) a, #mailbox td:nth-child(3) a:hover {
      font-weight: normal;
-     color: #333 !important;
+     color: #41465f !important;
 }
 
 #mailbox td[onclick]:last-child {
@@ -375,6 +403,10 @@ table#mailbox {
      display: none;
 }
 
+#mailbox tr:hover td, #mailbox tr:hover td:nth-child(3) a {
+     color: #33333f !important;
+}
+
 form {
      line-height: 160%
 }
@@ -382,8 +414,8 @@ form {
 .header + form {
      border: 1px solid #7778bf;
      border-radius: 2px 2px 0 0;
-     background: #fff;
-     background: rgba(220,220,255,0.05);
+     background: #f4f4ff;
+     background: linear-gradient(to bottom, #f8f8ff, #f2f2ff);
      box-shadow: 0 0 0 1px #fff;
 }
 
@@ -436,6 +468,7 @@ form {
      width: 45px;
      white-space: nowrap;
      font-weight: bold;
+     color: #41465f;
 }
 
 button::-moz-focus-inner, input[type="submit"]::-moz-focus-inner, input[type="reset"]::-moz-focus-inner  {
@@ -457,10 +490,11 @@ input[type="radio"], input[type="checkbox"] {
      outline: none;
      min-width: 16px;
      min-height: 16px;
+     filter: sepia(100%) hue-rotate(185deg) drop-shadow(0 0 1px #ccf);
 }
 
 input[type="checkbox"]:hover, input[type="checkbox"]:focus, input[type="radio"]:hover, input[type="radio"]:focus {
-     filter: drop-shadow(0 0 3px #89f);
+     filter: sepia(100%) hue-rotate(185deg) drop-shadow(0 0 3px #89f);
 }
 
 input[type="text"], input[type="password"] {
@@ -470,11 +504,11 @@ input[type="text"], input[type="password"] {
 }
 
 input[type="submit"], input[type="reset"] {
-     border: 1px solid #999;
+     border: 1px solid #999daf;
      box-shadow: inset 0 0 0 1px #fff;
      background: #eee;
      background: linear-gradient(to bottom, #fff 0%, #ddd 100%);
-     color: #333;
+     color: #33333f;
      margin: 3px;
      font: 9pt "Droid Sans", "NotoSans", Ubuntu, "Bitstream Vera Sans", "Segoe UI", Verdana, "Lucida Grande", Helvetica, sans-serif;
      padding: 4px 5px;
@@ -483,7 +517,7 @@ input[type="submit"], input[type="reset"] {
      border-radius: 2px;
      opacity: 1;
      background-size: 14px auto, 100% 100% !important;
-     filter: saturate(70%) drop-shadow(0 0 1px rgba(204, 204, 204, 0.6));
+     filter: saturate(70%) drop-shadow(0 0 1px rgba(180, 180, 255, 0.6));
      cursor: pointer;
 }
 
@@ -504,7 +538,7 @@ input[type="submit"]:active, input[type="reset"]:active {
 input[disabled], input[disabled]:hover, input[disabled]:focus {
      opacity: 0.4;
      cursor: default;
-     border: 1px solid #999;
+     border: 1px solid #999daf;
 }
 
 input.cancel {
@@ -755,6 +789,10 @@ input.setpagesize, input.save {
      padding: 5px 7px 5px 24px;
 }
 
+input.setpagesize {
+     padding-right: 9px !important;
+}
+
 input.send {
      background: #eee url(/themes/susimail/images/send.png) no-repeat 6px center;
      background: url(/themes/susimail/images/send.png) no-repeat 6px center, linear-gradient(to bottom, #fff 0%, #ddd 100%);
@@ -809,7 +847,7 @@ a.sort {
 }
 
 img.sort {
-     border: 1px solid #999;
+     border: 1px solid #999daf;
      border-radius: 2px;
      background: linear-gradient(to bottom, #fff 0%, #ddd 100%);
      margin: 0;
@@ -835,20 +873,26 @@ input[type="file"] {
 
 input[type="text"], input[type="password"], textarea {
      padding: 5px !important;
-     box-shadow: inset 2px 2px 1px rgba(204, 204, 204, 0.6);
-     border: 1px solid #999;
+     background: #fafaff;
+     box-shadow: inset 1px 1px 1px rgba(204, 204, 204, 0.6);
+     border: 1px solid #999daf;
      border-radius: 2px;
-     color: #333;
+     color: #33333f;
+     filter: drop-shadow(0px 0 1px #ccf);
 }
 
 input[type="text"]:focus, input[type="password"]:focus, textarea:focus {
-     color: #111;
+     color: #19191f;
      box-shadow: 0 0 1px #89f;
+     background: #fff;
+     border: 1px solid #676c7f;
 }
 
 input[type="text"][disabled] {
      opacity: 1;
      background: #e9e9e9;
+     color: #4d4d5f;
+     filter: none;
 }
 
 textarea {
@@ -856,6 +900,17 @@ textarea {
      font-size: 9pt;
 }
 
+hr {
+     color: #999daf;
+     background: #999daf;
+     height: 1px;
+     border: none;
+     width: 100%;
+     margin: 5px;
+     text-align: center;
+     opacity: 0.5;
+}
+
 #composemail {
      text-align: center !important;
      padding: 10px;
@@ -908,17 +963,20 @@ div#mailheader {
 
 #newmail td:first-child {
      font-weight: bold;
+     color: #41465f;
 }
 
-div#dologin {
-     border: 1px solid #555;
+/* login panel */
+
+#dologin {
+     margin: 40px auto 40px;
      padding: 10px 10px 0;
-     border-radius: 2px;
      width: 600px;
-     margin: 40px auto 40px;
-     box-shadow: inset 0 0 2px 2px rgba(225, 225, 255, 0.5), 0 0 1px rgba(204, 204, 204, 0.6);
-     background: #fff;
-     background: linear-gradient(to bottom, #fff, rgba(232,232,255,0.5)), linear-gradient(to bottom, rgba(255,255,255,0.7) 5%, rgba(220,220,255,0.9)), linear-gradient(to right, #fff, #efefff, #fff);
+     border: 1px solid #77789f;
+     border-radius: 2px;
+     box-shadow: inset 0 0 2px 2px rgba(225, 225, 255, 0.5), 0 0 2px rgba(100, 100, 200, 0.6);
+     background: #fafaff;
+     background: linear-gradient(to bottom, #fafaff, rgba(232,232,255,0.5)), linear-gradient(to bottom, rgba(255,255,255,0.7) 5%, rgba(220,220,255,0.9)), linear-gradient(to right, #fff, #efefff, #fff);
      background-size: 100% 100%, auto 2px, 100%, 100%;
 }
 
@@ -926,10 +984,14 @@ div#dologin {
      margin: 30px auto 30px;
 }
 
+.iframed #dologin table {
+     margin-top: 30px;
+}
+
 #dologin td {
      padding: 3px;
      font-weight: bold;
-     color: #444;
+     color: #41465f;
 }
 
 #dologin td:first-child {
@@ -941,14 +1003,17 @@ div#dologin {
 }
 
 #dologin h1 {
-     border-bottom: 1px solid #999;
+     background: #fafaff;
+     background: linear-gradient(to bottom, #fff 50%, #f2f2ff 50%);
+     border-bottom: 1px solid #77789f;
+     color: #4c526f;
      text-transform: uppercase;
-     letter-spacing: 0.08em;
+     letter-spacing: 0.1em;
      word-spacing: 0.1em;
      font-size: 14pt;
      text-align: left;
-     padding: 0 10px 12px 15px;
-     margin: 5px -9px;
+     padding: 12px 10px 12px 15px;
+     margin: -9px -9px 5px;
 }
 
 .iframed #dologin h1 {
@@ -959,30 +1024,82 @@ div#dologin {
      text-align: left !important;
 }
 
-#dologin input[name="user"] {
-     background: #fff url(/themes/console/images/buttons/user.png) 5px 6px no-repeat;
+#dologin input[name="user"], #dologin input[name="pass"] {
      padding: 5px 5px 5px 26px !important;
+     background-blend-mode: luminosity;
+}
+
+#dologin input[name="user"] {
+     background: #fafaff url(/themes/console/images/buttons/user.png) 5px 6px no-repeat !important;
 }
 
 #dologin input[name="pass"] {
-     background: #fff url(/themes/console/images/buttons/password.png) 5px 5px no-repeat;
-     padding: 5px 5px 5px 26px !important;
+     background: #fafaff url(/themes/console/images/buttons/password.png) 5px 5px no-repeat !important;
+}
+
+#dologin input[name="user"]:focus, #dologin input[name="pass"]:focus {
+     background-color: #fff !important;
+     background-blend-mode: normal;
 }
 
 #dologin input[name="user"], #dologin input[name="pass"], #dologin input[name="host"] {
      width: 240px;
+     margin-right: 5px;
 }
 
-hr {
-     color: #999;
-     background: #999;
-     height: 1px;
-     border: 0 solid #999;
-     width: 100%;
-     margin: 5px 0;
-     text-align: center;
+#dologin hr {
+     margin: 0 0 4px;
+     background: #77789f;
+     background: linear-gradient(to right, rgba(119, 120, 159, 0), #1d1f4f, rgba(119, 120, 159, 0));
+}
+
+#dologin tr:last-child hr {
+     margin-top: 3px;
+}
+
+.iframed #dologin tr:nth-child(6) hr {
+     margin-top: 5px;
 }
 
+#dologin tr:last-child a {
+     display: inline-block;
+     margin: 8px -2px 6px;
+     padding: 3px 10px;
+     border: 1px solid rgba(255,255,255,0);
+     border: 1px solid rgba(119, 120, 159, 0.3);
+     border-radius: 25px;
+     background: #efefff;
+     background: linear-gradient(to right, rgba(252,252,255,0.3), #f6f6ff, rgba(252,252,255,0.3));
+     box-shadow: 0 0 1px rgba(255,255,255,0);
+     transition: ease all 0.1s;
+}
+
+#dologin tr:last-child a:hover {
+     border: 1px solid #77789f;
+     border: 1px solid rgba(119, 120, 159, 0.5);
+     background: #f2f2ff;
+     background: linear-gradient(to bottom, #fafaff 50%, #e8e8ff 50%) #f2f2ff;
+     box-shadow: 0 0 1px #ccf;
+     transition: ease all 0.1s;
+}
+
+#dologin tr:last-child a:active {
+     border: 1px solid rgba(119, 120, 159, 0.3);
+     background: #e2e2ff;
+     background: linear-gradient(to bottom, #eaeaff 50%, #d9d9ff 50%);
+     box-shadow: inset 3px 3px 3px #779;
+     transition: ease all 0.1s;
+     color: rgba(65, 70, 95, 0.8) !important;
+     color: #99a5df !important;
+}
+
+#dologin tr:last-child td {
+     color: transparent;
+     color: rgba(119, 120, 159, 0);
+}
+
+/* end login panel */
+
 textarea[name="config_text"] {
      margin-bottom: 15px;
      resize: none;
@@ -996,7 +1113,6 @@ div#pagenav {
      border-radius: 0 0 2px 2px;
 }
 
-
 h3#config {
      text-align: center;
      border: 1px solid #7778bf;
@@ -1011,7 +1127,8 @@ h3#config {
      background: #efefff;
      box-shadow: inset 0 0 0 1px #fff;
      text-shadow: 0 1px 1px #fff;
-     background: linear-gradient(to right, #efefff, #fff, #efefff);
+     background: #fafaff;
+     background: linear-gradient(to right, rgba(240,240,255,0.1), rgba(252,252,252,0.5), rgba(240,240,255,0.1)), linear-gradient(to bottom, #fafaff 50%, #f2f2ff 50%);
 }
 
 .topbuttons {
@@ -1168,7 +1285,7 @@ _:-ms-lang(x), tr.bottombuttons, .topbuttons {
 }
 
 tr.bottombuttons:last-child {
-     background: linear-gradient(to bottom, #fff 50%, rgba(220,220,255,0.3)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px), #fff !important;
+     background: linear-gradient(to bottom, #fafaff 50%, rgba(220,220,255,0.3)), repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(221, 221, 255, 0.3) 3px, #fff 5px), #fff !important;
 }
 
 tr.bottombuttons table#pagenav {
@@ -1192,23 +1309,31 @@ tr.bottombuttons:empty {
      right: 0;
      text-align: center;
      margin: 0 -20px;
-     padding: 5px 10px;
+     padding: 3px 10px;
      z-index: 10;
      opacity: 0.85;
      border-top: 1px solid #fff;
-     background: #113;
+     background: url(/themes/snark/light/images/delete.png) right 24px top 4px no-repeat #113;
+     background-blend-mode: luminosity;
 }
 
 .iframed .notifications {
+     background: url(/themes/snark/light/images/delete.png) right 6px top 5px no-repeat #113;
      margin-bottom: 9px;
      border-radius: 4px 4px 0 0;
      border: none;
-     margin: 0 20% 9px;
+     margin: 0 3% 10px;
+}
+
+.notifications:hover {
+     background-image: url(/themes/snark/light/images/delete_hover.png);
+     background-blend-mode: normal;
 }
 
-.notifications p.info {
+.notifications p.info, .notifications p.info b {
      font-size: 10pt !important;
      color: #fff;
+     text-shadow: none !important;
 }
 
 .notifications p {
@@ -1260,9 +1385,92 @@ td p.error {
 }
 
 #prefsave {
-     margin-bottom: 25px !important;
+     margin-top: 4px;
+     padding-top: 10px;
+     padding-bottom: 10px;
+     border-top: 1px solid #7778bf;
+     background: #f6f6ff;
+     box-shadow: inset 0 0 0 1px #fff;
+}
+
+.iframed #prefsave {
+     padding-bottom: 9px;
 }
 
+/* custom radios/checkboxes for chrome/blink  */
+
+@media screen and (-webkit-min-device-pixel-ratio: 0) and (min-resolution:.001dpcm) {
+input[type="checkbox"], input[type="checkbox"]:checked, input[type="checkbox"][disabled], input[type="checkbox"][disabled]:checked {
+     background: #f8f8ff;
+     width: 19px !important;
+     height: 19px !important;
+     box-shadow: inset 1px 1px 1px rgba(204, 204, 204, 0.6);
+     border-radius: 2px;
+     -webkit-appearance: inherit;
+     border: 1px solid #999daf !important;
+     position: relative;
+     box-sizing: border-box;
+     filter: drop-shadow(0 0 1px #ccf);
+     vertical-align: middle !important;
+}
+
+input[type="checkbox"]:checked::before {
+     position: absolute;
+     top: 1px;
+     left: 1px;
+     content: "\2714";
+     border-radius: 1px;
+     font-size: 15pt;
+     color: #41465f;
+     line-height: 80%;
+     font-family: sans-serif;
+     overflow: hidden;
+     width: 16px;
+     height: 16px;
+}
+
+input[type="radio"], input[type="radio"]:checked, input[type="radio"][disabled], input[type="radio"][disabled]:checked {
+     background: #f8f8ff;
+     width: 19px !important;
+     height: 19px !important;
+     box-shadow: inset 0 0 2px #7778bf;
+     border-radius: 50%;
+     -webkit-appearance: none;
+     border: 1px solid #999daf !important;
+     position: relative;
+     box-sizing: border-box;
+     filter: drop-shadow(0 0 1px #ccf);
+     vertical-align: middle !important;
+}
+
+input[type="radio"]:checked::before {
+     content: "";
+     position: absolute;
+     border-radius: 50%;
+     left: 25%;
+     top: 25%;
+     width: 9px;
+     height: 9px;
+     background: #41465f;
+}
+
+input[type="checkbox"]:hover, input[type="radio"]:hover, input[type="checkbox"]:focus, input[type="radio"]:focus {
+     background: #fff;
+     width: 19px !important;
+     height: 19px !important;
+     filter: drop-shadow(0 0 3px #89f) !important;
+}
+
+input[type="checkbox"][disabled], input[type="radio"][disabled], input[type="checkbox"][disabled]:hover, input[type="radio"][disabled]:hover,
+input[type="checkbox"][disabled]:checked, input[type="radio"][disabled]:checked, input[type="checkbox"][disabled]:checked:hover, input[type="radio"][disabled]:checked:hover {
+     filter: none !important;
+     box-shadow: none !important;
+     opacity: 0.5;
+}
+}
+
+/* end custom radios/checkboxes */
+
 /* responsive layout */
 
 @media screen and (min-width: 1024px) {
diff --git a/installer/resources/themes/susimail/midnight/susimail.css b/installer/resources/themes/susimail/midnight/susimail.css
index e56c2a32fb68aafde5709ea3e0d2edf363b38bbd..6e97c3399a31c384d0b77c2f016f3afd349cfe6e 100644
--- a/installer/resources/themes/susimail/midnight/susimail.css
+++ b/installer/resources/themes/susimail/midnight/susimail.css
@@ -759,6 +759,44 @@ div#dologin {
      opacity: 0.5;
 }
 
+#dologin tr:last-child hr {
+     margin-top: 6px;
+     margin-bottom: 5px;
+}
+
+.iframed #dologin tr:nth-child(6) hr {
+     margin-top: 5px;
+}
+
+#dologin tr:last-child a {
+     display: inline-block;
+     margin: 8px -2px 6px;
+     padding: 3px 10px;
+     border: 1px solid #003;
+     border-radius: 25px;
+     background: #002;
+     box-shadow: 0 0 1px rgba(0,0,0,0);
+}
+
+#dologin tr:last-child a:hover {
+     background: #030;
+     background: linear-gradient(to bottom, #003 50%, #000 50%) #000;
+     box-shadow: 0 0 1px #000;
+     transition: ease all 0.2s;
+}
+
+#dologin tr:last-child a:active {
+     border: 1px solid #000;
+     background: #001;
+     box-shadow: inset 3px 3px 3px #000;
+     transition: ease all 0.2s;
+     color: #337 !important;
+}
+
+#dologin tr:last-child td {
+     color: transparent;
+}
+
 div.notifications + div#dologin {
      margin-top: 0;
 }
diff --git a/router/java/src/net/i2p/data/router/RouterKeyGenerator.java b/router/java/src/net/i2p/data/router/RouterKeyGenerator.java
index 0525a4f372461763450dead7be596f94c41b8812..52ccbba87db3c1cfbfc71ab451003455633f415e 100644
--- a/router/java/src/net/i2p/data/router/RouterKeyGenerator.java
+++ b/router/java/src/net/i2p/data/router/RouterKeyGenerator.java
@@ -228,7 +228,7 @@ public class RouterKeyGenerator extends RoutingKeyGenerator {
         long now = System.currentTimeMillis();
         int st = 0;
         if (args.length > 1 && (args[0].startsWith("+") || args[0].startsWith("-"))) {
-            now += Integer.parseInt(args[0]) * 24*60*60*1000L;
+            now += Integer.parseInt(args[0]) * (24*60*60*1000L);
             st++;
         }
         RouterKeyGenerator rkg = new RouterKeyGenerator(I2PAppContext.getGlobalContext());
diff --git a/router/java/src/net/i2p/router/Router.java b/router/java/src/net/i2p/router/Router.java
index b0dff487c4397c05b1f03d78e8467f895e3bf289..c3ea5f9f5b7894b1e519d4398a3f2057ac638028 100644
--- a/router/java/src/net/i2p/router/Router.java
+++ b/router/java/src/net/i2p/router/Router.java
@@ -153,6 +153,8 @@ public class Router implements RouterClock.ClockShiftListener {
             // just in case, lets make it explicit...
             TimeZone.setDefault(TimeZone.getTimeZone("GMT"));
         }
+        // Note: I2P_DISABLE_OUTPUT_OVERRIDE implemented in startup/WorkingDir.java
+
         // https://www.kb.cert.org/vuls/id/402580
         // http://docs.codehaus.org/display/JETTY/SystemProperties
         // Fixed in Jetty 5.1.15 but we are running 5.1.12
diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java
index 78754ef283e16db5cd2b1d1d3233ad3f5d57cdce..282c18b42238909e2faa8bba95d82c15667d116c 100644
--- a/router/java/src/net/i2p/router/RouterVersion.java
+++ b/router/java/src/net/i2p/router/RouterVersion.java
@@ -18,10 +18,10 @@ public class RouterVersion {
     /** deprecated */
     public final static String ID = "Monotone";
     public final static String VERSION = CoreVersion.VERSION;
-    public final static long BUILD = 20;
+    public final static long BUILD = 2;
 
     /** for example "-test" */
-    public final static String EXTRA = "-rc";
+    public final static String EXTRA = "";
     public final static String FULL_VERSION = VERSION + "-" + BUILD + EXTRA;
     public static void main(String args[]) {
         System.out.println("I2P Router version: " + FULL_VERSION);
diff --git a/router/java/src/net/i2p/router/crypto/TransientSessionKeyManager.java b/router/java/src/net/i2p/router/crypto/TransientSessionKeyManager.java
index 606409c2c16c367149541048306dcf20128cf83e..12d6672a805c38b1c4f440bedab0f6a778f21637 100644
--- a/router/java/src/net/i2p/router/crypto/TransientSessionKeyManager.java
+++ b/router/java/src/net/i2p/router/crypto/TransientSessionKeyManager.java
@@ -89,7 +89,7 @@ public class TransientSessionKeyManager extends SessionKeyManager {
     private final int _tagsToSend;
     private final int _lowThreshold;
 
-    /** 
+    /**
      * Let outbound session tags sit around for this long before expiring them.
      * Inbound tag expiration is set by SESSION_LIFETIME_MAX_MS
      */
@@ -155,7 +155,7 @@ public class TransientSessionKeyManager extends SessionKeyManager {
     /** ditto */
     public static final int LOW_THRESHOLD = 30;
 
-    /** 
+    /**
      * The session key manager should only be constructed and accessed through the 
      * application context.  This constructor should only be used by the 
      * appropriate application context itself.
@@ -165,7 +165,7 @@ public class TransientSessionKeyManager extends SessionKeyManager {
         this(context, DEFAULT_TAGS, LOW_THRESHOLD);
     }
 
-    /** 
+    /**
      *  @param tagsToSend how many to send at a time, may be lower or higher than lowThreshold. 1-128
      *  @param lowThreshold below this, send more. 1-128
      *  @since 0.9.2
@@ -185,7 +185,7 @@ public class TransientSessionKeyManager extends SessionKeyManager {
          _alive = true;
         _context.simpleTimer2().addEvent(new CleanupEvent(), 60*1000);
     }
-    
+
     @Override
     public void shutdown() {
          _alive = false;
@@ -408,7 +408,7 @@ public class TransientSessionKeyManager extends SessionKeyManager {
             else
                 return end - _context.clock().now();
         }
-        return 0; 
+        return 0;
     }
 
     /**
@@ -559,7 +559,7 @@ public class TransientSessionKeyManager extends SessionKeyManager {
                 _log.warn("Current tag set creation: " + tagSet + ": key=" + tagSet.getAssociatedKey());
             }
         }
-        
+
         int overage = _inboundTagSets.size() - MAX_INBOUND_SESSION_TAGS;
         if (overage > 0)
             clearExcess(overage);
@@ -568,7 +568,7 @@ public class TransientSessionKeyManager extends SessionKeyManager {
         //    _log.debug("Received 0 tags for key " + key);
         //if (false) aggressiveExpire();
     }
-    
+
     /**
      * remove a bunch of arbitrarily selected tags, then drop all of
      * the associated tag sets.  this is very time consuming - iterating
@@ -616,7 +616,7 @@ public class TransientSessionKeyManager extends SessionKeyManager {
                 }
             }
         }
-        _log.logAlways(Log.WARN, "TOO MANY SESSION TAGS!  removed " + removed.size() 
+        _log.logAlways(Log.WARN, "TOO MANY SESSION TAGS!  removed " + removed.size()
                      + " tag sets arbitrarily, with " + tags + " tags,"
                      + "where there are " + old + " long lasting sessions, "
                      + recent + " ones created in the last few minutes, and "
@@ -719,7 +719,7 @@ public class TransientSessionKeyManager extends SessionKeyManager {
     @Override
     public void renderStatusHTML(Writer out) throws IOException {
         StringBuilder buf = new StringBuilder(1024);
-        buf.append("<h2>Inbound sessions</h2>" +
+        buf.append("<h3 class=\"debug_inboundsessions\">Inbound sessions</h3>" +
                    "<table>");
         Set<TagSet> inbound = getInboundTagSets();
         Map<SessionKey, Set<TagSet>> inboundSets = new HashMap<SessionKey, Set<TagSet>>(inbound.size());
@@ -738,18 +738,18 @@ public class TransientSessionKeyManager extends SessionKeyManager {
             SessionKey skey = e.getKey();
             Set<TagSet> sets = new TreeSet<TagSet>(new TagSetComparator());
             sets.addAll(e.getValue());
-            buf.append("<tr><td><b>Session key</b>: ").append(skey.toBase64()).append("</td>" +
+            buf.append("<tr><td><b>Session key:</b> ").append(skey.toBase64()).append("</td>" +
                        "<td><b># Sets:</b> ").append(sets.size()).append("</td></tr>" +
-                       "<tr><td colspan=\"2\"><ul>");
+                       "<tr class=\"expiry\"><td colspan=\"2\"><ul>");
             for (TagSet ts : sets) {
                 int size = ts.getTags().size();
                 total += size;
                 buf.append("<li><b>ID: ").append(ts.getID());
                 long expires = ts.getDate() - now;
                 if (expires > 0)
-                    buf.append(" Expires in:</b> ").append(DataHelper.formatDuration2(expires)).append(" with ");
+                    buf.append(" expires in:</b> ").append(DataHelper.formatDuration2(expires)).append(" with ");
                 else
-                    buf.append(" Expired:</b> ").append(DataHelper.formatDuration2(0 - expires)).append(" ago with ");
+                    buf.append(" expired:</b> ").append(DataHelper.formatDuration2(0 - expires)).append(" ago with ");
                 buf.append(size).append('/').append(ts.getOriginalSize()).append(" tags remaining</li>");
             }
             buf.append("</ul></td></tr>\n");
@@ -759,7 +759,7 @@ public class TransientSessionKeyManager extends SessionKeyManager {
         buf.append("<tr><th colspan=\"2\">Total tags: ").append(total).append(" (");
         buf.append(DataHelper.formatSize2(32*total)).append("B)</th></tr>\n" +
                    "</table>" +
-                   "<h2><b>Outbound sessions</b></h2>" +
+                   "<h3 class=\"debug_outboundsessions\">Outbound sessions</h3>" +
                    "<table>");
         total = 0;
         Set<OutboundSession> outbound = getOutboundSessions();
@@ -767,11 +767,11 @@ public class TransientSessionKeyManager extends SessionKeyManager {
             OutboundSession sess = iter.next();
             Set<TagSet> sets = new TreeSet<TagSet>(new TagSetComparator());
             sets.addAll(sess.getTagSets());
-            buf.append("<tr><td><b>Target public key:</b> ").append(toString(sess.getTarget())).append("<br>" +
+            buf.append("<tr class=\"debug_outboundtarget\"><td><div class=\"debug_targetinfo\"><b>Target public key:</b> ").append(toString(sess.getTarget())).append("<br>" +
                        "<b>Established:</b> ").append(DataHelper.formatDuration2(now - sess.getEstablishedDate())).append(" ago<br>" +
                        "<b>Ack Received?</b> ").append(sess.getAckReceived()).append("<br>" +
                        "<b>Last Used:</b> ").append(DataHelper.formatDuration2(now - sess.getLastUsedDate())).append(" ago<br>" +
-                       "<b>Session key:</b> ").append(sess.getCurrentKey().toBase64()).append("</td>" +
+                       "<b>Session key:</b> ").append(sess.getCurrentKey().toBase64()).append("</div></td>" +
                        "<td><b># Sets:</b> ").append(sess.getTagSets().size()).append("</td></tr>" +
                        "<tr><td colspan=\"2\"><ul>");
             for (Iterator<TagSet> siter = sets.iterator(); siter.hasNext();) {
@@ -1162,7 +1162,7 @@ public class TransientSessionKeyManager extends SessionKeyManager {
             iter.remove();
             return first;
         }
-        
+
         //public Exception getCreatedBy() { return _createdBy; }
 
         /**
@@ -1174,7 +1174,7 @@ public class TransientSessionKeyManager extends SessionKeyManager {
          *  For outbound only.
          */
         public boolean getAcked() { return _acked; }
-        
+
 /******    this will return a dup if two in the same ms, so just use java
         @Override
         public int hashCode() {
@@ -1184,12 +1184,12 @@ public class TransientSessionKeyManager extends SessionKeyManager {
             // no need to hashCode the tags, key + date should be enough
             return (int) rv;
         }
-        
+
         @Override
         public boolean equals(Object o) {
             if ((o == null) || !(o instanceof TagSet)) return false;
             TagSet ts = (TagSet) o;
-            return DataHelper.eq(ts.getAssociatedKey(), _key) 
+            return DataHelper.eq(ts.getAssociatedKey(), _key)
                    //&& DataHelper.eq(ts.getTags(), getTags())
                    && ts.getDate() == _date;
         }
diff --git a/router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java b/router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java
index 13188b340e5e2efb227d5fb1c3780e8ce43385ce..c6198d6c999132f00e67bf07c8b49ea07b1a4251 100644
--- a/router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java
+++ b/router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java
@@ -108,6 +108,7 @@ public class Reseeder {
         //
         // https url:port, ending with "/"              // certificates/reseed/      // certificates/ssl/          // notes
         // ----------------------------------           ------------------------     -------------------------     ---------------
+        "https://i2p.novg.net/"               + ',' +   // igor_at_novg.net.crt      // CA                         // Java 8+ only
         "https://i2pseed.creativecowpat.net:8443/" + ',' + // creativecowpat_at_mail.i2p.crt // i2pseed.creativecowpat.net.crt // Java 7+
         "https://itoopie.atomike.ninja/"      + ',' +   // atomike_at_mail.i2p.crt   // CA                         // Java 8+ only
         "https://reseed.onion.im/"            + ',' +   // lazygravy_at_mail.i2p     // reseed.onion.im.crt        // Java 8+ only
diff --git a/router/java/src/net/i2p/router/startup/RouterAppManager.java b/router/java/src/net/i2p/router/startup/RouterAppManager.java
index 4449b5a6fcccdc4649d229d32770d0109808f085..27cee8ddcb6d6c34f0a186d9e2652f2bcca32ceb 100644
--- a/router/java/src/net/i2p/router/startup/RouterAppManager.java
+++ b/router/java/src/net/i2p/router/startup/RouterAppManager.java
@@ -23,7 +23,7 @@ import net.i2p.util.Log;
  *  @since 0.9.4
  */
 public class RouterAppManager extends ClientAppManagerImpl {
-    
+
     private final RouterContext _context;
     private final Log _log;
     // client to args
@@ -127,7 +127,7 @@ public class RouterAppManager extends ClientAppManagerImpl {
             break;
         }
     }
-    
+
     /**
      *  Register with the manager under the given name,
      *  so that other clients may find it.
@@ -150,7 +150,7 @@ public class RouterAppManager extends ClientAppManagerImpl {
         // TODO if old app in there is not running and != this app, allow replacement
         return super.register(app);
     }
-    
+
     /// end ClientAppManager interface
 
     /**
@@ -187,9 +187,13 @@ public class RouterAppManager extends ClientAppManagerImpl {
         StringBuilder buf = new StringBuilder(1024);
         buf.append("<h2>App Manager</h2>");
         buf.append("<h3>Tracked</h3>");
+        buf.append("<div class=\"debug_container\">");
         toString1(buf);
+        buf.append("</div>");
         buf.append("<h3>Registered</h3>");
+        buf.append("<div class=\"debug_container\">");
         toString2(buf);
+        buf.append("</div>");
         out.write(buf.toString());
     }
 
@@ -202,7 +206,7 @@ public class RouterAppManager extends ClientAppManagerImpl {
         for (Map.Entry<ClientApp, String[]> entry : _clients.entrySet()) {
             ClientApp key = entry.getKey();
             String[] val = entry.getValue();
-            list.add("[" + key.getName() + "] = [" + key.getClass().getName() + ' ' + Arrays.toString(val) + "] " + key.getState() + "<br>");
+            list.add("[<b>" + key.getName() + "</b>] = [" + key.getClass().getName() + ' ' + Arrays.toString(val) + "] <i>" + key.getState() + "</i><br>");
         }
         Collections.sort(list);
         for (String e : list) {
@@ -219,7 +223,7 @@ public class RouterAppManager extends ClientAppManagerImpl {
         for (Map.Entry<String, ClientApp> entry : _registered.entrySet()) {
             String key = entry.getKey();
             ClientApp val = entry.getValue();
-            list.add("[" + key + "] = [" + val.getClass().getName() + "]<br>");
+            list.add("[<b>" + key + "</b>] = [" + val.getClass().getName() + "]<br>");
         }
         Collections.sort(list);
         for (String e : list) {
diff --git a/router/java/src/net/i2p/router/startup/WorkingDir.java b/router/java/src/net/i2p/router/startup/WorkingDir.java
index fc9ae45f804810e39ca77629326ab218cf2f340c..63f7358aec6c7cc58949881586ffb5250610d9cf 100644
--- a/router/java/src/net/i2p/router/startup/WorkingDir.java
+++ b/router/java/src/net/i2p/router/startup/WorkingDir.java
@@ -60,7 +60,8 @@ public class WorkingDir {
      * Only call this once on router invocation.
      * Caller should store the return value for future reference.
      *
-     * This also redirects stdout and stderr to a wrapper.log file if there is no wrapper present.
+     * This also redirects stdout and stderr to a wrapper.log file if there is no wrapper present,
+     * unless system property I2P_DISABLE_OUTPUT_OVERRIDE is set.
      *
      * @param migrateOldConfig whether to copy all data over from an existing install
      */
@@ -262,7 +263,8 @@ public class WorkingDir {
     }
 
     /**
-     *  Redirect stdout and stderr to a wrapper.log file if there is no wrapper.
+     *  Redirect stdout and stderr to a wrapper.log file if there is no wrapper,
+     *  unless system property I2P_DISABLE_OUTPUT_OVERRIDE is set.
      *
      *  If there is no -Dwrapper.log=/path/to/wrapper.log on the java command line
      *  to specify a log file, check for existence of wrapper.log in CWD,
@@ -275,7 +277,9 @@ public class WorkingDir {
      *  @since 0.8.13
      */
     private static void setupSystemOut(String dir) {
-        if (System.getProperty("wrapper.version") != null)
+        if (SystemVersion.hasWrapper())
+            return;
+        if (System.getProperty("I2P_DISABLE_OUTPUT_OVERRIDE") != null)
             return;
         String path = System.getProperty(PROP_WRAPPER_LOG);
         File logfile;
@@ -462,7 +466,6 @@ public class WorkingDir {
         if (!src.exists()) return false;
         boolean rv = true;
 
-        byte buf[] = new byte[4096];
         FileInputStream in = null;
         FileOutputStream out = null;
         try {
diff --git a/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java b/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java
index d0360b497a77b012dcc8b36dedc5a6bbc5e8c13f..f568df6c65e3464d7c700437706839f6f5d9e472 100644
--- a/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java
+++ b/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java
@@ -523,6 +523,8 @@ public class CommSystemFacadeImpl extends CommSystemFacade {
             buf.append(countryName);
             buf.append("\" src=\"/flags.jsp?c=").append(c).append("\"> ");
         }
+        else
+            buf.append("<img class=\"unknownflag\" height=\"11\" width=\"16\" alt=\"??\" src=\"/flags.jsp?c=a0\" title=\"").append(_t("unknown")).append("\"> ");
         buf.append("<tt>");
         boolean found = _context.netDb().lookupRouterInfoLocally(peer) != null;
         if (found)
diff --git a/router/java/src/net/i2p/router/transport/TransportUtil.java b/router/java/src/net/i2p/router/transport/TransportUtil.java
index bb4e022d6c301d0236f7e358bd8aca7a85499a88..2752e3fcc1693050d9a67f6f729034c09b45f36f 100644
--- a/router/java/src/net/i2p/router/transport/TransportUtil.java
+++ b/router/java/src/net/i2p/router/transport/TransportUtil.java
@@ -221,6 +221,7 @@ public abstract class TransportUtil {
      *  Is this a valid port for us or a remote router?
      *
      *  ref: http://i2p-projekt.i2p/en/docs/ports
+     *  ref: https://cs.chromium.org/chromium/src/net/base/port_util.cc
      *
      *  @since 0.9.17 moved from logic in individual transports
      */
@@ -229,12 +230,19 @@ public abstract class TransportUtil {
         return port >= 1024 &&
                port <= 65535 &&
                port != 1900 &&  // UPnP SSDP
+               port != 2049 &&  // NFS
                port != 2827 &&  // BOB
+               port != 3659 &&  // Apple-sasl
+               port != 4045 &&  // lockd
                port != 4444 &&  // HTTP
                port != 4445 &&  // HTTPS
-               port != 6668 &&  // IRC
+               port != 6000 &&  // lockd
+               (!(port >= 6665 && port <= 6669)) && // IRC and alternates
+               port != 6697 &&  // IRC+TLS
                (!(port >= 7650 && port <= 7664)) && // standard I2P range
                port != 8998 &&  // mtn
+               port != 9100 &&  // network printer
+               // do not block anything in 9111 - 30777, this is the standard random selection range
                port != 31000 && // Wrapper
                port != 32000;   // Wrapper
     }
diff --git a/router/java/src/net/i2p/router/transport/udp/UDPEndpoint.java b/router/java/src/net/i2p/router/transport/udp/UDPEndpoint.java
index a1e680182eb82b10a0fd78f9793054b487357da7..d229c0611cf1f8f18f73cb7c64892410eb4b7236 100644
--- a/router/java/src/net/i2p/router/transport/udp/UDPEndpoint.java
+++ b/router/java/src/net/i2p/router/transport/udp/UDPEndpoint.java
@@ -116,7 +116,7 @@ class UDPEndpoint implements SocketListener {
         if (port > 0 && !TransportUtil.isValidPort(port)) {
             _log.error("Specified UDP port " + port + " is not valid, selecting a new port");
             // See isValidPort() for list
-            _log.error("Invalid ports are: 0-1023, 1900, 2827, 4444, 4445, 6668, 7650-7664, 8998, 31000, 32000, 65536+");
+            _log.error("Invalid ports are: 0-1023, 1900, 2049, 2827, 3659, 4045, 4444, 4445, 6000, 6665-6669, 6697, 7650-7664, 8998, 9100, 31000, 32000, 65536+");
             port = -1;
         }