diff --git a/dev/core/src/com/google/gwt/core/ext/linker/impl/PermutationsUtil.java b/dev/core/src/com/google/gwt/core/ext/linker/impl/PermutationsUtil.java
index a9e5e50..39fd942 100644
--- a/dev/core/src/com/google/gwt/core/ext/linker/impl/PermutationsUtil.java
+++ b/dev/core/src/com/google/gwt/core/ext/linker/impl/PermutationsUtil.java
@@ -80,7 +80,7 @@
    * @return the modified selectionScript buffer
    * @throws UnableToCompleteException
    */
-  public StringBuilder addPermutationsJs(StringBuilder selectionScript,
+  public StringBuffer addPermutationsJs(StringBuffer selectionScript,
       TreeLogger logger, LinkerContext context)
       throws UnableToCompleteException {
     int startPos;
diff --git a/dev/core/src/com/google/gwt/core/ext/linker/impl/PropertiesUtil.java b/dev/core/src/com/google/gwt/core/ext/linker/impl/PropertiesUtil.java
index d533757..4134f74 100644
--- a/dev/core/src/com/google/gwt/core/ext/linker/impl/PropertiesUtil.java
+++ b/dev/core/src/com/google/gwt/core/ext/linker/impl/PropertiesUtil.java
@@ -52,7 +52,7 @@
     return propertiesJs.toString();
   }
 
-  public static StringBuilder addPropertiesJs(StringBuilder selectionScript,
+  public static StringBuffer addPropertiesJs(StringBuffer selectionScript,
       TreeLogger logger, LinkerContext context)
       throws UnableToCompleteException {
     int startPos;
diff --git a/dev/core/src/com/google/gwt/core/ext/linker/impl/ResourceInjectionUtil.java b/dev/core/src/com/google/gwt/core/ext/linker/impl/ResourceInjectionUtil.java
index ad7e006..8061ac3 100644
--- a/dev/core/src/com/google/gwt/core/ext/linker/impl/ResourceInjectionUtil.java
+++ b/dev/core/src/com/google/gwt/core/ext/linker/impl/ResourceInjectionUtil.java
@@ -30,7 +30,7 @@
   /**
    * Installs stylesheets and scripts.
    */
-  public static StringBuilder injectResources(StringBuilder selectionScript,
+  public static StringBuffer injectResources(StringBuffer selectionScript,
       ArtifactSet artifacts) {
     // Add external dependencies
     int startPos = selectionScript.indexOf("// __MODULE_STYLES_END__");
@@ -62,7 +62,7 @@
    * installOneStylesheet(URL);
    * </pre>
    */
-  public static StringBuilder injectStylesheets(StringBuilder selectionScript,
+  public static StringBuffer injectStylesheets(StringBuffer selectionScript,
       ArtifactSet artifacts) {
     int startPos = selectionScript.indexOf("// __MODULE_STYLES__");
     if (startPos != -1) {
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 8990152..a828dab 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
@@ -156,7 +156,7 @@
     return sb.toString();
   }
 
-  protected static void replaceAll(StringBuilder buf, String search,
+  protected static void replaceAll(StringBuffer buf, String search,
       String replace) {
     int len = search.length();
     for (int pos = buf.indexOf(search); pos >= 0; pos = buf.indexOf(search,
@@ -318,7 +318,7 @@
    * Generate a selection script. The selection information should previously have been scanned
    * using {@link PermutationsUtil#setupPermutationsMap(ArtifactSet)}.
    */
-  protected String fillSelectionScriptTemplate(StringBuilder selectionScript,
+  protected String fillSelectionScriptTemplate(StringBuffer selectionScript,
       TreeLogger logger, LinkerContext context, ArtifactSet artifacts,
       CompilationResult result) throws
       UnableToCompleteException {
@@ -429,7 +429,7 @@
       LinkerContext context, ArtifactSet artifacts, CompilationResult result)
       throws UnableToCompleteException {
     String selectionScriptText;
-    StringBuilder buffer = readFileToStringBuilder(
+    StringBuffer buffer = readFileToStringBuffer(
         getSelectionScriptTemplate(logger, context), logger);
     selectionScriptText = fillSelectionScriptTemplate(
         buffer, logger, context, artifacts, result);
@@ -599,11 +599,11 @@
     return;
   }
 
-  protected StringBuilder readFileToStringBuilder(String filename,
+  protected StringBuffer readFileToStringBuffer(String filename,
       TreeLogger logger) throws UnableToCompleteException {
-    StringBuilder buffer;
+    StringBuffer buffer;
     try {
-      buffer = new StringBuilder(Utility.getFileFromClassPath(filename));
+      buffer = new StringBuffer(Utility.getFileFromClassPath(filename));
     } catch (IOException e) {
       logger.log(TreeLogger.ERROR, "Unable to read file: " + filename, e);
       throw new UnableToCompleteException();
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 ea6c598..dde1c6c 100644
--- a/dev/core/src/com/google/gwt/core/linker/CrossSiteIframeLinker.java
+++ b/dev/core/src/com/google/gwt/core/linker/CrossSiteIframeLinker.java
@@ -66,7 +66,7 @@
   }
 
   @Override
-  protected String fillSelectionScriptTemplate(StringBuilder ss, TreeLogger logger,
+  protected String fillSelectionScriptTemplate(StringBuffer ss, TreeLogger logger,
       LinkerContext context, ArtifactSet artifacts, CompilationResult result)
       throws UnableToCompleteException {
 
@@ -539,7 +539,7 @@
     return def;
   }
 
-  protected void includeJs(StringBuilder selectionScript, TreeLogger logger, String jsSource,
+  protected void includeJs(StringBuffer selectionScript, TreeLogger logger, String jsSource,
       String templateVar) throws UnableToCompleteException {
     String js;
     if (jsSource.endsWith(".js")) {
@@ -572,8 +572,8 @@
     }
 
     long lastModified = System.currentTimeMillis();
-    StringBuilder buffer =
-        readFileToStringBuilder("com/google/gwt/core/ext/linker/impl/" + filename, logger);
+    StringBuffer buffer =
+        readFileToStringBuffer("com/google/gwt/core/ext/linker/impl/" + filename, logger);
 
     String outputFilename = filename;
     if (result != null) {
