diff --git a/build-tools/doctool/src/com/google/doctool/JreDocTool.java b/build-tools/doctool/src/com/google/doctool/JreDocTool.java
index 7f33ce0..40b7b5c 100644
--- a/build-tools/doctool/src/com/google/doctool/JreDocTool.java
+++ b/build-tools/doctool/src/com/google/doctool/JreDocTool.java
@@ -39,6 +39,9 @@
       } else if (null != (arg = tryParseArg(args, i, "-classpath"))) {
         i++;
         factory.setClasspath(arg);
+      } else if (null != (arg = tryParseArg(args, i, "-out"))) {
+        i++;
+        factory.setOutputFile(arg);
       } else if (null != (arg = tryParseArg(args, i, "-packages"))) {
         i++;
         factory.setPackages(arg);
@@ -69,6 +72,8 @@
     s += "  -sourcepath\n";
     s += "    The path to find Java source for this doc set.\n";
     s += "    E.g. /gwt/src/trunk/user/super/com/google/gwt/emul\n";
+    s += "  -out\n";
+    s += "    The path and filename of the output file\n";
     s += "  -packages\n";
     s += "    A semicolon-separated list of fully-qualified package names.\n";
     s += "    E.g. java.lang;java.lang.annotation;java.util;java.io;java.sql\n";
@@ -112,12 +117,16 @@
 
   private String classpath;
 
+  private String outputFile;
+
   private String packages;
 
   private String sourcepath;
 
-  JreDocTool(String classpath, String packages, String sourcepath) {
+  JreDocTool(String classpath, String outputFile, String packages,
+      String sourcepath) {
     this.classpath = classpath;
+    this.outputFile = outputFile;
     this.packages = packages;
     this.sourcepath = sourcepath;
   }
@@ -141,6 +150,9 @@
     args.add("-sourcepath");
     args.add(this.sourcepath);
 
+    args.add(EztDoclet.OPT_EZTFILE);
+    args.add(this.outputFile);
+
     args.addAll(Arrays.asList(this.packages.split(";")));
 
     com.sun.tools.javadoc.Main.execute(args.toArray(new String[0]));
diff --git a/build-tools/doctool/src/com/google/doctool/JreDocToolFactory.java b/build-tools/doctool/src/com/google/doctool/JreDocToolFactory.java
index d131be7..0e7ac66 100644
--- a/build-tools/doctool/src/com/google/doctool/JreDocToolFactory.java
+++ b/build-tools/doctool/src/com/google/doctool/JreDocToolFactory.java
@@ -25,6 +25,8 @@
 
   private String classpath;
 
+  private String outputFile;
+
   private String packages;
 
   private String sourcepath;
@@ -35,6 +37,11 @@
       return null;
     }
 
+    if (this.outputFile == null) {
+      err.println("You must specify the output file (-out)");
+      return null;
+    }
+
     if (this.packages == null) {
       err.println("You must specify the -packages");
       return null;
@@ -45,13 +52,17 @@
       return null;
     }
 
-    return new JreDocTool(classpath, packages, sourcepath);
+    return new JreDocTool(classpath, outputFile, packages, sourcepath);
   }
 
   public void setClasspath(String classpath) {
     this.classpath = classpath;
   }
 
+  public void setOutputFile(String outputFile) {
+    this.outputFile = outputFile;
+  }
+
   public void setPackages(String packages) {
     this.packages = packages;
   }
diff --git a/build-tools/doctool/src/com/google/doctool/custom/EztDoclet.java b/build-tools/doctool/src/com/google/doctool/custom/EztDoclet.java
index 4fc4dbc..b19f9fe 100644
--- a/build-tools/doctool/src/com/google/doctool/custom/EztDoclet.java
+++ b/build-tools/doctool/src/com/google/doctool/custom/EztDoclet.java
@@ -17,10 +17,14 @@
 package com.google.doctool.custom;
 
 import com.sun.javadoc.ClassDoc;
+import com.sun.javadoc.DocErrorReporter;
 import com.sun.javadoc.ExecutableMemberDoc;
 import com.sun.javadoc.PackageDoc;
 import com.sun.javadoc.RootDoc;
 
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -34,15 +38,29 @@
  */
 public class EztDoclet {
 
-  private static final String JAVADOC_URL = "http://java.sun.com/javase/6/docs/api/";
+  public static final String OPT_EZTFILE = "-eztfile";
 
   private static EztDoclet EZT_DOCLET;
 
+  private static final String JAVADOC_URL = "http://java.sun.com/javase/6/docs/api/";
+
+  public static int optionLength(String option) {
+    if (option.equals(OPT_EZTFILE)) {
+      return 2;
+    }
+    return 0;
+  }
+
   public static boolean start(RootDoc root) {
     getDoclet().process(root);
     return true;
   }
 
+  public static boolean validOptions(String[][] options,
+      DocErrorReporter reporter) {
+    return getDoclet().analyzeOptions(options, reporter);
+  }
+
   private static EztDoclet getDoclet() {
     if (EZT_DOCLET == null) {
       EZT_DOCLET = new EztDoclet();
@@ -50,6 +68,24 @@
     return EZT_DOCLET;
   }
 
+  private String outputFile;
+
+  private boolean analyzeOptions(String[][] options, DocErrorReporter reporter) {
+    for (int i = 0; i < options.length; i++) {
+      if (options[i][0] == OPT_EZTFILE) {
+        outputFile = options[i][1];
+      }
+    }
+
+    if (outputFile == null) {
+      reporter.printError("You must specify an output filepath with "
+          + OPT_EZTFILE);
+      return false;
+    }
+
+    return true;
+  }
+
   private String createMemberList(Collection<ExecutableMemberDoc> members) {
     StringBuffer buffer = new StringBuffer();
     Iterator<ExecutableMemberDoc> iter = members.iterator();
@@ -64,54 +100,61 @@
   }
 
   private void process(RootDoc root) {
-    PrintWriter pw = new PrintWriter(System.out, true);
+    try {
+      File outFile = new File(outputFile);
+      outFile.getParentFile().mkdirs();
+      FileWriter fw = new FileWriter(outFile);
+      PrintWriter pw = new PrintWriter(fw, true);
 
-    pw.println("<ol class=\"toc\" id=\"pageToc\">");
-    for (PackageDoc pack : root.specifiedPackages()) {
-      pw.format("  <li><a href=\"#Package_%s\">%s</a></li>\n",
-          pack.name().replace('.', '_'), pack.name());
-    }
-    pw.println("</ol>\n");
-
-    for (PackageDoc pack : root.specifiedPackages()) {
-      pw.format("<h1 id=\"Package_%s\">Package %s</h1>\n", pack.name().replace(
-          '.', '_'), pack.name());
-      pw.println("<dl>");
-
-      String packURL = JAVADOC_URL + pack.name().replace(".", "/") + "/";
-
-      // Sort the classes alphabetically
-      ClassDoc[] classes = pack.allClasses(true);
-      Arrays.sort(classes, new Comparator<ClassDoc>() {
-        public int compare(ClassDoc arg0, ClassDoc arg1) {
-          return arg0.name().compareTo(arg1.name());
-        }
-      });
-
-      Iterator<ClassDoc> iter = Arrays.asList(classes).iterator();
-      while (iter.hasNext()) {
-        ClassDoc cls = iter.next();
-
-        // Each class links to Sun's main JavaDoc
-        pw.format("  <dt><a href=\"%s%s.html\">%s</a></dt>\n", packURL,
-            cls.name(), cls.name());
-
-        // Print out all constructors and methods
-        Collection<ExecutableMemberDoc> members = new ArrayList<ExecutableMemberDoc>();
-        members.addAll(Arrays.asList(cls.constructors(true)));
-        members.addAll(Arrays.asList(cls.methods(true)));
-
-        if (!members.isEmpty()) {
-          pw.format("  <dd>%s</dd>\n", createMemberList(members));
-        }
-
-        if (iter.hasNext()) {
-          pw.print("\n");
-        }
+      pw.println("<ol class=\"toc\" id=\"pageToc\">");
+      for (PackageDoc pack : root.specifiedPackages()) {
+        pw.format("  <li><a href=\"#Package_%s\">%s</a></li>\n",
+            pack.name().replace('.', '_'), pack.name());
       }
+      pw.println("</ol>\n");
 
-      pw.println("</dl>\n");
+      for (PackageDoc pack : root.specifiedPackages()) {
+        pw.format("<h1 id=\"Package_%s\">Package %s</h1>\n",
+            pack.name().replace('.', '_'), pack.name());
+        pw.println("<dl>");
+
+        String packURL = JAVADOC_URL + pack.name().replace(".", "/") + "/";
+
+        // Sort the classes alphabetically
+        ClassDoc[] classes = pack.allClasses(true);
+        Arrays.sort(classes, new Comparator<ClassDoc>() {
+          public int compare(ClassDoc arg0, ClassDoc arg1) {
+            return arg0.name().compareTo(arg1.name());
+          }
+        });
+
+        Iterator<ClassDoc> iter = Arrays.asList(classes).iterator();
+        while (iter.hasNext()) {
+          ClassDoc cls = iter.next();
+
+          // Each class links to Sun's main JavaDoc
+          pw.format("  <dt><a href=\"%s%s.html\">%s</a></dt>\n", packURL,
+              cls.name(), cls.name());
+
+          // Print out all constructors and methods
+          Collection<ExecutableMemberDoc> members = new ArrayList<ExecutableMemberDoc>();
+          members.addAll(Arrays.asList(cls.constructors(true)));
+          members.addAll(Arrays.asList(cls.methods(true)));
+
+          if (!members.isEmpty()) {
+            pw.format("  <dd>%s</dd>\n", createMemberList(members));
+          }
+
+          if (iter.hasNext()) {
+            pw.print("\n");
+          }
+        }
+
+        pw.println("</dl>\n");
+      }
+      pw.close();
+    } catch (IOException e) {
+      throw new RuntimeException(e);
     }
-    pw.close();
   }
 }
diff --git a/doc/build.xml b/doc/build.xml
index 7f4be01..8c31465 100644
--- a/doc/build.xml
+++ b/doc/build.xml
@@ -100,23 +100,21 @@
     </outofdate>
   </target>
 
-  <target name="wiki-lang">
+  <target name="emul-ezt">
     <outofdate>
       <sourcefiles>
-        <fileset file="./src/RefJreHeader.wiki" />
         <fileset dir="${gwt.root}/user/super/com/google/gwt/emul">
           <include name="**/*.java" />
         </fileset>
       </sourcefiles>
       <targetfiles>
-        <pathelement path="${project.build}/wiki/RefJreEmulation.wiki" />
+        <pathelement path="${project.build}/emul-ezt/fragment.html" />
       </targetfiles>
       <sequential>
+        <echo>Building JRE emulation EZT</echo>
         <java classpathref="DOC_PATH" classname="com.google.doctool.JreDocTool" fork="yes" failonerror="true">
           <arg value="-out" />
-          <arg value="${project.build}/wiki/RefJreEmulation.wiki" />
-          <arg value="-header" />
-          <arg value="./src/RefJreHeader.wiki" />
+          <arg value="${project.build}/emul-ezt/fragment.html" />
           <arg value="-classpath" />
           <arg pathref="USER_CLASS_PATH" />
           <arg value="-sourcepath" />
@@ -128,5 +126,5 @@
     </outofdate>
   </target>
 
-  <target name="build" depends="javadoc, wiki-lang" />
+  <target name="build" depends="javadoc, emul-ezt" />
 </project>
