diff --git a/dev/core/src/com/google/gwt/core/ext/linker/CompilationResult.java b/dev/core/src/com/google/gwt/core/ext/linker/CompilationResult.java
index a8ffdd9..ee24177 100644
--- a/dev/core/src/com/google/gwt/core/ext/linker/CompilationResult.java
+++ b/dev/core/src/com/google/gwt/core/ext/linker/CompilationResult.java
@@ -42,6 +42,11 @@
   public abstract String[] getJavaScript();
 
   /**
+   * Returns the permutation ID
+   */
+  public abstract int getPermutationId();
+  
+  /**
    * Provides values for {@link SelectionProperty} instances that are not
    * explicitly set during the compilation phase. This method will return
    * multiple mappings, one for each permutation that resulted in the
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 3b2d540..131eed6 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
@@ -71,6 +71,8 @@
   private static final DiskCache diskCache = new DiskCache();
 
   private final long jsToken[];
+  
+  private final int permutationId;
 
   private final SortedSet<SortedMap<SelectionProperty, String>> propertyValues = new TreeSet<SortedMap<SelectionProperty, String>>(
       MAP_COMPARATOR);
@@ -82,7 +84,7 @@
   private final long symbolToken;
 
   public StandardCompilationResult(String strongName, byte[][] js,
-      byte[] serializedSymbolMap, StatementRanges[] statementRanges) {
+      byte[] serializedSymbolMap, StatementRanges[] statementRanges, int permutationId) {
     super(StandardLinkerContext.class);
     this.strongName = strongName;
     jsToken = new long[js.length];
@@ -91,6 +93,7 @@
     }
     symbolToken = diskCache.writeByteArray(serializedSymbolMap);
     this.statementRanges = statementRanges;
+    this.permutationId = permutationId;
   }
 
   /**
@@ -114,6 +117,11 @@
   }
 
   @Override
+  public int getPermutationId() {
+    return permutationId;
+  }
+  
+  @Override
   public SortedSet<SortedMap<SelectionProperty, String>> getPropertyMap() {
     return Collections.unmodifiableSortedSet(propertyValues);
   }
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 c93b9d3..259dbb5 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
@@ -351,7 +351,7 @@
     if (result == null) {
       result = new StandardCompilationResult(strongName, js,
           permutationResult.getSerializedSymbolMap(),
-          permutationResult.getStatementRanges());
+          permutationResult.getStatementRanges(), permutationResult.getPermutationId());
       resultsByStrongName.put(result.getStrongName(), result);
       artifacts.add(result);
 
diff --git a/dev/core/src/com/google/gwt/core/linker/SymbolMapsLinker.java b/dev/core/src/com/google/gwt/core/linker/SymbolMapsLinker.java
index 9082a2a..3d3ed90 100644
--- a/dev/core/src/com/google/gwt/core/linker/SymbolMapsLinker.java
+++ b/dev/core/src/com/google/gwt/core/linker/SymbolMapsLinker.java
@@ -89,6 +89,9 @@
    */
   protected void doWriteSymbolMap(TreeLogger logger, CompilationResult result,
       PrintWriter pw) throws UnableToCompleteException {
+    
+    pw.println("# { " + result.getPermutationId() + " }");
+    
     for (SortedMap<SelectionProperty, String> map : result.getPropertyMap()) {
       pw.print("# { ");
 
diff --git a/dev/core/src/com/google/gwt/dev/PermutationResult.java b/dev/core/src/com/google/gwt/dev/PermutationResult.java
index c1cba6d..13ac2e2 100644
--- a/dev/core/src/com/google/gwt/dev/PermutationResult.java
+++ b/dev/core/src/com/google/gwt/dev/PermutationResult.java
@@ -36,6 +36,11 @@
   byte[][] getJs();
 
   /**
+   * The ID of the permutation.
+   */
+  int getPermutationId();
+  
+  /**
    * The symbol map for the permutation.
    */
   byte[] getSerializedSymbolMap();
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 4c9282a..0384271 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java
@@ -137,9 +137,10 @@
     private final byte[][] js;
     private final byte[] serializedSymbolMap;
     private final StatementRanges[] statementRanges;
-
+    private final int permutationId;
+    
     public PermutationResultImpl(String[] js, SymbolData[] symbolMap,
-        StatementRanges[] statementRanges) {
+        StatementRanges[] statementRanges, int permutationId) {
       byte[][] bytes = new byte[js.length][];
       for (int i = 0; i < js.length; ++i) {
         bytes[i] = Util.getBytes(js[i]);
@@ -154,6 +155,7 @@
             e);
       }
       this.statementRanges = statementRanges;
+      this.permutationId = permutationId;
     }
 
     public ArtifactSet getArtifacts() {
@@ -163,6 +165,10 @@
     public byte[][] getJs() {
       return js;
     }
+    
+    public int getPermutationId() {
+      return permutationId;
+    }
 
     public byte[] getSerializedSymbolMap() {
       return serializedSymbolMap;
@@ -322,7 +328,7 @@
       }
 
       PermutationResult toReturn = new PermutationResultImpl(js,
-          makeSymbolMap(symbolTable), ranges);
+          makeSymbolMap(symbolTable), ranges, permutationId);
 
       toReturn.getArtifacts().add(
           makeSoycArtifact(logger, permutationId, jprogram, js, sourceInfoMaps));
