diff --git a/user/build.xml b/user/build.xml
index 4e54bee..5b5060e 100755
--- a/user/build.xml
+++ b/user/build.xml
@@ -692,17 +692,19 @@
           <countfilter match="@Failing"  property="jsr303.marked.Failing" init="0"/>
           <countfilter match="@NonTckTest"  property="jsr303.marked.NonTckTest" init="0"/>
           <countfilter match="@NotSupported"  property="jsr303.marked.NotSupported" init="0"/>
+          <countfilter match="@TestNotCompatible"  property="jsr303.marked.NotSupported" init="0"/>
         </filterchain>
       </scan>
       
       <!-- force to zero if not set above -->
       <property name="jsr303.marked.Failing" value="0"/>
       <property name="jsr303.marked.NonTckTest" value="0"/>
-      <property name="jsr303.marked.NotSupported" value="0"/>
+      <property name="jsr303.marked.TestNotCompatible" value="0"/>
       
       <echo message="Marked Failing = ${jsr303.marked.Failing}" />
       <echo message="Marked NonTckTest = ${jsr303.marked.NonTckTest}" />
       <echo message="Marked NotSupported = ${jsr303.marked.NotSupported}" />
+      <echo message="Marked TestNotCompatible = ${jsr303.marked.TestNotCompatible}" />
       
       <junitreport todir="${junit.out}/tck-report">
         <fileset dir="${junit.out}/tck-dev-htmlunit">
@@ -712,11 +714,13 @@
           <param name="markedFailing" expression="${jsr303.marked.Failing}" />
           <param name="markedNonTckTest" expression="${jsr303.marked.NonTckTest}" />
           <param name="markedNotSupported" expression="${jsr303.marked.NotSupported}" />
+          <param name="markedTestNotCompatible" expression="${jsr303.marked.TestNotCompatible}" />
         </report>
         <report format="noframes" todir="${junit.out}/tck-report/text" styledir="style/text">
           <param name="markedFailing" expression="${jsr303.marked.Failing}" />
           <param name="markedNonTckTest" expression="${jsr303.marked.NonTckTest}" />
           <param name="markedNotSupported" expression="${jsr303.marked.NotSupported}" />
+          <param name="markedTestNotCompatible" expression="${jsr303.marked.TestNotCompatible}" />
         </report>
       </junitreport>
 
diff --git a/user/style/html/junit-noframes.xsl b/user/style/html/junit-noframes.xsl
index c9759de..e316ce4 100644
--- a/user/style/html/junit-noframes.xsl
+++ b/user/style/html/junit-noframes.xsl
@@ -34,6 +34,7 @@
 <xsl:param name="markedFailing" />
 <xsl:param name="markedNonTckTest" />
 <xsl:param name="markedNotSupported" />
+<xsl:param name="markedTestNotCompatible" />
 
 <xsl:template match="testsuites">
     <html>
@@ -259,7 +260,7 @@
           jar -xf jsr303-tck-1.0.3.GA-sources.jar
           grep -r \@Test org/hibernate/jsr303/tck/tests/| grep -v "enabled = false"  | wc -l
         -->
-        <xsl:variable name="testCount" select="($rawTestCount - $markedNotSupported)"/>
+        <xsl:variable name="testCount" select="($rawTestCount - $markedNotSupported - $markedTestNotCompatible)"/>
         <xsl:variable name="testExecutedCount" select="sum(testsuite/@tests)"/>
         <xsl:variable name="errorCount" select="sum(testsuite/@errors)"/>
         <xsl:variable name="failureCount" select="sum(testsuite/@failures)"/>
diff --git a/user/style/text/junit-noframes.xsl b/user/style/text/junit-noframes.xsl
index f0e3e26..10865fc 100644
--- a/user/style/text/junit-noframes.xsl
+++ b/user/style/text/junit-noframes.xsl
@@ -33,6 +33,8 @@
 <xsl:param name="markedFailing" />
 <xsl:param name="markedNonTckTest" />
 <xsl:param name="markedNotSupported" />
+<xsl:param name="markedTestNotCompatible" />
+
 <xsl:template match="testsuites">
 
 	<xsl:variable name="rawTestCount" select="258"/>
@@ -41,7 +43,7 @@
       jar -xf jsr303-tck-1.0.3.GA-sources.jar
       grep -r \@Test org/hibernate/jsr303/tck/tests/| grep -v "enabled = false"  | wc -l
     -->
-    <xsl:variable name="testCount" select="($rawTestCount - $markedNotSupported)"/>
+    <xsl:variable name="testCount" select="($rawTestCount - $markedNotSupported -$markedTestNotCompatible)"/>
     <xsl:variable name="testExecutedCount" select="sum(testsuite/@tests)"/>
     <xsl:variable name="errorCount" select="sum(testsuite/@errors)"/>
     <xsl:variable name="failureCount" select="sum(testsuite/@failures)"/>
diff --git a/user/test/org/hibernate/jsr303/tck/tests/validation/ValidationGwtTest.java b/user/test/org/hibernate/jsr303/tck/tests/validation/ValidationGwtTest.java
index b8d4b22..e78aaff 100644
--- a/user/test/org/hibernate/jsr303/tck/tests/validation/ValidationGwtTest.java
+++ b/user/test/org/hibernate/jsr303/tck/tests/validation/ValidationGwtTest.java
@@ -15,6 +15,9 @@
  */
 package org.hibernate.jsr303.tck.tests.validation;
 
+import org.hibernate.jsr303.tck.util.client.TestNotCompatible;
+import org.hibernate.jsr303.tck.util.client.TestNotCompatible.Reason;
+
 /**
  * Test wrapper for {@link ValidationTest}.
  */
@@ -22,11 +25,6 @@
 
   private final ValidationTest delegate = new ValidationTest();
 
-  public void notGwtCompatibleTestVerifyMethodsOfValidationObjects() {
-    // This test relies on reflection so it is not run.
-    // delegate.testVerifyMethodsOfValidationObjects();
-  }
-
   public void testBuildDefaultValidatorFactory() {
     delegate.testBuildDefaultValidatorFactory();
   }
@@ -38,4 +36,11 @@
   public void testSpecificValidationProvider() {
     delegate.testSpecificValidationProvider();
   }
+
+  @TestNotCompatible(reason = Reason.REFLECTION, 
+      whereTested = "This test checks the methods of the API itself, it does not need to be tested here also.")
+  public void testVerifyMethodsOfValidationObjects() {
+    // This method is excluded because it does not compile.
+    // delegate.testVerifyMethodsOfValidationObjects();
+  }
 }
diff --git a/user/test/org/hibernate/jsr303/tck/util/TckTestSuiteWrapper.java b/user/test/org/hibernate/jsr303/tck/util/TckTestSuiteWrapper.java
index 9eaafe0..de355f9 100644
--- a/user/test/org/hibernate/jsr303/tck/util/TckTestSuiteWrapper.java
+++ b/user/test/org/hibernate/jsr303/tck/util/TckTestSuiteWrapper.java
@@ -30,6 +30,7 @@
 import org.hibernate.jsr303.tck.util.client.Failing;
 import org.hibernate.jsr303.tck.util.client.NonTckTest;
 import org.hibernate.jsr303.tck.util.client.NotSupported;
+import org.hibernate.jsr303.tck.util.client.TestNotCompatible;
 
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Method;
@@ -47,14 +48,17 @@
   private static final Predicate<Method> HAS_FAILING = createHasAnnotationPredicate(Failing.class);
   private static final Predicate<Method> HAS_NON_TCK_TEST = createHasAnnotationPredicate(NonTckTest.class);
   private static final Predicate<Method> HAS_NOT_SUPPORTED = createHasAnnotationPredicate(NotSupported.class);
+  private static final Predicate<Method> HAS_TEST_NOT_COMPATIBLE = createHasAnnotationPredicate(TestNotCompatible.class);
 
   private static final Predicate<Method> INCLUDE_FAILING = createHasProperty(Failing.INCLUDE);
   private static final Predicate<Method> INCLUDE_NOT_SUPPORTED = createHasProperty(NotSupported.INCLUDE);
+  private static final Predicate<Method> INCLUDE_TEST_NOT_COMPATIBLE = createHasProperty(TestNotCompatible.INCLUDE);
   private static final Predicate<Method> EXCLUDE_NON_TCK_TEST = createHasProperty(NonTckTest.EXCLUDE);
 
   @SuppressWarnings("unchecked")
   private static final Predicate<Method> METHOD_FILTER = and(
       or(INCLUDE_NOT_SUPPORTED, not(HAS_NOT_SUPPORTED)),
+      or(INCLUDE_TEST_NOT_COMPATIBLE, not(HAS_TEST_NOT_COMPATIBLE)),
       not(and(EXCLUDE_NON_TCK_TEST, HAS_NON_TCK_TEST)),
       or(INCLUDE_FAILING, not(HAS_FAILING))
       );
diff --git a/user/test/org/hibernate/jsr303/tck/util/client/TestNotCompatible.java b/user/test/org/hibernate/jsr303/tck/util/client/TestNotCompatible.java
new file mode 100644
index 0000000..aaeb06c
--- /dev/null
+++ b/user/test/org/hibernate/jsr303/tck/util/client/TestNotCompatible.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2010 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 org.hibernate.jsr303.tck.util.client;
+
+import org.hibernate.jsr303.tck.util.TckTestSuiteWrapper;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+/**
+ * Marks a testMethod as not compatible to prevent it from running in the
+ * standard tests. Use this when the test code is not supported by GWT, but the
+ * behavior is tested in some other way. Used by the {@link TckTestSuiteWrapper}
+ * .
+ */
+@Target({METHOD})
+@Retention(RUNTIME)
+@Documented
+public @interface TestNotCompatible {
+  /**
+   * Constants for why a test is not supported.
+   */
+  public enum Reason {
+    REFLECTION
+  }
+
+  /**
+   * The JVM property name checked by {@link TckTestSuiteWrapper}. If the JVM
+   * property {@value} is set to true the {@link TckTestSuiteWrapper} will run
+   * tests annotated {@link TestNotCompatible}.
+   */
+  String INCLUDE = "com.google.gwt.sample.validationtck.util.TestNotCompatible.include";
+
+  Reason reason();
+
+  String whereTested();
+}
