diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/HTTPResponseOutputStream.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/HTTPResponseOutputStream.java
index 174b5707e8656eac1c2d1c824fe67a9a3869e7c9..29c1969a00398e93396b6994d5566bca9bd9e9b9 100644
--- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/HTTPResponseOutputStream.java
+++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/HTTPResponseOutputStream.java
@@ -16,6 +16,7 @@ import java.io.OutputStream;
 import java.io.PipedInputStream;
 import java.io.PipedOutputStream;
 import java.util.zip.GZIPInputStream;
+import java.util.Locale;
 import java.util.concurrent.RejectedExecutionException;
 
 import net.i2p.I2PAppContext;
@@ -177,23 +178,24 @@ class HTTPResponseOutputStream extends FilterOutputStream {
                             if (_log.shouldLog(Log.INFO))
                                 _log.info("Response header [" + key + "] = [" + val + "]");
                             
-                            if ("Connection".equalsIgnoreCase(key)) {
+                            String lcKey = key.toLowerCase(Locale.US);
+                            if ("connection".equals(lcKey)) {
                                 out.write("Connection: close\r\n".getBytes());
                                 connectionSent = true;
-                            } else if ("Proxy-Connection".equalsIgnoreCase(key)) {
+                            } else if ("proxy-connection".equals(lcKey)) {
                                 out.write("Proxy-Connection: close\r\n".getBytes());
                                 proxyConnectionSent = true;
-                            } else if ( ("Content-encoding".equalsIgnoreCase(key)) && ("x-i2p-gzip".equalsIgnoreCase(val)) ) {
+                            } else if ("content-encoding".equals(lcKey) && "x-i2p-gzip".equals(val.toLowerCase(Locale.US))) {
                                 _gzip = true;
-                            } else if ("Proxy-Authenticate".equalsIgnoreCase(key)) {
+                            } else if ("proxy-authenticate".equals(lcKey)) {
                                 // filter this hop-by-hop header; outproxy authentication must be configured in I2PTunnelHTTPClient
                             } else {
-                                if ("Content-Length".equalsIgnoreCase(key)) {
+                                if ("content-length".equals(lcKey)) {
                                     // save for compress decision on server side
                                     try {
                                         _dataExpected = Long.parseLong(val);
                                     } catch (NumberFormatException nfe) {}
-                                } else if ("Content-Type".equalsIgnoreCase(key)) {
+                                } else if ("content-type".equals(lcKey)) {
                                     // save for compress decision on server side
                                     _contentType = val;
                                 }
diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelConnectClient.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelConnectClient.java
index df4f29594f81670c62091810d6067d1c9b90aa69..9953dd205bc5c147a7e4f13d98e4c6986c5a16f2 100644
--- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelConnectClient.java
+++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelConnectClient.java
@@ -262,7 +262,7 @@ public class I2PTunnelConnectClient extends I2PTunnelHTTPClientBase implements R
                 }
             }
 
-            if (destination == null || !"CONNECT".equalsIgnoreCase(method)) {
+            if (destination == null || method == null || !"CONNECT".equals(method.toUpperCase(Locale.US))) {
                 writeErrorMessage(ERR_BAD_PROTOCOL, out);
                 s.close();
                 return;
diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java
index 0531b0791eb84fa522943e3c72913bd6d092a3ec..38c1f2b6d8f7d6f674fd904869aaaddc858a909e 100644
--- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java
+++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java
@@ -758,7 +758,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
             if (method == null || destination == null) {
                 //l.log("No HTTP method found in the request.");
                 if (out != null) {
-                    if ("http://".equalsIgnoreCase(protocol))
+                    if (protocol != null && "http://".equals(protocol.toLowerCase(Locale.US)))
                         out.write(getErrorPage("denied", ERR_REQUEST_DENIED));
                     else
                         out.write(getErrorPage("protocol", ERR_BAD_PROTOCOL));
@@ -1188,7 +1188,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
             }
         }
       ****/
-        return protocol.equalsIgnoreCase("http://");
+        return protocol.toLowerCase(Locale.US).equals("http://");
     }
 
     private final static byte[] ERR_404 =
diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClientBase.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClientBase.java
index 33563f175b67829e57e81e4090309bb568894d29..203b828d8ecabef752fc507c2e8a2f0cda65eed7 100644
--- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClientBase.java
+++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClientBase.java
@@ -10,6 +10,7 @@ import java.net.Socket;
 import java.util.ArrayList;
 import java.io.File;
 import java.util.List;
+import java.util.Locale;
 
 import net.i2p.I2PAppContext;
 import net.i2p.client.streaming.I2PSocketManager;
@@ -101,7 +102,8 @@ public abstract class I2PTunnelHTTPClientBase extends I2PTunnelClientBase implem
         // Ref: RFC 2617
         // If the socket is an InternalSocket, no auth required.
         String authRequired = getTunnel().getClientOptions().getProperty(PROP_AUTH);
-        if (Boolean.valueOf(authRequired).booleanValue() || "basic".equalsIgnoreCase(authRequired)) {
+        if (Boolean.valueOf(authRequired).booleanValue() ||
+            (authRequired != null && "basic".equals(authRequired.toLowerCase(Locale.US)))) {
             if (s instanceof InternalSocket) {
                 if (_log.shouldLog(Log.INFO))
                     _log.info(getPrefix(requestId) + "Internal access, no auth required");
diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPServer.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPServer.java
index 2650f30a92c967b7b325ac12b2bce9abfe38924e..feee19258c322b89ccc7b029b17e35b9d405d738 100644
--- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPServer.java
+++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPServer.java
@@ -14,6 +14,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Properties;
 import java.util.zip.GZIPOutputStream;
@@ -507,16 +508,17 @@ public class I2PTunnelHTTPServer extends I2PTunnelServer {
                 else
                     value = "";
 
-                if ("Accept-encoding".equalsIgnoreCase(name))
+                if ("accept-encoding".equals(name.toLowerCase(Locale.US)))
                     name = "Accept-encoding";
-                else if ("X-Accept-encoding".equalsIgnoreCase(name))
+                else if ("x-accept-encoding".equals(name.toLowerCase(Locale.US)))
                     name = "X-Accept-encoding";
 
                 // For incoming, we remove certain headers to prevent spoofing.
                 // For outgoing, we remove certain headers to improve anonymity.
                 boolean skip = false;
+                String lcName = name.toLowerCase(Locale.US);
                 for (String skipHeader: skipHeaders) {
-                    if (skipHeader.equalsIgnoreCase(name)) {
+                    if (skipHeader.toLowerCase(Locale.US).equals(lcName)) {
                         skip = true;
                         break;
                     }
diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelIRCServer.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelIRCServer.java
index e21a5a4ab6574f9599a7d704f552051fd78c439a..fc78131b81ecba3acaab5ed6fdf7de1d9b219471 100644
--- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelIRCServer.java
+++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelIRCServer.java
@@ -6,6 +6,7 @@ import java.io.InputStream;
 import java.net.InetAddress;
 import java.net.Socket;
 import java.net.SocketException;
+import java.util.Locale;
 import java.util.Properties;
 
 import net.i2p.client.streaming.I2PSocket;
@@ -202,13 +203,13 @@ public class I2PTunnelIRCServer extends I2PTunnelServer implements Runnable {
                 idx++;
 
             try {
-                command = field[idx++];
+                command = field[idx++].toUpperCase(Locale.US);
             } catch (IndexOutOfBoundsException ioobe) {
                 // wtf, server sent borked command?
                throw new IOException("Dropping defective message: index out of bounds while extracting command.");
             }
 
-            if ("USER".equalsIgnoreCase(command)) {
+            if ("USER".equals(command)) {
                 if (field.length < idx + 4)
                     throw new IOException("Too few parameters in USER message: " + s);
                 // USER zzz1 hostname localhost :zzz
@@ -221,7 +222,7 @@ public class I2PTunnelIRCServer extends I2PTunnelServer implements Runnable {
                 break;
             }
             buf.append(s).append("\r\n");
-            if ("SERVER".equalsIgnoreCase(command))
+            if ("SERVER".equals(command))
                 break;
         }
         //if (_log.shouldLog(Log.DEBUG))
diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/irc/IRCFilter.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/irc/IRCFilter.java
index f82b5b7538080122990615986205c41648393167..fb6f6f557bd2ab0d3799fd7dd3a72c5c8c5a610b 100644
--- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/irc/IRCFilter.java
+++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/irc/IRCFilter.java
@@ -58,7 +58,7 @@ abstract class IRCFilter {
         if(field[0].charAt(0)==':')
             idx++;
 
-        try { command = field[idx++]; }
+        try { command = field[idx++].toUpperCase(Locale.US); }
          catch (IndexOutOfBoundsException ioobe) // wtf, server sent borked command?
         {
            //_log.warn("Dropping defective message: index out of bounds while extracting command.");
@@ -74,9 +74,9 @@ abstract class IRCFilter {
         } catch(NumberFormatException nfe){}
 
         
-	if ("PING".equalsIgnoreCase(command))
+	if ("PING".equals(command))
             return "PING 127.0.0.1"; // no way to know what the ircd to i2ptunnel server con is, so localhost works
-	if ("PONG".equalsIgnoreCase(command)) {
+	if ("PONG".equals(command)) {
             // Turn the received ":irc.freshcoffee.i2p PONG irc.freshcoffee.i2p :127.0.0.1"
             // into ":127.0.0.1 PONG 127.0.0.1 " so that the caller can append the client's extra parameter
             // though, does 127.0.0.1 work for irc clients connecting remotely?  and for all of them?  sure would
@@ -93,12 +93,12 @@ abstract class IRCFilter {
         
         // Allow all allowedCommands
         for(int i=0;i<allowedCommands.length;i++) {
-            if(allowedCommands[i].equalsIgnoreCase(command))
+            if(allowedCommands[i].equals(command))
                 return s;
         }
         
         // Allow PRIVMSG, but block CTCP.
-        if("PRIVMSG".equalsIgnoreCase(command) || "NOTICE".equalsIgnoreCase(command))
+        if("PRIVMSG".equals(command) || "NOTICE".equals(command))
         {
             String msg;
             msg = field[idx++];
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigNetHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigNetHandler.java
index 9427a3e8a59eed8f9937c9665105cbef02a3c088..98729e571b9418cd6de642bb40ebeedcd94353ed 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigNetHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigNetHandler.java
@@ -344,7 +344,7 @@ public class ConfigNetHandler extends FormHandler {
 
         if (_sharePct != null) {
             String old = _context.router().getConfigSetting(Router.PROP_BANDWIDTH_SHARE_PERCENTAGE);
-            if ( (old == null) || (!old.equalsIgnoreCase(_sharePct)) ) {
+            if ( (old == null) || (!old.equals(_sharePct)) ) {
                 _context.router().setConfigSetting(Router.PROP_BANDWIDTH_SHARE_PERCENTAGE, _sharePct);
                 addFormNotice(_("Updating bandwidth share percentage"));
                 updated = true;
diff --git a/apps/routerconsole/jsp/summaryframe.jsp b/apps/routerconsole/jsp/summaryframe.jsp
index d0eb8b72afdeb80f42aef069c92741f25a2105ea..541f0f13f52aeb95ebfe2f29362b5d135d6980a2 100644
--- a/apps/routerconsole/jsp/summaryframe.jsp
+++ b/apps/routerconsole/jsp/summaryframe.jsp
@@ -32,7 +32,8 @@
             // doesn't work for restart or shutdown with no expl. tunnels,
             // since the call to ConfigRestartBean.renderStatus() hasn't happened yet...
             // So we delay slightly
-            if ("restart".equalsIgnoreCase(action) || "shutdown".equalsIgnoreCase(action)) {
+            if (action != null &&
+                ("restart".equals(action.toLowerCase(java.util.Locale.US)) || "shutdown".equals(action.toLowerCase(java.util.Locale.US)))) {
                 synchronized(this) {
                     try {
                         wait(1000);
diff --git a/core/java/src/net/i2p/client/I2PSessionImpl2.java b/core/java/src/net/i2p/client/I2PSessionImpl2.java
index 0f397f68e23c4aa9145e81ada199db66f40c00c6..cf8672a7892ac854425fd3190f3d91b025c6a2d6 100644
--- a/core/java/src/net/i2p/client/I2PSessionImpl2.java
+++ b/core/java/src/net/i2p/client/I2PSessionImpl2.java
@@ -13,6 +13,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.Locale;
 import java.util.Properties;
 import java.util.Set;
 
@@ -59,7 +60,7 @@ class I2PSessionImpl2 extends I2PSessionImpl {
         _log = ctx.logManager().getLog(I2PSessionImpl2.class);
         _sendingStates = new HashSet(32);
         // default is BestEffort
-        _noEffort = "none".equalsIgnoreCase(getOptions().getProperty(I2PClient.PROP_RELIABILITY));
+        _noEffort = "none".equals(getOptions().getProperty(I2PClient.PROP_RELIABILITY, "").toLowerCase(Locale.US));
 
         ctx.statManager().createRateStat("i2cp.sendBestEffortTotalTime", "how long to do the full sendBestEffort call?", "i2cp", new long[] { 10*60*1000 } );
         //ctx.statManager().createRateStat("i2cp.sendBestEffortStage0", "first part of sendBestEffort?", "i2cp", new long[] { 10*60*1000 } );
diff --git a/core/java/src/net/i2p/data/Base32.java b/core/java/src/net/i2p/data/Base32.java
index cbcb93515f9f8dcb90e3eaa73fdf1da862c706f5..fd6f81a02de28a5958cce041c3b78b8abc639ccb 100644
--- a/core/java/src/net/i2p/data/Base32.java
+++ b/core/java/src/net/i2p/data/Base32.java
@@ -11,6 +11,7 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.util.Locale;
 
 import net.i2p.util.Log;
 
@@ -72,7 +73,8 @@ public class Base32 {
     }
 
     private static void runApp(String args[]) {
-        if ("encodestring".equalsIgnoreCase(args[0])) {
+        String cmd = args[0].toLowerCase(Locale.US);
+        if ("encodestring".equals(cmd)) {
             System.out.println(encode(args[1].getBytes()));
             return;
         }
@@ -85,11 +87,11 @@ public class Base32 {
             if (args.length >= 2) {
                 in = new FileInputStream(args[1]);
             }
-            if ("encode".equalsIgnoreCase(args[0])) {
+            if ("encode".equals(cmd)) {
                 encode(in, out);
                 return;
             }
-            if ("decode".equalsIgnoreCase(args[0])) {
+            if ("decode".equals(cmd)) {
                 decode(in, out);
                 return;
             }
diff --git a/core/java/src/net/i2p/data/Base64.java b/core/java/src/net/i2p/data/Base64.java
index 52d59002d8ef654bff0b9314b9d48b348895e0b7..d93fc080a493e94bc9624f06fe74ce342ed25e1d 100644
--- a/core/java/src/net/i2p/data/Base64.java
+++ b/core/java/src/net/i2p/data/Base64.java
@@ -6,6 +6,7 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.util.Locale;
 
 import net.i2p.util.Log;
 
@@ -178,7 +179,8 @@ public class Base64 {
     }
 
     private static void runApp(String args[]) {
-        if ("encodestring".equalsIgnoreCase(args[0])) {
+        String cmd = args[0].toLowerCase(Locale.US);
+        if ("encodestring".equals(cmd)) {
             System.out.println(encode(args[1].getBytes()));
             return;
         }
@@ -191,11 +193,11 @@ public class Base64 {
             if (args.length >= 2) {
                 in = new FileInputStream(args[1]);
             }
-            if ("encode".equalsIgnoreCase(args[0])) {
+            if ("encode".equals(cmd)) {
                 encode(in, out);
                 return;
             }
-            if ("decode".equalsIgnoreCase(args[0])) {
+            if ("decode".equals(cmd)) {
                 decode(in, out);
                 return;
             }
diff --git a/core/java/src/net/i2p/util/EepGet.java b/core/java/src/net/i2p/util/EepGet.java
index 52121e8e1adee275d8774a222b73b3b451a9b4c5..e58c9984a09c1a15541545923bbcf5065786d294 100644
--- a/core/java/src/net/i2p/util/EepGet.java
+++ b/core/java/src/net/i2p/util/EepGet.java
@@ -939,27 +939,28 @@ public class EepGet {
         
         if (_log.shouldLog(Log.DEBUG))
             _log.debug("Header line: [" + key + "] = [" + val + "]");
-        if (key.equalsIgnoreCase("Content-length")) {
+        key = key.toLowerCase(Locale.US);
+        if (key.equals("content-length")) {
             try {
                 _bytesRemaining = Long.parseLong(val);
             } catch (NumberFormatException nfe) {
                 nfe.printStackTrace();
             }
-        } else if (key.equalsIgnoreCase("ETag")) {
+        } else if (key.equals("etag")) {
             _etag = val;
-        } else if (key.equalsIgnoreCase("Last-Modified")) {
+        } else if (key.equals("last-modified")) {
             _lastModified = val;
-        } else if (key.equalsIgnoreCase("Transfer-encoding")) {
+        } else if (key.equals("transfer-encoding")) {
             _encodingChunked = val.toLowerCase(Locale.US).contains("chunked");
-        } else if (key.equalsIgnoreCase("Content-encoding")) {
+        } else if (key.equals("content-encoding")) {
             // 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.
             // A query string will also mess this up
             if ((!_actualURL.endsWith(".gz")) && (!_actualURL.endsWith(".tgz")))
                 _isGzippedResponse = val.toLowerCase(Locale.US).contains("gzip");
-        } else if (key.equalsIgnoreCase("Content-Type")) {
+        } else if (key.equals("content-type")) {
             _contentType=val;
-        } else if (key.equalsIgnoreCase("Location")) {
+        } else if (key.equals("location")) {
             _redirectLocation=val;
         } else {
             // ignore the rest
diff --git a/router/java/src/net/i2p/router/TunnelPoolSettings.java b/router/java/src/net/i2p/router/TunnelPoolSettings.java
index 533eceaeb1ec1a1b0e1b981491a814c46f86db42..afcf1c727f9b6c6c6faaef937d73fbed766cfd39 100644
--- a/router/java/src/net/i2p/router/TunnelPoolSettings.java
+++ b/router/java/src/net/i2p/router/TunnelPoolSettings.java
@@ -1,5 +1,6 @@
 package net.i2p.router;
 
+import java.util.Locale;
 import java.util.Map;
 import java.util.Properties;
 
@@ -236,7 +237,8 @@ public class TunnelPoolSettings {
     
     private static final boolean getBoolean(String str, boolean defaultValue) { 
         if (str == null) return defaultValue;
-        boolean v = Boolean.valueOf(str).booleanValue() || "YES".equalsIgnoreCase(str);
+        boolean v = Boolean.valueOf(str).booleanValue() ||
+                    (str != null && "YES".equals(str.toUpperCase(Locale.US)));
         return v;
     }
 
diff --git a/router/java/src/net/i2p/router/client/ClientConnectionRunner.java b/router/java/src/net/i2p/router/client/ClientConnectionRunner.java
index 88c1a8ededdbbfe199253993639f1f5f3ed4cc16..a7a136d1ddc4865369551bb9b49bbab4a86fa983 100644
--- a/router/java/src/net/i2p/router/client/ClientConnectionRunner.java
+++ b/router/java/src/net/i2p/router/client/ClientConnectionRunner.java
@@ -15,6 +15,7 @@ import java.net.Socket;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
 
@@ -192,7 +193,7 @@ class ClientConnectionRunner {
         _config = config;
         // This is the only option that is interpreted here, not at the tunnel manager
         if (config.getOptions() != null)
-            _dontSendMSM = "none".equalsIgnoreCase(config.getOptions().getProperty(I2PClient.PROP_RELIABILITY));
+            _dontSendMSM = "none".equals(config.getOptions().getProperty(I2PClient.PROP_RELIABILITY, "").toLowerCase(Locale.US));
         // per-destination session key manager to prevent rather easy correlation
         if (_sessionKeyManager == null)
             _sessionKeyManager = new TransientSessionKeyManager(_context);
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 2dc28c4f9a1e07343e1fef210d47ccfc15552dd3..342e29bb6ca4415c5fe92bfee88298a472cd7bd9 100644
--- a/router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java
+++ b/router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java
@@ -12,6 +12,7 @@ import java.util.Collections;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Locale;
 import java.util.Set;
 import java.util.StringTokenizer;
 
@@ -202,7 +203,7 @@ public class Reseeder {
             // We do this more than once, because
             // the first SSL handshake may take a while, and it may take the server
             // a while to render the index page.
-            if (_gotDate < MAX_DATE_SETS && "date".equalsIgnoreCase(key) && _attemptStarted > 0) {
+            if (_gotDate < MAX_DATE_SETS && "date".equals(key.toLowerCase(Locale.US)) && _attemptStarted > 0) {
                 long timeRcvd = System.currentTimeMillis();
                 long serverTime = RFC822Date.parse822Date(val);
                 if (serverTime > 0) {
diff --git a/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java b/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java
index 634a8c8f5f3bc2a03732b92f8926c458fe98c102..d353a61a05449aa5e4a2942b90ecb9dd35e37f15 100644
--- a/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java
+++ b/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java
@@ -317,7 +317,7 @@ public class CommSystemFacadeImpl extends CommSystemFacade {
         //                          And new "always" setting ignores reachability status, like
         //                          "true" was in 0.7.3
         String ohost = newProps.getProperty(NTCPAddress.PROP_HOST);
-        String enabled = _context.getProperty(PROP_I2NP_NTCP_AUTO_IP, "true");
+        String enabled = _context.getProperty(PROP_I2NP_NTCP_AUTO_IP, "true").toLowerCase(Locale.US);
         String name = _context.getProperty(PROP_I2NP_NTCP_HOSTNAME);
         // hostname config trumps auto config
         if (name != null && name.length() > 0)
@@ -328,7 +328,7 @@ public class CommSystemFacadeImpl extends CommSystemFacade {
             status = udp.getReachabilityStatus();
         if (_log.shouldLog(Log.INFO))
             _log.info("old: " + ohost + " config: " + name + " auto: " + enabled + " status: " + status);
-        if (enabled.equalsIgnoreCase("always") ||
+        if (enabled.equals("always") ||
             (Boolean.valueOf(enabled).booleanValue() && status == STATUS_OK)) {
             String nhost = UDPProps.getProperty(UDPAddress.PROP_HOST);
             if (_log.shouldLog(Log.INFO))
@@ -339,7 +339,7 @@ public class CommSystemFacadeImpl extends CommSystemFacade {
                 newProps.setProperty(NTCPAddress.PROP_HOST, nhost);
                 changed = true;
             }
-        } else if (enabled.equalsIgnoreCase("false") &&
+        } else if (enabled.equals("false") &&
                    name != null && name.length() > 0 &&
                    !name.equals(ohost) &&
                    nport != null) {