diff --git a/apps/routerconsole/jsp/logs.jsp b/apps/routerconsole/jsp/logs.jsp
index 019564bbe3f2d39e7a15fc79cf23f89cc4bd7008..ed3b7ebc93807edb6ccac4552df4d6e830f66a46 100644
--- a/apps/routerconsole/jsp/logs.jsp
+++ b/apps/routerconsole/jsp/logs.jsp
@@ -24,11 +24,12 @@
 <b>Processor:</b> <%=net.i2p.util.NativeBigInteger.cpuModel()%> (<%=net.i2p.util.NativeBigInteger.cpuType()%>)<br>
 <b>Jbigi:</b> <%=net.i2p.util.NativeBigInteger.loadStatus()%><br>
 <b>Encoding:</b> <%=System.getProperty("file.encoding")%></p>
+<p><%=intl._("Note that system information, log timestamps, and log messages may provide clues to your location; please review everything you include in a bug report.")%>:</p>
  <jsp:useBean class="net.i2p.router.web.LogsHelper" id="logsHelper" scope="request" />
  <jsp:setProperty name="logsHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
 <h3><%=intl._("Critical Logs")%></h3><a name="criticallogs"> </a>
  <jsp:getProperty name="logsHelper" property="criticalLogs" />
-<h3><%=intl._("Router Logs")%> (<a href="configlogging.jsp"><%=intl._("configure")%></a>)</h3>
+<h3><%=intl._("Router Logs")%> (<a href="configlogging"><%=intl._("configure")%></a>)</h3>
  <jsp:getProperty name="logsHelper" property="logs" />
 <h3><%=intl._("Service (Wrapper) Logs")%></h3><a name="servicelogs"> </a>
  <jsp:getProperty name="logsHelper" property="serviceLogs" />
diff --git a/core/java/src/net/i2p/util/Log.java b/core/java/src/net/i2p/util/Log.java
index 63d44cb13d00764cf46888e3895f18e3137777dc..922df78852b587bbd83fc724a93f580c5e42e1e6 100644
--- a/core/java/src/net/i2p/util/Log.java
+++ b/core/java/src/net/i2p/util/Log.java
@@ -107,6 +107,9 @@ public class Log {
     }
 
     public void log(int priority, String msg, Throwable t) {
+        // Boost the priority of NPE and friends so they get seen and reported
+        if (t != null && t instanceof RuntimeException && !(t instanceof IllegalArgumentException))
+            priority = CRIT;
         if (priority >= _minPriority) {
             _manager.addRecord(new LogRecord(_class, _name, 
                                              Thread.currentThread().getName(), priority,
diff --git a/core/java/src/net/i2p/util/LogManager.java b/core/java/src/net/i2p/util/LogManager.java
index 6c9a062e4b542590327b6aab5cd6bdb3c1c326e1..54a3b9e1312f558fa2a59fe53f649ff5f7b5c661 100644
--- a/core/java/src/net/i2p/util/LogManager.java
+++ b/core/java/src/net/i2p/util/LogManager.java
@@ -13,6 +13,7 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.text.DateFormat;
 import java.text.DecimalFormat;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
@@ -23,6 +24,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 import java.util.Set;
+import java.util.TimeZone;
 import java.util.TreeMap;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.LinkedBlockingQueue;
@@ -57,7 +59,9 @@ public class LogManager {
     public final static String PROP_RECORD_PREFIX = "logger.record.";
 
     public final static String DEFAULT_FORMAT = DATE + " " + PRIORITY + " [" + THREAD + "] " + CLASS + ": " + MESSAGE;
-    public final static String DEFAULT_DATEFORMAT = "HH:mm:ss.SSS";
+    //public final static String DEFAULT_DATEFORMAT = "HH:mm:ss.SSS";
+    /** blank means default short date and medium time for the locale - see DateFormat */
+    public final static String DEFAULT_DATEFORMAT = "";
     public final static String DEFAULT_FILENAME = "logs/log-#.txt";
     public final static String DEFAULT_FILESIZE = "10m";
     public final static boolean DEFAULT_DISPLAYONSCREEN = true;
@@ -225,6 +229,7 @@ public class LogManager {
             startLogWriter();
 
         _records.offer(record);
+      /**** don't burden the logging thread with counting
         int numRecords = _records.size();
         
         if (numRecords > 100) {
@@ -234,6 +239,7 @@ public class LogManager {
                 _writer.notifyAll();
             }
         }
+       ****/
     }
     
     /**
@@ -292,8 +298,7 @@ public class LogManager {
         _format = fmt.toCharArray();
         
         String df = config.getProperty(PROP_DATEFORMAT, DEFAULT_DATEFORMAT);
-        _dateFormatPattern = df;
-        _dateFormat = new SimpleDateFormat(df);
+        setDateFormat(df);
 
         String disp = config.getProperty(PROP_DISPLAYONSCREEN);
         if (disp == null)
@@ -386,13 +391,24 @@ public class LogManager {
     /**
      * Update the date format
      *
+     * @param format null or empty string means use default format for the locale
+     *               (with a SHORT date and a MEDIUM time - see DateFormat)
      * @return true if the format was updated, false if it was invalid
      */
     public boolean setDateFormat(String format) {
-        if (format == null) return false;
+        if (format == null)
+            format = "";
+        if (format.equals(_dateFormatPattern) && _dateFormat != null)
+            return true;
         
         try {
-            SimpleDateFormat fmt = new SimpleDateFormat(format);
+            SimpleDateFormat fmt = (SimpleDateFormat) DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM);
+            if (!format.equals(""))
+                fmt.applyPattern(format);
+            // the router sets the JVM time zone to UTC but saves the original here so we can get it
+            String systemTimeZone = _context.getProperty("i2p.systemTimeZone");
+            if (systemTimeZone != null)
+                fmt.setTimeZone(TimeZone.getTimeZone(systemTimeZone));
             _dateFormatPattern = format;
             _dateFormat = fmt;
             return true;
diff --git a/core/java/src/net/i2p/util/LogWriter.java b/core/java/src/net/i2p/util/LogWriter.java
index 7dca7ba96dc75cdfe8d045491ee241baeda61aa7..b4d6e439598447d9d2b21001c7e4b05cd0237cac 100644
--- a/core/java/src/net/i2p/util/LogWriter.java
+++ b/core/java/src/net/i2p/util/LogWriter.java
@@ -27,7 +27,8 @@ import net.i2p.I2PAppContext;
  */
 class LogWriter implements Runnable {
     /** every 10 seconds? why? Just have the gui force a reread after a change?? */
-    private final static long CONFIG_READ_ITERVAL = 10 * 1000;
+    private final static long CONFIG_READ_INTERVAL = 50 * 1000;
+    private final static long FLUSH_INTERVAL = 11 * 1000;
     private long _lastReadConfig = 0;
     private long _numBytesInCurrentFile = 0;
     private Writer _currentOut;
@@ -71,14 +72,14 @@ class LogWriter implements Runnable {
         try {
             List<LogRecord> records = _manager._removeAll();
             if (records == null) return;
-            for (LogRecord rec : records) {
-                writeRecord(rec);
-            }
             if (!records.isEmpty()) {
+                for (LogRecord rec : records) {
+                    writeRecord(rec);
+                }
                 try {
                     _currentOut.flush();
                 } catch (IOException ioe) {
-                    System.err.println("Error flushing the records");
+                    System.err.println("Error writing the router log");
                 }
             }
         } catch (Throwable t) {
@@ -87,7 +88,7 @@ class LogWriter implements Runnable {
             if (shouldWait) {
                 try { 
                     synchronized (this) {
-                        this.wait(10*1000); 
+                        this.wait(FLUSH_INTERVAL); 
                     }
                 } catch (InterruptedException ie) { // nop
                 }
@@ -101,7 +102,7 @@ class LogWriter implements Runnable {
 
     private void rereadConfig() {
         long now = Clock.getInstance().now();
-        if (now - _lastReadConfig > CONFIG_READ_ITERVAL) {
+        if (now - _lastReadConfig > CONFIG_READ_INTERVAL) {
             _manager.rereadConfig();
             _lastReadConfig = now;
         }
diff --git a/router/java/src/net/i2p/router/Router.java b/router/java/src/net/i2p/router/Router.java
index 459be0ec7eeb31897c1e08eef25571069fe2dc49..7f8b2788ea70983f9fcee6ce57226034e13b4c6f 100644
--- a/router/java/src/net/i2p/router/Router.java
+++ b/router/java/src/net/i2p/router/Router.java
@@ -96,6 +96,7 @@ public class Router {
     public final static String PROP_SHUTDOWN_IN_PROGRESS = "__shutdownInProgress";
     public final static String DNS_CACHE_TIME = "" + (5*60);
         
+    private static final String originalTimeZoneID;
     static {
         // grumble about sun's java caching DNS entries *forever* by default
         // so lets just keep 'em for a short time
@@ -106,6 +107,8 @@ public class Router {
         System.setProperty("http.agent", "I2P");
         // (no need for keepalive)
         System.setProperty("http.keepAlive", "false");
+        // Save it for LogManager
+        originalTimeZoneID = TimeZone.getDefault().getID();
         System.setProperty("user.timezone", "GMT");
         // just in case, lets make it explicit...
         TimeZone.setDefault(TimeZone.getTimeZone("GMT"));
@@ -180,6 +183,8 @@ public class Router {
 
         if (envProps.getProperty("i2p.dir.config") == null)
             envProps.setProperty("i2p.dir.config", userDir);
+        // Save this in the context for the logger and apps that need it
+        envProps.setProperty("i2p.systemTimeZone", originalTimeZoneID);
 
         // The important thing that happens here is the directory paths are set and created
         // i2p.dir.router defaults to i2p.dir.config