diff --git a/router/java/src/net/i2p/router/MultiRouter.java b/router/java/src/net/i2p/router/MultiRouter.java
index abcd32e3d05e505d936d18d32946a42c7962ad61..8e663f8edfbbd376b2af13c89c2b07a1a041811a 100644
--- a/router/java/src/net/i2p/router/MultiRouter.java
+++ b/router/java/src/net/i2p/router/MultiRouter.java
@@ -193,8 +193,7 @@ public class MultiRouter {
         props.setProperty("i2np.udp.host", "127.0.0.1");
         props.setProperty("i2np.ntcp.port", BASE_PORT + id + "");
         props.setProperty("i2np.udp.port", BASE_PORT + id + "");
-        props.setProperty("i2np.ntcp.allowLocal", "true");
-        props.setProperty("i2np.udp.allowLocal", "true");
+        props.setProperty("i2np.allowLocal", "true");
         props.setProperty("i2np.udp.internalPort", BASE_PORT + id + "");
         props.setProperty("i2cp.port", Integer.toString((BASE_PORT + nbrRouters + id)));   
 
diff --git a/router/java/src/net/i2p/router/transport/TransportImpl.java b/router/java/src/net/i2p/router/transport/TransportImpl.java
index d3f3a8d5fab68463b39c6f20a74b358697632c0e..6e1df54ea7cdc0e1eaa51b8ef68757d78f23679f 100644
--- a/router/java/src/net/i2p/router/transport/TransportImpl.java
+++ b/router/java/src/net/i2p/router/transport/TransportImpl.java
@@ -943,6 +943,15 @@ public abstract class TransportImpl implements Transport {
                       yes ? new Exception() : null);
     }
 
+    /**
+     * Are we allowed to connect to local addresses?
+     *
+     * @since 0.9.28 moved from UDPTransport
+     */
+    protected boolean allowLocal() {
+        return _context.getBooleanProperty("i2np.allowLocal");
+    }
+
     /**
      * IP of the peer from the last connection (in or out, any transport).
      *
diff --git a/router/java/src/net/i2p/router/transport/TransportUtil.java b/router/java/src/net/i2p/router/transport/TransportUtil.java
index de8dc0f78d6e5475c978e849d27c369a82b34a63..16ede3b34447095476c3ae04417bf1dfd8749a4a 100644
--- a/router/java/src/net/i2p/router/transport/TransportUtil.java
+++ b/router/java/src/net/i2p/router/transport/TransportUtil.java
@@ -13,6 +13,7 @@ import java.net.UnknownHostException;
 import java.util.HashMap;
 import java.util.Map;
 
+import net.i2p.I2PAppContext;
 import net.i2p.data.router.RouterAddress;
 import net.i2p.router.RouterContext;
 
@@ -131,6 +132,8 @@ public abstract class TransportUtil {
      *  @since IPv6
      */
     public static boolean isPubliclyRoutable(byte addr[], boolean allowIPv4, boolean allowIPv6) {
+        if (I2PAppContext.getGlobalContext().getBooleanProperty("i2np.allowLocal"))
+            return true;
         if (addr.length == 4) {
             if (!allowIPv4)
                 return false;
diff --git a/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java b/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java
index d371a936f57fc610782ca4258ea7030f92385b02..13cba50f59162372fe3392df3883992e6f8ae447 100644
--- a/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java
+++ b/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java
@@ -436,7 +436,7 @@ public class NTCPTransport extends TransportImpl {
                 continue;
             }
             if (!isValid(ip)) {
-                if (! _context.getBooleanProperty("i2np.ntcp.allowLocal")) {
+                if (! allowLocal()) {
                     //_context.statManager().addRateData("ntcp.bidRejectedLocalAddress", 1);
                     //if (_log.shouldLog(Log.DEBUG))
                     //    _log.debug("no bid when trying to send to " + peer + " as they have a private ntcp address");
diff --git a/router/java/src/net/i2p/router/transport/udp/UDPTransport.java b/router/java/src/net/i2p/router/transport/udp/UDPTransport.java
index 760e132ea6ed4a28b8768299ee9c29b853bc2889..b2461c203173f30d944f921ee5d90169c55d9c6e 100644
--- a/router/java/src/net/i2p/router/transport/udp/UDPTransport.java
+++ b/router/java/src/net/i2p/router/transport/udp/UDPTransport.java
@@ -1093,16 +1093,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
             return true;
         return allowLocal();
     }
-    
-    /**
-     * Are we allowed to connect to local addresses?
-     *
-     * @since IPv6
-     */
-    boolean allowLocal() {
-        return _context.getBooleanProperty("i2np.udp.allowLocal");
-    }
-    
+
     /**
      *  Was true before 0.9.2
      *  Now false if we need introducers (as perhaps that's why we need them,
diff --git a/router/java/test/junit/net/i2p/router/SSUDemo.java b/router/java/test/junit/net/i2p/router/SSUDemo.java
index 5ae9ba101bc383d8d0656d1c7f1b49d2152f57c6..2c94f9ba8b30515845fb8756cb6b62bea76b4630 100644
--- a/router/java/test/junit/net/i2p/router/SSUDemo.java
+++ b/router/java/test/junit/net/i2p/router/SSUDemo.java
@@ -64,8 +64,7 @@ public class SSUDemo {
         envProps.setProperty("time.disabled", "false");
         // allow 127.0.0.1/10.0.0.1/etc (useful for testing).  If this is false,
         // peers who say they're on an invalid IP are banlisted
-        envProps.setProperty("i2np.udp.allowLocal", "true");
-        envProps.setProperty("i2np.ntcp.allowLocal", "true");
+        envProps.setProperty("i2np.allowLocal", "true");
         // IPv6
         envProps.setProperty("i2np.udp.ipv6", "enable");
         envProps.setProperty("i2np.ntcp.ipv6", "enable");