diff --git a/src/it/minimal-pom-output-encoding/pom.xml b/src/it/minimal-pom-output-encoding/pom.xml
index 9a9ef32..2faecd9 100644
--- a/src/it/minimal-pom-output-encoding/pom.xml
+++ b/src/it/minimal-pom-output-encoding/pom.xml
@@ -58,7 +58,7 @@
         <artifactId>maven-changelog-plugin</artifactId>
         <version>@pom.version@</version>
         <configuration>
-          <outputEncoding>UTF-8</outputEncoding>
+          <outputEncoding>ISO-8859-1</outputEncoding>
         </configuration>
       </plugin>
     </plugins>
diff --git a/src/it/minimal-pom-output-encoding/verify.bsh b/src/it/minimal-pom-output-encoding/verify.bsh
index 8682526..68c00f6 100644
--- a/src/it/minimal-pom-output-encoding/verify.bsh
+++ b/src/it/minimal-pom-output-encoding/verify.bsh
@@ -7,8 +7,8 @@
 {
     File outputXML = new File( basedir, "target/changelog.xml" );
     System.out.println( "Checking for existence of xml file: " + outputXML );
-    String content = FileUtils.fileRead( outputXML, "UTF-8" );
-    if ( content.indexOf( "encoding=\"UTF-8\"" ) < 0 )
+    String content = FileUtils.fileRead( outputXML, "ISO-8859-1" );
+    if ( content.indexOf( "encoding=\"ISO-8859-1\"" ) < 0 )
     {
         throw new IOException( "Wrong encoding attribute in content." );
     }
diff --git a/src/it/minimal-pom/verify.bsh b/src/it/minimal-pom/verify.bsh
index 68c00f6..8682526 100644
--- a/src/it/minimal-pom/verify.bsh
+++ b/src/it/minimal-pom/verify.bsh
@@ -7,8 +7,8 @@
 {
     File outputXML = new File( basedir, "target/changelog.xml" );
     System.out.println( "Checking for existence of xml file: " + outputXML );
-    String content = FileUtils.fileRead( outputXML, "ISO-8859-1" );
-    if ( content.indexOf( "encoding=\"ISO-8859-1\"" ) < 0 )
+    String content = FileUtils.fileRead( outputXML, "UTF-8" );
+    if ( content.indexOf( "encoding=\"UTF-8\"" ) < 0 )
     {
         throw new IOException( "Wrong encoding attribute in content." );
     }
diff --git a/src/it/project-reporting-output-encoding/pom.xml b/src/it/project-reporting-output-encoding/pom.xml
new file mode 100644
index 0000000..c3bb94c
--- /dev/null
+++ b/src/it/project-reporting-output-encoding/pom.xml
@@ -0,0 +1,64 @@
+<?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="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">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.maven.plugins.changelog</groupId>
+  <artifactId>project-reporting-output-encoding</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>jar</packaging>
+
+  <url>http://maven.apache.org/</url>
+
+  <scm>
+    <connection>scm:svn:http://svn.apache.org/repos/asf/maven/plugins/trunk/maven-changelog-plugin/</connection>
+    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/maven/plugins/trunk/maven-changelog-plugin/</developerConnection>
+    <url>http://svn.apache.org/viewvc/maven/plugins/trunk/maven-changelog-plugin/</url>
+  </scm>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <project.reporting.outputEncoding>ISO-8859-1</project.reporting.outputEncoding>
+  </properties>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-site-plugin</artifactId>
+        <version>@sitePluginVersion@</version>
+      </plugin>
+    </plugins>
+  </build>
+
+  <reporting>
+    <excludeDefaults>true</excludeDefaults>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-changelog-plugin</artifactId>
+        <version>@pom.version@</version>
+      </plugin>
+    </plugins>
+  </reporting>
+</project>
diff --git a/src/it/project-reporting-output-encoding/verify.bsh b/src/it/project-reporting-output-encoding/verify.bsh
new file mode 100644
index 0000000..68c00f6
--- /dev/null
+++ b/src/it/project-reporting-output-encoding/verify.bsh
@@ -0,0 +1,42 @@
+import java.io.*;
+import java.util.*;
+import java.util.regex.*;
+import org.codehaus.plexus.util.FileUtils;
+
+try
+{
+    File outputXML = new File( basedir, "target/changelog.xml" );
+    System.out.println( "Checking for existence of xml file: " + outputXML );
+    String content = FileUtils.fileRead( outputXML, "ISO-8859-1" );
+    if ( content.indexOf( "encoding=\"ISO-8859-1\"" ) < 0 )
+    {
+        throw new IOException( "Wrong encoding attribute in content." );
+    }
+
+    File siteDir = new File( basedir, "target/site" );
+    System.out.println( "Checking for existence of site directory: " + siteDir );
+    if ( !siteDir.isDirectory() )
+    {
+        System.out.println( "FAILED" );
+        return false;
+    }
+
+    String[] reports = { "changelog", "dev-activity", "file-activity" };
+    for ( String report : reports )
+    {
+        File reportFile = new File( siteDir, report + ".html" );
+        System.out.println( "Checking for existence of report: " + reportFile );
+        if ( !reportFile.isFile() )
+        {
+            System.out.println( "FAILED" );
+            return false;
+        }
+    }
+}
+catch( Throwable t )
+{
+    t.printStackTrace();
+    return false;
+}
+
+return true;
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 0ad5baa..2660c24 100644
--- a/src/main/java/org/apache/maven/plugin/changelog/ChangeLogReport.java
+++ b/src/main/java/org/apache/maven/plugin/changelog/ChangeLogReport.java
@@ -188,10 +188,9 @@
     private String commentFormat;
 
     /**
-     * Output encoding for the xml document
+     * The file encoding when writing non-HTML reports.
      *
-     * @parameter expression="${changelog.outputEncoding}" default-value="ISO-8859-1"
-     * @required
+     * @parameter expression="${changelog.outputEncoding}" default-value="${project.reporting.outputEncoding}"
      */
     private String outputEncoding;
 
@@ -524,12 +523,12 @@
             {
                 try
                 {
-                    //ReaderFactory.newReader( outputXML, outputEncoding );
+                    //ReaderFactory.newReader( outputXML, getOutputEncoding() );
                     //FileInputStream fIn = new FileInputStream( outputXML );
 
                     getLog().info( "Using existing changelog.xml..." );
 
-                    changelogList = ChangeLog.loadChangedSets( ReaderFactory.newReader( outputXML, outputEncoding ) );
+                    changelogList = ChangeLog.loadChangedSets( ReaderFactory.newReader( outputXML, getOutputEncoding() ) );
                 }
                 catch ( FileNotFoundException e )
                 {
@@ -580,7 +579,7 @@
     {
         StringBuffer changelogXml = new StringBuffer();
 
-        changelogXml.append( "<?xml version=\"1.0\" encoding=\"" ).append( outputEncoding ).append( "\"?>\n" );
+        changelogXml.append( "<?xml version=\"1.0\" encoding=\"" ).append( getOutputEncoding() ).append( "\"?>\n" );
         changelogXml.append( "<changelog>" );
 
         for ( Iterator sets = changelogList.iterator(); sets.hasNext(); )
@@ -588,7 +587,7 @@
             changelogXml.append( "\n  " );
 
             ChangeLogSet changelogSet = (ChangeLogSet) sets.next();
-            String changeset = changelogSet.toXML( outputEncoding );
+            String changeset = changelogSet.toXML( getOutputEncoding() );
 
             //remove xml header
             if ( changeset.startsWith( "<?xml" ) )
@@ -609,7 +608,7 @@
         //pw.flush();
         //pw.close();
         // MCHANGELOG-86
-        Writer writer = WriterFactory.newWriter( new BufferedOutputStream( new FileOutputStream( outputXML ) ), outputEncoding );
+        Writer writer = WriterFactory.newWriter( new BufferedOutputStream( new FileOutputStream( outputXML ) ), getOutputEncoding() );
         writer.write( changelogXml.toString() );
         writer.flush();
         writer.close();
@@ -1696,6 +1695,16 @@
         return outputDirectory.getAbsolutePath();
     }
 
+    /**
+     * Gets the effective reporting output files encoding.
+     *
+     * @return The effective reporting output file encoding, never <code>null</code>.
+     */
+    protected String getOutputEncoding()
+    {
+        return ( outputEncoding != null ) ? outputEncoding : ReaderFactory.UTF_8;
+    }
+
     /** {@inheritDoc} */
     protected Renderer getSiteRenderer()
     {
