diff --git a/installer/java/build.xml b/installer/java/build.xml
index aba97d938552b43945de80618d01ac0e0a679c29..be911236a587fdb5d5e6856c8164bf02c8d5646a 100644
--- a/installer/java/build.xml
+++ b/installer/java/build.xml
@@ -49,6 +49,7 @@
             <fileset dir="../../core/java/build/obj" includes="**/FileUtil.class"/>
             <fileset dir="./build/obj" includes="**" />
             <manifest>
+                <attribute name="Main-Class" value="net.i2p.installer.Main" />
                 <attribute name="Built-By" value="${build.built-by}" />
                 <attribute name="Build-Date" value="${build.timestamp}" />
                 <attribute name="Base-Revision" value="${workspace.version}" />
diff --git a/installer/java/src/net/i2p/installer/Main.java b/installer/java/src/net/i2p/installer/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..7cdd7607c7e3fe98dbe7c405fa57503f4b37fd25
--- /dev/null
+++ b/installer/java/src/net/i2p/installer/Main.java
@@ -0,0 +1,36 @@
+package net.i2p.installer;
+
+/**
+ * <p>
+ * Execute one of the other classes in this package.
+ * Workaround for izpack bug #162 / our bug #912
+ * http://jira.codehaus.org/browse/IZPACK-162
+ * http://trac.i2p2.i2p/ticket/912
+ * </p>
+ * Usage: <code>copy|delete|exec|fixwinpaths args...</code><br>
+ *
+ * @since 0.9.6
+ */
+public class Main {
+
+    private static final String USAGE = "Usage: {copy|delete|exec|fixwinpaths} [args...]";
+
+    public static void main(String args[]) {
+        if (args.length == 0)
+            throw new IllegalArgumentException(USAGE);
+        String cmd = args[0];
+        String[] shift = new String[args.length - 1];
+        if (shift.length > 0)
+            System.arraycopy(args, 1, shift, 0, shift.length);
+        if (cmd.equals("copy"))
+            Copy.main(shift);
+        else if (cmd.equals("delete"))
+            Delete.main(shift);
+        else if (cmd.equals("exec"))
+            Exec.main(shift);
+        else if (cmd.equals("fixwinpaths"))
+            FixWinPaths.main(shift);
+        else
+            throw new IllegalArgumentException(USAGE);
+    }
+}