diff --git a/core/java/src/net/i2p/client/impl/I2CPMessageProducer.java b/core/java/src/net/i2p/client/impl/I2CPMessageProducer.java
index f49f0808601ee3ea4c07d1473af09e1103e0bcbd..0eaa0699181f771dab67ef87c1c254b46dcc5aa5 100644
--- a/core/java/src/net/i2p/client/impl/I2CPMessageProducer.java
+++ b/core/java/src/net/i2p/client/impl/I2CPMessageProducer.java
@@ -120,8 +120,14 @@ class I2CPMessageProducer {
         updateBandwidth(session);
         CreateSessionMessage msg = new CreateSessionMessage();
         SessionConfig cfg = new SessionConfig(session.getMyDestination());
-        cfg.setOptions(getRouterOptions(session));
-        if (session.isOffline()) {
+        Properties p = getRouterOptions(session);
+        boolean isOffline = session.isOffline();
+        if (isOffline) {
+            if (!p.containsKey(RequestLeaseSetMessageHandler.PROP_LS_TYPE))
+                p.setProperty(RequestLeaseSetMessageHandler.PROP_LS_TYPE, "3");
+        }
+        cfg.setOptions(p);
+        if (isOffline) {
             cfg.setOfflineSignature(session.getOfflineExpiration(),
                                     session.getTransientSigningPublicKey(),
                                     session.getOfflineSignature());
diff --git a/core/java/src/net/i2p/client/impl/RequestLeaseSetMessageHandler.java b/core/java/src/net/i2p/client/impl/RequestLeaseSetMessageHandler.java
index 259e6d08d22392ca9240e27505fea7075111f759..bebc2cf2773bbb00ccf07e24b682cd32a821816d 100644
--- a/core/java/src/net/i2p/client/impl/RequestLeaseSetMessageHandler.java
+++ b/core/java/src/net/i2p/client/impl/RequestLeaseSetMessageHandler.java
@@ -63,7 +63,7 @@ class RequestLeaseSetMessageHandler extends HandlerImpl {
     private static final String PROP_LS_PK = "i2cp.leaseSetPrivateKey";
     private static final String PROP_LS_SPK = "i2cp.leaseSetSigningPrivateKey";
     // LS 2
-    private static final String PROP_LS_TYPE = "i2cp.leaseSetType";
+    public static final String PROP_LS_TYPE = "i2cp.leaseSetType";
     private static final String PROP_LS_ENCTYPE = "i2cp.leaseSetEncType";
 
     public RequestLeaseSetMessageHandler(I2PAppContext context) {
diff --git a/router/java/src/net/i2p/router/client/ClientMessageEventListener.java b/router/java/src/net/i2p/router/client/ClientMessageEventListener.java
index c8731c6c3c3f5f1584e1251849acef7349eb8007..57c1e090b58f38eed8d8a96eba7794240b245ba3 100644
--- a/router/java/src/net/i2p/router/client/ClientMessageEventListener.java
+++ b/router/java/src/net/i2p/router/client/ClientMessageEventListener.java
@@ -289,13 +289,17 @@ class ClientMessageEventListener implements I2CPMessageReader.I2CPMessageEventLi
                 }
             }
         }
-        if ("7".equals(props.getProperty("i2cp.leaseSetType"))) {
+        String lsType = props.getProperty("i2cp.leaseSetType");
+        if ("7".equals(lsType)) {
             // Prevent tunnel builds for Meta LS
             // more TODO
             props.setProperty("inbound.length", "0");
             props.setProperty("outbound.length", "0");
             props.setProperty("inbound.lengthVariance", "0");
             props.setProperty("outbound.lengthVariance", "0");
+        } else if (lsType == null && props.getProperty(SessionConfig.PROP_OFFLINE_SIGNATURE) != null) {
+            // force type 3
+            props.setProperty("i2cp.leaseSetType", "3");
         }
         cfg.setOptions(props);
         // this sets the session id