diff --git a/user/src/com/google/gwt/user/User.gwt.xml b/user/src/com/google/gwt/user/User.gwt.xml
index 87c4bb7..2e31cd1 100644
--- a/user/src/com/google/gwt/user/User.gwt.xml
+++ b/user/src/com/google/gwt/user/User.gwt.xml
@@ -21,6 +21,7 @@
    <inherits name="com.google.gwt.core.Core"/>
    <inherits name="com.google.gwt.event.Event"/>
    <inherits name="com.google.gwt.animation.Animation"/>
+   <inherits name="com.google.gwt.resources.Resources"/>
    <inherits name="com.google.gwt.user.AsyncProxy"/>
    <inherits name="com.google.gwt.user.RemoteService"/>
    <inherits name="com.google.gwt.user.DocumentRoot" />
diff --git a/user/src/com/google/gwt/user/client/impl/WindowImplIE.java b/user/src/com/google/gwt/user/client/impl/WindowImplIE.java
index 46ec347..386aa35 100644
--- a/user/src/com/google/gwt/user/client/impl/WindowImplIE.java
+++ b/user/src/com/google/gwt/user/client/impl/WindowImplIE.java
@@ -18,6 +18,8 @@
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.dom.client.Document;
 import com.google.gwt.dom.client.ScriptElement;
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.TextResource;
 import com.google.gwt.user.client.Command;
 
 /**
@@ -26,6 +28,31 @@
 public class WindowImplIE extends WindowImpl {
 
   /**
+   * The resources for this implementation.
+   */
+  public interface Resources extends ClientBundle {
+    Resources INSTANCE = GWT.create(Resources.class);
+
+    /**
+     * Contains the function body used to initialize the window close handler.
+     */
+    @Source("initWindowCloseHandler.js")
+    TextResource initWindowCloseHandler();
+
+    /**
+     * Contains the function body used to initialize the window resize handler.
+     */
+    @Source("initWindowResizeHandler.js")
+    TextResource initWindowResizeHandler();
+
+    /**
+     * Contains the function body used to initialize the window scroll handler.
+     */
+    @Source("initWindowScrollHandler.js")
+    TextResource initWindowScrollHandler();
+  }
+
+  /**
    * For IE6, reading from $wnd.location.hash drops part of the fragment if the
    * fragment contains a '?'. To avoid this bug, we use location.href instead.
    */
@@ -54,8 +81,8 @@
 
   @Override
   public void initWindowCloseHandler() {
-    initHandler(getWindowCloseHandlerMethodString(),
-        "__gwt_initWindowCloseHandler", new Command() {
+    initHandler(Resources.INSTANCE.initWindowCloseHandler().getText(),
+        new Command() {
           public void execute() {
             initWindowCloseHandlerImpl();
           }
@@ -64,8 +91,8 @@
 
   @Override
   public void initWindowResizeHandler() {
-    initHandler(getWindowResizeHandlerMethodString(),
-        "__gwt_initWindowResizeHandler", new Command() {
+    initHandler(Resources.INSTANCE.initWindowResizeHandler().getText(),
+        new Command() {
           public void execute() {
             initWindowResizeHandlerImpl();
           }
@@ -74,8 +101,8 @@
 
   @Override
   public void initWindowScrollHandler() {
-    initHandler(getWindowScrollHandlerMethodString(),
-        "__gwt_initWindowScrollHandler", new Command() {
+    initHandler(Resources.INSTANCE.initWindowScrollHandler().getText(),
+        new Command() {
           public void execute() {
             initWindowScrollHandlerImpl();
           }
@@ -83,110 +110,16 @@
   }
 
   /**
-   * This method defines a function that sinks an event on the Window.  However,
-   * this method returns the function as a String so it can be added to the
-   * outer window.
-   * 
-   * We need to declare this method on the outer window because you cannot
-   * attach Window listeners from within an iframe on IE6.
-   * 
-   * Per ECMAScript 262 spec 15.3.4.2, Function.prototype.toString() returns a
-   * string representation of the function that has the syntax of the function.
-   */
-  private native String getWindowCloseHandlerMethodString() /*-{
-    return function(beforeunload, unload) {
-      var wnd = window
-      , oldOnBeforeUnload = wnd.onbeforeunload
-      , oldOnUnload = wnd.onunload;
-      
-      wnd.onbeforeunload = function(evt) {
-        var ret, oldRet;
-        try {
-          ret = beforeunload();
-        } finally {
-          oldRet = oldOnBeforeUnload && oldOnBeforeUnload(evt);
-        }
-        // Avoid returning null as IE6 will coerce it into a string.
-        // Ensure that "" gets returned properly.
-        if (ret != null) {
-          return ret;
-        }
-        if (oldRet != null) {
-          return oldRet;
-        }
-        // returns undefined.
-      };
-      
-      wnd.onunload = function(evt) {
-        try {
-          unload();
-        } finally {
-          oldOnUnload && oldOnUnload(evt);
-          wnd.onresize = null;
-          wnd.onscroll = null;
-          wnd.onbeforeunload = null;
-          wnd.onunload = null;
-        }
-      };
-      
-      // Remove the reference once we've initialize the handler
-      wnd.__gwt_initWindowCloseHandler = undefined;
-    }.toString();
-  }-*/;
-
-  /**
-   * @see #getWindowCloseHandlerMethodString()
-   */
-  private native String getWindowResizeHandlerMethodString() /*-{
-    return function(resize) {
-      var wnd = window, oldOnResize = wnd.onresize;
-      
-      wnd.onresize = function(evt) {
-        try {
-          resize();
-        } finally {
-          oldOnResize && oldOnResize(evt);
-        }
-      };
-      
-      // Remove the reference once we've initialize the handler
-      wnd.__gwt_initWindowResizeHandler = undefined;
-    }.toString();
-  }-*/;
-
-  /**
-   * @see #getWindowCloseHandlerMethodString()
-   */
-  private native String getWindowScrollHandlerMethodString() /*-{
-    return function(scroll) {
-      var wnd = window, oldOnScroll = wnd.onscroll;
-      
-      wnd.onscroll = function(evt) {
-        try {
-          scroll();
-        } finally {
-          oldOnScroll && oldOnScroll(evt);
-        }
-      };
-      
-      // Remove the reference once we've initialize the handler
-      wnd.__gwt_initWindowScrollHandler = undefined;
-    }.toString();
-  }-*/;
-
-  /**
    * IE6 does not allow direct access to event handlers on the parent window,
    * so we must embed a script in the parent window that will set the event
    * handlers in the correct context.
    * 
    * @param initFunc the string representation of the init function
-   * @param funcName the name to assign to the init function
    * @param cmd the command to execute the init function
    */
-  private void initHandler(String initFunc, String funcName, Command cmd) {
+  private void initHandler(String initFunc, Command cmd) {
     if (GWT.isClient()) {
       // Embed the init script on the page
-      initFunc = initFunc.replaceFirst("function", "function " + funcName);
       ScriptElement scriptElem = Document.get().createScriptElement(initFunc);
       Document.get().getBody().appendChild(scriptElem);
   
diff --git a/user/src/com/google/gwt/user/client/impl/initWindowCloseHandler.js b/user/src/com/google/gwt/user/client/impl/initWindowCloseHandler.js
new file mode 100644
index 0000000..f0f923d
--- /dev/null
+++ b/user/src/com/google/gwt/user/client/impl/initWindowCloseHandler.js
@@ -0,0 +1,38 @@
+function __gwt_initWindowCloseHandler(beforeunload, unload) {
+  var wnd = window
+  , oldOnBeforeUnload = wnd.onbeforeunload
+  , oldOnUnload = wnd.onunload;
+  
+  wnd.onbeforeunload = function(evt) {
+    var ret, oldRet;
+    try {
+      ret = beforeunload();
+    } finally {
+      oldRet = oldOnBeforeUnload && oldOnBeforeUnload(evt);
+    }
+    // Avoid returning null as IE6 will coerce it into a string.
+    // Ensure that "" gets returned properly.
+    if (ret != null) {
+      return ret;
+    }
+    if (oldRet != null) {
+      return oldRet;
+    }
+    // returns undefined.
+  };
+  
+  wnd.onunload = function(evt) {
+    try {
+      unload();
+    } finally {
+      oldOnUnload && oldOnUnload(evt);
+      wnd.onresize = null;
+      wnd.onscroll = null;
+      wnd.onbeforeunload = null;
+      wnd.onunload = null;
+    }
+  };
+  
+  // Remove the reference once we've initialize the handler
+  wnd.__gwt_initWindowCloseHandler = undefined;
+}
diff --git a/user/src/com/google/gwt/user/client/impl/initWindowResizeHandler.js b/user/src/com/google/gwt/user/client/impl/initWindowResizeHandler.js
new file mode 100644
index 0000000..f1631be
--- /dev/null
+++ b/user/src/com/google/gwt/user/client/impl/initWindowResizeHandler.js
@@ -0,0 +1,14 @@
+function __gwt_initWindowResizeHandler(resize) {
+  var wnd = window, oldOnResize = wnd.onresize;
+  
+  wnd.onresize = function(evt) {
+    try {
+      resize();
+    } finally {
+      oldOnResize && oldOnResize(evt);
+    }
+  };
+  
+  // Remove the reference once we've initialize the handler
+  wnd.__gwt_initWindowResizeHandler = undefined;
+}
diff --git a/user/src/com/google/gwt/user/client/impl/initWindowScrollHandler.js b/user/src/com/google/gwt/user/client/impl/initWindowScrollHandler.js
new file mode 100644
index 0000000..3713092
--- /dev/null
+++ b/user/src/com/google/gwt/user/client/impl/initWindowScrollHandler.js
@@ -0,0 +1,14 @@
+function __gwt_initWindowScrollHandler(scroll) {
+  var wnd = window, oldOnScroll = wnd.onscroll;
+  
+  wnd.onscroll = function(evt) {
+    try {
+      scroll();
+    } finally {
+      oldOnScroll && oldOnScroll(evt);
+    }
+  };
+  
+  // Remove the reference once we've initialize the handler
+  wnd.__gwt_initWindowScrollHandler = undefined;
+}
