diff --git a/dev/core/src/com/google/gwt/core/ext/linker/impl/HostedModeTemplate.js b/dev/core/src/com/google/gwt/core/ext/linker/impl/HostedModeTemplate.js
index a4d9394..6c76a97 100644
--- a/dev/core/src/com/google/gwt/core/ext/linker/impl/HostedModeTemplate.js
+++ b/dev/core/src/com/google/gwt/core/ext/linker/impl/HostedModeTemplate.js
@@ -337,6 +337,9 @@
   function onBodyDone() {
     if (!bodyDone) {
       bodyDone = true;
+// __MODULE_STYLES_BEGIN__
+     // Style resources are injected here to prevent operation aborted errors on ie
+// __MODULE_STYLES_END__
       maybeStartModule();
 
       if ($doc.removeEventListener) {
@@ -385,9 +388,9 @@
     }
   }, 50);
 
-// __MODULE_DEPS_BEGIN__
-  // Module dependencies, such as scripts and css
-// __MODULE_DEPS_END__
+// __MODULE_SCRIPTS_BEGIN__
+  // Script resources are injected here
+// __MODULE_SCRIPTS_END__
   $doc.write('<script>__MODULE_FUNC__.onInjectionDone(\'__MODULE_NAME__\')</script>');
 }
 
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 9fc76f7..71d941b 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
@@ -189,14 +189,17 @@
     int startPos;
 
     // Add external dependencies
-    startPos = selectionScript.indexOf("// __MODULE_DEPS_END__");
+    startPos = selectionScript.indexOf("// __MODULE_STYLES_END__");
     if (startPos != -1) {
       for (StylesheetReference resource : artifacts.find(StylesheetReference.class)) {
         String text = generateStylesheetInjector(resource.getSrc());
         selectionScript.insert(startPos, text);
         startPos += text.length();
       }
+    }
 
+    startPos = selectionScript.indexOf("// __MODULE_SCRIPTS_END__");
+    if (startPos != -1) {
       for (ScriptReference resource : artifacts.find(ScriptReference.class)) {
         String text = generateScriptInjector(resource.getSrc());
         selectionScript.insert(startPos, text);
@@ -276,22 +279,32 @@
     return selectionScript.toString();
   }
 
+  /**
+   * Generate a snippit of JavaScript to inject an external stylesheet.
+   * 
+   * <pre>
+   * if (!__gwt_stylesLoaded['URL']) {
+   *   var l = $doc.createElement('link');
+   *   __gwt_styleLoaded['URL'] = l;
+   *   l.setAttribute('rel', 'stylesheet');
+   *   l.setAttribute('href', HREF_EXPR);
+   *   $doc.getElementsByTagName('head')[0].appendChild(l);
+   * }
+   * </pre>
+   */
   protected String generateStylesheetInjector(String stylesheetUrl) {
+    String hrefExpr = "'" + stylesheetUrl + "'";
     if (isRelativeURL(stylesheetUrl)) {
-      return "  if (!__gwt_stylesLoaded['"
-          + stylesheetUrl
-          + "']) {\n"
-          + "    __gwt_stylesLoaded['"
-          + stylesheetUrl
-          + "'] = true;\n"
-          + "    document.write('<link rel=\\\"stylesheet\\\" href=\\\"'+base+'"
-          + stylesheetUrl + "\\\">');\n" + "  }\n";
-    } else {
-      return "  if (!__gwt_stylesLoaded['" + stylesheetUrl + "']) {\n"
-          + "    __gwt_stylesLoaded['" + stylesheetUrl + "'] = true;\n"
-          + "    document.write('<link rel=\\\"stylesheet\\\" href=\\\""
-          + stylesheetUrl + "\\\">');\n" + "  }\n";
+      hrefExpr = "base + " + hrefExpr;
     }
+
+    return "if (!__gwt_stylesLoaded['" + stylesheetUrl + "']) {\n           "
+        + "  var l = $doc.createElement('link');\n                          "
+        + "  __gwt_stylesLoaded['" + stylesheetUrl + "'] = l;\n             "
+        + "  l.setAttribute('rel', 'stylesheet');\n                         "
+        + "  l.setAttribute('href', " + hrefExpr + ");\n                    "
+        + "  $doc.getElementsByTagName('head')[0].appendChild(l);\n         "
+        + "}\n";
   }
 
   protected abstract String getCompilationExtension(TreeLogger logger,
diff --git a/dev/core/src/com/google/gwt/core/linker/IFrameTemplate.js b/dev/core/src/com/google/gwt/core/linker/IFrameTemplate.js
index 8596941..496f3ee 100644
--- a/dev/core/src/com/google/gwt/core/linker/IFrameTemplate.js
+++ b/dev/core/src/com/google/gwt/core/linker/IFrameTemplate.js
@@ -305,6 +305,9 @@
   function onBodyDone() {
     if (!bodyDone) {
       bodyDone = true;
+// __MODULE_STYLES_BEGIN__
+     // Style resources are injected here to prevent operation aborted errors on ie
+// __MODULE_STYLES_END__
       maybeStartModule();
 
       if ($doc.removeEventListener) {
@@ -353,9 +356,9 @@
     }
   }, 50);
 
-// __MODULE_DEPS_BEGIN__
-  // Module dependencies, such as scripts and css
-// __MODULE_DEPS_END__
+// __MODULE_SCRIPTS_BEGIN__
+  // Script resources are injected here
+// __MODULE_SCRIPTS_END__
   $doc.write('<script>__MODULE_FUNC__.onInjectionDone(\'__MODULE_NAME__\')</script>');
 }
 
diff --git a/dev/core/src/com/google/gwt/core/linker/SingleScriptTemplate.js b/dev/core/src/com/google/gwt/core/linker/SingleScriptTemplate.js
index 4b27ee7..179d0ba 100644
--- a/dev/core/src/com/google/gwt/core/linker/SingleScriptTemplate.js
+++ b/dev/core/src/com/google/gwt/core/linker/SingleScriptTemplate.js
@@ -221,6 +221,9 @@
   function onBodyDone() {
     if (!bodyDone) {
       bodyDone = true;
+// __MODULE_STYLES_BEGIN__
+     // Style resources are injected here to prevent operation aborted errors on ie
+// __MODULE_STYLES_END__
       maybeStartModule();
 
       if ($doc.removeEventListener) {
@@ -244,9 +247,9 @@
     }
   }, 50);
 
-// __MODULE_DEPS_BEGIN__
-  // Module dependencies, such as scripts and css
-// __MODULE_DEPS_END__
+// __MODULE_SCRIPTS_BEGIN__
+  // Script resources are injected here
+// __MODULE_SCRIPTS_END__
 }
 
 // Called from compiled code to hook the window's resize & load events (the
diff --git a/dev/core/src/com/google/gwt/core/linker/XSTemplate.js b/dev/core/src/com/google/gwt/core/linker/XSTemplate.js
index 5cc6ca4..24bcb8a 100644
--- a/dev/core/src/com/google/gwt/core/linker/XSTemplate.js
+++ b/dev/core/src/com/google/gwt/core/linker/XSTemplate.js
@@ -278,6 +278,9 @@
   function onBodyDone() {
     if (!bodyDone) {
       bodyDone = true;
+// __MODULE_STYLES_BEGIN__
+     // Style resources are injected here to prevent operation aborted errors on ie
+// __MODULE_STYLES_END__
       maybeStartModule();
 
       if ($doc.removeEventListener) {
@@ -316,9 +319,9 @@
     // intentionally silent on property failure
     return;
   }  
-// __MODULE_DEPS_BEGIN__
-  // Module dependencies, such as scripts and css
-// __MODULE_DEPS_END__
+// __MODULE_SCRIPTS_BEGIN__
+  // Script resources are injected here
+// __MODULE_SCRIPTS_END__
   $doc.write('<script src="' + base + strongName + '"></script>');
   $stats && $stats('__MODULE_NAME__', 'startup', 'moduleRequested', {millis:(new Date()).getTime()});
 }
