diff --git a/dev/core/src/com/google/gwt/dev/DevMode.java b/dev/core/src/com/google/gwt/dev/DevMode.java
index f2015bc..96fd661 100644
--- a/dev/core/src/com/google/gwt/dev/DevMode.java
+++ b/dev/core/src/com/google/gwt/dev/DevMode.java
@@ -325,6 +325,9 @@
       TreeLogger moduleBranch = branch.branch(TreeLogger.INFO, moduleName);
       try {
         ModuleDef module = loadModule(moduleBranch, moduleName, false);
+        // Create a hard reference to the module to avoid gc-ing it until we
+        // actually load the module from the browser.
+        startupModules.put(module.getName(), module);
         Util.recursiveDelete(options.getShellBaseWorkDir(module), false);
         validateServletTags(moduleBranch, servletValidator, module, webXml);
         TreeLogger loadLogger = moduleBranch.branch(TreeLogger.DEBUG,
diff --git a/dev/core/src/com/google/gwt/dev/DevModeBase.java b/dev/core/src/com/google/gwt/dev/DevModeBase.java
index 8725416..c5782e7 100644
--- a/dev/core/src/com/google/gwt/dev/DevModeBase.java
+++ b/dev/core/src/com/google/gwt/dev/DevModeBase.java
@@ -55,6 +55,7 @@
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.IdentityHashMap;
 import java.util.List;
@@ -96,6 +97,8 @@
         // Try to find an existing loaded version of the module def.
         ModuleDef moduleDef = loadModule(logger, moduleName, true);
         assert (moduleDef != null);
+        // Release the hard reference to the module if it is present.
+        startupModules.remove(moduleDef.getName());
 
         ShellModuleSpaceHost host = doCreateShellModuleSpaceHost(logger,
             moduleDef.getCompilationState(logger), moduleDef);
@@ -354,6 +357,8 @@
     }
   }
 
+  protected static final Map<String, ModuleDef> startupModules = new HashMap<String, ModuleDef>();
+  
   /**
    * Handles the -whitelist command line flag.
    */
diff --git a/dev/core/src/com/google/gwt/dev/cfg/ModuleDefLoader.java b/dev/core/src/com/google/gwt/dev/cfg/ModuleDefLoader.java
index 8455bff..72862ae 100644
--- a/dev/core/src/com/google/gwt/dev/cfg/ModuleDefLoader.java
+++ b/dev/core/src/com/google/gwt/dev/cfg/ModuleDefLoader.java
@@ -28,6 +28,7 @@
 import java.io.Reader;
 import java.net.URISyntaxException;
 import java.net.URL;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
@@ -60,11 +61,17 @@
 
   /**
    * Keep soft references to loaded modules so the VM can gc them when memory is
-   * tight.
+   * tight.  The module's physical name is used as a key.
    */
   @SuppressWarnings("unchecked")
   private static final Map<String, ModuleDef> loadedModules = new ReferenceMap(
       AbstractReferenceMap.HARD, AbstractReferenceMap.SOFT);
+  
+  /**
+   * A mapping from effective to physical module names.
+   */
+  private static final Map<String, String> moduleEffectiveNameToPhysicalName =
+    new HashMap<String, String>();
 
   /**
    * Creates a module in memory that is not associated with a
@@ -96,7 +103,8 @@
   }
 
   /**
-   * Loads a new module from the class path.
+   * Loads a new module from the class path.  Equivalent to
+   * {@link #loadFromClassPath(logger, moduleName, false)}.
    * 
    * @param logger logs the process
    * @param moduleName the module to load
@@ -107,7 +115,7 @@
       throws UnableToCompleteException {
     return loadFromClassPath(logger, moduleName, false);
   }
-
+  
   /**
    * Loads a new module from the class path.
    * 
@@ -119,6 +127,12 @@
    */
   public static ModuleDef loadFromClassPath(TreeLogger logger,
       String moduleName, boolean refresh) throws UnableToCompleteException {
+    // Look up the module's physical name; if null, we are either encountering
+    // the module for the first time, or else the name is already physical
+    String physicalName = moduleEffectiveNameToPhysicalName.get(moduleName);
+    if (physicalName != null) {
+      moduleName = physicalName;
+    }
     ModuleDef moduleDef = tryGetLoadedModule(logger, moduleName, refresh);
     if (moduleDef != null) {
       return moduleDef;
@@ -275,8 +289,8 @@
     // Add the "physical" module name: com.google.Module
     loadedModules.put(moduleName, moduleDef);
 
-    // Add the module's effective name: some.other.Module
-    loadedModules.put(moduleDef.getName(), moduleDef);
+    // Add a mapping from the module's effective name to its physical name
+    moduleEffectiveNameToPhysicalName.put(moduleDef.getName(), moduleName);
     return moduleDef;
   }
 }
