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 277ddf2..3bbb4a2 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
@@ -46,8 +46,8 @@
 
   ; // end of global vars
 
-  // Only fire the event if really hosted mode; in web mode the compiled
-  // selection script will fire its own startup event.
+  // Only fire the event if really Development Mode; in Production Mode the
+  // compiled selection script will fire its own startup event.
   if (isHostedMode()) {
     $stats && $stats({
       moduleName: '__MODULE_NAME__',
@@ -92,7 +92,7 @@
     if (scriptsDone && loadDone) {
       var iframe = $doc.getElementById('__MODULE_NAME__');
       var frameWnd = iframe.contentWindow;
-      // inject hosted mode property evaluation function
+      // inject Development Mode property evaluation function
       if (isHostedMode()) {
         frameWnd.__gwt_getProperty = function(name) {
           return computePropValue(name);
@@ -353,7 +353,7 @@
   computeScriptBase();
 
 // __SHELL_SERVLET_ONLY_BEGIN__
-  // Force shell servlet to serve compiled output for web mode
+  // Force shell servlet to serve compiled output for Production Mode
   if (!isHostedMode()) {
     $doc.write('<script src="' + base + '__MODULE_NAME__.nocache.js?compiled"></script>');
     return;
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 63c5a29..6666bc1 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
@@ -163,10 +163,10 @@
       LinkerContext context, ArtifactSet artifacts)
       throws UnableToCompleteException {
     /*
-     * Last modified is important to keep hosted mode refreses from clobbering
-     * web mode compiles. We set the timestamp on the hosted mode selection
-     * script to the same mod time as the module (to allow updates). For web
-     * mode, we just set it to now.
+     * Last modified is important to keep Development Mode refreses from
+     * clobbering Production Mode compiles. We set the timestamp on the
+     * Development Mode selection script to the same mod time as the module (to
+     * allow updates). For Production Mode, we just set it to now.
      */
     long lastModified;
     if (permutationsUtil.getPermutationsMap().isEmpty()) {
@@ -302,7 +302,7 @@
 
   
   /**
-   * Add the hosted file to the artifact set.
+   * Add the Development Mode file to the artifact set.
    */
   protected void maybeAddHostedModeFile(TreeLogger logger, 
       LinkerContext context, ArtifactSet artifacts, CompilationResult result)
diff --git a/dev/core/src/com/google/gwt/core/ext/linker/impl/devmode.js b/dev/core/src/com/google/gwt/core/ext/linker/impl/devmode.js
index 7aa71ee..af4f42b 100644
--- a/dev/core/src/com/google/gwt/core/ext/linker/impl/devmode.js
+++ b/dev/core/src/com/google/gwt/core/ext/linker/impl/devmode.js
@@ -168,7 +168,7 @@
 
 
 /******************************************************************************
- * Helper functions for the DevMode startup code. Listed alphabetically
+ * Helper functions for the Development Mode startup code. Listed alphabetically
  *****************************************************************************/
 function disconnectPlugin() {
   try {
@@ -306,7 +306,7 @@
   if ($errFn) {
     $errFn($moduleName);
   } else {
-    alert("Plugin failed to connect to hosted mode server at " + codeServer);
+    alert("Plugin failed to connect to Development Mode server at " + codeServer);
     loadIframe("http://code.google.com/p/google-web-toolkit/wiki/TroubleshootingOOPHM");
   }
 }
@@ -342,7 +342,7 @@
 
 
 /******************************************************************************
- * DevMode startup code
+ * Development Mode startup code
  *****************************************************************************/
 function gwtOnLoad(errFn, moduleName, moduleBase, softPermutationId, computePropValue) {
   $errFn = errFn;
diff --git a/dev/core/src/com/google/gwt/core/ext/linker/impl/hosted.html b/dev/core/src/com/google/gwt/core/ext/linker/impl/hosted.html
index 8c2830f..ed99ccf 100644
--- a/dev/core/src/com/google/gwt/core/ext/linker/impl/hosted.html
+++ b/dev/core/src/com/google/gwt/core/ext/linker/impl/hosted.html
@@ -290,7 +290,7 @@
       if (errFn) {
         errFn(modName);
       } else {
-        alert("Plugin failed to connect to hosted mode server at " + $hosted);
+        alert("Plugin failed to connect to Development Mode server at " + $hosted);
         loadIframe("http://code.google.com/p/google-web-toolkit/wiki/TroubleshootingOOPHM");
       }
     }
@@ -308,7 +308,7 @@
 window.__gwt_module_id = 0;
 </script></head>
 <body>
-<font face='arial' size='-1'>This html file is for hosted mode support.</font>
+<font face='arial' size='-1'>This html file is for Development Mode support.</font>
 <script><!--
 // Lightweight metrics
 $stats && $stats({moduleName:$moduleName, sessionId:$sessionId, subSystem:'startup', evtGroup:'moduleStartup', millis:(new Date()).getTime(), type:'moduleEvalEnd'});
diff --git a/dev/core/src/com/google/gwt/dev/jdt/AbstractCompiler.java b/dev/core/src/com/google/gwt/dev/jdt/AbstractCompiler.java
index 572f539..4ff010b 100644
--- a/dev/core/src/com/google/gwt/dev/jdt/AbstractCompiler.java
+++ b/dev/core/src/com/google/gwt/dev/jdt/AbstractCompiler.java
@@ -561,7 +561,7 @@
      * This is useful as an optimization, but more importantly, it is useful to
      * compile against bytecode that was pre-compiled to which we don't have the
      * source. This ability is crucial bridging the gap between user-level and
-     * "dev" code in hosted mode for classes such as JavaScriptHost and
+     * "dev" code in Development Mode for classes such as JavaScriptHost and
      * ShellJavaScriptHost.
      */
     private void rememberPackage(String packageName) {
@@ -603,7 +603,7 @@
   public static CompilerOptions getCompilerOptions() {
     CompilerOptions options = JdtCompiler.getCompilerOptions();
 
-    // Turn off all debugging for web mode.
+    // Turn off all debugging for Production Mode.
     options.produceDebugAttributes = 0;
     options.preserveAllLocalVariables = false;
     return options;
diff --git a/dev/core/src/com/google/gwt/dev/shell/HostedModeException.java b/dev/core/src/com/google/gwt/dev/shell/HostedModeException.java
index 2d3f03d..c14f432 100644
--- a/dev/core/src/com/google/gwt/dev/shell/HostedModeException.java
+++ b/dev/core/src/com/google/gwt/dev/shell/HostedModeException.java
@@ -16,8 +16,8 @@
 package com.google.gwt.dev.shell;
 
 /**
- * An exception that can only occur in hosted mode, but may indicate potential
- * problems in web mode.
+ * An exception that can only occur in Development Mode, but may indicate
+ * potential problems in Production Mode.
  */
 public class HostedModeException extends RuntimeException {
 
diff --git a/dev/core/src/com/google/gwt/dev/shell/ModuleSpacePropertyOracle.java b/dev/core/src/com/google/gwt/dev/shell/ModuleSpacePropertyOracle.java
index a27a624..819c468 100644
--- a/dev/core/src/com/google/gwt/dev/shell/ModuleSpacePropertyOracle.java
+++ b/dev/core/src/com/google/gwt/dev/shell/ModuleSpacePropertyOracle.java
@@ -83,8 +83,8 @@
     Property prop = getProperty(propertyName);
 
     // Check if this property has already been queried for; if so, return
-    // the same answer. This is necessary to match web mode behavior since
-    // property providers are only called once. We cache even values that
+    // the same answer. This is necessary to match Production Mode behavior
+    // since property providers are only called once. We cache even values that
     // cause exceptions to be thrown to make sure we are consistent even
     // in throwing exceptions for the same property.
     if (prevAnswers.containsKey(propertyName)) {
diff --git a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerDisableAggressiveOptimization.java b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerDisableAggressiveOptimization.java
index b3b4579..ad8db2b 100644
--- a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerDisableAggressiveOptimization.java
+++ b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerDisableAggressiveOptimization.java
@@ -31,8 +31,8 @@
 
   @Override
   public String getPurpose() {
-    return "Troubleshooting: Prevent the web mode compiler from performing "
-        + "aggressive optimizations.";
+    return "Troubleshooting: Prevent the Production Mode compiler from "
+        + "performing aggressive optimizations.";
   }
 
   @Override
diff --git a/dev/core/super/com/google/gwt/core/client/GWTBridge.java b/dev/core/super/com/google/gwt/core/client/GWTBridge.java
index 12dc89d..75f8035 100644
--- a/dev/core/super/com/google/gwt/core/client/GWTBridge.java
+++ b/dev/core/super/com/google/gwt/core/client/GWTBridge.java
@@ -16,8 +16,8 @@
 package com.google.gwt.core.client;
 
 /**
- * When running in hosted mode, acts as a bridge from {@link GWT} into the
- * hosted mode environment.
+ * When running in Development Mode, acts as a bridge from {@link GWT} into the
+ * Development Mode environment.
  */
 public abstract class GWTBridge {
 
diff --git a/dev/core/super/com/google/gwt/core/client/GwtScriptOnly.java b/dev/core/super/com/google/gwt/core/client/GwtScriptOnly.java
index 811baed..9974973 100644
--- a/dev/core/super/com/google/gwt/core/client/GwtScriptOnly.java
+++ b/dev/core/super/com/google/gwt/core/client/GwtScriptOnly.java
@@ -27,13 +27,13 @@
  * <p>
  * This annotation is typically combined with the <code>super-source</code> tag
  * to provide web-mode implementations of (binary-only) types that the developer
- * wishes to use in hosted mode. This can be used, for instance, to provide a
- * reference implementation to develop unit tests.
+ * wishes to use in Development Mode. This can be used, for instance, to provide
+ * a reference implementation to develop unit tests.
  * <p>
  * This annotation may also be applied to jsni methods to prevent them from
- * being parsed and loaded for devmode. This is done under certain 
+ * being parsed and loaded for Development Mode. This is done under certain
  * circumstances as an optimization to avoid loading very large jsni methods
- * which are only executed in webmode.   
+ * which are only executed in Production Mode.
  */
 @Documented
 @Target({ElementType.TYPE, ElementType.METHOD})
diff --git a/dev/core/super/com/google/gwt/lang/LongLibBase.java b/dev/core/super/com/google/gwt/lang/LongLibBase.java
index 6fc1669..684669a 100644
--- a/dev/core/super/com/google/gwt/lang/LongLibBase.java
+++ b/dev/core/super/com/google/gwt/lang/LongLibBase.java
@@ -44,9 +44,9 @@
    * zeroed.
    *
    * Note that this class must be careful using type "long". Being the
-   * implementation of the long type for web mode, any place it uses a long is
-   * not usable in web mode. There is currently one such method: {@link
-   * LongLib#getAsIntArray}.
+   * implementation of the long type for Production Mode, any place it uses a
+   * long is not usable in Production Mode. There is currently one such method:
+   * {@link LongLib#getAsIntArray}.
    */
 
   // Note that the {@link LonghLib#mul} method implicitly depends on the
@@ -79,7 +79,7 @@
       * TWO_PWR_31_DBL;
 
   /**
-   * Web mode implementation; the int array is already the right object.
+   * Production Mode implementation; the int array is already the right object.
    */
   @UnsafeNativeLong
   protected static native long asLong(LongEmul value) /*-{
diff --git a/dev/core/test/com/google/gwt/dev/javac/JsniCheckerTest.java b/dev/core/test/com/google/gwt/dev/javac/JsniCheckerTest.java
index 07a8f8a..e32b59e 100644
--- a/dev/core/test/com/google/gwt/dev/javac/JsniCheckerTest.java
+++ b/dev/core/test/com/google/gwt/dev/javac/JsniCheckerTest.java
@@ -299,8 +299,8 @@
   }
 
   /**
-   * The proper behavior here is a close call. In hosted mode, Java arrays are
-   * completely unusable in JavaScript, so the current reasoning is to allow
+   * The proper behavior here is a close call. In Development Mode, Java arrays
+   * are completely unusable in JavaScript, so the current reasoning is to allow
    * them.
    */
   public void testLongArray() {
diff --git a/user/src/com/google/gwt/benchmarks/client/impl/BenchmarkResults.java b/user/src/com/google/gwt/benchmarks/client/impl/BenchmarkResults.java
index af155dc..71d9967 100644
--- a/user/src/com/google/gwt/benchmarks/client/impl/BenchmarkResults.java
+++ b/user/src/com/google/gwt/benchmarks/client/impl/BenchmarkResults.java
@@ -38,11 +38,11 @@
   /**
    * The URL of the document on the browser (document.location). This is used to
    * locate the *cache.html document containing the generated JavaScript for the
-   * test. In the case of hosted mode, this points (uselessly) to the nocache
-   * file, because there is no generated JavaScript.
-   * 
-   * Apparently, we can't get this value on the server-side because of the goofy
-   * way HTTP_REFERER is set by different browser implementations of
+   * test. In the case of Development Mode, this points (uselessly) to the
+   * nocache file, because there is no generated JavaScript.
+   *
+   * Apparently, we can't get this value on the server-side because of the
+   * goofy way HTTP_REFERER is set by different browser implementations of
    * XMLHttpRequest.
    */
   private String sourceRef;
diff --git a/user/src/com/google/gwt/canvas/dom/client/Context2d.java b/user/src/com/google/gwt/canvas/dom/client/Context2d.java
index e0f9a6e..8d907ea 100644
--- a/user/src/com/google/gwt/canvas/dom/client/Context2d.java
+++ b/user/src/com/google/gwt/canvas/dom/client/Context2d.java
@@ -1193,7 +1193,7 @@
   }-*/;
 
   /**
-   * Returns the fill style when in web mode.
+   * Returns the fill style when in Production Mode.
    *
    * @return the fill style
    */
@@ -1217,7 +1217,7 @@
   }-*/;
 
   /**
-   * Returns the stroke style when in web mode.
+   * Returns the stroke style when in Production Mode.
    *
    * @return the stroke style
    */
@@ -1240,7 +1240,7 @@
   }-*/;
 
   /**
-   * Sets the fill style when in web mode.
+   * Sets the fill style when in Production Mode.
    *
    * @param fillStyle the fill style to set
    */
@@ -1263,7 +1263,7 @@
   }-*/;
 
   /**
-   * Sets the stroke style when in web mode.
+   * Sets the stroke style when in Production Mode.
    *
    * @param strokeStyle the strokeStyle to set
    */
diff --git a/user/src/com/google/gwt/canvas/dom/client/CssColor.java b/user/src/com/google/gwt/canvas/dom/client/CssColor.java
index 9938d0a..f986757 100644
--- a/user/src/com/google/gwt/canvas/dom/client/CssColor.java
+++ b/user/src/com/google/gwt/canvas/dom/client/CssColor.java
@@ -27,7 +27,7 @@
  * <p>
  * To handle dev mode we must wrap JSO strings in an array. Therefore, when in
  * dev mode, CssColor is actually an array with one element that is the JSO. In
- * web mode, this is not needed.
+ * Production Mode, this is not needed.
  * </p>
  * 
  * @see <a href="http://www.w3.org/TR/CSS1/#color">Cascading Style Sheets, level 1</a>
diff --git a/user/src/com/google/gwt/core/client/Duration.java b/user/src/com/google/gwt/core/client/Duration.java
index 58eb6aa..1a576b6 100644
--- a/user/src/com/google/gwt/core/client/Duration.java
+++ b/user/src/com/google/gwt/core/client/Duration.java
@@ -23,7 +23,7 @@
   /**
    * Returns the same result as {@link System#currentTimeMillis()}, but as a
    * double. Because emulated long math is significantly slower than doubles in
-   * web mode, this method is to be preferred.
+   * Production Mode, this method is to be preferred.
    */
   public static native double currentTimeMillis() /*-{
     return (new Date()).getTime();
diff --git a/user/src/com/google/gwt/core/client/GWT.java b/user/src/com/google/gwt/core/client/GWT.java
index a2fb6fa..8861641 100644
--- a/user/src/com/google/gwt/core/client/GWT.java
+++ b/user/src/com/google/gwt/core/client/GWT.java
@@ -28,10 +28,11 @@
    * This interface is used to catch exceptions at the "top level" just before
    * they escape to the browser. This is used in places where the browser calls
    * into user code such as event callbacks, timers, and RPC.
-   * 
-   * In hosted mode, the default handler prints a stack trace to the log window.
-   * In web mode, the default handler is null and thus exceptions are allowed to
-   * escape, which provides an opportunity to use a JavaScript debugger.
+   *
+   * In Development Mode, the default handler prints a stack trace to the log
+   * window. In Production Mode, the default handler is null and thus exceptions
+   * are allowed to escape, which provides an opportunity to use a JavaScript
+   * debugger.
    */
   public interface UncaughtExceptionHandler {
     void onUncaughtException(Throwable e);
@@ -40,7 +41,7 @@
   /**
    * An {@link UncaughtExceptionHandler} that logs errors to
    * {@link GWT#log(String, Throwable)}. This is the default exception handler
-   * in hosted mode. In web mode, the default exception handler is
+   * in Development Mode. In Production Mode, the default exception handler is
    * <code>null</code>.
    */
   private static final class DefaultUncaughtExceptionHandler implements
@@ -52,19 +53,19 @@
 
   /**
    * This constant is used by {@link #getPermutationStrongName} when running in
-   * hosted mode.
+   * Development Mode.
    */
   public static final String HOSTED_MODE_PERMUTATION_STRONG_NAME = "HostedMode";
 
   /**
-   * Always <code>null</code> in web mode; in hosted mode provides the
-   * implementation for certain methods.
+   * Always <code>null</code> in Production Mode; in Development Mode provides
+   * the implementation for certain methods.
    */
   private static GWTBridge sGWTBridge = null;
 
   /**
-   * Defaults to <code>null</code> in web mode and an instance of
-   * {@link DefaultUncaughtExceptionHandler} in hosted mode.
+   * Defaults to <code>null</code> in Production Mode and an instance of
+   * {@link DefaultUncaughtExceptionHandler} in Development Mode.
    */
   private static UncaughtExceptionHandler sUncaughtExceptionHandler = null;
 
@@ -72,10 +73,10 @@
    * Instantiates a class via deferred binding.
    * 
    * <p>
-   * The argument to {@link #create(Class)}&#160;<i>must</i> be a class
-   * literal because the web mode compiler must be able to statically determine
+   * The argument to {@link #create(Class)}&#160;<i>must</i> be a class literal
+   * because the Production Mode compiler must be able to statically determine
    * the requested type at compile-time. This can be tricky because using a
-   * {@link Class} variable may appear to work correctly in hosted mode.
+   * {@link Class} variable may appear to work correctly in Development Mode.
    * </p>
    * 
    * @param classLiteral a class literal specifying the base class to be
@@ -85,8 +86,8 @@
   public static <T> T create(Class<?> classLiteral) {
     if (sGWTBridge == null) {
       /*
-       * In web mode, the compiler directly replaces calls to this method with a
-       * new Object() type expression of the correct rebound type.
+       * In Production Mode, the compiler directly replaces calls to this method
+       * with a new Object() type expression of the correct rebound type.
        */
       throw new UnsupportedOperationException(
           "ERROR: GWT.create() is only usable in client code!  It cannot be called, "
@@ -130,8 +131,8 @@
 
   /**
    * Returns the permutation's strong name. This can be used to distinguish
-   * between different permutations of the same module. In hosted mode, this
-   * method will return {@value #HOSTED_MODE_PERMUTATION_STRONG_NAME}.
+   * between different permutations of the same module. In Development Mode,
+   * this method will return {@value #HOSTED_MODE_PERMUTATION_STRONG_NAME}.
    */
   public static String getPermutationStrongName() {
     if (GWT.isScript()) {
@@ -165,14 +166,14 @@
   }
 
   /**
-   * Returns the empty string when running in web mode, but returns a unique
-   * string for each thread in hosted mode (for example, different windows
-   * accessing the dev mode server will each have a unique id, and hitting
-   * refresh without restarting dev mode will result in a new unique id for
-   * a particular window.
-   * 
-   * TODO(unnurg): Remove this function once Dev Mode rewriting classes are
-   * in gwt-dev.
+   * Returns the empty string when running in Production Mode, but returns a
+   * unique string for each thread in Development Mode (for example, different
+   * windows accessing the dev mode server will each have a unique id, and
+   * hitting refresh without restarting dev mode will result in a new unique id
+   * for a particular window.
+   *
+   * TODO(unnurg): Remove this function once Dev Mode rewriting classes are in
+   * gwt-dev.
    */
   public static String getUniqueThreadId() {
     if (sGWTBridge != null) {
@@ -191,9 +192,10 @@
 
   /**
    * Returns <code>true</code> when running inside the normal GWT environment,
-   * either in hosted mode or web mode. Returns <code>false</code> if this
-   * code is running in a plain JVM. This might happen when running shared code
-   * on the server, or during the bootstrap sequence of a GWTTestCase test.
+   * either in Development Mode or Production Mode. Returns <code>false</code>
+   * if this code is running in a plain JVM. This might happen when running
+   * shared code on the server, or during the bootstrap sequence of a
+   * GWTTestCase test.
    */
   public static boolean isClient() {
     // Replaced with "true" by GWT compiler.
@@ -219,16 +221,16 @@
   }
 
   /**
-   * Logs a message to the development shell logger in hosted mode. Calls are
-   * optimized out in web mode.
+   * Logs a message to the development shell logger in Development Mode. Calls
+   * are optimized out in Production Mode.
    */
   public static void log(String message) {
     log(message, null);
   }
 
   /**
-   * Logs a message to the development shell logger in hosted mode. Calls are
-   * optimized out in web mode.
+   * Logs a message to the development shell logger in Development Mode. Calls
+   * are optimized out in Production Mode.
    */
   public static void log(String message, Throwable e) {
     if (sGWTBridge != null) {
@@ -268,8 +270,8 @@
   }
 
   /**
-   * Called via reflection in hosted mode; do not ever call this method in web
-   * mode.
+   * Called via reflection in Development Mode; do not ever call this method in
+   * Production Mode.
    */
   static void setBridge(GWTBridge bridge) {
     sGWTBridge = bridge;
diff --git a/user/src/com/google/gwt/core/client/JavaScriptException.java b/user/src/com/google/gwt/core/client/JavaScriptException.java
index 69ee8d2..495fce7 100644
--- a/user/src/com/google/gwt/core/client/JavaScriptException.java
+++ b/user/src/com/google/gwt/core/client/JavaScriptException.java
@@ -127,12 +127,12 @@
   public JavaScriptException(Object e) {
     this.e = e;
     /*
-     * In hosted mode, JavaScriptExceptions are created exactly when the native
-     * method returns and their stack traces are fixed-up by the hosted-mode
-     * plumbing.
-     * 
-     * In web mode, we'll attempt to infer the stack trace from the thrown
-     * object, although this is not possible in all browsers.
+     * In Development Mode, JavaScriptExceptions are created exactly when the
+     * native method returns and their stack traces are fixed-up by the
+     * hosted-mode plumbing.
+     *
+     * In Production Mode, we'll attempt to infer the stack trace from the
+     * thrown object, although this is not possible in all browsers.
      */
     if (GWT.isScript()) {
       StackTraceCreator.createStackTrace(this);
diff --git a/user/src/com/google/gwt/core/client/JavaScriptObject.java b/user/src/com/google/gwt/core/client/JavaScriptObject.java
index d71d084..3026745 100644
--- a/user/src/com/google/gwt/core/client/JavaScriptObject.java
+++ b/user/src/com/google/gwt/core/client/JavaScriptObject.java
@@ -57,7 +57,7 @@
   }-*/;
 
   /**
-   * Helper for {@link #toString()}, when hosted mode or assertions are on.
+   * Helper for {@link #toString()}, when Development Mode or assertions are on.
    */
   private static native String toStringVerbose(JavaScriptObject obj) /*-{
     var defined = function(m) { return typeof m != 'undefined'; };
@@ -148,12 +148,12 @@
   }-*/;
 
   /**
-   * Makes a best-effort attempt to get a useful debugging string describing
-   * the given JavaScriptObject.  In web mode with assertions disabled, this
+   * Makes a best-effort attempt to get a useful debugging string describing the
+   * given JavaScriptObject. In Production Mode with assertions disabled, this
    * will either call and return the JSO's toString() if one exists, or just
-   * return "[JavaScriptObject]".  In hosted mode, or with assertions enabled,
-   * some stronger effort is made to represent other types of JSOs, including
-   * inspecting for document nodes' outerHTML and innerHTML, etc.
+   * return "[JavaScriptObject]". In Development Mode, or with assertions
+   * enabled, some stronger effort is made to represent other types of JSOs,
+   * including inspecting for document nodes' outerHTML and innerHTML, etc.
    */
   @Override
   public final String toString() {
diff --git a/user/src/com/google/gwt/core/client/JsArrayBoolean.java b/user/src/com/google/gwt/core/client/JsArrayBoolean.java
index 6e7d3e3..56e53ba 100644
--- a/user/src/com/google/gwt/core/client/JsArrayBoolean.java
+++ b/user/src/com/google/gwt/core/client/JsArrayBoolean.java
@@ -36,9 +36,9 @@
    * Gets the value at a given index.
    * 
    * If an undefined or non-boolean value exists at the given index, a
-   * type-conversion error will occur in hosted mode and unpredictable behavior
-   * may occur in web mode.
-   * 
+   * type-conversion error will occur in Development Mode and unpredictable
+   * behavior may occur in Production Mode.
+   *
    * @param index the index to be retrieved
    * @return the value at the given index
    */
diff --git a/user/src/com/google/gwt/core/client/JsArrayInteger.java b/user/src/com/google/gwt/core/client/JsArrayInteger.java
index c852842..b92b6c9 100644
--- a/user/src/com/google/gwt/core/client/JsArrayInteger.java
+++ b/user/src/com/google/gwt/core/client/JsArrayInteger.java
@@ -36,10 +36,11 @@
    * Gets the value at a given index.
    * 
    * If no value exists at the given index, a type-conversion error will occur
-   * in hosted mode and unpredictable behavior may occur in web mode. If the
-   * numeric value returned is non-integral, it will cause a warning in hosted
-   * mode, and may affect the results of mathematical expressions.
-   * 
+   * in Development Mode and unpredictable behavior may occur in Production
+   * Mode. If the numeric value returned is non-integral, it will cause a
+   * warning in Development Mode, and may affect the results of mathematical
+   * expressions.
+   *
    * @param index the index to be retrieved
    * @return the value at the given index
    */
diff --git a/user/src/com/google/gwt/core/client/JsArrayNumber.java b/user/src/com/google/gwt/core/client/JsArrayNumber.java
index 21b96dd..cf763a4 100644
--- a/user/src/com/google/gwt/core/client/JsArrayNumber.java
+++ b/user/src/com/google/gwt/core/client/JsArrayNumber.java
@@ -39,9 +39,9 @@
    * Gets the value at a given index.
    * 
    * If an undefined or non-numeric value exists at the given index, a
-   * type-conversion error will occur in hosted mode and unpredictable behavior
-   * may occur in web mode.
-   * 
+   * type-conversion error will occur in Development Mode and unpredictable
+   * behavior may occur in Production Mode.
+   *
    * @param index the index to be retrieved
    * @return the value at the given index
    */
diff --git a/user/src/com/google/gwt/core/client/impl/Impl.java b/user/src/com/google/gwt/core/client/impl/Impl.java
index 3dd0f85..2aa0fb5 100644
--- a/user/src/com/google/gwt/core/client/impl/Impl.java
+++ b/user/src/com/google/gwt/core/client/impl/Impl.java
@@ -35,8 +35,8 @@
    * and there is no GWT code in the same module on the call stack. Examples
    * include event handlers, exported methods, and module initialization.
    * <p>
-   * The GWT compiler and hosted mode will provide a module-scoped variable,
-   * <code>$entry</code>, which is an alias for this method.
+   * The GWT compiler and Development Mode will provide a module-scoped
+   * variable, <code>$entry</code>, which is an alias for this method.
    * <p>
    * This method can be called reentrantly, which will simply delegate to the
    * function.
@@ -111,7 +111,7 @@
   /**
    * Returns the obfuscated name of members in the compiled output. This is a
    * thin wrapper around JNameOf AST nodes and is therefore meaningless to
-   * implement in hosted mode.
+   * implement in Development Mode.
    * 
    * @param jsniIdent a string literal specifying a type, field, or method. Raw
    *          type names may also be used to obtain the name of the type's seed
@@ -123,12 +123,12 @@
    */
   public static String getNameOf(String jsniIdent) {
     /*
-     * In web mode, the compiler directly replaces calls to this method with a
-     * string literal expression.
+     * In Production Mode, the compiler directly replaces calls to this method
+     * with a string literal expression.
      */
     assert !GWT.isScript() : "ReplaceRebinds failed to replace this method";
     throw new UnsupportedOperationException(
-        "Impl.getNameOf() is unimplemented in hosted mode");
+        "Impl.getNameOf() is unimplemented in Development Mode");
   }
 
   public static native String getPermutationStrongName() /*-{
@@ -157,7 +157,7 @@
       // Assignment to $entry is done by the compiler
       return @com.google.gwt.core.client.impl.Impl::entry(Lcom/google/gwt/core/client/JavaScriptObject;);
     } else {
-      // But we have to do in in hosted mode
+      // But we have to do in in Development Mode
       return $entry = @com.google.gwt.core.client.impl.Impl::entry(Lcom/google/gwt/core/client/JavaScriptObject;);
     }
   }-*/;
@@ -169,7 +169,7 @@
     } else {
       _ = jsFunction.apply(thisObj, arguments);
       if (_ != null) {
-        // Wrap for hosted mode
+        // Wrap for Development Mode
         _ = Object(_);
       }
       return _;
@@ -177,7 +177,7 @@
   }-*/;
 
   /**
-   * Called by ModuleSpace in hosted mode when running onModuleLoads.
+   * Called by ModuleSpace in Development Mode when running onModuleLoads.
    */
   private static boolean enter() {
     assert entryDepth >= 0 : "Negative entryDepth value at entry " + entryDepth;
@@ -231,7 +231,7 @@
   }
 
   /**
-   * Called by ModuleSpace in hosted mode when running onModuleLoads.
+   * Called by ModuleSpace in Development Mode when running onModuleLoads.
    */
   private static void exit(boolean initialEntry) {
     if (initialEntry) {
diff --git a/user/src/com/google/gwt/core/client/impl/SchedulerImpl.java b/user/src/com/google/gwt/core/client/impl/SchedulerImpl.java
index 5454bb5..8dfaf7d 100644
--- a/user/src/com/google/gwt/core/client/impl/SchedulerImpl.java
+++ b/user/src/com/google/gwt/core/client/impl/SchedulerImpl.java
@@ -243,7 +243,7 @@
       // $entry takes care of uncaught exception handling
       var ret = $entry(@com.google.gwt.core.client.impl.SchedulerImpl::execute(Lcom/google/gwt/core/client/Scheduler$RepeatingCommand;))(cmd);
       if (!@com.google.gwt.core.client.GWT::isScript()()) {
-        // Unwrap from hosted mode
+        // Unwrap from Development Mode
         ret = ret == true;
       }
       if (ret) {
@@ -258,7 +258,7 @@
       // $entry takes care of uncaught exception handling
       var ret = $entry(@com.google.gwt.core.client.impl.SchedulerImpl::execute(Lcom/google/gwt/core/client/Scheduler$RepeatingCommand;))(cmd);
       if (!@com.google.gwt.core.client.GWT::isScript()()) {
-        // Unwrap from hosted mode
+        // Unwrap from Development Mode
         ret = ret == true;
       }
       if (!ret) {
diff --git a/user/src/com/google/gwt/core/client/impl/StackTraceCreator.java b/user/src/com/google/gwt/core/client/impl/StackTraceCreator.java
index 646f5ed..5e13099 100644
--- a/user/src/com/google/gwt/core/client/impl/StackTraceCreator.java
+++ b/user/src/com/google/gwt/core/client/impl/StackTraceCreator.java
@@ -23,7 +23,7 @@
 
 /**
  * Encapsulates logic to create a stack trace. This class should only be used in
- * web mode.
+ * Production Mode.
  */
 public class StackTraceCreator {
   /**
@@ -363,12 +363,12 @@
   
   /**
    * Create a stack trace based on a JavaScriptException. This method should
-   * only be called in web mode.
+   * only be called in Production Mode.
    */
   public static void createStackTrace(JavaScriptException e) {
     if (!GWT.isScript()) {
       throw new RuntimeException(
-          "StackTraceCreator should only be called in web mode");
+          "StackTraceCreator should only be called in Production Mode");
     }
 
     GWT.<Collector> create(Collector.class).createStackTrace(e);
@@ -376,12 +376,12 @@
 
   /**
    * Fill in a stack trace based on the current execution stack. This method
-   * should only be called in web mode.
+   * should only be called in Production Mode.
    */
   public static void fillInStackTrace(Throwable t) {
     if (!GWT.isScript()) {
       throw new RuntimeException(
-          "StackTraceCreator should only be called in web mode");
+          "StackTraceCreator should only be called in Production Mode");
     }
 
     GWT.<Collector> create(Collector.class).fillInStackTrace(t);
@@ -389,12 +389,12 @@
 
   /**
    * Create a stack trace based on the current execution stack. This method
-   * should only be called in web mode.
+   * should only be called in Production Mode.
    */
   static JsArrayString createStackTrace() {
     if (!GWT.isScript()) {
       throw new RuntimeException(
-          "StackTraceCreator should only be called in web mode");
+          "StackTraceCreator should only be called in Production Mode");
     }
 
     return GWT.<Collector> create(Collector.class).collect();
diff --git a/user/src/com/google/gwt/core/client/impl/WeakMapping.java b/user/src/com/google/gwt/core/client/impl/WeakMapping.java
index 4906f96..435816c 100644
--- a/user/src/com/google/gwt/core/client/impl/WeakMapping.java
+++ b/user/src/com/google/gwt/core/client/impl/WeakMapping.java
@@ -23,12 +23,12 @@
 
 /**
  * A class associating a (String, Object) map with arbitrary source objects
- * (except for Strings). This implementation is used in hosted mode.
+ * (except for Strings). This implementation is used in Development Mode.
  */
 public class WeakMapping {
 
   /*
-   * This implementation is used in hosted mode only. It uses a HashMap to
+   * This implementation is used in Development Mode only. It uses a HashMap to
    * associate the (key, value) maps with source object instances. The object
    * instances are wrapped in IdentityWeakReference objects in order to both
    * allow the underlying objects to be garbage-collected and to apply
@@ -126,9 +126,9 @@
    * some care should be taken to choose sufficiently unique identifiers.
    * 
    * <p>
-   * Due to restrictions of the web mode implementation, the instance argument
-   * must not be a String.
-   * 
+   * Due to restrictions of the Production Mode implementation, the instance
+   * argument must not be a String.
+   *
    * @param instance the source Object, which must not be a String.
    * @param key a String key.
    * @param value the Object to associate with the key on the given source
diff --git a/user/src/com/google/gwt/core/client/prefetch/Prefetcher.java b/user/src/com/google/gwt/core/client/prefetch/Prefetcher.java
index f91bb15..f99d2e5 100644
--- a/user/src/com/google/gwt/core/client/prefetch/Prefetcher.java
+++ b/user/src/com/google/gwt/core/client/prefetch/Prefetcher.java
@@ -35,7 +35,7 @@
       return;
     }
 
-    // No range checking in web mode means we needn't precompute the size.
+    // No range checking in Production Mode means we needn't precompute the size
     int[] runAsyncSplitPoints = new int[0];
     int i = 0;
     for (PrefetchableResource resource : resources) {
diff --git a/user/src/com/google/gwt/junit/RunStyle.java b/user/src/com/google/gwt/junit/RunStyle.java
index 79bc01d..a7aaa8d 100644
--- a/user/src/com/google/gwt/junit/RunStyle.java
+++ b/user/src/com/google/gwt/junit/RunStyle.java
@@ -127,7 +127,7 @@
    * @return true if resources should be automatically generated by the server.
    */
   public boolean shouldAutoGenerateResources() {
-    // TODO(spoon) does web mode get simpler if this is turned on?
+    // TODO(spoon) does Production Mode get simpler if this is turned on?
     return true;
   }
 
diff --git a/user/src/com/google/gwt/junit/RunStyleExternalBrowser.java b/user/src/com/google/gwt/junit/RunStyleExternalBrowser.java
index ed967e5..654226b 100644
--- a/user/src/com/google/gwt/junit/RunStyleExternalBrowser.java
+++ b/user/src/com/google/gwt/junit/RunStyleExternalBrowser.java
@@ -22,8 +22,8 @@
 import java.util.Set;
 
 /**
- * Runs in web mode via browsers managed as an external process. This feature is
- * experimental and is not officially supported.
+ * Runs in Production Mode via browsers managed as an external process. This
+ * feature is experimental and is not officially supported.
  */
 class RunStyleExternalBrowser extends RunStyle {
 
diff --git a/user/src/com/google/gwt/junit/RunStyleManual.java b/user/src/com/google/gwt/junit/RunStyleManual.java
index 668e1a9..32b86c9 100644
--- a/user/src/com/google/gwt/junit/RunStyleManual.java
+++ b/user/src/com/google/gwt/junit/RunStyleManual.java
@@ -19,7 +19,7 @@
 import com.google.gwt.core.ext.UnableToCompleteException;
 
 /**
- * Runs in web mode waiting for the user to contact the server with their own
+ * Runs in Production Mode waiting for the user to contact the server with their own
  * browser.
  */
 class RunStyleManual extends RunStyle {
diff --git a/user/src/com/google/gwt/junit/RunStyleRemoteWeb.java b/user/src/com/google/gwt/junit/RunStyleRemoteWeb.java
index e1a1968..855e869 100644
--- a/user/src/com/google/gwt/junit/RunStyleRemoteWeb.java
+++ b/user/src/com/google/gwt/junit/RunStyleRemoteWeb.java
@@ -31,8 +31,8 @@
 import java.util.Set;
 
 /**
- * Runs in web mode via browsers managed over RMI. This feature is experimental
- * and is not officially supported.
+ * Runs in Production Mode via browsers managed over RMI. This feature is
+ * experimental and is not officially supported.
  */
 class RunStyleRemoteWeb extends RunStyle {
 
diff --git a/user/src/com/google/gwt/junit/client/GWTTestCase.java b/user/src/com/google/gwt/junit/client/GWTTestCase.java
index d69acbf..4d991cc 100644
--- a/user/src/com/google/gwt/junit/client/GWTTestCase.java
+++ b/user/src/com/google/gwt/junit/client/GWTTestCase.java
@@ -203,13 +203,13 @@
 
   /**
    * Determines whether or not exceptions will be caught by the test fixture.
-   * Override this method and return <code>false</code> to let exceptions
-   * escape to the browser. This will break the normal JUnit reporting
-   * functionality, but can be useful in web mode with a JavaScript debugger to
-   * pin down where exceptions are originating.
+   * Override this method and return <code>false</code> to let exceptions escape
+   * to the browser. This will break the normal JUnit reporting functionality,
+   * but can be useful in Production Mode with a JavaScript debugger to pin down
+   * where exceptions are originating.
    *
-   * @return <code>true</code> for normal JUnit behavior, or
-   *         <code>false</code> to disable normal JUnit getException reporting
+   * @return <code>true</code> for normal JUnit behavior, or <code>false</code>
+   *         to disable normal JUnit getException reporting
    */
   public boolean catchExceptions() {
     return true;
diff --git a/user/src/com/google/gwt/rpc/client/impl/ClientWriterFactory.java b/user/src/com/google/gwt/rpc/client/impl/ClientWriterFactory.java
index fa69c9c..a9ab98a 100644
--- a/user/src/com/google/gwt/rpc/client/impl/ClientWriterFactory.java
+++ b/user/src/com/google/gwt/rpc/client/impl/ClientWriterFactory.java
@@ -29,7 +29,8 @@
 
 /**
  * Isolates client code from swapping out the command factory in hosted versus
- * web mode. This type has a super-source peer which is used in web mode.
+ * Production Mode. This type has a super-source peer which is used in
+ * Production Mode.
  */
 public class ClientWriterFactory {
 
diff --git a/user/src/com/google/gwt/rpc/client/impl/SimplePayloadSink.java b/user/src/com/google/gwt/rpc/client/impl/SimplePayloadSink.java
index e565bb6..1d32d93 100644
--- a/user/src/com/google/gwt/rpc/client/impl/SimplePayloadSink.java
+++ b/user/src/com/google/gwt/rpc/client/impl/SimplePayloadSink.java
@@ -192,10 +192,11 @@
     @Override
     public boolean visit(SetCommand x, Context ctx) {
       /*
-       * In hosted-mode, the field's declaring class is written to the stream to
-       * handle field shadowing. In web mode, this isn't necessary because all
-       * field names are allocated in the same "object" scope.
-       * 
+       * In Development Mode, the field's declaring class is written to the
+       * stream to handle field shadowing. In Production Mode, this isn't
+       * necessary because all field names are allocated in the same "object"
+       * scope.
+       *
        * DeclaringClassName~FieldName~...value...
        */
       if (!GWT.isScript()) {
diff --git a/user/src/com/google/gwt/rpc/server/HostedModeClientOracle.java b/user/src/com/google/gwt/rpc/server/HostedModeClientOracle.java
index 9b02fa0..c51b918 100644
--- a/user/src/com/google/gwt/rpc/server/HostedModeClientOracle.java
+++ b/user/src/com/google/gwt/rpc/server/HostedModeClientOracle.java
@@ -161,6 +161,6 @@
   }
 
   private <T> T unimplemented() {
-    throw new RuntimeException("Not supported in hosted mode");
+    throw new RuntimeException("Not supported in Development Mode");
   }
 }
diff --git a/user/src/com/google/gwt/rpc/server/RpcServlet.java b/user/src/com/google/gwt/rpc/server/RpcServlet.java
index 3a2dccf..e094187 100644
--- a/user/src/com/google/gwt/rpc/server/RpcServlet.java
+++ b/user/src/com/google/gwt/rpc/server/RpcServlet.java
@@ -108,7 +108,7 @@
 
       if ("HostedMode".equals(permutationStrongName)) {
         if (!allowHostedModeConnections()) {
-          throw new SecurityException("Blocked hosted mode request");
+          throw new SecurityException("Blocked Development Mode request");
         }
         toReturn = new HostedModeClientOracle();
       } else {
@@ -236,17 +236,18 @@
   }
 
   /**
-   * Indicates whether or not an RPC request from a hosted mode client should be
-   * serviced. Requests from hosted mode clients will expose unobfuscated
-   * identifiers in the payload. It is intended that developers override this
-   * method to restrict access based on installation-specific logic (such as a
-   * range of IP addresses, checking for certain cookies, etc.)
+   * Indicates whether or not an RPC request from a Development Mode client
+   * should be serviced. Requests from Development Mode clients will expose
+   * unobfuscated identifiers in the payload. It is intended that developers
+   * override this method to restrict access based on installation-specific
+   * logic (such as a range of IP addresses, checking for certain cookies, etc.)
    * <p>
    * The default implementation allows hosted-mode connections from the local
    * host, loopback addresses (127.*), site local (RFC 1918), link local
    * (169.254/16) addresses, and their IPv6 equivalents.
-   * 
-   * @return <code>true</code> if a hosted mode connection should be allowed
+   *
+   * @return <code>true</code> if a Development Mode connection should be
+   *         allowed
    * @see #getThreadLocalRequest()
    * @see InetAddress
    */
diff --git a/user/src/com/google/gwt/rpc/server/SimplePayloadDecoder.java b/user/src/com/google/gwt/rpc/server/SimplePayloadDecoder.java
index dc83ff6..834ca55 100644
--- a/user/src/com/google/gwt/rpc/server/SimplePayloadDecoder.java
+++ b/user/src/com/google/gwt/rpc/server/SimplePayloadDecoder.java
@@ -308,7 +308,7 @@
   private Class<?> findClass(String token) throws ClassNotFoundException {
     /*
      * NB: This is the only method in SimplePayloadDecoder which would require
-     * any real adaptation to be made to run in web mode.
+     * any real adaptation to be made to run in Production Mode.
      */
 
     Class<?> clazz = classCache.get(token);
@@ -465,7 +465,7 @@
    */
   private void readSetter(Class<?> clazz, HasSetters x)
       throws ClassNotFoundException {
-    // Only used by hosted mode to handle shadowing
+    // Only used by Development Mode to handle shadowing
     if (!clientOracle.isScript()) {
       String fieldDeclClassName = readCommand(StringValueCommand.class).getValue();
       if (fieldDeclClassName != null) {
diff --git a/user/src/com/google/gwt/safehtml/shared/SafeHtmlBuilder.java b/user/src/com/google/gwt/safehtml/shared/SafeHtmlBuilder.java
index da425ee..b906d93 100644
--- a/user/src/com/google/gwt/safehtml/shared/SafeHtmlBuilder.java
+++ b/user/src/com/google/gwt/safehtml/shared/SafeHtmlBuilder.java
@@ -194,9 +194,10 @@
    * values.
    *
    * <p>
-   * When executing client-side in hosted mode, or server side with assertions
-   * enabled, the argument is HTML-parsed and validated to satisfy the second
-   * constraint (the server-side check can also be enabled programmatically, see
+   * When executing client-side in Development Mode, or server side with
+   * assertions enabled, the argument is HTML-parsed and validated to satisfy
+   * the second constraint (the server-side check can also be enabled
+   * programmatically, see
    * {@link SafeHtmlHostedModeUtils#maybeCheckCompleteHtml(String)} for
    * details). For performance reasons, this check is not performed in prod mode
    * on the client, and with assertions disabled on the server.
diff --git a/user/src/com/google/gwt/safehtml/shared/SafeHtmlHostedModeUtils.java b/user/src/com/google/gwt/safehtml/shared/SafeHtmlHostedModeUtils.java
index 260afb7..912e383 100644
--- a/user/src/com/google/gwt/safehtml/shared/SafeHtmlHostedModeUtils.java
+++ b/user/src/com/google/gwt/safehtml/shared/SafeHtmlHostedModeUtils.java
@@ -22,10 +22,12 @@
 import com.google.gwt.thirdparty.streamhtmlparser.ParseException;
 
 /**
- * SafeHtml utilities whose implementation differs between hosted and web mode.
+ * SafeHtml utilities whose implementation differs between Development and
+ * Production Mode.
  *
  * <p>
- * This class has a super-source peer that provides the web-mode implementation.
+ * This class has a super-source peer that provides the Production Mode
+ * implementation.
  */
 public class SafeHtmlHostedModeUtils {
 
@@ -81,7 +83,7 @@
    * conditions, and will be short-circuited otherwise:
    *
    * <ul>
-   * <li>In client-side code in hosted mode,</li>
+   * <li>In client-side code in Development Mode,</li>
    * <li>In server-side code if assertions are enabled,</li>
    * <li>In server-side code if the property {@code
    * com.google.gwt.safehtml.ForceCheckCompleteHtml} is set.</li>
diff --git a/user/src/com/google/gwt/safehtml/shared/SafeHtmlUtils.java b/user/src/com/google/gwt/safehtml/shared/SafeHtmlUtils.java
index 9389985..48b202b 100644
--- a/user/src/com/google/gwt/safehtml/shared/SafeHtmlUtils.java
+++ b/user/src/com/google/gwt/safehtml/shared/SafeHtmlUtils.java
@@ -37,8 +37,8 @@
   private static final RegExp QUOT_RE = RegExp.compile("\"", "g");
 
   /**
-   * Returns a SafeHtml constructed from a safe string, i.e., without
-   * escaping the string.
+   * Returns a SafeHtml constructed from a safe string, i.e., without escaping
+   * the string.
    *
    * <p>
    * <b>Important</b>: For this method to be able to honor the {@link SafeHtml}
@@ -63,17 +63,18 @@
    * second constraint ensures the composability of {@link SafeHtml} values.
    *
    * <p>
-   * When executing client-side in hosted mode, or server side with assertions
-   * enabled, the argument is HTML-parsed and validated to satisfy the second
-   * constraint (the server-side check can also be enabled programmatically, see
+   * When executing client-side in Development Mode, or server side with
+   * assertions enabled, the argument is HTML-parsed and validated to satisfy
+   * the second constraint (the server-side check can also be enabled
+   * programmatically, see
    * {@link SafeHtmlHostedModeUtils#maybeCheckCompleteHtml(String)} for
-   * details). For performance reasons, this check is not performed in prod mode
-   * on the client, and with assertions disabled on the server.
+   * details). For performance reasons, this check is not performed in
+   * Production Mode on the client, and with assertions disabled on the server.
    *
    * @param s the string to be wrapped as a {@link SafeHtml}
    * @return {@code s}, wrapped as a {@link SafeHtml}
-   * @throws IllegalArgumentException if not running in prod mode and {@code
-   *           html} violates the second constraint
+   * @throws IllegalArgumentException if not running in Production Mode and
+   *           {@code html} violates the second constraint
    */
   public static SafeHtml fromSafeConstant(String s) {
     SafeHtmlHostedModeUtils.maybeCheckCompleteHtml(s);
diff --git a/user/src/com/google/gwt/user/client/Event.java b/user/src/com/google/gwt/user/client/Event.java
index f2465fb..f1e646e 100644
--- a/user/src/com/google/gwt/user/client/Event.java
+++ b/user/src/com/google/gwt/user/client/Event.java
@@ -400,9 +400,9 @@
 
   /**
    * Value returned by accessors when the actual integer value is undefined. In
-   * hosted mode, most accessors assert that the requested attribute is reliable
-   * across all supported browsers.
-   * 
+   * Development Mode, most accessors assert that the requested attribute is
+   * reliable across all supported browsers.
+   *
    * @see Event
    */
   @Deprecated
diff --git a/user/src/com/google/gwt/user/client/impl/DOMImpl.java b/user/src/com/google/gwt/user/client/impl/DOMImpl.java
index 2e682bb..79c8b15 100644
--- a/user/src/com/google/gwt/user/client/impl/DOMImpl.java
+++ b/user/src/com/google/gwt/user/client/impl/DOMImpl.java
@@ -33,9 +33,10 @@
    */
   protected static boolean isMyListener(Object object) {
     /*
-     * The first test ensures the Object belongs to this module in web mode by
-     * ensuring this is not a JavaScriptObject. In web mode, foreign Java
-     * objects appear to be JavaScriptObject. See Cast.isJavaScriptObject().
+     * The first test ensures the Object belongs to this module in Production
+     * Mode by ensuring this is not a JavaScriptObject. In Production Mode,
+     * foreign Java objects appear to be JavaScriptObject. See
+     * Cast.isJavaScriptObject().
      * 
      * The second test then checks the exact type.
      * 
diff --git a/user/src/com/google/gwt/user/client/rpc/impl/SerializerBase.java b/user/src/com/google/gwt/user/client/rpc/impl/SerializerBase.java
index 652e399..5174790 100644
--- a/user/src/com/google/gwt/user/client/rpc/impl/SerializerBase.java
+++ b/user/src/com/google/gwt/user/client/rpc/impl/SerializerBase.java
@@ -28,8 +28,8 @@
 
 /**
  * Maps class literals to type signatures and type signatures to serialization
- * methods. Relies on monotonic behavior of hashcodes in web mode defined in
- * {@link com.google.gwt.core.client.impl.Impl#getHashCode(Object)} In hosted
+ * methods. Relies on monotonic behavior of hashcodes in Production Mode defined
+ * in {@link com.google.gwt.core.client.impl.Impl#getHashCode(Object)} In hosted
  * mode, we map the underlying signature JsArray onto a proper IdentityHashMap.
  */
 public abstract class SerializerBase implements Serializer {
diff --git a/user/src/com/google/gwt/user/rebind/rpc/SerializationUtils.java b/user/src/com/google/gwt/user/rebind/rpc/SerializationUtils.java
index 5eb5779..f471f85 100644
--- a/user/src/com/google/gwt/user/rebind/rpc/SerializationUtils.java
+++ b/user/src/com/google/gwt/user/rebind/rpc/SerializationUtils.java
@@ -185,7 +185,7 @@
       String serializerName = name[0] + "." + name[1];
       if (SerializableTypeOracleBuilder.isInStandardJavaPackage(classType.getQualifiedSourceName())) {
         /*
-         * Don't generate code into java packages. If you do hosted mode
+         * Don't generate code into java packages. If you do Development Mode
          * CompilingClassLoader will fail to resolve references to the generated
          * code.
          */
diff --git a/user/src/com/google/gwt/user/rebind/rpc/TypeSerializerCreator.java b/user/src/com/google/gwt/user/rebind/rpc/TypeSerializerCreator.java
index 9c0101a..ebb31d8 100644
--- a/user/src/com/google/gwt/user/rebind/rpc/TypeSerializerCreator.java
+++ b/user/src/com/google/gwt/user/rebind/rpc/TypeSerializerCreator.java
@@ -68,7 +68,7 @@
    * property value.
    * 
    * Note that the inliner will likely reassemble the shards if it is used in
-   * web mode, but it isn't needed there anyway.
+   * Production Mode, but it isn't needed there anyway.
    * 
    * TODO: remove this (and related code) when it is no longer needed.
    */
diff --git a/user/src/com/google/gwt/user/server/rpc/impl/SerializabilityUtil.java b/user/src/com/google/gwt/user/server/rpc/impl/SerializabilityUtil.java
index 12ea78c..54d45eb 100644
--- a/user/src/com/google/gwt/user/server/rpc/impl/SerializabilityUtil.java
+++ b/user/src/com/google/gwt/user/server/rpc/impl/SerializabilityUtil.java
@@ -251,10 +251,10 @@
     assert (instanceType != null);
     String qualifiedTypeName = instanceType.getName();
     /*
-     * This class is called from client code running in hosted mode as well as
-     * server code running in the servlet container.  In hosted mode, we want to
-     * load classes through the CompilingClassLoader$MultiParentClassLoader, not
-     * the system classloader.
+     * This class is called from client code running in Development Mode as well
+     * as server code running in the servlet container. In Development Mode, we
+     * want to load classes through the
+     * CompilingClassLoader$MultiParentClassLoader, not the system classloader.
      */
     ClassLoader classLoader = GWT.isClient()
         ? SerializabilityUtil.class.getClassLoader()
diff --git a/user/test/com/google/gwt/benchmarks/client/BenchmarkTest.java b/user/test/com/google/gwt/benchmarks/client/BenchmarkTest.java
index 192c82b..d1c055d 100644
--- a/user/test/com/google/gwt/benchmarks/client/BenchmarkTest.java
+++ b/user/test/com/google/gwt/benchmarks/client/BenchmarkTest.java
@@ -168,7 +168,8 @@
   }
 
   /**
-   * Do something that is relatively expensive both in hosted mode and web mode.
+   * Do something that is relatively expensive both in Development Mode and
+   * Production Mode.
    */
   private native void somethingExpensive() /*-{
     var deadField = 0;
diff --git a/user/test/com/google/gwt/core/client/JavaScriptExceptionTest.java b/user/test/com/google/gwt/core/client/JavaScriptExceptionTest.java
index 6397c5b..2c5bd21 100644
--- a/user/test/com/google/gwt/core/client/JavaScriptExceptionTest.java
+++ b/user/test/com/google/gwt/core/client/JavaScriptExceptionTest.java
@@ -54,9 +54,9 @@
   }-*/;
 
   /**
-   * This test doesn't work in hosted mode yet; we'd need a way to throw true
-   * native objects as exceptions. Windows/IE is the deal killer right now on
-   * really making this work since there's no way to raise an exception of a
+   * This test doesn't work in Development Mode yet; we'd need a way to throw
+   * true native objects as exceptions. Windows/IE is the deal killer right now
+   * on really making this work since there's no way to raise an exception of a
    * true JS value. We could use JS lambdas around Java calls to get around this
    * restriction.
    */
diff --git a/user/test/com/google/gwt/core/client/JsArrayTest.java b/user/test/com/google/gwt/core/client/JsArrayTest.java
index d20f51c..a5344ed 100644
--- a/user/test/com/google/gwt/core/client/JsArrayTest.java
+++ b/user/test/com/google/gwt/core/client/JsArrayTest.java
@@ -71,12 +71,12 @@
     assertEquals(4, jsArray.length());
 
     // Stick a non-JSO value in the '4' slot. Getting it should cause a type
-    // error in hosted mode.
+    // error in Development Mode.
     if (!GWT.isScript()) {
       try {
         jsArray.<JsArrayString> cast().set(4, "bubba");
         jsArray.get(4);
-        fail("Expected an exception getting an invalid value in hosted mode");
+        fail("Expected an exception getting an invalid value in Development Mode");
       } catch (Throwable e) {
       }
     }
@@ -98,12 +98,12 @@
     assertEquals("true,false,true", jsArray.join());
     assertEquals("true:false:true", jsArray.join(":"));
 
-    // Make sure getting the '3' element throws an exception in hosted mode
-    // (this won't happen in web mode).
+    // Make sure getting the '3' element throws an exception in Development Mode
+    // (this won't happen in Production Mode).
     if (!GWT.isScript()) {
       try {
         jsArray.get(3);
-        fail("Expected an exception getting an invalid value in hosted mode");
+        fail("Expected an exception getting an invalid value in Development Mode");
       } catch (Throwable e) {
       }
     }
@@ -115,12 +115,12 @@
     assertEquals(4, jsArray.length());
 
     // Stick a non-boolean value in the '4' slot. Getting it should cause a type
-    // error in hosted mode.
+    // error in Development Mode.
     if (!GWT.isScript()) {
       try {
         jsArray.<JsArrayString> cast().set(4, "bubba");
         jsArray.get(4);
-        fail("Expected an exception getting an invalid value in hosted mode");
+        fail("Expected an exception getting an invalid value in Development Mode");
       } catch (Throwable e) {
       }
     } else {
@@ -152,12 +152,12 @@
     assertEquals("0,1,2", jsArray.join());
     assertEquals("0:1:2", jsArray.join(":"));
 
-    // Make sure getting the '3' element throws an exception in hosted mode
-    // (this won't happen in web mode).
+    // Make sure getting the '3' element throws an exception in Development Mode
+    // (this won't happen in Production Mode).
     if (!GWT.isScript()) {
       try {
         jsArray.get(3);
-        fail("Expected an exception getting an invalid value in hosted mode");
+        fail("Expected an exception getting an invalid value in Development Mode");
       } catch (Throwable e) {
       }
     }
@@ -169,12 +169,12 @@
     assertEquals(4, jsArray.length());
 
     // Stick a non-numeric value in the '4' slot. Getting it should cause a type
-    // error in hosted mode.
+    // error in Development Mode.
     if (!GWT.isScript()) {
       try {
         jsArray.<JsArrayString> cast().set(4, "bubba");
         jsArray.get(4);
-        fail("Expected an exception getting an invalid value in hosted mode");
+        fail("Expected an exception getting an invalid value in Development Mode");
       } catch (Throwable e) {
       }
     } else {
@@ -206,12 +206,12 @@
     assertEquals("0,1.1,2.2", jsArray.join());
     assertEquals("0:1.1:2.2", jsArray.join(":"));
 
-    // Make sure getting the '3' element throws an exception in hosted mode
-    // (this won't happen in web mode).
+    // Make sure getting the '3' element throws an exception in Development Mode
+    // (this won't happen in Production Mode).
     if (!GWT.isScript()) {
       try {
         jsArray.get(3);
-        fail("Expected an exception getting an invalid value in hosted mode");
+        fail("Expected an exception getting an invalid value in Development Mode");
       } catch (Throwable e) {
       }
     }
@@ -223,12 +223,12 @@
     assertEquals(4, jsArray.length());
 
     // Stick a non-numeric value in the '4' slot. Getting it should cause a type
-    // error in hosted mode.
+    // error in Development Mode.
     if (!GWT.isScript()) {
       try {
         jsArray.<JsArrayString> cast().set(4, "bubba");
         jsArray.get(4);
-        fail("Expected an exception getting an invalid value in hosted mode");
+        fail("Expected an exception getting an invalid value in Development Mode");
       } catch (Throwable e) {
       }
     } else {
@@ -274,12 +274,12 @@
     assertEquals(4, jsArray.length());
 
     // Stick a non-String value in the '4' slot. Getting it should cause a type
-    // error in hosted mode.
+    // error in Development Mode.
     if (!GWT.isScript()) {
       try {
         jsArray.<JsArrayBoolean> cast().set(4, true);
         jsArray.get(4);
-        fail("Expected an exception getting an invalid value in hosted mode");
+        fail("Expected an exception getting an invalid value in Development Mode");
       } catch (Throwable e) {
       }
     } else {
diff --git a/user/test/com/google/gwt/core/client/impl/StackTraceCreatorTest.java b/user/test/com/google/gwt/core/client/impl/StackTraceCreatorTest.java
index 40bb63b..e57776a 100644
--- a/user/test/com/google/gwt/core/client/impl/StackTraceCreatorTest.java
+++ b/user/test/com/google/gwt/core/client/impl/StackTraceCreatorTest.java
@@ -23,8 +23,8 @@
 import com.google.gwt.junit.client.GWTTestCase;
 
 /**
- * Tests StackTraceCreator in web mode. The methods in this test class are
- * static so that their names can be reliably determined in web mode.
+ * Tests StackTraceCreator in Production Mode. The methods in this test class
+ * are static so that their names can be reliably determined in Production Mode.
  */
 public class StackTraceCreatorTest extends GWTTestCase {
   
@@ -41,7 +41,7 @@
        */
       assertNotNull(e.getStackTrace());
       if (e.getStackTrace().length == 0) {
-        assertTrue("hosted mode", GWT.isScript());
+        assertTrue("Development Mode", GWT.isScript());
         return;
       } else {
         t = e;
@@ -66,7 +66,7 @@
    */  
   public static void testReentrantCalls() {
     if (!GWT.isScript()) {
-      // sample is useless in hosted mode
+      // sample is useless in Development Mode
       return;
     }
 
diff --git a/user/test/com/google/gwt/core/ext/linker/impl/SelectionScriptLinkerUnitTest.java b/user/test/com/google/gwt/core/ext/linker/impl/SelectionScriptLinkerUnitTest.java
index 433c38a..f4646ba 100644
--- a/user/test/com/google/gwt/core/ext/linker/impl/SelectionScriptLinkerUnitTest.java
+++ b/user/test/com/google/gwt/core/ext/linker/impl/SelectionScriptLinkerUnitTest.java
@@ -200,11 +200,11 @@
   }
 
   /**
-   * Test timestamps on the selection script. For hosted mode, it should match
-   * the module's timestamp. For dev mode, it should be current.
+   * Test timestamps on the selection script. For Development Mode, it should match
+   * the module's timestamp. For Production Mode, it should be current.
    */
   public void testTimestampOnSelectionScript() throws UnableToCompleteException {
-    // hosted
+    // Development Mode
     {
       ArtifactSet artifacts = new ArtifactSet();
       ArtifactSet updated = new ShardableSelectionScriptLinker().link(
@@ -213,7 +213,7 @@
       assertEquals(MOCK_MODULE_LAST_MODIFIED, selectionScript.getLastModified());
     }
 
-    // compiled
+    // Production Mode
     {
       ArtifactSet artifacts = new ArtifactSet();
       artifacts.add(createCompilationResult());
diff --git a/user/test/com/google/gwt/dev/jjs/scriptonly/ScriptOnlyClass.java b/user/test/com/google/gwt/dev/jjs/scriptonly/ScriptOnlyClass.java
index 066dad4..2c33fc4 100644
--- a/user/test/com/google/gwt/dev/jjs/scriptonly/ScriptOnlyClass.java
+++ b/user/test/com/google/gwt/dev/jjs/scriptonly/ScriptOnlyClass.java
@@ -51,7 +51,7 @@
   }
 
   /**
-   * Can only do this in hosted mode.
+   * Can only do this in Development Mode.
    */
   public String getClassLoaderName() {
     return getClass().getClassLoader().getClass().getName();
diff --git a/user/test/com/google/gwt/dev/jjs/scriptonly/ScriptOnlyTest.java b/user/test/com/google/gwt/dev/jjs/scriptonly/ScriptOnlyTest.java
index b9e8045..c1b5389 100644
--- a/user/test/com/google/gwt/dev/jjs/scriptonly/ScriptOnlyTest.java
+++ b/user/test/com/google/gwt/dev/jjs/scriptonly/ScriptOnlyTest.java
@@ -21,7 +21,8 @@
 import com.google.gwt.user.client.rpc.AsyncCallback;
 
 /**
- * Tests various aspects of using user-defined bridge classes in hosted mode.
+ * Tests various aspects of using user-defined bridge classes in Development
+ * Mode.
  */
 public class ScriptOnlyTest extends GWTTestCase {
 
@@ -45,7 +46,7 @@
   public void testUserBridgeClass() {
     final ScriptOnlyClass b = new ScriptOnlyClass();
     if (GWT.isScript()) {
-      // Just make sure the super-source version is used in web mode
+      // Just make sure the super-source version is used in Production Mode
       assertFalse(b.isHostedMode());
       return;
     }
@@ -56,10 +57,10 @@
     // Is the sub-loader delegating to our CCL?
     assertSame(Window.class, b.getWindowClass());
 
-    // Try something you can't do in web-mode (JRE code)
+    // Try something you can't do in Production Mode (JRE code)
     assertNotNull(b.getClassLoaderName());
 
-    // Try something you can't do in web-mode ("server" code)
+    // Try something you can't do in Prodiction Mode ("server" code)
     assertTrue(b.callCodeNotInSourcePath());
 
     b.callCallback(new AsyncCallback<ScriptOnlyClass>() {
diff --git a/user/test/com/google/gwt/dev/jjs/test/ClassObjectTest.java b/user/test/com/google/gwt/dev/jjs/test/ClassObjectTest.java
index 94a3d54..b1b3b3c 100644
--- a/user/test/com/google/gwt/dev/jjs/test/ClassObjectTest.java
+++ b/user/test/com/google/gwt/dev/jjs/test/ClassObjectTest.java
@@ -18,7 +18,7 @@
 import com.google.gwt.junit.client.GWTTestCase;
 
 /**
- * Tests the web mode implementation of class literals.
+ * Tests the Production Mode implementation of class literals.
  */
 public class ClassObjectTest extends GWTTestCase {
 
diff --git a/user/test/com/google/gwt/dev/jjs/test/CompilerTest.java b/user/test/com/google/gwt/dev/jjs/test/CompilerTest.java
index 2dab26e..a2d82f4 100644
--- a/user/test/com/google/gwt/dev/jjs/test/CompilerTest.java
+++ b/user/test/com/google/gwt/dev/jjs/test/CompilerTest.java
@@ -619,17 +619,17 @@
   /**
    * Make sure that the compiler does not crash itself on user code that divides
    * by zero. The actual behavior varies by the numeric type and whether it is
-   * hosted mode or web mode, but the important thing is that the compiler does
-   * not crash.
+   * Development Mode or Production Mode, but the important thing is that the
+   * compiler does not crash.
    */
   public void testDivByZero() {
     assertTrue(Double.isNaN(0.0 / 0.0));
 
     try {
-      // 0 / 0 is currently 0 in web mode.
+      // 0 / 0 is currently 0 in Production Mode.
       assertEquals(0, 0 / 0);
     } catch (ArithmeticException expected) {
-      // expected in hosted mode
+      // expected in Development Mode
     }
 
     try {
@@ -642,10 +642,10 @@
     assertTrue(Double.isNaN(0.0 % 0.0));
 
     try {
-      // 0 % 0 is currently NaN in web mode.
+      // 0 % 0 is currently NaN in Production Mode.
       assertTrue(Double.isNaN(0 % 0));
     } catch (ArithmeticException expected) {
-      // expected in hosted mode
+      // expected in Development Mode
     }
 
     try {
@@ -986,9 +986,9 @@
       f.returnNull().toString();
       fail();
     } catch (NullPointerException e) {
-      // hosted mode
+      // Development Mode
     } catch (JavaScriptException e) {
-      // web mode
+      // Production Mode
     }
 
     try {
@@ -996,9 +996,9 @@
       fa[4] = null;
       fail();
     } catch (NullPointerException e) {
-      // hosted mode
+      // Development Mode
     } catch (JavaScriptException e) {
-      // web mode
+      // Production Mode
     }
   }
 
diff --git a/user/test/com/google/gwt/dev/jjs/test/HostedTest.java b/user/test/com/google/gwt/dev/jjs/test/HostedTest.java
index fdc19cf..dcbe1ac 100644
--- a/user/test/com/google/gwt/dev/jjs/test/HostedTest.java
+++ b/user/test/com/google/gwt/dev/jjs/test/HostedTest.java
@@ -29,7 +29,7 @@
 import java.util.List;
 
 /**
- * Tests several tricky aspects of hosted mode.
+ * Tests several tricky aspects of Development Mode.
  */
 public class HostedTest extends GWTTestCase {
 
@@ -213,8 +213,8 @@
 
   /*
    * Test that returning JavaScript boxed primitives works as expected. Note
-   * that Boolean and Number cannot be supported properly in web mode, so we do
-   * not support it in hosted mode and therefore do not test it here.
+   * that Boolean and Number cannot be supported properly in Production Mode, so
+   * we do not support it in Development Mode and therefore do not test it here.
    */
   public void testAutoBoxing() {
     JavaScriptObject bvo = getBoxedBooleanAsObject(true);
@@ -601,8 +601,8 @@
     assertEquals(str, "test");
     try {
       getIntAsObject();
-      // should have thrown an exception in hosted mode,
-      // so fail unless we are in web mode
+      // should have thrown an exception in Development Mode,
+      // so fail unless we are in Production Mode
       assertTrue(GWT.isScript());
     } catch (IllegalArgumentException e) {
       // expected exception
diff --git a/user/test/com/google/gwt/dev/jjs/test/JStaticEvalTest.java b/user/test/com/google/gwt/dev/jjs/test/JStaticEvalTest.java
index e96578a..b116fb7 100644
--- a/user/test/com/google/gwt/dev/jjs/test/JStaticEvalTest.java
+++ b/user/test/com/google/gwt/dev/jjs/test/JStaticEvalTest.java
@@ -28,7 +28,7 @@
  * assert should become trivial things like <code>assertEquals("", 5, 5)</code>.
  * 
  * To verify the test itself, which includes a lot of random constants, run in
- * hosted mode.
+ * Development Mode.
  */
 public class JStaticEvalTest extends GWTTestCase {
   private static void assertEquals(double expected, double actual) {
diff --git a/user/test/com/google/gwt/dev/jjs/test/JsStaticEvalTest.java b/user/test/com/google/gwt/dev/jjs/test/JsStaticEvalTest.java
index 1f58ab5..056148e 100644
--- a/user/test/com/google/gwt/dev/jjs/test/JsStaticEvalTest.java
+++ b/user/test/com/google/gwt/dev/jjs/test/JsStaticEvalTest.java
@@ -21,8 +21,8 @@
 /**
  * Most of these tests (the "do" ones guarded by isScript tests) verify that
  * declarations in pruned code still happen. Those tests do not run reliably in
- * hosted mode due to browser inconsistencies; however it should run in web mode
- * due to our normalizations.
+ * Development Mode due to browser inconsistencies; however it should run in
+ * Production Mode due to our normalizations.
  */
 public class JsStaticEvalTest extends GWTTestCase {
   @SuppressWarnings("unused")
diff --git a/user/test/com/google/gwt/dev/jjs/test/RunAsyncMetricsIntegrationTest.java b/user/test/com/google/gwt/dev/jjs/test/RunAsyncMetricsIntegrationTest.java
index 37085f6..421ee59 100644
--- a/user/test/com/google/gwt/dev/jjs/test/RunAsyncMetricsIntegrationTest.java
+++ b/user/test/com/google/gwt/dev/jjs/test/RunAsyncMetricsIntegrationTest.java
@@ -121,7 +121,7 @@
 
   public void testMetricsSignalled() {
     if (!GWT.isScript()) {
-      // There are no runAsync lightweight metrics in hosted mode
+      // There are no runAsync lightweight metrics in Development Mode
       return;
     }
     delayTestFinish(TIMEOUT);
diff --git a/user/test/com/google/gwt/emultest/benchmarks/java/util/ArraySortBenchmark.java b/user/test/com/google/gwt/emultest/benchmarks/java/util/ArraySortBenchmark.java
index 33f7585..5309ff6 100644
--- a/user/test/com/google/gwt/emultest/benchmarks/java/util/ArraySortBenchmark.java
+++ b/user/test/com/google/gwt/emultest/benchmarks/java/util/ArraySortBenchmark.java
@@ -132,9 +132,9 @@
   @Override
   protected void gwtSetUp() throws Exception {
     /*
-     * Since the RNG available in web mode cannot accept a seed for reproducible
-     * reports we use a simple pseudorandom sequence here. Its only purpose is
-     * to reasonably shuffle the data.
+     * Since the RNG available in Production Mode cannot accept a seed for
+     * reproducible reports we use a simple pseudorandom sequence here. Its only
+     * purpose is to reasonably shuffle the data.
      */
     initByteArray = new byte[MAX_ARRAY_SIZE + SUBARRAY_SKIP];
     for (int i = 0; i < MAX_ARRAY_SIZE + SUBARRAY_SKIP; i++) {
diff --git a/user/test/com/google/gwt/emultest/java/lang/CompilerConstantStringTest.java b/user/test/com/google/gwt/emultest/java/lang/CompilerConstantStringTest.java
index 51129e3..eac1290 100644
--- a/user/test/com/google/gwt/emultest/java/lang/CompilerConstantStringTest.java
+++ b/user/test/com/google/gwt/emultest/java/lang/CompilerConstantStringTest.java
@@ -128,7 +128,7 @@
 
       /*
        * Verify that the resulting hash code is numeric, since this is not
-       * enforced in web mode.
+       * enforced in Production Mode.
        */
       String str = Integer.toString(savedHash[i]);
       for (int j = 0; j < str.length(); ++j) {
diff --git a/user/test/com/google/gwt/emultest/java/lang/StringTest.java b/user/test/com/google/gwt/emultest/java/lang/StringTest.java
index 1fb2803..46d0efb 100644
--- a/user/test/com/google/gwt/emultest/java/lang/StringTest.java
+++ b/user/test/com/google/gwt/emultest/java/lang/StringTest.java
@@ -156,17 +156,17 @@
     assertEquals("bcd", str);
     try {
       new String(bytes, 1, 6);
-      assertTrue("Should have thrown IOOB in devmode", GWT.isScript());
+      assertTrue("Should have thrown IOOB in Development Mode", GWT.isScript());
     } catch (IndexOutOfBoundsException expected) {
     }
     try {
       new String(bytes, -1, 2);
-      assertTrue("Should have thrown IOOB in devmode", GWT.isScript());
+      assertTrue("Should have thrown IOOB in Development Mode", GWT.isScript());
     } catch (IndexOutOfBoundsException expected) {
     }
     try {
       new String(bytes, 6, 2);
-      assertTrue("Should have thrown IOOB in devmode", GWT.isScript());
+      assertTrue("Should have thrown IOOB in Development Mode", GWT.isScript());
     } catch (IndexOutOfBoundsException expected) {
     }
   }
@@ -181,17 +181,17 @@
     assertEquals("ßçÐ", str);
     try {
       new String(bytes, 1, 6, "ISO-8859-1");
-      assertTrue("Should have thrown IOOB in devmode", GWT.isScript());
+      assertTrue("Should have thrown IOOB in Development Mode", GWT.isScript());
     } catch (IndexOutOfBoundsException expected) {
     }
     try {
       new String(bytes, -1, 2, "ISO-8859-1");
-      assertTrue("Should have thrown IOOB in devmode", GWT.isScript());
+      assertTrue("Should have thrown IOOB in Development Mode", GWT.isScript());
     } catch (IndexOutOfBoundsException expected) {
     }
     try {
       new String(bytes, 6, 2, "ISO-8859-1");
-      assertTrue("Should have thrown IOOB in devmode", GWT.isScript());
+      assertTrue("Should have thrown IOOB in Development Mode", GWT.isScript());
     } catch (IndexOutOfBoundsException expected) {
     }
   }
@@ -207,17 +207,17 @@
     assertEquals("ßçÐ", str);
     try {
       new String(bytes, 2, 12, "UTF-8");
-      assertTrue("Should have thrown IOOB in devmode", GWT.isScript());
+      assertTrue("Should have thrown IOOB in Development Mode", GWT.isScript());
     } catch (IndexOutOfBoundsException expected) {
     }
     try {
       new String(bytes, -1, 2, "UTF-8");
-      assertTrue("Should have thrown IOOB in devmode", GWT.isScript());
+      assertTrue("Should have thrown IOOB in Development Mode", GWT.isScript());
     } catch (IndexOutOfBoundsException expected) {
     }
     try {
       new String(bytes, 12, 2, "UTF-8");
-      assertTrue("Should have thrown IOOB in devmode", GWT.isScript());
+      assertTrue("Should have thrown IOOB in Development Mode", GWT.isScript());
     } catch (IndexOutOfBoundsException expected) {
     }
   }
@@ -368,7 +368,7 @@
 
       /*
        * Verify that the resulting hash code is numeric, since this is not
-       * enforced in web mode.
+       * enforced in Production Mode.
        */
       String str = Integer.toString(expectedHash);
       for (int j = 0; j < str.length(); ++j) {
diff --git a/user/test/com/google/gwt/emultest/java/math/BigDecimalCompareTest.java b/user/test/com/google/gwt/emultest/java/math/BigDecimalCompareTest.java
index d91f5b1..794309e 100644
--- a/user/test/com/google/gwt/emultest/java/math/BigDecimalCompareTest.java
+++ b/user/test/com/google/gwt/emultest/java/math/BigDecimalCompareTest.java
@@ -374,7 +374,7 @@
    */
   public void testNegateMathContextNegative() {
     if (!GWT.isScript()) {
-      // OpenJDK fails this test, so for now we only run it in web mode
+      // OpenJDK fails this test, so for now we only run it in Production Mode
       return;
     }
     String a = "-92948782094488478231212478987482988429808779810457634781384756794987";
@@ -395,7 +395,7 @@
    */
   public void testNegateMathContextPositive() {
     if (!GWT.isScript()) {
-      // OpenJDK fails this test, so for now we only run it in web mode
+      // OpenJDK fails this test, so for now we only run it in Production Mode
       return;
     }
     String a = "92948782094488478231212478987482988429808779810457634781384756794987";
diff --git a/user/test/com/google/gwt/emultest/java/util/IdentityHashMapTest.java b/user/test/com/google/gwt/emultest/java/util/IdentityHashMapTest.java
index 2b4783e..cea9f19 100644
--- a/user/test/com/google/gwt/emultest/java/util/IdentityHashMapTest.java
+++ b/user/test/com/google/gwt/emultest/java/util/IdentityHashMapTest.java
@@ -505,8 +505,8 @@
     hashMap1.put(new Foo(), VALUE_1);
     hashMap2.put(new Foo(), VALUE_1);
     if (GWT.isScript()) {
-      // Only reliable in web mode since hosted mode can have identity hash
-      // collisions.
+      // Only reliable in Production Mode since Development Mode can have
+      // identity hash collisions.
       assertFalse(hashMap1.hashCode() == hashMap2.hashCode());
     }
   }
diff --git a/user/test/com/google/gwt/emultest/java/util/LinkedHashMapTest.java b/user/test/com/google/gwt/emultest/java/util/LinkedHashMapTest.java
index 332e6b2..ed8c804 100644
--- a/user/test/com/google/gwt/emultest/java/util/LinkedHashMapTest.java
+++ b/user/test/com/google/gwt/emultest/java/util/LinkedHashMapTest.java
@@ -747,10 +747,10 @@
 
   /**
    * This method exists because java 1.5 no longer has
-   * LinkedHashMap(LinkedHashMap), replacing it with LinkedHashMap(Map<?
-   * extends K, ? extends V> m). Nevertheless, we want to use it in web mode to
-   * test that web mode function.
-   * 
+   * LinkedHashMap(LinkedHashMap), replacing it with LinkedHashMap(Map<? extends
+   * K, ? extends V> m). Nevertheless, we want to use it in Production Mode to
+   * test that Production Mode function.
+   *
    * @param hashMap the LinkedHashMap to be copied
    * @return the copy
    */
diff --git a/user/test/com/google/gwt/emultest/java/util/TreeMapTest.java b/user/test/com/google/gwt/emultest/java/util/TreeMapTest.java
index 37cd46d..4b5eb2e 100644
--- a/user/test/com/google/gwt/emultest/java/util/TreeMapTest.java
+++ b/user/test/com/google/gwt/emultest/java/util/TreeMapTest.java
@@ -310,7 +310,8 @@
     } catch (NullPointerException e) {
       // expected outcome
     } catch (JavaScriptException e) {
-      // in web mode we don't actually do null checks, so we get a JS exception
+      // in Production Mode we don't actually do null checks, so we get a JS
+      // exception
     }
   }
 
@@ -344,7 +345,8 @@
     } catch (NullPointerException e) {
       // expected outcome
     } catch (JavaScriptException e) {
-      // in web mode we don't actually do null checks, so we get a JS exception
+      // in Production Mode we don't actually do null checks, so we get a JS
+      // exception
     }
   }
 
@@ -372,7 +374,7 @@
     map.put(getKeys()[0], getValues()[0]);
     try {
       map.containsKey(getConflictingKey());
-      assertTrue("CCE expected in hosted mode", GWT.isScript());
+      assertTrue("CCE expected in Development Mode", GWT.isScript());
     } catch (ClassCastException e) {
       // expected outcome
     }
@@ -392,7 +394,7 @@
       } catch (NullPointerException e) {
         // expected outcome
       } catch (JavaScriptException e) {
-        // in web mode we don't actually do null checks, so we get a JS
+        // in Production Mode we don't actually do null checks, so we get a JS
         // exception
       }
     }
@@ -683,7 +685,7 @@
     map.put(getKeys()[0], getValues()[0]);
     try {
       map.get(getConflictingKey());
-      assertTrue("CCE expected in hosted mode", GWT.isScript());
+      assertTrue("CCE expected in Development Mode", GWT.isScript());
     } catch (ClassCastException e) {
       // expected outcome
     }
@@ -805,7 +807,7 @@
     } else {
       try {
         sortedMap.headMap(getConflictingKey());
-        assertTrue("CCE expected in hosted mode", GWT.isScript());
+        assertTrue("CCE expected in Development Mode", GWT.isScript());
       } catch (ClassCastException e) {
         // expected outcome
       }
@@ -1137,7 +1139,7 @@
       try {
         Map untypedMap = map;
         untypedMap.put(getConflictingKey(), getValues()[1]);
-        assertTrue("CCE expected in hosted mode", GWT.isScript());
+        assertTrue("CCE expected in Development Mode", GWT.isScript());
       } catch (ClassCastException e) {
         // expected outcome
       }
@@ -1352,7 +1354,7 @@
       destMap.put(getKeys()[0], getValues()[0]);
       try {
         destMap.putAll(sourceMap);
-        assertTrue("CCE expected in hosted mode", GWT.isScript());
+        assertTrue("CCE expected in Development Mode", GWT.isScript());
       } catch (ClassCastException e) {
         // expected outcome
       }
@@ -1388,7 +1390,7 @@
       } catch (NullPointerException e) {
         // expected outcome
       } catch (JavaScriptException e) {
-        // in web mode we don't actually do null checks, so we get a JS
+        // in Production Mode we don't actually do null checks, so we get a JS
         // exception
       }
     }
@@ -1447,7 +1449,7 @@
       map.put(getKeys()[0], getValues()[0]);
       try {
         map.remove(getConflictingKey());
-        assertTrue("CCE expected in hosted mode", GWT.isScript());
+        assertTrue("CCE expected in Development Mode", GWT.isScript());
       } catch (ClassCastException e) {
         // expected outcome
       }
@@ -1579,19 +1581,19 @@
     sortedMap.put(getKeys()[0], getValues()[0]);
     try {
       sortedMap.subMap(getConflictingKey(), getKeys()[0]);
-      assertTrue("CCE expected in hosted mode", GWT.isScript());
+      assertTrue("CCE expected in Development Mode", GWT.isScript());
     } catch (IllegalArgumentException e) {
-      // since we can't ensure CCEs in web mode, we may get IAE
-      assertTrue("IllegalArgumentException in hosted mode", GWT.isScript());
+      // since we can't ensure CCEs in Production Mode, we may get IAE
+      assertTrue("IllegalArgumentException in Development Mode", GWT.isScript());
     } catch (ClassCastException e) {
       // expected outcome
     }
     try {
       sortedMap.subMap(getKeys()[0], getConflictingKey());
-      assertTrue("CCE expected in hosted mode", GWT.isScript());
+      assertTrue("CCE expected in Development Mode", GWT.isScript());
     } catch (IllegalArgumentException e) {
-      // since we can't ensure CCEs in web mode, we may get IAE
-      assertTrue("IllegalArgumentException in hosted mode", GWT.isScript());
+      // since we can't ensure CCEs in Production Mode, we may get IAE
+      assertTrue("IllegalArgumentException in Development Mode", GWT.isScript());
     } catch (ClassCastException e) {
       // expected outcome
     }
@@ -1710,7 +1712,7 @@
     } else {
       try {
         sortedMap.tailMap(getConflictingKey());
-        assertTrue("CCE expected in hosted mode", GWT.isScript());
+        assertTrue("CCE expected in Development Mode", GWT.isScript());
       } catch (ClassCastException e) {
         // expected outcome
       }
diff --git a/user/test/com/google/gwt/emultest/java/util/TreeSetTest.java b/user/test/com/google/gwt/emultest/java/util/TreeSetTest.java
index 7d64188..75502cd 100644
--- a/user/test/com/google/gwt/emultest/java/util/TreeSetTest.java
+++ b/user/test/com/google/gwt/emultest/java/util/TreeSetTest.java
@@ -183,7 +183,7 @@
       try {
         Set untypedSet = set;
         untypedSet.add(getConflictingKey());
-        assertTrue("CCE expected in hosted mode", GWT.isScript());
+        assertTrue("CCE expected in Development Mode", GWT.isScript());
       } catch (ClassCastException e) {
         // expected outcome
       }
@@ -346,7 +346,7 @@
       destSet.add(getKeys()[0]);
       try {
         destSet.addAll(sourceSet);
-        assertTrue("CCE expected in hosted mode", GWT.isScript());
+        assertTrue("CCE expected in Development Mode", GWT.isScript());
       } catch (ClassCastException e) {
         // expected outcome
       }
@@ -369,7 +369,7 @@
       } catch (NullPointerException e) {
         // expected outcome
       } catch (JavaScriptException e) {
-        // in web mode we don't actually do null checks, so we get a JS
+        // in Production Mode we don't actually do null checks, so we get a JS
         // exception
       }
     }
@@ -517,7 +517,8 @@
     } catch (NullPointerException e) {
       // expected outcome
     } catch (JavaScriptException e) {
-      // in web mode we don't actually do null checks, so we get a JS exception
+      // in Production Mode we don't actually do null checks, so we get a JS
+      // exception
     }
   }
 
@@ -533,7 +534,8 @@
     } catch (NullPointerException e) {
       // expected outcome
     } catch (JavaScriptException e) {
-      // in web mode we don't actually do null checks, so we get a JS exception
+      // in Production Mode we don't actually do null checks, so we get a JS
+      // exception
     }
   }
 
@@ -579,7 +581,7 @@
     set.add(getKeys()[0]);
     try {
       set.contains(getConflictingKey());
-      assertTrue("CCE expected in hosted mode", GWT.isScript());
+      assertTrue("CCE expected in Development Mode", GWT.isScript());
     } catch (ClassCastException e) {
       // expected outcome
     }
@@ -599,7 +601,7 @@
       } catch (NullPointerException e) {
         // expected outcome
       } catch (JavaScriptException e) {
-        // in web mode we don't actually do null checks, so we get a JS
+        // in Production Mode we don't actually do null checks, so we get a JS
         // exception
       }
     }
@@ -705,7 +707,7 @@
     } else {
       try {
         SortedSet.headSet(getConflictingKey());
-        assertTrue("CCE expected in hosted mode", GWT.isScript());
+        assertTrue("CCE expected in Development Mode", GWT.isScript());
       } catch (ClassCastException e) {
         // expected outcome
       }
@@ -853,7 +855,7 @@
       set.add(getKeys()[0]);
       try {
         set.remove(getConflictingKey());
-        assertTrue("CCE expected in hosted mode", GWT.isScript());
+        assertTrue("CCE expected in Development Mode", GWT.isScript());
       } catch (ClassCastException e) {
         // expected outcome
       }
@@ -923,19 +925,19 @@
     SortedSet.add(getKeys()[0]);
     try {
       SortedSet.subSet(getConflictingKey(), getKeys()[0]);
-      assertTrue("CCE expected in hosted mode", GWT.isScript());
+      assertTrue("CCE expected in Development Mode", GWT.isScript());
     } catch (IllegalArgumentException e) {
-      // since we can't ensure CCEs in web mode, we may get IAE
-      assertTrue("IllegalArgumentException in hosted mode", GWT.isScript());
+      // since we can't ensure CCEs in Production Mode, we may get IAE
+      assertTrue("IllegalArgumentException in Development Mode", GWT.isScript());
     } catch (ClassCastException e) {
       // expected outcome
     }
     try {
       SortedSet.subSet(getKeys()[0], getConflictingKey());
-      assertTrue("CCE expected in hosted mode", GWT.isScript());
+      assertTrue("CCE expected in Development Mode", GWT.isScript());
     } catch (IllegalArgumentException e) {
-      // since we can't ensure CCEs in web mode, we may get IAE
-      assertTrue("IllegalArgumentException in hosted mode", GWT.isScript());
+      // since we can't ensure CCEs in Production Mode, we may get IAE
+      assertTrue("IllegalArgumentException in Development Mode", GWT.isScript());
     } catch (ClassCastException e) {
       // expected outcome
     }
@@ -1057,7 +1059,7 @@
     } else {
       try {
         SortedSet.tailSet(getConflictingKey());
-        assertTrue("CCE expected in hosted mode", GWT.isScript());
+        assertTrue("CCE expected in Development Mode", GWT.isScript());
       } catch (ClassCastException e) {
         // expected outcome
       }
diff --git a/user/test/com/google/gwt/event/shared/HandlerManagerTest.java b/user/test/com/google/gwt/event/shared/HandlerManagerTest.java
index 6b6ce9d..7b96e17 100644
--- a/user/test/com/google/gwt/event/shared/HandlerManagerTest.java
+++ b/user/test/com/google/gwt/event/shared/HandlerManagerTest.java
@@ -206,7 +206,7 @@
       return;
     }
 
-    // Web mode, no asserts, so remove will quietly succeed.
+    // Production Mode, no asserts, so remove will quietly succeed.
     manager.fireEvent(new MouseDownEvent() {
     });
     assertFired(one);
diff --git a/user/test/com/google/gwt/json/client/JSONTest.java b/user/test/com/google/gwt/json/client/JSONTest.java
index 57c0ae4..66e692f 100644
--- a/user/test/com/google/gwt/json/client/JSONTest.java
+++ b/user/test/com/google/gwt/json/client/JSONTest.java
@@ -184,7 +184,7 @@
     assertEquals(new JSONString("foo"), new JSONString("foo"));
   }
 
-  // Null characters do not work in hosted mode
+  // Null characters do not work in Development Mode
   public void testEscaping() {
     JSONObject o = new JSONObject();
     char[] charsToEscape = new char[42];
diff --git a/user/test/com/google/gwt/regexp/shared/RegExpTest.java b/user/test/com/google/gwt/regexp/shared/RegExpTest.java
index a9a8b14..7590374 100644
--- a/user/test/com/google/gwt/regexp/shared/RegExpTest.java
+++ b/user/test/com/google/gwt/regexp/shared/RegExpTest.java
@@ -140,7 +140,7 @@
   
   public void testExec_controlCharacterValid() {
     regExp = RegExp.compile("\\cM");
-    // DISCREPANCY: does not work on hosted mode
+    // DISCREPANCY: does not work on Development Mode
     // checkExec("\r", 0, "\r");
     checkExecNoMatch(allAsciiCharsBut("\r", 255));
   }
diff --git a/user/test/com/google/gwt/resources/client/TextResourceTest.java b/user/test/com/google/gwt/resources/client/TextResourceTest.java
index e3827b0..11080e3 100644
--- a/user/test/com/google/gwt/resources/client/TextResourceTest.java
+++ b/user/test/com/google/gwt/resources/client/TextResourceTest.java
@@ -49,7 +49,7 @@
 
   /**
    * Test fix for problem where large text files caused out of memory errors
-   * when run in hosted mode.
+   * when run in Development Mode.
    */
   public void testBigTextResource() {
     final Resources r = GWT.create(Resources.class);
diff --git a/user/test/com/google/gwt/user/client/AsyncProxyTest.java b/user/test/com/google/gwt/user/client/AsyncProxyTest.java
index 2488c1d..69f3730 100644
--- a/user/test/com/google/gwt/user/client/AsyncProxyTest.java
+++ b/user/test/com/google/gwt/user/client/AsyncProxyTest.java
@@ -135,7 +135,7 @@
   }
 
   public void testProxy() {
-    // Disable in web mode for now
+    // Disable in Production Mode for now
     // TODO Make sure runAsync and JUnit play nicely together
     if (GWT.isScript()) {
       return;
diff --git a/user/test/com/google/gwt/user/client/CookieTest.java b/user/test/com/google/gwt/user/client/CookieTest.java
index 3724808..10488e8 100644
--- a/user/test/com/google/gwt/user/client/CookieTest.java
+++ b/user/test/com/google/gwt/user/client/CookieTest.java
@@ -63,7 +63,7 @@
   public void testExpires() {
     // Generate a random ID for the cookies. Since cookies are shared across
     // browser instances, its possible for multiple instances of this test to
-    // run concurrently (eg. hosted and web mode tests).  If that happens,
+    // run concurrently (eg. hosted and Production Mode tests). If that happens,
     // the cookies will be cleared while we wait for the timer to fire.
     int uniqueId = Random.nextInt(9000000) + 1000000;
     final String earlyCookie = "shouldExpireEarly" + uniqueId;
