diff --git a/pom.xml b/pom.xml
index cfc7651..dd6b478 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,7 @@
   <parent>
     <groupId>org.apache.maven.shared</groupId>
     <artifactId>maven-shared-components</artifactId>
-    <version>20</version>
+    <version>21</version>
     <relativePath>../maven-shared-components/pom.xml</relativePath>
   </parent>
 
diff --git a/src/main/java/org/apache/maven/shared/downloader/DefaultDownloader.java b/src/main/java/org/apache/maven/shared/downloader/DefaultDownloader.java
index 3e64dd7..aa6d3b5 100644
--- a/src/main/java/org/apache/maven/shared/downloader/DefaultDownloader.java
+++ b/src/main/java/org/apache/maven/shared/downloader/DefaultDownloader.java
@@ -47,50 +47,35 @@
      */
     private ArtifactFactory artifactFactory;
 
-    public File download( String groupId,
-                          String artifactId,
-                          String version,
-                          File localRepository,
+    public File download( String groupId, String artifactId, String version, File localRepository,
                           String[] remoteRepositories )
         throws DownloadException, DownloadNotFoundException
-
     {
-        throw new RuntimeException( "Unsupported method, instead use" +
-        		"org.apache.maven.shared.downloader.DefaultDownloader.download( String, String, String, ArtifactRepository, List )" );
+        throw new RuntimeException( "Unsupported method, instead use org.apache.maven.shared.downloader."
+            + "DefaultDownloader.download( String, String, String, ArtifactRepository, List )" );
     }
 
-    public File download( String groupId,
-                          String artifactId,
-                          String version,
-                          ArtifactRepository localRepository,
-                          List/*<ArtifactRepository>*/ remoteRepositories )
+    public File download( String groupId, String artifactId, String version, ArtifactRepository localRepository,
+                          List/* <ArtifactRepository> */remoteRepositories )
         throws DownloadException, DownloadNotFoundException
-
     {
         return download( groupId, artifactId, version, "jar", null, localRepository, remoteRepositories );
     }
     
-    public File download( String groupId,
-                          String artifactId,
-                          String version,
-                          String type,
-                          String classifier,
-                          ArtifactRepository localRepository,
-                          List/*<ArtifactRepository>*/ remoteRepositories )
+    public File download( String groupId, String artifactId, String version, String type, String classifier,
+                          ArtifactRepository localRepository, List/* <ArtifactRepository> */remoteRepositories )
         throws DownloadException, DownloadNotFoundException
-
     {
         Artifact artifact =
-            artifactFactory.createDependencyArtifact( groupId, artifactId, VersionRange.createFromVersion( version ), type, classifier, Artifact.SCOPE_RUNTIME );
+            artifactFactory.createDependencyArtifact( groupId, artifactId, VersionRange.createFromVersion( version ),
+                                                      type, classifier, Artifact.SCOPE_RUNTIME );
 
         return download( artifact, localRepository, remoteRepositories );
     }
     
-    private File download( Artifact artifact,
-                            ArtifactRepository localRepository,
-                            List/*<ArtifactRepository>*/ remoteRepositories )
+    private File download( Artifact artifact, ArtifactRepository localRepository,
+                           List/* <ArtifactRepository> */remoteRepositories )
         throws DownloadException, DownloadNotFoundException
-        
     {
         try
         {
diff --git a/src/main/java/org/apache/maven/shared/downloader/Downloader.java b/src/main/java/org/apache/maven/shared/downloader/Downloader.java
index f0983fe..5c1fb56 100644
--- a/src/main/java/org/apache/maven/shared/downloader/Downloader.java
+++ b/src/main/java/org/apache/maven/shared/downloader/Downloader.java
@@ -31,26 +31,15 @@
 {
     String ROLE = Downloader.class.getName();
 
-    public File download( String groupId,
-                          String artifactId,
-                          String version,
-                          File localRepository,
-                          String[] remoteRepositories )
+    File download( String groupId, String artifactId, String version, File localRepository,
+                   String[] remoteRepositories )
         throws DownloadException, DownloadNotFoundException;
 
-    public File download( String groupId,
-                          String artifactId,
-                          String version,
-                          ArtifactRepository localRepository,
-                          List remoteRepositories )
+    File download( String groupId, String artifactId, String version, ArtifactRepository localRepository,
+                   List remoteRepositories )
         throws DownloadException, DownloadNotFoundException;
 
-    public File download( String groupId,
-                          String artifactId,
-                          String version,
-                          String type,
-                          String classifier,
-                          ArtifactRepository localRepository,
-                          List remoteRepositories )
+    File download( String groupId, String artifactId, String version, String type, String classifier,
+                   ArtifactRepository localRepository, List remoteRepositories )
         throws DownloadException, DownloadNotFoundException;
 }
