diff --git a/router/java/src/net/i2p/router/tunnelmanager/PoolingTunnelSelector.java b/router/java/src/net/i2p/router/tunnelmanager/PoolingTunnelSelector.java
index 4a429f140ad5034537e3ac617c296bf36cbf2fb9..170d25c6597089c5b20ccec822c78100d7dacd0f 100644
--- a/router/java/src/net/i2p/router/tunnelmanager/PoolingTunnelSelector.java
+++ b/router/java/src/net/i2p/router/tunnelmanager/PoolingTunnelSelector.java
@@ -30,6 +30,9 @@ class PoolingTunnelSelector {
     }
     
     public List selectOutboundTunnelIds(TunnelPool pool, TunnelSelectionCriteria criteria) {
+        return selectOutboundTunnelIds(pool, criteria, true);
+    }
+    public List selectOutboundTunnelIds(TunnelPool pool, TunnelSelectionCriteria criteria, boolean recurse) {
         List tunnelIds = new ArrayList(criteria.getMinimumTunnelsRequired());
         
         Set outIds = pool.getOutboundTunnels();
@@ -61,8 +64,8 @@ class PoolingTunnelSelector {
             pool.buildFakeTunnels();
             rebuilt = true;
         }
-        if (rebuilt)
-            return selectOutboundTunnelIds(pool, criteria);
+        if (rebuilt && recurse)
+            return selectOutboundTunnelIds(pool, criteria, false);
         
         List ordered = randomize(pool, tunnelIds);
         List rv = new ArrayList(criteria.getMinimumTunnelsRequired());
@@ -76,6 +79,9 @@ class PoolingTunnelSelector {
     }
     
     public List selectInboundTunnelIds(TunnelPool pool, TunnelSelectionCriteria criteria) {
+        return selectInboundTunnelIds(pool, criteria, true);
+    }
+    public List selectInboundTunnelIds(TunnelPool pool, TunnelSelectionCriteria criteria, boolean recurse) {
         List tunnels = new ArrayList(criteria.getMinimumTunnelsRequired());
         
         for (Iterator iter = pool.getFreeTunnels().iterator(); iter.hasNext(); ) {
@@ -103,8 +109,8 @@ class PoolingTunnelSelector {
             pool.buildFakeTunnels();
             rebuilt = true;
         }
-        if (rebuilt)
-            return selectInboundTunnelIds(pool, criteria);
+        if (rebuilt && recurse)
+            return selectInboundTunnelIds(pool, criteria, false);
         
         List ordered = randomize(pool, tunnels);
         List rv = new ArrayList(criteria.getMinimumTunnelsRequired());