diff --git a/user/src/javax/validation/ConstraintViolationException_CustomFieldSerializer.java b/user/src/javax/validation/ConstraintViolationException_CustomFieldSerializer.java
index c73aef0..2147e48 100644
--- a/user/src/javax/validation/ConstraintViolationException_CustomFieldSerializer.java
+++ b/user/src/javax/validation/ConstraintViolationException_CustomFieldSerializer.java
@@ -1,12 +1,12 @@
 /*
  * 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
@@ -15,6 +15,7 @@
  */
 package javax.validation;
 
+import com.google.gwt.user.client.rpc.CustomFieldSerializer;
 import com.google.gwt.user.client.rpc.SerializationException;
 import com.google.gwt.user.client.rpc.SerializationStreamReader;
 import com.google.gwt.user.client.rpc.SerializationStreamWriter;
@@ -24,19 +25,21 @@
 /**
  * Custom Serializer for {@link ConstraintViolationException}.
  */
-public class ConstraintViolationException_CustomFieldSerializer {
+public class ConstraintViolationException_CustomFieldSerializer extends
+    CustomFieldSerializer<ConstraintViolationException> {
 
+  @SuppressWarnings("unused")
   public static void deserialize(SerializationStreamReader streamReader,
       ConstraintViolationException instance) throws SerializationException {
     // no fields
   }
 
   public static ConstraintViolationException instantiate(
-      SerializationStreamReader streamReader)
-      throws SerializationException {
+      SerializationStreamReader streamReader) throws SerializationException {
     String message = streamReader.readString();
     @SuppressWarnings("unchecked")
-    Set<ConstraintViolation<?>> set = (Set<ConstraintViolation<?>>) streamReader.readObject();
+    Set<ConstraintViolation<?>> set = (Set<ConstraintViolation<?>>) streamReader
+        .readObject();
     return new ConstraintViolationException(message, set);
   }
 
@@ -45,4 +48,27 @@
     streamWriter.writeString(instance.getMessage());
     streamWriter.writeObject(instance.getConstraintViolations());
   }
+
+  @Override
+  public void deserializeInstance(SerializationStreamReader streamReader,
+      ConstraintViolationException instance) throws SerializationException {
+    deserialize(streamReader, instance);
+  }
+
+  @Override
+  public boolean hasCustomInstantiateInstance() {
+    return true;
+  }
+
+  @Override
+  public ConstraintViolationException instantiateInstance(
+      SerializationStreamReader streamReader) throws SerializationException {
+    return instantiate(streamReader);
+  }
+
+  @Override
+  public void serializeInstance(SerializationStreamWriter streamWriter,
+      ConstraintViolationException instance) throws SerializationException {
+    serialize(streamWriter, instance);
+  }
 }
diff --git a/user/src/org/hibernate/validator/engine/ConstraintViolationImpl_CustomFieldSerializer.java b/user/src/org/hibernate/validator/engine/ConstraintViolationImpl_CustomFieldSerializer.java
index 97883fa..8c48686 100644
--- a/user/src/org/hibernate/validator/engine/ConstraintViolationImpl_CustomFieldSerializer.java
+++ b/user/src/org/hibernate/validator/engine/ConstraintViolationImpl_CustomFieldSerializer.java
@@ -15,6 +15,7 @@
  */
 package org.hibernate.validator.engine;
 
+import com.google.gwt.user.client.rpc.CustomFieldSerializer;
 import com.google.gwt.user.client.rpc.SerializationException;
 import com.google.gwt.user.client.rpc.SerializationStreamReader;
 import com.google.gwt.user.client.rpc.SerializationStreamWriter;
@@ -27,8 +28,11 @@
 /**
  * Custom Serializer for {@link ConstraintViolationImpl}.
  */
-public class ConstraintViolationImpl_CustomFieldSerializer {
+@SuppressWarnings("rawtypes")
+public class ConstraintViolationImpl_CustomFieldSerializer extends
+    CustomFieldSerializer<ConstraintViolationImpl> {
 
+  @SuppressWarnings("unused")
   public static void deserialize(SerializationStreamReader streamReader,
       ConstraintViolationImpl instance) throws SerializationException {
     // no fields
@@ -78,4 +82,27 @@
     // streamWriter.writeObject(instance.getConstraintDescriptor());
     // ElementType
   }
+
+  @Override
+  public void deserializeInstance(SerializationStreamReader streamReader,
+      ConstraintViolationImpl instance) throws SerializationException {
+    deserialize(streamReader, instance);
+  }
+
+  @Override
+  public boolean hasCustomInstantiateInstance() {
+    return true;
+  }
+
+  @Override
+  public ConstraintViolationImpl instantiateInstance(
+      SerializationStreamReader streamReader) throws SerializationException {
+    return instantiate(streamReader);
+  }
+
+  @Override
+  public void serializeInstance(SerializationStreamWriter streamWriter,
+      ConstraintViolationImpl instance) throws SerializationException {
+    serialize(streamWriter, instance);
+  }
 }
diff --git a/user/src/org/hibernate/validator/engine/PathImpl_CustomFieldSerializer.java b/user/src/org/hibernate/validator/engine/PathImpl_CustomFieldSerializer.java
index 67c6c59..a7bed6b 100644
--- a/user/src/org/hibernate/validator/engine/PathImpl_CustomFieldSerializer.java
+++ b/user/src/org/hibernate/validator/engine/PathImpl_CustomFieldSerializer.java
@@ -1,12 +1,12 @@
 /*
  * 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
@@ -15,6 +15,7 @@
  */
 package org.hibernate.validator.engine;
 
+import com.google.gwt.user.client.rpc.CustomFieldSerializer;
 import com.google.gwt.user.client.rpc.SerializationException;
 import com.google.gwt.user.client.rpc.SerializationStreamReader;
 import com.google.gwt.user.client.rpc.SerializationStreamWriter;
@@ -22,8 +23,10 @@
 /**
  * Custom Serializer for {@link PathImpl}.
  */
-public class PathImpl_CustomFieldSerializer {
+public class PathImpl_CustomFieldSerializer extends
+    CustomFieldSerializer<PathImpl> {
 
+  @SuppressWarnings("unused")
   public static void deserialize(SerializationStreamReader streamReader,
       PathImpl instance) throws SerializationException {
     // no fields
@@ -40,4 +43,27 @@
       PathImpl instance) throws SerializationException {
     streamWriter.writeString(instance.toString());
   }
+
+  @Override
+  public void deserializeInstance(SerializationStreamReader streamReader,
+      PathImpl instance) throws SerializationException {
+    deserialize(streamReader, instance);
+  }
+
+  @Override
+  public boolean hasCustomInstantiateInstance() {
+    return true;
+  }
+
+  @Override
+  public PathImpl instantiateInstance(SerializationStreamReader streamReader)
+      throws SerializationException {
+    return instantiate(streamReader);
+  }
+
+  @Override
+  public void serializeInstance(SerializationStreamWriter streamWriter,
+      PathImpl instance) throws SerializationException {
+    serialize(streamWriter, instance);
+  }
 }
