diff --git a/src/it/MPMD-165/src/main/java/test/MyClass.java b/src/it/MPMD-165/src/main/java/test/MyClass.java
index 5e8d6f1..6c4c05c 100644
--- a/src/it/MPMD-165/src/main/java/test/MyClass.java
+++ b/src/it/MPMD-165/src/main/java/test/MyClass.java
@@ -24,7 +24,7 @@
 
     public static void main( String[] args )
     {
-        return;
+        return; // This is a UnnecessaryReturn violation
     }
 
 }
diff --git a/src/main/java/org/apache/maven/plugins/pmd/exec/PmdResult.java b/src/main/java/org/apache/maven/plugins/pmd/exec/PmdResult.java
index 504f633..93645d7 100644
--- a/src/main/java/org/apache/maven/plugins/pmd/exec/PmdResult.java
+++ b/src/main/java/org/apache/maven/plugins/pmd/exec/PmdResult.java
@@ -21,6 +21,8 @@
 
 import java.io.File;
 import java.io.FileInputStream;
+import java.io.FilterReader;
+import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.Reader;
 import java.util.ArrayList;
@@ -60,7 +62,8 @@
 
     private void loadResult( File pmdFile, String encoding ) throws MavenReportException
     {
-        try ( Reader reader1 = new InputStreamReader( new FileInputStream( pmdFile ), encoding ) )
+        try ( Reader reader1 = new BomFilter( encoding, new InputStreamReader(
+                new FileInputStream( pmdFile ), encoding ) ) )
         {
             PmdXpp3Reader reader = new PmdXpp3Reader();
             PmdErrorDetail details = reader.read( reader1, false );
@@ -82,6 +85,63 @@
         }
     }
 
+    // Note: This seems to be a bug in PMD's XMLRenderer. The BOM is rendered multiple times.
+    // once at the beginning of the file, which is Ok, but also in the middle of the file.
+    // This filter just skips all BOMs if the encoding is not UTF-8
+    private static class BomFilter extends FilterReader
+    {
+        private static final char BOM = '\uFEFF';
+        private final boolean filter;
+
+        BomFilter( String encoding, Reader in )
+        {
+            super( in );
+            filter = !"UTF-8".equalsIgnoreCase( encoding );
+        }
+
+        @Override
+        public int read() throws IOException
+        {
+            int c = super.read();
+
+            if ( !filter )
+            {
+                return c;
+            }
+
+            while ( c != -1 && c == BOM )
+            {
+                c = super.read();
+            }
+            return c;
+        }
+
+        @Override
+        public int read( char[] cbuf, int off, int len ) throws IOException
+        {
+            int count = super.read( cbuf, off, len );
+
+            if ( !filter )
+            {
+                return count;
+            }
+
+            if ( count != -1 )
+            {
+                for ( int i = off; i < off + count; i++ )
+                {
+                    if ( cbuf[i] == BOM )
+                    {
+                        // shift the content one char to the left
+                        System.arraycopy( cbuf, i + 1, cbuf, i, off + count - 1 - i );
+                        count--;
+                    }
+                }
+            }
+            return count;
+        }
+    }
+
     public Collection<Violation> getViolations()
     {
         return violations;
