diff --git a/pom.xml b/pom.xml
index 3ad8436..ddfea8f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -129,16 +129,12 @@
 
   <properties>
     <maven-scm.version>1.2</maven-scm.version>
-    <doxiaVersion>1.0-alpha-11</doxiaVersion>
+    <doxiaVersion>1.1.1</doxiaVersion>
     <mavenVersion>2.0.6</mavenVersion>
   </properties>
 
   <dependencies>
-    <dependency>
-      <groupId>org.codehaus.plexus</groupId>
-      <artifactId>plexus-utils</artifactId>
-      <version>1.5.6</version>
-    </dependency>
+    <!-- maven -->
     <dependency>
       <groupId>org.apache.maven</groupId>
       <artifactId>maven-project</artifactId>
@@ -159,18 +155,20 @@
       <artifactId>maven-settings</artifactId>
       <version>${mavenVersion}</version>
     </dependency>
-        
     <dependency>
       <groupId>org.apache.maven.reporting</groupId>
       <artifactId>maven-reporting-impl</artifactId>
-      <version>2.0</version>
+      <version>2.0.4.2</version>
     </dependency>
+
+    <!-- doxia -->
     <dependency>
       <groupId>org.apache.maven.doxia</groupId>
       <artifactId>doxia-sink-api</artifactId>
       <version>${doxiaVersion}</version>
     </dependency>
 
+    <!-- scm -->
     <dependency>
       <groupId>org.apache.maven.scm</groupId>
       <artifactId>maven-scm-api</artifactId>
@@ -195,7 +193,7 @@
       <groupId>org.apache.maven.scm</groupId>
       <artifactId>maven-scm-provider-gitexe</artifactId>
       <version>${maven-scm.version}</version>
-    </dependency>    
+    </dependency>
     <dependency>
       <groupId>org.apache.maven.scm</groupId>
       <artifactId>maven-scm-provider-hg</artifactId>
@@ -241,7 +239,14 @@
       <artifactId>maven-scm-provider-vss</artifactId>
       <version>${maven-scm.version}</version>
     </dependency>
-    
+
+    <!-- Plexus -->
+    <dependency>
+      <groupId>org.codehaus.plexus</groupId>
+      <artifactId>plexus-utils</artifactId>
+      <version>1.5.6</version>
+    </dependency>
+
     <!-- test dependencies -->
     <dependency>
       <groupId>org.apache.maven.plugin-testing</groupId>
@@ -249,7 +254,6 @@
       <version>1.2</version>
       <scope>test</scope>
     </dependency>
-    
   </dependencies>
 
   <reporting>
diff --git a/src/main/java/org/apache/maven/plugin/changelog/ChangeLogReport.java b/src/main/java/org/apache/maven/plugin/changelog/ChangeLogReport.java
index 78a3373..cc61de8 100644
--- a/src/main/java/org/apache/maven/plugin/changelog/ChangeLogReport.java
+++ b/src/main/java/org/apache/maven/plugin/changelog/ChangeLogReport.java
@@ -44,6 +44,8 @@
 import java.util.ResourceBundle;
 import java.util.StringTokenizer;
 
+import org.apache.maven.doxia.sink.Sink;
+import org.apache.maven.doxia.siterenderer.Renderer;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.reporting.AbstractMavenReport;
@@ -65,8 +67,6 @@
 import org.apache.maven.scm.repository.ScmRepository;
 import org.apache.maven.settings.Server;
 import org.apache.maven.settings.Settings;
-import org.codehaus.doxia.sink.Sink;
-import org.codehaus.doxia.site.renderer.SiteRenderer;
 import org.codehaus.plexus.util.ReaderFactory;
 import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.plexus.util.WriterFactory;
@@ -240,7 +240,7 @@
     /**
      * @component
      */
-    private SiteRenderer siteRenderer;
+    private Renderer siteRenderer;
 
     /**
      * @parameter expression="${settings.offline}"
@@ -302,9 +302,7 @@
      */
     private Properties systemProperties;
 
-    /**
-     * @see org.apache.maven.reporting.AbstractMavenReport#executeReport(java.util.Locale)
-     */
+    /** {@inheritDoc} */
     public void executeReport( Locale locale )
         throws MavenReportException
     {
@@ -440,7 +438,7 @@
         changelogXml.append( "\n</changelog>" );
 
         outputXML.getParentFile().mkdirs();
-        
+
         //PrintWriter pw = new PrintWriter( new BufferedOutputStream( new FileOutputStream( outputXML ) ) );
         //pw.write( changelogXml.toString() );
         //pw.flush();
@@ -892,7 +890,7 @@
      */
     private void doChangedSet( ChangeLogSet set, ResourceBundle bundle, Sink sink )
     {
-        sink.section1();
+        sink.section2();
 
         doChangeSetTitle( set, bundle, sink );
 
@@ -900,7 +898,7 @@
 
         doChangedSetTable( set.getChangeSets(), bundle, sink );
 
-        sink.section1_();
+        sink.section2_();
     }
 
     /**
@@ -1381,17 +1379,13 @@
         return absPath + newTarget;
     }
 
-    /**
-     * @see org.apache.maven.reporting.AbstractMavenReport#getProject()
-     */
+    /** {@inheritDoc} */
     protected MavenProject getProject()
     {
         return project;
     }
 
-    /**
-     * @see org.apache.maven.reporting.AbstractMavenReport#getOutputDirectory()
-     */
+    /** {@inheritDoc} */
     protected String getOutputDirectory()
     {
         if ( !outputDirectory.isAbsolute() )
@@ -1402,33 +1396,25 @@
         return outputDirectory.getAbsolutePath();
     }
 
-    /**
-     * @see org.apache.maven.reporting.AbstractMavenReport#getSiteRenderer()
-     */
-    protected SiteRenderer getSiteRenderer()
+    /** {@inheritDoc} */
+    protected Renderer getSiteRenderer()
     {
         return siteRenderer;
     }
 
-    /**
-     * @see org.apache.maven.reporting.MavenReport#getDescription(java.util.Locale)
-     */
+    /** {@inheritDoc} */
     public String getDescription( Locale locale )
     {
         return getBundle( locale ).getString( "report.changelog.description" );
     }
 
-    /**
-     * @see org.apache.maven.reporting.MavenReport#getName(java.util.Locale)
-     */
+    /** {@inheritDoc} */
     public String getName( Locale locale )
     {
         return getBundle( locale ).getString( "report.changelog.name" );
     }
 
-    /**
-     * @see org.apache.maven.reporting.MavenReport#getOutputName()
-     */
+    /** {@inheritDoc} */
     public String getOutputName()
     {
         return "changelog";
diff --git a/src/main/java/org/apache/maven/plugin/changelog/DeveloperActivityReport.java b/src/main/java/org/apache/maven/plugin/changelog/DeveloperActivityReport.java
index 6f90182..f5b4ef7 100644
--- a/src/main/java/org/apache/maven/plugin/changelog/DeveloperActivityReport.java
+++ b/src/main/java/org/apache/maven/plugin/changelog/DeveloperActivityReport.java
@@ -19,11 +19,11 @@
  * under the License.
  */
 
+import org.apache.maven.doxia.sink.Sink;
 import org.apache.maven.model.Developer;
 import org.apache.maven.scm.ChangeFile;
 import org.apache.maven.scm.ChangeSet;
 import org.apache.maven.scm.command.changelog.ChangeLogSet;
-import org.codehaus.doxia.sink.Sink;
 
 import java.util.Collection;
 import java.util.HashMap;
@@ -55,25 +55,19 @@
 
     private HashMap files;
 
-    /**
-     * @see org.apache.maven.reporting.MavenReport#getDescription(java.util.Locale)
-     */
+    /** {@inheritDoc} */
     public String getDescription( Locale locale )
     {
         return getBundle( locale ).getString( "report.dev-activity.description" );
     }
 
-    /**
-     * @see org.apache.maven.reporting.MavenReport#getName(java.util.Locale)
-     */
+    /** {@inheritDoc} */
     public String getName( Locale locale )
     {
         return getBundle( locale ).getString( "report.dev-activity.name" );
     }
 
-    /**
-     * @see org.apache.maven.reporting.MavenReport#getOutputName()
-     */
+    /** {@inheritDoc} */
     public String getOutputName()
     {
         return "dev-activity";
@@ -150,7 +144,7 @@
         sink.section1_();
         sink.body_();
         sink.flush();
-        sink.table_();
+        sink.close();
     }
 
     /**
diff --git a/src/main/java/org/apache/maven/plugin/changelog/FileActivityReport.java b/src/main/java/org/apache/maven/plugin/changelog/FileActivityReport.java
index ab03fe2..4656f10 100644
--- a/src/main/java/org/apache/maven/plugin/changelog/FileActivityReport.java
+++ b/src/main/java/org/apache/maven/plugin/changelog/FileActivityReport.java
@@ -19,10 +19,10 @@
  * under the License.
  */
 
+import org.apache.maven.doxia.sink.Sink;
 import org.apache.maven.scm.ChangeFile;
 import org.apache.maven.scm.ChangeSet;
 import org.apache.maven.scm.command.changelog.ChangeLogSet;
-import org.codehaus.doxia.sink.Sink;
 
 import java.util.Collection;
 import java.util.Collections;
@@ -42,25 +42,19 @@
 public class FileActivityReport
     extends ChangeLogReport
 {
-    /**
-     * @see org.apache.maven.reporting.MavenReport#getDescription(java.util.Locale)
-     */
+    /** {@inheritDoc} */
     public String getDescription( Locale locale )
     {
         return getBundle( locale ).getString( "report.file-activity.description" );
     }
 
-    /**
-     * @see org.apache.maven.reporting.MavenReport#getName(java.util.Locale)
-     */
+    /** {@inheritDoc} */
     public String getName( Locale locale )
     {
         return getBundle( locale ).getString( "report.file-activity.name" );
     }
 
-    /**
-     * @see org.apache.maven.reporting.MavenReport#getOutputName()
-     */
+    /** {@inheritDoc} */
     public String getOutputName()
     {
         return "file-activity";
@@ -128,7 +122,8 @@
         sink.section1_();
         sink.body_();
 
-        sink.table_();
+        sink.flush();
+        sink.close();
     }
 
     /**
