diff --git a/user/src/com/google/gwt/validation/Validation.gwt.xml b/user/src/com/google/gwt/validation/Validation.gwt.xml
index 82ad94d..9bfb54d 100644
--- a/user/src/com/google/gwt/validation/Validation.gwt.xml
+++ b/user/src/com/google/gwt/validation/Validation.gwt.xml
@@ -40,7 +40,7 @@
     class="com.google.gwt.validation.client.GwtValidationProviderResolver">
     <when-type-is class="javax.validation.ValidationProviderResolver" />
   </replace-with>
-  <replace-with class="com.google.gwt.validation.client.NullUserValidationMessageResolver">
+  <replace-with class="com.google.gwt.validation.client.impl.NullUserValidationMessageResolver">
     <!-- User can override this to have Custom messages -->
     <when-type-is class="com.google.gwt.validation.client.UserValidationMessagesResolver" />
   </replace-with>
diff --git a/user/src/com/google/gwt/validation/client/AbstractGwtValidatorFactory.java b/user/src/com/google/gwt/validation/client/AbstractGwtValidatorFactory.java
index acbc50d..3a37aba 100644
--- a/user/src/com/google/gwt/validation/client/AbstractGwtValidatorFactory.java
+++ b/user/src/com/google/gwt/validation/client/AbstractGwtValidatorFactory.java
@@ -17,6 +17,7 @@
 
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.validation.client.impl.AbstractGwtValidator;
+import com.google.gwt.validation.client.impl.GwtValidatorContext;
 
 import javax.validation.ConstraintValidatorFactory;
 import javax.validation.MessageInterpolator;
diff --git a/user/src/com/google/gwt/validation/client/BaseMessageInterpolator.java b/user/src/com/google/gwt/validation/client/BaseMessageInterpolator.java
index 286d11f..139582a 100644
--- a/user/src/com/google/gwt/validation/client/BaseMessageInterpolator.java
+++ b/user/src/com/google/gwt/validation/client/BaseMessageInterpolator.java
@@ -23,7 +23,6 @@
 import java.util.Map;
 
 import javax.validation.MessageInterpolator;
-import javax.validation.metadata.ConstraintDescriptor;
 
 /**
  * <strong>EXPERIMENTAL</strong> and subject to change. Do not use this in
@@ -31,29 +30,7 @@
  * <p>
  * Base GWT {@link MessageInterpolator}.
  */
-public abstract class BaseMessageInterpolator implements MessageInterpolator {
-
-  /**
-   * Implementation of {@link Context}.
-   */
-  public static final class ContextImpl implements Context {
-
-    private final ConstraintDescriptor<?> constraintDescriptor;
-    private final Object value;
-
-    public ContextImpl(ConstraintDescriptor<?> constraintDescriptor, Object value) {
-      this.constraintDescriptor = constraintDescriptor;
-      this.value = value;
-    }
-
-    public ConstraintDescriptor<?> getConstraintDescriptor() {
-      return constraintDescriptor;
-    }
-
-    public Object getValidatedValue() {
-      return value;
-    }
-  }
+abstract class BaseMessageInterpolator implements MessageInterpolator {
 
   // local version because guava is not included.
   private static interface Function<F, T> {
diff --git a/user/src/com/google/gwt/validation/client/GwtConstraintValidatorFactory.java b/user/src/com/google/gwt/validation/client/GwtConstraintValidatorFactory.java
index ecc4ea1..3e1a8c4 100644
--- a/user/src/com/google/gwt/validation/client/GwtConstraintValidatorFactory.java
+++ b/user/src/com/google/gwt/validation/client/GwtConstraintValidatorFactory.java
@@ -42,7 +42,7 @@
  * {@link com.google.gwt.core.client.GWT;#create(Class)} instead. Using this
  * class throws a {@link UnsupportedOperationException}.
  */
-public class GwtConstraintValidatorFactory implements
+public final class GwtConstraintValidatorFactory implements
     ConstraintValidatorFactory {
 
   /**
diff --git a/user/src/com/google/gwt/validation/client/GwtMessageInterpolator.java b/user/src/com/google/gwt/validation/client/GwtMessageInterpolator.java
index 7bd6bd2..bb114ca 100644
--- a/user/src/com/google/gwt/validation/client/GwtMessageInterpolator.java
+++ b/user/src/com/google/gwt/validation/client/GwtMessageInterpolator.java
@@ -25,7 +25,7 @@
  * <p>
  * Simple GWT {@link javax.validation.MessageInterpolator}.
  */
-public class GwtMessageInterpolator extends BaseMessageInterpolator {
+public final class GwtMessageInterpolator extends BaseMessageInterpolator {
   // This class only has the parts the need to overridden for GWT
 
   /**
@@ -40,8 +40,8 @@
 
   /**
    * Creates a {@link javax.validation.MessageInterpolator MessageInterpolator}
-   * using the supplie{@link UserValidationMessagesResolver}.
-   *
+   * using the supplied{@link UserValidationMessagesResolver}.
+   * 
    * @param userValidationMessagesResolver
    */
   public GwtMessageInterpolator(
diff --git a/user/src/com/google/gwt/validation/client/GwtTraversableResolver.java b/user/src/com/google/gwt/validation/client/GwtTraversableResolver.java
index d2d4a4d..862e193 100644
--- a/user/src/com/google/gwt/validation/client/GwtTraversableResolver.java
+++ b/user/src/com/google/gwt/validation/client/GwtTraversableResolver.java
@@ -27,7 +27,7 @@
  * <p>
  * GWT {@link TraversableResolver}.
  */
-public class GwtTraversableResolver implements TraversableResolver {
+public final class GwtTraversableResolver implements TraversableResolver {
 
   public boolean isCascadable(Object traversableObject,
       Node traversableProperty, Class<?> rootBeanType,
diff --git a/user/src/com/google/gwt/validation/client/GwtValidationProviderResolver.java b/user/src/com/google/gwt/validation/client/GwtValidationProviderResolver.java
index c11653a..18aa7de 100644
--- a/user/src/com/google/gwt/validation/client/GwtValidationProviderResolver.java
+++ b/user/src/com/google/gwt/validation/client/GwtValidationProviderResolver.java
@@ -31,7 +31,7 @@
  * The default GWT {@link ValidationProviderResolver}. This always returns the
  * single default ValidationProvider using {@link GWT#create(Class)}.
  */
-public class GwtValidationProviderResolver implements
+public final class GwtValidationProviderResolver implements
     ValidationProviderResolver {
 
   private static final List<ValidationProvider<?>> defaultList =
diff --git a/user/src/com/google/gwt/validation/client/constraints/AssertFalseValidator.java b/user/src/com/google/gwt/validation/client/constraints/AssertFalseValidator.java
index 217e9bc..8a29e01 100644
--- a/user/src/com/google/gwt/validation/client/constraints/AssertFalseValidator.java
+++ b/user/src/com/google/gwt/validation/client/constraints/AssertFalseValidator.java
@@ -28,10 +28,10 @@
 public class AssertFalseValidator implements
     ConstraintValidator<AssertFalse, Boolean> {
 
-  public void initialize(AssertFalse constraintAnnotation) {
+  public final void initialize(AssertFalse constraintAnnotation) {
   }
 
-  public boolean isValid(Boolean value, ConstraintValidatorContext context) {
+  public final boolean isValid(Boolean value, ConstraintValidatorContext context) {
     return value == null || !value.booleanValue();
   }
 
diff --git a/user/src/com/google/gwt/validation/client/constraints/AssertTrueValidator.java b/user/src/com/google/gwt/validation/client/constraints/AssertTrueValidator.java
index c02c3d5..c9d1f3f 100644
--- a/user/src/com/google/gwt/validation/client/constraints/AssertTrueValidator.java
+++ b/user/src/com/google/gwt/validation/client/constraints/AssertTrueValidator.java
@@ -28,10 +28,10 @@
 public class AssertTrueValidator implements
     ConstraintValidator<AssertTrue, Boolean> {
 
-  public void initialize(AssertTrue constraintAnnotation) {
+  public final void initialize(AssertTrue constraintAnnotation) {
   }
 
-  public boolean isValid(Boolean value, ConstraintValidatorContext context) {
+  public final boolean isValid(Boolean value, ConstraintValidatorContext context) {
     return value == null || value.booleanValue();
   }
 
diff --git a/user/src/com/google/gwt/validation/client/constraints/DecimalMaxValidatorForNumber.java b/user/src/com/google/gwt/validation/client/constraints/DecimalMaxValidatorForNumber.java
index 7056ac2..239c177 100644
--- a/user/src/com/google/gwt/validation/client/constraints/DecimalMaxValidatorForNumber.java
+++ b/user/src/com/google/gwt/validation/client/constraints/DecimalMaxValidatorForNumber.java
@@ -30,7 +30,7 @@
 public class DecimalMaxValidatorForNumber extends
     AbstractDecimalMaxValidator<Number> {
 
-  public boolean isValid(Number value, ConstraintValidatorContext context) {
+  public final boolean isValid(Number value, ConstraintValidatorContext context) {
     if (value == null) {
       return true;
     }
diff --git a/user/src/com/google/gwt/validation/client/constraints/DecimalMaxValidatorForString.java b/user/src/com/google/gwt/validation/client/constraints/DecimalMaxValidatorForString.java
index c5c3071..9b47c5c 100644
--- a/user/src/com/google/gwt/validation/client/constraints/DecimalMaxValidatorForString.java
+++ b/user/src/com/google/gwt/validation/client/constraints/DecimalMaxValidatorForString.java
@@ -29,7 +29,7 @@
 public class DecimalMaxValidatorForString extends
     AbstractDecimalMaxValidator<String> {
 
-  public boolean isValid(String value, ConstraintValidatorContext context) {
+  public final boolean isValid(String value, ConstraintValidatorContext context) {
     if (value == null) {
       return true;
     }
diff --git a/user/src/com/google/gwt/validation/client/constraints/DecimalMinValidatorForNumber.java b/user/src/com/google/gwt/validation/client/constraints/DecimalMinValidatorForNumber.java
index 057e25f..2c47788 100644
--- a/user/src/com/google/gwt/validation/client/constraints/DecimalMinValidatorForNumber.java
+++ b/user/src/com/google/gwt/validation/client/constraints/DecimalMinValidatorForNumber.java
@@ -30,7 +30,7 @@
 public class DecimalMinValidatorForNumber extends
     AbstractDecimalMinValidator<Number> {
 
-  public boolean isValid(Number value, ConstraintValidatorContext context) {
+  public final boolean isValid(Number value, ConstraintValidatorContext context) {
     if (value == null) {
       return true;
     } else if (value instanceof BigDecimal) {
diff --git a/user/src/com/google/gwt/validation/client/constraints/DecimalMinValidatorForString.java b/user/src/com/google/gwt/validation/client/constraints/DecimalMinValidatorForString.java
index 350ec2c..2a1e33a 100644
--- a/user/src/com/google/gwt/validation/client/constraints/DecimalMinValidatorForString.java
+++ b/user/src/com/google/gwt/validation/client/constraints/DecimalMinValidatorForString.java
@@ -29,7 +29,7 @@
 public class DecimalMinValidatorForString extends
     AbstractDecimalMinValidator<String> {
 
-  public boolean isValid(String value, ConstraintValidatorContext context) {
+  public final boolean isValid(String value, ConstraintValidatorContext context) {
     if (value == null) {
       return true;
     }
diff --git a/user/src/com/google/gwt/validation/client/constraints/DigitsValidatorForNumber.java b/user/src/com/google/gwt/validation/client/constraints/DigitsValidatorForNumber.java
index f918cfc..5282e7d 100644
--- a/user/src/com/google/gwt/validation/client/constraints/DigitsValidatorForNumber.java
+++ b/user/src/com/google/gwt/validation/client/constraints/DigitsValidatorForNumber.java
@@ -27,9 +27,10 @@
  * {@link javax.validation.constraints.Digits} constraint validator
  * implementation for a {@link Number}.
  */
-public class DigitsValidatorForNumber extends AbstractDigitsValidator<Number> {
+public class DigitsValidatorForNumber extends
+    AbstractDigitsValidator<Number> {
 
-  public boolean isValid(Number value, ConstraintValidatorContext context) {
+  public final boolean isValid(Number value, ConstraintValidatorContext context) {
     if (value == null) {
       return true;
     } else if (value instanceof BigDecimal) {
diff --git a/user/src/com/google/gwt/validation/client/constraints/DigitsValidatorForString.java b/user/src/com/google/gwt/validation/client/constraints/DigitsValidatorForString.java
index e98e119..a52fc05 100644
--- a/user/src/com/google/gwt/validation/client/constraints/DigitsValidatorForString.java
+++ b/user/src/com/google/gwt/validation/client/constraints/DigitsValidatorForString.java
@@ -26,9 +26,10 @@
  * {@link javax.validation.constraints.Digits} constraint validator
  * implementation for a {@link String}.
  */
-public class DigitsValidatorForString extends AbstractDigitsValidator<String> {
+public class DigitsValidatorForString extends
+    AbstractDigitsValidator<String> {
 
-  public boolean isValid(String value, ConstraintValidatorContext context) {
+  public final boolean isValid(String value, ConstraintValidatorContext context) {
     if (value == null) {
       return true;
     }
diff --git a/user/src/com/google/gwt/validation/client/constraints/FutureValidatorForDate.java b/user/src/com/google/gwt/validation/client/constraints/FutureValidatorForDate.java
index 0324162..5a7fa66 100644
--- a/user/src/com/google/gwt/validation/client/constraints/FutureValidatorForDate.java
+++ b/user/src/com/google/gwt/validation/client/constraints/FutureValidatorForDate.java
@@ -31,10 +31,10 @@
 public class FutureValidatorForDate implements
     ConstraintValidator<Future, Date> {
 
-  public void initialize(Future constraintAnnotation) {
+  public final void initialize(Future constraintAnnotation) {
   }
 
-  public boolean isValid(Date value, ConstraintValidatorContext context) {
+  public final boolean isValid(Date value, ConstraintValidatorContext context) {
     if (value == null) {
       return true;
     }
diff --git a/user/src/com/google/gwt/validation/client/constraints/MaxValidatorForNumber.java b/user/src/com/google/gwt/validation/client/constraints/MaxValidatorForNumber.java
index 7dd9ec3..bfea94c 100644
--- a/user/src/com/google/gwt/validation/client/constraints/MaxValidatorForNumber.java
+++ b/user/src/com/google/gwt/validation/client/constraints/MaxValidatorForNumber.java
@@ -26,7 +26,7 @@
  */
 public class MaxValidatorForNumber extends AbstractMaxValidator<Number> {
 
-  public boolean isValid(Number value, ConstraintValidatorContext context) {
+  public final boolean isValid(Number value, ConstraintValidatorContext context) {
     if (value == null) {
       return true;
     }
diff --git a/user/src/com/google/gwt/validation/client/constraints/MaxValidatorForString.java b/user/src/com/google/gwt/validation/client/constraints/MaxValidatorForString.java
index 0705d99..91aee3f 100644
--- a/user/src/com/google/gwt/validation/client/constraints/MaxValidatorForString.java
+++ b/user/src/com/google/gwt/validation/client/constraints/MaxValidatorForString.java
@@ -28,7 +28,7 @@
  */
 public class MaxValidatorForString extends AbstractMaxValidator<String> {
 
-  public boolean isValid(String value, ConstraintValidatorContext context) {
+  public final boolean isValid(String value, ConstraintValidatorContext context) {
     if (value == null) {
       return true;
     }
diff --git a/user/src/com/google/gwt/validation/client/constraints/MinValidatorForNumber.java b/user/src/com/google/gwt/validation/client/constraints/MinValidatorForNumber.java
index acab3b4..5c0f097 100644
--- a/user/src/com/google/gwt/validation/client/constraints/MinValidatorForNumber.java
+++ b/user/src/com/google/gwt/validation/client/constraints/MinValidatorForNumber.java
@@ -26,7 +26,7 @@
  */
 public class MinValidatorForNumber extends AbstractMinValidator<Number> {
 
-  public boolean isValid(Number value, ConstraintValidatorContext context) {
+  public final boolean isValid(Number value, ConstraintValidatorContext context) {
     if (value == null) {
       return true;
     }
diff --git a/user/src/com/google/gwt/validation/client/constraints/MinValidatorForString.java b/user/src/com/google/gwt/validation/client/constraints/MinValidatorForString.java
index 15bc559..ca0c0c4 100644
--- a/user/src/com/google/gwt/validation/client/constraints/MinValidatorForString.java
+++ b/user/src/com/google/gwt/validation/client/constraints/MinValidatorForString.java
@@ -28,7 +28,7 @@
  */
 public class MinValidatorForString extends AbstractMinValidator<String> {
 
-  public boolean isValid(String value, ConstraintValidatorContext context) {
+  public final boolean isValid(String value, ConstraintValidatorContext context) {
     if (value == null) {
       return true;
     }
diff --git a/user/src/com/google/gwt/validation/client/constraints/NotNullValidator.java b/user/src/com/google/gwt/validation/client/constraints/NotNullValidator.java
index f8e27a2..b8d76fb 100644
--- a/user/src/com/google/gwt/validation/client/constraints/NotNullValidator.java
+++ b/user/src/com/google/gwt/validation/client/constraints/NotNullValidator.java
@@ -25,12 +25,13 @@
  * <p>
  * {@link NotNull} constraint validator implementation.
  */
-public class NotNullValidator implements ConstraintValidator<NotNull, Object> {
+public class NotNullValidator implements
+    ConstraintValidator<NotNull, Object> {
 
-  public void initialize(NotNull constraintAnnotation) {
+  public final void initialize(NotNull constraintAnnotation) {
   }
 
-  public boolean isValid(Object value, ConstraintValidatorContext context) {
+  public final boolean isValid(Object value, ConstraintValidatorContext context) {
     return value != null;
   }
 }
diff --git a/user/src/com/google/gwt/validation/client/constraints/NullValidator.java b/user/src/com/google/gwt/validation/client/constraints/NullValidator.java
index dc9e80c..751173b 100644
--- a/user/src/com/google/gwt/validation/client/constraints/NullValidator.java
+++ b/user/src/com/google/gwt/validation/client/constraints/NullValidator.java
@@ -27,10 +27,10 @@
  */
 public class NullValidator implements ConstraintValidator<Null, Object> {
 
-  public void initialize(Null constraintAnnotation) {
+  public final void initialize(Null constraintAnnotation) {
   }
 
-  public boolean isValid(Object value, ConstraintValidatorContext context) {
+  public final boolean isValid(Object value, ConstraintValidatorContext context) {
     return value == null;
   }
 }
diff --git a/user/src/com/google/gwt/validation/client/constraints/PastValidatorForDate.java b/user/src/com/google/gwt/validation/client/constraints/PastValidatorForDate.java
index 8c674f1..53f5010 100644
--- a/user/src/com/google/gwt/validation/client/constraints/PastValidatorForDate.java
+++ b/user/src/com/google/gwt/validation/client/constraints/PastValidatorForDate.java
@@ -27,12 +27,13 @@
  * <p>
  * {@link Past} constraint validator implementation for a {@link java.util.Date}.
  */
-public class PastValidatorForDate implements ConstraintValidator<Past, Date> {
+public class PastValidatorForDate implements
+    ConstraintValidator<Past, Date> {
 
-  public void initialize(Past constraintAnnotation) {
+  public final void initialize(Past constraintAnnotation) {
   }
 
-  public boolean isValid(Date value, ConstraintValidatorContext context) {
+  public final boolean isValid(Date value, ConstraintValidatorContext context) {
     if (value == null) {
       return true;
     }
diff --git a/user/src/com/google/gwt/validation/client/constraints/PatternValidator.java b/user/src/com/google/gwt/validation/client/constraints/PatternValidator.java
index 53459a9..e9093c8 100644
--- a/user/src/com/google/gwt/validation/client/constraints/PatternValidator.java
+++ b/user/src/com/google/gwt/validation/client/constraints/PatternValidator.java
@@ -32,10 +32,11 @@
  * Note this implementation uses {@link RegExp} which differs from
  * {@link java.util.regex.Pattern}.
  */
-public class PatternValidator implements ConstraintValidator<Pattern, String> {
+public class PatternValidator implements
+    ConstraintValidator<Pattern, String> {
   private RegExp pattern;
 
-  public void initialize(Pattern annotation) {
+  public final void initialize(Pattern annotation) {
     Pattern.Flag flags[] = annotation.flags();
     String flagString = "";
     for (Pattern.Flag flag : flags) {
@@ -44,7 +45,7 @@
     pattern = RegExp.compile(annotation.regexp(), flagString);
   }
 
-  public boolean isValid(String value, ConstraintValidatorContext context) {
+  public final boolean isValid(String value, ConstraintValidatorContext context) {
     if (value == null) {
       return true;
     }
@@ -56,7 +57,7 @@
     return match.getGroup(0).length() == value.length();
   }
 
-  private String toString(Flag flag) {
+  private final String toString(Flag flag) {
     String value;
     switch (flag) {
       case CASE_INSENSITIVE:
diff --git a/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForArrayOfBoolean.java b/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForArrayOfBoolean.java
index a2c273c..ce523f5 100644
--- a/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForArrayOfBoolean.java
+++ b/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForArrayOfBoolean.java
@@ -27,7 +27,8 @@
 public class SizeValidatorForArrayOfBoolean extends
     AbstractSizeValidator<boolean[]> {
 
-  public boolean isValid(boolean[] value, ConstraintValidatorContext context) {
+  public final boolean isValid(boolean[] value,
+      ConstraintValidatorContext context) {
     if (value == null) {
       return true;
     }
diff --git a/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForArrayOfByte.java b/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForArrayOfByte.java
index ce0e478..68506c1 100644
--- a/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForArrayOfByte.java
+++ b/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForArrayOfByte.java
@@ -24,9 +24,10 @@
  * {@link javax.validation.constraints.Size} constraint validator implementation
  * for a array of {@code byte}s.
  */
-public class SizeValidatorForArrayOfByte extends AbstractSizeValidator<byte[]> {
+public class SizeValidatorForArrayOfByte extends
+    AbstractSizeValidator<byte[]> {
 
-  public boolean isValid(byte[] value, ConstraintValidatorContext context) {
+  public final boolean isValid(byte[] value, ConstraintValidatorContext context) {
     if (value == null) {
       return true;
     }
diff --git a/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForArrayOfChar.java b/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForArrayOfChar.java
index d77119d..a1ffc4b 100644
--- a/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForArrayOfChar.java
+++ b/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForArrayOfChar.java
@@ -24,9 +24,10 @@
  * {@link javax.validation.constraints.Size} constraint validator implementation
  * for a array of {@code char}s.
  */
-public class SizeValidatorForArrayOfChar extends AbstractSizeValidator<char[]> {
+public class SizeValidatorForArrayOfChar extends
+    AbstractSizeValidator<char[]> {
 
-  public boolean isValid(char[] value, ConstraintValidatorContext context) {
+  public final boolean isValid(char[] value, ConstraintValidatorContext context) {
     if (value == null) {
       return true;
     }
diff --git a/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForArrayOfDouble.java b/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForArrayOfDouble.java
index b2c43ee..486056e 100644
--- a/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForArrayOfDouble.java
+++ b/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForArrayOfDouble.java
@@ -27,7 +27,8 @@
 public class SizeValidatorForArrayOfDouble extends
     AbstractSizeValidator<double[]> {
 
-  public boolean isValid(double[] value, ConstraintValidatorContext context) {
+  public final boolean isValid(double[] value,
+      ConstraintValidatorContext context) {
     if (value == null) {
       return true;
     }
diff --git a/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForArrayOfFloat.java b/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForArrayOfFloat.java
index 5f5dfce..09c5e0e 100644
--- a/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForArrayOfFloat.java
+++ b/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForArrayOfFloat.java
@@ -27,7 +27,7 @@
 public class SizeValidatorForArrayOfFloat extends
     AbstractSizeValidator<float[]> {
 
-  public boolean isValid(float[] value, ConstraintValidatorContext context) {
+  public final boolean isValid(float[] value, ConstraintValidatorContext context) {
     if (value == null) {
       return true;
     }
diff --git a/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForArrayOfInt.java b/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForArrayOfInt.java
index a272fcd..ad0af0c 100644
--- a/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForArrayOfInt.java
+++ b/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForArrayOfInt.java
@@ -24,9 +24,10 @@
  * {@link javax.validation.constraints.Size} constraint validator implementation
  * for a array of {@code int}s.
  */
-public class SizeValidatorForArrayOfInt extends AbstractSizeValidator<int[]> {
+public class SizeValidatorForArrayOfInt extends
+    AbstractSizeValidator<int[]> {
 
-  public boolean isValid(int[] value, ConstraintValidatorContext context) {
+  public final boolean isValid(int[] value, ConstraintValidatorContext context) {
     if (value == null) {
       return true;
     }
diff --git a/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForArrayOfLong.java b/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForArrayOfLong.java
index 4b5b0b8..6905984 100644
--- a/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForArrayOfLong.java
+++ b/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForArrayOfLong.java
@@ -24,9 +24,10 @@
  * {@link javax.validation.constraints.Size} constraint validator implementation
  * for a array of {@code long}s.
  */
-public class SizeValidatorForArrayOfLong extends AbstractSizeValidator<long[]> {
+public class SizeValidatorForArrayOfLong extends
+    AbstractSizeValidator<long[]> {
 
-  public boolean isValid(long[] value, ConstraintValidatorContext context) {
+  public final boolean isValid(long[] value, ConstraintValidatorContext context) {
     if (value == null) {
       return true;
     }
diff --git a/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForArrayOfObject.java b/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForArrayOfObject.java
index ee60e97..58b0f50 100644
--- a/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForArrayOfObject.java
+++ b/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForArrayOfObject.java
@@ -27,7 +27,8 @@
 public class SizeValidatorForArrayOfObject extends
     AbstractSizeValidator<Object[]> {
 
-  public boolean isValid(Object[] value, ConstraintValidatorContext context) {
+  public final boolean isValid(Object[] value,
+      ConstraintValidatorContext context) {
     if (value == null) {
       return true;
     }
diff --git a/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForArrayOfShort.java b/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForArrayOfShort.java
index 096dfe0..4bef589 100644
--- a/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForArrayOfShort.java
+++ b/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForArrayOfShort.java
@@ -27,7 +27,7 @@
 public class SizeValidatorForArrayOfShort extends
     AbstractSizeValidator<short[]> {
 
-  public boolean isValid(short[] value, ConstraintValidatorContext context) {
+  public final boolean isValid(short[] value, ConstraintValidatorContext context) {
     if (value == null) {
       return true;
     }
diff --git a/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForCollection.java b/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForCollection.java
index 93492e6..6914c3d 100644
--- a/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForCollection.java
+++ b/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForCollection.java
@@ -29,7 +29,8 @@
 public class SizeValidatorForCollection extends
     AbstractSizeValidator<Collection<?>> {
 
-  public boolean isValid(Collection<?> value, ConstraintValidatorContext context) {
+  public final boolean isValid(Collection<?> value,
+      ConstraintValidatorContext context) {
     if (value == null) {
       return true;
     }
diff --git a/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForMap.java b/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForMap.java
index c20774d..ccf1c6c 100644
--- a/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForMap.java
+++ b/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForMap.java
@@ -28,7 +28,8 @@
  */
 public class SizeValidatorForMap extends AbstractSizeValidator<Map<?, ?>> {
 
-  public boolean isValid(Map<?, ?> value, ConstraintValidatorContext context) {
+  public final boolean isValid(Map<?, ?> value,
+      ConstraintValidatorContext context) {
     if (value == null) {
       return true;
     }
diff --git a/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForString.java b/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForString.java
index 7297e0b..4ad9c47 100644
--- a/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForString.java
+++ b/user/src/com/google/gwt/validation/client/constraints/SizeValidatorForString.java
@@ -26,7 +26,7 @@
  */
 public class SizeValidatorForString extends AbstractSizeValidator<String> {
 
-  public boolean isValid(String value, ConstraintValidatorContext context) {
+  public final boolean isValid(String value, ConstraintValidatorContext context) {
     if (value == null) {
       return true;
     }
diff --git a/user/src/com/google/gwt/validation/client/impl/AbstractGwtSpecificValidator.java b/user/src/com/google/gwt/validation/client/impl/AbstractGwtSpecificValidator.java
index 02de56f..03287e1 100644
--- a/user/src/com/google/gwt/validation/client/impl/AbstractGwtSpecificValidator.java
+++ b/user/src/com/google/gwt/validation/client/impl/AbstractGwtSpecificValidator.java
@@ -15,8 +15,6 @@
  */
 package com.google.gwt.validation.client.impl;
 
-import com.google.gwt.validation.client.BaseMessageInterpolator.ContextImpl;
-
 import java.lang.annotation.Annotation;
 import java.util.Collection;
 import java.util.Collections;
@@ -151,7 +149,8 @@
       ConstraintDescriptorImpl<A> constraintDescriptor,
       MessageAndPath messageAndPath) {
     MessageInterpolator messageInterpolator = context.getMessageInterpolator();
-    ContextImpl messageContext = new ContextImpl(constraintDescriptor, value);
+    com.google.gwt.validation.client.impl.MessageInterpolatorContextImpl messageContext = new MessageInterpolatorContextImpl(
+        constraintDescriptor, value);
     String message = messageInterpolator.interpolate(
         messageAndPath.getMessage(), messageContext);
     ConstraintViolation<T> violation = ConstraintViolationImpl.<T> builder() //
diff --git a/user/src/com/google/gwt/validation/client/BaseGwtConfiguration.java b/user/src/com/google/gwt/validation/client/impl/BaseGwtConfiguration.java
similarity index 98%
rename from user/src/com/google/gwt/validation/client/BaseGwtConfiguration.java
rename to user/src/com/google/gwt/validation/client/impl/BaseGwtConfiguration.java
index 8c41f9d..8a196a8 100644
--- a/user/src/com/google/gwt/validation/client/BaseGwtConfiguration.java
+++ b/user/src/com/google/gwt/validation/client/impl/BaseGwtConfiguration.java
@@ -13,7 +13,7 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package com.google.gwt.validation.client;
+package com.google.gwt.validation.client.impl;
 
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.validation.client.spi.GwtConfigurationState;
diff --git a/user/src/com/google/gwt/validation/client/impl/ConstraintDescriptorImpl.java b/user/src/com/google/gwt/validation/client/impl/ConstraintDescriptorImpl.java
index 85034b4..4a4d4dd 100644
--- a/user/src/com/google/gwt/validation/client/impl/ConstraintDescriptorImpl.java
+++ b/user/src/com/google/gwt/validation/client/impl/ConstraintDescriptorImpl.java
@@ -34,7 +34,7 @@
  * 
  * @param <T> the constraint annotation to describe.
  */
-public class ConstraintDescriptorImpl<T extends Annotation> implements
+public final class ConstraintDescriptorImpl<T extends Annotation> implements
     ConstraintDescriptor<T> {
 
   /**
diff --git a/user/src/com/google/gwt/validation/client/impl/ConstraintValidatorContextImpl.java b/user/src/com/google/gwt/validation/client/impl/ConstraintValidatorContextImpl.java
index 826efb5..8467d51 100644
--- a/user/src/com/google/gwt/validation/client/impl/ConstraintValidatorContextImpl.java
+++ b/user/src/com/google/gwt/validation/client/impl/ConstraintValidatorContextImpl.java
@@ -37,7 +37,8 @@
  * @param <A> the constraint being validated
  * @param <T> the type of object being validated
  */
-public class ConstraintValidatorContextImpl<A extends Annotation, T> implements
+public final class ConstraintValidatorContextImpl<A extends Annotation, T>
+    implements
     ConstraintValidatorContext {
 
   /**
diff --git a/user/src/com/google/gwt/validation/client/impl/ConstraintViolationImpl.java b/user/src/com/google/gwt/validation/client/impl/ConstraintViolationImpl.java
index 2eb2111..a1696ac 100644
--- a/user/src/com/google/gwt/validation/client/impl/ConstraintViolationImpl.java
+++ b/user/src/com/google/gwt/validation/client/impl/ConstraintViolationImpl.java
@@ -29,7 +29,7 @@
  * 
  * @param <T> the type of bean validated.
  */
-public class ConstraintViolationImpl<T> implements ConstraintViolation<T>,
+public final class ConstraintViolationImpl<T> implements ConstraintViolation<T>,
     Serializable {
 
   /**
diff --git a/user/src/com/google/gwt/validation/client/GwtConfiguration.java b/user/src/com/google/gwt/validation/client/impl/GwtConfiguration.java
similarity index 91%
rename from user/src/com/google/gwt/validation/client/GwtConfiguration.java
rename to user/src/com/google/gwt/validation/client/impl/GwtConfiguration.java
index e4a22f4..26438e8 100644
--- a/user/src/com/google/gwt/validation/client/GwtConfiguration.java
+++ b/user/src/com/google/gwt/validation/client/impl/GwtConfiguration.java
@@ -13,7 +13,7 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package com.google.gwt.validation.client;
+package com.google.gwt.validation.client.impl;
 
 import com.google.gwt.validation.client.spi.GwtValidationProvider;
 
@@ -28,7 +28,7 @@
  * Extends {@link BaseGwtConfiguration} with just the parts that are not GWT
  * compatible.
  */
-public class GwtConfiguration extends BaseGwtConfiguration {
+public final class GwtConfiguration extends BaseGwtConfiguration {
 
   public GwtConfiguration(GwtValidationProvider gwtValidationProvider,
       BootstrapState state) {
diff --git a/user/src/com/google/gwt/validation/client/impl/GwtValidationContext.java b/user/src/com/google/gwt/validation/client/impl/GwtValidationContext.java
index b80785c..34de391 100644
--- a/user/src/com/google/gwt/validation/client/impl/GwtValidationContext.java
+++ b/user/src/com/google/gwt/validation/client/impl/GwtValidationContext.java
@@ -35,7 +35,7 @@
  * @param <T> the type of the root bean.
  * 
  */
-public class GwtValidationContext<T> {
+public final class GwtValidationContext<T> {
 
   private final BeanDescriptor beanDescriptor;
   private PathImpl path = new PathImpl();
diff --git a/user/src/com/google/gwt/validation/client/GwtValidatorContext.java b/user/src/com/google/gwt/validation/client/impl/GwtValidatorContext.java
similarity index 92%
rename from user/src/com/google/gwt/validation/client/GwtValidatorContext.java
rename to user/src/com/google/gwt/validation/client/impl/GwtValidatorContext.java
index 993f89b..abf5890 100644
--- a/user/src/com/google/gwt/validation/client/GwtValidatorContext.java
+++ b/user/src/com/google/gwt/validation/client/impl/GwtValidatorContext.java
@@ -13,9 +13,9 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package com.google.gwt.validation.client;
+package com.google.gwt.validation.client.impl;
 
-import com.google.gwt.validation.client.impl.AbstractGwtValidator;
+import com.google.gwt.validation.client.AbstractGwtValidatorFactory;
 
 import javax.validation.ConstraintValidatorFactory;
 import javax.validation.MessageInterpolator;
@@ -29,7 +29,7 @@
  * <p>
  * GWT {@link ValidatorContext}.
  */
-class GwtValidatorContext implements ValidatorContext {
+public final class GwtValidatorContext implements ValidatorContext {
 
   private final AbstractGwtValidatorFactory validatorFactory;
 
@@ -41,7 +41,7 @@
   private MessageInterpolator messageInterpolator = null;
   private TraversableResolver traversableResolver = null;
 
-  GwtValidatorContext(AbstractGwtValidatorFactory validatorFactory) {
+  public GwtValidatorContext(AbstractGwtValidatorFactory validatorFactory) {
     this.validatorFactory = validatorFactory;
 
     factoryConstraintValidatorfactory = validatorFactory
diff --git a/user/src/com/google/gwt/validation/client/impl/MessageAndPath.java b/user/src/com/google/gwt/validation/client/impl/MessageAndPath.java
index e67b97f..d83c65c 100644
--- a/user/src/com/google/gwt/validation/client/impl/MessageAndPath.java
+++ b/user/src/com/google/gwt/validation/client/impl/MessageAndPath.java
@@ -25,7 +25,7 @@
  * <p>
  * Used to build a {@link javax.validation.ConstraintViolation}
  */
-public class MessageAndPath {
+public final class MessageAndPath {
 
   private final String message;
   private final Path path;
diff --git a/user/src/com/google/gwt/validation/client/impl/MessageInterpolatorContextImpl.java b/user/src/com/google/gwt/validation/client/impl/MessageInterpolatorContextImpl.java
new file mode 100644
index 0000000..64b6592
--- /dev/null
+++ b/user/src/com/google/gwt/validation/client/impl/MessageInterpolatorContextImpl.java
@@ -0,0 +1,41 @@
+/*
+ * 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 com.google.gwt.validation.client.impl;
+
+import javax.validation.MessageInterpolator.Context;
+import javax.validation.metadata.ConstraintDescriptor;
+
+/**
+ * Implementation of {@link Context}.
+ */
+public final class MessageInterpolatorContextImpl implements Context {
+
+  private final ConstraintDescriptor<?> constraintDescriptor;
+  private final Object value;
+
+  public MessageInterpolatorContextImpl(ConstraintDescriptor<?> constraintDescriptor, Object value) {
+    this.constraintDescriptor = constraintDescriptor;
+    this.value = value;
+  }
+
+  public ConstraintDescriptor<?> getConstraintDescriptor() {
+    return constraintDescriptor;
+  }
+
+  public Object getValidatedValue() {
+    return value;
+  }
+}
\ No newline at end of file
diff --git a/user/src/com/google/gwt/validation/client/impl/NodeImpl.java b/user/src/com/google/gwt/validation/client/impl/NodeImpl.java
index 86dbac7..7f59f39 100644
--- a/user/src/com/google/gwt/validation/client/impl/NodeImpl.java
+++ b/user/src/com/google/gwt/validation/client/impl/NodeImpl.java
@@ -25,7 +25,7 @@
  * <p>
  * An immutable GWT safe implementation of {@link Node}.
  */
-class NodeImpl implements Node, Serializable {
+final class NodeImpl implements Node, Serializable {
 
   private static final long serialVersionUID = 1L;
   public static final Node ROOT_NODE = new NodeImpl(null, null, null, false);
diff --git a/user/src/com/google/gwt/validation/client/NullUserValidationMessageResolver.java b/user/src/com/google/gwt/validation/client/impl/NullUserValidationMessageResolver.java
similarity index 81%
rename from user/src/com/google/gwt/validation/client/NullUserValidationMessageResolver.java
rename to user/src/com/google/gwt/validation/client/impl/NullUserValidationMessageResolver.java
index f0f5b90..c654751 100644
--- a/user/src/com/google/gwt/validation/client/NullUserValidationMessageResolver.java
+++ b/user/src/com/google/gwt/validation/client/impl/NullUserValidationMessageResolver.java
@@ -13,7 +13,9 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package com.google.gwt.validation.client;
+package com.google.gwt.validation.client.impl;
+
+import com.google.gwt.validation.client.UserValidationMessagesResolver;
 
 /**
  * <strong>EXPERIMENTAL</strong> and subject to change. Do not use this in
@@ -21,7 +23,7 @@
  * <p>
  * Always resolves message keys to null.
  */
-public class NullUserValidationMessageResolver implements
+public final class NullUserValidationMessageResolver implements
     UserValidationMessagesResolver {
 
   public String get(String key) {
diff --git a/user/src/com/google/gwt/validation/client/impl/PathImpl.java b/user/src/com/google/gwt/validation/client/impl/PathImpl.java
index 9c8c224..b88b643 100644
--- a/user/src/com/google/gwt/validation/client/impl/PathImpl.java
+++ b/user/src/com/google/gwt/validation/client/impl/PathImpl.java
@@ -28,7 +28,7 @@
  * <p>
  * An immutable GWT safe implementation of {@link Path}.
  */
-public class PathImpl implements Path, Serializable {
+public final class PathImpl implements Path, Serializable {
 
   private static final long serialVersionUID = 1L;
 
diff --git a/user/src/com/google/gwt/validation/client/impl/PropertyDescriptorImpl.java b/user/src/com/google/gwt/validation/client/impl/PropertyDescriptorImpl.java
index 795b04f..e70fa04 100644
--- a/user/src/com/google/gwt/validation/client/impl/PropertyDescriptorImpl.java
+++ b/user/src/com/google/gwt/validation/client/impl/PropertyDescriptorImpl.java
@@ -28,7 +28,7 @@
  * production code.
  * <p>
  */
-public class PropertyDescriptorImpl implements PropertyDescriptor {
+public final class PropertyDescriptorImpl implements PropertyDescriptor {
 
   private boolean cascaded;
   private Set<ConstraintDescriptor<?>> descriptors = new HashSet<ConstraintDescriptor<?>>();
diff --git a/user/src/com/google/gwt/validation/client/Validation.java b/user/src/com/google/gwt/validation/client/impl/Validation.java
similarity index 99%
rename from user/src/com/google/gwt/validation/client/Validation.java
rename to user/src/com/google/gwt/validation/client/impl/Validation.java
index dc1d863..ea2e488 100644
--- a/user/src/com/google/gwt/validation/client/Validation.java
+++ b/user/src/com/google/gwt/validation/client/impl/Validation.java
@@ -13,7 +13,7 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package com.google.gwt.validation.client;
+package com.google.gwt.validation.client.impl;
 
 import com.google.gwt.core.client.GWT;
 
diff --git a/user/src/com/google/gwt/validation/client/spi/BaseConfigurationState.java b/user/src/com/google/gwt/validation/client/spi/BaseConfigurationState.java
index 621a444..d9f259d 100644
--- a/user/src/com/google/gwt/validation/client/spi/BaseConfigurationState.java
+++ b/user/src/com/google/gwt/validation/client/spi/BaseConfigurationState.java
@@ -28,7 +28,7 @@
  * <p>
  * Base GWT implementation of {@link ConfigurationState}.
  */
-public abstract class BaseConfigurationState implements ConfigurationState {
+abstract class BaseConfigurationState implements ConfigurationState {
 
   public ConstraintValidatorFactory getConstraintValidatorFactory() {
     // TODO(nchalko) implement.
diff --git a/user/src/com/google/gwt/validation/client/spi/GwtBootStrapState.java b/user/src/com/google/gwt/validation/client/spi/GwtBootStrapState.java
index 9077504..4fa6240 100644
--- a/user/src/com/google/gwt/validation/client/spi/GwtBootStrapState.java
+++ b/user/src/com/google/gwt/validation/client/spi/GwtBootStrapState.java
@@ -26,7 +26,7 @@
  * <p>
  * GWT {@link BootstrapState}.
  */
-public class GwtBootStrapState implements BootstrapState {
+public final class GwtBootStrapState implements BootstrapState {
 
   public ValidationProviderResolver getDefaultValidationProviderResolver() {
     return GWT.create(ValidationProviderResolver.class);
diff --git a/user/src/com/google/gwt/validation/client/spi/GwtConfigurationState.java b/user/src/com/google/gwt/validation/client/spi/GwtConfigurationState.java
index f66c340..7b4027a 100644
--- a/user/src/com/google/gwt/validation/client/spi/GwtConfigurationState.java
+++ b/user/src/com/google/gwt/validation/client/spi/GwtConfigurationState.java
@@ -24,7 +24,7 @@
  * <p>
  * Only the GWT incompatible parts.
  */
-public class GwtConfigurationState extends BaseConfigurationState {
+public final class GwtConfigurationState extends BaseConfigurationState {
 
   public Set<InputStream> getMappingStreams() {
     throw new UnsupportedOperationException(
diff --git a/user/src/com/google/gwt/validation/client/spi/GwtValidationProvider.java b/user/src/com/google/gwt/validation/client/spi/GwtValidationProvider.java
index 34037a2..ecedd8e 100644
--- a/user/src/com/google/gwt/validation/client/spi/GwtValidationProvider.java
+++ b/user/src/com/google/gwt/validation/client/spi/GwtValidationProvider.java
@@ -16,8 +16,8 @@
 package com.google.gwt.validation.client.spi;
 
 import com.google.gwt.core.client.GWT;
-import com.google.gwt.validation.client.BaseGwtConfiguration;
-import com.google.gwt.validation.client.GwtConfiguration;
+import com.google.gwt.validation.client.impl.BaseGwtConfiguration;
+import com.google.gwt.validation.client.impl.GwtConfiguration;
 
 import javax.validation.Configuration;
 import javax.validation.ValidatorFactory;
@@ -31,7 +31,7 @@
  * <p>
  * GWT {@link ValidationProvider}.
  */
-public class GwtValidationProvider implements
+public final class GwtValidationProvider implements
     ValidationProvider<BaseGwtConfiguration> {
 
   public ValidatorFactory buildValidatorFactory(
diff --git a/user/src/com/google/gwt/validation/rebind/GwtSpecificValidatorCreator.java b/user/src/com/google/gwt/validation/rebind/GwtSpecificValidatorCreator.java
index 65c77c6..493c4a2 100644
--- a/user/src/com/google/gwt/validation/rebind/GwtSpecificValidatorCreator.java
+++ b/user/src/com/google/gwt/validation/rebind/GwtSpecificValidatorCreator.java
@@ -81,7 +81,7 @@
  * <p>
  * This class is not thread safe.
  */
-public class GwtSpecificValidatorCreator extends AbstractCreator {
+public final class GwtSpecificValidatorCreator extends AbstractCreator {
   private static enum Stage {
     OBJECT, PROPERTY, VALUE
   }
diff --git a/user/src/com/google/gwt/validation/rebind/GwtSpecificValidatorGenerator.java b/user/src/com/google/gwt/validation/rebind/GwtSpecificValidatorGenerator.java
index 2b2b43f..357baff 100644
--- a/user/src/com/google/gwt/validation/rebind/GwtSpecificValidatorGenerator.java
+++ b/user/src/com/google/gwt/validation/rebind/GwtSpecificValidatorGenerator.java
@@ -32,7 +32,7 @@
  * <p>
  * This class is thread safe.
  */
-public class GwtSpecificValidatorGenerator extends Generator {
+public final class GwtSpecificValidatorGenerator extends Generator {
 
   @Override
   public String generate(TreeLogger logger, GeneratorContext context,
diff --git a/user/src/com/google/gwt/validation/rebind/Util.java b/user/src/com/google/gwt/validation/rebind/Util.java
index 93e4cc4..32e62a3 100644
--- a/user/src/com/google/gwt/validation/rebind/Util.java
+++ b/user/src/com/google/gwt/validation/rebind/Util.java
@@ -35,7 +35,7 @@
  * <p>
  * Static utilities for the validation rebind package.
  */
-class Util {
+final class Util {
 
   /**
    * Creates a Predicate that returns false if source contains an associated
diff --git a/user/src/com/google/gwt/validation/rebind/ValidatorCreator.java b/user/src/com/google/gwt/validation/rebind/ValidatorCreator.java
index fc5d18f..d9708c7 100644
--- a/user/src/com/google/gwt/validation/rebind/ValidatorCreator.java
+++ b/user/src/com/google/gwt/validation/rebind/ValidatorCreator.java
@@ -42,7 +42,7 @@
  * <p>
  * Class that creates the validator for the given input class.
  */
-public class ValidatorCreator extends AbstractCreator {
+public final class ValidatorCreator extends AbstractCreator {
 
   /**
    * The beans to validate in source declaration order.
diff --git a/user/src/com/google/gwt/validation/rebind/ValidatorGenerator.java b/user/src/com/google/gwt/validation/rebind/ValidatorGenerator.java
index 86b35ac..7e93219 100644
--- a/user/src/com/google/gwt/validation/rebind/ValidatorGenerator.java
+++ b/user/src/com/google/gwt/validation/rebind/ValidatorGenerator.java
@@ -32,7 +32,7 @@
  * {@link com.google.gwt.validation.client.GwtValidation} annotation. See
  * {@link com.google.gwt.validation.client.GwtValidation} for usage.
  */
-public class ValidatorGenerator extends Generator {
+public final class ValidatorGenerator extends Generator {
 
   @Override
   public String generate(TreeLogger logger, GeneratorContext context,
diff --git a/user/src/com/google/gwt/validation/super/com/google/gwt/validation/client/GwtMessageInterpolator.java b/user/src/com/google/gwt/validation/super/com/google/gwt/validation/client/GwtMessageInterpolator.java
index 3460fad..e7a2c11 100644
--- a/user/src/com/google/gwt/validation/super/com/google/gwt/validation/client/GwtMessageInterpolator.java
+++ b/user/src/com/google/gwt/validation/super/com/google/gwt/validation/client/GwtMessageInterpolator.java
@@ -26,7 +26,7 @@
  * <p>
  * Simple GWT {@link javax.validation.MessageInterpolator}.
  */
-public class GwtMessageInterpolator extends BaseMessageInterpolator {
+public final class GwtMessageInterpolator extends BaseMessageInterpolator {
   // This class only has the parts the need to overridden for GWT
 
   /**
diff --git a/user/src/com/google/gwt/validation/super/com/google/gwt/validation/client/GwtConfiguration.java b/user/src/com/google/gwt/validation/super/com/google/gwt/validation/client/impl/GwtConfiguration.java
similarity index 90%
rename from user/src/com/google/gwt/validation/super/com/google/gwt/validation/client/GwtConfiguration.java
rename to user/src/com/google/gwt/validation/super/com/google/gwt/validation/client/impl/GwtConfiguration.java
index c70d11b..134e392 100644
--- a/user/src/com/google/gwt/validation/super/com/google/gwt/validation/client/GwtConfiguration.java
+++ b/user/src/com/google/gwt/validation/super/com/google/gwt/validation/client/impl/GwtConfiguration.java
@@ -13,7 +13,7 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package com.google.gwt.validation.client;
+package com.google.gwt.validation.client.impl;
 
 import com.google.gwt.validation.client.spi.GwtValidationProvider;
 
@@ -23,7 +23,7 @@
  * Extends {@link BaseGwtConfiguration} with just the parts that are not GWT
  * compatible.
  */
-public class GwtConfiguration extends BaseGwtConfiguration {
+public final class GwtConfiguration extends BaseGwtConfiguration {
 
   public GwtConfiguration(GwtValidationProvider gwtValidationProvider,
       BootstrapState state) {
diff --git a/user/src/com/google/gwt/validation/super/com/google/gwt/validation/client/spi/GwtConfigurationState.java b/user/src/com/google/gwt/validation/super/com/google/gwt/validation/client/spi/GwtConfigurationState.java
index 6cabb78..95d267f 100644
--- a/user/src/com/google/gwt/validation/super/com/google/gwt/validation/client/spi/GwtConfigurationState.java
+++ b/user/src/com/google/gwt/validation/super/com/google/gwt/validation/client/spi/GwtConfigurationState.java
@@ -20,7 +20,7 @@
 /**
  * Only the GWT incompatible parts.
  */
-public class GwtConfigurationState extends BaseConfigurationState {
+public final class GwtConfigurationState extends BaseConfigurationState {
 
   public Set<String> getMappingStreams() {
     throw new UnsupportedOperationException(
diff --git a/user/src/javax/validation/super/javax/validation/Validation.java b/user/src/javax/validation/super/javax/validation/Validation.java
index 45a4540..b1c199e 100644
--- a/user/src/javax/validation/super/javax/validation/Validation.java
+++ b/user/src/javax/validation/super/javax/validation/Validation.java
@@ -18,5 +18,5 @@
 /**
  * Pass through to GWT version {@link com.google.gwt.validation.client.Validation}.
  */
-public class Validation  extends com.google.gwt.validation.client.Validation {
+public class Validation  extends com.google.gwt.validation.client.impl.Validation {
 }
diff --git a/user/test/com/google/gwt/validation/ValidationClientGwtSuite.java b/user/test/com/google/gwt/validation/ValidationClientGwtSuite.java
index 4e6794f..a9ae276 100644
--- a/user/test/com/google/gwt/validation/ValidationClientGwtSuite.java
+++ b/user/test/com/google/gwt/validation/ValidationClientGwtSuite.java
@@ -17,8 +17,8 @@
 
 import com.google.gwt.junit.tools.GWTTestSuite;
 import com.google.gwt.validation.client.BaseMessageInterpolatorTest;
-import com.google.gwt.validation.client.GwtValidatorContextTest;
 import com.google.gwt.validation.client.SimpleSampleTest;
+import com.google.gwt.validation.client.impl.GwtValidatorContextTest;
 
 import junit.framework.Test;
 
diff --git a/user/test/com/google/gwt/validation/client/GwtValidatorContextTest.java b/user/test/com/google/gwt/validation/client/impl/GwtValidatorContextTest.java
similarity index 93%
rename from user/test/com/google/gwt/validation/client/GwtValidatorContextTest.java
rename to user/test/com/google/gwt/validation/client/impl/GwtValidatorContextTest.java
index 25e1cae..f286ebb 100644
--- a/user/test/com/google/gwt/validation/client/GwtValidatorContextTest.java
+++ b/user/test/com/google/gwt/validation/client/impl/GwtValidatorContextTest.java
@@ -13,10 +13,13 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package com.google.gwt.validation.client;
+package com.google.gwt.validation.client.impl;
 
-import com.google.gwt.validation.client.impl.AbstractGwtValidator;
-import com.google.gwt.validation.client.impl.GwtValidationContext;
+import com.google.gwt.validation.client.AbstractGwtValidatorFactory;
+import com.google.gwt.validation.client.GwtConstraintValidatorFactory;
+import com.google.gwt.validation.client.GwtMessageInterpolator;
+import com.google.gwt.validation.client.GwtTraversableResolver;
+import com.google.gwt.validation.client.ValidationClientGwtTestCase;
 
 import java.util.Set;
 
