diff --git a/core/java/src/net/i2p/util/LogManager.java b/core/java/src/net/i2p/util/LogManager.java
index f736a21fc5779fb061f72e9149b7cea2957a6c69..bbd5d826598ad17e34855075f7c9e6b5f372dd75 100644
--- a/core/java/src/net/i2p/util/LogManager.java
+++ b/core/java/src/net/i2p/util/LogManager.java
@@ -209,8 +209,18 @@ public class LogManager {
      *
      */
     void addRecord(LogRecord record) {
+        int numRecords = 0;
         synchronized (_records) {
             _records.add(record);
+            numRecords = _records.size();
+        }
+        
+        if (numRecords > 100) {
+            // the writer waits 10 seconds *or* until we tell them to wake up
+            // before rereading the config and writing out any log messages
+            synchronized (_writer) {
+                _writer.notifyAll();
+            }
         }
     }
     
diff --git a/core/java/src/net/i2p/util/LogWriter.java b/core/java/src/net/i2p/util/LogWriter.java
index 421f13dc1f3e86f5b05b3e53a0b6c8068ca9e83c..0b476ff2782a19e3e29ea3cb78aac6c25a640526 100644
--- a/core/java/src/net/i2p/util/LogWriter.java
+++ b/core/java/src/net/i2p/util/LogWriter.java
@@ -72,12 +72,15 @@ class LogWriter implements Runnable {
             t.printStackTrace();
         } finally {
             try { 
-                Thread.sleep(100); 
+                synchronized (this) {
+                    this.wait(10*1000); 
+                }
             } catch (InterruptedException ie) { // nop
             }
         }
     }
     
+    
     private void rereadConfig() {
         long now = Clock.getInstance().now();
         if (now - _lastReadConfig > CONFIG_READ_ITERVAL) {