diff --git a/pom.xml b/pom.xml
index ddfea8f..ff3515d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -129,7 +129,7 @@
 
   <properties>
     <maven-scm.version>1.2</maven-scm.version>
-    <doxiaVersion>1.1.1</doxiaVersion>
+    <doxiaVersion>1.0</doxiaVersion>
     <mavenVersion>2.0.6</mavenVersion>
   </properties>
 
diff --git a/src/test/java/org/apache/maven/plugin/changelog/AbstractChangeLogReportTest.java b/src/test/java/org/apache/maven/plugin/changelog/AbstractChangeLogReportTest.java
new file mode 100644
index 0000000..a3ac0ac
--- /dev/null
+++ b/src/test/java/org/apache/maven/plugin/changelog/AbstractChangeLogReportTest.java
@@ -0,0 +1,70 @@
+package org.apache.maven.plugin.changelog;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.Writer;
+
+import org.apache.maven.doxia.site.decoration.DecorationModel;
+import org.apache.maven.doxia.siterenderer.RendererException;
+import org.apache.maven.doxia.siterenderer.SiteRenderingContext;
+import org.apache.maven.doxia.siterenderer.sink.SiteRendererSink;
+import org.apache.maven.plugin.testing.AbstractMojoTestCase;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.WriterFactory;
+
+/*
+ * 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.
+ */
+
+/**
+ * @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
+ * @version $Id$
+ */
+public abstract class AbstractChangeLogReportTest
+    extends AbstractMojoTestCase
+{
+    /**
+     * Renderer the sink from the report mojo.
+     *
+     * @param mojo not null
+     * @param outputHtml not null
+     * @throws RendererException if any
+     * @throws IOException if any
+     */
+    protected void renderer( ChangeLogReport mojo, File outputHtml )
+        throws RendererException, IOException
+    {
+        Writer writer = null;
+        SiteRenderingContext context = new SiteRenderingContext();
+        context.setDecoration( new DecorationModel() );
+        context.setTemplateName( "org/apache/maven/doxia/siterenderer/resources/default-site.vm" );
+
+        try
+        {
+            outputHtml.getParentFile().mkdirs();
+            writer = WriterFactory.newXmlWriter( outputHtml );
+
+            mojo.getSiteRenderer().generateDocument( writer, (SiteRendererSink) mojo.getSink(),
+                                                           context );
+        }
+        finally
+        {
+            IOUtil.close( writer );
+        }
+    }
+}
diff --git a/src/test/java/org/apache/maven/plugin/changelog/ChangeLogReportTest.java b/src/test/java/org/apache/maven/plugin/changelog/ChangeLogReportTest.java
index 9e9b147..cb8d7b7 100644
--- a/src/test/java/org/apache/maven/plugin/changelog/ChangeLogReportTest.java
+++ b/src/test/java/org/apache/maven/plugin/changelog/ChangeLogReportTest.java
@@ -24,7 +24,6 @@
 import org.apache.maven.plugin.changelog.stubs.ScmManagerWithHostStub;
 import org.apache.maven.plugin.Mojo;
 import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.testing.AbstractMojoTestCase;
 import org.apache.maven.scm.manager.ScmManager;
 import org.codehaus.plexus.util.FileUtils;
 
@@ -34,16 +33,34 @@
  * @author Edwin Punzalan
  */
 public class ChangeLogReportTest
-    extends AbstractMojoTestCase
+    extends AbstractChangeLogReportTest
 {
     private ScmManager scmManager;
 
+    /** {@inheritDoc} */
+    protected void setUp()
+        throws Exception
+    {
+        super.setUp();
+
+        scmManager = new ScmManagerStub();
+    }
+
+    /** {@inheritDoc} */
+    protected void tearDown()
+        throws Exception
+    {
+        super.tearDown();
+
+        scmManager = null;
+    }
+
     public void testNoSource()
         throws Exception
     {
         File pluginXmlFile = new File( getBasedir(), "src/test/plugin-configs/changelog/no-source-plugin-config.xml" );
 
-        Mojo mojo = lookupMojo( "changelog", pluginXmlFile );
+        ChangeLogReport mojo = (ChangeLogReport)lookupMojo( "changelog", pluginXmlFile );
 
         assertNotNull( "Mojo found.", mojo );
 
@@ -55,7 +72,11 @@
 
         File outputHtml = new File( outputDir, "changelog.html" );
 
-        assertTrue( "Test html generated", outputHtml.exists() );
+        renderer( mojo, outputHtml );
+
+        assertTrue( outputHtml.getAbsolutePath() + " not generated!", outputHtml.exists() );
+
+        assertTrue( outputHtml.getAbsolutePath() + " is empty!", outputHtml.length() > 0 );
     }
 
     public void testMinConfig()
@@ -176,7 +197,7 @@
     {
         File pluginXmlFile = new File( getBasedir(), "src/test/plugin-configs/changelog/" + pluginXml );
 
-        Mojo mojo = lookupMojo( "changelog", pluginXmlFile );
+        ChangeLogReport mojo = (ChangeLogReport)lookupMojo( "changelog", pluginXmlFile );
 
         assertNotNull( "Mojo found.", mojo );
 
@@ -201,20 +222,10 @@
 
         File outputHtml = new File( outputDir, "changelog.html" );
 
-        assertTrue( "Test html generated", outputHtml.exists() );
-    }
+        renderer( mojo, outputHtml );
 
-    protected void setUp()
-        throws Exception
-    {
-        super.setUp();
+        assertTrue( outputHtml.getAbsolutePath() + " not generated!", outputHtml.exists() );
 
-        scmManager = new ScmManagerStub();
-    }
-
-    protected void tearDown()
-        throws Exception
-    {
-        super.tearDown();
+        assertTrue( outputHtml.getAbsolutePath() + " is empty!", outputHtml.length() > 0 );
     }
 }
diff --git a/src/test/java/org/apache/maven/plugin/changelog/DeveloperActivityReportTest.java b/src/test/java/org/apache/maven/plugin/changelog/DeveloperActivityReportTest.java
index 708d8da..dfc8106 100644
--- a/src/test/java/org/apache/maven/plugin/changelog/DeveloperActivityReportTest.java
+++ b/src/test/java/org/apache/maven/plugin/changelog/DeveloperActivityReportTest.java
@@ -19,8 +19,6 @@
  * under the License.
  */
 
-import org.apache.maven.plugin.testing.AbstractMojoTestCase;
-import org.apache.maven.plugin.Mojo;
 import org.apache.maven.plugin.changelog.stubs.ScmManagerStub;
 import org.apache.maven.scm.manager.ScmManager;
 import org.codehaus.plexus.util.FileUtils;
@@ -31,17 +29,35 @@
  * @author Edwin Punzalan
  */
 public class DeveloperActivityReportTest
-    extends AbstractMojoTestCase
+    extends AbstractChangeLogReportTest
 {
     private ScmManager scmManager;
 
+    /** {@inheritDoc} */
+    protected void setUp()
+        throws Exception
+    {
+        super.setUp();
+
+        scmManager = new ScmManagerStub();
+    }
+
+    /** {@inheritDoc} */
+    protected void tearDown()
+        throws Exception
+    {
+        super.tearDown();
+
+        scmManager = null;
+    }
+
     public void testNoSource()
         throws Exception
     {
         File pluginXmlFile = new File( getBasedir(),
                                        "src/test/plugin-configs/dev-activity/no-source-plugin-config.xml" );
 
-        Mojo mojo = lookupMojo( "dev-activity", pluginXmlFile );
+        DeveloperActivityReport mojo = (DeveloperActivityReport) lookupMojo( "dev-activity", pluginXmlFile );
 
         assertNotNull( "Mojo found.", mojo );
 
@@ -53,7 +69,11 @@
 
         File outputHtml = new File( outputDir, "dev-activity.html" );
 
-        assertTrue( "Test html generated", outputHtml.exists() );
+        renderer( mojo, outputHtml );
+
+        assertTrue( outputHtml.getAbsolutePath() + " not generated!", outputHtml.exists() );
+
+        assertTrue( outputHtml.getAbsolutePath() + " is empty!", outputHtml.length() > 0 );
     }
 
     public void testMinConfig()
@@ -72,7 +92,7 @@
     {
         File pluginXmlFile = new File( getBasedir(), "src/test/plugin-configs/dev-activity/" + pluginXml );
 
-        Mojo mojo = lookupMojo( "dev-activity", pluginXmlFile );
+        DeveloperActivityReport mojo = (DeveloperActivityReport)lookupMojo( "dev-activity", pluginXmlFile );
 
         assertNotNull( "Mojo found.", mojo );
 
@@ -97,14 +117,10 @@
 
         File outputHtml = new File( outputDir, "dev-activity.html" );
 
-        assertTrue( "Test html generated", outputHtml.exists() );
-    }
+        renderer( mojo, outputHtml );
 
-    protected void setUp()
-        throws Exception
-    {
-        super.setUp();
+        assertTrue( outputHtml.getAbsolutePath() + " not generated!", outputHtml.exists() );
 
-        scmManager = new ScmManagerStub();
+        assertTrue( outputHtml.getAbsolutePath() + " is empty!", outputHtml.length() > 0 );
     }
 }
diff --git a/src/test/java/org/apache/maven/plugin/changelog/FileActivityReportTest.java b/src/test/java/org/apache/maven/plugin/changelog/FileActivityReportTest.java
index eed79a9..6218b8f 100644
--- a/src/test/java/org/apache/maven/plugin/changelog/FileActivityReportTest.java
+++ b/src/test/java/org/apache/maven/plugin/changelog/FileActivityReportTest.java
@@ -19,29 +19,45 @@
  * under the License.
  */
 
-import org.apache.maven.plugin.testing.AbstractMojoTestCase;
-import org.apache.maven.plugin.Mojo;
-import org.apache.maven.scm.manager.ScmManager;
-import org.apache.maven.plugin.changelog.stubs.ScmManagerStub;
-import org.codehaus.plexus.util.FileUtils;
-
 import java.io.File;
 
+import org.apache.maven.plugin.changelog.stubs.ScmManagerStub;
+import org.apache.maven.scm.manager.ScmManager;
+import org.codehaus.plexus.util.FileUtils;
+
 /**
  * @author Edwin Punzalan
  */
 public class FileActivityReportTest
-    extends AbstractMojoTestCase
+    extends AbstractChangeLogReportTest
 {
     private ScmManager scmManager;
 
+    /** {@inheritDoc} */
+    protected void setUp()
+        throws Exception
+    {
+        super.setUp();
+
+        scmManager = new ScmManagerStub();
+    }
+
+    /** {@inheritDoc} */
+    protected void tearDown()
+        throws Exception
+    {
+        super.tearDown();
+
+        scmManager = null;
+    }
+
     public void testNoSource()
         throws Exception
     {
-        File pluginXmlFile = new File( getBasedir(),
-                                               "src/test/plugin-configs/file-activity/no-source-plugin-config.xml" );
+        File pluginXmlFile =
+            new File( getBasedir(), "src/test/plugin-configs/file-activity/no-source-plugin-config.xml" );
 
-        Mojo mojo = lookupMojo( "file-activity", pluginXmlFile );
+        FileActivityReport mojo = (FileActivityReport) lookupMojo( "file-activity", pluginXmlFile );
 
         assertNotNull( "Mojo found.", mojo );
 
@@ -53,7 +69,11 @@
 
         File outputHtml = new File( outputDir, "file-activity.html" );
 
-        assertTrue( "Test html generated", outputHtml.exists() );
+        renderer( mojo, outputHtml );
+
+        assertTrue( outputHtml.getAbsolutePath() + " not generated!", outputHtml.exists() );
+
+        assertTrue( outputHtml.getAbsolutePath() + " is empty!", outputHtml.length() > 0 );
     }
 
     public void testMinConfig()
@@ -72,7 +92,7 @@
     {
         File pluginXmlFile = new File( getBasedir(), "src/test/plugin-configs/file-activity/" + pluginXml );
 
-        Mojo mojo = lookupMojo( "file-activity", pluginXmlFile );
+        FileActivityReport mojo = (FileActivityReport) lookupMojo( "file-activity", pluginXmlFile );
 
         assertNotNull( "Mojo found.", mojo );
 
@@ -88,8 +108,8 @@
 
         String changelogXml = FileUtils.fileRead( outputXML );
 
-        assertTrue( "Test for xml header", changelogXml.startsWith( "<?xml version=\"1.0\" encoding=\"" +
-                    encoding + "\"?>" ) );
+        assertTrue( "Test for xml header", changelogXml.startsWith( "<?xml version=\"1.0\" encoding=\"" + encoding
+            + "\"?>" ) );
 
         assertTrue( "Test for xml footer", changelogXml.endsWith( "</changelog>" ) );
 
@@ -97,14 +117,10 @@
 
         File outputHtml = new File( outputDir, "file-activity.html" );
 
-        assertTrue( "Test html generated", outputHtml.exists() );
-    }
+        renderer( mojo, outputHtml );
 
-    protected void setUp()
-        throws Exception
-    {
-        super.setUp();
+        assertTrue( outputHtml.getAbsolutePath() + " not generated!", outputHtml.exists() );
 
-        scmManager = new ScmManagerStub();
+        assertTrue( outputHtml.getAbsolutePath() + " is empty!", outputHtml.length() > 0 );
     }
 }
