diff --git a/user/test/com/google/gwt/validation/tck/MetadataGwtSuite.java b/user/test/com/google/gwt/validation/tck/MetadataGwtSuite.java
index 3ce44a9..3a147fb 100644
--- a/user/test/com/google/gwt/validation/tck/MetadataGwtSuite.java
+++ b/user/test/com/google/gwt/validation/tck/MetadataGwtSuite.java
@@ -20,6 +20,9 @@
 import junit.framework.Test;
 
 import org.hibernate.jsr303.tck.tests.metadata.BeanDescriptorGwtTest;
+import org.hibernate.jsr303.tck.tests.metadata.ConstraintDescriptorGwtTest;
+import org.hibernate.jsr303.tck.tests.metadata.ElementDescriptorGwtTest;
+import org.hibernate.jsr303.tck.tests.metadata.PropertyDescriptorGwtTest;
 import org.hibernate.jsr303.tck.util.TckTestSuiteWrapper;
 
 /**
@@ -30,6 +33,9 @@
     TckTestSuiteWrapper suite = new TckTestSuiteWrapper(
         "TCK for GWT Validation, metadata package");
     suite.addTestSuite(BeanDescriptorGwtTest.class);
+    suite.addTestSuite(ConstraintDescriptorGwtTest.class);
+    suite.addTestSuite(ElementDescriptorGwtTest.class);
+    suite.addTestSuite(PropertyDescriptorGwtTest.class);
     return suite;
   }
 }
diff --git a/user/test/com/google/gwt/validation/tck/ValidationGwtSuite.java b/user/test/com/google/gwt/validation/tck/ValidationGwtSuite.java
index b0335f3..9e486b9 100644
--- a/user/test/com/google/gwt/validation/tck/ValidationGwtSuite.java
+++ b/user/test/com/google/gwt/validation/tck/ValidationGwtSuite.java
@@ -18,6 +18,7 @@
 import junit.framework.Test;
 
 import org.hibernate.jsr303.tck.tests.validation.PropertyPathGwtTest;
+import org.hibernate.jsr303.tck.tests.validation.ValidateGwtTest;
 import org.hibernate.jsr303.tck.tests.validation.ValidatePropertyGwtTest;
 import org.hibernate.jsr303.tck.tests.validation.ValidateValueGwtTest;
 import org.hibernate.jsr303.tck.tests.validation.ValidationGwtTest;
@@ -31,6 +32,7 @@
     TckTestSuiteWrapper suite = new TckTestSuiteWrapper(
         "TCK for GWT Validation, validation package");
     suite.addTestSuite(PropertyPathGwtTest.class);
+    suite.addTestSuite(ValidateGwtTest.class);
     suite.addTestSuite(ValidatePropertyGwtTest.class);
     suite.addTestSuite(ValidateValueGwtTest.class);
     suite.addTestSuite(ValidationGwtTest.class);
diff --git a/user/test/org/hibernate/jsr303/tck/tests/metadata/ConstraintDescriptorGwtTest.java b/user/test/org/hibernate/jsr303/tck/tests/metadata/ConstraintDescriptorGwtTest.java
new file mode 100644
index 0000000..89a0f39
--- /dev/null
+++ b/user/test/org/hibernate/jsr303/tck/tests/metadata/ConstraintDescriptorGwtTest.java
@@ -0,0 +1,80 @@
+/*
+ * 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.tests.metadata;
+
+import com.google.gwt.junit.client.GWTTestCase;
+
+import org.hibernate.jsr303.tck.util.client.Failing;
+
+/**
+ * Test wrapper for {@link ConstraintDescriptorTest}.
+ */
+public class ConstraintDescriptorGwtTest extends GWTTestCase {
+  private final ConstraintDescriptorTest delegate = new ConstraintDescriptorTest();
+
+  @Override
+  public String getModuleName() {
+    return "org.hibernate.jsr303.tck.tests.metadata.TckTest";
+  }
+
+  @Failing(issue = 5931)
+  public void testAnnotationAndMapParametersReflectParameterOverriding() {
+    delegate.testAnnotationAndMapParametersReflectParameterOverriding();
+  }
+
+  @Failing(issue = 5931)
+  public void testComposingConstraints() {
+    delegate.testComposingConstraints();
+  }
+
+  @Failing(issue = 5931)
+  public void testComposingConstraintsPayload() {
+    delegate.testComposingConstraintsPayload();
+  }
+
+  public void testDefaultGroupIsReturnedIfNoGroupSpecifiedInDeclaration() {
+    delegate.testDefaultGroupIsReturnedIfNoGroupSpecifiedInDeclaration();
+  }
+
+  @Failing(issue = 5931)
+  public void testEmptyComposingConstraints() {
+    delegate.testEmptyComposingConstraints();
+  }
+
+  public void testGetAttributesFromConstraintDescriptor() {
+    delegate.testGetAttributesFromConstraintDescriptor();
+  }
+
+  public void testGetGroups() {
+    delegate.testGetGroups();
+  }
+
+  public void testGetGroupsOnInterface() {
+    delegate.testGetGroupsOnInterface();
+  }
+
+  public void testGetGroupsWithImplicitGroup() {
+    delegate.testGetGroupsWithImplicitGroup();
+  }
+
+  public void testPayload() {
+    delegate.testPayload();
+  }
+
+  public void testReportAsSingleViolation() {
+    delegate.testReportAsSingleViolation();
+  }
+}
diff --git a/user/test/org/hibernate/jsr303/tck/tests/metadata/ElementDescriptorGwtTest.java b/user/test/org/hibernate/jsr303/tck/tests/metadata/ElementDescriptorGwtTest.java
new file mode 100644
index 0000000..63fffe1
--- /dev/null
+++ b/user/test/org/hibernate/jsr303/tck/tests/metadata/ElementDescriptorGwtTest.java
@@ -0,0 +1,70 @@
+/*
+ * 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.tests.metadata;
+
+import com.google.gwt.junit.client.GWTTestCase;
+
+import org.hibernate.jsr303.tck.util.client.Failing;
+
+/**
+ * Test wrapper for {@link ElementDescriptorTest}.
+ */
+public class ElementDescriptorGwtTest extends GWTTestCase {
+  private final ElementDescriptorTest delegate = new ElementDescriptorTest();
+
+  @Override
+  public String getModuleName() {
+    return "org.hibernate.jsr303.tck.tests.metadata.TckTest";
+  }
+
+  @Failing(issue = 5932)
+  public void testDeclaredOn() {
+    delegate.testDeclaredOn();
+  }
+
+  public void testGetConstraintDescriptors() {
+    delegate.testGetConstraintDescriptors();
+  }
+
+  public void testGetElementClass() {
+    delegate.testGetElementClass();
+  }
+
+  public void testHasConstraints() {
+    delegate.testHasConstraints();
+  }
+
+  @Failing(issue = 5932)
+  public void testLookingAt() {
+    delegate.testLookingAt();
+  }
+
+  @Failing(issue = 5932)
+  public void testUnorderedAndMatchingGroups() {
+    delegate.testUnorderedAndMatchingGroups();
+  }
+
+  @Failing(issue = 5932)
+  public void testUnorderedAndMatchingGroupsWithDefaultGroupOverriding() {
+    delegate.testUnorderedAndMatchingGroupsWithDefaultGroupOverriding();
+  }
+
+  @Failing(issue = 5932)
+  public void testUnorderedAndMatchingGroupsWithInheritance() {
+    delegate.testUnorderedAndMatchingGroupsWithInheritance();
+  }
+
+}
diff --git a/user/test/org/hibernate/jsr303/tck/tests/metadata/PropertyDescriptorGwtTest.java b/user/test/org/hibernate/jsr303/tck/tests/metadata/PropertyDescriptorGwtTest.java
new file mode 100644
index 0000000..bdc551b
--- /dev/null
+++ b/user/test/org/hibernate/jsr303/tck/tests/metadata/PropertyDescriptorGwtTest.java
@@ -0,0 +1,42 @@
+/*
+ * 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.tests.metadata;
+
+import com.google.gwt.junit.client.GWTTestCase;
+
+/**
+ * Test wrapper for {@link PropertyDescriptorTest}.
+ */
+public class PropertyDescriptorGwtTest extends GWTTestCase {
+  private final PropertyDescriptorTest delegate = new PropertyDescriptorTest();
+
+  @Override
+  public String getModuleName() {
+    return "org.hibernate.jsr303.tck.tests.metadata.TckTest";
+  }
+
+  public void testIsCascaded() {
+    delegate.testIsCascaded();
+  }
+
+  public void testIsNotCascaded() {
+    delegate.testIsNotCascaded();
+  }
+
+  public void testPropertyName() {
+    delegate.testPropertyName();
+  }
+}
diff --git a/user/test/org/hibernate/jsr303/tck/tests/metadata/TckTestValidatorFactory.java b/user/test/org/hibernate/jsr303/tck/tests/metadata/TckTestValidatorFactory.java
index 9813906..a6fbc25 100644
--- a/user/test/org/hibernate/jsr303/tck/tests/metadata/TckTestValidatorFactory.java
+++ b/user/test/org/hibernate/jsr303/tck/tests/metadata/TckTestValidatorFactory.java
@@ -31,8 +31,8 @@
    * Marker Interface to {@link GWT#create(Class)}.
    */
   @GwtValidation(value = {
-      Account.class, Customer.class, Man.class, Order.class,
-      UnconstraintEntity.class})
+      Account.class, Customer.class, Man.class, Order.class, Person.class,
+      SubClass.class, SuperClass.class, UnconstraintEntity.class})
   public static interface GwtValidator extends Validator {
   }
 
diff --git a/user/test/org/hibernate/jsr303/tck/tests/validation/TckTestValidatorFactory.java b/user/test/org/hibernate/jsr303/tck/tests/validation/TckTestValidatorFactory.java
index 6be0de3..f3e0055 100644
--- a/user/test/org/hibernate/jsr303/tck/tests/validation/TckTestValidatorFactory.java
+++ b/user/test/org/hibernate/jsr303/tck/tests/validation/TckTestValidatorFactory.java
@@ -22,6 +22,7 @@
 
 import org.hibernate.jsr303.tck.tests.validation.PropertyPathTest.ActorDB;
 import org.hibernate.jsr303.tck.tests.validation.PropertyPathTest.VerySpecialClass;
+import org.hibernate.jsr303.tck.tests.validation.ValidateTest.Car;
 
 import javax.validation.Validator;
 
@@ -36,8 +37,8 @@
   @GwtValidation(value = {
       // Actor must be after its subclasses
       ActorDB.class, ActorArrayBased.class, ActorListBased.class, Actor.class,
-      Address.class, BadlyBehavedEntity.class, Customer.class, Engine.class,
-      Order.class, VerySpecialClass.class})
+      Address.class, BadlyBehavedEntity.class, Car.class,
+      Customer.class, Engine.class, Order.class, VerySpecialClass.class})
   public static interface GwtValidator extends Validator {
   }
 
diff --git a/user/test/org/hibernate/jsr303/tck/tests/validation/ValidateGwtTest.java b/user/test/org/hibernate/jsr303/tck/tests/validation/ValidateGwtTest.java
new file mode 100644
index 0000000..12a9d9c
--- /dev/null
+++ b/user/test/org/hibernate/jsr303/tck/tests/validation/ValidateGwtTest.java
@@ -0,0 +1,114 @@
+/*
+ * 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.tests.validation;
+
+import org.hibernate.jsr303.tck.util.client.Failing;
+
+import javax.validation.ValidationException;
+
+/**
+ * Test wrapper for {@link ValidateTest}.
+ */
+public class ValidateGwtTest extends AbstractValidationTest {
+
+  private final ValidateTest delegate = new ValidateTest();
+
+  public void testConstraintDescriptorWithoutExplicitGroup() {
+    delegate.testConstraintDescriptorWithoutExplicitGroup();
+  }
+
+  public void testConstraintViolation() {
+    delegate.testConstraintViolation();
+  }
+
+  @Failing(issue = 5930)
+  public void testGraphValidationWithArray() {
+    delegate.testGraphValidationWithArray();
+  }
+
+  @Failing(issue = 5930)
+  public void testGraphValidationWithList() {
+    delegate.testGraphValidationWithList();
+  }
+
+  @Failing(issue = 5930)
+  public void testMultipleConstraintViolationOfDifferentTypes() {
+    delegate.testMultipleConstraintViolationOfDifferentTypes();
+  }
+
+  public void testMultipleViolationOfTheSameType() {
+    delegate.testMultipleViolationOfTheSameType();
+  }
+
+  public void testNullParameterToGetConstraintsForClass() {
+    try {
+      delegate.testNullParameterToGetConstraintsForClass();
+      fail("Expected a " + IllegalArgumentException.class);
+    } catch (IllegalArgumentException ignore) {
+      // Expected
+    }
+  }
+
+  public void testObjectTraversion() {
+    delegate.testObjectTraversion();
+  }
+
+  public void testOnlyFirstGroupInSequenceGetEvaluated() {
+    delegate.testOnlyFirstGroupInSequenceGetEvaluated();
+  }
+
+  public void testPassingNullAsGroup() {
+    delegate.testPassingNullAsGroup();
+  }
+
+  public void testUnexpectedExceptionsInValidateGetWrappedInValidationExceptions() {
+    try {
+      delegate.testUnexpectedExceptionsInValidateGetWrappedInValidationExceptions();
+      fail("Expected a " + ValidationException.class);
+    } catch (ValidationException ignore) {
+      // Expected
+    }
+  }
+
+  @Failing(issue = 5929)
+  public void testValidatedPropertyDoesNotFollowJavaBeansConvention() {
+    delegate.testValidatedPropertyDoesNotFollowJavaBeansConvention();
+  }
+
+  public void testValidateWithNullGroup() {
+    try {
+      delegate.testValidateWithNullGroup();
+      fail("Expected a " + IllegalArgumentException.class);
+    } catch (IllegalArgumentException ignore) {
+      // Expected
+    }
+  }
+
+  public void testValidateWithNullValue() {
+    try {
+      delegate.testValidateWithNullValue();
+      fail("Expected a " + IllegalArgumentException.class);
+    } catch (IllegalArgumentException ignore) {
+      // Expected
+    }
+  }
+
+  @Failing(issue = 5930)
+  public void testValidationIsPolymorphic() {
+    delegate.testValidationIsPolymorphic();
+  }
+
+}
diff --git a/user/test/org/hibernate/jsr303/tck/tests/validation/ValidatePropertyGwtTest.java b/user/test/org/hibernate/jsr303/tck/tests/validation/ValidatePropertyGwtTest.java
index 5c72d4e..93bb063 100644
--- a/user/test/org/hibernate/jsr303/tck/tests/validation/ValidatePropertyGwtTest.java
+++ b/user/test/org/hibernate/jsr303/tck/tests/validation/ValidatePropertyGwtTest.java
@@ -26,15 +26,18 @@
 
   private final ValidatePropertyTest delegate = new ValidatePropertyTest();
 
-  public void testIllegalArgumentExceptionIsThrownForNullValue() {
+  // Add Property Prefix so test name is unique in the suite.
+  public void testPropertyIllegalArgumentExceptionIsThrownForNullValue() {
     delegate.testIllegalArgumentExceptionIsThrownForNullValue();
   }
 
-  public void testPassingNullAsGroup() {
+  // Add Property Prefix so test name is unique in the suite.
+  public void testPropertyPassingNullAsGroup() {
     delegate.testPassingNullAsGroup();
   }
 
-  public void testUnexpectedExceptionsInValidatePropertyGetWrappedInValidationExceptions() {
+  // Add Property Prefix so test name is unique in the suite.
+  public void testPropertyUnexpectedExceptionsInValidatePropertyGetWrappedInValidationExceptions() {
     // Wrap the test to catch the @Test expected exception.
     try {
     delegate.testUnexpectedExceptionsInValidatePropertyGetWrappedInValidationExceptions();
