diff --git a/build.xml b/build.xml
index f987c196150002c1944aea3faa4c16c503719e3b..5800c5864927b820b956b92df079ab6d4588488d 100644
--- a/build.xml
+++ b/build.xml
@@ -26,6 +26,10 @@
         <echo message="  pkg:       distclean then package everything up (installer, clean tarball, update tarball)" />
         <echo message="  dist:      pkg and javadoc" />
         <echo message="  installer: build the GUI installer" />
+        <echo message="  installer-freebsd: build the GUI installer (FreeBSD only)" />
+        <echo message="  installer-linux: build the GUI installer (Linux only)" />
+        <echo message="  installer-osx: build the GUI installer (OSX only)" />
+        <echo message="  installer-windows: build the GUI installer (Windows only)" />
         <echo message="  tarball:   tar the full install into i2p.tar.bz2 (extracts to build a new clean install)" />
         <echo message="  updater:   Package the built files in i2pupdate.zip (extracts safely over existing installs)" />
         <echo message="  updater200: Updater compressed with pack200 (creates i2pupdate200.zip, 60% smaller)" />
@@ -285,12 +289,13 @@
             </manifest>
         </jar>
     </target>
-
-    <target name="jbigi-windows-only" depends="buildProperties, jbigi-list-changes" >
+    
+    <!-- Now system-specific jbigis in alphabetical order -->
+    <target name="jbigi-freebsd-only"  depends="buildProperties, jbigi-list-changes" >
         <!-- set if unset -->
         <property name="workspace.changes.jbigi.tr" value="" />
-        <jar destfile="build/jbigi.jar" whenmanifestonly="fail" >
-            <fileset dir="installer/lib/jbigi" includes="*windows*.dll" />
+        <jar destfile="build/jbigi.jar"  whenmanifestonly="fail" >
+            <fileset dir="installer/lib/jbigi" includes="*freebsd*.so" />
             <manifest>
                 <attribute name="Build-Date" value="${build.timestamp}" />
                 <attribute name="Base-Revision" value="${workspace.version}" />
@@ -312,6 +317,19 @@
         </jar>
     </target>
 
+    <target name="jbigi-linux-nonx86-only"  depends="buildProperties, jbigi-list-changes" >
+        <!-- set if unset -->
+        <property name="workspace.changes.jbigi.tr" value="" />
+        <jar destfile="build/jbigi.jar"  whenmanifestonly="fail" >
+            <fileset dir="installer/lib/jbigi" includes="*linux-arm*.so,*linux-ppc*.so" />
+            <manifest>
+                <attribute name="Build-Date" value="${build.timestamp}" />
+                <attribute name="Base-Revision" value="${workspace.version}" />
+                <attribute name="Workspace-Changes" value="${workspace.changes.jbigi.tr}" />
+            </manifest>
+        </jar>
+    </target>
+
     <target name="jbigi-osx-only"  depends="buildProperties, jbigi-list-changes" >
         <!-- set if unset -->
         <property name="workspace.changes.jbigi.tr" value="" />
@@ -325,6 +343,18 @@
         </jar>
     </target>
 
+    <target name="jbigi-windows-only" depends="buildProperties, jbigi-list-changes" >
+        <!-- set if unset -->
+        <property name="workspace.changes.jbigi.tr" value="" />
+        <jar destfile="build/jbigi.jar" whenmanifestonly="fail" >
+            <fileset dir="installer/lib/jbigi" includes="*windows*.dll" />
+            <manifest>
+                <attribute name="Build-Date" value="${build.timestamp}" />
+                <attribute name="Base-Revision" value="${workspace.version}" />
+                <attribute name="Workspace-Changes" value="${workspace.changes.jbigi.tr}" />
+            </manifest>
+        </jar>
+    </target>
 
     <!-- the apps need to compile the jsps to poupdate -->
     <target name="poupdate" depends="buildRouter, buildStreaming, buildSystray, buildJetty, buildDesktopGui" >
@@ -389,6 +419,8 @@
                 <pathelement location="installer/lib/wrapper/all/wrapper.jar" />
                 <pathelement location="core/lib/junit.jar" />
             </classpath>
+	    <!-- These variables are stored in build.properties. 
+		 End-users can override by creating the file override.properties -->
             <link offline="true" href="${javasedocs.url}" packagelistLoc="installer/resources/package-lists/java/" />
             <link offline="true" href="${jettydocs.url}" packagelistLoc="installer/resources/package-lists/jetty/" />
             <link offline="true" href="${jrobindocs.url}" packagelistLoc="installer/resources/package-lists/jrobin/" />
@@ -515,17 +547,8 @@
         </delete>
     </target>
 
-    <target name="preppkg" depends="preppkg-linux, preppkg-osx, preppkg-windows, jbigi">
+    <target name="preppkg" depends="preppkg-linux, preppkg-freebsd, preppkg-osx, preppkg-windows, jbigi">
         <copy file="build/jbigi.jar" todir="pkg-temp/lib" />
-        <copy todir="pkg-temp/lib/wrapper/freebsd/">
-            <fileset dir="installer/lib/wrapper/freebsd/" />
-        </copy>
-	<copy todir="pkg-temp/lib/wrapper/freebsd64/">
-	    <fileset dir="installer/lib/wrapper/freebsd64" />
-        </copy>
-        <copy todir="pkg-temp/lib/wrapper/macosx/">
-            <fileset dir="installer/lib/wrapper/macosx/" />
-        </copy>
         <copy todir="pkg-temp/lib/wrapper/solaris/">
             <fileset dir="installer/lib/wrapper/solaris/" />
         </copy>
@@ -540,35 +563,27 @@
         </copy>
     </target>
 
-    <target name="preppkg-windows" depends="preppkg-base, buildexe">
-        <copy file="i2p.exe" todir="pkg-temp/" failonerror="false" />
-        <copy file="apps/systray/java/lib/systray4j.dll" todir="pkg-temp/lib" />
-        <copy file="apps/systray/java/resources/iggy.ico" todir="pkg-temp/icons" />
-        <copy file="apps/systray/java/resources/iggy.xpm" todir="pkg-temp/icons" />
-        <copy file="installer/resources/eepget.bat" todir="pkg-temp/" />
-        <copy file="installer/resources/i2prouter.bat" todir="pkg-temp/" />
-        <copy file="installer/resources/fixperms.bat" todir="pkg-temp/" />
-	<copy file="installer/resources/fix_logfile_path.cmd" todir="pkg-temp/" />
-        <copy file="installer/resources/install_i2p_service_winnt.bat" todir="pkg-temp/" />
-        <copy file="installer/resources/set_config_dir_for_nt_service.bat" todir="pkg-temp/" />
-        <copy file="installer/resources/uninstall_i2p_service_winnt.bat" todir="pkg-temp/" />
-        <copy file="installer/lib/wrapper/all/wrapper.jar" todir="pkg-temp/lib" />
-        <copy todir="pkg-temp/lib/wrapper/win32/">
-            <fileset dir="installer/lib/wrapper/win32/" />
+    <target name="preppkg-freebsd" depends="preppkg-unix">
+        <copy todir="pkg-temp/lib/wrapper/freebsd/">
+            <fileset dir="installer/lib/wrapper/freebsd/" />
         </copy>
-	<copy todir="pkg-temp/lib/wrapper/win64/">
-	    <fileset dir="installer/lib/wrapper/win64/" />
+        <copy todir="pkg-temp/lib/wrapper/freebsd64/">
+            <fileset dir="installer/lib/wrapper/freebsd64" />
         </copy>
     </target>
 
+    <target name="preppkg-freebsd-only" depends="preppkg-freebsd, jbigi-freebsd-only" >
+        <copy file="build/jbigi.jar" todir="pkg-temp/lib" />
+        <copy file="installer/lib/wrapper/all/wrapper.jar" todir="pkg-temp/lib" />
+    </target>
+
     <!-- only what is needed for debian, etc. -->
     <target name="preppkg-linux-only" depends="preppkg-linux, jbigi-linux-only" >
         <copy file="build/jbigi.jar" todir="pkg-temp/lib" />
         <copy file="installer/lib/wrapper/all/wrapper.jar" todir="pkg-temp/lib" />
     </target>
 
-    <!-- x86 linux only -->
-    <target name="preppkg-linux" depends="preppkg-base">
+    <target name="preppkg-unix" depends="preppkg-base">
         <copy file="installer/resources/runplain.sh" todir="pkg-temp/" />
 	<!-- <copy file="apps/i2psnark/launch-i2psnark" todir="pkg-temp/" /> old feature that per zzz isn't used-->
         <copy file="installer/resources/eepget" todir="pkg-temp/" />
@@ -578,6 +593,10 @@
         <copy todir="pkg-temp/man/">
             <fileset dir="installer/resources/man/" />
         </copy>
+    </target>
+
+    <!-- x86 linux only -->
+    <target name="preppkg-linux" depends="preppkg-unix">
         <copy todir="pkg-temp/lib/wrapper/linux/">
             <fileset dir="installer/lib/wrapper/linux/" />
         </copy>
@@ -586,13 +605,47 @@
         </copy>
     </target>
 
-    <target name="preppkg-osx" depends="preppkg-linux">
+    <target name="preppkg-osx" depends="preppkg-unix">
         <!--<copy file="installer/resources/I2P Router Console.webloc" todir="pkg-temp/" />-->
         <copy todir="pkg-temp/Start I2P Router.app">
 	    <fileset dir="installer/resources/Start I2P Router.app" />
 	</copy>
+        <copy todir="pkg-temp/lib/wrapper/macosx/">
+            <fileset dir="installer/lib/wrapper/macosx/" />
+        </copy>
     </target>
 
+    <target name="preppkg-osx-only" depends="preppkg-osx, jbigi-osx-only" >
+        <copy file="build/jbigi.jar" todir="pkg-temp/lib" />
+        <copy file="installer/lib/wrapper/all/wrapper.jar" todir="pkg-temp/lib" />	
+    </target>
+    
+    <target name="preppkg-windows" depends="preppkg-base, buildexe">
+        <copy file="i2p.exe" todir="pkg-temp/" failonerror="false" />
+        <copy file="apps/systray/java/lib/systray4j.dll" todir="pkg-temp/lib" />
+        <copy file="apps/systray/java/resources/iggy.ico" todir="pkg-temp/icons" />
+        <copy file="apps/systray/java/resources/iggy.xpm" todir="pkg-temp/icons" />
+        <copy file="installer/resources/eepget.bat" todir="pkg-temp/" />
+        <copy file="installer/resources/i2prouter.bat" todir="pkg-temp/" />
+        <copy file="installer/resources/fixperms.bat" todir="pkg-temp/" />
+        <copy file="installer/resources/fix_logfile_path.cmd" todir="pkg-temp/" />
+        <copy file="installer/resources/install_i2p_service_winnt.bat" todir="pkg-temp/" />
+        <copy file="installer/resources/set_config_dir_for_nt_service.bat" todir="pkg-temp/" />
+        <copy file="installer/resources/uninstall_i2p_service_winnt.bat" todir="pkg-temp/" />
+        <copy file="installer/lib/wrapper/all/wrapper.jar" todir="pkg-temp/lib" />
+        <copy todir="pkg-temp/lib/wrapper/win32/">
+            <fileset dir="installer/lib/wrapper/win32/" />
+        </copy>
+	<copy todir="pkg-temp/lib/wrapper/win64/">
+	    <fileset dir="installer/lib/wrapper/win64/" />
+        </copy>
+    </target>
+
+    <target name="preppkg-windows-only" depends="preppkg-windows, jbigi-windows-only">
+        <copy file="build/jbigi.jar" todir="pkg-temp/lib" />
+	<copy file="installer/lib/wrapper/all/wrapper.jar" todir="pkg-temp/lib" />
+    </target>
+    
     <target name="preppkg-base" depends="build, preplicenses, prepConsoleDocs, prepthemeupdates, prepCertificates">
         <!-- if updater200 was run previously, it left *.pack files in pkg-temp -->
         <delete>
@@ -955,6 +1008,184 @@
 	<!-- thazzit -->
     </target>
 
+    <!-- Custom installers -->
+
+    <target name="installer-freebsd" depends="clean, preppkg-freebsd-only, getReleaseNumber, getBuildNumber, buildProperties, util-list-changes" >
+        <taskdef name="izpack" classpath="${basedir}/installer/lib/izpack/standalone-compiler.jar" classname="com.izforge.izpack.ant.IzPackTask" />
+        <mkdir dir="pkg-temp/installer" />
+        <!-- set if unset -->
+        <property name="workspace.changes.util.tr" value="" />
+        <jar destfile="./pkg-temp/installer/copy.jar" basedir="./core/java/build/obj" includes="net/i2p/util/Copy.class net/i2p/util/FileUtil.class">
+            <manifest>
+                <attribute name="Main-Class" value="net.i2p.util.Copy" />
+                <attribute name="Build-Date" value="${build.timestamp}" />
+                <attribute name="Base-Revision" value="${workspace.version}" />
+                <attribute name="Workspace-Changes" value="${workspace.changes.util.tr}" />
+            </manifest>
+        </jar>
+        <jar destfile="./pkg-temp/installer/delete.jar" basedir="./core/java/build/obj" includes="net/i2p/util/Delete.class net/i2p/util/FileUtil.class">
+            <manifest>
+                <attribute name="Main-Class" value="net.i2p.util.Delete" />
+                <attribute name="Build-Date" value="${build.timestamp}" />
+                <attribute name="Base-Revision" value="${workspace.version}" />
+                <attribute name="Workspace-Changes" value="${workspace.changes.util.tr}" />
+            </manifest>
+        </jar>
+        <jar destfile="./pkg-temp/installer/exec.jar" basedir="./core/java/build/obj" includes="net/i2p/util/Exec.class">
+            <manifest>
+                <attribute name="Main-Class" value="net.i2p.util.Exec" />
+                <attribute name="Build-Date" value="${build.timestamp}" />
+                <attribute name="Base-Revision" value="${workspace.version}" />
+                <attribute name="Workspace-Changes" value="${workspace.changes.util.tr}" />
+            </manifest>
+        </jar>
+	<izpack input="${basedir}/installer/install.xml" output="${basedir}/i2pinstall_${release.number}-freebsd-only.jar" installerType="standard" basedir="${basedir}" />
+    </target>
+
+    <target name="installer-linux" depends="clean, preppkg-linux-only, getReleaseNumber, getBuildNumber, buildProperties, util-list-changes" >
+        <taskdef name="izpack" classpath="${basedir}/installer/lib/izpack/standalone-compiler.jar" classname="com.izforge.izpack.ant.IzPackTask" />
+        <mkdir dir="pkg-temp/installer" />
+        <!-- set if unset -->
+        <property name="workspace.changes.util.tr" value="" />
+        <jar destfile="./pkg-temp/installer/copy.jar" basedir="./core/java/build/obj" includes="net/i2p/util/Copy.class net/i2p/util/FileUtil.class">
+            <manifest>
+                <attribute name="Main-Class" value="net.i2p.util.Copy" />
+                <attribute name="Build-Date" value="${build.timestamp}" />
+                <attribute name="Base-Revision" value="${workspace.version}" />
+                <attribute name="Workspace-Changes" value="${workspace.changes.util.tr}" />
+            </manifest>
+        </jar>
+        <jar destfile="./pkg-temp/installer/delete.jar" basedir="./core/java/build/obj" includes="net/i2p/util/Delete.class net/i2p/util/FileUtil.class">
+            <manifest>
+                <attribute name="Main-Class" value="net.i2p.util.Delete" />
+                <attribute name="Build-Date" value="${build.timestamp}" />
+                <attribute name="Base-Revision" value="${workspace.version}" />
+                <attribute name="Workspace-Changes" value="${workspace.changes.util.tr}" />
+            </manifest>
+        </jar>
+        <jar destfile="./pkg-temp/installer/exec.jar" basedir="./core/java/build/obj" includes="net/i2p/util/Exec.class">
+            <manifest>
+                <attribute name="Main-Class" value="net.i2p.util.Exec" />
+                <attribute name="Build-Date" value="${build.timestamp}" />
+                <attribute name="Base-Revision" value="${workspace.version}" />
+                <attribute name="Workspace-Changes" value="${workspace.changes.util.tr}" />
+            </manifest>
+        </jar>
+	<izpack input="${basedir}/installer/install.xml" output="${basedir}/i2pinstall_${release.number}-linux-only.jar" installerType="standard" basedir="${basedir}" />
+    </target>
+
+
+    <target name="installer-osx" depends="clean, checkForIzpack2App, preppkg-osx-only, getReleaseNumber, getBuildNumber, buildProperties, util-list-changes">
+        <taskdef name="izpack" classpath="${basedir}/installer/lib/izpack/standalone-compiler.jar" classname="com.izforge.izpack.ant.IzPackTask" />
+        <mkdir dir="pkg-temp/installer" />
+	<mkdir dir="pkg-temp/osx" />
+        <!-- set if unset -->
+        <property name="workspace.changes.util.tr" value="" />
+        <jar destfile="./pkg-temp/installer/copy.jar" basedir="./core/java/build/obj" includes="net/i2p/util/Copy.class net/i2p/util/FileUtil.class">
+            <manifest>
+                <attribute name="Main-Class" value="net.i2p.util.Copy" />
+                <attribute name="Build-Date" value="${build.timestamp}" />
+                <attribute name="Base-Revision" value="${workspace.version}" />
+                <attribute name="Workspace-Changes" value="${workspace.changes.util.tr}" />
+            </manifest>
+        </jar>
+        <jar destfile="./pkg-temp/installer/delete.jar" basedir="./core/java/build/obj" includes="net/i2p/util/Delete.class net/i2p/util/FileUtil.class">
+            <manifest>
+                <attribute name="Main-Class" value="net.i2p.util.Delete" />
+                <attribute name="Build-Date" value="${build.timestamp}" />
+                <attribute name="Base-Revision" value="${workspace.version}" />
+                <attribute name="Workspace-Changes" value="${workspace.changes.util.tr}" />
+            </manifest>
+        </jar>
+        <jar destfile="./pkg-temp/installer/exec.jar" basedir="./core/java/build/obj" includes="net/i2p/util/Exec.class">
+            <manifest>
+                <attribute name="Main-Class" value="net.i2p.util.Exec" />
+                <attribute name="Build-Date" value="${build.timestamp}" />
+                <attribute name="Base-Revision" value="${workspace.version}" />
+                <attribute name="Workspace-Changes" value="${workspace.changes.util.tr}" />
+            </manifest>
+        </jar>
+	<izpack input="${basedir}/installer/install.xml" output="${basedir}/i2pinstall_${release.number}-osx-only.jar" installerType="standard" basedir="${basedir}" />
+	<ant target="installer2app" />
+	<delete dir="pkg-temp/osx" />
+    </target>
+
+    <target name="checkForIzpack2App">
+        <available property="izpack2app.available" file="${user.home}/IzPack/utils/wrappers/izpack2app/izpack2app.py" />
+    </target>
+
+    <target name="installer2app" if="izpack2app.available">
+	<mkdir dir="pkg-temp/osx" />
+	<exec executable="python" failonerror="true">
+	    <arg value="${user.home}/IzPack/utils/wrappers/izpack2app/izpack2app.py" />
+	    <arg value="${basedir}/i2pinstall_${release.number}-osx-only.jar" />
+	    <arg value="${basedir}/pkg-temp/osx/i2p-${release.number}-osx-install.app" />
+	</exec>
+	<zip destfile="${basedir}/i2pinstall_${release.number}-osx.zip" level="9" 
+	    basedir="${basedir}/pkg-temp/osx" whenempty="fail" comment="${release.number}-${build.number}"/>
+    </target>
+
+    <target name="checkForIzpack2Exe">
+        <available property="izpack2exe.available" file="${user.home}/IzPack/utils/wrappers/izpack2exe/izpack2exe.py" />
+    </target>
+
+    <!-- Yes, even though this makes an installer for Windows, we still need to depend on preppkg-unix (because the installer attempts to delete these files
+     and will fail if they don't exist. Thankfully these files are so very small there's not much harm in including them.
+    -->
+    <target name="installer-windows" depends="clean, doBuildEXE, checkForIzpack2Exe, preppkg-windows-only, preppkg-unix, getReleaseNumber, getBuildNumber, buildProperties, util-list-changes" >
+        <taskdef name="izpack" classpath="${basedir}/installer/lib/izpack/standalone-compiler.jar" classname="com.izforge.izpack.ant.IzPackTask" />
+        <mkdir dir="pkg-temp/installer" />
+        <!-- set if unset -->
+        <property name="workspace.changes.util.tr" value="" />
+        <jar destfile="./pkg-temp/installer/copy.jar" basedir="./core/java/build/obj" includes="net/i2p/util/Copy.class net/i2p/util/FileUtil.class">
+            <manifest>
+                <attribute name="Main-Class" value="net.i2p.util.Copy" />
+                <attribute name="Build-Date" value="${build.timestamp}" />
+                <attribute name="Base-Revision" value="${workspace.version}" />
+                <attribute name="Workspace-Changes" value="${workspace.changes.util.tr}" />
+            </manifest>
+        </jar>
+        <jar destfile="./pkg-temp/installer/delete.jar" basedir="./core/java/build/obj" includes="net/i2p/util/Delete.class net/i2p/util/FileUtil.class">
+            <manifest>
+                <attribute name="Main-Class" value="net.i2p.util.Delete" />
+                <attribute name="Build-Date" value="${build.timestamp}" />
+                <attribute name="Base-Revision" value="${workspace.version}" />
+                <attribute name="Workspace-Changes" value="${workspace.changes.util.tr}" />
+            </manifest>
+        </jar>
+        <jar destfile="./pkg-temp/installer/exec.jar" basedir="./core/java/build/obj" includes="net/i2p/util/Exec.class">
+            <manifest>
+                <attribute name="Main-Class" value="net.i2p.util.Exec" />
+                <attribute name="Build-Date" value="${build.timestamp}" />
+                <attribute name="Base-Revision" value="${workspace.version}" />
+                <attribute name="Workspace-Changes" value="${workspace.changes.util.tr}" />
+            </manifest>
+        </jar>
+	<izpack input="${basedir}/installer/install.xml" output="${basedir}/i2pinstall_${release.number}-windows-only.jar" installerType="standard" basedir="${basedir}" />
+	<ant target="installer2exe" />
+	<delete dir="pkg-temp/win" />
+
+    </target>
+
+    <target name="installer2exe" if="izpack2exe.available"> <!-- different from the launch4j exe creator -->
+        <mkdir dir="pkg-temp/win" />
+	<exec executable="python" failonerror="true">
+	    <arg value="${user.home}/IzPack/utils/wrappers/izpack2exe/izpack2exe.py" />
+            <arg value="--file=${basedir}/i2pinstall_${release.number}-windows-only.jar" />
+	    <arg value="--no-upx" />
+	    <arg value="--name=I2P" />
+	    <arg value="--output=${basedir}/i2pinstall-${release.number}-windows.exe" />
+        </exec>
+    </target>
+    <target name="installer-all" >
+    	<ant target="installer-freebsd" />
+	<ant target="installer-linux" />
+	<ant target="installer-osx" />
+	<ant target="installer-windows" />
+	<ant target="installer" />
+    </target>
+    <!-- end custom installers -->
+    
     <target name="test" depends="buildProperties, jbigi" >
         <mkdir dir="reports/core/junit/" />
         <ant dir="core/java/" target="test" />