diff --git a/dev/core/src/com/google/gwt/dev/shell/GWTShellServlet.java b/dev/core/src/com/google/gwt/dev/shell/GWTShellServlet.java
index b483799..754658c 100644
--- a/dev/core/src/com/google/gwt/dev/shell/GWTShellServlet.java
+++ b/dev/core/src/com/google/gwt/dev/shell/GWTShellServlet.java
@@ -309,9 +309,7 @@
       String moduleName) throws IOException {
 
     if (partialPath.equals(moduleName + ".nocache.js")) {
-      // If the '?compiled' request property is specified, don't auto-generate.
-      String compiledParam = request.getParameter("compiled");
-      if (compiledParam == null) {
+      if (request.getParameter("compiled") == null) {
         // Generate the .js file.
         try {
           String js = genSelectionScript(logger, moduleName);
diff --git a/dev/core/src/com/google/gwt/dev/shell/LowLevel.java b/dev/core/src/com/google/gwt/dev/shell/LowLevel.java
index 39441b0..4e0102b 100644
--- a/dev/core/src/com/google/gwt/dev/shell/LowLevel.java
+++ b/dev/core/src/com/google/gwt/dev/shell/LowLevel.java
@@ -84,24 +84,7 @@
 
   public static synchronized void init() {
     if (!sInitialized) {
-      String libName = "gwt-ll";
-      try {
-        String installPath = Utility.getInstallPath();
-        try {
-          // try to make absolute
-          installPath = new File(installPath).getCanonicalPath();
-        } catch (IOException e) {
-          // ignore problems, failures will occur when the libs try to load
-        }
-        System.load(installPath + '/' + System.mapLibraryName(libName));
-      } catch (UnsatisfiedLinkError e) {
-        StringBuffer sb = new StringBuffer();
-        sb.append("Unable to load required native library '" + libName
-            + "'.  Detailed error:\n");
-        sb.append(e.getMessage() + ")\n\n");
-        sb.append("Your GWT installation may be corrupt");
-        throw new UnsatisfiedLinkError(sb.toString());
-      }
+      // TODO(jat): load native code for IE proxy handling?
       sInitialized = true;
     }
   }
diff --git a/dev/core/src/com/google/gwt/dev/shell/ModuleSpace.java b/dev/core/src/com/google/gwt/dev/shell/ModuleSpace.java
index 01426ad..7b1f50f 100644
--- a/dev/core/src/com/google/gwt/dev/shell/ModuleSpace.java
+++ b/dev/core/src/com/google/gwt/dev/shell/ModuleSpace.java
@@ -499,8 +499,6 @@
    */
   protected final JsValue invokeNative(String name, Object jthis,
       Class<?>[] types, Object[] args) throws Throwable {
-    // Whenever a native method is invoked, release any enqueued cleanup objects
-    JsValue.mainThreadCleanup();
     JsValue result = doInvoke(name, jthis, types, args);
     // Is an exception active?
     Throwable thrown = sCaughtJavaExceptionObject.get();
diff --git a/dev/core/src/com/google/gwt/util/tools/ToolBase.java b/dev/core/src/com/google/gwt/util/tools/ToolBase.java
index ab4fac7..6f03156 100644
--- a/dev/core/src/com/google/gwt/util/tools/ToolBase.java
+++ b/dev/core/src/com/google/gwt/util/tools/ToolBase.java
@@ -17,8 +17,6 @@
 
 import com.google.gwt.dev.About;
 
-import java.io.File;
-import java.io.IOException;
 import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.Map;
@@ -50,17 +48,6 @@
 
   private static final String PROPERTY_NOWARN_LEGACY_TOOLS = "gwt.nowarn.legacy.tools";
 
-  static {
-    String installPath = Utility.getInstallPath();
-    try {
-      // try to make absolute
-      installPath = new File(installPath).getCanonicalPath();
-    } catch (IOException e) {
-      // ignore problems, failures will occur when the libs try to load
-    }
-    System.setProperty("swt.library.path", installPath + '/');
-  }
-
   public static void legacyWarn(Class<?> legacy, Class<?> replacement) {
     if (System.getProperty(PROPERTY_NOWARN_LEGACY_TOOLS) == null) {
       System.err.println("WARNING: '" + legacy.getName()
diff --git a/dev/oophm/overlay/com/google/gwt/dev/shell/JsValue.java b/dev/oophm/overlay/com/google/gwt/dev/shell/JsValue.java
index 3ba91bb..d43d552 100644
--- a/dev/oophm/overlay/com/google/gwt/dev/shell/JsValue.java
+++ b/dev/oophm/overlay/com/google/gwt/dev/shell/JsValue.java
@@ -53,14 +53,6 @@
   }
 
   /**
-   * The main thread should call this from time to time to release hosted-mode
-   * objects that Java is no longer referencing.
-   */
-  public static void mainThreadCleanup() {
-    // Do nothing in OOPHM.
-  }
-
-  /**
    * Get the value of the object as a boolean. May attempt to convert the value
    * to a boolean if it is not a boolean.
    * 
diff --git a/eclipse/README.txt b/eclipse/README.txt
index f250b26..36d9704 100644
--- a/eclipse/README.txt
+++ b/eclipse/README.txt
@@ -145,15 +145,14 @@
 Window->Preferences->Run/Debug->String Substitution->New...
 Set the Name to "gwt_devjar".
 Set the Value to the approprate path for your install -- for example:
-  <path-to-trunk>\trunk\build\staging\gwt-windows-0.0.0\gwt-dev-windows.jar
-  <path-to-trunk>/trunk/build/staging/gwt-linux-0.0.0/gwt-dev-linux.jar
-  <path-to-trunk>/trunk/build/staging/gwt-mac-0.0.0/gwt-dev-mac.jar
+  <path-to-trunk>\trunk\build\staging\gwt-0.0.0\gwt-dev.jar
+  <path-to-trunk>/trunk/build/staging/gwt-0.0.0/gwt-dev.jar
 Description can be left blank.
 
 
 == Importing the GWT core projects ==
 
-1) Import the 'gwt-dev-<platform>' and 'gwt-user' projects
+1) Import the 'gwt-dev' and 'gwt-user' projects
 
   File->Import->General->Existing Projects into Workspace->Next
   Browse to the 'trunk/eclipse' folder and select it
@@ -162,19 +161,13 @@
   Inside this folder are a number of .projects files, only a few of
   which you will need to get started. You may import others later.
 
-  Select 'gwt-dev-<platform>' appropriate to your OS
+  Select 'gwt-dev'
   Select 'gwt-user'
   Select any of the GWT samples as you want.  The most useful ones are:
     - Hello: very simple project useful as a little playground
     - Showcase: complex UI application
     - DynaTable: uses RPC
   Then press the Finish button.
-  
-  Non-windows users: By default, gwt-user depends on gwt-dev-windows, which you
-  will not have imported.  You must update the gwt-user project configuration
-  to depend on gwt-dev-linux or gwt-dev-mac (whichever one you imported).  This
-  can be done by editing gwt-user's .classpath file directly, or through the IDE
-  under Project->Properties->Java Build Path->Projects.
 
 2) Dismiss the welcome tab if you are setting up an Eclipse workspace
   for the first time.
@@ -222,21 +215,7 @@
   Deselect All
   Select 'Hello'
 
-2) Non-windows users: Replace the gwt-dev-windows project dependency and paths.
-
-  Run->Open Run Dialog...->Java Application->Hello
-  Select the 'Classpath' tab
-  Remove gwt-dev-windows paths
-  Select 'User Entries'
-  Advanced->Add Folder-> Add gwt-dev-<platform>/core/super
-  Select the (default classpath) item and use the 'Down' button
-    to make it the last item in the list.
-  You could also just edit Hello.launch and search/replace "windows" with
-    "linux" or "mac".
-
-3) Repeat step 2 for the 'Hello compile' project.
-
-4) Now you should be able to run the 'Hello' project from the
+2) Now you should be able to run the 'Hello' project from the
   Run dialog!
 
 
@@ -311,7 +290,7 @@
   <project>/src
   gwt-user/core/src
   gwt-user/core/super
-  gwt-dev-<platform>/core/super
+  gwt-dev/core/super
 
   Now, select the default classpath (Hello) and move it all the way
   to the bottom of the list using the 'Down' button.
