diff --git a/core/java/src/net/i2p/client/I2PSessionImpl.java b/core/java/src/net/i2p/client/I2PSessionImpl.java
index 285aaa780bfd98c2dd369e13b2ee90ff999ece16..65636a30bb48ab5aba26f1ff51279ef8f871e582 100644
--- a/core/java/src/net/i2p/client/I2PSessionImpl.java
+++ b/core/java/src/net/i2p/client/I2PSessionImpl.java
@@ -164,8 +164,8 @@ abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2CPMessa
     }
 
     /**
-     * Parse the config for anything we know about
-     *
+     * Parse the config for anything we know about.
+     * Also fill in the authorization properties if missing.
      */
     protected void loadConfig(Properties options) {
         _options = new Properties();
@@ -180,6 +180,18 @@ abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2CPMessa
                           + LISTEN_PORT, nfe);
             _portNum = LISTEN_PORT;
         }
+
+        // auto-add auth if required, not set in the options, and we are in the same JVM
+        if (_context.isRouterContext() &&
+            Boolean.valueOf(_context.getProperty("i2cp.auth")).booleanValue() &&
+            ((!options.containsKey("i2cp.username")) || (!options.containsKey("i2cp.password")))) {
+            String configUser = _context.getProperty("i2cp.username");
+            String configPW = _context.getProperty("i2cp.password");
+            if (configUser != null && configPW != null) {
+                _options.setProperty("i2cp.username", configUser);
+                _options.setProperty("i2cp.password", configPW);
+            }
+        }
     }
 
     private Properties filter(Properties options) {