diff --git a/pom.xml b/pom.xml
index 8d9586b..e3977ed 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,7 @@
   <parent>
     <artifactId>maven-shared-components</artifactId>
     <groupId>org.apache.maven.shared</groupId>
-    <version>20</version>
+    <version>21</version>
     <relativePath>../maven-shared-components/pom.xml</relativePath>
   </parent>
 
diff --git a/src/main/java/org/apache/maven/shared/artifact/filter/AbstractStrictPatternArtifactFilter.java b/src/main/java/org/apache/maven/shared/artifact/filter/AbstractStrictPatternArtifactFilter.java
index c23b720..7696b6a 100644
--- a/src/main/java/org/apache/maven/shared/artifact/filter/AbstractStrictPatternArtifactFilter.java
+++ b/src/main/java/org/apache/maven/shared/artifact/filter/AbstractStrictPatternArtifactFilter.java
@@ -171,9 +171,9 @@
             matches = token.startsWith( prefix );
         }
         // support versions range 
-        else if ( pattern.startsWith( "[" ) || pattern.startsWith( "(" ))
+        else if ( pattern.startsWith( "[" ) || pattern.startsWith( "(" ) )
         {
-        	matches = isVersionIncludedInRange(token, pattern);
+            matches = isVersionIncludedInRange( token, pattern );
         }
         // support exact match
         else
@@ -183,13 +183,17 @@
 
         return matches;
     }
-    
-    private boolean isVersionIncludedInRange(final String version, final String range) {
-    	try {
-			return VersionRange.createFromVersionSpec(range).containsVersion(new DefaultArtifactVersion(version));
-		} catch (InvalidVersionSpecificationException e) {
-			return false;
-		}
-	}
+
+    private boolean isVersionIncludedInRange( final String version, final String range )
+    {
+        try
+        {
+            return VersionRange.createFromVersionSpec( range ).containsVersion( new DefaultArtifactVersion( version ) );
+        }
+        catch ( InvalidVersionSpecificationException e )
+        {
+            return false;
+        }
+    }
 
 }
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 8f1d6c5..f6d567a 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
@@ -162,8 +162,9 @@
 
     public String toString()
     {
-        return "Scope filter [null-scope=" + includeNullScope + ", compile=" + includeCompileScope + ", runtime=" + includeRuntimeScope + ", test=" + includeTestScope
-            + ", provided=" + includeProvidedScope + ", system=" + includeSystemScope + "]";
+        return "Scope filter [null-scope=" + includeNullScope + ", compile=" + includeCompileScope + ", runtime="
+            + includeRuntimeScope + ", test=" + includeTestScope + ", provided=" + includeProvidedScope + ", system="
+            + includeSystemScope + "]";
     }
 
     public void reportFilteredArtifacts( Logger logger )
diff --git a/src/main/java/org/apache/maven/shared/artifact/filter/StatisticsReportingArtifactFilter.java b/src/main/java/org/apache/maven/shared/artifact/filter/StatisticsReportingArtifactFilter.java
index 5b9cc3c..03acbdc 100644
--- a/src/main/java/org/apache/maven/shared/artifact/filter/StatisticsReportingArtifactFilter.java
+++ b/src/main/java/org/apache/maven/shared/artifact/filter/StatisticsReportingArtifactFilter.java
@@ -21,6 +21,9 @@
 
 import org.codehaus.plexus.logging.Logger;
 
+/**
+ * 
+ */
 public interface StatisticsReportingArtifactFilter
 {
 
diff --git a/src/main/java/org/apache/maven/shared/artifact/filter/collection/AbstractArtifactFeatureFilter.java b/src/main/java/org/apache/maven/shared/artifact/filter/collection/AbstractArtifactFeatureFilter.java
index a71709d..d4204ed 100644
--- a/src/main/java/org/apache/maven/shared/artifact/filter/collection/AbstractArtifactFeatureFilter.java
+++ b/src/main/java/org/apache/maven/shared/artifact/filter/collection/AbstractArtifactFeatureFilter.java
@@ -44,7 +44,7 @@
      */
     private List<String> excludes;
 
-    public AbstractArtifactFeatureFilter( String include, String exclude)
+    public AbstractArtifactFeatureFilter( String include, String exclude )
     {
         setExcludes( exclude );
         setIncludes( include );
@@ -58,7 +58,7 @@
      */
     public Set<Artifact> filter( Set<Artifact> artifacts )
     {
-        Set<Artifact>results = artifacts;
+        Set<Artifact> results = artifacts;
 
         if ( this.includes != null && !this.includes.isEmpty() )
         {
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 2b27e0b..34935a3 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
@@ -24,6 +24,9 @@
 
 import org.apache.maven.artifact.Artifact;
 
+/**
+ * 
+ */
 public abstract class AbstractArtifactsFilter
     implements ArtifactsFilter
 {
@@ -32,7 +35,8 @@
      * @version $Id$
      * @throws ArtifactFilterException 
      */
-    public boolean isArtifactIncluded( Artifact artifact ) throws ArtifactFilterException
+    public boolean isArtifactIncluded( Artifact artifact )
+        throws ArtifactFilterException
     {
         Set<Artifact> set = new HashSet<Artifact>();
         set.add( artifact );
diff --git a/src/main/java/org/apache/maven/shared/artifact/filter/collection/ArtifactFilterException.java b/src/main/java/org/apache/maven/shared/artifact/filter/collection/ArtifactFilterException.java
index d1d3f6e..62c1973 100644
--- a/src/main/java/org/apache/maven/shared/artifact/filter/collection/ArtifactFilterException.java
+++ b/src/main/java/org/apache/maven/shared/artifact/filter/collection/ArtifactFilterException.java
@@ -1,3 +1,5 @@
+package org.apache.maven.shared.artifact.filter.collection;
+
 /* 
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -16,7 +18,6 @@
  * specific language governing permissions and limitations
  * under the License.    
  */
-package org.apache.maven.shared.artifact.filter.collection;
 
 /**
  * @author <a href="mailto:brianf@apache.org">Brian Fox</a>
@@ -24,8 +25,6 @@
 public class ArtifactFilterException
     extends Exception
 {
-
-   
     /**
      * 
      */
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 9eb4078..c5ef201 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
@@ -40,14 +40,9 @@
      */
     public ArtifactIdFilter( String include, String exclude )
     {
-        super( include, exclude);
+        super( include, exclude );
     }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.maven.plugin.dependency.utils.filters.AbstractArtifactFeatureFilter#getArtifactFeature(org.apache.maven.artifact.Artifact)
-     */
     protected String getArtifactFeature( Artifact artifact )
     {
         return artifact.getArtifactId();
diff --git a/src/main/java/org/apache/maven/shared/artifact/filter/collection/ClassifierFilter.java b/src/main/java/org/apache/maven/shared/artifact/filter/collection/ClassifierFilter.java
index 0b28166..ac5ff4e 100644
--- a/src/main/java/org/apache/maven/shared/artifact/filter/collection/ClassifierFilter.java
+++ b/src/main/java/org/apache/maven/shared/artifact/filter/collection/ClassifierFilter.java
@@ -31,14 +31,9 @@
 {
     public ClassifierFilter( String include, String exclude )
     {
-        super( include, exclude);
+        super( include, exclude );
     }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.maven.plugin.dependency.utils.filters.AbstractArtifactFeatureFilter#getArtifactFeature(org.apache.maven.artifact.Artifact)
-     */
     protected String getArtifactFeature( Artifact artifact )
     {
         return artifact.getClassifier();
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 13f0343..4c42469 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
@@ -41,7 +41,7 @@
      */
     public GroupIdFilter( String include, String exclude )
     {
-        super( include, exclude);
+        super( include, exclude );
     }
 
     /*
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 4549282..05ce404 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
@@ -55,7 +55,7 @@
      * @return a Set of filtered dependencies.
      * @throws ArtifactFilterException
      */
-    public Set<Artifact> filter( Set<Artifact> artifacts)
+    public Set<Artifact> filter( Set<Artifact> artifacts )
         throws ArtifactFilterException
     {
         Set<Artifact> results = artifacts;
diff --git a/src/main/java/org/apache/maven/shared/artifact/filter/collection/TypeFilter.java b/src/main/java/org/apache/maven/shared/artifact/filter/collection/TypeFilter.java
index 9e69920..34ecb8c 100644
--- a/src/main/java/org/apache/maven/shared/artifact/filter/collection/TypeFilter.java
+++ b/src/main/java/org/apache/maven/shared/artifact/filter/collection/TypeFilter.java
@@ -30,14 +30,9 @@
 {
     public TypeFilter( String include, String exclude )
     {
-        super( include, exclude);
+        super( include, exclude );
     }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.maven.plugin.dependency.utils.filters.AbstractArtifactFeatureFilter#getArtifactFeature(org.apache.maven.artifact.Artifact)
-     */
     protected String getArtifactFeature( Artifact artifact )
     {
         return artifact.getType();
