diff --git a/maven-jxr-plugin/pom.xml b/maven-jxr-plugin/pom.xml
index 8d5b287..e212460 100644
--- a/maven-jxr-plugin/pom.xml
+++ b/maven-jxr-plugin/pom.xml
@@ -1,29 +1,8 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-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.
--->
-
-<project xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd' xmlns='http://maven.apache.org/POM/4.0.0'>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
   <parent>
     <groupId>org.apache.maven.jxr</groupId>
     <artifactId>jxr</artifactId>
-    <version>2.1-SNAPSHOT</version>
+    <version>2.1</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.apache.maven.plugins</groupId>
@@ -34,10 +13,6 @@
   <prerequisites>
     <maven>2.0</maven>
   </prerequisites>
-  <issueManagement>
-    <system>JIRA</system>
-    <url>http://jira.codehaus.org/browse/MJXR</url>
-  </issueManagement>
   <developers>
     <developer>
       <name>Fabrice Bellingard</name>
@@ -57,7 +32,7 @@
     <dependency>
       <groupId>org.apache.maven</groupId>
       <artifactId>maven-jxr</artifactId>
-      <version>2.1-SNAPSHOT</version>
+      <version>2.1</version>
     </dependency>
     <dependency>
       <groupId>org.apache.maven.reporting</groupId>
@@ -84,4 +59,4 @@
       <url>scp://people.apache.org/www/maven.apache.org/plugins/maven-jxr-plugin/</url>
     </site>
   </distributionManagement>
-</project>
+</project>
\ No newline at end of file
diff --git a/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/AbstractJxrReport.java b/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/AbstractJxrReport.java
index ec4a652..1dbd83e 100644
--- a/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/AbstractJxrReport.java
+++ b/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/AbstractJxrReport.java
@@ -258,7 +258,8 @@
             jxr.setIncludes( (String[]) includes.toArray( new String[0] ) );
         }
 
-        jxr.xref( sourceDirs, templateDir, windowTitle, docTitle, getBottomText( project.getInceptionYear(), project.getOrganization() ) );
+        jxr.xref( sourceDirs, templateDir, windowTitle, docTitle,
+                  getBottomText( project.getInceptionYear(), project.getOrganization() ) );
 
         // and finally copy the stylesheet
         copyRequiredResources( destinationDirectory );
diff --git a/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/JxrReport.java b/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/JxrReport.java
index bef84a5..6988b19 100644
--- a/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/JxrReport.java
+++ b/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/JxrReport.java
@@ -90,10 +90,12 @@
      */
     protected List getSourceRoots()
     {
-        if (sourcePath != null) {
-            String[] sourcePathArray = sourcePath.split(";");
-            if (sourcePathArray.length > 0) {
-                return Arrays.asList(sourcePathArray);
+        if ( sourcePath != null )
+        {
+            String[] sourcePathArray = sourcePath.split( ";" );
+            if ( sourcePathArray.length > 0 )
+            {
+                return Arrays.asList( sourcePathArray );
             }
         }
         return sourceDirs;
diff --git a/maven-jxr/pom.xml b/maven-jxr/pom.xml
index 71cea85..f97e8ce 100644
--- a/maven-jxr/pom.xml
+++ b/maven-jxr/pom.xml
@@ -19,12 +19,11 @@
 under the License.
 -->
 
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
   <parent>
     <groupId>org.apache.maven.jxr</groupId>
     <artifactId>jxr</artifactId>
-    <version>2.1-SNAPSHOT</version>
+    <version>2.1</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.apache.maven</groupId>
diff --git a/maven-jxr/src/main/java/org/apache/maven/jxr/DirectoryIndexer.java b/maven-jxr/src/main/java/org/apache/maven/jxr/DirectoryIndexer.java
index 3fa6839..275233b 100644
--- a/maven-jxr/src/main/java/org/apache/maven/jxr/DirectoryIndexer.java
+++ b/maven-jxr/src/main/java/org/apache/maven/jxr/DirectoryIndexer.java
@@ -66,7 +66,7 @@
      * JavaCodeTransform uses this to cross-reference package references
      * with that package's main summary page.
      */
-    final static String INDEX = "package-summary.html";
+    static final String INDEX = "package-summary.html";
 
     /*
      * Path to the root output directory.
@@ -365,11 +365,12 @@
 
                 String className = clazz.getName();
                 Map classInfo = new HashMap();
-                if( clazz.getFilename() != null )
+                if ( clazz.getFilename() != null )
                 {
                     classInfo.put( "filename", clazz.getFilename() );
                 }
-                else {
+                else
+                {
                     classInfo.put( "filename", "" );
                 }
                 classInfo.put( "name", className );
diff --git a/maven-jxr/src/main/java/org/apache/maven/jxr/JXR.java b/maven-jxr/src/main/java/org/apache/maven/jxr/JXR.java
index f385ec0..f059d71 100644
--- a/maven-jxr/src/main/java/org/apache/maven/jxr/JXR.java
+++ b/maven-jxr/src/main/java/org/apache/maven/jxr/JXR.java
@@ -48,8 +48,8 @@
     /**
      * Description of the Notice.
      */
-    public static final String NOTICE = "This page was automatically generated by " +
-        "<a href=\"http://maven.apache.org/\">Maven</a>";
+    public static final String NOTICE = "This page was automatically generated by "
+        + "<a href=\"http://maven.apache.org/\">Maven</a>";
 
     /**
      * The default list of include patterns to use.
@@ -368,7 +368,8 @@
 
         // walk up fromDir to find the common parent
         f = new File( fromDir );
-        if ( !f.isDirectory() ) {
+        if ( !f.isDirectory() )
+        {
             // Passed in a fromDir with a filename on the end - strip it
             f = f.getParentFile();
         }
diff --git a/maven-jxr/src/main/java/org/apache/maven/jxr/JavaCodeTransform.java b/maven-jxr/src/main/java/org/apache/maven/jxr/JavaCodeTransform.java
index 562b952..86fd48f 100644
--- a/maven-jxr/src/main/java/org/apache/maven/jxr/JavaCodeTransform.java
+++ b/maven-jxr/src/main/java/org/apache/maven/jxr/JavaCodeTransform.java
@@ -372,8 +372,8 @@
         {
             if ( LINE_NUMBERS )
             {
-                out.print( "<a name=\"" + linenumber + "\" " + "href=\"#" + linenumber + "\">" + linenumber +
-                    "</a>" + getLineWidth( linenumber ) );
+                out.print( "<a name=\"" + linenumber + "\" " + "href=\"#" + linenumber + "\">" + linenumber
+                    + "</a>" + getLineWidth( linenumber ) );
             }
 
             out.println( this.syntaxHighlight( line ) );
@@ -931,7 +931,7 @@
             String tempString = temp.toString();
 
             // Special handling of css style class definitions
-            if(CLASS_KEYWORD.equals(tempString) && ch == '=')
+            if ( CLASS_KEYWORD.equals( tempString ) && ch == '=' )
             {
                 i++;
             }
@@ -1270,8 +1270,8 @@
                         }
                     }
 
-                    if ( fqpn_package.equals( currentImport.getName() ) &&
-                        currentImport.getClassType( fqpn_class ) != null )
+                    if ( fqpn_package.equals( currentImport.getName() )
+                        && currentImport.getClassType( fqpn_class ) != null )
                     {
                         //then the package we are currently in is the one specified in the string
                         //and the import class is correct.
@@ -1444,13 +1444,13 @@
                 //Create an HREF for explicit classname imports
                 if ( classname != null )
                 {
-                    line = StringUtils.replace( line, classname, "<a href=\"" + pkgHREF + "/" + classname + ".html" +
-                        "\">" + classname + "</a>" );
+                    line = StringUtils.replace( line, classname, "<a href=\"" + pkgHREF + "/" + classname + ".html"
+                        + "\">" + classname + "</a>" );
                 }
 
                 //now replace the given package with a href
-                line = StringUtils.replace( line, pkg, "<a href=\"" + pkgHREF + "/" + DirectoryIndexer.INDEX + "\">" +
-                    pkg + "</a>" );
+                line = StringUtils.replace( line, pkg, "<a href=\"" + pkgHREF + "/" + DirectoryIndexer.INDEX + "\">"
+                    + pkg + "</a>" );
             }
 
         }
diff --git a/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/ClassType.java b/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/ClassType.java
index 25f5024..be09d57 100644
--- a/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/ClassType.java
+++ b/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/ClassType.java
@@ -49,7 +49,7 @@
      * @param name
      * @param filename
      */
-    public ClassType( String name , String filename)
+    public ClassType( String name, String filename )
     {
         this.setName( name );
         this.setFilename( filename );
diff --git a/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/JavaFileImpl.java b/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/JavaFileImpl.java
index 5e54d9e..4929c40 100644
--- a/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/JavaFileImpl.java
+++ b/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/JavaFileImpl.java
@@ -120,7 +120,7 @@
                 {
                     stok.nextToken();
                     this.addClassType( new ClassType( stok.sval,
-                                                      getFilenameWithoutPathOrExtension( this.getFilename()) ) );
+                                                      getFilenameWithoutPathOrExtension( this.getFilename() ) ) );
                 }
 
             }
diff --git a/maven-jxr/src/main/java/org/apache/maven/jxr/util/SimpleWordTokenizer.java b/maven-jxr/src/main/java/org/apache/maven/jxr/util/SimpleWordTokenizer.java
index ca39401..bc96dae 100644
--- a/maven-jxr/src/main/java/org/apache/maven/jxr/util/SimpleWordTokenizer.java
+++ b/maven-jxr/src/main/java/org/apache/maven/jxr/util/SimpleWordTokenizer.java
@@ -34,7 +34,7 @@
     /**
      * Description of the Field
      */
-    public final static char[] BREAKERS = {'(', ')', '[', ' ', '{', '}'};
+    public static final char[] BREAKERS = {'(', ')', '[', ' ', '{', '}'};
 
     /**
      * Break the given line into multiple StringUtils
diff --git a/pom.xml b/pom.xml
index 525d75b..b319d42 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,7 +29,7 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.apache.maven.jxr</groupId>
   <artifactId>jxr</artifactId>
-  <version>2.1-SNAPSHOT</version>
+  <version>2.1</version>
   <packaging>pom</packaging>
   <name>Maven JXR Parent</name>
   <issueManagement>
@@ -41,9 +41,9 @@
     <module>maven-jxr-plugin</module>
   </modules>
   <scm>
-    <connection>scm:svn:http://svn.apache.org/repos/asf/maven/jxr/trunk/</connection>
-    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/maven/jxr/trunk/</developerConnection>
-    <url>http://svn.apache.org/viewvc/maven/jxr/trunk/</url>
+    <connection>scm:svn:https://svn.apache.org/repos/asf/maven/pom/tags/jxr-2.1</connection>
+    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/maven/pom/tags/jxr-2.1</developerConnection>
+    <url>https://svn.apache.org/repos/asf/maven/pom/tags/jxr-2.1</url>
   </scm>
   <build>
     <pluginManagement>
