diff --git a/dev/core/src/com/google/gwt/core/ext/linker/impl/SelectionScriptLinker.java b/dev/core/src/com/google/gwt/core/ext/linker/impl/SelectionScriptLinker.java
index 3e9003c..9f08655 100644
--- a/dev/core/src/com/google/gwt/core/ext/linker/impl/SelectionScriptLinker.java
+++ b/dev/core/src/com/google/gwt/core/ext/linker/impl/SelectionScriptLinker.java
@@ -115,7 +115,7 @@
        * called from the legacy link method.
        */
       for (CompilationResult compilation : toReturn.find(CompilationResult.class)) {
-        toReturn.addAll(doEmitCompilation(logger, context, compilation));
+        toReturn.addAll(doEmitCompilation(logger, context, compilation, artifacts));
       }
       return toReturn;
     } else {
@@ -137,11 +137,11 @@
   }
   
   protected Collection<Artifact<?>> doEmitCompilation(TreeLogger logger,
-      LinkerContext context, CompilationResult result)
+      LinkerContext context, CompilationResult result, ArtifactSet artifacts)
       throws UnableToCompleteException {
     String[] js = result.getJavaScript();
     byte[][] bytes = new byte[js.length][];
-    bytes[0] = generatePrimaryFragment(logger, context, result, js);
+    bytes[0] = generatePrimaryFragment(logger, context, result, js, artifacts);
     for (int i = 1; i < js.length; i++) {
       bytes[i] = Util.getBytes(generateDeferredFragment(logger, context, i,
           js[i]));
@@ -227,22 +227,23 @@
    * {@link #getModuleSuffix(TreeLogger, LinkerContext)}.
    */
   protected byte[] generatePrimaryFragment(TreeLogger logger,
-      LinkerContext context, CompilationResult result, String[] js)
-      throws UnableToCompleteException {
+      LinkerContext context, CompilationResult result, String[] js,
+      ArtifactSet artifacts) throws UnableToCompleteException {
     TextOutput to = new DefaultTextOutput(context.isOutputCompact());
     to.print(generatePrimaryFragmentString(
-        logger, context, result.getStrongName(), js[0], js.length));
+        logger, context, result.getStrongName(), js[0], js.length, artifacts));
     return Util.getBytes(to.toString());
   }
   
   protected String generatePrimaryFragmentString(TreeLogger logger,
-      LinkerContext context, String strongName, String js, int length) 
+      LinkerContext context, String strongName, String js, int length,
+      ArtifactSet artifacts) 
   throws UnableToCompleteException {
     StringBuffer b = new StringBuffer();
     b.append(getModulePrefix(logger, context, strongName, length));
     b.append(js);
     b.append(getModuleSuffix(logger, context));
-    return wrapPrimaryFragment(logger, context, b.toString());
+    return wrapPrimaryFragment(logger, context, b.toString(), artifacts);
   }
   
   protected String generateSelectionScript(TreeLogger logger,
@@ -358,7 +359,7 @@
   }
 
   protected String wrapPrimaryFragment(TreeLogger logger,
-      LinkerContext context, String script) {
+      LinkerContext context, String script, ArtifactSet artifacts) {
     return script;
   }
 
diff --git a/dev/core/src/com/google/gwt/core/linker/CrossSiteIframeLinker.java b/dev/core/src/com/google/gwt/core/linker/CrossSiteIframeLinker.java
index 8ea1b9e..2c00afa 100644
--- a/dev/core/src/com/google/gwt/core/linker/CrossSiteIframeLinker.java
+++ b/dev/core/src/com/google/gwt/core/linker/CrossSiteIframeLinker.java
@@ -211,7 +211,7 @@
         "com/google/gwt/core/ext/linker/impl/" + filename, logger); 
 
     String script = generatePrimaryFragmentString(
-        logger, context, "", buffer.toString(), 1);
+        logger, context, "", buffer.toString(), 1, artifacts);
     
     EmittedArtifact devArtifact = 
       emitString(logger, script, filename, lastModified);
@@ -261,11 +261,11 @@
   
   @Override
   protected String wrapPrimaryFragment(TreeLogger logger,
-      LinkerContext context, String script) {
+      LinkerContext context, String script, ArtifactSet artifacts) {
     StringBuffer out = new StringBuffer();
     if (shouldIncludeBootstrapInPrimaryFragment(context)) {
       try {
-        out.append(generateSelectionScript(logger, context, null));
+        out.append(generateSelectionScript(logger, context, artifacts));
       } catch (UnableToCompleteException e) {
         logger.log(TreeLogger.ERROR, "Problem setting up selection script", e);
         e.printStackTrace();
diff --git a/dev/core/src/com/google/gwt/core/linker/IFrameLinker.java b/dev/core/src/com/google/gwt/core/linker/IFrameLinker.java
index 77e80ff..33f3e69 100644
--- a/dev/core/src/com/google/gwt/core/linker/IFrameLinker.java
+++ b/dev/core/src/com/google/gwt/core/linker/IFrameLinker.java
@@ -18,12 +18,13 @@
 import com.google.gwt.core.ext.LinkerContext;
 import com.google.gwt.core.ext.TreeLogger;
 import com.google.gwt.core.ext.UnableToCompleteException;
+import com.google.gwt.core.ext.linker.ArtifactSet;
 import com.google.gwt.core.ext.linker.CompilationResult;
 import com.google.gwt.core.ext.linker.ConfigurationProperty;
 import com.google.gwt.core.ext.linker.LinkerOrder;
+import com.google.gwt.core.ext.linker.LinkerOrder.Order;
 import com.google.gwt.core.ext.linker.Shardable;
 import com.google.gwt.core.ext.linker.StatementRanges;
-import com.google.gwt.core.ext.linker.LinkerOrder.Order;
 import com.google.gwt.core.ext.linker.impl.SelectionScriptLinker;
 import com.google.gwt.dev.About;
 import com.google.gwt.dev.util.DefaultTextOutput;
@@ -120,8 +121,8 @@
    */
   @Override
   protected byte[] generatePrimaryFragment(TreeLogger logger,
-      LinkerContext context, CompilationResult result, String[] js)
-      throws UnableToCompleteException {
+      LinkerContext context, CompilationResult result, String[] js,
+      ArtifactSet artifacts) throws UnableToCompleteException {
     StringBuffer b = new StringBuffer();
     b.append(getModulePrefix(logger, context, result.getStrongName(), js.length));
     b.append(splitPrimaryJavaScript(result.getStatementRanges()[0], js[0],
diff --git a/dev/core/src/com/google/gwt/core/linker/SingleScriptLinker.java b/dev/core/src/com/google/gwt/core/linker/SingleScriptLinker.java
index d5516bc..5296cc8 100644
--- a/dev/core/src/com/google/gwt/core/linker/SingleScriptLinker.java
+++ b/dev/core/src/com/google/gwt/core/linker/SingleScriptLinker.java
@@ -61,7 +61,7 @@
 
   @Override
   protected Collection<Artifact<?>> doEmitCompilation(TreeLogger logger,
-      LinkerContext context, CompilationResult result)
+      LinkerContext context, CompilationResult result, ArtifactSet artifacts)
       throws UnableToCompleteException {
     if (result.getJavaScript().length != 1) {
       logger.branch(TreeLogger.ERROR,
@@ -69,7 +69,7 @@
               + getDescription() + " Linker.", null);
       throw new UnableToCompleteException();
     }
-    return super.doEmitCompilation(logger, context, result);
+    return super.doEmitCompilation(logger, context, result, artifacts);
   }
 
   @Override
