diff --git a/build.xml b/build.xml
index 17a5d36ebc806da51fff3b99636bff9fda6898be..bc0b4cce719dd436239d2974b2f6b7f1559cc28f 100644
--- a/build.xml
+++ b/build.xml
@@ -37,7 +37,8 @@
         <echo message="  javadoc:   generate javadoc for the entire project into ./build/javadoc" />
         <echo message="  slackpkg:  generate Slackware packages in ./Slackware/i2p and ./Slackware/i2p-base" />
         <echo message="  debianhowto: instructions on building Debian packages" />
-        <echo message="  debian: generate Debian packages (source + binary)" />
+        <echo message="  debian: generate Debian packages in ./debian/packages" />
+        <echo message="          (libc6-i686 and libc6-amd64 required, ant>=1.8 required)" />
         <echo message="  debianrepo: build a Debian repository (reprepro required)" />
         <echo message="  updaterWithDesktopgui: tar the built files and desktopgui in an i2pupdate.zip" />
         <echo message="  pkgWithDesktopgui: distclean then package everything up with the desktopgui" />
@@ -236,19 +237,17 @@
         <delete file="syndie-standalone.zip" failonerror="false" quiet="true" />
         <delete file="i2psnark-standalone.zip" failonerror="false" quiet="true" />
         <delete file="BOB-one.jar" failonerror="false" quiet="true" />	
-    </target>
-    <target name="distclean" depends="clean">
         <delete dir="debian/tmp" />
-        <delete dir="debian/repo" />
         <delete dir="debian/db" />
         <delete file="debian/files" />
         <delete file="debian/build" />
         <delete file="debian/substvars"/>
-      <!-- HH to move
-        <delete>
-            <fileset dir=".." includes="i2p_*.tar.gz,i2p_*.deb,i2p_*.dsc,i2p_*.changes" />
+    </target>
+    <target name="distclean" depends="clean">
+        <delete includeemptydirs="true" removeNotFollowedSymlinks="true" failonerror="false" >
+            <fileset dir="debian/packages" followSymlinks="false" />
         </delete>
-      -->
+        <delete dir="debian/repo" />
         <ant dir="core/java/" target="distclean" />
         <ant dir="router/java/" target="distclean" />
         <ant dir="apps/ministreaming/java/" target="distclean" />
@@ -924,8 +923,9 @@
         <echo message="... and mtn cert t:i2p-${release.number} branch i2p.i2p.release" />
     </target>
 
-    <target name="debian">
-        <!-- same as debian-binary + debian-source, but only one build needed -->
+    <target name="debian" depends="distclean, debian-source, debian-binary" />
+
+    <target name="debian-binary">
         <echo message="Did you update the version in these files?" />
         <exec executable="ls" failonerror="true">
             <arg value="-l" />
@@ -934,35 +934,12 @@
         <echo message="====================" />
         <!-- bundle the 20MB jetty 5 lib since there probably isn't a deb for it -->
         <ant dir="apps/jetty" target="ensureJettylib" />
-        <exec executable="dpkg-buildpackage" failifexecutionfails="true">
-            <arg value="-I_MTN" />
-            <arg value="-ai386" />
-        </exec>
-        <!-- rather than doing a complete new build, recreate debian/tmp by calling the "build" target in debian/rules -->
-        <delete dir="debian/tmp" />
-        <exec executable="dpkg-buildpackage" failifexecutionfails="true">
-            <arg value="-I_MTN" />
-            <arg value="-Tbuild" />
-            <arg value="-aamd64" />
-            <env key="MAKEFLAGS" value="-B" />
+	
+        <exec dir="debian" executable="./buildpackage.sh" failonerror="true">
+            <arg value="i386" />
         </exec>
-        <exec executable="dpkg-buildpackage" failifexecutionfails="true">
-            <arg value="-I_MTN" />
-            <!-- don't clean so the previous package isn't deleted -->
-            <arg value="-nc" />
-            <arg value="-aamd64" />
-        </exec>
-    </target>
-    <target name="debian-binary">
-        <!-- binary only -->
-        <echo message="Did you update the version in these files?" />
-        <exec executable="ls" failonerror="true">
-            <arg value="-l" />
-            <arg value="debian/changelog" />
-        </exec>
-        <echo message="====================" />
-        <exec executable="dpkg-buildpackage" failifexecutionfails="true" >
-            <arg value="-b" />
+        <exec dir="debian" executable="./buildpackage.sh" failonerror="true">
+            <arg value="amd64" />
         </exec>
     </target>
     <target name="debian-source">
@@ -974,9 +951,8 @@
             <arg value="debian/changelog" />
         </exec>
         <echo message="====================" />
-        <exec executable="dpkg-buildpackage" failifexecutionfails="true" >
-            <arg value="-S" />
-            <arg value="-I_MTN" />
+        <exec dir="debian" executable="./buildpackage.sh" failonerror="true">
+            <arg value="source" />
         </exec>
     </target>
     <target name="debianrepo" depends="debian">
diff --git a/debian/buildpackage.sh b/debian/buildpackage.sh
new file mode 100755
index 0000000000000000000000000000000000000000..0bfdffe3b4c3468b594577bb86140a20c23e83f0
--- /dev/null
+++ b/debian/buildpackage.sh
@@ -0,0 +1,30 @@
+#!/bin/sh
+# This script takes one argument, which is the architecture to build for,
+# or "source".
+
+echo Target architecture: $1
+VERSION=`grep String\ VERSION ../core/java/src/net/i2p/CoreVersion.java | cut -d\" -f2`
+echo "I2P Version: ${VERSION}"
+builddir="packages/$1/i2p-${VERSION}"
+
+if [ "$1" = "source" ]; then
+    cd ..
+    ant clean
+    tempdir=../_i2p_copy_temp___
+    cp -a . ${tempdir}
+    mkdir -p debian/packages/$1
+    mv ${tempdir} debian/${builddir}
+    cd debian/${builddir}
+    dpkg-buildpackage -I_MTN -Idebian/packages -S
+else
+    mkdir -p ${builddir}
+    cd ${builddir}
+    find ../../../.. -not -name . -and -not -name .. -maxdepth 1 -exec ln -fs {} \;
+    dpkg-buildpackage -I_MTN -b -a$1
+fi
+if [ "$?" -ne 0 ]; then
+  exit 1
+fi
+
+cd ../../..
+rm -rf ${builddir}
diff --git a/debian/makerepo.sh b/debian/makerepo.sh
index 64d696966086aaa78e26b048af64bba3d83ad1a7..ad845f31dfcd1e37a29a9a6f6e5aabd732054b83 100755
--- a/debian/makerepo.sh
+++ b/debian/makerepo.sh
@@ -28,8 +28,9 @@ echo "SignWith: ${SIGNER}" >> ${CONFFILE}
 
 # create the repository
 echo Building the repository...
-find ../.. -name i2p_*.deb -maxdepth 1 -exec reprepro --ask-passphrase --outdir ${DIR} includedeb all {} \;
-find ../.. -name i2p_*.changes -maxdepth 1 -exec reprepro --ask-passphrase --outdir ${DIR} include all {} \;
+find packages/ -name *.deb -exec reprepro --ask-passphrase --outdir ${DIR} includedeb all {} \;
+find packages/ -name *.changes -exec reprepro --ask-passphrase --outdir ${DIR} include all {} \;
+find packages/ -name *.dsc -exec reprepro --ask-passphrase --outdir ${DIR} includedsc all {} \;
 
 # export the public key
 gpg --armor --export ${SIGNER} > ${DIR}/0x${KEYID}.asc
diff --git a/debian/rules b/debian/rules
index bf63b845ca3310ab2bcb4a089afde642c7ccd334..ea785e0d635eece0cd46641c7b97ccf1e258a651 100755
--- a/debian/rules
+++ b/debian/rules
@@ -120,9 +120,7 @@ binary-arch:
 binary-indep:
 
 clean:
-	rm -f debian/build
-	rm -rf debian/tmp/
-	ant distclean
+	ant clean
 	@exit 0
 
 get-orig-source: