diff --git a/dev/core/src/com/google/gwt/dev/HostedModeBase.java b/dev/core/src/com/google/gwt/dev/HostedModeBase.java
index ecdf0d9..640f813 100644
--- a/dev/core/src/com/google/gwt/dev/HostedModeBase.java
+++ b/dev/core/src/com/google/gwt/dev/HostedModeBase.java
@@ -32,6 +32,7 @@
 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 @@
       registerHandler(new ArgHandlerEnableAssertions(options));
       registerHandler(new ArgHandlerDisableAggressiveOptimization(options));
       registerHandler(new ArgHandlerDisableClassMetadata(options));
+      registerHandler(new ArgHandlerDisableCastChecking(options));
       registerHandler(new ArgHandlerDraftCompile(options));
     }
   }
diff --git a/dev/core/src/com/google/gwt/dev/Precompile.java b/dev/core/src/com/google/gwt/dev/Precompile.java
index 4609a65..9e9b143 100644
--- a/dev/core/src/com/google/gwt/dev/Precompile.java
+++ b/dev/core/src/com/google/gwt/dev/Precompile.java
@@ -43,6 +43,7 @@
 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;
@@ -87,6 +88,7 @@
       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));
@@ -142,6 +144,10 @@
       return jjsOptions.isAggressivelyOptimize();
     }
 
+    public boolean isCastCheckingDisabled() {
+      return jjsOptions.isCastCheckingDisabled();
+    }
+
     public boolean isClassMetadataDisabled() {
       return jjsOptions.isClassMetadataDisabled();
     }
@@ -174,6 +180,10 @@
       jjsOptions.setAggressivelyOptimize(aggressivelyOptimize);
     }
 
+    public void setCastCheckingDisabled(boolean disabled) {
+      jjsOptions.setCastCheckingDisabled(disabled);
+    }
+
     public void setClassMetadataDisabled(boolean disabled) {
       jjsOptions.setClassMetadataDisabled(disabled);
     }
diff --git a/dev/core/src/com/google/gwt/dev/jjs/JJSOptions.java b/dev/core/src/com/google/gwt/dev/jjs/JJSOptions.java
index cf8fea0..e9624a0 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/JJSOptions.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/JJSOptions.java
@@ -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 @@
  * 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 {
 }
diff --git a/dev/core/src/com/google/gwt/dev/jjs/JJSOptionsImpl.java b/dev/core/src/com/google/gwt/dev/jjs/JJSOptionsImpl.java
index 6a9b3e1..63b29d7 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/JJSOptionsImpl.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/JJSOptionsImpl.java
@@ -24,6 +24,7 @@
 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 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 @@
     return aggressivelyOptimize;
   }
 
+  public boolean isCastCheckingDisabled() {
+    return disableCastChecking;
+  }
+
   public boolean isClassMetadataDisabled() {
     return disableClassMetadata;
   }
@@ -86,6 +92,10 @@
     this.aggressivelyOptimize = aggressivelyOptimize;
   }
 
+  public void setCastCheckingDisabled(boolean disabled) {
+    disableCastChecking = disabled;
+  }
+
   public void setClassMetadataDisabled(boolean disabled) {
     disableClassMetadata = disabled;
   }
@@ -109,7 +119,7 @@
   public void setSoycEnabled(boolean enabled) {
     soycEnabled = enabled;
   }
-  
+
   public void setWorkDir(File workDir) {
     this.workDir = workDir;
   }
diff --git a/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java b/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java
index 345c8b5..2caadc0 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java
@@ -184,7 +184,7 @@
       CatchBlockNormalizer.exec(jprogram);
       PostOptimizationCompoundAssignmentNormalizer.exec(jprogram);
       LongEmulationNormalizer.exec(jprogram);
-      CastNormalizer.exec(jprogram);
+      CastNormalizer.exec(jprogram, options.isCastCheckingDisabled());
       ArrayNormalizer.exec(jprogram);
       EqualityNormalizer.exec(jprogram);
 
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/CastNormalizer.java b/dev/core/src/com/google/gwt/dev/jjs/impl/CastNormalizer.java
index 7fd3680..0f2a55d 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/CastNormalizer.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/CastNormalizer.java
@@ -76,11 +76,11 @@
   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 @@
 
     @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 @@
       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 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() {
diff --git a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerDisableCastChecking.java b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerDisableCastChecking.java
new file mode 100644
index 0000000..29c8a1c
--- /dev/null
+++ b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerDisableCastChecking.java
@@ -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;
+  }
+}
diff --git a/dev/core/src/com/google/gwt/dev/util/arg/OptionDisableCastChecking.java b/dev/core/src/com/google/gwt/dev/util/arg/OptionDisableCastChecking.java
new file mode 100644
index 0000000..7014934
--- /dev/null
+++ b/dev/core/src/com/google/gwt/dev/util/arg/OptionDisableCastChecking.java
@@ -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);
+}
diff --git a/dev/core/src/com/google/gwt/dev/util/arg/OptionDisableClassMetadata.java b/dev/core/src/com/google/gwt/dev/util/arg/OptionDisableClassMetadata.java
index eadc103..64603c3 100644
--- a/dev/core/src/com/google/gwt/dev/util/arg/OptionDisableClassMetadata.java
+++ b/dev/core/src/com/google/gwt/dev/util/arg/OptionDisableClassMetadata.java
@@ -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();
