diff --git a/user/src/com/google/gwt/resources/Resources.gwt.xml b/user/src/com/google/gwt/resources/Resources.gwt.xml
index 3c66d64..c392892 100644
--- a/user/src/com/google/gwt/resources/Resources.gwt.xml
+++ b/user/src/com/google/gwt/resources/Resources.gwt.xml
@@ -84,12 +84,6 @@
   <define-configuration-property name="CssResource.mergeEnabled" is-multi-valued="false" />
   <set-configuration-property name="CssResource.mergeEnabled" value="true" />
 
-  <!-- This forces all CssResource accessor functions to have the @Strict -->
-  <!-- annotation. This is intended primarily for application developers and -->
-  <!-- the library test code. -->
-  <define-configuration-property name="CssResource.strictAccessors" is-multi-valued="false" />
-  <set-configuration-property name="CssResource.strictAccessors" value="false" />
-
   <!-- This allows the developer to use shorter obfuscated class names. -->
   <!-- Is is valid to extend this property to use a custom name. -->
   <define-configuration-property name="CssResource.obfuscationPrefix" is-multi-valued="false" />
diff --git a/user/src/com/google/gwt/resources/client/CssResource.java b/user/src/com/google/gwt/resources/client/CssResource.java
index 5020448..a35af8f 100644
--- a/user/src/com/google/gwt/resources/client/CssResource.java
+++ b/user/src/com/google/gwt/resources/client/CssResource.java
@@ -50,8 +50,8 @@
  * <li>{@code @eval NAME Java-expression; .myClass background: NAME;} Define a
  * constant based on a Java expression.</li>
  * <li>{@code @external class-name, class-name, ...;} Disable obfuscation for
- * specific class selectors and exclude those class selectors from
- * {@link Strict} requirements.</li>
+ * specific class selectors and exclude those class selectors from strictness
+ * requirements.</li>
  * <li><code>{@literal @if} [!]property list of values {ruleBlock}</code> Include or
  * exclude CSS rules based on the value of a deferred-binding property. Also
  * {@code @elif} and {@code @else} follow the same pattern.<br/>
@@ -92,6 +92,51 @@
  * </li>
  * </ul>
  * 
+ * <p>
+ * Any class selectors that do not correspond with a String accessor method in
+ * the return type will trigger a compilation error. This ensures that the
+ * CssResource does not contribute any unobfuscated class selectors into the
+ * global CSS namespace. Strict mode can be disabled by annotating the
+ * ClientBundle method declaration with {@link NotStrict}, however this is only
+ * recommended for interacting with legacy CSS.
+ * 
+ * <p>
+ * Given these interfaces:
+ * 
+ * <pre>
+ * interface MyCss extends CssResource {
+ *   String someClass();
+ * }
+ * 
+ * interface MyBundle extends ClientBundle {
+ *  {@literal @Source("my.css")}
+ *   MyCss css();
+ * }
+ * </pre>
+ * 
+ * the source CSS will fail to compile if it does not contain exactly the one
+ * class selector defined in the MyCss type.
+ * <p>
+ * The {@code @external} at-rule can be used in strict mode to indicate that
+ * certain class selectors are exempt from the strict semantics. Class selectors
+ * marked as external will not be obfuscated and are not required to have string
+ * accessor functions. Consider the following example in conjunction with the
+ * above <code>MyCss</code> interface:
+ * 
+ * <pre>
+   * {@literal @external} .foo, .bar;
+   * .foo .someClass .bar { .... }
+   * </pre>
+ * 
+ * The resulting CSS would look like:
+ * 
+ * <pre>
+   * .foo .A1234 .bar { .... }
+   * </pre>
+ * 
+ * If a <code>String foo()</code> method were defined in <code>MyCss</code>, it
+ * would return the string value "<code>foo</code>".
+ * 
  * @see <a href="http://code.google.com/p/google-web-toolkit/wiki/CssResource"
  *      >CssResource design doc</a>
  */
@@ -183,6 +228,14 @@
    * method in the return type or an {@code @external} declaration should not
    * trigger a compilation error. This annotation is not recommended for new
    * code.
+   * 
+   * <pre>
+   * interface Resources extends ClientBundle {
+   *  {@literal @NotStrict}
+   *  {@literal @Source}("legacy.css")
+   *   CssResource css();
+   * }
+   * </pre>
    */
   @Documented
   @Target(ElementType.METHOD)
@@ -234,52 +287,11 @@
   }
 
   /**
-   * The presence of this annotation on a CssResource accessor method indicates
-   * that any class selectors that do not correspond with a String accessor
-   * method in the return type should trigger a compilation error. In the
-   * default case, any unobfuscatable class selectors will be emitted as-is.
-   * This annotation ensures that the CssResource does not contribute any
-   * unobfuscated class selectors into the global CSS namespace and is
-   * recommended as the default behavior for CssResources.
-   * <p>
-   * Given these interfaces:
+   * This annotation is a no-op.
    * 
-   * <pre>
-   * interface MyCss extends CssResource {
-   *   String someClass();
-   * }
-   * 
-   * interface MyBundle extends ClientBundle {
-   *  {@literal @Source("my.css")}
-   *  {@literal @Strict}
-   *   MyCss css();
-   * }
-   * </pre>
-   * 
-   * the source CSS will fail to compile if it does not contain exactly the one
-   * class selector defined in the MyCss type.
-   * <p>
-   * The {@code @external} at-rule can be used in strict mode to indicate that
-   * certain class selectors are exempt from the strict semantics. Class
-   * selectors marked as external will not be obfuscated and are not required to
-   * have string accessor functions. Consider the following example in
-   * conjunction with the above <code>MyCss</code> interface:
-   * 
-   * <pre>
-   * {@literal @external} .foo, .bar;
-   * .foo .someClass .bar { .... }
-   * </pre>
-   * 
-   * The resulting CSS would look like:
-   * 
-   * <pre>
-   * .foo .A1234 .bar { .... }
-   * </pre>
-   * 
-   * If a <code>String foo()</code> method were defined in <code>MyCss</code>,
-   * it would return the string value "<code>foo</code>".
+   * @deprecated Strict mode is now the default behavior for CssResource
    */
-  @Documented
+  @Deprecated
   @Target(ElementType.METHOD)
   public @interface Strict {
   }
diff --git a/user/src/com/google/gwt/resources/css/ast/CssExternalSelectors.java b/user/src/com/google/gwt/resources/css/ast/CssExternalSelectors.java
index 22e1aed..c79491b 100644
--- a/user/src/com/google/gwt/resources/css/ast/CssExternalSelectors.java
+++ b/user/src/com/google/gwt/resources/css/ast/CssExternalSelectors.java
@@ -22,8 +22,6 @@
  * An AST node that allows the developer to indicate that certain class
  * selectors appearing in the stylesheet should be considered external and not
  * subject to obfuscation requirements.
- * 
- * @see CssResource.Strict
  */
 public class CssExternalSelectors extends CssNode {
 
diff --git a/user/src/com/google/gwt/resources/rg/CssResourceGenerator.java b/user/src/com/google/gwt/resources/rg/CssResourceGenerator.java
index 85846d4..3922349 100644
--- a/user/src/com/google/gwt/resources/rg/CssResourceGenerator.java
+++ b/user/src/com/google/gwt/resources/rg/CssResourceGenerator.java
@@ -713,54 +713,27 @@
     computeObfuscatedNames(logger, classPrefix, cssResourceSubtypes);
   }
 
+  /**
+   * Check for the presence of the NotStrict annotation on the method. This will
+   * also perform some limited sanity-checking for the now-deprecated Strict
+   * annotation.
+   */
+  @SuppressWarnings("deprecation")
   private boolean isStrict(TreeLogger logger, ResourceContext context,
       JMethod method) {
     Strict strictAnnotation = method.getAnnotation(Strict.class);
     NotStrict nonStrictAnnotation = method.getAnnotation(NotStrict.class);
-    boolean strict = false;
+    boolean strict = true;
 
     if (strictAnnotation != null && nonStrictAnnotation != null) {
       // Both annotations
       logger.log(TreeLogger.WARN, "Contradictory annotations "
           + Strict.class.getName() + " and " + NotStrict.class.getName()
           + " applied to the CssResource accessor method; assuming strict");
-      strict = true;
-
-    } else if (strictAnnotation == null && nonStrictAnnotation == null) {
-      // Neither annotation
-
-      /*
-       * Fall back to using the to-be-deprecated strictAccessor property.
-       */
-      try {
-        PropertyOracle propertyOracle = context.getGeneratorContext().getPropertyOracle();
-        ConfigurationProperty prop = propertyOracle.getConfigurationProperty("CssResource.strictAccessors");
-        String propertyValue = prop.getValues().get(0);
-        if (Boolean.valueOf(propertyValue)) {
-          logger.log(TreeLogger.WARN,
-              "CssResource.strictAccessors is true, but " + method.getName()
-                  + "() is missing the @Strict annotation.");
-          strict = true;
-        }
-      } catch (BadPropertyValueException e) {
-        // Ignore
-      }
-
-      if (!strict) {
-        // This is a temporary warning during the transitional phase
-        logger.log(TreeLogger.WARN, "Accessor does not specify "
-            + Strict.class.getName() + " or " + NotStrict.class.getName()
-            + ". The default behavior will change from non-strict "
-            + "to strict in a future revision.");
-      }
 
     } else if (nonStrictAnnotation != null) {
       // Only the non-strict annotation
       strict = false;
-
-    } else if (strictAnnotation != null) {
-      // Only the strict annotation
-      strict = true;
     }
 
     return strict;
diff --git a/user/src/com/google/gwt/uibinder/rebind/BundleWriter.java b/user/src/com/google/gwt/uibinder/rebind/BundleWriter.java
index b134c8b..80aff7f 100644
--- a/user/src/com/google/gwt/uibinder/rebind/BundleWriter.java
+++ b/user/src/com/google/gwt/uibinder/rebind/BundleWriter.java
@@ -20,7 +20,6 @@
 import com.google.gwt.core.ext.typeinfo.TypeOracle;
 import com.google.gwt.resources.client.ClientBundle;
 import com.google.gwt.resources.client.ImageResource;
-import com.google.gwt.resources.client.CssResource.Strict;
 import com.google.gwt.resources.client.ImageResource.ImageOptions;
 import com.google.gwt.resources.client.ImageResource.RepeatStyle;
 import com.google.gwt.uibinder.rebind.model.ImplicitClientBundle;
@@ -38,7 +37,6 @@
   private final TypeOracle oracle;
 
   private final JClassType clientBundleType;
-  private final JClassType strictAnnotationType;
   private final JClassType imageOptionType;
   private final JClassType imageResourceType;
   private final JClassType repeatStyleType;
@@ -53,7 +51,6 @@
     this.oracle = oracle;
 
     clientBundleType = oracle.findType(ClientBundle.class.getName());
-    strictAnnotationType = oracle.findType(Strict.class.getCanonicalName());
     imageOptionType = oracle.findType(ImageOptions.class.getCanonicalName());
     imageResourceType = oracle.findType(ImageResource.class.getCanonicalName());
     repeatStyleType = oracle.findType(RepeatStyle.class.getCanonicalName());
@@ -79,7 +76,6 @@
     writer.write("import %s;", imageResourceType.getQualifiedSourceName());
     writer.write("import %s;", imageOptionType.getQualifiedSourceName());
     writer.write("import %s;", clientBundleType.getQualifiedSourceName());
-    writer.write("import %s;", strictAnnotationType.getQualifiedSourceName());
     writer.newline();
 
     // Open interface
@@ -89,7 +85,7 @@
 
     // Write css methods
     for (ImplicitCssResource css : bundleClass.getCssMethods()) {
-      writer.write("@Strict @Source(\"%s\")", css.getSource());
+      writer.write("@Source(\"%s\")", css.getSource());
       writer.write("%s %s();", css.getClassName(), css.getName());
       writer.newline();
     }
diff --git a/user/src/com/google/gwt/uibinder/sample/client/DomBasedUi.java b/user/src/com/google/gwt/uibinder/sample/client/DomBasedUi.java
index b57d160..1c687c1 100644
--- a/user/src/com/google/gwt/uibinder/sample/client/DomBasedUi.java
+++ b/user/src/com/google/gwt/uibinder/sample/client/DomBasedUi.java
@@ -21,7 +21,6 @@
 import com.google.gwt.dom.client.StyleInjector;
 import com.google.gwt.resources.client.ClientBundle;
 import com.google.gwt.resources.client.CssResource;
-import com.google.gwt.resources.client.CssResource.Strict;
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
 
@@ -34,7 +33,6 @@
    * Resources for this template.
    */
   public interface Resources extends ClientBundle {
-    @Strict
     @Source("DomBasedUi.css")
     Style style();
   }
diff --git a/user/src/com/google/gwt/uibinder/sample/client/WidgetBasedUiExternalResources.java b/user/src/com/google/gwt/uibinder/sample/client/WidgetBasedUiExternalResources.java
index c142496..d06fc27 100644
--- a/user/src/com/google/gwt/uibinder/sample/client/WidgetBasedUiExternalResources.java
+++ b/user/src/com/google/gwt/uibinder/sample/client/WidgetBasedUiExternalResources.java
@@ -17,7 +17,6 @@
 
 import com.google.gwt.resources.client.ClientBundle;
 import com.google.gwt.resources.client.CssResource;
-import com.google.gwt.resources.client.CssResource.Strict;
 
 /**
  * Sample external resources used by {@link WidgetBasedUi}, to test
@@ -34,6 +33,5 @@
   }
 
   @Source("WidgetBasedUiExternal.css")
-  @Strict
   MyCss style();
 }
diff --git a/user/test/com/google/gwt/resources/client/CSSResourceTest.java b/user/test/com/google/gwt/resources/client/CSSResourceTest.java
index 3bb69ec..bdf8ee9 100644
--- a/user/test/com/google/gwt/resources/client/CSSResourceTest.java
+++ b/user/test/com/google/gwt/resources/client/CSSResourceTest.java
@@ -21,7 +21,6 @@
 import com.google.gwt.resources.client.CssResource.ImportedWithPrefix;
 import com.google.gwt.resources.client.CssResource.NotStrict;
 import com.google.gwt.resources.client.CssResource.Shared;
-import com.google.gwt.resources.client.CssResource.Strict;
 
 /**
  * Contains various full-stack tests of the CssResource system.
@@ -37,7 +36,6 @@
 
   interface ConcatenatedResources extends ClientBundle {
     @Source(value = {"concatenatedA.css", "concatenatedB.css"})
-    @Strict
     CssResource css();
   }
 
@@ -112,11 +110,9 @@
     Resources INSTANCE = GWT.create(Resources.class);
 
     @Source("siblingTestA.css")
-    @Strict
     MyCssResourceA a();
 
     @Source("siblingTestB.css")
-    @Strict
     MyCssResourceB b();
 
     @Source("test.css")
@@ -127,16 +123,13 @@
     DataResource dataMethod();
 
     // Test default extensions
-    @Strict
     CssWithDefines deftest();
 
     @Source("unrelatedDescendants.css")
     @Import(value = {MyCssResourceA.class, MyCssResourceB.class})
-    @Strict
     HasDescendants descendants();
 
     // Make sure an empty, no-op CssResource works
-    @Strict
     CssResource empty();
 
     @Source("16x16.png")
@@ -157,11 +150,9 @@
 
   interface SiblingResources extends ClientBundle {
     @Source("siblingTestA.css")
-    @Strict
     MyCssResourceA a();
 
     @Source("siblingTestB.css")
-    @Strict
     MyCssResourceB b();
   }
 
diff --git a/user/test/com/google/gwt/uibinder/sample/client/UiBinderTest.java b/user/test/com/google/gwt/uibinder/sample/client/UiBinderTest.java
index 1f426ea..960cc9b 100644
--- a/user/test/com/google/gwt/uibinder/sample/client/UiBinderTest.java
+++ b/user/test/com/google/gwt/uibinder/sample/client/UiBinderTest.java
@@ -25,6 +25,7 @@
 import com.google.gwt.junit.Platform;
 import com.google.gwt.junit.client.GWTTestCase;
 import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.CssResource.NotStrict;
 import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.ui.DisclosurePanel;
 import com.google.gwt.user.client.ui.DockPanel;
@@ -238,7 +239,8 @@
 
   interface Bundle extends ClientBundle {
     @Source("WidgetBasedUi.css")
-    public WidgetBasedUi.Style style();
+    @NotStrict
+    WidgetBasedUi.Style style();
   }
 
   public void testNoOverrideInheritedSharedCssClasses() {
