diff --git a/src/main/java/org/apache/hadoop/mrunit/MapDriverBase.java b/src/main/java/org/apache/hadoop/mrunit/MapDriverBase.java
index 5dc62c7..8e30d61 100644
--- a/src/main/java/org/apache/hadoop/mrunit/MapDriverBase.java
+++ b/src/main/java/org/apache/hadoop/mrunit/MapDriverBase.java
@@ -56,8 +56,8 @@
    * 
    * @param key
    * @deprecated MRUNIT-64. Moved to list implementation to support multiple
-   *             input (k, v)*. Replaced by {@link #setInput()},
-   *             {@link #addInput()}, and {@link #addAll()}
+   *             input (k, v)*. Replaced by {@link #setInput},
+   *             {@link #addInput}, and {@link #addAll}
    */
   @Deprecated
   public void setInputKey(final K1 key) {
@@ -73,8 +73,8 @@
    * 
    * @param val
    * @deprecated MRUNIT-64. Moved to list implementation to support multiple
-   *             input (k, v)*. Replaced by {@link #setInput()},
-   *             {@link #addInput()}, and {@link #addAll()}
+   *             input (k, v)*. Replaced by {@link #setInput},
+   *             {@link #addInput}, and {@link #addAll}
    */
   @Deprecated
   public void setInputValue(final V1 val) {
@@ -174,8 +174,8 @@
    * 
    * @return this
    * @deprecated MRUNIT-64. Moved to list implementation to support multiple
-   *             input (k, v)*. Replaced by {@link #withInput()} and
-   *             {@link #withAll()}
+   *             input (k, v)*. Replaced by {@link #withInput} and
+   *             {@link #withAll}
    */
   @Deprecated
   public T withInputKey(final K1 key) {
@@ -189,8 +189,8 @@
    * @param val
    * @return this
    * @deprecated MRUNIT-64. Moved to list implementation to support multiple
-   *             input (k, v)*. Replaced by {@link #withInput()} and
-   *             {@link #withAll()}
+   *             input (k, v)*. Replaced by {@link #withInput} and
+   *             {@link #withAll}
    */
   @Deprecated
   public T withInputValue(final V1 val) {
diff --git a/src/main/java/org/apache/hadoop/mrunit/MapReduceDriverBase.java b/src/main/java/org/apache/hadoop/mrunit/MapReduceDriverBase.java
index eb0503b..c09abc8 100644
--- a/src/main/java/org/apache/hadoop/mrunit/MapReduceDriverBase.java
+++ b/src/main/java/org/apache/hadoop/mrunit/MapReduceDriverBase.java
@@ -184,7 +184,7 @@
   /**
    * @param mapInputPath
    *       The Path object which will be given to the mapper
-   * @return
+   * @return this
    */
   public final T withMapInputPath(Path mapInputPath) {
     setMapInputPath(mapInputPath);
diff --git a/src/main/java/org/apache/hadoop/mrunit/PipelineMapReduceDriver.java b/src/main/java/org/apache/hadoop/mrunit/PipelineMapReduceDriver.java
index 49d6dfa..cc31ff0 100644
--- a/src/main/java/org/apache/hadoop/mrunit/PipelineMapReduceDriver.java
+++ b/src/main/java/org/apache/hadoop/mrunit/PipelineMapReduceDriver.java
@@ -276,7 +276,7 @@
   /**
    * @param mapInputPath
    *       The Path object which will be given to the mapper
-   * @return
+   * @return this
    */
   public final PipelineMapReduceDriver<K1, V1, K2, V2> withMapInputPath(Path mapInputPath) {
     setMapInputPath(mapInputPath);
diff --git a/src/main/java/org/apache/hadoop/mrunit/ReduceDriverBase.java b/src/main/java/org/apache/hadoop/mrunit/ReduceDriverBase.java
index b1bb5d3..86c46eb 100644
--- a/src/main/java/org/apache/hadoop/mrunit/ReduceDriverBase.java
+++ b/src/main/java/org/apache/hadoop/mrunit/ReduceDriverBase.java
@@ -82,8 +82,8 @@
    * Sets the input key to send to the Reducer
    * 
    * @deprecated MRUNIT-64. Moved to list implementation to support multiple
-   *             input (k, v*)*. Replaced by {@link #setInput()},
-   *             {@link #addInput()}, and {@link #addAll()}
+   *             input (k, v*)*. Replaced by {@link #setInput},
+   *             {@link #addInput}, and {@link #addAll}
    */
   @Deprecated
   public void setInputKey(final K1 key) {
@@ -95,8 +95,8 @@
    * 
    * @param val
    * @deprecated MRUNIT-64. Moved to list implementation to support multiple
-   *             input (k, v*)*. Replaced by {@link #setInput()},
-   *             {@link #addInput()}, and {@link #addAll()}
+   *             input (k, v*)*. Replaced by {@link #setInput},
+   *             {@link #addInput}, and {@link #addAll}
    */
   @Deprecated
   public void addInputValue(final V1 val) {
@@ -108,8 +108,8 @@
    * 
    * @param values
    * @deprecated MRUNIT-64. Moved to list implementation to support multiple
-   *             input (k, v*)*. Replaced by {@link #setInput()},
-   *             {@link #addInput()}, and {@link #addAll()}
+   *             input (k, v*)*. Replaced by {@link #setInput},
+   *             {@link #addInput}, and {@link #addAll}
    */
   @Deprecated
   public void setInputValues(final List<V1> values) {
@@ -122,8 +122,8 @@
    * 
    * @param values
    * @deprecated MRUNIT-64. Moved to list implementation to support multiple
-   *             input (k, v*)*. Replaced by {@link #setInput()},
-   *             {@link #addInput()}, and {@link #addAll()}
+   *             input (k, v*)*. Replaced by {@link #setInput},
+   *             {@link #addInput}, and {@link #addAll}
    */
   @Deprecated
   public void addInputValues(final List<V1> values) {
diff --git a/src/main/java/org/apache/hadoop/mrunit/TestDriver.java b/src/main/java/org/apache/hadoop/mrunit/TestDriver.java
index 06e837a..5c43176 100644
--- a/src/main/java/org/apache/hadoop/mrunit/TestDriver.java
+++ b/src/main/java/org/apache/hadoop/mrunit/TestDriver.java
@@ -238,7 +238,7 @@
    *          Enumeration based counter
    * @param expectedValue
    *          Expected value
-   * @return
+   * @return this
    */
   public T withCounter(final Enum<?> e,
       final long expectedValue) {
@@ -255,7 +255,7 @@
    *          Counter name
    * @param expectedValue
    *          Expected value
-   * @return
+   * @return this
    */
   public T withCounter(final String group,
       final String name, final long expectedValue) {
@@ -485,7 +485,7 @@
 
   /**
    * Adds an archive to be put on the distributed cache.
-   * @param file uri of the archive
+   * @param archive uri of the archive
    * @return the driver
    */
   public T withCacheArchive(URI archive) {
@@ -639,7 +639,7 @@
    * Split "key \t val" into Pair(Text(key), Text(val))
    *
    * @param tabSeparatedPair
-   * @return
+   * @return (k,v)
    */
   public static Pair<Text, Text> parseTabbedPair(final String tabSeparatedPair) {
     return StringUtils.parseTabbedPair(tabSeparatedPair);
@@ -1113,7 +1113,7 @@
    * @param namedOutput
    * @param key
    * @param value
-   * @return
+   * @return this
    */
   public <K extends Comparable, V extends Comparable> T withMultiOutput(final String namedOutput, final K key, final V value) {
     addMultiOutput(namedOutput, key, value);
@@ -1125,7 +1125,7 @@
    *
    * @param namedOutput
    * @param outputRecord
-   * @return
+   * @return this
    */
   public <K, V> T withMultiOutput(String namedOutput,
       final Pair<K, V> outputRecord) {
diff --git a/src/main/java/org/apache/hadoop/mrunit/mapreduce/ReduceDriver.java b/src/main/java/org/apache/hadoop/mrunit/mapreduce/ReduceDriver.java
index 50fb833..7b38391 100644
--- a/src/main/java/org/apache/hadoop/mrunit/mapreduce/ReduceDriver.java
+++ b/src/main/java/org/apache/hadoop/mrunit/mapreduce/ReduceDriver.java
@@ -91,10 +91,7 @@
   /**
    * Add input (K*, V*) to send to the Reducer
    *
-   * @param key
-   *          The key too add
-   * @param values
-   *          The value to add
+   * @param input
    */
   public void addInput(final KeyValueReuseList<K1, V1> input) {
     groupedInputs.add(input.clone(getConfiguration()));
diff --git a/src/main/java/org/apache/hadoop/mrunit/mapreduce/ReduceFeeder.java b/src/main/java/org/apache/hadoop/mrunit/mapreduce/ReduceFeeder.java
index c55c624..1ea0608 100644
--- a/src/main/java/org/apache/hadoop/mrunit/mapreduce/ReduceFeeder.java
+++ b/src/main/java/org/apache/hadoop/mrunit/mapreduce/ReduceFeeder.java
@@ -153,7 +153,8 @@
   /**
    * This method takes a (k, v*) input and return a (k*, v*) where k have been duplicated.
    *
-   * @param input The key values pair with one key for multiple values
+   * @param key the key for all the values
+   * @param values multiples values for the same key
    * @return Reducer input compatible with the new API
    */
   public KeyValueReuseList<K, V> updateInput(final K key, List<V> values){
