diff --git a/router/java/src/net/i2p/router/Router.java b/router/java/src/net/i2p/router/Router.java
index 22d651969ee704ec53046cbebf19b356d0cdf56e..e8c5473a36fe07527419d1814919f056c6299da1 100644
--- a/router/java/src/net/i2p/router/Router.java
+++ b/router/java/src/net/i2p/router/Router.java
@@ -372,7 +372,8 @@ public class Router {
     
     public void addCapabilities(RouterInfo ri) {
         int bwLim = Math.min(_context.bandwidthLimiter().getInboundKBytesPerSecond(),
-                             _context.bandwidthLimiter().getInboundKBytesPerSecond());
+                             _context.bandwidthLimiter().getOutboundKBytesPerSecond());
+        bwLim = (int)(((float)bwLim) * getSharePercentage());
         if (_log.shouldLog(Log.WARN))
             _log.warn("Adding capabilities w/ bw limit @ " + bwLim, new Exception("caps"));
         
diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java
index e5b39f5d947724b6b29e116f8e49aa4fbda6811d..0ca220fe36973d260d511c17b7df3530cb303618 100644
--- a/router/java/src/net/i2p/router/RouterVersion.java
+++ b/router/java/src/net/i2p/router/RouterVersion.java
@@ -15,9 +15,9 @@ import net.i2p.CoreVersion;
  *
  */
 public class RouterVersion {
-    public final static String ID = "$Revision: 1.442 $ $Date: 2006-07-29 13:03:17 $";
+    public final static String ID = "$Revision: 1.443 $ $Date: 2006-07-30 00:08:23 $";
     public final static String VERSION = "0.6.1.24";
-    public final static long BUILD = 1;
+    public final static long BUILD = 2;
     public static void main(String args[]) {
         System.out.println("I2P Router version: " + VERSION + "-" + BUILD);
         System.out.println("Router ID: " + RouterVersion.ID);
diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/FloodOnlySearchJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/FloodOnlySearchJob.java
index 8a515aa0e6a1d7533d505679c53c541aa854826f..2a91300c17b0f6867d6a9caf83a0523985765e24 100644
--- a/router/java/src/net/i2p/router/networkdb/kademlia/FloodOnlySearchJob.java
+++ b/router/java/src/net/i2p/router/networkdb/kademlia/FloodOnlySearchJob.java
@@ -44,7 +44,7 @@ class FloodOnlySearchJob extends FloodSearchJob {
         _isLease = isLease;
         _lookupsRemaining = 0;
         _dead = false;
-        _out = new ArrayList(2);
+        _out = Collections.synchronizedList(new ArrayList(2));
         _replySelector = new FloodOnlyLookupSelector(getContext(), this);
         _onReply = new FloodOnlyLookupMatchJob(getContext(), this);
         _onTimeout = new FloodOnlyLookupTimeoutJob(getContext(), this);
diff --git a/router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java b/router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java
index c87ca492f8e33ff738adf1ab4fa1446e74ae1097..ee98bc4541368c29d4cb0fb02aa4e8acdf023b7a 100644
--- a/router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java
+++ b/router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java
@@ -88,7 +88,7 @@ class BuildHandler {
                         handled.add(_inboundBuildMessages.remove(_inboundBuildMessages.size()-1));
                 } else {
                     // drop any expired messages
-                    long dropBefore = System.currentTimeMillis() - (BuildRequestor.REQUEST_TIMEOUT/2);
+                    long dropBefore = System.currentTimeMillis() - (BuildRequestor.REQUEST_TIMEOUT/4);
                     do {
                         BuildMessageState state = (BuildMessageState)_inboundBuildMessages.get(0);
                         if (state.recvTime <= dropBefore) {
@@ -640,7 +640,7 @@ class BuildHandler {
                         for (int i = 0; i < _inboundBuildMessages.size(); i++) {
                             BuildMessageState cur = (BuildMessageState)_inboundBuildMessages.get(i);
                             long age = System.currentTimeMillis() - cur.recvTime;
-                            if (age >= BuildRequestor.REQUEST_TIMEOUT/2) {
+                            if (age >= BuildRequestor.REQUEST_TIMEOUT/4) {
                                 _inboundBuildMessages.remove(i);
                                 i--;
                                 dropped++;
diff --git a/router/java/src/net/i2p/router/tunnel/pool/BuildRequestor.java b/router/java/src/net/i2p/router/tunnel/pool/BuildRequestor.java
index d1eb1e07724368050ebd14eec137aa4981da00c9..251ce3ce6b66d0c5538a336da38b7dc2b735a338 100644
--- a/router/java/src/net/i2p/router/tunnel/pool/BuildRequestor.java
+++ b/router/java/src/net/i2p/router/tunnel/pool/BuildRequestor.java
@@ -22,7 +22,7 @@ class BuildRequestor {
             ORDER.add(new Integer(i));
     }
     private static final int PRIORITY = 500;
-    static final int REQUEST_TIMEOUT = 10*1000;
+    static final int REQUEST_TIMEOUT = 20*1000;
     
     private static boolean usePairedTunnels(RouterContext ctx) {
         String val = ctx.getProperty("router.usePairedTunnels");