diff --git a/apps/imagegen/zxing/README-i2p.txt b/apps/imagegen/zxing/README-i2p.txt
new file mode 100644
index 0000000000000000000000000000000000000000..7eb52a97e1a5e98551da01266e7e0073e1652785
--- /dev/null
+++ b/apps/imagegen/zxing/README-i2p.txt
@@ -0,0 +1,6 @@
+This is a small portion of zxing, including only what's required
+to generate QR codes. There are no modifications.
+We've added a build.xml for ant.
+
+Pulled from https://github.com/zxing/zxing on Jan. 4, 2016,
+rev 4e3abafe3008e02695f894eccf05f8257fca4ee9 dated Dec. 9, 2015.
diff --git a/apps/imagegen/zxing/build.xml b/apps/imagegen/zxing/build.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3342776dc9197360dabf7857ccc484cdff5ae78a
--- /dev/null
+++ b/apps/imagegen/zxing/build.xml
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project basedir="." default="all" name="zxing">
+    <target name="all" depends="clean, build" />
+    <target name="build" depends="builddep, jar" />
+    <target name="builddep">
+        <!-- run from top level build.xml to get dependencies built -->
+    </target>
+    <condition property="depend.available">
+        <typefound name="depend" />
+    </condition>
+    <target name="depend" if="depend.available">
+        <depend
+            cache="../../../build"
+            srcdir="./core/src/main/java" 
+            destdir="./build/obj" >
+        </depend>
+    </target>
+
+    <!-- only used if not set by a higher build.xml -->
+    <property name="javac.compilerargs" value="" />
+
+    <target name="compile" depends="depend">
+        <mkdir dir="./build" />
+        <mkdir dir="./build/obj" />
+        <javac srcdir="./core/src/main/java" debug="true" deprecation="on" source="1.7" target="1.7"
+               includeAntRuntime="false"
+               destdir="./build/obj" >
+            <compilerarg line="${javac.compilerargs}" />
+        </javac>
+        <javac srcdir="./javase/src/main/java" debug="true" deprecation="on" source="1.7" target="1.7"
+               includeAntRuntime="false"
+               destdir="./build/obj" classpath="./build/obj" >
+            <compilerarg line="${javac.compilerargs}" />
+        </javac>
+    </target>
+
+    <target name="compileTest" depends="jar">
+	<mkdir dir="./buildTest" />
+	<mkdir dir="./buildTest/obj" />
+        <javac
+            srcdir="./test/junit"
+            debug="true" deprecation="on" source="1.7" target="1.7"
+            includeAntRuntime="false"
+            destdir="./buildTest/obj"
+            classpath="./build/zxing.jar" >
+            <compilerarg line="${javac.compilerargs}" />
+        </javac>
+    </target>
+
+    <target name="jarTest" depends="jar, compileTest">
+        <jar destfile="./build/zxingTest.jar" basedir="./buildTest/obj" includes="**/*.class" update="true" />
+    </target>
+
+    <target name="listChangedFiles" depends="jarUpToDate" if="shouldListChanges" >
+        <exec executable="mtn" outputproperty="workspace.changes" errorproperty="mtn.error2" failifexecutionfails="false" >
+            <arg value="list" />
+            <arg value="changed" />
+            <arg value="." />
+        </exec>
+        <!-- \n in an attribute value generates an invalid manifest -->
+        <exec executable="tr" inputstring="${workspace.changes}" outputproperty="workspace.changes.tr" errorproperty="mtn.error2" failifexecutionfails="false" >
+            <arg value="-s" />
+            <arg value="[:space:]" />
+            <arg value="," />
+        </exec>
+    </target>
+
+    <target name="jar" depends="compile, jarUpToDate, listChangedFiles" unless="jar.uptodate" >
+        <!-- set if unset -->
+        <property name="workspace.changes.tr" value="" />
+        <jar destfile="./build/zxing.jar" basedir="./build/obj" includes="**/*.class" >
+            <manifest>
+                <attribute name="Implementation-Version" value="${full.version}" />
+                <attribute name="Built-By" value="${build.built-by}" />
+                <attribute name="Build-Date" value="${build.timestamp}" />
+                <attribute name="Base-Revision" value="${workspace.version}" />
+                <attribute name="Workspace-Changes" value="${workspace.changes.tr}" />
+            </manifest>
+        </jar>
+    </target>
+
+    <target name="jarUpToDate">
+        <uptodate property="jar.uptodate" targetfile="build/zxing.jar" >
+            <srcfiles dir= "." includes="build/obj/**/*.class" />
+        </uptodate>
+        <condition property="shouldListChanges" >
+            <and>
+                <not>
+                    <isset property="jar.uptodate" />
+                </not>
+                <isset property="mtn.available" />
+            </and>
+        </condition>
+    </target>
+    
+    <target name="javadoc">
+        <mkdir dir="./build" />
+        <mkdir dir="./build/javadoc" />
+        <javadoc 
+            sourcepath="./core/src/main/java" destdir="./build/javadoc" 
+            packagenames="*" 
+            use="true" 
+            splitindex="true" 
+            windowtitle="zxing library subset" />
+    </target>
+    <target name="clean">
+        <delete dir="./build" />
+	<delete dir="./buildTest" />
+    </target>
+    <target name="cleandep" depends="clean">
+    </target>
+    <target name="distclean" depends="clean">
+    </target>
+</project>