diff --git a/pom.xml b/pom.xml
index 66b12a8..e95a4c1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -25,8 +25,8 @@
   <parent>
     <groupId>org.apache.maven.doxia</groupId>
     <artifactId>doxia-tools</artifactId>
-    <version>30</version>
-    <relativePath>../../pom/maven/doxia-tools/pom.xml</relativePath>
+    <version>33</version>
+    <relativePath></relativePath>
   </parent>
 
   <artifactId>doxia-linkcheck</artifactId>
@@ -55,6 +55,10 @@
       <url>scm:svn:https://svn.apache.org/repos/asf/maven/doxia/website/components/${maven.site.path}</url>
     </site>
   </distributionManagement>
+  
+  <properties>
+    <javaVersion>7</javaVersion>
+  </properties>
 
   <dependencies>
     <!-- compile dependencies -->
diff --git a/src/main/java/org/apache/maven/doxia/linkcheck/DefaultLinkCheck.java b/src/main/java/org/apache/maven/doxia/linkcheck/DefaultLinkCheck.java
index f20656e..edf1d31 100644
--- a/src/main/java/org/apache/maven/doxia/linkcheck/DefaultLinkCheck.java
+++ b/src/main/java/org/apache/maven/doxia/linkcheck/DefaultLinkCheck.java
@@ -26,7 +26,6 @@
 import java.nio.charset.UnsupportedCharsetException;
 import java.util.Arrays;
 import java.util.LinkedList;
-import java.util.List;
 import java.util.Set;
 
 import org.apache.commons.logging.Log;
@@ -59,7 +58,6 @@
  * @author <a href="mailto:carlos@apache.org">Carlos Sanchez</a>
  * @author <a href="mailto:aheritier@apache.org">Arnaud Heritier</a>
  * @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
- * @version $Id$
  */
 @Component( role = LinkCheck.class )
 public final class DefaultLinkCheck
@@ -126,72 +124,84 @@
     // ----------------------------------------------------------------------
 
     /** {@inheritDoc} */
+    @Override
     public void setBasedir( File base )
     {
         this.basedir = base;
     }
 
     /** {@inheritDoc} */
+    @Override
     public void setBaseURL( String url )
     {
         this.baseURL = url;
     }
 
     /** {@inheritDoc} */
+    @Override
     public void setExcludedHttpStatusErrors( int[] excl )
     {
         this.excludedHttpStatusErrors = excl;
     }
 
     /** {@inheritDoc} */
+    @Override
     public void setExcludedHttpStatusWarnings( int[] excl )
     {
         this.excludedHttpStatusWarnings = excl;
     }
 
     /** {@inheritDoc} */
+    @Override
     public void setExcludedLinks( String[] excl )
     {
         this.excludedLinks = excl;
     }
 
     /** {@inheritDoc} */
+    @Override
     public void setExcludedPages( String[] excl )
     {
         this.excludedPages = excl;
     }
 
     /** {@inheritDoc} */
+    @Override
     public void setHttp( HttpBean http )
     {
         this.http = http;
     }
 
     /** {@inheritDoc} */
+    @Override
     public void setLinkCheckCache( File cacheFile )
     {
         this.linkCheckCache = cacheFile;
     }
 
     /** {@inheritDoc} */
+    @Override
     public void setOnline( boolean onLine )
     {
         this.online = onLine;
     }
 
     /** {@inheritDoc} */
+    @Override
     public void setReportOutput( File file )
     {
         this.reportOutput = file;
     }
 
     /** {@inheritDoc} */
+    @Override
     public void setReportOutputEncoding( String encoding )
     {
         this.reportOutputEncoding = encoding;
     }
 
     /** {@inheritDoc} */
+    @Override
     public LinkcheckModel execute()
         throws LinkCheckException
     {
@@ -264,6 +274,7 @@
     }
 
     /** {@inheritDoc} */
+    @Override
     public void setEncoding( String encoding )
     {
         if ( StringUtils.isEmpty( encoding ) )
@@ -315,7 +326,6 @@
      */
     private String getExcludedPages()
     {
-        @SuppressWarnings( "unchecked" )
         LinkedList<String> patternList = new LinkedList<String>( FileUtils.getDefaultExcludesAsList() );
 
         if ( excludedPages != null )
@@ -414,11 +424,10 @@
      *
      * @param base the base directory to traverse.
      */
-    @SuppressWarnings( "unchecked" )
     private void findAndCheckFiles( File base, LinkcheckModel model )
         throws IOException
     {
-        for ( File file : (List<File>) FileUtils.getFiles( base, getIncludedPages(), getExcludedPages() ) )
+        for ( File file : FileUtils.getFiles( base, getIncludedPages(), getExcludedPages() ) )
         {
             checkFile( file, model );
         }
diff --git a/src/main/java/org/apache/maven/doxia/linkcheck/LinkCheck.java b/src/main/java/org/apache/maven/doxia/linkcheck/LinkCheck.java
index e8a8977..af0c4c6 100644
--- a/src/main/java/org/apache/maven/doxia/linkcheck/LinkCheck.java
+++ b/src/main/java/org/apache/maven/doxia/linkcheck/LinkCheck.java
@@ -27,7 +27,6 @@
  * Tool to check links from html files in a given directory.
  *
  * @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
- * @version $Id$
  */
 public interface LinkCheck
 {
diff --git a/src/main/java/org/apache/maven/doxia/linkcheck/LinkCheckException.java b/src/main/java/org/apache/maven/doxia/linkcheck/LinkCheckException.java
index a461f0d..9b11228 100644
--- a/src/main/java/org/apache/maven/doxia/linkcheck/LinkCheckException.java
+++ b/src/main/java/org/apache/maven/doxia/linkcheck/LinkCheckException.java
@@ -23,7 +23,6 @@
  * Encapsulate a Link check exception.
  *
  * @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
- * @version $Id$
  * @since 1.0
  */
 public class LinkCheckException
diff --git a/src/main/java/org/apache/maven/doxia/linkcheck/LinkMatcher.java b/src/main/java/org/apache/maven/doxia/linkcheck/LinkMatcher.java
index abab91e..1da4726 100644
--- a/src/main/java/org/apache/maven/doxia/linkcheck/LinkMatcher.java
+++ b/src/main/java/org/apache/maven/doxia/linkcheck/LinkMatcher.java
@@ -41,7 +41,6 @@
  * </pre>
  *
  * @author <a href="mailto:mac@apache.org">Ignacio G. Mac Dowell </a>
- * @version $Id$
  */
 class LinkMatcher
 {
@@ -51,7 +50,7 @@
                          Pattern.CASE_INSENSITIVE );
 
     /** No need to create a new object each time a file is processed. Just clear it. */
-    private static final Set<String> LINK_LIST = new TreeSet<String>();
+    private static final Set<String> LINK_LIST = new TreeSet<>();
 
     private LinkMatcher()
     {
@@ -72,17 +71,11 @@
         throws IOException
     {
         String content;
-        Reader reader = null;
-        try
+        
+        try ( Reader reader = ReaderFactory.newReader( file, encoding ) )
         {
-            reader = ReaderFactory.newReader( file, encoding );
-
             content = IOUtil.toString( reader );
         }
-        finally
-        {
-            IOUtil.close( reader );
-        }
 
         // some link could be in comments, remove them
         return content.replaceAll( "(?s)<!--.*?-->", "" );
diff --git a/src/main/java/org/apache/maven/doxia/linkcheck/validation/FileLinkValidator.java b/src/main/java/org/apache/maven/doxia/linkcheck/validation/FileLinkValidator.java
index b050f50..f90b77f 100644
--- a/src/main/java/org/apache/maven/doxia/linkcheck/validation/FileLinkValidator.java
+++ b/src/main/java/org/apache/maven/doxia/linkcheck/validation/FileLinkValidator.java
@@ -35,7 +35,6 @@
  *
  * @author <a href="mailto:bwalding@apache.org">Ben Walding</a>
  * @author <a href="mailto:aheritier@apache.org">Arnaud Heritier</a>
- * @version $Id$
  */
 public final class FileLinkValidator
     implements LinkValidator
@@ -55,6 +54,7 @@
     }
 
     /** {@inheritDoc} */
+    @Override
     public LinkValidationResult validateLink( LinkValidationItem lvi )
     {
         File f = getFile( lvi );
@@ -68,6 +68,7 @@
     }
 
     /** {@inheritDoc} */
+    @Override
     public Object getResourceKey( LinkValidationItem lvi )
     {
         String link = lvi.getLink();
@@ -150,20 +151,14 @@
      */
     private static String read( File f, String encoding )
     {
-        Reader reader = null;
-        try
+        try ( Reader reader = ReaderFactory.newReader( f, encoding ) )
         {
-            reader = ReaderFactory.newReader( f, encoding );
             return IOUtil.toString( reader );
         }
         catch ( IOException e )
         {
             // nop;
         }
-        finally
-        {
-            IOUtil.close( reader );
-        }
 
         return null;
     }
diff --git a/src/main/java/org/apache/maven/doxia/linkcheck/validation/HTTPLinkValidationResult.java b/src/main/java/org/apache/maven/doxia/linkcheck/validation/HTTPLinkValidationResult.java
index 687df00..19a6a2e 100644
--- a/src/main/java/org/apache/maven/doxia/linkcheck/validation/HTTPLinkValidationResult.java
+++ b/src/main/java/org/apache/maven/doxia/linkcheck/validation/HTTPLinkValidationResult.java
@@ -23,7 +23,6 @@
  * This class is used to return HTTP status responses from the validation handlers.
  *
  * @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
- * @version $Id$
  */
 public class HTTPLinkValidationResult
     extends LinkValidationResult
@@ -65,6 +64,7 @@
     }
 
     /** {@inheritDoc} */
+    @Override
     public String getErrorMessage()
     {
         return this.httpStatusCode + " " + super.getErrorMessage();
@@ -81,6 +81,7 @@
     }
 
     /** {@inheritDoc} */
+    @Override
     public String toString()
     {
         StringBuilder sb = new StringBuilder( super.toString() );
diff --git a/src/main/java/org/apache/maven/doxia/linkcheck/validation/HTTPLinkValidator.java b/src/main/java/org/apache/maven/doxia/linkcheck/validation/HTTPLinkValidator.java
index 6ee0e8b..11c179f 100644
--- a/src/main/java/org/apache/maven/doxia/linkcheck/validation/HTTPLinkValidator.java
+++ b/src/main/java/org/apache/maven/doxia/linkcheck/validation/HTTPLinkValidator.java
@@ -26,12 +26,12 @@
  *
  * @author <a href="mailto:bwalding@apache.org">Ben Walding</a>
  * @author <a href="mailto:aheritier@apache.org">Arnaud Heritier</a>
- * @version $Id$
  */
 public abstract class HTTPLinkValidator
     implements LinkValidator
 {
     /** {@inheritDoc} */
+    @Override
     public Object getResourceKey( LinkValidationItem lvi )
     {
         String link = lvi.getLink();
diff --git a/src/main/java/org/apache/maven/doxia/linkcheck/validation/LinkValidationItem.java b/src/main/java/org/apache/maven/doxia/linkcheck/validation/LinkValidationItem.java
index bd0edbc..9159260 100644
--- a/src/main/java/org/apache/maven/doxia/linkcheck/validation/LinkValidationItem.java
+++ b/src/main/java/org/apache/maven/doxia/linkcheck/validation/LinkValidationItem.java
@@ -24,7 +24,6 @@
 /**
  * @author <a href="mailto:bwalding@apache.org">Ben Walding</a>
  * @author <a href="mailto:aheritier@apache.org">Arnaud Heritier</a>
- * @version $Id$
  */
 public class LinkValidationItem
 {
@@ -77,6 +76,7 @@
     }
 
     /** {@inheritDoc} */
+    @Override
     public boolean equals( Object obj )
     {
         if ( !( obj instanceof LinkValidationItem ) )
@@ -100,6 +100,7 @@
     }
 
     /** {@inheritDoc} */
+    @Override
     public int hashCode()
     {
         return this.source.hashCode() ^ this.link.hashCode();
diff --git a/src/main/java/org/apache/maven/doxia/linkcheck/validation/LinkValidationResult.java b/src/main/java/org/apache/maven/doxia/linkcheck/validation/LinkValidationResult.java
index 928dec8..0c643ca 100644
--- a/src/main/java/org/apache/maven/doxia/linkcheck/validation/LinkValidationResult.java
+++ b/src/main/java/org/apache/maven/doxia/linkcheck/validation/LinkValidationResult.java
@@ -27,7 +27,6 @@
  *
  * @author <a href="mailto:bwalding@apache.org">Ben Walding</a>
  * @author <a href="mailto:aheritier@apache.org">Arnaud Heritier</a>
- * @version $Id$
  */
 public class LinkValidationResult
     implements Serializable
@@ -94,6 +93,7 @@
     }
 
     /** {@inheritDoc} */
+    @Override
     public String toString()
     {
         StringBuilder sb = new StringBuilder();
diff --git a/src/main/java/org/apache/maven/doxia/linkcheck/validation/LinkValidator.java b/src/main/java/org/apache/maven/doxia/linkcheck/validation/LinkValidator.java
index ac8c8ba..adaed95 100644
--- a/src/main/java/org/apache/maven/doxia/linkcheck/validation/LinkValidator.java
+++ b/src/main/java/org/apache/maven/doxia/linkcheck/validation/LinkValidator.java
@@ -22,7 +22,6 @@
 /**
  * @author <a href="mailto:bwalding@apache.org">Ben Walding</a>
  * @author <a href="mailto:aheritier@apache.org">Arnaud Heritier</a>
- * @version $Id$
  */
 public interface LinkValidator
 {
diff --git a/src/main/java/org/apache/maven/doxia/linkcheck/validation/LinkValidatorManager.java b/src/main/java/org/apache/maven/doxia/linkcheck/validation/LinkValidatorManager.java
index 7efa7df..a7baad8 100644
--- a/src/main/java/org/apache/maven/doxia/linkcheck/validation/LinkValidatorManager.java
+++ b/src/main/java/org/apache/maven/doxia/linkcheck/validation/LinkValidatorManager.java
@@ -22,7 +22,6 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.maven.doxia.linkcheck.model.LinkcheckFileResult;
-import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.SelectorUtils;
 import org.codehaus.plexus.util.StringUtils;
 
@@ -50,7 +49,6 @@
  * @author <a href="mailto:carlos@apache.org">Carlos Sanchez</a>
  * @author <a href="mailto:aheritier@apache.org">Arnaud Heritier</a>
  * @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
- * @version $Id$
  */
 public class LinkValidatorManager
     implements Serializable
@@ -62,13 +60,13 @@
     private static final Log LOG = LogFactory.getLog( LinkValidatorManager.class );
 
     /** validators. */
-    private List<LinkValidator> validators = new LinkedList<LinkValidator>();
+    private List<LinkValidator> validators = new LinkedList<>();
 
     /** excludes. */
     private String[] excludedLinks = new String[0];
 
     /** cache. */
-    private Map<Object, LinkValidationResult> cache = new HashMap<Object, LinkValidationResult>();
+    private Map<Object, LinkValidationResult> cache = new HashMap<>();
 
     /**
      * Returns the list of validators.
@@ -203,11 +201,9 @@
             return;
         }
 
-        ObjectInputStream is = null;
-        try
+        
+        try ( ObjectInputStream is = new ObjectInputStream( new FileInputStream( cacheFile ) ) )
         {
-            is = new ObjectInputStream( new FileInputStream( cacheFile ) );
-
             this.cache = (Map<Object, LinkValidationResult>) is.readObject();
 
             if ( LOG.isDebugEnabled() )
@@ -226,10 +222,6 @@
                 LOG.error( "Unable to load the cache: " + cacheFile.getAbsolutePath(), e );
             }
         }
-        finally
-        {
-            IOUtil.close( is );
-        }
     }
 
     /**
@@ -277,17 +269,11 @@
             dir.mkdirs();
         }
 
-        ObjectOutputStream os = null;
-        try
+        
+        try ( ObjectOutputStream os = new ObjectOutputStream( new FileOutputStream( cacheFile ) ) )
         {
-            os = new ObjectOutputStream( new FileOutputStream( cacheFile ) );
-
             os.writeObject( persistentCache );
         }
-        finally
-        {
-            IOUtil.close( os );
-        }
     }
 
     /**
@@ -311,7 +297,7 @@
                         + this.cache.get( resourceKey ) + "]." );
                 }
 
-                return (LinkValidationResult) this.cache.get( resourceKey );
+                return this.cache.get( resourceKey );
             }
         }
 
diff --git a/src/main/java/org/apache/maven/doxia/linkcheck/validation/MailtoLinkValidator.java b/src/main/java/org/apache/maven/doxia/linkcheck/validation/MailtoLinkValidator.java
index 8ef6195..ca2cefb 100644
--- a/src/main/java/org/apache/maven/doxia/linkcheck/validation/MailtoLinkValidator.java
+++ b/src/main/java/org/apache/maven/doxia/linkcheck/validation/MailtoLinkValidator.java
@@ -26,7 +26,6 @@
  *
  * @author <a href="mailto:bwalding@apache.org">Ben Walding</a>
  * @author <a href="mailto:aheritier@apache.org">Arnaud Heritier</a>
- * @version $Id$
  */
 public final class MailtoLinkValidator
     implements LinkValidator
@@ -36,12 +35,14 @@
         new LinkValidationResult( LinkcheckFileResult.VALID_LEVEL, false, "" );
 
     /** {@inheritDoc} */
+    @Override
     public LinkValidationResult validateLink( LinkValidationItem lvi )
     {
         return LVR;
     }
 
     /** {@inheritDoc} */
+    @Override
     public Object getResourceKey( LinkValidationItem lvi )
     {
         if ( lvi.getLink().indexOf( '@' ) != -1 )
diff --git a/src/main/java/org/apache/maven/doxia/linkcheck/validation/OfflineHTTPLinkValidator.java b/src/main/java/org/apache/maven/doxia/linkcheck/validation/OfflineHTTPLinkValidator.java
index a55ae3f..1be3383 100644
--- a/src/main/java/org/apache/maven/doxia/linkcheck/validation/OfflineHTTPLinkValidator.java
+++ b/src/main/java/org/apache/maven/doxia/linkcheck/validation/OfflineHTTPLinkValidator.java
@@ -25,12 +25,12 @@
  * Fake links check when maven is offline
  *
  * @author <a href="mailto:aheritier@apache.org">Arnaud Heritier</a>
- * @version $Id$
  */
 public final class OfflineHTTPLinkValidator
     extends HTTPLinkValidator
 {
     /** {@inheritDoc} */
+    @Override
     public LinkValidationResult validateLink( LinkValidationItem lvi )
     {
         return new LinkValidationResult( LinkcheckFileResult.WARNING_LEVEL, false,
diff --git a/src/main/java/org/apache/maven/doxia/linkcheck/validation/OnlineHTTPLinkValidator.java b/src/main/java/org/apache/maven/doxia/linkcheck/validation/OnlineHTTPLinkValidator.java
index 87f8a5b..b9c4bfe 100644
--- a/src/main/java/org/apache/maven/doxia/linkcheck/validation/OnlineHTTPLinkValidator.java
+++ b/src/main/java/org/apache/maven/doxia/linkcheck/validation/OnlineHTTPLinkValidator.java
@@ -54,7 +54,6 @@
  * @author <a href="mailto:bwalding@apache.org">Ben Walding</a>
  * @author <a href="mailto:aheritier@apache.org">Arnaud Heritier</a>
  * @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
- * @version $Id$
  */
 public final class OnlineHTTPLinkValidator
     extends HTTPLinkValidator
@@ -131,6 +130,7 @@
     }
 
     /** {@inheritDoc} */
+    @Override
     public LinkValidationResult validateLink( LinkValidationItem lvi )
     {
         if ( this.cl == null )
diff --git a/src/test/java/org/apache/maven/doxia/linkcheck/AnchorLinkTest.java b/src/test/java/org/apache/maven/doxia/linkcheck/AnchorLinkTest.java
index 9f6167d..dbaee7e 100644
--- a/src/test/java/org/apache/maven/doxia/linkcheck/AnchorLinkTest.java
+++ b/src/test/java/org/apache/maven/doxia/linkcheck/AnchorLinkTest.java
@@ -30,7 +30,6 @@
 /**
  * @author Ben Walding
  * @author <a href="mailto:carlos@apache.org">Carlos Sanchez</a>
- * @version $Id: LinkCheckTest.java 800044 2009-08-02 12:28:50Z vsiveton $
  */
 public class AnchorLinkTest
     extends PlexusTestCase
diff --git a/src/test/java/org/apache/maven/doxia/linkcheck/LinkCheckTest.java b/src/test/java/org/apache/maven/doxia/linkcheck/LinkCheckTest.java
index b0ad654..02d6d67 100644
--- a/src/test/java/org/apache/maven/doxia/linkcheck/LinkCheckTest.java
+++ b/src/test/java/org/apache/maven/doxia/linkcheck/LinkCheckTest.java
@@ -30,7 +30,6 @@
 /**
  * @author Ben Walding
  * @author <a href="mailto:carlos@apache.org">Carlos Sanchez</a>
- * @version $Id$
  */
 public class LinkCheckTest
     extends PlexusTestCase
@@ -84,7 +83,7 @@
         String fileName = "testExcludes.html";
         check( map, fileName, 2 );
 
-        LinkcheckFile ftc = (LinkcheckFile) map.get( fileName );
+        LinkcheckFile ftc = map.get( fileName );
         assertEquals( "Excluded links", 2, ftc.getSuccessful() );
 
         // index-all.html should get parsed, but is currently having problems.
diff --git a/src/test/java/org/apache/maven/doxia/linkcheck/validation/AnchorsTest.java b/src/test/java/org/apache/maven/doxia/linkcheck/validation/AnchorsTest.java
index a955101..cae0e87 100644
--- a/src/test/java/org/apache/maven/doxia/linkcheck/validation/AnchorsTest.java
+++ b/src/test/java/org/apache/maven/doxia/linkcheck/validation/AnchorsTest.java
@@ -1,22 +1,24 @@
-/**
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
 package org.apache.maven.doxia.linkcheck.validation;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 import junit.framework.TestCase;
 
 public class AnchorsTest extends TestCase
diff --git a/src/test/java/org/apache/maven/doxia/linkcheck/validation/HTTPLinkValidatorTest.java b/src/test/java/org/apache/maven/doxia/linkcheck/validation/HTTPLinkValidatorTest.java
index 6853ced..e7447c7 100644
--- a/src/test/java/org/apache/maven/doxia/linkcheck/validation/HTTPLinkValidatorTest.java
+++ b/src/test/java/org/apache/maven/doxia/linkcheck/validation/HTTPLinkValidatorTest.java
@@ -28,7 +28,6 @@
 /**
  * @author <a href="bwalding@apache.org">Ben Walding</a>
  * @author <a href="aheritier@apache.org">Arnaud Heritier</a>
- * @version $Id$
  */
 public class HTTPLinkValidatorTest extends TestCase
 {
diff --git a/src/test/java/org/apache/maven/doxia/linkcheck/validation/LinkValidatorManagerTest.java b/src/test/java/org/apache/maven/doxia/linkcheck/validation/LinkValidatorManagerTest.java
index bc1fb3e..d2b9e46 100644
--- a/src/test/java/org/apache/maven/doxia/linkcheck/validation/LinkValidatorManagerTest.java
+++ b/src/test/java/org/apache/maven/doxia/linkcheck/validation/LinkValidatorManagerTest.java
@@ -23,7 +23,6 @@
 
 /**
  * @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
- * @version $Id$
  */
 public class LinkValidatorManagerTest
     extends TestCase
