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 826df7b..fdc5741 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java
@@ -154,8 +154,8 @@
       throws UnableToCompleteException {
     JMethod bootStrapMethod = program.createMethod(
         program.createSourceInfoSynthetic("Bootstrap method"),
-        "init".toCharArray(), null, program.getTypeVoid(), false, true, true,
-        false, false);
+        "init".toCharArray(), program.getIndexedType("EntryMethodHolder"),
+        program.getTypeVoid(), false, true, true, false, false);
     bootStrapMethod.freezeParamTypes();
 
     JMethodBody body = (JMethodBody) bootStrapMethod.getBody();
diff --git a/dev/core/src/com/google/gwt/dev/jjs/ast/JProgram.java b/dev/core/src/com/google/gwt/dev/jjs/ast/JProgram.java
index 4eca433..d4c81dc7 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/ast/JProgram.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/ast/JProgram.java
@@ -66,7 +66,8 @@
           "java.lang.Iterable", "java.util.Iterator",
           "com.google.gwt.core.client.GWT",
           "com.google.gwt.core.client.JavaScriptObject",
-          "com.google.gwt.lang.ClassLiteralHolder",}));
+          "com.google.gwt.lang.ClassLiteralHolder",
+          "com.google.gwt.lang.EntryMethodHolder",}));
 
   static final Map<String, Set<String>> traceMethods = new HashMap<String, Set<String>>();
 
@@ -269,6 +270,7 @@
   }
 
   public void addEntryMethod(JMethod entryPoint) {
+    assert entryPoint.isStatic();
     if (!entryMethods.contains(entryPoint)) {
       entryMethods.add(entryPoint);
     }
@@ -404,6 +406,7 @@
       JReferenceType enclosingType, JType returnType, boolean isAbstract,
       boolean isStatic, boolean isFinal, boolean isPrivate, boolean isNative) {
     assert (name != null);
+    assert (enclosingType != null);
     assert (returnType != null);
     assert (!isAbstract || !isNative);
 
@@ -863,7 +866,6 @@
 
   public void traverse(JVisitor visitor, Context ctx) {
     if (visitor.visit(this, ctx)) {
-      visitor.accept(entryMethods);
       visitor.accept(allTypes);
     }
     visitor.endVisit(this, ctx);
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java b/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java
index 23f9aa2..8224714 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java
@@ -376,6 +376,18 @@
 
     private final JsName prototype = objectScope.declareName("prototype");
 
+    /**
+     * The JavaScript functions corresponding to the entry methods of the
+     * program ({@link JProgram#entryMethods}).
+     */
+    private JsFunction[] entryFunctions;
+
+    /**
+     * A reverse index for {@link JProgram#entryMethods}.  Each entry method
+     * is mapped to its integer index.
+     */
+    private Map<JMethod, Integer> entryMethodToIndex;
+
     {
       globalTemp.setObfuscatable(false);
       prototype.setObfuscatable(false);
@@ -835,6 +847,10 @@
       }
 
       push(jsFunc);
+      Integer entryIndex = entryMethodToIndex.get(x);
+      if (entryIndex != null) {
+        entryFunctions[entryIndex] = jsFunc;
+      }
       currentMethod = null;
     }
 
@@ -976,15 +992,7 @@
       // types don't push
 
       // Generate entry methods
-      List<JsFunction> entryFuncs = popList(x.entryMethods.size()); // entryMethods
-      for (int i = 0; i < entryFuncs.size(); ++i) {
-        JsFunction func = entryFuncs.get(i);
-        if (func != null) {
-          globalStmts.add(func.makeStmt());
-        }
-      }
-
-      generateGwtOnLoad(entryFuncs, globalStmts);
+      generateGwtOnLoad(entryFunctions, globalStmts);
       generateNullFunc(globalStmts);
 
       // Add a few things onto the beginning.
@@ -1128,6 +1136,16 @@
     }
 
     @Override
+    public boolean visit(JProgram x, Context ctx) {
+      entryFunctions = new JsFunction[x.entryMethods.size()];
+      entryMethodToIndex = new IdentityHashMap<JMethod, Integer>();
+      for (int i = 0; i < x.entryMethods.size(); i++) {
+        entryMethodToIndex.put(x.entryMethods.get(i), i);
+      }
+      return true;
+    }
+
+    @Override
     public boolean visit(JsniMethodBody x, Context ctx) {
       JsFunction jsFunc = x.getFunc();
 
@@ -1269,7 +1287,7 @@
       generateTypeId(x, globalStmts);
     }
 
-    private void generateGwtOnLoad(List<JsFunction> entryFuncs,
+    private void generateGwtOnLoad(JsFunction[] entryFuncs,
         List<JsStatement> globalStmts) {
       /**
        * <pre>
@@ -1319,8 +1337,7 @@
       JsBlock callBlock = new JsBlock(sourceInfo);
       jsIf.setElseStmt(callBlock);
       jsTry.setTryBlock(callBlock);
-      for (int i = 0; i < entryFuncs.size(); ++i) {
-        JsFunction func = entryFuncs.get(i);
+      for (JsFunction func : entryFuncs) {
         if (func != null) {
           JsInvocation call = new JsInvocation(sourceInfo);
           call.setQualifier(func.getName().makeRef(sourceInfo));
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/Pruner.java b/dev/core/src/com/google/gwt/dev/jjs/impl/Pruner.java
index a9e3662..f3bb111 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/Pruner.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/Pruner.java
@@ -640,6 +640,18 @@
 
     @Override
     public boolean visit(final JMethod x, Context ctx) {
+      JReferenceType enclosingType = x.getEnclosingType();
+      if (program.isJavaScriptObject(enclosingType)) {
+        // Calls to JavaScriptObject types rescue those types.
+        boolean instance = !x.isStatic() || program.isStaticImpl(x);
+        rescue(enclosingType, true, instance);
+      }
+
+      if (x.isStatic()) {
+        // JLS 12.4.1: references to static methods rescue the enclosing class
+        rescue(enclosingType, true, false);
+      }
+
       if (x.isNative()) {
         // Manually rescue native parameter references
         final JsniMethodBody body = (JsniMethodBody) x.getBody();
@@ -667,17 +679,7 @@
 
     @Override
     public boolean visit(JMethodCall call, Context ctx) {
-      JMethod target = call.getTarget();
-      JReferenceType enclosingType = target.getEnclosingType();
-      if (program.isJavaScriptObject(enclosingType)) {
-        // Calls to JavaScriptObject types rescue those types.
-        boolean instance = !target.isStatic() || program.isStaticImpl(target);
-        rescue(enclosingType, true, instance);
-      } else if (target.isStatic()) {
-        // JLS 12.4.1: references to static methods rescue the enclosing class
-        rescue(enclosingType, true, false);
-      }
-      rescue(target);
+      rescue(call.getTarget());
       return true;
     }
 
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/SourceGenerationVisitor.java b/dev/core/src/com/google/gwt/dev/jjs/impl/SourceGenerationVisitor.java
index fa8e23b..9817428 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/SourceGenerationVisitor.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/SourceGenerationVisitor.java
@@ -107,12 +107,6 @@
 
   @Override
   public boolean visit(JProgram x, Context ctx) {
-    for (int i = 0; i < x.entryMethods.size(); ++i) {
-      JMethod method = x.entryMethods.get(i);
-      accept(method);
-      newline();
-      newline();
-    }
     for (int i = 0; i < x.getDeclaredTypes().size(); ++i) {
       JReferenceType type = x.getDeclaredTypes().get(i);
       accept(type);
diff --git a/dev/core/super/com/google/gwt/dev/jjs/intrinsic/com/google/gwt/lang/EntryMethodHolder.java b/dev/core/super/com/google/gwt/dev/jjs/intrinsic/com/google/gwt/lang/EntryMethodHolder.java
new file mode 100644
index 0000000..8464c59
--- /dev/null
+++ b/dev/core/super/com/google/gwt/dev/jjs/intrinsic/com/google/gwt/lang/EntryMethodHolder.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2008 Google Inc.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.google.gwt.lang;
+
+/**
+ * This class holds the boot strap entry method that the compiler generates.
+ */
+public class EntryMethodHolder {
+
+}
