diff --git a/apps/i2psnark/java/src/org/klomp/snark/web/FetchAndAdd.java b/apps/i2psnark/java/src/org/klomp/snark/web/FetchAndAdd.java
index 270bba2ce5b780369ceb418a32fcd437cf464d4e..88905e68901499ea13fa522b6b2b11ec98b9c8d3 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/web/FetchAndAdd.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/web/FetchAndAdd.java
@@ -13,6 +13,7 @@ import net.i2p.I2PAppContext;
 import net.i2p.client.streaming.I2PSocketEepGet;
 import net.i2p.client.streaming.I2PSocketManager;
 import net.i2p.crypto.SHA1;
+import net.i2p.data.DataHelper;
 import net.i2p.util.EepGet;
 import net.i2p.util.I2PAppThread;
 import net.i2p.util.Log;
@@ -96,7 +97,7 @@ public class FetchAndAdd extends Snark implements EepGet.StatusListener, Runnabl
             add(file);
         } else {
             _mgr.addMessage(_("Torrent was not retrieved from {0}", urlify(_url)) +
-                            ((_failCause != null) ? (": " + _failCause) : ""));
+                            ((_failCause != null) ? (": " + DataHelper.stripHTML(_failCause)) : ""));
         }
         if (file != null)
             file.delete();
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigRestartBean.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigRestartBean.java
index 1b97a2f20f30fbeab7cf37df8c3553326ce4bdf9..2b38859c1b460d011a500e601b29851d17718245 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigRestartBean.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigRestartBean.java
@@ -71,8 +71,8 @@ public class ConfigRestartBean {
             buf.append(_("Shutdown in {0}", DataHelper.formatDuration2(timeRemaining), ctx));
             int tuns = ctx.tunnelManager().getParticipatingCount();
             if (tuns > 0) {
-                buf.append("<br>").append(ngettext("Please wait for routing commitment on {0} tunnel to expire",
-                                                "Please wait for routing commitments on {0} tunnels to expire",
+                buf.append("<br>").append(ngettext("Please wait for routing commitment to expire for {0} tunnel",
+                                                "Please wait for routing commitments to expire for {0} tunnels",
                                                 tuns, ctx));
             }
             buf.append("</h4><hr>");
@@ -82,8 +82,8 @@ public class ConfigRestartBean {
             buf.append(_("Restart in {0}", DataHelper.formatDuration2(timeRemaining), ctx));
             int tuns = ctx.tunnelManager().getParticipatingCount();
             if (tuns > 0) {
-                buf.append("<br>").append(ngettext("Please wait for routing commitment on {0} tunnel to expire",
-                                                "Please wait for routing commitments on {0} tunnels to expire",
+                buf.append("<br>").append(ngettext("Please wait for routing commitment to expire for {0} tunnel",
+                                                "Please wait for routing commitments to expire for {0} tunnels",
                                                 tuns, ctx));
             }
             buf.append("</h4><hr>");
diff --git a/apps/streaming/java/src/net/i2p/client/streaming/impl/I2PSocketManagerFull.java b/apps/streaming/java/src/net/i2p/client/streaming/impl/I2PSocketManagerFull.java
index 64b93099341c11e3f303bda92d2736e7cd63ff40..9ba9c249edd4b74de1ce404446e77da9e80996f9 100644
--- a/apps/streaming/java/src/net/i2p/client/streaming/impl/I2PSocketManagerFull.java
+++ b/apps/streaming/java/src/net/i2p/client/streaming/impl/I2PSocketManagerFull.java
@@ -305,8 +305,9 @@ public class I2PSocketManagerFull implements I2PSocketManager {
             I2PSocket sock = connect(peer, options);
             return new StandardSocket(sock);
         } catch (I2PException i2pe) {
-            // fixme in 1.6 change to cause
-            throw new IOException(i2pe.toString());
+            IOException ioe = new IOException("connect fail");
+            ioe.initCause(i2pe);
+            throw ioe;
         }
     }
 
diff --git a/apps/streaming/java/src/net/i2p/client/streaming/impl/StandardServerSocket.java b/apps/streaming/java/src/net/i2p/client/streaming/impl/StandardServerSocket.java
index a2c1a911899ca42b0f26d773c4edd85f511f94a4..8ef206862cb550276c9060292d54e4bc038af0b1 100644
--- a/apps/streaming/java/src/net/i2p/client/streaming/impl/StandardServerSocket.java
+++ b/apps/streaming/java/src/net/i2p/client/streaming/impl/StandardServerSocket.java
@@ -44,8 +44,9 @@ class StandardServerSocket extends ServerSocket {
                 throw new IOException("No socket");
             return new StandardSocket(sock);
         } catch (I2PException i2pe) {
-            // fixme in 1.6 change to cause
-            throw new IOException(i2pe.toString());
+            IOException ioe = new IOException("accept fail");
+            ioe.initCause(i2pe);
+            throw ioe;
         }
     }
 
diff --git a/history.txt b/history.txt
index 568ac36ea395ff228ef11f9dfea21f29ce527fe8..7248cb1768a2107be4da446831a92cd246ee0954 100644
--- a/history.txt
+++ b/history.txt
@@ -1,3 +1,8 @@
+2014-01-04 zzz
+ * Peermanager: Disable small same-country bonus
+ * Tunnels: Change client default to 3 hops in router;
+   change expl. default to 2+0 IB and 2 + 0-1 OB
+
 2014-01-04 dg
  * Streaming: Move streaming to new package (ticket #1135)
 
diff --git a/router/java/src/net/i2p/router/TunnelPoolSettings.java b/router/java/src/net/i2p/router/TunnelPoolSettings.java
index 48a2f1d00687487c761ed16235bcb843123d6ce7..eb59ee30e2b5c8ad538ba8a9aa86c9eda0b1f161 100644
--- a/router/java/src/net/i2p/router/TunnelPoolSettings.java
+++ b/router/java/src/net/i2p/router/TunnelPoolSettings.java
@@ -5,6 +5,7 @@ import java.util.Map;
 import java.util.Properties;
 
 import net.i2p.data.Hash;
+import net.i2p.util.NativeBigInteger;
 import net.i2p.util.RandomSource;
 import net.i2p.util.SystemVersion;
 
@@ -56,8 +57,22 @@ public class TunnelPoolSettings {
     // public static final int     DEFAULT_REBUILD_PERIOD = 60*1000;
     public static final int     DEFAULT_DURATION = 10*60*1000;
     //public static final int     DEFAULT_LENGTH = SystemVersion.isAndroid() ? 2 : 3;
-    public static final int     DEFAULT_LENGTH = 2;
-    public static final int     DEFAULT_LENGTH_VARIANCE = 0;
+
+    private static final boolean isSlow = SystemVersion.isGNU() ||
+                                          SystemVersion.isARM() ||
+                                          SystemVersion.isApache() ||
+                                          !NativeBigInteger.isNative();
+
+    /** client only */
+    private static final int    DEFAULT_IB_LENGTH = 3;
+    private static final int    DEFAULT_OB_LENGTH = 3;
+    private static final int    DEFAULT_LENGTH_VARIANCE = 0;
+    /** expl only */
+    private static final int    DEFAULT_IB_EXPL_LENGTH = 2;
+    private static final int    DEFAULT_OB_EXPL_LENGTH = 2;
+    private static final int    DEFAULT_IB_EXPL_LENGTH_VARIANCE = 0;
+    private static final int    DEFAULT_OB_EXPL_LENGTH_VARIANCE = isSlow ? 0 : 1;
+
     public static final boolean DEFAULT_ALLOW_ZERO_HOP = true;
     public static final int     DEFAULT_IP_RESTRICTION = 2;    // class B (/16)
     private static final int MIN_PRIORITY = -25;
@@ -72,8 +87,13 @@ public class TunnelPoolSettings {
         _backupQuantity = DEFAULT_BACKUP_QUANTITY;
         // _rebuildPeriod = DEFAULT_REBUILD_PERIOD;
         //_duration = DEFAULT_DURATION;
-        _length = DEFAULT_LENGTH;
-        _lengthVariance = DEFAULT_LENGTH_VARIANCE;
+        if (isInbound) {
+            _length = isExploratory ? DEFAULT_IB_EXPL_LENGTH : DEFAULT_IB_LENGTH;
+            _lengthVariance = isExploratory ? DEFAULT_IB_EXPL_LENGTH_VARIANCE : DEFAULT_LENGTH_VARIANCE;
+        } else {
+            _length = isExploratory ? DEFAULT_OB_EXPL_LENGTH : DEFAULT_OB_LENGTH;
+            _lengthVariance = isExploratory ? DEFAULT_OB_EXPL_LENGTH_VARIANCE : DEFAULT_LENGTH_VARIANCE;
+        }
         _lengthOverride = -1;
         if (isExploratory)
             _allowZeroHop = true;
@@ -212,9 +232,15 @@ public class TunnelPoolSettings {
                 //else if (name.equalsIgnoreCase(prefix + PROP_DURATION))
                 //    _duration = getInt(value, DEFAULT_DURATION);
                 else if (name.equalsIgnoreCase(prefix + PROP_LENGTH))
-                    _length = getInt(value, DEFAULT_LENGTH);
+                    _length = getInt(value, _isInbound ?
+                                            (_isExploratory ? DEFAULT_IB_EXPL_LENGTH : DEFAULT_IB_LENGTH) :
+                                            (_isExploratory ? DEFAULT_OB_EXPL_LENGTH : DEFAULT_OB_LENGTH));
                 else if (name.equalsIgnoreCase(prefix + PROP_LENGTH_VARIANCE))
-                    _lengthVariance = getInt(value, DEFAULT_LENGTH_VARIANCE);
+                    _lengthVariance = getInt(value, _isExploratory ?
+                                                        (_isInbound ?
+                                                             DEFAULT_IB_EXPL_LENGTH_VARIANCE :
+                                                             DEFAULT_OB_EXPL_LENGTH_VARIANCE) :
+                                                        DEFAULT_LENGTH_VARIANCE);
                 else if (name.equalsIgnoreCase(prefix + PROP_QUANTITY))
                     _quantity = getInt(value, DEFAULT_QUANTITY);
                 // else if (name.equalsIgnoreCase(prefix + PROP_REBUILD_PERIOD))
diff --git a/router/java/src/net/i2p/router/peermanager/CapacityCalculator.java b/router/java/src/net/i2p/router/peermanager/CapacityCalculator.java
index 2ff865082ee1669a389178a6f7907952ddcc89c2..0979f5d4e9ec727bdb9bd1be014dfb0281ef6c40 100644
--- a/router/java/src/net/i2p/router/peermanager/CapacityCalculator.java
+++ b/router/java/src/net/i2p/router/peermanager/CapacityCalculator.java
@@ -67,6 +67,7 @@ class CapacityCalculator {
         // boost connected peers
         if (profile.isEstablished())
             capacity += BONUS_ESTABLISHED;
+     /****
         // boost same country
         if (profile.isSameCountry()) {
             double bonus = BONUS_SAME_COUNTRY;
@@ -78,6 +79,7 @@ class CapacityCalculator {
             }
             capacity += bonus;
         }
+      ****/
         // penalize unreachable peers
         if (profile.wasUnreachable())
             capacity -= PENALTY_UNREACHABLE;