diff --git a/src/main/java/org/apache/maven/plugins/war/AbstractWarMojo.java b/src/main/java/org/apache/maven/plugins/war/AbstractWarMojo.java
index 707d803..9336c13 100644
--- a/src/main/java/org/apache/maven/plugins/war/AbstractWarMojo.java
+++ b/src/main/java/org/apache/maven/plugins/war/AbstractWarMojo.java
@@ -412,8 +412,7 @@
     }
 
     /**
-     * Builds the webapp for the specified project with the new packaging task thingy
-     * <p/>
+     * Builds the webapp for the specified project with the new packaging task thingy.
      * Classes, libraries and tld files are copied to the <tt>webappDirectory</tt> during this phase.
      *
      * @param mavenProject the maven project
diff --git a/src/main/java/org/apache/maven/plugins/war/Overlay.java b/src/main/java/org/apache/maven/plugins/war/Overlay.java
index 82f8f7f..43e3292 100644
--- a/src/main/java/org/apache/maven/plugins/war/Overlay.java
+++ b/src/main/java/org/apache/maven/plugins/war/Overlay.java
@@ -26,14 +26,15 @@
 import java.util.List;
 
 /**
+ * <p>
  * An overlay is a skeleton WAR added to another WAR project in order to inject a functionality, resources or any other
- * shared component.
- * <p/>
- * Note that a particular WAR dependency can be added multiple times as an overlay with different includes/excludes
- * filter; this allows building a fine grained overwriting policy.
- * <p/>
- * The current project can also be described as an overlay and can not be specified twice. An overlay with no groupId
- * and no artifactId represents the current project.
+ * shared component.</p>
+ * 
+ * <p>Note that a particular WAR dependency can be added multiple times as an overlay with different includes/excludes
+ * filter; this allows building a fine grained overwriting policy.</p>
+ * 
+ * <p>The current project can also be described as an overlay and can not be specified twice. An overlay with no groupId
+ * and no artifactId represents the current project.</p>
  *
  * @author Stephane Nicoll
  * @version $Id$
diff --git a/src/main/java/org/apache/maven/plugins/war/overlay/OverlayManager.java b/src/main/java/org/apache/maven/plugins/war/overlay/OverlayManager.java
index 5a97a10..eb266c4 100644
--- a/src/main/java/org/apache/maven/plugins/war/overlay/OverlayManager.java
+++ b/src/main/java/org/apache/maven/plugins/war/overlay/OverlayManager.java
@@ -46,7 +46,7 @@
 
     /**
      * Creates a manager with the specified overlays.
-     * <p/>
+     * 
      * Note that the list is potentially updated by the manager so a new list is created based on the overlays.
      *
      * @param overlays the overlays
@@ -157,7 +157,7 @@
 
     /**
      * Returns the Artifact associated to the specified overlay.
-     * <p/>
+     * 
      * If the overlay defines the current project, <tt>null</tt> is returned. If no artifact could not be found for the
      * overlay a InvalidOverlayConfigurationException is thrown.
      *
diff --git a/src/main/java/org/apache/maven/plugins/war/packaging/AbstractWarPackagingTask.java b/src/main/java/org/apache/maven/plugins/war/packaging/AbstractWarPackagingTask.java
index 31aca58..9275f32 100644
--- a/src/main/java/org/apache/maven/plugins/war/packaging/AbstractWarPackagingTask.java
+++ b/src/main/java/org/apache/maven/plugins/war/packaging/AbstractWarPackagingTask.java
@@ -72,10 +72,10 @@
 
     /**
      * Copies the files if possible with an optional target prefix.
-     * <p/>
+     * 
      * Copy uses a first-win strategy: files that have already been copied by previous tasks are ignored. This method
      * makes sure to update the list of protected files which gives the list of files that have already been copied.
-     * <p/>
+     * 
      * If the structure of the source directory is not the same as the root of the webapp, use the <tt>targetPrefix</tt>
      * parameter to specify in which particular directory the files should be copied. Use <tt>null</tt> to copy the
      * files with the same structure
@@ -120,7 +120,7 @@
 
     /**
      * Copies the files if possible as is.
-     * <p/>
+     * 
      * Copy uses a first-win strategy: files that have already been copied by previous tasks are ignored. This method
      * makes sure to update the list of protected files which gives the list of files that have already been copied.
      *
@@ -141,7 +141,7 @@
 
     /**
      * Copy the specified file if the target location has not yet already been used.
-     * <p/>
+     * 
      * The <tt>targetFileName</tt> is the relative path according to the root of the generated web application.
      *
      * @param sourceId the source id
@@ -229,7 +229,7 @@
     /**
      * Copy the specified file if the target location has not yet already been used and filter its content with the
      * configured filter properties.
-     * <p/>
+     * 
      * The <tt>targetFileName</tt> is the relative path according to the root of the generated web application.
      *
      * @param sourceId the source id
@@ -323,7 +323,6 @@
      * don't already exist. if the <code>onlyIfModified</code> flag is <tt>false</tt>, <code>destination</code> will be
      * overwritten if it already exists. If the flag is <tt>true</tt> destination will be overwritten if it's not up to
      * date.
-     * <p/>
      *
      * @param context the packaging context
      * @param source an existing non-directory <code>File</code> to copy bytes from
@@ -455,7 +454,7 @@
 
     /**
      * Returns the final name of the specified artifact.
-     * <p/>
+     * 
      * If the <tt>outputFileNameMapping</tt> is set, it is used, otherwise the standard naming scheme is used.
      *
      * @param context the packaging context
diff --git a/src/main/java/org/apache/maven/plugins/war/packaging/ClassesPackagingTask.java b/src/main/java/org/apache/maven/plugins/war/packaging/ClassesPackagingTask.java
index 42db504..12aa782 100644
--- a/src/main/java/org/apache/maven/plugins/war/packaging/ClassesPackagingTask.java
+++ b/src/main/java/org/apache/maven/plugins/war/packaging/ClassesPackagingTask.java
@@ -33,7 +33,7 @@
 
 /**
  * Handles the classes directory that needs to be packaged in the web application.
- * <p/>
+ * 
  * Based on the {@link WarPackagingContext#archiveClasses()} flag the resources either copied into to
  * <tt>WEB-INF/classes</tt> directory or archived in a jar within the <tt>WEB-INF/lib</tt> directory.
  *
diff --git a/src/main/java/org/apache/maven/plugins/war/packaging/OverlayPackagingTask.java b/src/main/java/org/apache/maven/plugins/war/packaging/OverlayPackagingTask.java
index 057b868..e045bd1 100644
--- a/src/main/java/org/apache/maven/plugins/war/packaging/OverlayPackagingTask.java
+++ b/src/main/java/org/apache/maven/plugins/war/packaging/OverlayPackagingTask.java
@@ -105,7 +105,7 @@
 
     /**
      * Unpacks the specified overlay.
-     * <p/>
+     * 
      * Makes sure to skip the unpack process if the overlay has already been unpacked.
      *
      * @param context the packaging context
diff --git a/src/main/java/org/apache/maven/plugins/war/packaging/WarPackagingTask.java b/src/main/java/org/apache/maven/plugins/war/packaging/WarPackagingTask.java
index f00ae44..d2c0da7 100644
--- a/src/main/java/org/apache/maven/plugins/war/packaging/WarPackagingTask.java
+++ b/src/main/java/org/apache/maven/plugins/war/packaging/WarPackagingTask.java
@@ -33,7 +33,7 @@
 
     /**
      * Performs the packaging for the specified task.
-     * <p/>
+     * 
      * The task is responsible to update the packaging context, namely with the files that have been copied.
      *
      * @param context the packaging context
diff --git a/src/main/java/org/apache/maven/plugins/war/packaging/WarPostPackagingTask.java b/src/main/java/org/apache/maven/plugins/war/packaging/WarPostPackagingTask.java
index f100032..8723049 100644
--- a/src/main/java/org/apache/maven/plugins/war/packaging/WarPostPackagingTask.java
+++ b/src/main/java/org/apache/maven/plugins/war/packaging/WarPostPackagingTask.java
@@ -33,7 +33,7 @@
 
     /**
      * Executes the post packaging task.
-     * <p/>
+     * 
      * The packaging context hold all information regarding the webapp that has been packaged.
      *
      * @param context the packaging context
diff --git a/src/main/java/org/apache/maven/plugins/war/packaging/WarProjectPackagingTask.java b/src/main/java/org/apache/maven/plugins/war/packaging/WarProjectPackagingTask.java
index 2c6cf88..7e0b03e 100644
--- a/src/main/java/org/apache/maven/plugins/war/packaging/WarProjectPackagingTask.java
+++ b/src/main/java/org/apache/maven/plugins/war/packaging/WarProjectPackagingTask.java
@@ -32,9 +32,14 @@
 import org.codehaus.plexus.util.StringUtils;
 
 /**
- * Handles the project own resources, that is: <ul <li>The list of web resources, if any</li> <li>The content of the
- * webapp directory if it exists</li> <li>The custom deployment descriptor(s), if any</li> <li>The content of the
- * classes directory if it exists</li> <li>The dependencies of the project</li> </ul>
+ * Handles the project own resources, that is: 
+ * <ul>
+ * <li>The list of web resources, if any</li>
+ * <li>The content of the webapp directory if it exists</li>
+ * <li>The custom deployment descriptor(s), if any</li>
+ * <li>The content of the classes directory if it exists</li>
+ * <li>The dependencies of the project</li>
+ * </ul>
  *
  * @author Stephane Nicoll
  * @version $Id$
diff --git a/src/main/java/org/apache/maven/plugins/war/util/PathSet.java b/src/main/java/org/apache/maven/plugins/war/util/PathSet.java
index ab64680..ebf5469 100644
--- a/src/main/java/org/apache/maven/plugins/war/util/PathSet.java
+++ b/src/main/java/org/apache/maven/plugins/war/util/PathSet.java
@@ -31,7 +31,7 @@
 
 /**
  * Set of file's paths.
- * <p/>
+ * 
  * The class extends functionality of a "normal" set of strings by a process of the paths normalization. All paths are
  * converted to unix form (slashes) and they don't start with starting /.
  *
@@ -50,7 +50,6 @@
 
     /**
      * The method normalizes the path.
-     * <p/>
      * <ul>
      * <li>changes directory separator to unix's separator(/)</li>
      * <li>deletes all trailing slashes</li>
@@ -220,7 +219,7 @@
 
     /**
      * Adds given prefix to all paths in the set.
-     * <p/>
+     * 
      * The prefix should be ended by '/'. The generated paths are normalized.
      *
      * @param prefix to be added to all items
@@ -262,7 +261,7 @@
     /*-------------------- Universal static mathods ------------------------*/
     /**
      * The method normalizes the path.
-     * <p/>
+     * 
      * <ul>
      * <li>changes directory separator to unix's separator(/)</li>
      * <li>deletes all trailing slashes</li>
diff --git a/src/main/java/org/apache/maven/plugins/war/util/WebappStructure.java b/src/main/java/org/apache/maven/plugins/war/util/WebappStructure.java
index 13e20f8..5d9a4f9 100644
--- a/src/main/java/org/apache/maven/plugins/war/util/WebappStructure.java
+++ b/src/main/java/org/apache/maven/plugins/war/util/WebappStructure.java
@@ -35,7 +35,7 @@
 /**
  * Represents the structure of a web application composed of multiple overlays. Each overlay is registered within this
  * structure with the set of files it holds.
- * <p/>
+ * 
  * Note that this structure is persisted to disk at each invocation to store which owner holds which path (file).
  *
  * @author Stephane Nicoll
@@ -149,10 +149,10 @@
     /**
      * Forces the registration of the specified path for the specified owner. If the file is not registered yet, a
      * simple registration is performed. If the file already exists, the owner changes to the specified one.
-     * <p/>
+     * <p>
      * Beware that the semantic of the return boolean is different than the one from
      * {@link #registerFile(String, String)}; returns <tt>true</tt> if an owner replacement was made and <tt>false</tt>
-     * if the file was simply registered for the first time.
+     * if the file was simply registered for the first time.</p>
      *
      * @param id the owner of the path
      * @param path the relative path from the webapp root directory
@@ -249,9 +249,10 @@
     /**
      * Returns the owners. Note that this the returned {@link Set} may be inconsistent since it represents a persistent
      * cache across multiple invocations.
-     * <p/>
+     * <p>
      * For instance, if an overlay was removed in this execution, it will be still be there till the cache is cleaned.
      * This happens when the clean mojo is invoked.
+     * </p>
      *
      * @return the list of owners
      */
@@ -384,8 +385,9 @@
     /**
      * Returns the cached target file name that matches the specified dependency, that is the target file name of the
      * previous run.
-     * <p/>
+     * <p>
      * The dependency object may have changed so the comparison is based on basic attributes of the dependency.
+     * </p>
      *
      * @param dependency a dependency
      * @return the target file name of the last run for this dependency
@@ -492,7 +494,7 @@
 
         /**
          * Called if the <tt>targetFilename</tt> for the specified <tt>ownerId</tt> has been registered successfully.
-         * <p/>
+         * 
          * This means that the <tt>targetFilename</tt> was unknown and has been registered successfully.
          *
          * @param ownerId the ownerId
@@ -504,7 +506,7 @@
 
         /**
          * Called if the <tt>targetFilename</tt> for the specified <tt>ownerId</tt> has already been registered.
-         * <p/>
+         * 
          * This means that the <tt>targetFilename</tt> was known and belongs to the specified owner.
          *
          * @param ownerId the ownerId
@@ -515,9 +517,10 @@
             throws IOException;
 
         /**
+         * <p>
          * Called if the registration of the <tt>targetFilename</tt> for the specified <tt>ownerId</tt> has been refused
          * since the path already belongs to the <tt>actualOwnerId</tt>.
-         * <p/>
+         * </p> 
          * This means that the <tt>targetFilename</tt> was known and does not belong to the specified owner.
          *
          * @param ownerId the ownerId
@@ -531,7 +534,7 @@
         /**
          * Called if the <tt>targetFilename</tt> for the specified <tt>ownerId</tt> has been registered successfully by
          * superseding a <tt>deprecatedOwnerId</tt>, that is the previous owner of the file.
-         * <p/>
+         * 
          * This means that the <tt>targetFilename</tt> was known but for another owner. This usually happens after a
          * project's configuration change. As a result, the file has been registered successfully to the new owner.
          *
@@ -546,7 +549,7 @@
         /**
          * Called if the <tt>targetFilename</tt> for the specified <tt>ownerId</tt> has been registered successfully by
          * superseding a <tt>unknownOwnerId</tt>, that is an owner that does not exist anymore in the current project.
-         * <p/>
+         * 
          * This means that the <tt>targetFilename</tt> was known but for an owner that does not exist anymore. Hence the
          * file has been registered successfully to the new owner.
          *
diff --git a/src/site/apt/index.apt.vm b/src/site/apt/index.apt.vm
index b0f1e98..713db3e 100644
--- a/src/site/apt/index.apt.vm
+++ b/src/site/apt/index.apt.vm
@@ -29,49 +29,59 @@
 ${project.name}
 
  The WAR Plugin is responsible for collecting all artifact dependencies, classes
- and resources of the web application and packaging them into a web application archive.
+ and resources of the web application and packaging them into a web application 
+ archive.
 
 * Goals Overview
 
- * {{{./war-mojo.html}war:war}} is the default goal invoked during the <<<package>>> phase for projects with a packaging
-   type of <<<war>>>. It builds a WAR file.
+ * {{{./war-mojo.html}war:war}} is the default goal invoked during the 
+   <<<package>>> phase for projects with a packaging type of <<<war>>>. 
+   It builds a WAR file.
 
- * {{{./exploded-mojo.html}war:exploded}} is generally used to speed up testing during the developement phase by creating
-   an exploded webapp in a specified directory.
+ * {{{./exploded-mojo.html}war:exploded}} is generally used to speed up 
+   testing during the developement phase by creating an exploded webapp 
+   in a specified directory.
 
- * {{{./inplace-mojo.html}war:inplace}} another variation of <<<war:explode>>> where the webapp is instead generated in the
-   web application source directory, which is <<<src/main/webapp>>> by default.
-
- * {{{./manifest-mojo.html}war:manifest}} generates a manifest for this webapp. The manifest file is created in the
-   web application source directory.
+ * {{{./inplace-mojo.html}war:inplace}} another variation of <<<war:explode>>> 
+   where the webapp is instead generated in the web application source directory, 
+   which is <<<src/main/webapp>>> by default.
 
  []
 
+ Hint for release 3.0.0: The goal <<<war:manifest>>> has been removed
+ cause it violated the principle generating files into <<<src/>>> folder.
+ Furthermore everything can be done by using an appropriate configuration
+ for the {{{./war-mojo.html#archive}war:war archive}}.
+
+
 * Usage
 
-  General instructions on how to use the WAR Plugin can be found on the {{{./usage.html}usage page}}. Some more
-  specific use cases are described in the examples given below. To share common resources across multiple web
-  applications, see the documentation about using {{{./overlays.html}overlays}}. Last but not least, users occasionally
-  contribute additional examples, tips or errata to the
-  {{{http://docs.codehaus.org/display/MAVENUSER/WAR+Plugin}plugin's wiki page}}.
+  General instructions on how to use the WAR Plugin can be found on the 
+  {{{./usage.html}usage page}}. Some more specific use cases are described in the 
+  examples given below. To share common resources across multiple web applications, 
+  see the documentation about using {{{./overlays.html}overlays}}.
 
-  In case you still have questions regarding the plugin's usage, please have a look at the {{{./faq.html}FAQ}} and feel
-  free to contact the {{{./mail-lists.html}user mailing list}}. The posts to the mailing list are archived and could
-  already contain the answer to your question as part of an older thread. Hence, it is also worth browsing/searching
+  In case you still have questions regarding the plugin's usage, please have a look at the 
+  {{{./faq.html}FAQ}} and feel free to contact the {{{./mail-lists.html}user mailing list}}. 
+  The posts to the mailing list are archived and could already contain the answer to your 
+  question as part of an older thread. Hence, it is also worth browsing/searching
   the {{{./mail-lists.html}mail archive}}.
 
-  If you feel like the plugin is missing a feature or has a defect, you can fill a feature request or bug report in our
-  {{{./issue-tracking.html}issue tracker}}. When creating a new issue, please provide a comprehensive description of your
-  concern. Especially for fixing bugs it is crucial that the developers can reproduce your problem. For this reason,
-  entire debug logs, POMs or most preferably little demo projects attached to the issue are very much appreciated.
-  Of course, patches are welcome, too. Contributors can check out the project from our
-  {{{./source-repository.html}source repository}} and will find supplementary information in the
+  If you feel like the plugin is missing a feature or has a defect, you can fill a 
+  feature request or bug report in our {{{./issue-tracking.html}issue tracker}}. 
+  When creating a new issue, please provide a comprehensive description of your
+  concern. Especially for fixing bugs it is crucial that the developers can 
+  reproduce your problem. For this reason, entire debug logs, POMs or most 
+  preferably little demo projects attached to the issue are very much appreciated.
+  Of course, patches are welcome, too. Contributors can check out the project from 
+  our {{{./source-repository.html}source repository}} and will find supplementary 
+  information in the
   {{{http://maven.apache.org/guides/development/guide-helping.html}guide to helping with Maven}}.
 
 * Examples
 
- To provide you with better understanding on some usages of the Maven WAR Plugin,
- you can take a look into the following examples:
+  To provide you with better understanding on some usages of the Maven WAR Plugin,
+  you can take a look into the following examples:
 
  * {{{./examples/adding-filtering-webresources.html}Adding and Filtering External Web Resources}}
 
diff --git a/src/site/site.xml b/src/site/site.xml
index 00a5559..2f81f26 100644
--- a/src/site/site.xml
+++ b/src/site/site.xml
@@ -23,31 +23,6 @@
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/DECORATION/1.0.0 http://maven.apache.org/xsd/decoration-1.0.0.xsd">
 
-  <bannerLeft>
-    <src>http://maven.apache.org/images/apache-maven-project.png</src>
-    <href>http://www.apache.org/</href>
-  </bannerLeft>
-
-  <bannerRight>
-    <src>http://maven.apache.org/images/maven-logo-black-on-white.png</src>
-    <href>http://maven.apache.org/</href>
-  </bannerRight>
-  <skin>
-    <groupId>org.apache.maven.skins</groupId>
-    <artifactId>maven-fluido-skin</artifactId>
-    <version>1.4</version>
-  </skin>
-
-  <custom>
-    <fluidoSkin>
-      <sourceLineNumbersEnabled>true</sourceLineNumbersEnabled>
-      <googlePlusOne />
-      <googleSearch>
-        <sitesearch/>
-      </googleSearch>
-    </fluidoSkin>
-  </custom>
-
   <body>
     <menu name="Overview">
       <item name="Introduction" href="index.html"/>
diff --git a/src/test/java/org/apache/maven/plugins/war/AbstractWarExplodedMojoTest.java b/src/test/java/org/apache/maven/plugins/war/AbstractWarExplodedMojoTest.java
index ec0f43b..0372511 100644
--- a/src/test/java/org/apache/maven/plugins/war/AbstractWarExplodedMojoTest.java
+++ b/src/test/java/org/apache/maven/plugins/war/AbstractWarExplodedMojoTest.java
@@ -65,7 +65,7 @@
 
     /**
      * Configures the exploded mojo for the specified test.
-     * <p/>
+     * 
      * If the <tt>sourceFiles</tt> parameter is <tt>null</tt>, sample JSPs are created by default.
      *
      * @param testId the id of the test
@@ -239,7 +239,7 @@
 
     /**
      * Builds the list of files and directories from the specified dir.
-     * <p/>
+     * 
      * Note that the filter is not used the usual way. If the filter does not accept the current file, it's not added
      * but yet the subdirectories are added if any.
      *
diff --git a/src/test/java/org/apache/maven/plugins/war/AbstractWarMojoTest.java b/src/test/java/org/apache/maven/plugins/war/AbstractWarMojoTest.java
index 30ec2e2..2afe122 100644
--- a/src/test/java/org/apache/maven/plugins/war/AbstractWarMojoTest.java
+++ b/src/test/java/org/apache/maven/plugins/war/AbstractWarMojoTest.java
@@ -55,13 +55,13 @@
     /**
      * initialize required parameters
      *
-     * @param mojo
-     * @param filters
-     * @param classesDir
-     * @param webAppSource
-     * @param webAppDir
-     * @param project
-     * @throws Exception
+     * @param mojo The mojo to be tested.
+     * @param filters The list of filters.
+     * @param classesDir The classes directory.
+     * @param webAppSource The webAppSource.
+     * @param webAppDir The webAppDir folder.
+     * @param project The Maven project.
+     * @throws Exception in case of errors
      */
     protected void configureMojo( AbstractWarMojo mojo, List<String> filters, File classesDir, File webAppSource,
                                   File webAppDir, MavenProjectBasicStub project )
@@ -87,10 +87,10 @@
     /**
      * create an isolated xml dir
      *
-     * @param id
-     * @param xmlFiles
-     * @return
-     * @throws Exception
+     * @param id The id.
+     * @param xmlFiles array of xml files.
+     * @return The created file.
+     * @throws Exception in case of errors.
      */
     protected File createXMLConfigDir( String id, String[] xmlFiles )
         throws Exception
@@ -128,9 +128,10 @@
     /**
      * create an isolated web source with a sample jsp file
      *
-     * @param id
-     * @return
-     * @throws Exception
+     * @param id The id.
+     * @param createSamples Create example files yes or no.
+     * @return The created file.
+     * @throws Exception in case of errors.
      */
     protected File createWebAppSource( String id, boolean createSamples )
         throws Exception
@@ -156,10 +157,10 @@
     /**
      * create a class directory with or without a sample class
      *
-     * @param id
-     * @param empty
-     * @return
-     * @throws Exception
+     * @param id The id.
+     * @param empty true to create a class files false otherwise.
+     * @return The created class file.
+     * @throws Exception in case of errors.
      */
     protected File createClassesDir( String id, boolean empty )
         throws Exception
@@ -200,8 +201,7 @@
     }
 
     /**
-     * Generates test war
-     * <p/>
+     * Generates test war.
      * Generates war with such a structure:
      * <ul>
      * <li>jsp
@@ -238,7 +238,6 @@
      * </ul>
      * </li>
      * </ul>
-     * <p/>
      * Each of the files will contain: id+'-'+path
      *
      * @param id the id of the overlay containing the full structure
diff --git a/src/test/java/org/apache/maven/plugins/war/WarExplodedMojoFilteringTest.java b/src/test/java/org/apache/maven/plugins/war/WarExplodedMojoFilteringTest.java
index 554e7d5..e68563f 100644
--- a/src/test/java/org/apache/maven/plugins/war/WarExplodedMojoFilteringTest.java
+++ b/src/test/java/org/apache/maven/plugins/war/WarExplodedMojoFilteringTest.java
@@ -49,7 +49,7 @@
     }
 
     /**
-     * @throws Exception
+     * @throws Exception in case of an error.
      */
     public void testExplodedWar_WithResourceFiltering()
         throws Exception
diff --git a/src/test/java/org/apache/maven/plugins/war/WarExplodedMojoTest.java b/src/test/java/org/apache/maven/plugins/war/WarExplodedMojoTest.java
index 8d8525b..5785804 100644
--- a/src/test/java/org/apache/maven/plugins/war/WarExplodedMojoTest.java
+++ b/src/test/java/org/apache/maven/plugins/war/WarExplodedMojoTest.java
@@ -58,7 +58,7 @@
     }
 
     /**
-     * @throws Exception
+     * @throws Exception in case of an error.
      */
     public void testSimpleExplodedWar()
         throws Exception
@@ -103,7 +103,7 @@
     }
 
     /**
-     * @throws Exception
+     * @throws Exception in case of an error.
      */
     public void testSimpleExplodedWarWTargetPath()
         throws Exception
@@ -147,7 +147,7 @@
     }
 
     /**
-     * @throws Exception
+     * @throws Exception in case of an error.
      */
     public void testExplodedWar_WithCustomWebXML()
         throws Exception
@@ -185,7 +185,7 @@
     }
 
     /**
-     * @throws Exception
+     * @throws Exception in case of an error.
      */
     public void testExplodedWar_WithContainerConfigXML()
         throws Exception
@@ -223,7 +223,7 @@
     }
 
     /**
-     * @throws Exception
+     * @throws Exception in case of an error.
      */
     public void testExplodedWar_WithSimpleExternalWARFile()
         throws Exception
@@ -270,6 +270,7 @@
 
     /**
      * Merge a dependent WAR when a file in the war source directory overrides one found in the WAR.
+     * @throws Exception in case of an error.
      */
     public void testExplodedWarMergeWarLocalFileOverride()
         throws Exception
@@ -374,7 +375,7 @@
     // }
 
     /**
-     * @throws Exception
+     * @throws Exception in case of an error.
      */
     public void testExplodedWar_WithEJB()
         throws Exception
@@ -449,7 +450,7 @@
     }
 
     /**
-     * @throws Exception
+     * @throws Exception in case of an error.
      */
     public void testExplodedWar_WithEJBClient()
         throws Exception
@@ -487,7 +488,7 @@
     }
 
     /**
-     * @throws Exception
+     * @throws Exception in case of an error.
      */
     public void testExplodedWar_WithTLD()
         throws Exception
@@ -525,7 +526,7 @@
     }
 
     /**
-     * @throws Exception
+     * @throws Exception in case of an error.
      */
     public void testExplodedWar_WithPAR()
         throws Exception
@@ -562,6 +563,9 @@
         expectedPARArtifact.delete();
     }
 
+    /**
+     * @throws Exception in case of an error.
+     */
     public void testExplodedWarWithAar()
         throws Exception
     {
@@ -599,6 +603,9 @@
         expectedJarArtifact.delete();
     }
 
+    /**
+     * @throws Exception in case of an error.
+     */
     public void testExplodedWarWithMar()
         throws Exception
     {
@@ -636,6 +643,9 @@
         expectedJarArtifact.delete();
     }
 
+    /**
+     * @throws Exception in case of an error.
+     */
     public void testExplodedWarWithXar()
         throws Exception
     {
@@ -674,7 +684,7 @@
     }
 
     /**
-     * @throws Exception
+     * @throws Exception in case of an error.
      */
     public void testExplodedWar_WithDuplicateDependencies()
         throws Exception
@@ -720,7 +730,7 @@
     }
 
     /**
-     * @throws Exception
+     * @throws Exception in case of an error.
      */
     public void testExplodedWar_DuplicateWithClassifier()
         throws Exception
@@ -772,7 +782,7 @@
     }
 
     /**
-     * @throws Exception
+     * @throws Exception in case of an error.
      */
     public void testExplodedWar_WithClasses()
         throws Exception
@@ -804,6 +814,9 @@
         expectedClass.delete();
     }
 
+    /**
+     * @throws Exception in case of an error.
+     */
     public void testExplodedWar_WithSourceIncludeExclude()
         throws Exception
     {
@@ -838,6 +851,9 @@
         expectedMETAINFDir.delete();
     }
 
+    /**
+     * @throws Exception in case of an error.
+     */
     public void testExplodedWar_WithWarDependencyIncludeExclude()
         throws Exception
     {
@@ -892,6 +908,9 @@
         expectedExcludedWarfile.delete();
     }
 
+    /**
+     * @throws Exception in case of an error.
+     */
     public void testExplodedWarWithSourceModificationCheck()
         throws Exception
     {
@@ -945,6 +964,9 @@
         expectedWebSource2File.delete();
     }
 
+    /**
+     * @throws Exception in case of an error.
+     */
     public void testExplodedWarWithOutputFileNameMapping()
         throws Exception
     {
@@ -983,7 +1005,7 @@
     }
 
     /**
-     * @throws Exception
+     * @throws Exception in case of an error.
      */
     public void testExplodedWarWithOutputFileNameMappingAndDuplicateDependencies()
         throws Exception
diff --git a/src/test/java/org/apache/maven/plugins/war/WarInPlaceMojoTest.java b/src/test/java/org/apache/maven/plugins/war/WarInPlaceMojoTest.java
index 4672332..048dc1e 100644
--- a/src/test/java/org/apache/maven/plugins/war/WarInPlaceMojoTest.java
+++ b/src/test/java/org/apache/maven/plugins/war/WarInPlaceMojoTest.java
@@ -55,9 +55,6 @@
         // see setUp
     }
 
-    /**
-     * @throws Exception
-     */
     public void testSimpleExplodedInplaceWar()
         throws Exception
     {
diff --git a/src/test/java/org/apache/maven/plugins/war/WarOverlaysTest.java b/src/test/java/org/apache/maven/plugins/war/WarOverlaysTest.java
index 869b027..25768da 100644
--- a/src/test/java/org/apache/maven/plugins/war/WarOverlaysTest.java
+++ b/src/test/java/org/apache/maven/plugins/war/WarOverlaysTest.java
@@ -161,7 +161,7 @@
 
     /**
      * Merge a dependent WAR when a file in the war source directory overrides one found in the WAR.
-     * <p/>
+     * 
      * It also tests completeness of the resulting war as well as the proper order of dependencies.
      *
      * @throws Exception if any error occurs
@@ -186,7 +186,7 @@
 
     /**
      * Tests that specifying the overlay explicitely has the same behavior as the default (i.e. order, etc).
-     * <p/>
+     * 
      * The default project is not specified in this case so it is processed first by default
      *
      * @throws Exception if an error occurs
@@ -219,7 +219,7 @@
 
     /**
      * Tests that specifying the overlay explicitely has the same behavior as the default (i.e. order, etc).
-     * <p/>
+     * 
      * The default project is explicitely specified so this should match the default.
      *
      * @throws Exception if an error occurs
@@ -555,7 +555,7 @@
 
     /**
      * Asserts that the content of an overlayed file is correct.
-     * <p/>
+     * 
      * Note that the <tt>filePath</tt> is relative to both the webapp directory and the overlayed directory, defined by
      * the <tt>overlayId</tt>.
      *
@@ -576,7 +576,7 @@
 
     /**
      * Asserts that the content of an overlayed file is correct.
-     * <p/>
+     * 
      * Note that the <tt>filePath</tt> is relative to both the webapp directory and the overlayed directory, defined by
      * the <tt>overlayId</tt>.
      *
