Index: dev/core/src/com/google/gwt/dev/HostedModeBase.java
--- dev/core/src/com/google/gwt/dev/HostedModeBase.java	(revision 4993)
+++ dev/core/src/com/google/gwt/dev/HostedModeBase.java	(working copy)
@@ -33,6 +33,7 @@ import com.google.gwt.dev.shell.PlatformSpecific;
 import com.google.gwt.dev.shell.ShellModuleSpaceHost;
 import com.google.gwt.dev.util.Util;
 import com.google.gwt.dev.util.arg.ArgHandlerDisableAggressiveOptimization;
+import com.google.gwt.dev.util.arg.ArgHandlerDisableCastChecking;
 import com.google.gwt.dev.util.arg.ArgHandlerDisableClassMetadata;
 import com.google.gwt.dev.util.arg.ArgHandlerDraftCompile;
 import com.google.gwt.dev.util.arg.ArgHandlerEnableAssertions;
@@ -322,6 +323,7 @@ abstract class HostedModeBase implements BrowserWindowController {
       registerHandler(new ArgHandlerEnableAssertions(options));
       registerHandler(new ArgHandlerDisableAggressiveOptimization(options));
       registerHandler(new ArgHandlerDisableClassMetadata(options));
+      registerHandler(new ArgHandlerDisableCastChecking(options));
       registerHandler(new ArgHandlerDraftCompile(options));
     }
   }
Index: dev/core/src/com/google/gwt/dev/Precompile.java
--- dev/core/src/com/google/gwt/dev/Precompile.java	(revision 4945)
+++ dev/core/src/com/google/gwt/dev/Precompile.java	(working copy)
@@ -44,6 +44,7 @@ import com.google.gwt.dev.shell.CheckForUpdates.UpdateResult;
 import com.google.gwt.dev.util.PerfLogger;
 import com.google.gwt.dev.util.Util;
 import com.google.gwt.dev.util.arg.ArgHandlerDisableAggressiveOptimization;
+import com.google.gwt.dev.util.arg.ArgHandlerDisableCastChecking;
 import com.google.gwt.dev.util.arg.ArgHandlerDisableClassMetadata;
 import com.google.gwt.dev.util.arg.ArgHandlerDisableRunAsync;
 import com.google.gwt.dev.util.arg.ArgHandlerDisableUpdateCheck;
@@ -88,6 +89,7 @@ public class Precompile {
       registerHandler(new ArgHandlerEnableAssertions(options));
       registerHandler(new ArgHandlerDisableAggressiveOptimization(options));
       registerHandler(new ArgHandlerDisableClassMetadata(options));
+      registerHandler(new ArgHandlerDisableCastChecking(options));
       registerHandler(new ArgHandlerValidateOnlyFlag(options));
       registerHandler(new ArgHandlerDisableRunAsync(options));
       registerHandler(new ArgHandlerDraftCompile(options));
@@ -143,6 +145,10 @@ public class Precompile {
       return jjsOptions.isAggressivelyOptimize();
     }
 
+    public boolean isCastCheckingDisabled() {
+      return jjsOptions.isCastCheckingDisabled();
+    }
+
     public boolean isClassMetadataDisabled() {
       return jjsOptions.isClassMetadataDisabled();
     }
@@ -175,6 +181,10 @@ public class Precompile {
       jjsOptions.setAggressivelyOptimize(aggressivelyOptimize);
     }
 
+    public void setCastCheckingDisabled(boolean disabled) {
+      jjsOptions.setCastCheckingDisabled(disabled);
+    }
+
     public void setClassMetadataDisabled(boolean disabled) {
       jjsOptions.setClassMetadataDisabled(disabled);
     }
Index: dev/core/src/com/google/gwt/dev/jjs/JJSOptions.java
--- dev/core/src/com/google/gwt/dev/jjs/JJSOptions.java	(revision 5006)
+++ dev/core/src/com/google/gwt/dev/jjs/JJSOptions.java	(working copy)
@@ -16,6 +16,7 @@
 package com.google.gwt.dev.jjs;
 
 import com.google.gwt.dev.util.arg.OptionAggressivelyOptimize;
+import com.google.gwt.dev.util.arg.OptionDisableCastChecking;
 import com.google.gwt.dev.util.arg.OptionDisableClassMetadata;
 import com.google.gwt.dev.util.arg.OptionDraftCompile;
 import com.google.gwt.dev.util.arg.OptionEnableAssertions;
@@ -28,6 +29,7 @@ import com.google.gwt.dev.util.arg.OptionWorkDir;
  * Controls options for the {@link JavaToJavaScriptCompiler}.
  */
 public interface JJSOptions extends OptionAggressivelyOptimize,
-    OptionDisableClassMetadata, OptionDraftCompile, OptionEnableAssertions,
-    OptionRunAsyncEnabled, OptionScriptStyle, OptionSoycEnabled, OptionWorkDir {
+    OptionDisableClassMetadata, OptionDisableCastChecking, OptionDraftCompile,
+    OptionEnableAssertions, OptionRunAsyncEnabled, OptionScriptStyle,
+    OptionSoycEnabled, OptionWorkDir {
 }
Index: dev/core/src/com/google/gwt/dev/jjs/JJSOptionsImpl.java
--- dev/core/src/com/google/gwt/dev/jjs/JJSOptionsImpl.java	(revision 5006)
+++ dev/core/src/com/google/gwt/dev/jjs/JJSOptionsImpl.java	(working copy)
@@ -24,6 +24,7 @@ import java.io.Serializable;
 public class JJSOptionsImpl implements JJSOptions, Serializable {
 
   private boolean aggressivelyOptimize = true;
+  private boolean disableCastChecking = false;
   private boolean disableClassMetadata = false;
   private boolean draftCompile = false;
   private boolean enableAssertions;
@@ -42,6 +43,7 @@ public class JJSOptionsImpl implements JJSOptions, Serializable {
   public void copyFrom(JJSOptions other) {
     setAggressivelyOptimize(other.isAggressivelyOptimize());
     setClassMetadataDisabled(other.isClassMetadataDisabled());
+    setCastCheckingDisabled(other.isCastCheckingDisabled());
     setDraftCompile(other.isDraftCompile());
     setEnableAssertions(other.isEnableAssertions());
     setOutput(other.getOutput());
@@ -62,6 +64,10 @@ public class JJSOptionsImpl implements JJSOptions, Serializable {
     return aggressivelyOptimize;
   }
 
+  public boolean isCastCheckingDisabled() {
+    return disableCastChecking;
+  }
+
   public boolean isClassMetadataDisabled() {
     return disableClassMetadata;
   }
@@ -86,6 +92,10 @@ public class JJSOptionsImpl implements JJSOptions, Serializable {
     this.aggressivelyOptimize = aggressivelyOptimize;
   }
 
+  public void setCastCheckingDisabled(boolean disabled) {
+    disableCastChecking = disabled;
+  }
+
   public void setClassMetadataDisabled(boolean disabled) {
     disableClassMetadata = disabled;
   }
@@ -109,8 +119,8 @@ public class JJSOptionsImpl implements JJSOptions, Serializable {
   public void setSoycEnabled(boolean enabled) {
     soycEnabled = enabled;
   }
-  
-  public void setWorkDir(File workDir){
+
+  public void setWorkDir(File workDir) {
     this.workDir = workDir;
   }
 }
Index: dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java
--- dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java	(revision 5010)
+++ dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java	(working copy)
@@ -184,7 +184,7 @@ public class JavaToJavaScriptCompiler {
       CatchBlockNormalizer.exec(jprogram);
       PostOptimizationCompoundAssignmentNormalizer.exec(jprogram);
       LongEmulationNormalizer.exec(jprogram);
-      CastNormalizer.exec(jprogram);
+      CastNormalizer.exec(jprogram, options.isCastCheckingDisabled());
       ArrayNormalizer.exec(jprogram);
       EqualityNormalizer.exec(jprogram);
 
Index: dev/core/src/com/google/gwt/dev/jjs/impl/CastNormalizer.java
--- dev/core/src/com/google/gwt/dev/jjs/impl/CastNormalizer.java	(revision 4689)
+++ dev/core/src/com/google/gwt/dev/jjs/impl/CastNormalizer.java	(working copy)
@@ -76,11 +76,11 @@ public class CastNormalizer {
   private class AssignTypeIdsVisitor extends JVisitor {
 
     Set<JClassType> alreadyRan = new HashSet<JClassType>();
-    private Map<JReferenceType, Set<JReferenceType>> queriedTypes = new IdentityHashMap<JReferenceType, Set<JReferenceType>>();
-    private int nextQueryId = 0;
-    private final List<JArrayType> instantiatedArrayTypes = new ArrayList<JArrayType>();
     private List<JClassType> classes = new ArrayList<JClassType>();
+    private final List<JArrayType> instantiatedArrayTypes = new ArrayList<JArrayType>();
     private List<JsonObject> jsonObjects = new ArrayList<JsonObject>();
+    private int nextQueryId = 0;
+    private Map<JReferenceType, Set<JReferenceType>> queriedTypes = new IdentityHashMap<JReferenceType, Set<JReferenceType>>();
 
     {
       JTypeOracle typeOracle = program.typeOracle;
@@ -193,6 +193,9 @@ public class CastNormalizer {
 
     @Override
     public void endVisit(JCastOperation x, Context ctx) {
+      if (disableCastChecking) {
+        return;
+      }
       if (x.getCastType() != program.getTypeNull()) {
         recordCast(x.getCastType(), x.getExpr());
       }
@@ -424,6 +427,10 @@ public class CastNormalizer {
       JExpression replaceExpr;
       JType toType = x.getCastType();
       JExpression expr = x.getExpr();
+      if (disableCastChecking && toType instanceof JReferenceType) {
+        ctx.replaceMe(expr);
+        return;
+      }
       if (toType instanceof JNullType) {
         /*
          * Magic: a null type cast means the user tried a cast that couldn't
@@ -586,16 +593,19 @@ public class CastNormalizer {
     }
   }
 
-  public static void exec(JProgram program) {
-    new CastNormalizer(program).execImpl();
+  public static void exec(JProgram program, boolean disableCastChecking) {
+    new CastNormalizer(program, disableCastChecking).execImpl();
   }
 
-  private Map<JReferenceType, Integer> queryIds = new IdentityHashMap<JReferenceType, Integer>();
+  private final boolean disableCastChecking;
 
   private final JProgram program;
 
-  private CastNormalizer(JProgram program) {
+  private Map<JReferenceType, Integer> queryIds = new IdentityHashMap<JReferenceType, Integer>();
+
+  private CastNormalizer(JProgram program, boolean disableCastChecking) {
     this.program = program;
+    this.disableCastChecking = disableCastChecking;
   }
 
   private void execImpl() {
Index: dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerDisableCastChecking.java
===============================================================
--- dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerDisableCastChecking.java	(revision 0)
+++ dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerDisableCastChecking.java	(revision 0)
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2009 Google Inc.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.google.gwt.dev.util.arg;
+
+import com.google.gwt.util.tools.ArgHandlerFlag;
+
+/**
+ * An ArgHandler to provide the -disableCastChecking flag.
+ */
+public class ArgHandlerDisableCastChecking extends ArgHandlerFlag {
+
+  private final OptionDisableCastChecking option;
+
+  public ArgHandlerDisableCastChecking(OptionDisableCastChecking option) {
+    this.option = option;
+  }
+
+  @Override
+  public String getPurpose() {
+    return "EXPERIMENTAL: Disables run-time checking of cast operations";
+  }
+
+  @Override
+  public String getTag() {
+    return "-XdisableCastChecking";
+  }
+
+  @Override
+  public boolean setFlag() {
+    option.setCastCheckingDisabled(true);
+    return true;
+  }
+}
Index: dev/core/src/com/google/gwt/dev/util/arg/OptionDisableCastChecking.java
===============================================================
--- dev/core/src/com/google/gwt/dev/util/arg/OptionDisableCastChecking.java	(revision 0)
+++ dev/core/src/com/google/gwt/dev/util/arg/OptionDisableCastChecking.java	(revision 0)
@@ -0,0 +1,25 @@
+/*
+ * Copyright 2009 Google Inc.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.google.gwt.dev.util.arg;
+
+/**
+ * Encapsulates a compiler option to disable {@link Class#getName()}.
+ */
+public interface OptionDisableCastChecking {
+  boolean isCastCheckingDisabled();
+
+  void setCastCheckingDisabled(boolean disabled);
+}
Index: dev/core/src/com/google/gwt/dev/util/arg/OptionDisableClassMetadata.java
--- dev/core/src/com/google/gwt/dev/util/arg/OptionDisableClassMetadata.java	(revision 4790)
+++ dev/core/src/com/google/gwt/dev/util/arg/OptionDisableClassMetadata.java	(working copy)
@@ -16,7 +16,7 @@
 package com.google.gwt.dev.util.arg;
 
 /**
- * Encapsulates a compiler option to disable {@link Class#getName()}.
+ * Encapsulates a compiler option to disable runtime cast checking.
  */
 public interface OptionDisableClassMetadata {
   boolean isClassMetadataDisabled();

