diff --git a/user/src/com/google/gwt/user/UserAgent.gwt.xml b/user/src/com/google/gwt/user/UserAgent.gwt.xml
index 5ae3b6a..f60f650 100644
--- a/user/src/com/google/gwt/user/UserAgent.gwt.xml
+++ b/user/src/com/google/gwt/user/UserAgent.gwt.xml
@@ -23,7 +23,14 @@
 
   <property-provider name="user.agent" generator="com.google.gwt.user.rebind.UserAgentPropertyGenerator"/>
 
-  <!-- Asserts the the compile time value matches the runtime user.agent value -->
+  <!-- Set to false to avoid runtime warnings for mismatched runtime and -->
+  <!-- compile time user.agent values -->
+  <define-configuration-property name="user.agent.runtimeWarning"
+    is-multi-valued="false" />
+  <set-configuration-property name="user.agent.runtimeWarning" value="true"/>
+
+  <!-- Asserts that the compile time user.agent value matches the runtime -->
+  <!-- user.agent value -->
   <entry-point class="com.google.gwt.user.client.UserAgentAsserter" />
 
   <generate-with class="com.google.gwt.user.rebind.UserAgentGenerator">
diff --git a/user/src/com/google/gwt/user/client/UserAgentAsserter.java b/user/src/com/google/gwt/user/client/UserAgentAsserter.java
index 5f04303..aadfd88 100644
--- a/user/src/com/google/gwt/user/client/UserAgentAsserter.java
+++ b/user/src/com/google/gwt/user/client/UserAgentAsserter.java
@@ -33,6 +33,8 @@
    * <code>user.agent</code> selection property value.
    */
   interface UserAgentProperty {
+    boolean getUserAgentRuntimeWarning();
+    
     String getCompileTimeValue();
 
     String getRuntimeValue();
@@ -40,6 +42,10 @@
 
   public void onModuleLoad() {
     UserAgentProperty impl = GWT.create(UserAgentProperty.class);
+    if (!impl.getUserAgentRuntimeWarning()) {
+      return;
+    }
+    
     String compileTimeValue = impl.getCompileTimeValue();
     String runtimeValue = impl.getRuntimeValue();
 
diff --git a/user/src/com/google/gwt/user/rebind/UserAgentGenerator.java b/user/src/com/google/gwt/user/rebind/UserAgentGenerator.java
index 13ea375..f0f3e8b 100644
--- a/user/src/com/google/gwt/user/rebind/UserAgentGenerator.java
+++ b/user/src/com/google/gwt/user/rebind/UserAgentGenerator.java
@@ -17,6 +17,7 @@
 package com.google.gwt.user.rebind;
 
 import com.google.gwt.core.ext.BadPropertyValueException;
+import com.google.gwt.core.ext.ConfigurationProperty;
 import com.google.gwt.core.ext.Generator;
 import com.google.gwt.core.ext.GeneratorContext;
 import com.google.gwt.core.ext.PropertyOracle;
@@ -33,7 +34,9 @@
  * Generator for {@link com.google.gwt.user.client.UserAgentAsserter}.
  */
 public class UserAgentGenerator extends Generator {
-  private static final String PROPERTY_USER_AGENT = "user.agent";
+  static final String PROPERTY_USER_AGENT = "user.agent";
+
+  static final String PROPERTY_USER_AGENT_RUNTIME_WARNING = "user.agent.runtimeWarning";
 
   @Override
   public String generate(TreeLogger logger, GeneratorContext context,
@@ -65,11 +68,22 @@
     }
 
     PropertyOracle propertyOracle = context.getPropertyOracle();
+
+    boolean userAgentRuntimeWarning = true;
+    try {
+      ConfigurationProperty property = 
+          propertyOracle.getConfigurationProperty(PROPERTY_USER_AGENT_RUNTIME_WARNING);
+      userAgentRuntimeWarning = Boolean.valueOf(property.getValues().get(0));
+    } catch (BadPropertyValueException e) {
+      logger.log(TreeLogger.WARN, "Unable to find value for '"
+          + PROPERTY_USER_AGENT_RUNTIME_WARNING + "'", e);
+    }
+
     String userAgentValue;
     try {
-      SelectionProperty userAgentProperty = propertyOracle.getSelectionProperty(
-          logger, PROPERTY_USER_AGENT);
-      userAgentValue = userAgentProperty.getCurrentValue();
+      SelectionProperty property = propertyOracle.getSelectionProperty(logger,
+          PROPERTY_USER_AGENT);
+      userAgentValue = property.getCurrentValue();
     } catch (BadPropertyValueException e) {
       logger.log(TreeLogger.ERROR, "Unable to find value for '"
           + PROPERTY_USER_AGENT + "'", e);
@@ -89,6 +103,14 @@
       SourceWriter sw = composerFactory.createSourceWriter(context, pw);
 
       sw.println();
+      sw.println("public boolean getUserAgentRuntimeWarning() {");
+      sw.indent();
+      sw.println("return " + userAgentRuntimeWarning + ";");
+      sw.outdent();
+      sw.println("}");
+      sw.println();
+
+      sw.println();
       sw.println("public native String getRuntimeValue() /*-{");
       sw.indent();
       UserAgentPropertyGenerator.writeUserAgentPropertyJavaScript(sw);
diff --git a/user/src/com/google/gwt/user/rebind/UserAgentPropertyGenerator.java b/user/src/com/google/gwt/user/rebind/UserAgentPropertyGenerator.java
index 9197e99..03c8df0 100644
--- a/user/src/com/google/gwt/user/rebind/UserAgentPropertyGenerator.java
+++ b/user/src/com/google/gwt/user/rebind/UserAgentPropertyGenerator.java
@@ -96,9 +96,13 @@
       String fallback, SortedSet<ConfigurationProperty> configProperties) {
     for (String value : possibleValues) {
       if (!VALID_VALUES.contains(value)) {
-        logger.log(TreeLogger.ERROR, "Unrecognized user.agent property value '"
+        logger.log(TreeLogger.ERROR, "Unrecognized "
+            + UserAgentGenerator.PROPERTY_USER_AGENT + " property value '"
             + value + "', possibly due to UserAgent.gwt.xml and "
-            + UserAgentPropertyGenerator.class.getName() + " being out of sync");
+            + UserAgentPropertyGenerator.class.getName()
+            + " being out of sync." + " Use <set-configuration-property name=\""
+            + UserAgentGenerator.PROPERTY_USER_AGENT_RUNTIME_WARNING
+            + "\" value=\"false\"/> to suppress this warning message.");
       }
     }
 
