diff --git a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java
index 55940527730266c0e3479055c30daf078ea9d80c..20407a04bad292e1daf2f1be26bf602c9498f391 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java
@@ -118,10 +118,14 @@ public class SnarkManager implements Snark.CompleteListener {
         if (!_config.containsKey(PROP_UPLOADERS_TOTAL))
             _config.setProperty(PROP_UPLOADERS_TOTAL, "" + Snark.MAX_TOTAL_UPLOADERS);
         if (!_config.containsKey(PROP_UPBW_MAX)) {
-            if (_context instanceof RouterContext)
-                _config.setProperty(PROP_UPBW_MAX, "" + (((RouterContext)_context).bandwidthLimiter().getOutboundKBytesPerSecond() / 2));
-            else
+            try {
+                if (_context instanceof RouterContext)
+                    _config.setProperty(PROP_UPBW_MAX, "" + (((RouterContext)_context).bandwidthLimiter().getOutboundKBytesPerSecond() / 2));
+                else
+                    _config.setProperty(PROP_UPBW_MAX, "" + DEFAULT_MAX_UP_BW);
+            } catch (NoClassDefFoundError ncdfe) {
                 _config.setProperty(PROP_UPBW_MAX, "" + DEFAULT_MAX_UP_BW);
+            }
         }
         if (!_config.containsKey(PROP_DIR))
             _config.setProperty(PROP_DIR, "i2psnark");
diff --git a/apps/i2psnark/java/src/org/klomp/snark/TrackerInfo.java b/apps/i2psnark/java/src/org/klomp/snark/TrackerInfo.java
index 6d464f87b016a8a934783a8bc52b43854421ab66..765598fabafb2082e82b17efdc3ef0c209295c85 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/TrackerInfo.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/TrackerInfo.java
@@ -95,7 +95,14 @@ public class TrackerInfo
     Iterator it = l.iterator();
     while (it.hasNext())
       {
-        PeerID peerID = new PeerID(((BEValue)it.next()).getMap());
+        PeerID peerID;
+        try {
+            peerID = new PeerID(((BEValue)it.next()).getMap());
+        } catch (InvalidBEncodingException ibe) {
+            // don't let one bad entry spoil the whole list
+            Snark.debug("Discarding peer from list: " + ibe, Snark.ERROR);
+            continue;
+        }
         peers.add(new Peer(peerID, my_id, metainfo));
       }
 
diff --git a/apps/routerconsole/jsp/configtunnels.jsp b/apps/routerconsole/jsp/configtunnels.jsp
index 0b6fcb714be2a396716fb9acebd5cff81fe6089d..e4559b86c200bbbf68a4222e9bbf14bdd7ba468e 100644
--- a/apps/routerconsole/jsp/configtunnels.jsp
+++ b/apps/routerconsole/jsp/configtunnels.jsp
@@ -25,6 +25,15 @@
  <font color="red"><jsp:getProperty name="formhandler" property="errors" /></font>
  <i><jsp:getProperty name="formhandler" property="notices" /></i>
  
+ <p><i>
+ NOTE: The default settings work for most people.
+ There is a fundamental tradeoff between anonymity and performance.
+ Tunnels longer than 3 hops (for example 2 hops + 0-2 hops, 3 hops + 0-1 hops, 3 hops + 0-2 hops),
+ or a high quantity + backup quantity, may severely reduce performance or reliability.
+ High CPU and/or high outbound bandwidth usage may result.
+ Change these settings with care, and adjust them if you have problems.
+ </i></p>
+
  <form action="configtunnels.jsp" method="POST">
  <% String prev = System.getProperty("net.i2p.router.web.ConfigTunnelsHandler.nonce");
     if (prev != null) System.setProperty("net.i2p.router.web.ConfigTunnelsHandler.noncePrev", prev);
diff --git a/build.xml b/build.xml
index a6ac3f787939bb0dc6efbcf04cf090934e6b51bc..866671d5e567f5580dc1071dbe301d88ee44cc79 100644
--- a/build.xml
+++ b/build.xml
@@ -9,6 +9,7 @@
         <echo message="  tarball:   tar the full install into i2p.tar.bz2 (extracts to build a new clean install)" />
         <echo message="  updater:   tar the built i2p specific files into an i2pupdate.zip (extracts safely over existing installs)" />
         <echo message="  updaterWithJetty:   tar the built i2p specific files and jetty into an i2pupdate.zip (extracts safely over existing installs)" />
+        <echo message="  updaterSmall:   updater with the essentials only - no SAM, i2psnark, SusiMail, SusiDNS, news.xml, or history.txt" />
         <echo message="  distclean: clean up all derived files" />
         <echo message="  syndie:    generate a standalone syndie install" />
         <echo message="  i2psnark:  generate a standalone i2psnark install" />
@@ -17,22 +18,24 @@
     <target name="dist" depends="pkg, javadoc">
     </target>
     <target name="build" depends="builddep, jar, buildWEB" />
+    <target name="buildSmall" depends="builddepSmall, jarSmall, buildWEB" />
     <target name="buildclean" depends="distclean, build" />
-    <target name="builddep">
+    <target name="builddep" depends="builddepSmall">
 	<!-- build *everything* here, but only once -->
+        <ant dir="apps/sam/java/" target="jar" />
+        <ant dir="apps/susimail/" target="war" />
+        <ant dir="apps/susidns/src" target="all" />
+        <ant dir="apps/i2psnark/java/" target="standalone" />
+    </target>
+    <target name="builddepSmall">
         <ant dir="core/java/" target="jar" />
         <ant dir="router/java/" target="jar" />
         <ant dir="apps/ministreaming/java/" target="jar" />
         <ant dir="apps/streaming/java/" target="jar" />
         <ant dir="apps/i2ptunnel/java/" target="jar" />
-        <ant dir="apps/sam/java/" target="jar" />
         <ant dir="apps/systray/java/" target="jar" />
         <ant dir="apps/routerconsole/java/" target="jar" />
         <ant dir="apps/addressbook/" target="war" />
-        <ant dir="apps/susimail/" target="war" />
-        <ant dir="apps/susidns/src" target="all" />
-        <!-- <ant dir="apps/syndie/java/" target="jar" /> -->
-        <ant dir="apps/i2psnark/java/" target="standalone" />
     </target>
     <target name="buildrouter">
         <ant dir="core/java/" target="distclean" />
@@ -91,28 +94,23 @@
 	<!-- thazzit -->
     </target>
     <target name="compile" />
-    <target name="jar" depends="compile" >
+    <target name="jar" depends="jarSmall" >
+        <copy file="apps/sam/java/build/sam.jar" todir="build/" />
+        <copy file="apps/susimail/susimail.war" todir="build/" />
+        <copy file="apps/susidns/src/susidns.war" todir="build/" />
+        <copy file="apps/i2psnark/i2psnark.war" todir="build/" />
+        <copy file="apps/i2psnark/java/build/i2psnark.jar" todir="build/" />
+    </target>
+    <target name="jarSmall" depends="compile" >
         <copy file="core/java/build/i2p.jar" todir="build/" />
         <copy file="router/java/build/router.jar" todir="build/" />
         <copy file="apps/ministreaming/java/build/mstreaming.jar" todir="build/" />
         <copy file="apps/streaming/java/build/streaming.jar" todir="build/" />
         <copy file="apps/i2ptunnel/java/build/i2ptunnel.jar" todir="build/" />
         <copy file="apps/i2ptunnel/java/build/i2ptunnel.war" todir="build/" />
-        <copy file="apps/sam/java/build/sam.jar" todir="build/" />
         <copy file="apps/systray/java/build/systray.jar" todir="build/" />
         <copy file="installer/lib/jbigi/jbigi.jar" todir="build" />
         <copy file="apps/addressbook/dist/addressbook.war" todir="build/" />
-        <copy file="apps/susimail/susimail.war" todir="build/" />
-        <copy file="apps/susidns/src/susidns.war" todir="build/" />
-        <!--
-        <copy file="apps/syndie/syndie.war" todir="build/" />
-        <copy file="apps/syndie/java/build/syndie.jar" todir="build/" />
-        <copy file="apps/syndie/java/build/sucker.jar" todir="build/" />
-        -->
-        <copy file="apps/i2psnark/i2psnark.war" todir="build/" />
-        <copy file="apps/i2psnark/java/build/i2psnark.jar" todir="build/" />
-        <copy file="apps/jdom/jdom.jar" todir="build/" />
-        <copy file="apps/rome/rome-0.8.jar" todir="build/" />
     </target>
     <target name="javadoc">
         <mkdir dir="./build" />
@@ -304,68 +302,35 @@
     <target name="updaterWithJetty" depends="prepjupdate">
         <zip destfile="i2pupdate.zip" basedir="pkg-temp" />
     </target>
+    <target name="updaterSmall" depends="prepupdateSmall">
+        <zip destfile="i2pupdate.zip" basedir="pkg-temp" />
+    </target>
     <target name="updateTest" depends="prepupdate">
         <ant dir="core/java/" target="jarTest" />    
         <copy file="core/java/build/i2ptest.jar" todir="pkg-temp/lib" />
         <zip destfile="i2pupdate.zip" basedir="pkg-temp" />
     </target>
-    <target name="prepupdate" depends="distclean, build">
+    <target name="prepupdate" depends="distclean, build, prepupdateSmall">
+        <copy file="build/sam.jar" todir="pkg-temp/lib/" />
+        <copy file="build/i2psnark.jar" todir="pkg-temp/lib" />
+        <copy file="build/susimail.war" todir="pkg-temp/webapps/" />
+        <copy file="build/susidns.war" todir="pkg-temp/webapps/" />
+        <copy file="build/i2psnark.war" todir="pkg-temp/webapps/" />
+        <copy file="history.txt" todir="pkg-temp/" />
+        <mkdir dir="pkg-temp/docs/" />
+        <copy file="news.xml" todir="pkg-temp/docs/" />
+    </target>
+    <target name="prepupdateSmall" depends="distclean, buildSmall">
         <delete dir="pkg-temp" />
         <copy file="build/i2p.jar" todir="pkg-temp/lib/" />
         <copy file="build/i2ptunnel.jar" todir="pkg-temp/lib/" />
         <copy file="build/mstreaming.jar" todir="pkg-temp/lib/" />
         <copy file="build/streaming.jar" todir="pkg-temp/lib/" />
-        <copy file="build/sam.jar" todir="pkg-temp/lib/" />
         <copy file="build/router.jar" todir="pkg-temp/lib/" />
         <copy file="build/routerconsole.jar" todir="pkg-temp/lib/" />
-        <!-- <copy file="build/sucker.jar" todir="pkg-temp/lib" /> -->
-        <copy file="build/i2psnark.jar" todir="pkg-temp/lib" />
-        
-        <!--<copy file="installer/resources/runplain.sh" todir="pkg-temp/" />-->
-        
         <copy file="build/i2ptunnel.war" todir="pkg-temp/webapps/" />
         <copy file="build/routerconsole.war" todir="pkg-temp/webapps/" />
         <copy file="build/addressbook.war" todir="pkg-temp/webapps/" />
-        <copy file="build/susimail.war" todir="pkg-temp/webapps/" />
-        <copy file="build/susidns.war" todir="pkg-temp/webapps/" />
-        <!-- <copy file="build/syndie.war" todir="pkg-temp/webapps/" /> -->
-        <copy file="build/i2psnark.war" todir="pkg-temp/webapps/" />
-        <!-- <copy file="apps/i2psnark/java/build/launch-i2psnark.jar" todir="pkg-temp/" /> -->
-        <copy file="apps/i2psnark/jetty-i2psnark.xml" todir="pkg-temp/" />
-        <copy file="history.txt" todir="pkg-temp/" />
-        <mkdir dir="pkg-temp/docs/" />
-        <copy file="news.xml" todir="pkg-temp/docs/" />
-        <!--
-        <copy file="installer/resources/dnf-header.ht" todir="pkg-temp/docs/" />
-        <copy file="installer/resources/dnfp-header.ht" todir="pkg-temp/docs/" />
-        <copy file="installer/resources/dnfb-header.ht" todir="pkg-temp/docs/" />
-        <copy file="installer/resources/dnfh-header.ht" todir="pkg-temp/docs/" />
-	<copy file="installer/resources/ahelper-conflict-header.ht" todir="pkg-temp/docs/" />
-        -->
-        
-        <!-- polecat: please put your modified toolbar.html in installer/resources/toolbar.html 
-             and uncomment the following -->
-        <!-- <copy file="installer/resources/toolbar.html" todir="pkg-temp/docs/" /> -->
-        
-        <!--
-        <mkdir dir="pkg-temp/docs/themes/" />
-        <copy todir="pkg-temp/docs/themes/" >
-          <fileset dir="installer/resources/themes/" />
-        </copy>
-        -->
-        
-        <!-- the addressbook handles this for updates -->
-        <!-- <copy file="hosts.txt" todir="pkg-temp/" /> -->
-        <mkdir dir="pkg-temp/eepsite" />
-        <mkdir dir="pkg-temp/eepsite/webapps" />
-        <mkdir dir="pkg-temp/eepsite/cgi-bin" />
-        <!--
-	<mkdir dir="pkg-temp/syndie" />
-	<mkdir dir="pkg-temp/syndie/archive" />
-	<mkdir dir="pkg-temp/syndie/archive/ovpBy2mpO1CQ7deYhQ1cDGAwI6pQzLbWOm1Sdd0W06c=" />
-	<copy file="installer/resources/blogMeta.snm" tofile="pkg-temp/syndie/archive/ovpBy2mpO1CQ7deYhQ1cDGAwI6pQzLbWOm1Sdd0W06c=/meta.snm" />
-	<copy file="installer/resources/blogPost.snd" tofile="pkg-temp/syndie/archive/ovpBy2mpO1CQ7deYhQ1cDGAwI6pQzLbWOm1Sdd0W06c=/1132012800001.snd" />
-        -->
     </target>
     <target name="prepjupdate" depends="prepupdate, buildWEB">
         <copy file="build/ant.jar" todir="pkg-temp/lib/" />
diff --git a/history.txt b/history.txt
index d2fa66902f3956a0768893fb19480db9df0d1d92..0d33ee66da1a8a7846b8d4a671dd16d64d1e8866 100644
--- a/history.txt
+++ b/history.txt
@@ -1,3 +1,17 @@
+2008-05-26 zzz
+    * Throttle: Set a default router.maxParticipatingTunnels = 3000 (was none)
+    * Stats: Add a fake uptime if not publishing stats, to get participating tunnels
+    * build.xml:
+      - Add an updateSmall target which includes only the essentials
+      - Clean up the build file some 
+      - Remove empty eepsite/ and subdirs from i2pupdate.zip
+    * configtunnels.jsp: Add warning
+    * i2psnark: Catch a bencode exception (bad peer from tracker) earlier
+    * i2psnark-standalone: Fix exception http://forum.i2p/viewtopic.php?p=12217
+
+2008-05-22 welterde
+    * Change jetty download location in build script
+
 2008-05-20 zzz
     * Reachability:
       - Call the previously unused profile.tunnelTestFailed()
diff --git a/router/java/src/net/i2p/router/RouterThrottleImpl.java b/router/java/src/net/i2p/router/RouterThrottleImpl.java
index 8035d89fabf5ee3d75c4c2432c015a216bc5c94f..cfe11e8addfdffdf03997b3b6826a5e0d66fc641 100644
--- a/router/java/src/net/i2p/router/RouterThrottleImpl.java
+++ b/router/java/src/net/i2p/router/RouterThrottleImpl.java
@@ -32,6 +32,7 @@ class RouterThrottleImpl implements RouterThrottle {
     private static int THROTTLE_EVENT_LIMIT = 30;
     
     private static final String PROP_MAX_TUNNELS = "router.maxParticipatingTunnels";
+    private static final String DEFAULT_MAX_TUNNELS = "3000";  // Unless share BW > 300KBps, BW limit will kick in first
     private static final String PROP_DEFAULT_KBPS_THROTTLE = "router.defaultKBpsThrottle";
 
     /** tunnel acceptance */
@@ -187,7 +188,7 @@ class RouterThrottleImpl implements RouterThrottle {
             }
         }
         
-        String maxTunnels = _context.getProperty(PROP_MAX_TUNNELS);
+        String maxTunnels = _context.getProperty(PROP_MAX_TUNNELS, DEFAULT_MAX_TUNNELS);
         if (maxTunnels != null) {
             try {
                 int max = Integer.parseInt(maxTunnels);
diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java
index 4c90a8a1b071bb1361e014c055d08c4f6e487968..2e12db0e153e994cfa1ec2198060e04564262f76 100644
--- a/router/java/src/net/i2p/router/RouterVersion.java
+++ b/router/java/src/net/i2p/router/RouterVersion.java
@@ -17,7 +17,7 @@ import net.i2p.CoreVersion;
 public class RouterVersion {
     public final static String ID = "$Revision: 1.548 $ $Date: 2008-02-10 15:00:00 $";
     public final static String VERSION = "0.6.1.33";
-    public final static long BUILD = 7;
+    public final static long BUILD = 8;
     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/StatisticsManager.java b/router/java/src/net/i2p/router/StatisticsManager.java
index 212dc7d342be2d38d27135219a25aca6678e48ec..4a6620c6e68f9c04c6522c31959a6d7a6c0cf754 100644
--- a/router/java/src/net/i2p/router/StatisticsManager.java
+++ b/router/java/src/net/i2p/router/StatisticsManager.java
@@ -205,6 +205,8 @@ public class StatisticsManager implements Service {
             
             _log.debug("Publishing peer rankings");
         } else {
+            // So that we will still get build requests
+            stats.setProperty("stat_uptime", "90m");
             _log.debug("Not publishing peer rankings");
         }