diff --git a/apps/addressbook/build.xml b/apps/addressbook/build.xml
index c4b214feb7f87eb3ada6f6338ffcf7026c6b329f..b28cec2dcc4299e5749d0419cba018cf89494fd5 100644
--- a/apps/addressbook/build.xml
+++ b/apps/addressbook/build.xml
@@ -19,7 +19,10 @@
 
 	<target name="distclean" depends="clean" />
 
-        <target name="depend">
+        <condition property="depend.available">
+            <typefound name="depend" />
+        </condition>
+        <target name="depend" if="depend.available">
             <depend
                 cache="../../build"
                 srcdir="${src}"
diff --git a/apps/i2psnark/java/build.xml b/apps/i2psnark/java/build.xml
index 0a882af6d20ab004a0edf6fbcbb6d3ac047214d1..02eee0aabc36ef863fdd4fd561ac646824761dd4 100644
--- a/apps/i2psnark/java/build.xml
+++ b/apps/i2psnark/java/build.xml
@@ -7,7 +7,10 @@
         <ant dir="../../streaming/java/" target="build" />
 	<!-- streaming will build ministreaming and core -->
     </target>
-    <target name="depend">
+    <condition property="depend.available">
+        <typefound name="depend" />
+    </condition>
+    <target name="depend" if="depend.available">
         <depend
             cache="../../../build"
             srcdir="./src" 
diff --git a/apps/i2ptunnel/java/build.xml b/apps/i2ptunnel/java/build.xml
index 6db84dbf34e651d40479d40f49d4b73a9cc405d4..635cad2e44e735eba9a77aaf970c089c91e09380 100644
--- a/apps/i2ptunnel/java/build.xml
+++ b/apps/i2ptunnel/java/build.xml
@@ -7,7 +7,10 @@
         <ant dir="../../jetty/" target="build" />
 	<!-- ministreaming will build core -->
     </target>
-    <target name="depend">
+    <condition property="depend.available">
+        <typefound name="depend" />
+    </condition>
+    <target name="depend" if="depend.available">
         <depend
             cache="../../../build"
             srcdir="./src" 
diff --git a/apps/jetty/build.xml b/apps/jetty/build.xml
index 13d3f92e07c09e2c3448acd18519b2f0a5aa7366..aaa97835493bbb8039a16bb8de9d6450ea4ee949 100644
--- a/apps/jetty/build.xml
+++ b/apps/jetty/build.xml
@@ -5,6 +5,7 @@
     <property name="jetty.md5" value="a61adc832be6baf2678935506743cfc3" />
     <property name="jetty.url" value="http://dist.codehaus.org/jetty/jetty-5.1.x/jetty-5.1.12.zip" />
     <property name="jetty.filename" value="jetty-5.1.12.zip" />
+    <property name="verified.filename" value="verified.txt" />
 
     <target name="all" depends="build" />
 
@@ -41,7 +42,9 @@
         <get src="${jetty.url}" verbose="true" dest="${jetty.filename}" />
     </target>
 
-    <target name="verifyJettylib" >
+    <uptodate property="verified.already" srcfile="${jetty.filename}" targetfile="${verified.filename}" />
+
+    <target name="verifyJettylib" unless="verified.already" >
         <condition property="jetty.zip.verified" >
             <and>
                 <checksum file="${jetty.filename}" algorithm="SHA" property="${jetty.sha1}" />
@@ -55,6 +58,7 @@
                 </not>
             </condition>
         </fail>
+        <touch file="${verified.filename}" />
     </target>
 
     <target name="extractJettylib" unless="jetty.zip.extracted" >
@@ -97,6 +101,7 @@
     </target>    
     <target name="clean" >
         <delete dir="./build" />
+        <delete file="${verified.filename}" />
     </target>    
     <target name="cleandep" depends="clean" />
     <target name="distclean" depends="clean">
diff --git a/apps/ministreaming/java/build.xml b/apps/ministreaming/java/build.xml
index 72a65d89c5bd241a391e815c34208ab099eebe75..48920deefef64ddbe54539c94f827c8587bc7743 100644
--- a/apps/ministreaming/java/build.xml
+++ b/apps/ministreaming/java/build.xml
@@ -5,7 +5,10 @@
     <target name="builddep">
         <ant dir="../../../core/java/" target="build" />
     </target>
-    <target name="depend">
+    <condition property="depend.available">
+        <typefound name="depend" />
+    </condition>
+    <target name="depend" if="depend.available">
         <depend
             cache="../../../build"
             srcdir="./src" 
diff --git a/apps/routerconsole/java/build.xml b/apps/routerconsole/java/build.xml
index cea75a248cd02b17d1e5a27bad3dc02ed0544f07..00168963bf50b1415bba70ef900cc176fee8889c 100644
--- a/apps/routerconsole/java/build.xml
+++ b/apps/routerconsole/java/build.xml
@@ -10,7 +10,10 @@
     <target name="prepare">
         <ant dir="../../jetty/" target="build" />
     </target>
-    <target name="depend">
+    <condition property="depend.available">
+        <typefound name="depend" />
+    </condition>
+    <target name="depend" if="depend.available">
         <depend
             cache="../../../build"
             srcdir="./src" 
@@ -27,6 +30,8 @@
                 <pathelement location="../../jrobin/jrobin-1.4.0.jar" />
             </classpath>
         </depend>
+    </target>
+    <target name="dependVersion">
         <!-- Force the dependency on the RouterVersion as depend doesn't recognize constant changes  -->
         <dependset>
              <srcfilelist dir="." files="../../../router/java/build/obj/net/i2p/router/RouterVersion.class" />
@@ -35,7 +40,7 @@
              <targetfilelist dir="." files="build/obj/net/i2p/router/web/UpdateHandler.class" />
         </dependset>
     </target>
-    <target name="compile" depends="prepare, depend">
+    <target name="compile" depends="prepare, depend, dependVersion">
         <mkdir dir="./build" />
         <mkdir dir="./build/obj" />
         <javac 
diff --git a/apps/sam/java/build.xml b/apps/sam/java/build.xml
index c0eab67a35ee5e61a41c6f5f7962327454be6679..5f48bff98d4158f802fa5c0ed91c204bbe20c059 100644
--- a/apps/sam/java/build.xml
+++ b/apps/sam/java/build.xml
@@ -6,7 +6,10 @@
         <ant dir="../../ministreaming/java/" target="build" />
 	<!-- ministreaming will build core -->
     </target>
-    <target name="depend">
+    <condition property="depend.available">
+        <typefound name="depend" />
+    </condition>
+    <target name="depend" if="depend.available">
         <depend
             cache="../../../build"
             srcdir="./src" 
diff --git a/apps/streaming/java/build.xml b/apps/streaming/java/build.xml
index 5c79f97cc8189b9fc928b5939c0a0ffb965a4c97..568367033bb13f02dfff3c5a2002be4f93c4fd3d 100644
--- a/apps/streaming/java/build.xml
+++ b/apps/streaming/java/build.xml
@@ -6,10 +6,13 @@
         <ant dir="../../ministreaming/java/" target="build" />
 	<!-- ministreaming will build core -->
     </target>
-    <target name="depend">
+    <condition property="depend.available">
+        <typefound name="depend" />
+    </condition>
+    <target name="depend" if="depend.available">
         <depend
             cache="../../../build"
-            srcdir="./src" 
+            srcdir="./src:./test" 
             destdir="./build/obj" >
             <!-- Depend on classes instead of jars where available -->
             <classpath>
diff --git a/core/java/build.xml b/core/java/build.xml
index 24b7a77bcd24d6b30f242fd88bc3358a1d1bd774..28adbf9df288733c0aabd7aae49c4a432cea664d 100644
--- a/core/java/build.xml
+++ b/core/java/build.xml
@@ -5,7 +5,10 @@
     <target name="builddep">
         <!-- noop, since the core doesnt depend on anything -->
     </target>
-    <target name="depend">
+    <condition property="depend.available">
+        <typefound name="depend" />
+    </condition>
+    <target name="depend" if="depend.available">
         <depend
             cache="../../build"
             srcdir="./src" 
diff --git a/router/java/build.xml b/router/java/build.xml
index b6c9281aa4fad128d05a07448e332e5808f9698c..95878e468fa88434d47c13d64903a8042ede1020 100644
--- a/router/java/build.xml
+++ b/router/java/build.xml
@@ -8,7 +8,10 @@
     <target name="builddeptest">
         <ant dir="../../core/java/" target="jarTest" />
     </target>
-    <target name="depend">
+    <condition property="depend.available">
+        <typefound name="depend" />
+    </condition>
+    <target name="depend" if="depend.available">
         <depend
             cache="../../build"
             srcdir="./src"