diff --git a/pom.xml b/pom.xml
index 8823cf3..18c009b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -175,6 +175,29 @@
         </plugins>
       </build>
     </profile>
+    <profile>
+      <id>java8</id>
+      <activation>
+        <jdk>[1.8,)</jdk>
+      </activation>
+      <reporting>
+        <plugins>
+          <!-- Use Java 8 compatible Findbugs version -->
+          <plugin>
+            <groupId>org.codehaus.mojo</groupId>
+            <artifactId>findbugs-maven-plugin</artifactId>
+            <version>3.0.1</version>
+            <configuration>
+              <threshold>Normal</threshold>
+            </configuration>
+          </plugin>
+        </plugins>
+      </reporting>
+      <properties>
+        <!-- ignore doclint errors (should be warnings) -->
+        <additionalparam>-Xdoclint:none</additionalparam>
+      </properties>
+    </profile>
   </profiles>
 
   <properties>
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 7a48b7a..fbea682 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -27,7 +27,7 @@
   <body>
      <release version="1.2.3" date="in Subversion">
      </release>
-     <release version="1.2.2" date="2016-11-27">
+     <release version="1.2.2" date="2016-12-07">
       <action dev="tv" type="update">
         Move all post-processing to afterUnmarshal(), privatize a number of fields
       </action>
diff --git a/src/java/org/apache/fulcrum/intake/IntakeService.java b/src/java/org/apache/fulcrum/intake/IntakeService.java
index b852b52..2f861c3 100644
--- a/src/java/org/apache/fulcrum/intake/IntakeService.java
+++ b/src/java/org/apache/fulcrum/intake/IntakeService.java
@@ -20,7 +20,6 @@
  */
 
 import java.beans.IntrospectionException;
-
 import java.lang.reflect.Method;
 
 import org.apache.fulcrum.intake.model.Group;
@@ -32,9 +31,9 @@
  * <p>Localization of Intake's error messages can be accomplished
  * using Turbine's <code>LocalizationTool</code> from a Velocity template
  * as follows:
- * <blockquote><code></pre>
+ * <code>
  * $l10n.get($intake.SomeGroup.SomeField.Message)
- * </pre></code></blockquote>
+ * </code>
  * </p>
  *
  * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
@@ -98,7 +97,7 @@
      * Gets the current size of the pool for a named group.
      *
      * @param groupName the name of the group.
-     *
+     * @return the size of the group pool
      * @throws IntakeException The passed group name does not exist.
      */
     int getSize(String groupName)
@@ -133,8 +132,8 @@
      * @param className the name of the object.
      * @param propName the name of the property.
      * @return the setter.
-     * @throws ClassNotFoundException
-     * @throws IntrospectionException
+     * @throws ClassNotFoundException if the class specified could not be loaded
+     * @throws IntrospectionException if the property setter could not be called
      */
     Method getFieldSetter(String className, String propName)
             throws ClassNotFoundException, IntrospectionException;
@@ -145,14 +144,9 @@
      * @param className the name of the object.
      * @param propName the name of the property.
      * @return the getter.
-     * @throws ClassNotFoundException
-     * @throws IntrospectionException
+     * @throws ClassNotFoundException if the class specified could not be loaded
+     * @throws IntrospectionException if the property getter could not be called
      */
     Method getFieldGetter(String className, String propName)
             throws ClassNotFoundException, IntrospectionException;
 }
-
-
-
-
-
diff --git a/src/java/org/apache/fulcrum/intake/IntakeServiceFacade.java b/src/java/org/apache/fulcrum/intake/IntakeServiceFacade.java
index 142e694..fd824a6 100644
--- a/src/java/org/apache/fulcrum/intake/IntakeServiceFacade.java
+++ b/src/java/org/apache/fulcrum/intake/IntakeServiceFacade.java
@@ -26,14 +26,14 @@
 
 /**
  * This is a Facade class for IntakeService.
- * 
+ *
  * This class provides static methods that call related methods of the
  * implementation of the IntakeService used by the System, according to the
  * settings in your intake.xml file.
- * 
+ *
  * Note: How should a facade class work? It seems to me that maybe it should
  * only have a hook into the Avalon Component Manager somehow?
- * 
+ *
  * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
  * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
  * @version $Id$
@@ -41,7 +41,6 @@
 public class IntakeServiceFacade
 {
     /** Static instance of the intakeService. */
-
     private static IntakeService intakeService;
 
     /**
@@ -56,7 +55,7 @@
     /**
      * Gets an instance of a named group either from the pool or by calling the
      * Factory Service if the pool is empty.
-     * 
+     *
      * @param groupName
      *            the name of the group.
      * @return a Group instance.
@@ -74,7 +73,7 @@
 
     /**
      * Puts a group back to the pool.
-     * 
+     *
      * @param instance
      *            the object instance to recycle.
      * @throws IntakeException
@@ -87,7 +86,7 @@
 
     /**
      * Gets the current size of the pool for a named group.
-     * 
+     *
      * @param groupName
      *            the name of the group.
      * @return the current pool size
@@ -101,7 +100,7 @@
 
     /**
      * Names of all the defined groups.
-     * 
+     *
      * @return array of names.
      */
     public static String[] getGroupNames()
@@ -111,7 +110,7 @@
 
     /**
      * Gets the key (usually a short identifier) for a group.
-     * 
+     *
      * @param groupName
      *            the name of the group.
      * @return the the key.
@@ -123,7 +122,7 @@
 
     /**
      * Gets the group name given its key.
-     * 
+     *
      * @param groupKey
      *            the key.
      * @return groupName the name of the group.
@@ -135,14 +134,14 @@
 
     /**
      * Gets the Method that can be used to set a property.
-     * 
+     *
      * @param className
      *            the name of the object.
      * @param propName
      *            the name of the property.
      * @return the setter.
-     * @throws ClassNotFoundException
-     * @throws IntrospectionException
+     * @throws ClassNotFoundException if the class specified could not be loaded
+     * @throws IntrospectionException if the property setter could not be called
      */
     public static Method getFieldSetter(String className, String propName) throws IntrospectionException, ClassNotFoundException
     {
@@ -151,14 +150,14 @@
 
     /**
      * Gets the Method that can be used to get a property value.
-     * 
+     *
      * @param className
      *            the name of the object.
      * @param propName
      *            the name of the property.
      * @return the getter.
-     * @throws ClassNotFoundException
-     * @throws IntrospectionException
+     * @throws ClassNotFoundException if the class specified could not be loaded
+     * @throws IntrospectionException if the property getter could not be called
      */
     public static Method getFieldGetter(String className, String propName) throws IntrospectionException, ClassNotFoundException
     {
@@ -167,7 +166,7 @@
 
     /**
      * Utility method for accessing the service implementation
-     * 
+     *
      * @return a IntakeService implementation instance
      */
     private static IntakeService getService()
diff --git a/src/java/org/apache/fulcrum/intake/IntakeServiceImpl.java b/src/java/org/apache/fulcrum/intake/IntakeServiceImpl.java
index c94ce56..a15e021 100644
--- a/src/java/org/apache/fulcrum/intake/IntakeServiceImpl.java
+++ b/src/java/org/apache/fulcrum/intake/IntakeServiceImpl.java
@@ -33,6 +33,7 @@
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
+import java.util.ListIterator;
 import java.util.Map;
 import java.util.Set;
 
@@ -548,8 +549,8 @@
      * @param propName
      *            the name of the property.
      * @return the setter.
-     * @throws ClassNotFoundException
-     * @throws IntrospectionException
+     * @throws ClassNotFoundException if the class specified could not be loaded
+     * @throws IntrospectionException if the property setter could not be called
      */
     @Override
     public Method getFieldSetter(String className, String propName)
@@ -607,8 +608,8 @@
      * @param propName
      *            the name of the property.
      * @return the getter.
-     * @throws ClassNotFoundException
-     * @throws IntrospectionException
+     * @throws ClassNotFoundException if the class specified could not be loaded
+     * @throws IntrospectionException if the property getter could not be called
      */
     @Override
     public Method getFieldGetter(String className, String propName)
@@ -797,9 +798,9 @@
 
             String groupPrefix = appData.getGroupPrefix();
 
-            for (int i = glist.size() - 1; i >= 0; i--)
+            for (ListIterator<Group> i = glist.listIterator(glist.size()); i.hasPrevious();)
             {
-                Group g = glist.get(i);
+                Group g = i.previous();
                 String groupName = g.getIntakeGroupName();
 
                 boolean registerUnqualified = registerGroup(groupName, g, appData, true);
diff --git a/src/java/org/apache/fulcrum/intake/Retrievable.java b/src/java/org/apache/fulcrum/intake/Retrievable.java
index 0f65b49..4cc2984 100644
--- a/src/java/org/apache/fulcrum/intake/Retrievable.java
+++ b/src/java/org/apache/fulcrum/intake/Retrievable.java
@@ -30,13 +30,18 @@
     /**
      * get an id that differentiates this object from others
      * of its class.
+     *
+     * @return the unique key identifying the object
      */
     String getQueryKey();
 
     /**
      * set an id that differentiates this object from others
      * of its class.
+     *
+     * @param key the identifying key
+     *
+     * @throws Exception if the key could not be set
      */
     void setQueryKey(String key) throws Exception;
-
 }
diff --git a/src/java/org/apache/fulcrum/intake/model/AppData.java b/src/java/org/apache/fulcrum/intake/model/AppData.java
index 02683bc..4a21b49 100644
--- a/src/java/org/apache/fulcrum/intake/model/AppData.java
+++ b/src/java/org/apache/fulcrum/intake/model/AppData.java
@@ -33,7 +33,7 @@
 /**
  * A class for holding application data structures.
  *
- * @author <a href="mailto:jmcnally@collab.net>John McNally</a>
+ * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
  * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
  * @author <a href="mailto:tv@apache.org">Thomas Vandahl</a>
  * @version $Id$
@@ -63,6 +63,7 @@
      * This method is used in the IntakeService to register all the
      * groups with and without prefix in the service.
      *
+     * @return the list of groups
      */
     public List<Group> getGroups()
     {
diff --git a/src/java/org/apache/fulcrum/intake/model/Field.java b/src/java/org/apache/fulcrum/intake/model/Field.java
index f1e6baf..f6af209 100644
--- a/src/java/org/apache/fulcrum/intake/model/Field.java
+++ b/src/java/org/apache/fulcrum/intake/model/Field.java
@@ -42,7 +42,7 @@
  * Base class for Intake generated input processing classes.
  *
  * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
- * @author <a href="mailto:dlr@finemaltcoding.com>Daniel Rall</a>
+ * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
  * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
  * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
  * @author <a href="mailto:jh@byteaction.de">J&uuml;rgen Hoffmann</a>
@@ -107,12 +107,6 @@
     /** Is this field always required?  This is only set through the XML file */
     private boolean alwaysRequired;
 
-    /**
-     * Value of the field if an error occurs while getting
-     * the value from the mapped object
-     */
-    private T onError;
-
     /** Default value of the field */
     protected T defaultValue;
 
@@ -183,8 +177,6 @@
      * @param group a <code>Group</code> value
      * @throws IntakeException indicates the validator was not valid or
      * could not be loaded.
-     * @throws SystemError only occurs is the Validation object does not
-     * extend InitableByConstraintMap
      */
     public Field(XmlField field, Group group) throws IntakeException
     {
@@ -415,6 +407,8 @@
 
     /**
      * Get the name of the object that takes this input
+     *
+     * @return the name of the mapped object
      */
     public String getMapToObject()
     {
@@ -517,6 +511,8 @@
      * Use in a hidden field assign a default value in the event the
      * field is absent from the query parameters.  Used to track checkboxes,
      * since they only show up if checked.
+     *
+     * @return the value if not in the request
      */
     public String getValueIfAbsent()
     {
@@ -575,6 +571,8 @@
      * used in building data entry forms and serve as a
      * user friendly description of the data contained in
      * the field.
+     *
+     * @param newDisplayName the new display name for the field
      */
     public void setDisplayName(String newDisplayName)
     {
@@ -593,6 +591,8 @@
 
     /**
      * Sets an error message.  The field is also marked as invalid.
+     *
+     * @param message the new error message
      */
     public void setMessage(String message)
     {
@@ -601,6 +601,8 @@
     }
 
     /**
+     * Set the internal flag that the field has been set
+     *
      * @param setFlag the setFlag to set
      */
     protected void setSet(boolean setFlag)
@@ -609,6 +611,8 @@
     }
 
     /**
+     * Set the internal flag that the field is valid
+     *
      * @param validFlag the validFlag to set
      */
     protected void setValid(boolean validFlag)
@@ -617,6 +621,8 @@
     }
 
     /**
+     * Set the internal flag that the field has been validated
+     *
      * @param validated the validated to set
      */
     protected void setValidated(boolean validated)
@@ -625,16 +631,9 @@
     }
 
     /**
-     * @deprecated Call validate() instead (with no parameters).
-     */
-    @Deprecated
-    protected boolean validate(ValueParser pp)
-    {
-        return validate();
-    }
-
-    /**
      * Compares request data with constraints and sets the valid flag.
+     *
+     * @return true if the validation succeeded
      */
     public boolean validate()
     {
@@ -757,7 +756,7 @@
      * be used as the initial value.
      *
      * @return an <code>Object</code> value
-     * @exception IntakeException indicates the value could not be
+     * @throws IntakeException indicates the value could not be
      * returned from the mapped object
      */
     public T getInitialValue() throws IntakeException
@@ -790,7 +789,8 @@
     /**
      * Get the value input by a user that will be validated.
      *
-     * @return an <code>Object</code> value
+     * @param <TT> the type of the test value
+     * @return an <code>TT</code> value
      */
     @SuppressWarnings("unchecked")
 	public <TT> TT getTestValue()
@@ -826,11 +826,6 @@
             val = getTestValue();
         }
 
-        if (val == null)
-        {
-            val = onError;
-        }
-
         return val;
     }
 
@@ -873,6 +868,8 @@
     /**
      * Loads the valid value from a bean
      *
+     * @param obj the object whose getter to call
+     *
      * @throws IntakeException indicates a problem during the execution of the
      * object's getter method
      */
@@ -913,6 +910,8 @@
     /**
      * Calls a setter method on obj, if this field has been set.
      *
+     * @param obj the object whose setter to call
+     *
      * @throws IntakeException indicates a problem during the execution of the
      * object's setter method
      */
@@ -1052,8 +1051,10 @@
 
     /**
      * Gets the display size of the field.  This is useful when
-     * building the HTML input tag.  If no displaySize was set,
+     * building the HTML input tag. If no displaySize was set,
      * an empty string is returned.
+     *
+     * @return the size information for this field
      */
     public String getDisplaySize()
     {
@@ -1063,7 +1064,9 @@
     /**
      * Gets the maximum size of the field.  This is useful when
      * building the HTML input tag.  The maxSize is set with the maxLength
-     * rule.  If this rule was not set, an empty string is returned.
+     * rule. If this rule was not set, an empty string is returned.
+     *
+     * @return the maximum size information of the field
      */
     public String getMaxSize()
     {
diff --git a/src/java/org/apache/fulcrum/intake/model/FieldAdapter.java b/src/java/org/apache/fulcrum/intake/model/FieldAdapter.java
index e875834..0c6440d 100644
--- a/src/java/org/apache/fulcrum/intake/model/FieldAdapter.java
+++ b/src/java/org/apache/fulcrum/intake/model/FieldAdapter.java
@@ -201,6 +201,7 @@
      * in the xml file.
      *
      * @param xmlField a <code>XmlField</code> value
+     * @param xmlGroup the group this field belongs to
      * @return a <code>Field</code> value
      * @throws IntakeException indicates that an unknown type was specified for a field.
      */
diff --git a/src/java/org/apache/fulcrum/intake/model/FileItemField.java b/src/java/org/apache/fulcrum/intake/model/FileItemField.java
index 66ea872..243d5ca 100644
--- a/src/java/org/apache/fulcrum/intake/model/FileItemField.java
+++ b/src/java/org/apache/fulcrum/intake/model/FileItemField.java
@@ -55,10 +55,10 @@
     /**
      * It is not possible to set the default value for this field type.
      * Calling this method with a non-null parameter will result in a
-     * TurbineRuntimeException
+     * IntakeRuntimeException
      *
      * @param prop Parameter for the default values
-     * @throws TurbineRuntimeException
+     * @throws IntakeRuntimeException if the parameter is not null
      */
     @Override
 	public void setDefaultValue(String prop)
@@ -76,10 +76,10 @@
     /**
      * It is not possible to set the empty value for this field type.
      * Calling this method with a non-null parameter will result in a
-     * TurbineRuntimeException
+     * IntakeRuntimeException
      *
      * @param prop Parameter for the empty values
-     * @throws TurbineRuntimeException
+     * @throws IntakeRuntimeException if the parameter is not null
      */
     @Override
 	public void setEmptyValue(String prop)
@@ -113,7 +113,7 @@
      *
      * @param vp a <code>ValueParser</code> value
      * @return a <code>Field</code> value
-     * @exception IntakeException if an error occurs
+     * @throws IntakeException if an error occurs
      */
     @Override
 	public Field<FileItem> init(ValueParser vp)
diff --git a/src/java/org/apache/fulcrum/intake/model/Group.java b/src/java/org/apache/fulcrum/intake/model/Group.java
index 554444d..39d875b 100644
--- a/src/java/org/apache/fulcrum/intake/model/Group.java
+++ b/src/java/org/apache/fulcrum/intake/model/Group.java
@@ -125,7 +125,7 @@
     /**
      * The object containing the request data
      */
-    private ValueParser pp;
+    private transient ValueParser pp;
 
     /**
      * A flag to help prevent duplicate hidden fields declaring this group.
@@ -155,6 +155,7 @@
      *
      * @param pp a <code>ValueParser</code> value
      * @return this Group
+     * @throws IntakeException if at least one field could not be initialized
      */
     public Group init(ValueParser pp) throws IntakeException
     {
@@ -165,8 +166,10 @@
      * Initializes the Group with parameters from RunData
      * corresponding to key.
      *
+     * @param key the group id
      * @param pp a <code>ValueParser</code> value
      * @return this Group
+     * @throws IntakeException if at least one field could not be initialized
      */
     public Group init(String key, ValueParser pp) throws IntakeException
     {
@@ -314,7 +317,7 @@
      *
      * @param pp a <code>ValueParser</code> value
      * @return an <code>ArrayList</code> value
-     * @exception IntakeException if an error occurs
+     * @throws IntakeException if an error occurs
      */
     public List<Group> getObjects(ValueParser pp) throws IntakeException
     {
@@ -332,8 +335,10 @@
     }
 
     /**
-     * Get the Field .
-     * @return Field.
+     * Get the Field
+     *
+     * @param fieldName the name of the field
+     * @return the named field
      * @throws IntakeException indicates the field could not be found.
      */
     public Field<?> get(String fieldName)
@@ -351,7 +356,7 @@
     }
 
     /**
-     * Get the list of Fields .
+     * Get the list of Fields.
      * @return list of Fields
      */
     public List<Field<?>> getFields()
@@ -362,7 +367,7 @@
     /**
      * Set a collection of fields for this group
      *
-     * @param fields the fields to set
+     * @param inputFields the fields to set
      */
     @XmlElement(name="field")
     @XmlJavaTypeAdapter(FieldAdapter.class)
@@ -447,6 +452,8 @@
      * test passes call setProperties.  Use this method when some data is
      * known to be invalid, but you still want to set the object properties
      * that are valid.
+     *
+     * @param obj the object to set the properties for
      */
     public void setValidProperties(Object obj)
     {
@@ -591,6 +598,8 @@
     /**
      * A xhtml valid hidden input field that notifies intake of the
      * group's presence.
+     *
+     * @param sb the string builder to append the HTML to
      */
     public void appendHtmlFormInput(StringBuilder sb)
     {
diff --git a/src/java/org/apache/fulcrum/intake/model/IntegerField.java b/src/java/org/apache/fulcrum/intake/model/IntegerField.java
index 8464b5e..a827a98 100644
--- a/src/java/org/apache/fulcrum/intake/model/IntegerField.java
+++ b/src/java/org/apache/fulcrum/intake/model/IntegerField.java
@@ -61,7 +61,7 @@
             return;
         }
 
-        defaultValue = new Integer(prop);
+        defaultValue = Integer.valueOf(prop);
     }
 
     /**
@@ -82,7 +82,7 @@
             return;
         }
 
-        emptyValue = new Integer(prop);
+        emptyValue = Integer.valueOf(prop);
     }
 
     /**
diff --git a/src/java/org/apache/fulcrum/intake/model/LongField.java b/src/java/org/apache/fulcrum/intake/model/LongField.java
index f979791..066d349 100644
--- a/src/java/org/apache/fulcrum/intake/model/LongField.java
+++ b/src/java/org/apache/fulcrum/intake/model/LongField.java
@@ -61,7 +61,7 @@
             return;
         }
 
-        defaultValue = new Long(prop);
+        defaultValue = Long.valueOf(prop);
     }
 
     /**
@@ -82,7 +82,7 @@
             return;
         }
 
-        emptyValue = new Long(prop);
+        emptyValue = Long.valueOf(prop);
     }
 
     /**
diff --git a/src/java/org/apache/fulcrum/intake/model/ShortField.java b/src/java/org/apache/fulcrum/intake/model/ShortField.java
index ab0d44f..5d23e7b 100644
--- a/src/java/org/apache/fulcrum/intake/model/ShortField.java
+++ b/src/java/org/apache/fulcrum/intake/model/ShortField.java
@@ -61,7 +61,7 @@
             return;
         }
 
-        defaultValue = new Short(prop);
+        defaultValue = Short.valueOf(prop);
     }
 
     /**
@@ -82,7 +82,7 @@
             return;
         }
 
-        emptyValue = new Short(prop);
+        emptyValue = Short.valueOf(prop);
     }
 
     /**
diff --git a/src/java/org/apache/fulcrum/intake/model/XmlField.java b/src/java/org/apache/fulcrum/intake/model/XmlField.java
index 72601b1..6c479e8 100644
--- a/src/java/org/apache/fulcrum/intake/model/XmlField.java
+++ b/src/java/org/apache/fulcrum/intake/model/XmlField.java
@@ -121,6 +121,8 @@
 
 	/**
 	 * Return Avalon logger
+	 *
+	 * @return the logger
 	 */
 	public Logger getLogger()
 	{
@@ -129,6 +131,8 @@
 
     /**
      * Get the name of the property
+     *
+     * @return the raw name of the property
      */
     public String getRawName()
     {
@@ -137,6 +141,8 @@
 
     /**
      * Get the name of the property
+     *
+     * @return the name of the property with underscores removed
      */
     public String getName()
     {
@@ -145,6 +151,8 @@
 
     /**
      * Get the display name of the property
+     *
+     * @return the display name of the property
      */
     public String getDisplayName()
     {
@@ -154,6 +162,8 @@
     /**
      * Gets the display size of the field.  This is
      * useful for constructing the HTML input tag.
+     *
+     * @return the display size for the field
      */
     public String getDisplaySize()
     {
@@ -162,6 +172,8 @@
 
     /**
      * Get the parameter key of the property
+     *
+     * @return the key of the property
      */
     public String getKey()
     {
@@ -170,6 +182,8 @@
 
     /**
      * Get the type of the property
+     *
+     * @return the type of the field
      */
     public String getType()
     {
@@ -177,7 +191,9 @@
     }
 
     /**
-     * can this field have several values?
+     * Can this field have several values?
+     *
+     * @return true if the field can have multiple values
      */
     public boolean isMultiValued()
     {
@@ -186,6 +202,8 @@
 
     /**
      * Get the name of the object that takes this input
+     *
+     * @return the name of the mapped object
      */
     public String getMapToObject()
     {
@@ -194,6 +212,8 @@
 
     /**
      * Get the property method that takes this input
+     *
+     * @return the property this field is mapped to
      */
     public String getMapToProperty()
     {
@@ -209,6 +229,8 @@
 
     /**
      * Get the className of the validator
+     *
+     * @return the validator class name
      */
     public String getValidator()
     {
@@ -237,6 +259,8 @@
 
     /**
      * Get the parent XmlGroup of the field
+     *
+     * @return the group this field belongs to
      */
     public Group getGroup()
     {
@@ -317,6 +341,8 @@
     /**
      * String representation of the column. This
      * is an xml representation.
+     *
+     * @return the value of this field as an XML representation
      */
     @Override
     public String toString()
diff --git a/src/java/org/apache/fulcrum/intake/validator/BigDecimalValidator.java b/src/java/org/apache/fulcrum/intake/validator/BigDecimalValidator.java
index b41f553..72b914a 100644
--- a/src/java/org/apache/fulcrum/intake/validator/BigDecimalValidator.java
+++ b/src/java/org/apache/fulcrum/intake/validator/BigDecimalValidator.java
@@ -30,6 +30,7 @@
  * listed in NumberValidator and DefaultValidator.
  *
  * <table>
+ * <caption>Validation rules</caption>
  * <tr><th>Name</th><th>Valid Values</th><th>Default Value</th></tr>
  * <tr><td>minValue</td><td>greater than BigDecimal minValue</td>
  * <td>&nbsp;</td></tr>
diff --git a/src/java/org/apache/fulcrum/intake/validator/BooleanValidator.java b/src/java/org/apache/fulcrum/intake/validator/BooleanValidator.java
index 7d42e91..3bd5191 100644
--- a/src/java/org/apache/fulcrum/intake/validator/BooleanValidator.java
+++ b/src/java/org/apache/fulcrum/intake/validator/BooleanValidator.java
@@ -76,7 +76,7 @@
      * in the constraints defined for this validator
      *
      * @param testValue a <code>String</code> to be tested
-     * @exception ValidationException containing an error message if the
+     * @throws ValidationException containing an error message if the
      * testValue did not pass the validation tests.
      */
     @Override
@@ -102,7 +102,8 @@
      * Parses a string value into a Boolean object.
      *
      * @param stringValue the value to parse
-     * @return a <code>Boolean</a> object
+     * @return a <code>Boolean</code> object
+     * @throws ParseException if the value cannot be parsed to a boolean
      */
     public Boolean parse(String stringValue)
             throws ParseException
diff --git a/src/java/org/apache/fulcrum/intake/validator/Constraint.java b/src/java/org/apache/fulcrum/intake/validator/Constraint.java
index ec5c2b8..331e8d3 100644
--- a/src/java/org/apache/fulcrum/intake/validator/Constraint.java
+++ b/src/java/org/apache/fulcrum/intake/validator/Constraint.java
@@ -36,16 +36,22 @@
 {
     /**
      * Get the name of the constraint.
+     *
+     * @return the constraint name
      */
     String getName();
 
     /**
      * Get the value of the constraint.
+     *
+     * @return the constraint value
      */
     String getValue();
 
     /**
      * Get the error message.
+     *
+     * @return the constraint error message
      */
     String getMessage();
 }
diff --git a/src/java/org/apache/fulcrum/intake/validator/DateRangeValidator.java b/src/java/org/apache/fulcrum/intake/validator/DateRangeValidator.java
index 4fa134a..7a5d220 100644
--- a/src/java/org/apache/fulcrum/intake/validator/DateRangeValidator.java
+++ b/src/java/org/apache/fulcrum/intake/validator/DateRangeValidator.java
@@ -34,6 +34,7 @@
  * Validates a DateString field in dependency on another DateString field.
  *
  * <table>
+ * <caption>Validation rules</caption>
  * <tr>
  *   <th>Name</th><th>Valid Values</th><th>Default Value</th>
  * </tr>
@@ -82,8 +83,8 @@
     /**
      * Constructor to use when initializing Object
      *
-     * @param paramMap
-     * @throws InvalidMaskException
+     * @param paramMap a map of parameters
+     * @throws InvalidMaskException one of the mask rules is invalid
      */
     @Override
 	public void init(Map<String, ? extends Constraint> paramMap)
@@ -162,7 +163,7 @@
      * in the constraints defined for this validator
      *
      * @param testField a <code>Field</code> to be tested
-     * @exception ValidationException containing an error message if the
+     * @throws ValidationException containing an error message if the
      * testValue did not pass the validation tests.
      */
     @Override
@@ -197,7 +198,7 @@
      * @param testValue a <code>String</code> to be tested
      * @param group the group this field belongs to
      *
-     * @exception ValidationException containing an error message if the
+     * @throws ValidationException containing an error message if the
      * testValue did not pass the validation tests.
      */
     public void assertValidity(final String testValue, final Group group)
diff --git a/src/java/org/apache/fulcrum/intake/validator/DateStringValidator.java b/src/java/org/apache/fulcrum/intake/validator/DateStringValidator.java
index 966e28c..6b24326 100644
--- a/src/java/org/apache/fulcrum/intake/validator/DateStringValidator.java
+++ b/src/java/org/apache/fulcrum/intake/validator/DateStringValidator.java
@@ -33,6 +33,7 @@
  * listed in DefaultValidator.
  *
  * <table>
+ * <caption>Validation rules</caption>
  * <tr><th>Name</th><th>Valid Values</th><th>Default Value</th></tr>
  * <tr><td>format</td><td>see SimpleDateFormat javadoc</td>
  * <td>&nbsp;</td></tr>
@@ -79,8 +80,8 @@
     /**
      * Constructor to use when initializing Object
      *
-     * @param paramMap
-     * @throws InvalidMaskException
+     * @param paramMap a map of parameters
+     * @throws InvalidMaskException one of the mask rules is invalid
      */
     @Override
 	public void init(Map<String, ? extends Constraint> paramMap)
@@ -127,7 +128,7 @@
      * in the constraints defined for this validator
      *
      * @param testValue a <code>String</code> to be tested
-     * @exception ValidationException containing an error message if the
+     * @throws ValidationException containing an error message if the
      * testValue did not pass the validation tests.
      */
     @Override
@@ -157,6 +158,8 @@
      * format that includes a 4 digit year, but that will parse the date using
      * a format that accepts 2 digit years.
      *
+     * @param s possibly a date string
+     * @return the date parsed
      * @throws ParseException indicates that the string could not be
      * parsed into a date.
      */
diff --git a/src/java/org/apache/fulcrum/intake/validator/DefaultValidator.java b/src/java/org/apache/fulcrum/intake/validator/DefaultValidator.java
index dcb3b31..dfd1171 100644
--- a/src/java/org/apache/fulcrum/intake/validator/DefaultValidator.java
+++ b/src/java/org/apache/fulcrum/intake/validator/DefaultValidator.java
@@ -31,6 +31,7 @@
  * constraints:
  *
  * <table>
+ * <caption>Validation rules</caption>
  * <tr><th>Name</th><th>Valid Values</th><th>Default Value</th></tr>
  * <tr><td>required</td><td>true|false</td><td>false</td></tr>
  * <tr><td>mask</td><td>regexp</td><td>&nbsp;</td></tr>
@@ -92,11 +93,11 @@
 
     /**
      * Extract the relevant parameters from the constraints listed
-     * in <rule> tags within the intake.xml file.
+     * in &lt;rule&gt; tags within the intake.xml file.
      *
      * @param paramMap a <code>Map</code> of <code>Rule</code>'s
      * containing constraints on the input.
-     * @exception InvalidMaskException An invalid mask was specified for one of the rules
+     * @throws InvalidMaskException An invalid mask was specified for one of the rules
      */
     @Override
 	public void init(Map<String, ? extends Constraint> paramMap)
@@ -155,7 +156,7 @@
      * in the constraints defined for this validator
      *
      * @param field a <code>Field</code> to be tested
-     * @exception ValidationException containing an error message if the
+     * @throws ValidationException containing an error message if the
      * testValue did not pass the validation tests.
      */
     @Override
@@ -186,6 +187,7 @@
      *
      * @deprecated use isValid(Field) instead
      */
+    @Deprecated
     @Override
 	public boolean isValid(String testValue)
     {
@@ -207,7 +209,7 @@
      * in the constraints defined for this validator
      *
      * @param testValue a <code>String</code> to be tested
-     * @exception ValidationException containing an error message if the
+     * @throws ValidationException containing an error message if the
      * testValue did not pass the validation tests.
      */
     @Override
diff --git a/src/java/org/apache/fulcrum/intake/validator/DoubleValidator.java b/src/java/org/apache/fulcrum/intake/validator/DoubleValidator.java
index e677b25..bbf22ae 100644
--- a/src/java/org/apache/fulcrum/intake/validator/DoubleValidator.java
+++ b/src/java/org/apache/fulcrum/intake/validator/DoubleValidator.java
@@ -28,6 +28,7 @@
  * listed in NumberValidator and DefaultValidator.
  *
  * <table>
+ * <caption>Validation rules</caption>
  * <tr><th>Name</th><th>Valid Values</th><th>Default Value</th></tr>
  * <tr><td>minValue</td><td>greater than Double.MIN_VALUE</td>
  * <td>&nbsp;</td></tr>
diff --git a/src/java/org/apache/fulcrum/intake/validator/FieldReference.java b/src/java/org/apache/fulcrum/intake/validator/FieldReference.java
index 390d4cb..10e35e1 100644
--- a/src/java/org/apache/fulcrum/intake/validator/FieldReference.java
+++ b/src/java/org/apache/fulcrum/intake/validator/FieldReference.java
@@ -30,6 +30,7 @@
  * comparisons are supported:
  *
  * <table>
+ * <caption>Validation rules</caption>
  * <tr>
  *   <th>Name</th><th>Valid Values</th><th>Default Value</th>
  * </tr>
@@ -188,7 +189,9 @@
      * @param value the parsed value of the related field
      * @param group the group the related field belongs to
      *
-     * @throws ValidationException
+     * @param <T> the field type
+     *
+     * @throws ValidationException if the validation against at least one related field fails
      */
     public static <T> void checkReferences(List<FieldReference> fieldReferences, CompareCallback<T> compareCallback,
             T value, Group group)
diff --git a/src/java/org/apache/fulcrum/intake/validator/FileValidator.java b/src/java/org/apache/fulcrum/intake/validator/FileValidator.java
index 7718f4c..6ebbbb9 100644
--- a/src/java/org/apache/fulcrum/intake/validator/FileValidator.java
+++ b/src/java/org/apache/fulcrum/intake/validator/FileValidator.java
@@ -48,7 +48,7 @@
      * in the constraints defined for this validator
      *
      * @param testValue a <code>FileItem</code> to be tested
-     * @exception ValidationException containing an error message if the
+     * @throws ValidationException containing an error message if the
      * testValue did not pass the validation tests.
      */
     public void assertValidity(FileItem testValue)
diff --git a/src/java/org/apache/fulcrum/intake/validator/FloatValidator.java b/src/java/org/apache/fulcrum/intake/validator/FloatValidator.java
index 578795d..97aa332 100644
--- a/src/java/org/apache/fulcrum/intake/validator/FloatValidator.java
+++ b/src/java/org/apache/fulcrum/intake/validator/FloatValidator.java
@@ -28,6 +28,7 @@
  * listed in NumberValidator and DefaultValidator.
  *
  * <table>
+ * <caption>Validation rules</caption>
  * <tr><th>Name</th><th>Valid Values</th><th>Default Value</th></tr>
  * <tr><td>minValue</td><td>greater than Float.MIN_VALUE</td>
  * <td>&nbsp;</td></tr>
diff --git a/src/java/org/apache/fulcrum/intake/validator/InitableByConstraintMap.java b/src/java/org/apache/fulcrum/intake/validator/InitableByConstraintMap.java
index 620ca25..cefdb74 100644
--- a/src/java/org/apache/fulcrum/intake/validator/InitableByConstraintMap.java
+++ b/src/java/org/apache/fulcrum/intake/validator/InitableByConstraintMap.java
@@ -32,11 +32,11 @@
 {
     /**
      * Extract the relevant parameters from the constraints listed
-     * in <input-param> tags within the intake.xml file.
+     * in &lt;input-param&gt; tags within the intake.xml file.
      *
      * @param inputParameters a <code>Map</code> of <code>Constraint</code>'s
      * containing rules and error messages.
-     * @exception InvalidMaskException one of the mask rules is invalid
+     * @throws InvalidMaskException one of the mask rules is invalid
      */
     void init(Map<String, ? extends Constraint> inputParameters)
             throws InvalidMaskException;
diff --git a/src/java/org/apache/fulcrum/intake/validator/IntegerRangeValidator.java b/src/java/org/apache/fulcrum/intake/validator/IntegerRangeValidator.java
index cb1d19a..2aa3fdd 100644
--- a/src/java/org/apache/fulcrum/intake/validator/IntegerRangeValidator.java
+++ b/src/java/org/apache/fulcrum/intake/validator/IntegerRangeValidator.java
@@ -33,6 +33,7 @@
  * Validates an int field in dependency on another int field.
  *
  * <table>
+ * <caption>Validation rules</caption>
  * <tr>
  *   <th>Name</th><th>Valid Values</th><th>Default Value</th>
  * </tr>
@@ -81,8 +82,8 @@
     /**
      * Constructor to use when initializing Object
      *
-     * @param paramMap
-     * @throws InvalidMaskException
+     * @param paramMap a map of parameters
+     * @throws InvalidMaskException one of the mask rules is invalid
      */
     @Override
 	public void init(Map<String, ? extends Constraint> paramMap)
@@ -161,7 +162,7 @@
      * in the constraints defined for this validator
      *
      * @param testField a <code>Field</code> to be tested
-     * @exception ValidationException containing an error message if the
+     * @throws ValidationException containing an error message if the
      * testValue did not pass the validation tests.
      */
     @Override
@@ -198,7 +199,7 @@
      * @param group the group this field belongs to
      * @param locale the locale for this field
      *
-     * @exception ValidationException containing an error message if the
+     * @throws ValidationException containing an error message if the
      * testValue did not pass the validation tests.
      */
     public void assertValidity(final String testValue, final Group group, final Locale locale)
diff --git a/src/java/org/apache/fulcrum/intake/validator/IntegerValidator.java b/src/java/org/apache/fulcrum/intake/validator/IntegerValidator.java
index f9a0355..0dac034 100644
--- a/src/java/org/apache/fulcrum/intake/validator/IntegerValidator.java
+++ b/src/java/org/apache/fulcrum/intake/validator/IntegerValidator.java
@@ -26,6 +26,7 @@
  * listed in NumberValidator and DefaultValidator.
  *
  * <table>
+ * <caption>Validation rules</caption>
  * <tr><th>Name</th><th>Valid Values</th><th>Default Value</th></tr>
  * <tr><td>minValue</td><td>greater than Integer.MIN_VALUE</td>
  * <td>&nbsp;</td></tr>
diff --git a/src/java/org/apache/fulcrum/intake/validator/LongValidator.java b/src/java/org/apache/fulcrum/intake/validator/LongValidator.java
index 3b83c9b..e195cb5 100644
--- a/src/java/org/apache/fulcrum/intake/validator/LongValidator.java
+++ b/src/java/org/apache/fulcrum/intake/validator/LongValidator.java
@@ -26,6 +26,7 @@
  * listed in NumberValidator and DefaultValidator.
  *
  * <table>
+ * <caption>Validation rules</caption>
  * <tr><th>Name</th><th>Valid Values</th><th>Default Value</th></tr>
  * <tr><td>minValue</td><td>greater than Long.MIN_VALUE</td>
  * <td>&nbsp;</td></tr>
diff --git a/src/java/org/apache/fulcrum/intake/validator/NumberValidator.java b/src/java/org/apache/fulcrum/intake/validator/NumberValidator.java
index df0ad81..618f3f6 100644
--- a/src/java/org/apache/fulcrum/intake/validator/NumberValidator.java
+++ b/src/java/org/apache/fulcrum/intake/validator/NumberValidator.java
@@ -30,6 +30,7 @@
  * listed in DefaultValidator.
  *
  * <table>
+ * <caption>Validation rules</caption>
  * <tr><th>Name</th><th>Valid Values</th><th>Default Value</th></tr>
  * <tr><td>minValue</td><td>greater than BigDecimal.MIN_VALUE</td>
  * <td>&nbsp;</td></tr>
@@ -69,11 +70,11 @@
 
     /**
      * Extract the relevant parameters from the constraints listed
-     * in <rule> tags within the intake.xml file.
+     * in &lt;rule&gt; tags within the intake.xml file.
      *
      * @param paramMap a <code>Map</code> of <code>rule</code>'s
      * containing constraints on the input.
-     * @exception InvalidMaskException an invalid mask was specified
+     * @throws InvalidMaskException an invalid mask was specified
      */
     @Override
 	public void init(Map<String, ? extends Constraint> paramMap)
@@ -136,7 +137,7 @@
      * in the constraints defined for this validator
      *
      * @param field a <code>Field</code> to be tested
-     * @exception ValidationException containing an error message if the
+     * @throws ValidationException containing an error message if the
      * testValue did not pass the validation tests.
      */
     @Override
@@ -165,7 +166,7 @@
      *
      * @param testValue a <code>String</code> to be tested
      * @param locale the Locale of the associated field
-     * @exception ValidationException containing an error message if the
+     * @throws ValidationException containing an error message if the
      * testValue did not pass the validation tests.
      */
     public void assertValidity(String testValue, Locale locale) throws ValidationException
diff --git a/src/java/org/apache/fulcrum/intake/validator/ShortValidator.java b/src/java/org/apache/fulcrum/intake/validator/ShortValidator.java
index f146736..63f478b 100644
--- a/src/java/org/apache/fulcrum/intake/validator/ShortValidator.java
+++ b/src/java/org/apache/fulcrum/intake/validator/ShortValidator.java
@@ -26,6 +26,7 @@
  * listed in NumberValidator and DefaultValidator.
  *
  * <table>
+ * <caption>Validation rules</caption>
  * <tr><th>Name</th><th>Valid Values</th><th>Default Value</th></tr>
  * <tr><td>minValue</td><td>greater than Short.MIN_VALUE</td>
  * <td>&nbsp;</td></tr>
diff --git a/src/java/org/apache/fulcrum/intake/validator/StringValidator.java b/src/java/org/apache/fulcrum/intake/validator/StringValidator.java
index 68c4d7b..5fc086c 100644
--- a/src/java/org/apache/fulcrum/intake/validator/StringValidator.java
+++ b/src/java/org/apache/fulcrum/intake/validator/StringValidator.java
@@ -29,6 +29,7 @@
  * A validator that will compare a testValue against the following
  * constraints:
  * <table>
+ * <caption>Validation rules</caption>
  * <tr><th>Name</th><th>Valid Values</th><th>Default Value</th></tr>
  * <tr><td>required</td><td>true|false</td><td>false</td></tr>
  * <tr><td>mask</td><td>regexp</td><td>&nbsp;</td></tr>
@@ -67,11 +68,11 @@
 
     /**
      * Extract the relevant parameters from the constraints listed
-     * in <rule> tags within the intake.xml file.
+     * in &lt;rule&gt; tags within the intake.xml file.
      *
      * @param paramMap a <code>Map</code> of <code>Rule</code>'s
      * containing constraints on the input.
-     * @exception InvalidMaskException An invalid mask was specified for one of the rules
+     * @throws InvalidMaskException An invalid mask was specified for one of the rules
      */
     @Override
 	public void init(Map<String, ? extends Constraint> paramMap)
@@ -94,7 +95,7 @@
      * in the constraints defined for this validator
      *
      * @param testValue a <code>String</code> to be tested
-     * @exception ValidationException containing an error message if the
+     * @throws ValidationException containing an error message if the
      * testValue did not pass the validation tests.
      */
     @Override
diff --git a/src/java/org/apache/fulcrum/intake/validator/Validator.java b/src/java/org/apache/fulcrum/intake/validator/Validator.java
index 3784739..fb2b6ea 100644
--- a/src/java/org/apache/fulcrum/intake/validator/Validator.java
+++ b/src/java/org/apache/fulcrum/intake/validator/Validator.java
@@ -71,7 +71,7 @@
      * in the constraints defined for this validator
      *
      * @param field a <code>Field</code> to be tested
-     * @exception ValidationException containing an error message if the
+     * @throws ValidationException containing an error message if the
      * testValue did not pass the validation tests.
      */
     void assertValidity(Field<T> field)
@@ -93,7 +93,7 @@
      * in the constraints defined for this validator
      *
      * @param testValue a <code>String</code> to be tested
-     * @exception ValidationException containing an error message if the
+     * @throws ValidationException containing an error message if the
      * testValue did not pass the validation tests.
      */
     void assertValidity(String testValue)
diff --git a/src/test/org/apache/fulcrum/intake/test/AnotherForm.java b/src/test/org/apache/fulcrum/intake/test/AnotherForm.java
index 935814b..2e3762e 100644
--- a/src/test/org/apache/fulcrum/intake/test/AnotherForm.java
+++ b/src/test/org/apache/fulcrum/intake/test/AnotherForm.java
@@ -1,6 +1,5 @@
 package org.apache.fulcrum.intake.test;
 
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -20,28 +19,31 @@
  * under the License.
  */
 
-
 /**
  * Test form for Intake
  *
  * @author <a href="mailto:epugh@upstate.com">epugh@upstate.com</a>
  * @version $Id$
  */
-public class AnotherForm {
+public class AnotherForm
+{
 
-  private String username;
-  /**
-   * @return
-   */
-  public String getUsername() {
-    return username;
-  }
+    private String username;
 
-  /**
-   * @param username
-   */
-  public void setUsername(String username) {
-    this.username = username;
-  }
+    /**
+     * @return the user name
+     */
+    public String getUsername()
+    {
+        return username;
+    }
+
+    /**
+     * @param username
+     */
+    public void setUsername(String username)
+    {
+        this.username = username;
+    }
 
 }
diff --git a/src/test/org/apache/fulcrum/intake/test/MyField.java b/src/test/org/apache/fulcrum/intake/test/MyField.java
index 6038a53..9251cda 100644
--- a/src/test/org/apache/fulcrum/intake/test/MyField.java
+++ b/src/test/org/apache/fulcrum/intake/test/MyField.java
@@ -26,6 +26,9 @@
 public class MyField extends StringField
 {
 
+    /** Serial version */
+    private static final long serialVersionUID = 1L;
+
     public MyField(XmlField field, Group group) throws IntakeException
     {
         super(field, group);
