diff --git a/src/main/java/org/apache/maven/shared/artifact/filter/ScopeArtifactFilter.java b/src/main/java/org/apache/maven/shared/artifact/filter/ScopeArtifactFilter.java
index b1fc2c2..1a80c67 100644
--- a/src/main/java/org/apache/maven/shared/artifact/filter/ScopeArtifactFilter.java
+++ b/src/main/java/org/apache/maven/shared/artifact/filter/ScopeArtifactFilter.java
@@ -28,10 +28,10 @@
 import org.codehaus.plexus.logging.Logger;
 
 /**
- * {@link ArtifactFilter} implementation that selects artifacts based on their
- * scopes.
- * <br/>
- * <b>NOTE:</b> None of the fine-grained scopes imply other scopes when enabled;
+ * <p>
+ * {@link ArtifactFilter} implementation that selects artifacts based on their scopes.
+ * </p>
+ * <strong>NOTE:</strong> None of the fine-grained scopes imply other scopes when enabled;
  * when fine-grained scope control is used, each scope must be enabled separately,
  * UNLESS the corresponding XXXWithImplications() method is used to enable that
  * scope.
@@ -79,6 +79,8 @@
      * Constructor that uses the implied nature of Maven scopes to determine which
      * artifacts to include. For instance, 'test' scope implies compile, provided, and runtime,
      * while 'runtime' scope implies only compile.
+     * 
+     * @param scope the scope
      */
     public ScopeArtifactFilter( String scope )
     {
@@ -327,6 +329,9 @@
      *   <li>provided</li>
      *   <li>compile</li>
      * </ul>
+     *
+     * @param enabled whether specified scopes should be included
+     * @return this instance 
      */
     public ScopeArtifactFilter setIncludeCompileScopeWithImplications( boolean enabled )
     {
@@ -344,6 +349,9 @@
      *   <li>compile</li>
      *   <li>runtime</li>
      * </ul>
+     *
+     * @param enabled whether specified scopes should be included
+     * @return this instance 
      */
     public ScopeArtifactFilter setIncludeRuntimeScopeWithImplications( boolean enabled )
     {
@@ -363,6 +371,9 @@
      *   <li>runtime</li>
      *   <li>test</li>
      * </ul>
+     *
+     * @param enabled whether specified scopes should be included
+     * @return this instance 
      */
     public ScopeArtifactFilter setIncludeTestScopeWithImplications( boolean enabled )
     {
@@ -377,6 +388,9 @@
     
     /**
      * Determine whether artifacts that have a null scope are included or excluded.
+     *
+     * @param enable whether null-scope should be included
+     * @return this instance 
      */
     public ScopeArtifactFilter setIncludeNullScope( boolean enable )
     {
@@ -387,6 +401,8 @@
     
     /**
      * Reset hit counts and tracking of filtered artifacts, BUT NOT ENABLED SCOPES.
+     *
+     * @return this instance 
      */
     public ScopeArtifactFilter reset()
     {
diff --git a/src/main/java/org/apache/maven/shared/artifact/filter/collection/AbstractArtifactsFilter.java b/src/main/java/org/apache/maven/shared/artifact/filter/collection/AbstractArtifactsFilter.java
index 34935a3..d7d1403 100644
--- a/src/main/java/org/apache/maven/shared/artifact/filter/collection/AbstractArtifactsFilter.java
+++ b/src/main/java/org/apache/maven/shared/artifact/filter/collection/AbstractArtifactsFilter.java
@@ -33,7 +33,7 @@
     /**
      * @author <a href="mailto:brianf@apache.org">Brian Fox</a>
      * @version $Id$
-     * @throws ArtifactFilterException 
+     * @throws ArtifactFilterException when filtering fails
      */
     public boolean isArtifactIncluded( Artifact artifact )
         throws ArtifactFilterException
diff --git a/src/main/java/org/apache/maven/shared/artifact/filter/collection/ArtifactIdFilter.java b/src/main/java/org/apache/maven/shared/artifact/filter/collection/ArtifactIdFilter.java
index c5ef201..c8f365a 100644
--- a/src/main/java/org/apache/maven/shared/artifact/filter/collection/ArtifactIdFilter.java
+++ b/src/main/java/org/apache/maven/shared/artifact/filter/collection/ArtifactIdFilter.java
@@ -25,7 +25,6 @@
  * Filter on ArtifactId name
  * 
  * @author clove
- * @see org.apache.maven.plugin.dependency.utils.filters.AbstractArtifactFeatureFilter
  * @since 2.0-alpha-2
  * @version $Id$
  */
@@ -35,14 +34,15 @@
     /**
      * Will setup super with 'ArtifactId' as the filterType
      * 
-     * @param include
-     * @param exclude
+     * @param include comma separated list of artifactIds to include, may be {@code null}
+     * @param exclude comma separated list of artifactIds to exclude, may be {@code null}
      */
     public ArtifactIdFilter( String include, String exclude )
     {
         super( include, exclude );
     }
 
+    @Override
     protected String getArtifactFeature( Artifact artifact )
     {
         return artifact.getArtifactId();
diff --git a/src/main/java/org/apache/maven/shared/artifact/filter/collection/ArtifactTransitivityFilter.java b/src/main/java/org/apache/maven/shared/artifact/filter/collection/ArtifactTransitivityFilter.java
index 1030a9b..f409503 100644
--- a/src/main/java/org/apache/maven/shared/artifact/filter/collection/ArtifactTransitivityFilter.java
+++ b/src/main/java/org/apache/maven/shared/artifact/filter/collection/ArtifactTransitivityFilter.java
@@ -48,9 +48,10 @@
     private Set<String> transitiveArtifacts;
 
     /**
+     * <p>
      * Use {@link org.apache.maven.execution.MavenSession#getProjectBuildingRequest()} to get the buildingRequest.
      * The projectBuilder should be resolved with CDI.
-     * <p/>
+     * </p>
      * <pre>
      *   // For Mojo
      *   &#64;Component
diff --git a/src/main/java/org/apache/maven/shared/artifact/filter/collection/FilterArtifacts.java b/src/main/java/org/apache/maven/shared/artifact/filter/collection/FilterArtifacts.java
index fb98184..8cb8047 100644
--- a/src/main/java/org/apache/maven/shared/artifact/filter/collection/FilterArtifacts.java
+++ b/src/main/java/org/apache/maven/shared/artifact/filter/collection/FilterArtifacts.java
@@ -67,8 +67,8 @@
      * Inserts the specified element at the specified position in this list. Shifts the element currently at that
      * position (if any) and any subsequent elements to the right (adds one to their indices).
      * 
-     * @param index index at which the specified element is to be inserted.
-     * @param element element to be inserted.
+     * @param index at which index the specified filter is to be inserted.
+     * @param filter the filter to be inserted.
      * @throws IndexOutOfBoundsException if index is out of range <tt>(index &lt; 0 || index &gt; size())</tt>.
      */
     public void addFilter( int index, ArtifactsFilter filter )
@@ -101,7 +101,7 @@
     }
 
     /**
-     * @return Returns the filters.
+     * @return the filters.
      */
     public List<ArtifactsFilter> getFilters()
     {
diff --git a/src/main/java/org/apache/maven/shared/artifact/filter/collection/GroupIdFilter.java b/src/main/java/org/apache/maven/shared/artifact/filter/collection/GroupIdFilter.java
index 4c42469..a12ddc5 100644
--- a/src/main/java/org/apache/maven/shared/artifact/filter/collection/GroupIdFilter.java
+++ b/src/main/java/org/apache/maven/shared/artifact/filter/collection/GroupIdFilter.java
@@ -25,7 +25,6 @@
  * Filter on GroupId Name.
  * 
  * @author clove
- * @see org.apache.maven.plugin.dependency.utils.filters.AbstractArtifactFeatureFilter
  * @since 2.0
  * @version $Id$
  */
@@ -36,30 +35,21 @@
     /**
      * Construction will setup the super call with a filtertype of 'GroupId'
      * 
-     * @param include
-     * @param exclude
+     * @param include comma separated list of groupIds to include, may be {@code null}
+     * @param exclude comma separated list of groupIds to exclude, may be {@code null}
      */
     public GroupIdFilter( String include, String exclude )
     {
         super( include, exclude );
     }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.maven.plugin.dependency.utils.filters.AbstractArtifactFeatureFilter#getArtifactFeature(org.apache.maven.artifact.Artifact)
-     */
+    @Override
     protected String getArtifactFeature( Artifact artifact )
     {
         return artifact.getGroupId();
     }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.maven.plugin.dependency.utils.filters.AbstractArtifactFeatureFilter#compareFeatures(String,String)
-     */
-
+    @Override
     protected boolean compareFeatures( String lhs, String rhs )
     {
         return lhs.startsWith( rhs );
diff --git a/src/main/java/org/apache/maven/shared/artifact/filter/collection/ScopeFilter.java b/src/main/java/org/apache/maven/shared/artifact/filter/collection/ScopeFilter.java
index 05ce404..be2cc09 100644
--- a/src/main/java/org/apache/maven/shared/artifact/filter/collection/ScopeFilter.java
+++ b/src/main/java/org/apache/maven/shared/artifact/filter/collection/ScopeFilter.java
@@ -49,11 +49,11 @@
      * This function determines if filtering needs to be performed. Excludes are
      * ignored if Includes are used.
      * 
-     * @param dependencies
-     *            the set of dependencies to filter.
+     * @param artifacts
+     *            the set of artifacts to filter.
      * 
-     * @return a Set of filtered dependencies.
-     * @throws ArtifactFilterException
+     * @return a Set of filtered artifacts.
+     * @throws ArtifactFilterException when there's an invalid included scope
      */
     public Set<Artifact> filter( Set<Artifact> artifacts )
         throws ArtifactFilterException
@@ -160,7 +160,7 @@
     }
 
     /**
-     * @param includeScope
+     * @param scope
      *            The includeScope to set.
      */
     public void setIncludeScope( String scope )
@@ -177,12 +177,12 @@
     }
 
     /**
-     * @param excludeScope
+     * @param scope
      *            The excludeScope to set.
      */
-    public void setExcludeScope( String excludeScope )
+    public void setExcludeScope( String scope )
     {
-        this.excludeScope = excludeScope;
+        this.excludeScope = scope;
     }
 
 }
diff --git a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/ExclusionsFilter.java b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/ExclusionsFilter.java
index 92385f9..d43d7a0 100644
--- a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/ExclusionsFilter.java
+++ b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/ExclusionsFilter.java
@@ -40,7 +40,7 @@
      * The default constructor specifying a collection of keys which must be excluded. 
      * 
      * @param excludes the keys to exclude, may not be {@code null}
-     * @see Artifact#getDependencyConflictId()
+     * @see org.apache.maven.artifact.Artifact#getDependencyConflictId()
      */
     public ExclusionsFilter( Collection<String> excludes )
     {
diff --git a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/ScopeFilter.java b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/ScopeFilter.java
index 67ac41b..8802229 100644
--- a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/ScopeFilter.java
+++ b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/ScopeFilter.java
@@ -24,7 +24,7 @@
 import java.util.Collections;
 
 /**
- * Filter based on scope. <em>Note:<em> There's no logic for inherited scoped
+ * Filter based on scope. <strong>Note:</strong> There's no logic for inherited scoped
  * 
  * @author Robert Scholte
  * @since 3.0
@@ -40,8 +40,8 @@
 
     /**
      * 
-     * @param included specific scopes to include or {@null} to include all
-     * @param excluded specific scopes to exclude or {@null} to exclude none
+     * @param included specific scopes to include or {@code null} to include all
+     * @param excluded specific scopes to exclude or {@code null} to exclude none
      */
     public ScopeFilter( Collection<String> included, Collection<String> excluded )
     {
diff --git a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/TransformableFilter.java b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/TransformableFilter.java
index 18cd50c..1b75cb1 100644
--- a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/TransformableFilter.java
+++ b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/TransformableFilter.java
@@ -37,6 +37,7 @@
      *   }
      * </pre>
      * 
+     * @param <T> the interface of the tool specific filter
      * @param transformer the tool specific transformer, may not be {@code null}
      * @return the transformed value, never {@code null}
      */
