diff --git a/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardCompilationResult.java b/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardCompilationResult.java
index af9e753..3a99ca3 100644
--- a/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardCompilationResult.java
+++ b/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardCompilationResult.java
@@ -69,7 +69,7 @@
 
   private static final DiskCache diskCache = new DiskCache();
 
-  private final long jsToken;
+  private final long jsToken[];
 
   private final SortedSet<SortedMap<SelectionProperty, String>> propertyValues = new TreeSet<SortedMap<SelectionProperty, String>>(
       MAP_COMPARATOR);
@@ -78,11 +78,14 @@
 
   private final long symbolToken;
 
-  public StandardCompilationResult(String strongName, String[] js,
+  public StandardCompilationResult(String strongName, byte[][] js,
       byte[] serializedSymbolMap) {
     super(StandardLinkerContext.class);
     this.strongName = strongName;
-    jsToken = diskCache.writeObject(js);
+    jsToken = new long[js.length];
+    for (int i = 0; i < jsToken.length; ++i) {
+      jsToken[i] = diskCache.writeByteArray(js[i]);
+    }
     symbolToken = diskCache.writeByteArray(serializedSymbolMap);
   }
 
@@ -99,7 +102,11 @@
 
   @Override
   public String[] getJavaScript() {
-    return diskCache.readObject(jsToken, String[].class);
+    String[] js = new String[jsToken.length];
+    for (int i = 0; i < jsToken.length; ++i) {
+      js[i] = diskCache.readString(jsToken[i]);
+    }
+    return js;
   }
 
   @Override
diff --git a/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardLinkerContext.java b/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardLinkerContext.java
index 790c0a1..424fb28 100644
--- a/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardLinkerContext.java
+++ b/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardLinkerContext.java
@@ -292,8 +292,8 @@
       throws UnableToCompleteException {
     PermutationResult permutationResult = resultFile.newInstance(logger);
 
-    String[] js = permutationResult.getJs();
-    String strongName = Util.computeStrongName(Util.getBytes(js));
+    byte[][] js = permutationResult.getJs();
+    String strongName = Util.computeStrongName(js);
     StandardCompilationResult result = resultsByStrongName.get(strongName);
     if (result == null) {
       result = new StandardCompilationResult(strongName, js,
diff --git a/dev/core/src/com/google/gwt/dev/PermutationResult.java b/dev/core/src/com/google/gwt/dev/PermutationResult.java
index f180acd..77cabf5 100644
--- a/dev/core/src/com/google/gwt/dev/PermutationResult.java
+++ b/dev/core/src/com/google/gwt/dev/PermutationResult.java
@@ -30,9 +30,9 @@
   ArtifactSet getArtifacts();
 
   /**
-   * The compiled JavaScript code.
+   * The compiled JavaScript code as UTF8 bytes.
    */
-  String[] getJs();
+  byte[][] getJs();
 
   /**
    * The symbol map for the permutation.
diff --git a/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java b/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java
index 0c61aac..f9c9849 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java
@@ -135,11 +135,15 @@
 
   private static class PermutationResultImpl implements PermutationResult {
     private final ArtifactSet artifacts = new ArtifactSet();
-    private final String[] js;
+    private final byte[][] js;
     private final byte[] serializedSymbolMap;
 
     public PermutationResultImpl(String[] js, SymbolData[] symbolMap) {
-      this.js = js;
+      byte[][] bytes = new byte[js.length][];
+      for (int i = 0; i < js.length; ++i) {
+        bytes[i] = Util.getBytes(js[i]);
+      }
+      this.js = bytes;
       try {
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         Util.writeObjectToStream(baos, (Object) symbolMap);
@@ -154,7 +158,7 @@
       return artifacts;
     }
 
-    public String[] getJs() {
+    public byte[][] getJs() {
       return js;
     }
 
