diff --git a/src/com/google/typography/font/compression/CompressionStats.java b/src/com/google/typography/font/compression/CompressionStats.java
index d065fbf..9b5caee 100644
--- a/src/com/google/typography/font/compression/CompressionStats.java
+++ b/src/com/google/typography/font/compression/CompressionStats.java
@@ -15,7 +15,7 @@
  */
 public class CompressionStats {
 
-  public enum Size { ORIGINAL, GZIP, WOFF2 }
+  public enum Size { ORIGINAL, GZIP, WOFF, WOFF2 }
 
   private final List<Stats> values = Lists.newArrayList();
 
diff --git a/src/com/google/typography/font/compression/CsvReport.java b/src/com/google/typography/font/compression/CsvReport.java
index 993bec6..4125a23 100644
--- a/src/com/google/typography/font/compression/CsvReport.java
+++ b/src/com/google/typography/font/compression/CsvReport.java
@@ -17,14 +17,14 @@
   public static void create(CompressionStats stats, String filename) throws IOException {
     PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(filename)));
     try {
-      writer.printf("'Font', 'Original (bytes)', 'GZIP (bytes)', 'WOFF 2.0 (bytes)', '%% Improvement'\n");
+      writer.printf("Font, Original (bytes), WOFF 1.0 (bytes), WOFF 2.0 (bytes), %% Improvement\n");
       for (CompressionStats.Stats stat : stats.values()) {
         writer.printf("%s, %d, %d, %d, %.2f%%\n",
             stat.getFilename(),
             stat.getSize(CompressionStats.Size.ORIGINAL),
-            stat.getSize(CompressionStats.Size.GZIP),
+            stat.getSize(CompressionStats.Size.WOFF),
             stat.getSize(CompressionStats.Size.WOFF2),
-            stat.getPercent(CompressionStats.Size.GZIP, CompressionStats.Size.WOFF2));
+            stat.getPercent(CompressionStats.Size.WOFF, CompressionStats.Size.WOFF2));
       }
     } finally {
       Closeables.closeQuietly(writer);
diff --git a/src/com/google/typography/font/compression/SimpleRunner.java b/src/com/google/typography/font/compression/SimpleRunner.java
index c8fbece..7e7ce38 100644
--- a/src/com/google/typography/font/compression/SimpleRunner.java
+++ b/src/com/google/typography/font/compression/SimpleRunner.java
@@ -19,7 +19,7 @@
 
   private static final FontFactory FONT_FACTORY = FontFactory.getInstance();
 
-  private static final String GZIP = "gzip";
+  private static final String WOFF = "woff";
   private static final String WOFF2 = "woff2/lzma";
 
   private static final String TRUETYPE = "glyf/cbbox,triplet,code,reslice";
@@ -47,13 +47,13 @@
         byte[] bytes = Files.toByteArray(file);
         Font font = FONT_FACTORY.loadFonts(bytes)[0];
 
-        byte[] gzip = Experiment.run(font, GZIP);
+        byte[] woff = Experiment.run(font, WOFF);
         byte[] woff2 = Experiment.run(font, getOptions(font));
 
         CompressionStats.Stats stat = CompressionStats.Stats.builder()
             .setFilename(file.getName())
             .setSize(CompressionStats.Size.ORIGINAL, bytes.length)
-            .setSize(CompressionStats.Size.GZIP, gzip.length)
+            .setSize(CompressionStats.Size.WOFF, woff.length)
             .setSize(CompressionStats.Size.WOFF2, woff2.length)
             .build();
         stats.add(stat);
@@ -61,9 +61,9 @@
         System.out.printf("> %s, %d, %d, %d, %.2f%%\n",
             stat.getFilename(),
             stat.getSize(CompressionStats.Size.ORIGINAL),
-            stat.getSize(CompressionStats.Size.GZIP),
+            stat.getSize(CompressionStats.Size.WOFF),
             stat.getSize(CompressionStats.Size.WOFF2),
-            stat.getPercent(CompressionStats.Size.GZIP, CompressionStats.Size.WOFF2));
+            stat.getPercent(CompressionStats.Size.WOFF, CompressionStats.Size.WOFF2));
 
       } catch (Throwable t) {
         System.err.printf("WARNING: failed to compress: %s\n", filename);
