diff --git a/router/java/src/net/i2p/router/TunnelPoolSettings.java b/router/java/src/net/i2p/router/TunnelPoolSettings.java
index 841a22e039adbce1ff71349c3e07564b999eef47..d5669e4a61b03f77c5e2ae77e0424605f9ef488c 100644
--- a/router/java/src/net/i2p/router/TunnelPoolSettings.java
+++ b/router/java/src/net/i2p/router/TunnelPoolSettings.java
@@ -53,7 +53,7 @@ public class TunnelPoolSettings {
     public static final int     DEFAULT_BACKUP_QUANTITY = 0;
     // public static final int     DEFAULT_REBUILD_PERIOD = 60*1000;
     public static final int     DEFAULT_DURATION = 10*60*1000;
-    public static final int     DEFAULT_LENGTH = 2;
+    public static final int     DEFAULT_LENGTH = 3;
     public static final int     DEFAULT_LENGTH_VARIANCE = 0;
     public static final boolean DEFAULT_ALLOW_ZERO_HOP = true;
     public static final int     DEFAULT_IP_RESTRICTION = 2;    // class B (/16)
diff --git a/router/java/src/net/i2p/router/tunnel/pool/TunnelPool.java b/router/java/src/net/i2p/router/tunnel/pool/TunnelPool.java
index 87c177d88ec1436f41efbed27a21647459253725..aa96135fa8856f887514cafb13ad5bcfafe09d22 100644
--- a/router/java/src/net/i2p/router/tunnel/pool/TunnelPool.java
+++ b/router/java/src/net/i2p/router/tunnel/pool/TunnelPool.java
@@ -50,7 +50,8 @@ public class TunnelPool {
     /** if less than one success in this many, reduce quantity (exploratory only) */
     private static final int BUILD_TRIES_QUANTITY_OVERRIDE = 12;
     /** if less than one success in this many, reduce length (exploratory only) */
-    private static final int BUILD_TRIES_LENGTH_OVERRIDE = 18;
+    private static final int BUILD_TRIES_LENGTH_OVERRIDE_1 = 10;
+    private static final int BUILD_TRIES_LENGTH_OVERRIDE_2 = 18;
     
     TunnelPool(RouterContext ctx, TunnelPoolManager mgr, TunnelPoolSettings settings, TunnelPeerSelector sel) {
         _context = ctx;
@@ -374,10 +375,15 @@ public class TunnelPool {
                     long rc = rr.computeAverages(ra, false).getTotalEventCount();
                     long sc = sr.computeAverages(ra, false).getTotalEventCount();
                     long tot = ec + rc + sc;
-                    if (tot >= BUILD_TRIES_LENGTH_OVERRIDE) {
-                        if (1000 * sc / tot <=  1000 / BUILD_TRIES_LENGTH_OVERRIDE)
-                            _settings.setLengthOverride(len - 1);
+                    if (tot >= BUILD_TRIES_LENGTH_OVERRIDE_1) {
+                        long succ = 1000 * sc / tot;
+                        if (succ <=  1000 / BUILD_TRIES_LENGTH_OVERRIDE_1) {
+                            if (len > 2 && succ <= 1000 / BUILD_TRIES_LENGTH_OVERRIDE_2)
+                                _settings.setLengthOverride(len - 2);
+                            else
+                                _settings.setLengthOverride(len - 1);
                             return;
+                        }
                     }
                 }
             }