diff --git a/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/AbstractDistCheckMojo.java b/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/AbstractDistCheckMojo.java
index 4a032ae..cd321dc 100644
--- a/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/AbstractDistCheckMojo.java
+++ b/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/AbstractDistCheckMojo.java
@@ -386,22 +386,22 @@
      * @param cli
      * @param version
      * @param ignore
-     * @param error 
+     * @param message 
      */
-    protected void addErrorLine( ConfigurationLineInfo cli, String version, List<String> ignore, String error ) 
+    protected void addErrorLine( ConfigurationLineInfo cli, String version, List<String> ignore, String message ) 
     {
         if ( ( ignore != null )
             && ( ignore.contains( cli.getArtifactId() + ':' + version ) || ignore.contains( cli.getArtifactId() ) ) )
         {
-            getLog().warn( error );
+            getLog().warn( message );
         }
         else
         {
-            getLog().error( error );
+            getLog().error( message );
 
             try ( PrintWriter output = new PrintWriter( new FileWriter( getFailuresFile(), true ) ) )
             {
-                output.printf( "%s%s", error, EOL );
+                output.printf( "%s%s", message, EOL );
             }
             catch ( Exception e )
             {
diff --git a/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/DistCheckIndexPageMojo.java b/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/DistCheckIndexPageMojo.java
index 8d6de78..d488b5a 100644
--- a/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/DistCheckIndexPageMojo.java
+++ b/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/DistCheckIndexPageMojo.java
@@ -151,7 +151,9 @@
 
         sink.tableRow();
         sink.tableCell();
-        sink.rawText( cipr.getConfigurationLine().getArtifactId() );
+        sink.anchor( cli.getArtifactId() );
+        sink.rawText( cli.getArtifactId() );
+        sink.anchor_();
         sink.tableCell_();
 
         // maven-metadata.xml column
@@ -159,7 +161,7 @@
         sink.link( cli.getMetadataFileURL( repoBaseUrl ) );
         sink.rawText( "maven-metadata.xml" );
         sink.link_();
-        sink.rawText( ": " + cipr.getConfigurationLine().getReleaseDateFromMetadata() + " - " + cipr.indexVersion );
+        sink.rawText( ": " + cli.getReleaseDateFromMetadata() + " - " + cipr.indexVersion );
         sink.tableCell_();
 
         // index page column
@@ -167,7 +169,7 @@
         if ( displayDate )
         {
             sink.rawText( cipr.indexDate );
-            if ( isDateSimilar( cipr.getConfigurationLine().getReleaseDateFromMetadata(), cipr.indexDate ) )
+            if ( isDateSimilar( cli.getReleaseDateFromMetadata(), cipr.indexDate ) )
             {
                 iconSuccess( sink );
             }
diff --git a/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/DistCheckSiteMojo.java b/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/DistCheckSiteMojo.java
index 323ee18..d05d6a9 100644
--- a/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/DistCheckSiteMojo.java
+++ b/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/DistCheckSiteMojo.java
@@ -335,13 +335,15 @@
         String directory = null;
         for ( CheckSiteResult csr : results )
         {
-            if ( !csr.getConfigurationLine().getDirectory().equals( directory ) )
+            ConfigurationLineInfo cli = csr.getConfigurationLine();
+
+            if ( !cli.getDirectory().equals( directory ) )
             {
-                directory = csr.getConfigurationLine().getDirectory();
+                directory = cli.getDirectory();
                 sink.tableRow();
                 sink.tableHeaderCell();
                 // shorten groupid
-                sink.rawText( csr.getConfigurationLine().getGroupId().replaceAll( "org.apache.maven", "o.a.m" ) );
+                sink.rawText( cli.getGroupId().replaceAll( "org.apache.maven", "o.a.m" ) );
                 sink.tableHeaderCell_();
                 for ( int i = 0; i < 5 ; i++ )
                 {
@@ -354,7 +356,9 @@
 
             sink.tableRow();
             sink.tableCell();
-            sink.rawText( csr.getConfigurationLine().getArtifactId() );
+            sink.anchor( cli.getArtifactId() );
+            sink.rawText( cli.getArtifactId() );
+            sink.anchor_();
             sink.tableCell_();
 
             sink.tableCell();
@@ -362,7 +366,7 @@
             sink.tableCell_();
             
             sink.tableCell();
-            sink.rawText( csr.getConfigurationLine().getReleaseDateFromMetadata() );
+            sink.rawText( cli.getReleaseDateFromMetadata() );
             sink.tableCell_();
             sink.tableCell();
             if ( csr.getStatusCode() != HTTP_OK )
diff --git a/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/DistCheckSourceReleaseMojo.java b/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/DistCheckSourceReleaseMojo.java
index 205bf0d..873b99d 100644
--- a/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/DistCheckSourceReleaseMojo.java
+++ b/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/DistCheckSourceReleaseMojo.java
@@ -163,7 +163,9 @@
 
         sink.tableRow();
         sink.tableCell();
-        sink.rawText( csrr.getConfigurationLine().getArtifactId() );
+        sink.anchor( cli.getArtifactId() );
+        sink.rawText( cli.getArtifactId() );
+        sink.anchor_();
         sink.tableCell_();
 
         // LATEST column
@@ -175,7 +177,7 @@
 
         // DATE column
         sink.tableCell();
-        sink.rawText( csrr.getConfigurationLine().getReleaseDateFromMetadata() );
+        sink.rawText( cli.getReleaseDateFromMetadata() );
         sink.tableCell_();
 
         // dist column
