diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/WebEditPageFormGenerator.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/WebEditPageFormGenerator.java
index 1b2c3ac6eaec9b40111a3629f8a8ab2b4f901ea4..5f13819f961562c6fc4036786f9d08a1e4e12107 100644
--- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/WebEditPageFormGenerator.java
+++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/WebEditPageFormGenerator.java
@@ -60,6 +60,9 @@ class WebEditPageFormGenerator {
             buf.append("value=\"squid.i2p\" ");
         buf.append("/><br />\n");
         
+        buf.append("<hr />Note: the following options are shared across all client tunnels and");
+        buf.append(" HTTP proxies<br />\n");
+        
         addOptions(buf, controller);
         buf.append("<input type=\"submit\" name=\"action\" value=\"Save\">\n");
         buf.append("<input type=\"submit\" name=\"action\" value=\"Remove\">\n");
@@ -80,6 +83,9 @@ class WebEditPageFormGenerator {
             buf.append("value=\"").append(controller.getTargetDestination()).append("\" ");
         buf.append(" /> (either the hosts.txt name or the full base64 destination)<br />\n");
         
+        buf.append("<hr />Note: the following options are shared across all client tunnels and");
+        buf.append(" HTTP proxies<br />\n");
+        
         addOptions(buf, controller);
         buf.append("<input type=\"submit\" name=\"action\" value=\"Save\"><br />\n");
         buf.append("<input type=\"submit\" name=\"action\" value=\"Remove\">\n");
@@ -145,6 +151,13 @@ class WebEditPageFormGenerator {
         if ( (controller != null) && (controller.getDescription() != null) )
             buf.append("value=\"").append(controller.getDescription()).append("\" ");
         buf.append("/><br />\n");
+        
+        buf.append("<b>Start automatically?</b> \n");
+        buf.append("<input type=\"checkbox\" name=\"startOnLoad\" value=\"true\" ");
+        if ( (controller != null) && (controller.getStartOnLoad()) )
+            buf.append(" checked=\"true\" />\n<br />\n");
+        else
+            buf.append(" />\n<br />\n");
     }
 
     /**
@@ -194,6 +207,7 @@ class WebEditPageFormGenerator {
     private static void addOptions(StringBuffer buf, TunnelController controller) {
         int tunnelDepth = 2;
         int numTunnels = 2;
+        int connectDelay = 0;
         Properties opts = getOptions(controller);
         if (opts != null) {
             String depth = opts.getProperty("tunnels.depthInbound");
@@ -212,6 +226,14 @@ class WebEditPageFormGenerator {
                     numTunnels = 2;
                 }
             }
+            String delay = opts.getProperty("i2p.streaming.connectDelay");
+            if (delay != null) {
+                try {
+                    connectDelay = Integer.parseInt(delay);
+                } catch (NumberFormatException nfe) {
+                    connectDelay = 0;
+                }
+            }
         }
         
         buf.append("<b>Tunnel depth:</b> ");
@@ -251,6 +273,13 @@ class WebEditPageFormGenerator {
         }
         buf.append("</select><br />\n");
         
+        buf.append("<b>Delay connection briefly? </b> ");
+        buf.append("<input type=\"checkbox\" name=\"connectDelay\" value=\"");
+        buf.append((connectDelay > 0 ? connectDelay : 1000)).append("\" ");
+        if (connectDelay > 0)
+            buf.append("checked=\"true\" ");
+        buf.append("/> (useful for brief request/response connections)<br />\n");
+        
         buf.append("<b>I2CP host:</b> ");
         buf.append("<input type=\"text\" name=\"clientHost\" size=\"20\" value=\"");
         if ( (controller != null) && (controller.getI2CPHost() != null) )
@@ -275,18 +304,13 @@ class WebEditPageFormGenerator {
                 String val = opts.getProperty(key);
                 if ("tunnels.depthInbound".equals(key)) continue;
                 if ("tunnels.numInbound".equals(key)) continue;
+                if ("i2p.streaming.connectDelay".equals(key)) continue;
                 if (i != 0) buf.append(' ');
                 buf.append(key).append('=').append(val);
                 i++;
             }
         }
         buf.append("\" /><br />\n");
-        buf.append("<b>Start automatically?</b> \n");
-        buf.append("<input type=\"checkbox\" name=\"startOnLoad\" value=\"true\" ");
-        if ( (controller != null) && (controller.getStartOnLoad()) )
-            buf.append(" checked=\"true\" />\n<br />\n");
-        else
-            buf.append(" />\n<br />\n");
     }
 
     /**
diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/WebEditPageHelper.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/WebEditPageHelper.java
index 8fbe2f9d3800992814d0cd211a62354dc82590a7..a8e002497af2f49111976a81810a4f3c9deae6ff 100644
--- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/WebEditPageHelper.java
+++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/WebEditPageHelper.java
@@ -29,6 +29,7 @@ public class WebEditPageHelper {
     private String _i2cpPort;
     private String _tunnelDepth;
     private String _tunnelCount;
+    private boolean _connectDelay;
     private String _customOptions;
     private String _proxyList;
     private String _port;
@@ -164,6 +165,9 @@ public class WebEditPageHelper {
     public void setStartOnLoad(String moo) {
         _startOnLoad = true;
     }
+    public void setConnectDelay(String moo) {
+        _connectDelay = true;
+    }
     
     /**
      * Process the form and display any resulting messages
@@ -252,6 +256,27 @@ public class WebEditPageHelper {
             cur.setConfig(config, "");
         }
         
+        if ("httpclient".equals(cur.getType()) || "client".equals(cur.getType())) {
+            // all clients use the same I2CP session, and as such, use the same
+            // I2CP options
+            List controllers = TunnelControllerGroup.getInstance().getControllers();
+            for (int i = 0; i < controllers.size(); i++) {
+                TunnelController c = (TunnelController)controllers.get(i);
+                if (c == cur) continue;
+                if ("httpclient".equals(c.getType()) || "client".equals(c.getType())) {
+                    Properties cOpt = c.getConfig("");
+                    if (_tunnelCount != null)
+                        cOpt.setProperty("option.tunnels.numInbound", _tunnelCount);
+                    if (_tunnelDepth != null)
+                        cOpt.setProperty("option.tunnels.depthInbound", _tunnelDepth);
+                    if (_connectDelay)
+                        cOpt.setProperty("option.i2p.streaming.connectDelay", "1000");
+                    else
+                        cOpt.setProperty("option.i2p.streaming.connectDelay", "0");
+                    c.setConfig(cOpt, "");
+                }
+            }
+        }
         
         return getMessages(doSave());
     }
@@ -324,6 +349,7 @@ public class WebEditPageHelper {
                 String val = pair.substring(eq+1);
                 if ("tunnels.numInbound".equals(key)) continue;
                 if ("tunnels.depthInbound".equals(key)) continue;
+                if ("i2p.streaming.connectDelay".equals(key)) continue;
                 config.setProperty("option." + key, val);
             }
         }
@@ -334,6 +360,10 @@ public class WebEditPageHelper {
             config.setProperty("option.tunnels.numInbound", _tunnelCount);
         if (_tunnelDepth != null)
             config.setProperty("option.tunnels.depthInbound", _tunnelDepth);
+        if (_connectDelay)
+            config.setProperty("option.i2p.streaming.connectDelay", "1000");
+        else
+            config.setProperty("option.i2p.streaming.connectDelay", "0");
     }
 
     /**
diff --git a/history.txt b/history.txt
index b4f7cae870498310ce502730fdd6a506e2e95b8c..75b533b82abd1ac749d7952bd2beeb8c824af5b2 100644
--- a/history.txt
+++ b/history.txt
@@ -1,4 +1,10 @@
-$Id: history.txt,v 1.78 2004/11/21 14:42:57 jrandom Exp $
+$Id: history.txt,v 1.79 2004/11/21 17:31:33 jrandom Exp $
+
+2004-11-21  jrandom
+    * Update the I2PTunnel web interface to include an option for the new 
+      streaming lib (which is ignored until the 0.4.2 release).
+    * Revised the I2PTunnel web interface to keep the I2CP options of client 
+      and httpclient tunnels in sync, as they all share the same I2CP session.
 
 2004-11-21  jrandom
     * Only allow small clock skews after the first 10 minutes of operation
diff --git a/installer/resources/i2ptunnel.config b/installer/resources/i2ptunnel.config
index 74bc1a67f703cb7ecfa9eb7ecec5653df55fc6ac..3125bebf68cd822f1849b5f0a8e5ab97189dbee2 100644
--- a/installer/resources/i2ptunnel.config
+++ b/installer/resources/i2ptunnel.config
@@ -9,6 +9,7 @@ tunnel.0.i2cpHost=localhost
 tunnel.0.i2cpPort=7654
 tunnel.0.option.tunnels.depthInbound=2
 tunnel.0.option.tunnels.numInbound=2
+tunnel.0.option.i2p.streaming.connectDelay=1000
 tunnel.0.startOnLoad=true
 
 # irc
@@ -17,11 +18,12 @@ tunnel.1.description=IRC proxy to access the anonymous irc net
 tunnel.1.type=client
 tunnel.1.interface=127.0.0.1
 tunnel.1.listenPort=6668
-tunnel.1.targetDestination=irc.duck.i2p
+tunnel.1.targetDestination=irc.duck.i2p,irc.baffled.i2p
 tunnel.1.i2cpHost=localhost
 tunnel.1.i2cpPort=7654
 tunnel.1.option.tunnels.depthInbound=2
 tunnel.1.option.tunnels.numInbound=2
+tunnel.1.option.i2p.streaming.connectDelay=1000
 tunnel.1.startOnLoad=true
 
 # I2P's cvs server
@@ -59,6 +61,7 @@ tunnel.4.listenPort=7659
 tunnel.4.name=smtp.postman.i2p
 tunnel.4.option.tunnels.depthInbound=2
 tunnel.4.option.tunnels.numInbound=2
+tunnel.4.option.i2p.streaming.connectDelay=1000
 tunnel.4.startOnLoad=false
 tunnel.4.targetDestination=smtp.postman.i2p
 tunnel.4.type=client
@@ -72,19 +75,7 @@ tunnel.5.interface=127.0.0.1
 tunnel.5.listenPort=7660
 tunnel.5.option.tunnels.depthInbound=2
 tunnel.5.option.tunnels.numInbound=2
+tunnel.5.option.i2p.streaming.connectDelay=1000
 tunnel.5.startOnLoad=false
 tunnel.5.targetDestination=pop.postman.i2p
-tunnel.5.type=client
-
-# another irc server, linked with irc.duck.i2p and IIP
-tunnel.6.description=irc.baffled.i2p
-tunnel.6.i2cpHost=localhost
-tunnel.6.i2cpPort=7654
-tunnel.6.interface=localhost
-tunnel.6.listenPort=7661
-tunnel.6.name=irc.baffled.i2p
-tunnel.6.option.tunnels.depthInbound=2
-tunnel.6.option.tunnels.numInbound=2
-tunnel.6.startOnLoad=false
-tunnel.6.targetDestination=irc.baffled.i2p
-tunnel.6.type=client
+tunnel.5.type=client
\ No newline at end of file
diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java
index f53712c3c695a883d6a5c50c8dcbf4e28dd5c1a8..31df88dad14e7965c60841c985ee85aa153cc4b8 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.83 $ $Date: 2004/11/21 14:42:58 $";
+    public final static String ID = "$Revision: 1.84 $ $Date: 2004/11/21 17:31:33 $";
     public final static String VERSION = "0.4.1.4";
-    public final static long BUILD = 12;
+    public final static long BUILD = 13;
     public static void main(String args[]) {
         System.out.println("I2P Router version: " + VERSION);
         System.out.println("Router ID: " + RouterVersion.ID);