diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index 78dd333..8526323 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -31,17 +31,19 @@
         os: [ubuntu-latest, windows-latest]
 # RAT-296: disable JDK10 due to
 # Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
-        java: [8, 11, 12, 13, 14, 15]
+#
+# Java 17 disabled, because we are running into https://bugs.openjdk.java.net/browse/JDK-8270866
+        java: [8, 11, 12, 13, 14, 15, 16]
       fail-fast: false
 
     runs-on: ${{ matrix.os }}
 
     steps:
       - name: Checkout
-        uses: actions/checkout@v2
+        uses: actions/checkout@v3
 
       - name: Set up JDK
-        uses: actions/setup-java@v2.5.0
+        uses: actions/setup-java@v3.4.1
         with:
           distribution: adopt
           java-version: ${{ matrix.java }}
@@ -50,3 +52,8 @@
       - name: Build with Maven
         run: mvn -e -B -V clean package site
 
+# as of 20220505:  Invalid workflow file
+# The workflow is not valid. .github/workflows/maven.yml (Line: 55, Col: 1): Unexpected value 'notifications'
+#notifications:
+#   jobs: commits@creadur.apache.org
+
diff --git a/.travis.yml b/.travis.yml
index 332292a..1b56d79 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,13 +1,9 @@
 language: java
-dist: trusty
+dist: focal 
 sudo: required
 
 jobs:
     include:
-        - name: "Java 8"
-          jdk: openjdk8
-          script: mvn -e -B -V clean package site
-
-        - name: "Java 14"
-          jdk: openjdk14
+        - name: "Java 16"
+          jdk: openjdk16
           script: mvn -e -B -V clean package site
diff --git a/Jenkinsfile b/Jenkinsfile
index 6839e75..4ff77fb 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -41,7 +41,7 @@
 
     tools {
         maven 'maven_3_latest'
-        jdk 'jdk_14_latest'
+        jdk 'jdk_16_latest'
     }
 
     options {
diff --git a/README.md b/README.md
index 33770ea..c328362 100644
--- a/README.md
+++ b/README.md
@@ -65,4 +65,4 @@
 
 If you want to contribute, feel free to branch from master and provide a pull request via Github.
 You should file a contributor license agreement in order to properly handle your input.
-Apart from that you could file an issue in ASF's Jira under the project "RAT".
+Apart from that you can file an issue in ASF's Jira: [project RAT](https://issues.apache.org/jira/browse/RAT)
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 4ce87a3..b1d93d6 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -1,7 +1,7 @@
-              Apache Creadur Rat 0.13
+              Apache Creadur Rat 0.15
                   RELEASE NOTES
 
-The Apache Creadur Rat team is pleased to announce the release of Apache Creadur Rat 0.13
+The Apache Creadur Rat team is pleased to announce the release of Apache Creadur Rat 0.15
 
 Apache Rat is a release audit tool. It improves accuracy and efficiency when checking
 releases. It is heuristic in nature: making guesses about possible problems. It
@@ -15,25 +15,30 @@
 Apache Rat is developed by the Apache Creadur project, a language and build
 agnostic home for software distribution comprehension and audit tools.
 
+This release fixes a warning during site builds and updates various dependencies.
+
 Changes in this version include:
 
-New features:
-o RAT-228:  Fixing broken Ant unit test setup and making tests run more deterministic. Thanks to Romain Manni-Bucau.
-o RAT-245:  Update to latest available and compatible Apache ANT 1.9.12 to get bugfixes and newer JDK support.
-o RAT-245:  Update to latest available and compatible Apache ANT 1.9.11 to get bugfixes and newer JDK support.
-o RAT-245:  Update to latest available and compatible Apache ANT 1.9.10 due to CVE-2017-5645.
-o RAT-243:  Add .checkstyle to Eclipse default exclusions. Thanks to Matthew Ouyang.
-o RAT-241:  Reduce default log level of used exclusions to debug, only print totals into the maven log like includes. Thanks to Andrew Gaul.
-o RAT-233:  Recognize XML-based .Net Core xproj files. Thanks to Stefan Bodewig.
-o RAT-226:  Update to latest available and compatible Apache ANT 1.9.9.
-
 Fixed Bugs:
-o RAT-242:  Use UTF-8 as default encoding for RAT Ant reports. Thanks to Matthias Bläsing.
-o RAT-234:  Do not treat TypeScript files as binary. Thanks to ajbanck.
-o RAT-240:  Overhauled CLI module to allow file based exclusions with wildcards and explicit file names.
-o RAT-222:  Download section does not work if SNAPSHOT is deployed, add download of previous RAT release.
-o RAT-224:  Fixed example on webpage abozt usage of custom licenses. Thanks to John Patrick.
-o RAT-223:  Add support for Golang and Perl module files. Thanks to Eric Friedrich.
+o RAT-309:  Site builds could not be generated properly due to API changes: solution was to upgrade Maven Reporting API to 3.1.1 and use details of Maven Reporting Implementation 3.2.0 in RAT's Mojo hierarchy. Thanks to Michael Osipov, Gary Gregory.
+o RAT-309:  Updated internal data structures from deprecated ArrayStack to JDK's ArrayDeque.
+o RAT-306:  Add note about hierarchy of changelogs in RAT project structure when publishing the project webpage.
+o RAT-307:  Update to focal (Ubuntu 20.04) on Travis to circumvent build errors and be able to use more modern JDK versions. Deprecate openJDK8 build with focal as it is not supported on Travis.
+
+Changes:
+o RAT-305:  Update maven-project-info-reports-plugin from 3.3.0 to 3.4.1. Thanks to dependabot.
+o RAT-305:  Update maven-javadoc-plugin from 3.4.0 to 3.4.1. Thanks to dependabot.
+o RAT-305:  Update maven-jxr-plugin from 3.2.0 to 3.3.0. Thanks to dependabot.
+o RAT-305:  Update animal-sniffer-maven-plugin from 1.21 to 1.22. Thanks to dependabot.
+o RAT-305:  Update maven-site-plugin from 3.12.0 to 3.12.1. Thanks to dependabot.
+o RAT-305:  Update maven-pmd-plugin from 3.16.0 to 3.18.0. Thanks to dependabot.
+o RAT-305:  Update mockito-core from 4.6.0 to 4.7.0. Thanks to dependabot.
+o RAT-305:  Update extra-enforcer-rules from 1.5.1 to 1.6.1. Thanks to dependabot.
+o RAT-305:  Update Apache parent pom from 26 to 27. Thanks to dependabot.
+o RAT-305:  Update wagon-ssh from 3.5.1 to 3.5.2. Thanks to dependabot.
+o RAT-305:  Update maven-enforcer-plugin from 3.0.0 to 3.1.0. Thanks to dependabot.
+o RAT-305:  Update actions/setup-java from 3.3.0 to 3.4.1. Thanks to dependabot.
+o RAT-310:  Fix deprecation warnings in tests. Use hamcrest's annotations instead of ones from JUnit.
 
 
 Historical list of changes: https://creadur.apache.org/rat/changes-report.html
diff --git a/RELEASE_NOTES.txt b/RELEASE_NOTES.txt
index 85206e6..c88e22a 100644
--- a/RELEASE_NOTES.txt
+++ b/RELEASE_NOTES.txt
@@ -1,3 +1,90 @@
+Rat 0.15
+========
+This release fixes a warning during site builds and updates various dependencies.
+
+Fixed Bugs:
+o RAT-309:  Site builds could not be generated properly due to API changes: solution was to upgrade Maven Reporting API to 3.1.1 and use details of Maven Reporting Implementation 3.2.0 in RAT's Mojo hierarchy. Thanks to Michael Osipov, Gary Gregory.
+o RAT-309:  Updated internal data structures from deprecated ArrayStack to JDK's ArrayDeque.
+o RAT-306:  Add note about hierarchy of changelogs in RAT project structure when publishing the project webpage.
+o RAT-307:  Update to focal (Ubuntu 20.04) on Travis to circumvent build errors and be able to use more modern JDK versions. Deprecate openJDK8 build with focal as it is not supported on Travis.
+
+Changes:
+o RAT-305:  Update maven-project-info-reports-plugin from 3.3.0 to 3.4.1. Thanks to dependabot.
+o RAT-305:  Update maven-javadoc-plugin from 3.4.0 to 3.4.1. Thanks to dependabot.
+o RAT-305:  Update maven-jxr-plugin from 3.2.0 to 3.3.0. Thanks to dependabot.
+o RAT-305:  Update animal-sniffer-maven-plugin from 1.21 to 1.22. Thanks to dependabot.
+o RAT-305:  Update maven-site-plugin from 3.12.0 to 3.12.1. Thanks to dependabot.
+o RAT-305:  Update maven-pmd-plugin from 3.16.0 to 3.18.0. Thanks to dependabot.
+o RAT-305:  Update mockito-core from 4.6.0 to 4.7.0. Thanks to dependabot.
+o RAT-305:  Update extra-enforcer-rules from 1.5.1 to 1.6.1. Thanks to dependabot.
+o RAT-305:  Update Apache parent pom from 26 to 27. Thanks to dependabot.
+o RAT-305:  Update wagon-ssh from 3.5.1 to 3.5.2. Thanks to dependabot.
+o RAT-305:  Update maven-enforcer-plugin from 3.0.0 to 3.1.0. Thanks to dependabot.
+o RAT-305:  Update actions/setup-java from 3.3.0 to 3.4.1. Thanks to dependabot.
+o RAT-310:  Fix deprecation warnings in tests. Use hamcrest's annotations instead of ones from JUnit.
+
+Rat 0.14
+========
+This release contains dependency updates, bugfixes and many improvements apart from infrastructure updates at ASF.
+
+New features:
+* RAT-288:  Adapt logging output to be more compliant with future Maven versions as debug is deprecated and verbose is the recommended way to go. Thanks to Michael Osipov.
+* RAT-297:  Update maven-reporting-api from 3.0 to 3.1.0 and remove usage of deprecated Sink API. Thanks to Michael Osipov.
+* RAT-289:  Enable dependabot integration - write access is forbidden, but email alerts and pull requests should be ok.
+* RAT-279:  Migrate vom Travis CI.org to Travis-ci.com.
+* RAT-271:  Move all Creadur projects to new Jenkins infrastructure at ASF and migrate from Subversion to Gitbox/Github. Please update your repository URLs and use the new default branch master in all projects.
+* RAT-270:  Change default behaviour to output erroneous files to console. Can be disabled by setting rat.consoleOutput to false.
+* RAT-266:  Add .factorypath to Eclipse-default exclusions. Thanks to Michael Osipov.
+* RAT-254:  Properly finish move to gitbox/github, get rid of SVN references and adapt main branch to master and fix all Jenkins build jobs for RAT.
+* RAT-244:  Update compiler level to 1.7 to allow building with more recent JDKs. Update plugins and dependencies to more modern versions to fix security issues (CVE-warnings).
+* RAT-212:  Add alternative https URLs in Apache License, Version 2.0 to allow automatic recognition as valid ASF2.0. Thanks to Niels Basjes.
+* RAT-250:  Update to latest available and compatible Apache ANT 1.9.14 to get bugfixes.
+o INFRA-17348: SCM repository has been moved from svn.apache.org (Subversion) to gitbox.apache.org (Git)
+
+Fixed Bugs:
+* RAT-290:  Update maven-jxr-plugin from 2.5 to 3.2.0. Thanks to dependabot.
+* RAT-290:  Update maven-antrun-plugin from 3.0.0 to 3.1.1. Thanks to dependabot.
+* RAT-290:  Update github actions/checkout from 2 to 3. Thanks to dependabot.
+* RAT-290:  Update github actions/setup-java from 2.5.0 to 3.3.0. Thanks to dependabot.
+* RAT-290:  Update maven-pmd-plugin from 3.14.0 to 3.16.0. Thanks to dependabot.
+* RAT-290:  Update maven-javadoc-plugin from 3.3.1 to 3.4.0. Thanks to dependabot.
+* RAT-290:  Update maven-compiler-plugin from 3.8.1 to 3.10.1. Thanks to dependabot.
+* RAT-290:  Update wagon-ssh from 3.5.0 to 3.5.1. Thanks to dependabot.
+* RAT-290:  Update maven-site-plugin from 3.9.1 to 3.12.0. Thanks to dependabot.
+* RAT-290:  Update maven-project-info-reports-plugin from 3.1.1 to 3.3.0. Thanks to dependabot.
+* RAT-290:  Update mockito-core from 3.11.2 to 4.6.0. Thanks to dependabot.
+* RAT-290:  Update ASF parent from 23 to 26. Thanks to dependabot.
+* RAT-273:  Some tests were based on the assumption, that the value of file.encoding
+            can be changed on runtime. (Won't work nowadays, beginning with Java 16.)
+            Removed this assumption in favour of a proper surefire configuration.
+* RAT-273:  Workaround for an incompatibility in the java.io.LineNumberReader, which is
+            being replaced by the org.apache.rat.header.LineNumberReader.
+* RAT-290:  Update animal-sniffer-maven-plugin from 1.20 to 1.21. Thanks to Jin Xu/Xeno Amess.
+* RAT-296:  Use Github Actions for matrix builds on Windows and ubuntu with JDK 8,11,12,13,14,15. Simplify Travis integration to avoid dockerhub-related build failures.
+* RAT-274:  Update to latest Apache Ant 1.10.12.
+* RAT-291:  Fix links to Travis builds for all creadur projects.
+* RAT-290:  Update maven-dependency-plugin from 3.1.1 to 3.2.0. Thanks to dependabot.
+* RAT-290:  Update plexus-utils from 3.0.21 to 3.4.1. Thanks to dependabot.
+* RAT-290:  Update commons-cli from 1.4 to 1.5.0. Thanks to dependabot.
+* RAT-290:  Update maven-plugin-annotation and maven-plugin-plugin from 3.6.1 to 3.6.2. Thanks to dependabot.
+* RAT-275:  Update to doxia 1.11.1 in order to get CVE-2020-13956-httpclient problem fixes in doxia.
+* RAT-283:  Update plugin versions and dependencies in order to run properly with Java8 as minimal compiler level.
+* RAT-286:  Update to maven-plugin-plugin v3.6.1 in order to circumvent error during maven site builds.
+* RAT-285:  Update to latest Apache Ant 1.10.11 in order to fix issues related to dependency commons-compress in Ant itself.
+* RAT-207:  Properly report thread-safeness to Maven. Thanks to Xavier Dury.
+* RAT-281:  Update to latest Commons IO to fix CVE-2021-29425 (Moderate severity).
+* RAT-274:  Update to latest Apache Ant 1.10.10.
+* RAT-277:  Update to junit 4.13.1 to fix CVE-2020-15250.
+* RAT-158:  Update to new ASF parent 23 in order to get rid of doxia version management that generated warnings.
+* RAT-274:  Update to latest Apache Ant 1.10.9 to fix CVE-2020-11979. Update to JDK8 as minimal version/compiler version.
+* RAT-269:  Update to latest Apache Ant to fix CVE-2020-1945.
+* RAT-268:  Allow handling of pom-file-only projects by not assuming that all modules are in directories. Thanks to Robert Scholte.
+* RAT-267:  Report ignored lines from exclusion file to stderr instead of std to not generate erroneous JSON. Thanks to Fabio Utzig.
+* RAT-262:  Treat JSON data as binary to avoid reports of missing licenses.
+* RAT-260:  Change to docker image when building on Travis to avoid JDK version mixup in traditional build setup. Thanks to Kamil Breguła.
+* RAT-258:  Update to latest commons-compress to fix CVE-2019-12402.
+* RAT-257:  Adapt help text for CLI usage of RAT.
+
 Rat 0.13
 =========
 
diff --git a/apache-rat-api/pom.xml b/apache-rat-api/pom.xml
index fd3df6d..bdb30bf 100644
--- a/apache-rat-api/pom.xml
+++ b/apache-rat-api/pom.xml
@@ -20,7 +20,7 @@
   <parent>
     <groupId>org.apache.rat</groupId>
     <artifactId>apache-rat-project</artifactId>
-    <version>0.14-SNAPSHOT</version>
+    <version>0.16-SNAPSHOT</version>
   </parent>
   <packaging>jar</packaging>
 
diff --git a/apache-rat-api/src/test/java/org/apache/rat/api/domain/LicenseFamilyBuilderTest.java b/apache-rat-api/src/test/java/org/apache/rat/api/domain/LicenseFamilyBuilderTest.java
index 739806c..3883e90 100644
--- a/apache-rat-api/src/test/java/org/apache/rat/api/domain/LicenseFamilyBuilderTest.java
+++ b/apache-rat-api/src/test/java/org/apache/rat/api/domain/LicenseFamilyBuilderTest.java
@@ -19,8 +19,8 @@
 package org.apache.rat.api.domain;
 
 import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertThat;
 
 import org.junit.Test;
 
diff --git a/apache-rat-api/src/test/java/org/apache/rat/api/domain/RatLicenseFamilyTest.java b/apache-rat-api/src/test/java/org/apache/rat/api/domain/RatLicenseFamilyTest.java
index bf7c7bd..9270510 100644
--- a/apache-rat-api/src/test/java/org/apache/rat/api/domain/RatLicenseFamilyTest.java
+++ b/apache-rat-api/src/test/java/org/apache/rat/api/domain/RatLicenseFamilyTest.java
@@ -30,7 +30,7 @@
 import static org.apache.rat.api.domain.RatLicenseFamily.W3C;
 import static org.apache.rat.api.domain.RatLicenseFamily.W3C_DOCUMENTATION;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 import org.junit.Test;
 
diff --git a/apache-rat-core/pom.xml b/apache-rat-core/pom.xml
index 2bcd5a3..60f4de0 100644
--- a/apache-rat-core/pom.xml
+++ b/apache-rat-core/pom.xml
@@ -20,7 +20,7 @@
   <parent>
     <groupId>org.apache.rat</groupId>
     <artifactId>apache-rat-project</artifactId>
-    <version>0.14-SNAPSHOT</version>
+    <version>0.16-SNAPSHOT</version>
   </parent>
   <artifactId>apache-rat-core</artifactId>
   <packaging>jar</packaging>
diff --git a/apache-rat-core/src/main/java/org/apache/rat/header/FilteringSequenceFactory.java b/apache-rat-core/src/main/java/org/apache/rat/header/FilteringSequenceFactory.java
index f01dc0f..ac5d31a 100644
--- a/apache-rat-core/src/main/java/org/apache/rat/header/FilteringSequenceFactory.java
+++ b/apache-rat-core/src/main/java/org/apache/rat/header/FilteringSequenceFactory.java
@@ -39,6 +39,10 @@
     }
 
     public CharSequence filter(Reader reader) throws IOException {
+    	return filter(new LineNumberReader(reader));
+    }
+
+    public CharSequence filter(LineNumberReader reader) throws IOException {
         buffer.clear();
         boolean eof = false;
         while(!eof) {
diff --git a/apache-rat-core/src/main/java/org/apache/rat/header/HeaderMatcher.java b/apache-rat-core/src/main/java/org/apache/rat/header/HeaderMatcher.java
index 288bc25..ac720bf 100644
--- a/apache-rat-core/src/main/java/org/apache/rat/header/HeaderMatcher.java
+++ b/apache-rat-core/src/main/java/org/apache/rat/header/HeaderMatcher.java
@@ -19,7 +19,6 @@
 package org.apache.rat.header;
 
 import java.io.IOException;
-import java.io.LineNumberReader;
 import java.io.Reader;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -60,7 +59,6 @@
             lines = -1;
         }
         if (headers != null) {
-            final int length = headers.length;
             for (final HeaderBean headerBean : headers) {
                 if (headerBean != null) {
                     final Pattern headerPattern = headerBean.getHeaderPattern();
diff --git a/apache-rat-core/src/main/java/org/apache/rat/header/LineNumberReader.java b/apache-rat-core/src/main/java/org/apache/rat/header/LineNumberReader.java
new file mode 100644
index 0000000..d5f150b
--- /dev/null
+++ b/apache-rat-core/src/main/java/org/apache/rat/header/LineNumberReader.java
@@ -0,0 +1,64 @@
+/*
+ * 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.                                           *
+ */ 
+package org.apache.rat.header;
+
+import java.io.IOException;
+import java.io.Reader;
+
+/** Replacement for {@link java.io.LineNumberReader}. This class
+ * provides a workaround for an incompatibility in the
+ * {@link java.io.LineNumberReader}: If the last line in a file
+ * isn't terminated with LF, or CR, or CRLF, then that line
+ * is counted in Java 16, and beyond, but wasn't counted before.
+ * This implementation is compatible with the latter variant,
+ * thus providing upwards compatibility for RAT.
+ */
+public class LineNumberReader {
+	private final Reader parent;
+	private boolean previousCharWasCR = false;
+	private int lineNumber = 0;
+
+	public LineNumberReader(Reader pReader) {
+		parent = pReader;
+	}
+
+	public int read() throws IOException {
+		final int c = parent.read();
+		switch(c) {
+		case 13:
+			previousCharWasCR = true;
+			++lineNumber;
+			break;
+		case 10:
+			if (!previousCharWasCR) {
+				++lineNumber;
+			}
+			previousCharWasCR = false;
+			break;
+		default:
+			previousCharWasCR = false;
+			break;
+		}
+		return c;
+	}
+
+	public int getLineNumber() {
+		return lineNumber;
+	}
+}
diff --git a/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/impl/base/XmlWriter.java b/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/impl/base/XmlWriter.java
index 1095660..d304752 100644
--- a/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/impl/base/XmlWriter.java
+++ b/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/impl/base/XmlWriter.java
@@ -18,13 +18,13 @@
  */
 package org.apache.rat.report.xml.writer.impl.base;
 
-import org.apache.commons.collections4.ArrayStack;
 import org.apache.rat.report.xml.writer.IXmlWriter;
 import org.apache.rat.report.xml.writer.InvalidXmlException;
 import org.apache.rat.report.xml.writer.OperationNotAllowedException;
 
 import java.io.IOException;
 import java.io.Writer;
+import java.util.ArrayDeque;
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Set;
@@ -400,7 +400,7 @@
     }
 
     private final Writer writer;
-    private final ArrayStack elementNames;
+    private final ArrayDeque elementNames;
     private final Set<CharSequence> currentAttributes = new HashSet<>();
 
     boolean elementsWritten = false;
@@ -409,7 +409,7 @@
 
     public XmlWriter(final Writer writer) {
         this.writer = writer;
-        this.elementNames = new ArrayStack();
+        this.elementNames = new ArrayDeque<CharSequence>();
     }
 
     /**
diff --git a/apache-rat-core/src/test/java/org/apache/rat/header/HeaderMatcherTest.java b/apache-rat-core/src/test/java/org/apache/rat/header/HeaderMatcherTest.java
index 7bfd068..721fa06 100644
--- a/apache-rat-core/src/test/java/org/apache/rat/header/HeaderMatcherTest.java
+++ b/apache-rat-core/src/test/java/org/apache/rat/header/HeaderMatcherTest.java
@@ -30,13 +30,11 @@
 
 public class HeaderMatcherTest {
 
-    private int capacity;
     private HeaderMatcher matcher;
     private SimpleCharFilter filter;
 
     @Before
     public void setUp() throws Exception {
-        capacity = 20;
         filter = new SimpleCharFilter();
         matcher = new HeaderMatcher(filter, 20);
     }
diff --git a/apache-rat-core/src/test/java/org/apache/rat/header/HeaderMatcherWithBeansTest.java b/apache-rat-core/src/test/java/org/apache/rat/header/HeaderMatcherWithBeansTest.java
index ce5e9db..d41b95a 100644
--- a/apache-rat-core/src/test/java/org/apache/rat/header/HeaderMatcherWithBeansTest.java
+++ b/apache-rat-core/src/test/java/org/apache/rat/header/HeaderMatcherWithBeansTest.java
@@ -30,7 +30,6 @@
 
 public class HeaderMatcherWithBeansTest {
 
-    private int capacity;
     private HeaderMatcher matcher;
     private SimpleCharFilter filter;
     private HeaderBean[] beans;
@@ -43,7 +42,6 @@
                 new HeaderBean()
             };
         this.beans = beans;
-        capacity = 20;
         filter = new SimpleCharFilter();
         matcher = new HeaderMatcher(filter, 20, beans);
     }
diff --git a/apache-rat-plugin/pom.xml b/apache-rat-plugin/pom.xml
index 783df94..c24e75f 100644
--- a/apache-rat-plugin/pom.xml
+++ b/apache-rat-plugin/pom.xml
@@ -20,7 +20,7 @@
   <parent>
     <artifactId>apache-rat-project</artifactId>
     <groupId>org.apache.rat</groupId>
-    <version>0.14-SNAPSHOT</version>
+    <version>0.16-SNAPSHOT</version>
     <relativePath>..</relativePath>
   </parent>
   <artifactId>apache-rat-plugin</artifactId>
@@ -125,6 +125,14 @@
         		</lifecycleMappingMetadata>
         	</configuration>
         </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <configuration>
+            <forkCount>1</forkCount>
+            <argLine>-Dfile.encoding=ISO-8859-1</argLine>
+          </configuration>
+        </plugin>
       </plugins>
     </pluginManagement>
     <plugins>
@@ -229,13 +237,23 @@
     </dependency>
     <dependency>
       <groupId>org.apache.maven.doxia</groupId>
+      <artifactId>doxia-integration-tools</artifactId>
+      <version>${doxiaSitetoolsVersion}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.doxia</groupId>
       <artifactId>doxia-site-renderer</artifactId>
       <version>${doxiaSitetoolsVersion}</version>
     </dependency>
     <dependency>
       <groupId>org.apache.maven.reporting</groupId>
       <artifactId>maven-reporting-api</artifactId>
-      <version>3.0</version>
+      <version>3.1.1</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.shared</groupId>
+      <artifactId>maven-shared-utils</artifactId>
+      <version>3.3.4</version>
     </dependency>
     <dependency>
       <groupId>org.apache.maven.shared</groupId>
@@ -246,7 +264,7 @@
     <dependency>
       <groupId>org.codehaus.plexus</groupId>
       <artifactId>plexus-utils</artifactId>
-      <version>3.4.1</version>
+      <version>3.4.2</version>
     </dependency>
     <dependency>
       <groupId>org.apache.commons</groupId>
diff --git a/apache-rat-plugin/src/main/java/org/apache/rat/mp/AbstractRatMojo.java b/apache-rat-plugin/src/main/java/org/apache/rat/mp/AbstractRatMojo.java
index 6d451f8..7321838 100644
--- a/apache-rat-plugin/src/main/java/org/apache/rat/mp/AbstractRatMojo.java
+++ b/apache-rat-plugin/src/main/java/org/apache/rat/mp/AbstractRatMojo.java
@@ -140,7 +140,7 @@
      */
     @Parameter(property="rat.includesFileCharset", defaultValue="${project.build.sourceEncoding}")
     private String includesFileCharset;
-    
+
     /**
      * Specifies files, which are excluded in the report. By default, no files
      * are excluded.
@@ -236,7 +236,7 @@
      * Holds the maven-internal project to allow resolution of artifact properties during mojo runs.
      */
     @Parameter(defaultValue = "${project}", required = true, readonly = true)
-    private MavenProject project;
+    protected MavenProject project;
 
     /**
      * @return Returns the Maven project.
@@ -314,7 +314,7 @@
         } else {
             getLog().info(
                     files.length
-                            + " resources included (use -debug for more details)");
+                            + " resources included");
             if (getLog().isDebugEnabled()) {
                 for (final String resource : files) {
                     getLog().debug(" - included " + resource);
@@ -400,13 +400,13 @@
     	}
     	return patterns;
     }
-    
+
     private void setExcludes(DirectoryScanner ds) throws MojoExecutionException {
         final List<String> excludeList = mergeDefaultExclusions();
         if (excludes == null || excludes.length == 0) {
             getLog().info("No excludes explicitly specified.");
         } else {
-            getLog().info(excludes.length + " explicit excludes (use -debug for more details).");
+            getLog().info(excludes.length + " explicit excludes.");
         	for (final String exclude : excludes) {
                 getLog().debug("Exclude: " + exclude);
             }
@@ -454,7 +454,7 @@
         } else {
             getLog().info(
                     results.size()
-                            + " implicit excludes (use -debug for more details).");
+                            + " implicit excludes.");
             for (final String exclude : results) {
                 getLog().debug("Implicit exclude: " + exclude);
             }
diff --git a/apache-rat-plugin/src/main/java/org/apache/rat/mp/RatReportMojo.java b/apache-rat-plugin/src/main/java/org/apache/rat/mp/RatReportMojo.java
index 432d373..04d7d59 100644
--- a/apache-rat-plugin/src/main/java/org/apache/rat/mp/RatReportMojo.java
+++ b/apache-rat-plugin/src/main/java/org/apache/rat/mp/RatReportMojo.java
@@ -20,149 +20,329 @@
  */
 
 import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.factory.ArtifactFactory;
 import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
-import org.apache.maven.artifact.resolver.ArtifactResolutionException;
-import org.apache.maven.artifact.resolver.ArtifactResolver;
-import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
-import org.apache.maven.artifact.versioning.VersionRange;
-import org.apache.maven.doxia.site.decoration.Body;
+import org.apache.maven.doxia.sink.Sink;
+import org.apache.maven.doxia.sink.SinkFactory;
+import org.apache.maven.doxia.sink.impl.SinkEventAttributeSet;
 import org.apache.maven.doxia.site.decoration.DecorationModel;
-import org.apache.maven.doxia.site.decoration.Skin;
 import org.apache.maven.doxia.siterenderer.Renderer;
 import org.apache.maven.doxia.siterenderer.RendererException;
 import org.apache.maven.doxia.siterenderer.RenderingContext;
 import org.apache.maven.doxia.siterenderer.SiteRenderingContext;
 import org.apache.maven.doxia.siterenderer.sink.SiteRendererSink;
+import org.apache.maven.doxia.tools.SiteTool;
+import org.apache.maven.doxia.tools.SiteToolException;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugins.annotations.Component;
 import org.apache.maven.plugins.annotations.Mojo;
 import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.plugins.annotations.ResolutionScope;
-import org.apache.maven.reporting.MavenReport;
+import org.apache.maven.reporting.MavenMultiPageReport;
 import org.apache.maven.reporting.MavenReportException;
+import org.apache.maven.shared.utils.WriterFactory;
 import org.apache.rat.Defaults;
-import org.codehaus.doxia.sink.Sink;
+import org.codehaus.plexus.util.ReaderFactory;
 
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.Writer;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-import java.util.ResourceBundle;
+import java.io.*;
+import java.nio.file.Files;
+import java.util.*;
+
+import static org.apache.maven.shared.utils.logging.MessageUtils.buffer;
 
 
 /**
  * Generates a report with Rat's output.
  */
-@SuppressWarnings("deprecation") // MavenReport invokes the deprecated Sink implementation
 @Mojo(name = "rat", requiresDependencyResolution = ResolutionScope.TEST, threadSafe = true)
-public class RatReportMojo extends AbstractRatMojo implements MavenReport {
-    public static final String DOT_HTML = ".html";
-    @Component
-    private Renderer siteRenderer;
-
-    @Component
-    private ArtifactFactory factory;
-
-    @Component
-    private ArtifactResolver resolver;
+public class RatReportMojo extends AbstractRatMojo implements MavenMultiPageReport {
 
     /**
-     * Specifies the directory where the report will be generated
+     * The output directory for the report. Note that this parameter is only evaluated if the goal is run directly from
+     * the command line. If the goal is run indirectly as part of a site generation, the output directory configured in
+     * the Maven Site Plugin is used instead.
      */
-    @Parameter(defaultValue = "${project.reporting.outputDirectory}", required = true)
-    private File outputDirectory;
-
-    @Parameter(defaultValue = "${localRepository}", required = true, readonly = true)
-    private ArtifactRepository localRepository;
+    @Parameter(defaultValue = "${project.reporting.outputDirectory}", readonly = true, required = true)
+    protected File outputDirectory;
 
     /**
-     * Returns the skins artifact file.
+     * Specifies the input encoding.
+     */
+    @Parameter(property = "encoding", defaultValue = "${project.build.sourceEncoding}", readonly = true)
+    private String inputEncoding;
+
+    /**
+     * Specifies the output encoding.
+     */
+    @Parameter(property = "outputEncoding", defaultValue = "${project.reporting.outputEncoding}", readonly = true)
+    private String outputEncoding;
+
+    /**
+     * The local repository.
+     */
+    @Parameter(defaultValue = "${localRepository}", readonly = true, required = true)
+    protected ArtifactRepository localRepository;
+
+    /**
+     * Remote repositories used for the project.
+     */
+    @Parameter(defaultValue = "${project.remoteArtifactRepositories}", readonly = true, required = true)
+    protected List<ArtifactRepository> remoteRepositories;
+
+    /**
+     * SiteTool.
+     */
+    @Component
+    protected SiteTool siteTool;
+
+    /**
+     * Doxia Site Renderer component.
+     */
+    @Component
+    protected Renderer siteRenderer;
+
+    /**
+     * The current sink to use
+     */
+    private Sink sink;
+
+    /**
+     * The sink factory to use
+     */
+    private SinkFactory sinkFactory;
+
+    /**
+     * The current report output directory to use
+     */
+    private File reportOutputDirectory;
+
+
+    /**
+     * This method is called when the report generation is invoked directly as a standalone Mojo.
      *
-     * @return Artifact 
-     * @throws MojoFailureException   An error in the plugin configuration was detected.
-     * @throws MojoExecutionException An error occurred while searching for the artifact file.
+     * @throws MojoExecutionException if an error occurs when generating the report
+     * @see org.apache.maven.plugin.Mojo#execute()
      */
-    private Artifact getSkinArtifactFile() throws MojoFailureException, MojoExecutionException {
-        final Skin skin = Skin.getDefaultSkin();
-
-        String version = skin.getVersion();
-        final Artifact artifact;
-        try {
-            if (version == null) {
-                version = Artifact.RELEASE_VERSION;
-            }
-            VersionRange versionSpec = VersionRange.createFromVersionSpec(version);
-            artifact =
-                    factory.createDependencyArtifact(skin.getGroupId(), skin.getArtifactId(), versionSpec, "jar", null,
-                            null);
-
-            resolver.resolve(artifact, getProject().getRemoteArtifactRepositories(), localRepository);
-        } catch (InvalidVersionSpecificationException e) {
-            throw new MojoFailureException("The skin version '" + version + "' is not valid: " + e.getMessage());
-        } catch (ArtifactResolutionException e) {
-            throw new MojoExecutionException("Unable to find skin", e);
-        } catch (ArtifactNotFoundException e) {
-            throw new MojoFailureException("The skin does not exist: " + e.getMessage());
-        }
-
-        return artifact;
-    }
-
-    /**
-     * Called from Maven to invoke the plugin.
-     *
-     * @throws MojoFailureException   An error in the plugin configuration was detected.
-     * @throws MojoExecutionException An error occurred while creating the report.
-     */
-    public void execute() throws MojoExecutionException, MojoFailureException {
-        if (skip) {
-            getLog().info("RAT will not execute since it is configured to be skipped via system property 'rat.skip'.");
+    @Override
+    public void execute()
+            throws MojoExecutionException {
+        if (!canGenerateReport()) {
             return;
         }
 
-        final DecorationModel model = new DecorationModel();
-        model.setBody(new Body());
-        final Map<String, String> attributes = new HashMap<>();
-        attributes.put("outputEncoding", "UTF-8");
-        final Locale locale = Locale.getDefault();
+        File outputDirectory = new File(getOutputDirectory());
+
+        String filename = getOutputName() + ".html";
+
+        Locale locale = Locale.getDefault();
+
         try {
-            final SiteRenderingContext siteContext =
-                    siteRenderer.createContextForSkin(getSkinArtifactFile(), attributes, model, getName(locale),
-                            locale);
-            final RenderingContext context = new RenderingContext(outputDirectory, getOutputName() + DOT_HTML);
+            SiteRenderingContext siteContext = createSiteRenderingContext(locale);
 
-            final SiteRendererSink sink = new SiteRendererSink(context);
-            generate(sink, locale);
+            // copy resources
+            getSiteRenderer().copyResources(siteContext, outputDirectory);
 
-            if (!outputDirectory.mkdirs() && !outputDirectory.isDirectory()) {
-                throw new IOException("Could not create output directory " + outputDirectory);
+            // TODO Replace null with real value
+            RenderingContext docRenderingContext = new RenderingContext(outputDirectory, filename, null);
+
+            SiteRendererSink sink = new SiteRendererSink(docRenderingContext);
+
+            generate(sink, null, locale);
+
+            // MSHARED-204: only render Doxia sink if not an external report
+            if (!isExternalReport()) {
+                outputDirectory.mkdirs();
+
+                try (Writer writer =
+                             new OutputStreamWriter(Files.newOutputStream(new File(outputDirectory, filename).toPath()),
+                                     getOutputEncoding())) {
+                    // render report
+                    getSiteRenderer().mergeDocumentIntoSite(writer, sink, siteContext);
+                }
             }
 
-
-            final Writer writer = new FileWriter(new File(outputDirectory, getOutputName() + DOT_HTML));
-
-            siteRenderer.generateDocument(writer, sink, siteContext);
-
-
-            siteRenderer.copyResources(siteContext, outputDirectory);
-        } catch (IOException | RendererException | MavenReportException e) {
-            throw new MojoExecutionException(e.getMessage(), e);
+            // copy generated resources also
+            getSiteRenderer().copyResources(siteContext, outputDirectory);
+        } catch (RendererException | IOException | MavenReportException e) {
+            throw new MojoExecutionException(
+                    "An error has occurred in " + getName(Locale.ENGLISH) + " report generation.", e);
         }
     }
 
+    private SiteRenderingContext createSiteRenderingContext(Locale locale)
+            throws MavenReportException, IOException {
+        DecorationModel decorationModel = new DecorationModel();
+
+        Map<String, Object> templateProperties = new HashMap<>();
+        // We tell the skin that we are rendering in standalone mode
+        templateProperties.put("standalone", Boolean.TRUE);
+        templateProperties.put("project", getProject());
+        templateProperties.put("inputEncoding", getInputEncoding());
+        templateProperties.put("outputEncoding", getOutputEncoding());
+        // Put any of the properties in directly into the Velocity context
+        for (Map.Entry<Object, Object> entry : getProject().getProperties().entrySet()) {
+            templateProperties.put((String) entry.getKey(), entry.getValue());
+        }
+
+        SiteRenderingContext context;
+        try {
+            Artifact skinArtifact =
+                    siteTool.getSkinArtifactFromRepository(localRepository, remoteRepositories, decorationModel);
+
+            getLog().info(buffer().a("Rendering content with ").strong(skinArtifact.getId()
+                    + " skin").a('.').toString());
+
+            context = siteRenderer.createContextForSkin(skinArtifact, templateProperties, decorationModel,
+                    project.getName(), locale);
+        } catch (SiteToolException e) {
+            throw new MavenReportException("Failed to retrieve skin artifact", e);
+        } catch (RendererException e) {
+            throw new MavenReportException("Failed to create context for skin", e);
+        }
+
+        // Generate static site
+        context.setRootDirectory(project.getBasedir());
+
+        return context;
+    }
+
     /**
-     * Returns, whether the report may be generated.
+     * Generate a report.
      *
-     * @return Always true.
+     * @param sink   the sink to use for the generation.
+     * @param locale the wanted locale to generate the report, could be null.
+     * @throws MavenReportException if any
+     * @deprecated use {@link #generate(Sink, SinkFactory, Locale)} instead.
      */
+    @Deprecated
+    @Override
+    public void generate(org.codehaus.doxia.sink.Sink sink, Locale locale)
+            throws MavenReportException {
+        generate(sink, null, locale);
+    }
+
+    /**
+     * Generate a report.
+     *
+     * @param sink
+     * @param locale
+     * @throws MavenReportException
+     * @deprecated use {@link #generate(Sink, SinkFactory, Locale)} instead.
+     */
+    @Deprecated
+    public void generate(Sink sink, Locale locale)
+            throws MavenReportException {
+        generate(sink, null, locale);
+    }
+
+    /**
+     * This method is called when the report generation is invoked by maven-site-plugin.
+     *
+     * @param sink
+     * @param sinkFactory
+     * @param locale
+     * @throws MavenReportException
+     */
+    @Override
+    public void generate(Sink sink, SinkFactory sinkFactory, Locale locale)
+            throws MavenReportException {
+        if (!canGenerateReport()) {
+            getLog().info("This report cannot be generated as part of the current build. "
+                    + "The report name should be referenced in this line of output.");
+            return;
+        }
+
+        this.sink = sink;
+
+        this.sinkFactory = sinkFactory;
+
+        executeReport(locale);
+
+        closeReport();
+    }
+
+    /**
+     * @return CATEGORY_PROJECT_REPORTS
+     */
+    @Override
+    public String getCategoryName() {
+        return CATEGORY_PROJECT_REPORTS;
+    }
+
+    @Override
+    public File getReportOutputDirectory() {
+        if (reportOutputDirectory == null) {
+            reportOutputDirectory = new File(getOutputDirectory());
+        }
+
+        return reportOutputDirectory;
+    }
+
+    @Override
+    public void setReportOutputDirectory(File reportOutputDirectory) {
+        this.reportOutputDirectory = reportOutputDirectory;
+        this.outputDirectory = reportOutputDirectory;
+    }
+
+    protected String getOutputDirectory() {
+        return outputDirectory.getAbsolutePath();
+    }
+
+    protected Renderer getSiteRenderer() {
+        return siteRenderer;
+    }
+
+    /**
+     * Gets the input files encoding.
+     *
+     * @return The input files encoding, never <code>null</code>.
+     */
+    protected String getInputEncoding() {
+        return (inputEncoding == null) ? ReaderFactory.FILE_ENCODING : inputEncoding;
+    }
+
+    /**
+     * Gets the effective reporting output files encoding.
+     *
+     * @return The effective reporting output file encoding, never <code>null</code>.
+     */
+    protected String getOutputEncoding() {
+        return (outputEncoding == null) ? WriterFactory.UTF_8 : outputEncoding;
+    }
+
+    /**
+     * Actions when closing the report.
+     */
+    protected void closeReport() {
+        getSink().close();
+    }
+
+    /**
+     * @return the sink used
+     */
+    public Sink getSink() {
+        return sink;
+    }
+
+    /**
+     * @return the sink factory used
+     */
+    public SinkFactory getSinkFactory() {
+        return sinkFactory;
+    }
+
+    /**
+     * @return {@code false} by default.
+     * @see org.apache.maven.reporting.MavenReport#isExternalReport()
+     */
+    @Override
+    public boolean isExternalReport() {
+        return false;
+    }
+
+    @Override
     public boolean canGenerateReport() {
-        return true;
+        return !skip;
     }
 
     /**
@@ -170,6 +350,7 @@
      *
      * @return Version number, if found, or null.
      */
+    // TODO The canonical way is to read the pom.properties for the artifact desired in META-INF/maven
     private String getRatVersion() {
         //noinspection unchecked
         for (Artifact a : (Iterable<Artifact>) getProject().getDependencyArtifacts()) {
@@ -183,11 +364,10 @@
     /**
      * Writes the report to the Doxia sink.
      *
-     * @param sink   The doxia sink, kind of a SAX handler.
      * @param locale The locale to use for writing the report.
      * @throws MavenReportException Writing the report failed.
      */
-    public void generate(Sink sink, Locale locale) throws MavenReportException {
+    protected void executeReport(Locale locale) throws MavenReportException {
         ResourceBundle bundle = getBundle(locale);
         final String title = bundle.getString("report.rat.title");
         sink.head();
@@ -216,7 +396,7 @@
         sink.paragraph_();
 
         sink.paragraph();
-        sink.verbatim(true);
+        sink.verbatim(SinkEventAttributeSet.BOXED);
         try {
             sink.text(createReport(Defaults.getDefaultStyleSheet()));
         } catch (MojoExecutionException | MojoFailureException e) {
@@ -229,15 +409,6 @@
     }
 
     /**
-     * Returns the reports category name.
-     *
-     * @return {@link MavenReport#CATEGORY_PROJECT_REPORTS}
-     */
-    public String getCategoryName() {
-        return MavenReport.CATEGORY_PROJECT_REPORTS;
-    }
-
-    /**
      * Returns the reports bundle
      *
      * @param locale Requested locale of the bundle
@@ -275,31 +446,4 @@
     public String getOutputName() {
         return "rat-report";
     }
-
-    /**
-     * Returns the reports output directory.
-     *
-     * @return Value of the "outputDirectory" parameter.
-     */
-    public File getReportOutputDirectory() {
-        return outputDirectory;
-    }
-
-    /**
-     * Returns, whether this is an external report.
-     *
-     * @return Always false.
-     */
-    public boolean isExternalReport() {
-        return false;
-    }
-
-    /**
-     * Sets the reports output directory.
-     *
-     * @param pOutputDirectory Reports target directory.
-     */
-    public void setReportOutputDirectory(File pOutputDirectory) {
-        outputDirectory = pOutputDirectory;
-    }
 }
diff --git a/apache-rat-plugin/src/test/java/org/apache/rat/mp/RatCheckMojoTest.java b/apache-rat-plugin/src/test/java/org/apache/rat/mp/RatCheckMojoTest.java
index 9e785dc..b12e114 100644
--- a/apache-rat-plugin/src/test/java/org/apache/rat/mp/RatCheckMojoTest.java
+++ b/apache-rat-plugin/src/test/java/org/apache/rat/mp/RatCheckMojoTest.java
@@ -28,13 +28,10 @@
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStreamReader;
-import java.lang.reflect.Field;
-import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
-import static junit.framework.TestCase.assertTrue;
-import org.apache.rat.document.impl.guesser.BinaryGuesser;
+import org.junit.Assume;
 
 import static org.apache.rat.mp.RatTestHelpers.ensureRatReportIsCorrect;
 import static org.apache.rat.mp.RatTestHelpers.getSourceDirectory;
@@ -217,13 +214,18 @@
      * @throws Exception The test failed.
      */
     public void testIt4() throws Exception {
+    	// In previous versions of the JDK, it used to be possible to
+    	// change the value of file.encoding at runtime. As of Java 16,
+    	// this is no longer possible. Instead, at this point, we check,
+    	// that file.encoding is actually ISO-8859-1. (Within Maven, this
+    	// is enforced by the configuration of the surefire plugin.) If not,
+    	// we skip this test.
+    	Assume.assumeTrue("Expected file.encoding=ISO-8859-1", "ISO-8859-1".equals(System.getProperty("file.encoding")));
         final RatCheckMojo mojo = newRatCheckMojo("it4");
         final File ratTxtFile = getRatTxtFile(mojo);
         try {
             setVariableValueToObject(mojo, "reportStyle", "xml");
-            String origEncoding = overrideFileEncoding("ISO-8859-1");
             mojo.execute();
-            overrideFileEncoding(origEncoding);
             fail("Expected RatCheckException");
         } catch (RatCheckException e) {
             final String msg = e.getMessage();
@@ -250,39 +252,4 @@
             fail("Report file could not be parsed as XML: " + ex.getMessage());
         }
     }
-
-
-    private String overrideFileEncoding(String newEncoding) {
-        String current = System.getProperty("file.encoding");
-        System.setProperty("file.encoding", newEncoding);
-        setBinaryGuesserCharset(newEncoding);
-        clearDefaultCharset();
-        return current;
-    }
-
-    private void clearDefaultCharset() {
-        try {
-            Field f = Charset.class.getDeclaredField("defaultCharset");
-            f.setAccessible(true);
-            f.set(null, null);
-        } catch (Exception ex) {
-            // This is for unittesting - there is no good reason not to rethrow
-            // it. This could be happening in JDK 9, where the unittests need to
-            // run with the java.base module opened
-            throw new RuntimeException(ex);
-        }
-    }
-
-    private void setBinaryGuesserCharset(String charset) {
-        try {
-            Field f = BinaryGuesser.class.getDeclaredField("CHARSET_FROM_FILE_ENCODING_OR_UTF8");
-            f.setAccessible(true);
-            f.set(null, Charset.forName(charset));
-        } catch (Exception ex) {
-            // This is for unittesting - there is no good reason not to rethrow
-            // it. This could be happening in JDK 9, where the unittests need to
-            // run with the java.base module opened
-            throw new RuntimeException(ex);
-        }
-    }
 }
diff --git a/apache-rat-plugin/src/test/java/org/apache/rat/mp/util/ExclusionHelperTest.java b/apache-rat-plugin/src/test/java/org/apache/rat/mp/util/ExclusionHelperTest.java
index 57532c4..e1fd9c5 100644
--- a/apache-rat-plugin/src/test/java/org/apache/rat/mp/util/ExclusionHelperTest.java
+++ b/apache-rat-plugin/src/test/java/org/apache/rat/mp/util/ExclusionHelperTest.java
@@ -88,7 +88,7 @@
 
     @Test
     public void testAddingPlexusAndScmExclusion() {
-        final int expectedSizeMergedFromPlexusDefaultsAndScm = (38 + SourceCodeManagementSystems.getPluginExclusions().size());
+        final int expectedSizeMergedFromPlexusDefaultsAndScm = (37 + SourceCodeManagementSystems.getPluginExclusions().size());
 
         final Set<String> exclusion = new HashSet<>();
         addPlexusAndScmDefaults(log, false, exclusion);
diff --git a/apache-rat-tasks/pom.xml b/apache-rat-tasks/pom.xml
index 639a573..84eb8b8 100644
--- a/apache-rat-tasks/pom.xml
+++ b/apache-rat-tasks/pom.xml
@@ -20,7 +20,7 @@
   <parent>
     <groupId>org.apache.rat</groupId>
     <artifactId>apache-rat-project</artifactId>
-    <version>0.14-SNAPSHOT</version>
+    <version>0.16-SNAPSHOT</version>
   </parent>
   <artifactId>apache-rat-tasks</artifactId>
   <packaging>jar</packaging>
@@ -158,6 +158,14 @@
             </lifecycleMappingMetadata>
           </configuration>
         </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <configuration>
+            <forkCount>1</forkCount>
+            <argLine>-Dfile.encoding=ISO-8859-1</argLine>
+          </configuration>
+        </plugin>
       </plugins>
     </pluginManagement>
   </build>
diff --git a/apache-rat-tasks/src/test/java/org/apache/rat/anttasks/ReportTest.java b/apache-rat-tasks/src/test/java/org/apache/rat/anttasks/ReportTest.java
index c2bb271..ebed7f6 100644
--- a/apache-rat-tasks/src/test/java/org/apache/rat/anttasks/ReportTest.java
+++ b/apache-rat-tasks/src/test/java/org/apache/rat/anttasks/ReportTest.java
@@ -30,6 +30,7 @@
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import org.apache.rat.document.impl.guesser.BinaryGuesser;
+import org.junit.Assume;
 import org.junit.Test;
 import org.w3c.dom.Document;
 
@@ -144,9 +145,14 @@
      */
     @Test
     public void testISO88591() throws Exception {
-        String origEncoding = overrideFileEncoding("ISO-8859-1");
+    	// In previous versions of the JDK, it used to be possible to
+    	// change the value of file.encoding at runtime. As of Java 16,
+    	// this is no longer possible. Instead, at this point, we check,
+    	// that file.encoding is actually ISO-8859-1. (Within Maven, this
+    	// is enforced by the configuration of the surefire plugin.) If not,
+    	// we skip this test.
+    	Assume.assumeTrue("Expected file.encoding=ISO-8859-1", "ISO-8859-1".equals(System.getProperty("file.encoding")));
         buildRule.executeTarget("testISO88591");
-        overrideFileEncoding(origEncoding);
         assertTrue("Log should contain the test umlauts", buildRule.getLog().contains("\u00E4\u00F6\u00FC\u00C4\u00D6\u00DC\u00DF"));
     }
 
@@ -155,12 +161,17 @@
      */
     @Test
     public void testISO88591WithFile() throws Exception {
+    	// In previous versions of the JDK, it used to be possible to
+    	// change the value of file.encoding at runtime. As of Java 16,
+    	// this is no longer possible. Instead, at this point, we check,
+    	// that file.encoding is actually ISO-8859-1. (Within Maven, this
+    	// is enforced by the configuration of the surefire plugin.) If not,
+    	// we skip this test.
+    	Assume.assumeTrue("Expected file.encoding=ISO-8859-1", "ISO-8859-1".equals(System.getProperty("file.encoding")));
         Charset.defaultCharset();
         String outputDir = System.getProperty("output.dir", "target/anttasks");
         String selftestOutput = System.getProperty("report.file", outputDir + "/selftest.report");
-        String origEncoding = overrideFileEncoding("ISO-8859-1");
         buildRule.executeTarget("testISO88591WithReportFile");
-        overrideFileEncoding(origEncoding);
         DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
         boolean documentParsed = false;
         try (FileInputStream fis = new FileInputStream(selftestOutput)) {
@@ -176,38 +187,4 @@
         }
         assertTrue("Report file could not be parsed as XML", documentParsed);
     }
-
-    private String overrideFileEncoding(String newEncoding) {
-        String current = System.getProperty("file.encoding");
-        System.setProperty("file.encoding", newEncoding);
-        setBinaryGuesserCharset(newEncoding);
-        clearDefaultCharset();
-        return current;
-    }
-
-    private void clearDefaultCharset() {
-        try {
-            Field f = Charset.class.getDeclaredField("defaultCharset");
-            f.setAccessible(true);
-            f.set(null, null);
-        } catch (Exception ex) {
-            // This is for unittesting - there is no good reason not to rethrow
-            // it. This could be happening in JDK 9, where the unittests need to
-            // run with the java.base module opened
-            throw new RuntimeException(ex);
-        }
-    }
-
-    private void setBinaryGuesserCharset(String charset) {
-        try {
-            Field f = BinaryGuesser.class.getDeclaredField("CHARSET_FROM_FILE_ENCODING_OR_UTF8");
-            f.setAccessible(true);
-            f.set(null, Charset.forName(charset));
-        } catch (Exception ex) {
-            // This is for unittesting - there is no good reason not to rethrow
-            // it. This could be happening in JDK 9, where the unittests need to
-            // run with the java.base module opened
-            throw new RuntimeException(ex);
-        }
-    }
 }
diff --git a/apache-rat/pom.xml b/apache-rat/pom.xml
index 8b0f4f4..6f4fcf9 100644
--- a/apache-rat/pom.xml
+++ b/apache-rat/pom.xml
@@ -20,7 +20,7 @@
   <parent>
     <groupId>org.apache.rat</groupId>
     <artifactId>apache-rat-project</artifactId>
-    <version>0.14-SNAPSHOT</version>
+    <version>0.16-SNAPSHOT</version>
   </parent>
   <artifactId>apache-rat</artifactId>
   <packaging>jar</packaging>
diff --git a/pom.xml b/pom.xml
index d0845a8..6245d96 100644
--- a/pom.xml
+++ b/pom.xml
@@ -20,11 +20,11 @@
   <parent>
     <groupId>org.apache</groupId>
     <artifactId>apache</artifactId>
-    <version>24</version>
+    <version>27</version>
   </parent>
   <groupId>org.apache.rat</groupId>
   <artifactId>apache-rat-project</artifactId>
-  <version>0.14-SNAPSHOT</version>
+  <version>0.16-SNAPSHOT</version>
   <packaging>pom</packaging>
   <name>Apache Creadur Rat</name>
   <url>https://creadur.apache.org/rat/</url>
@@ -46,7 +46,7 @@
     <!-- taken from https://maven.apache.org/guides/mini/guide-reproducible-builds.html -->
     <project.build.outputTimestamp>10</project.build.outputTimestamp>
     <ant.version>1.10.12</ant.version>
-    <mockito.version>4.3.1</mockito.version>
+    <mockito.version>4.7.0</mockito.version>
     <javaVersion>1.8</javaVersion>
     <maven.compiler.source>${javaVersion}</maven.compiler.source>
     <maven.compiler.target>${javaVersion}</maven.compiler.target>
@@ -56,8 +56,11 @@
     <!-- maven plugin versions -->
     <mavenPluginPluginVersion>3.6.4</mavenPluginPluginVersion>
     <mavenChangesVersion>2.12.1</mavenChangesVersion>
-    <mavenJavadocPluginVersion>3.3.1</mavenJavadocPluginVersion>
-    <previousRatVersion>0.13</previousRatVersion>
+    <mavenJavadocPluginVersion>3.4.1</mavenJavadocPluginVersion>
+    <mavenPmdPluginVersion>3.18.0</mavenPmdPluginVersion>
+    <!-- Used to generate download page for RAT during site builds, please adapt versions manually BEFORE doing a release -->
+    <previousRatVersion>0.16</previousRatVersion>
+    <currentSnapshotRatVersion>0.17-SNAPSHOT</currentSnapshotRatVersion>
   </properties>
   <distributionManagement>
     <site>
@@ -192,6 +195,7 @@
             </tag>
           </tags>
           <notimestamp>true</notimestamp>
+          <doclint>none</doclint>
         </configuration>
         <reportSets>
           <reportSet>
@@ -215,7 +219,7 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-jxr-plugin</artifactId>
-        <version>3.1.1</version>
+        <version>3.3.0</version>
         <reportSets>
           <reportSet>
             <reports>
@@ -228,7 +232,7 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-pmd-plugin</artifactId>
-        <version>3.14.0</version>
+        <version>${mavenPmdPluginVersion}</version>
         <reportSets>
           <reportSet>
             <reports>
@@ -240,7 +244,7 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-project-info-reports-plugin</artifactId>
-        <version>3.1.2</version>
+        <version>3.4.1</version>
         <reportSets>
           <reportSet>
             <reports>
@@ -262,8 +266,8 @@
       <plugin>
         <groupId>org.apache.rat</groupId>
         <artifactId>apache-rat-plugin</artifactId>
-        <!-- Do not use property values here as this makes problem during release -->
-        <version>0.13</version>
+        <!-- Do not use property values here as this causes problems during release -->
+        <version>0.15</version>
       </plugin>
     </plugins>
   </reporting>
@@ -280,7 +284,7 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-antrun-plugin</artifactId>
-          <version>3.0.0</version>
+          <version>3.1.0</version>
           <dependencies>
             <dependency>
               <groupId>org.apache.ant</groupId>
@@ -292,7 +296,7 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-compiler-plugin</artifactId>
-          <version>3.9.0</version>
+          <version>3.10.1</version>
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
@@ -302,12 +306,12 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-dependency-plugin</artifactId>
-          <version>3.2.0</version>
+          <version>3.3.0</version>
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-pmd-plugin</artifactId>
-          <version>3.15.0</version>
+          <version>${mavenPmdPluginVersion}</version>
           <configuration>
             <targetJdk>${javaVersion}</targetJdk>
           </configuration>
@@ -315,7 +319,7 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-site-plugin</artifactId>
-          <version>3.10.0</version>
+          <version>3.12.1</version>
           <configuration>
             <relativizeDecorationLinks>false</relativizeDecorationLinks>
           </configuration>
@@ -323,8 +327,8 @@
         <plugin>
           <groupId>org.apache.rat</groupId>
           <artifactId>apache-rat-plugin</artifactId>
-          <!-- Do not use property values here as this makes problem during release -->
-          <version>0.13</version>
+          <!-- Do not use property values here as this causes problems during release -->
+          <version>0.15</version>
           <configuration>
             <excludes>
               <!-- This file only describes how to build the project and it has no license header -->
@@ -366,13 +370,13 @@
                     <artifactId>
         							apache-rat-plugin
         						</artifactId>
-                    <versionRange>[0.13,)</versionRange>
+                    <versionRange>[0.15,)</versionRange>
                     <goals>
                       <goal>check</goal>
                     </goals>
                   </pluginExecutionFilter>
                   <action>
-                    <ignore/>
+                    <ignore />
                   </action>
                 </pluginExecution>
               </pluginExecutions>
@@ -394,7 +398,7 @@
             </goals>
             <configuration>
               <target>
-                <copy file="RELEASE_NOTES.txt" todir="${project.build.directory}/site/" failonerror="false"/>
+                <copy file="RELEASE_NOTES.txt" todir="${project.build.directory}/site/" failonerror="false" />
               </target>
             </configuration>
           </execution>
@@ -403,7 +407,7 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-enforcer-plugin</artifactId>
-        <version>3.0.0</version>
+        <version>3.1.0</version>
         <executions>
           <execution>
             <!-- This checks the bytecode version of the dependencies transitively -->
@@ -428,7 +432,7 @@
           <dependency>
             <groupId>org.codehaus.mojo</groupId>
             <artifactId>extra-enforcer-rules</artifactId>
-            <version>1.5.1</version>
+            <version>1.6.1</version>
           </dependency>
         </dependencies>
       </plugin>
@@ -446,8 +450,7 @@
       <plugin>
         <groupId>org.codehaus.mojo</groupId>
         <artifactId>animal-sniffer-maven-plugin</artifactId>
-        <!-- 20220206: updating to 1.21 fails the build as there are undefined references within java.nio-references in RAT -->
-        <version>1.20</version>
+        <version>1.22</version>
         <executions>
           <execution>
             <!-- This checks the source code of our project -->
@@ -477,7 +480,7 @@
         <groupId>org.apache.maven.wagon</groupId>
         <artifactId>wagon-ssh</artifactId>
         <!-- Last version that is compatible with Maven 2 -->
-        <version>3.5.1</version>
+        <version>3.5.2</version>
       </extension>
     </extensions>
   </build>
@@ -594,6 +597,7 @@
     <connection>scm:git:https://gitbox.apache.org/repos/asf/creadur-rat.git</connection>
     <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/creadur-rat.git</developerConnection>
     <url>https://gitbox.apache.org/repos/asf?p=creadur-rat.git</url>
+    <tag>HEAD</tag>
   </scm>
   <modules>
     <module>apache-rat-api</module>
@@ -616,6 +620,20 @@
   </organization>
   <profiles>
     <profile>
+      <id>maven.compiler.release</id>
+      <activation>
+        <jdk>[9,)</jdk>
+      </activation>
+      <properties>
+        <!--
+          Note that this cannot use our ${javaVersion} property, so it must
+          be changed manually when we decide to move to a higher version of
+          Java
+        -->
+        <maven.compiler.release>8</maven.compiler.release>
+      </properties>
+    </profile>
+    <profile>
       <id>apache-release</id>
       <build>
         <plugins>
@@ -679,4 +697,11 @@
       </build>
     </profile>
   </profiles>
+    <!-- in order to test new releases this reference can be activated locally-->
+    <pluginRepositories>
+      <pluginRepository>
+        <id>staged-releases-rat-015</id>
+        <url>https://repository.apache.org/content/repositories/orgapachecreadur-1008/</url>
+      </pluginRepository>
+    </pluginRepositories>
 </project>
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 4b8af62..e05c0db 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -32,7 +32,8 @@
 
 mvn changes:announcement-generate -Prelease-notes [-Dchanges.version=nn]
 then tweak the formatting if necessary
-and commit
+and commit.
+Run with changes.version-parameter in order to not generate a SNAPSHOT changelog
 
 The <action> type attribute can be add,update,fix,remove.
 
@@ -42,9 +43,7 @@
     the rest are optional; order not important
 
     having the issue number first makes it easier to read the XML outline
-
 -->
-
 <document xmlns="http://maven.apache.org/changes/1.0.0"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://maven.apache.org/changes/1.0.0 http://maven.apache.org/xsd/changes-1.0.0.xsd">
@@ -54,7 +53,126 @@
   </properties>
 
   <body>
-    <release version="0.14-SNAPSHOT" date="2020-xx-xx" description="Current SNAPSHOT - to be done">
+    <!--release version="0.17-SNAPSHOT" date="xxxx-yy-zz" description="Current SNAPSHOT - release to be done">
+      <action issue="RAT-xxx" type="update" dev="pottlinger" due-to="dependabot">
+        TODO: collect all dependabot updates for release 0.17.
+      </action>
+    </release>
+    -->
+    <release version="0.16-SNAPSHOT" date="xxxx-yy-zz" description="Current SNAPSHOT - release to be done">
+      <action issue="RAT-311" type="update" dev="pottlinger" due-to="dependabot">
+        TODO: collect all dependabot updates for release 0.16.
+      </action>
+    </release>
+    <release version="0.15" date="2022-08-31" description="This release fixes a warning during site builds and updates various dependencies.">
+      <action issue="RAT-305" type="update" dev="pottlinger" due-to="dependabot">
+        Update maven-project-info-reports-plugin from 3.3.0 to 3.4.1.
+      </action>
+      <action issue="RAT-305" type="update" dev="pottlinger" due-to="dependabot">
+        Update maven-javadoc-plugin from 3.4.0 to 3.4.1.
+      </action>
+      <action issue="RAT-305" type="update" dev="pottlinger" due-to="dependabot">
+        Update maven-jxr-plugin from 3.2.0 to 3.3.0.
+      </action>
+      <action issue="RAT-305" type="update" dev="pottlinger" due-to="dependabot">
+        Update animal-sniffer-maven-plugin from 1.21 to 1.22.
+      </action>
+      <action issue="RAT-305" type="update" dev="pottlinger" due-to="dependabot">
+        Update maven-site-plugin from 3.12.0 to 3.12.1.
+      </action>
+      <action issue="RAT-305" type="update" dev="pottlinger" due-to="dependabot">
+        Update maven-pmd-plugin from 3.16.0 to 3.18.0.
+      </action>
+      <action issue="RAT-305" type="update" dev="pottlinger" due-to="dependabot">
+        Update mockito-core from 4.6.0 to 4.7.0.
+      </action>
+      <action issue="RAT-305" type="update" dev="pottlinger" due-to="dependabot">
+        Update extra-enforcer-rules from 1.5.1 to 1.6.1.
+      </action>
+      <action issue="RAT-305" type="update" dev="pottlinger" due-to="dependabot">
+        Update Apache parent pom from 26 to 27.
+      </action>
+      <action issue="RAT-305" type="update" dev="pottlinger" due-to="dependabot">
+        Update wagon-ssh from 3.5.1 to 3.5.2.
+      </action>
+      <action issue="RAT-305" type="update" dev="pottlinger" due-to="dependabot">
+        Update maven-enforcer-plugin from 3.0.0 to 3.1.0.
+      </action>
+      <action issue="RAT-305" type="update" dev="pottlinger" due-to="dependabot">
+        Update actions/setup-java from 3.3.0 to 3.4.1.
+      </action>
+      <action issue="RAT-309" type="fix" dev="pottlinger" due-to="Michael Osipov, Gary Gregory">
+        Site builds could not be generated properly due to API changes: solution was to upgrade Maven Reporting API to 3.1.1 and use details of Maven Reporting Implementation 3.2.0 in RAT's Mojo hierarchy.
+      </action>
+      <action issue="RAT-309" type="fix" dev="pottlinger">
+        Updated internal data structures from deprecated ArrayStack to JDK's ArrayDeque.
+      </action>
+      <action issue="RAT-306" type="fix" dev="pottlinger">
+        Add note about hierarchy of changelogs in RAT project structure when publishing the project webpage.
+      </action>
+      <action issue="RAT-310" type="update" dev="pottlinger">
+        Fix deprecation warnings in tests. Use hamcrest's annotations instead of ones from JUnit.
+      </action>
+      <action issue="RAT-307" type="fix" dev="pottlinger">
+        Update to focal (Ubuntu 20.04) on Travis to circumvent build errors and be able to use more modern JDK versions. Deprecate openJDK8 build with focal as it is not supported on Travis.
+      </action>
+    </release>
+
+    <release version="0.14" date="2022-05-28" description="This release contains dependency updates, bugfixes and many improvements apart from infrastructure updates at ASF.">
+      <action issue="RAT-290" type="fix" dev="pottlinger" due-to="dependabot">
+        Update maven-jxr-plugin from 2.5 to 3.2.0.
+      </action>
+      <action issue="RAT-290" type="fix" dev="pottlinger" due-to="dependabot">
+        Update maven-antrun-plugin from 3.0.0 to 3.1.1.
+      </action>
+      <action issue="RAT-290" type="fix" dev="pottlinger" due-to="dependabot">
+        Update github actions/checkout from 2 to 3.
+      </action>
+      <action issue="RAT-290" type="fix" dev="pottlinger" due-to="dependabot">
+        Update github actions/setup-java from 2.5.0 to 3.3.0.
+      </action>
+      <action issue="RAT-290" type="fix" dev="pottlinger" due-to="dependabot">
+        Update maven-pmd-plugin from 3.14.0 to 3.16.0.
+      </action>
+      <action issue="RAT-290" type="fix" dev="pottlinger" due-to="dependabot">
+        Update maven-javadoc-plugin from 3.3.1 to 3.4.0.
+      </action>
+      <action issue="RAT-290" type="fix" dev="pottlinger" due-to="dependabot">
+        Update maven-compiler-plugin from 3.8.1 to 3.10.1.
+      </action>
+      <action issue="RAT-290" type="fix" dev="pottlinger" due-to="dependabot">
+        Update wagon-ssh from 3.5.0 to 3.5.1.
+      </action>
+      <action issue="RAT-290" type="fix" dev="pottlinger" due-to="dependabot">
+        Update maven-site-plugin from 3.9.1 to 3.12.0.
+      </action>
+      <action issue="RAT-290" type="fix" dev="pottlinger" due-to="dependabot">
+        Update maven-project-info-reports-plugin from 3.1.1 to 3.3.0.
+      </action>
+      <action issue="RAT-290" type="fix" dev="pottlinger" due-to="dependabot">
+        Update mockito-core from 3.11.2 to 4.6.0.
+      </action>
+      <action issue="RAT-290" type="fix" dev="pottlinger" due-to="dependabot">
+        Update ASF parent from 23 to 26.
+      </action>
+      <action issue="RAT-288" type="add" dev="pottlinger" due-to="Michael Osipov">
+        Adapt logging output to be more compliant with future Maven versions as debug is deprecated and verbose is the recommended way to go.
+      </action>
+      <action type="fix" issue="RAT-273" dev="jochen">
+        Some tests were based on the assumption, that the value of file.encoding
+        can be changed on runtime. (Won't work nowadays, beginning with Java 16.)
+        Removed this assumption in favour of a proper surefire configuration.
+      </action>
+      <action issue="RAT-273" type="fix" dev="jochen">
+        Workaround for an incompatibility in the java.io.LineNumberReader, which is
+        being replaced by the org.apache.rat.header.LineNumberReader.
+      </action>
+      <action issue="RAT-297" type="add" dev="pottlinger" due-to="Michael Osipov">
+        Update maven-reporting-api from 3.0 to 3.1.0 and remove usage of deprecated Sink API.
+      </action>
+      <action issue="RAT-290" type="fix" dev="pottlinger" due-to="Jin Xu/Xeno Amess">
+        Update animal-sniffer-maven-plugin from 1.20 to 1.21.
+      </action>
       <action issue="RAT-296" type="fix" dev="pottlinger">
         Use Github Actions for matrix builds on Windows and ubuntu with JDK 8,11,12,13,14,15. Simplify Travis integration to avoid dockerhub-related build failures.
       </action>
@@ -65,16 +183,16 @@
         Fix links to Travis builds for all creadur projects.
       </action>
       <action issue="RAT-290" type="fix" dev="pottlinger" due-to="dependabot">
-        Update maven-dependency-plugin from 3.1.1 to 3.2.0. Thanks to dependabot.
+        Update maven-dependency-plugin from 3.1.1 to 3.2.0.
       </action>
       <action issue="RAT-290" type="fix" dev="pottlinger" due-to="dependabot">
-        Update plexus-utils from 3.0.21 to 3.4.1. Thanks to dependabot.
+        Update plexus-utils from 3.0.21 to 3.4.1.
       </action>
       <action issue="RAT-290" type="fix" dev="pottlinger" due-to="dependabot">
-        Update commons-cli from 1.4 to 1.5.0. Thanks to dependabot.
+        Update commons-cli from 1.4 to 1.5.0.
       </action>
       <action issue="RAT-290" type="fix" dev="pottlinger" due-to="dependabot">
-        Update maven-plugin-annotations from 3.6.1 to 3.6.2. Thanks to dependabot.
+        Update maven-plugin-annotation and maven-plugin-plugin from 3.6.1 to 3.6.2.
       </action>
       <action issue="RAT-275" type="fix" dev="pottlinger">
         Update to doxia 1.11.1 in order to get CVE-2020-13956-httpclient problem fixes in doxia.
diff --git a/src/site/site.xml b/src/site/site.xml
index c12b28a..beda3f7 100644
--- a/src/site/site.xml
+++ b/src/site/site.xml
@@ -99,7 +99,7 @@
     <menu ref="modules"/>
     <menu ref="reports"/>
 
-    <footer>Copyright &amp;copy; 2016 The Apache Software Foundation, Licensed under the Apache License, Version 2.0.
+    <footer>Copyright &amp;copy; 2016-2022 The Apache Software Foundation, Licensed under the Apache License, Version 2.0.
       Apache Creadur, Creadur, Apache Rat, Apache Tentacles, Apache Whisker, Apache and the Apache feather logo are trademarks
       of The Apache Software Foundation.
       Oracle and Java are registered trademarks of Oracle and/or its affiliates.
diff --git a/src/site/xdoc/download_rat.xml.vm b/src/site/xdoc/download_rat.xml.vm
index 248cb6c..ee1fdb9 100644
--- a/src/site/xdoc/download_rat.xml.vm
+++ b/src/site/xdoc/download_rat.xml.vm
@@ -29,17 +29,15 @@
           distribution directories. Recent releases (48 hours) may not yet
           be available from the mirrors.
         </p>
-
         <p>
           You are currently using <b>[preferred]</b>.  If you
           encounter a problem with this mirror, please select another
           mirror.  If all mirrors are failing, there are <i>backup</i>
           mirrors (at the end of the mirrors list) that should be
           available.
-          <br></br>
-          [if-any logo]<a href="[link]"><img align="right" src="[logo]" border="0"></img></a>[end]
+          <br/>
+          [if-any logo]<a href="[link]"><img align="right" src="[logo]" border="0"/></a>[end]
         </p>
-
         <form action="[location]" method="get" id="SelectMirror">
           <p>
             Other mirrors:
@@ -54,13 +52,11 @@
               [for backup]<option value="[backup]">[backup] (backup)</option>[end]
               [end]
             </select>
-            <input type="submit" value="Change"></input>
+            <input type="submit" value="Change"/>
           </p>
         </form>
-
         <p>
-          The <a
-          href="https://www.apache.org/dist/creadur/KEYS">KEYS</a>
+          The <a href="https://www.apache.org/dist/creadur/KEYS">KEYS</a>
           file links to the code signing keys used to sign the
           product.  The <code>PGP</code> link downloads the OpenPGP
           compatible signature from our main site.  The
@@ -72,51 +68,106 @@
       <subsection name="Binaries">
         <table>
           <tr>
-              <td><a href="[preferred]/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-bin.tar.bz2">apache-rat-${previousRatVersion}-bin.tar.bz2</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-bin.tar.bz2.sha512">sha512</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-bin.tar.bz2.asc">pgp</a></td>
+            <td>
+              <a href="[preferred]/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-bin.tar.bz2">apache-rat-${previousRatVersion}-bin.tar.bz2</a>
+            </td>
+            <td>
+              <a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-bin.tar.bz2.sha512">sha512</a>
+            </td>
+            <td>
+              <a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-bin.tar.bz2.asc">pgp</a>
+            </td>
           </tr>
           <tr>
-              <td><a href="[preferred]/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-bin.tar.gz">apache-rat-${previousRatVersion}-bin.tar.gz</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-bin.tar.gz.sha512">sha512</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-bin.tar.gz.asc">pgp</a></td>
+            <td>
+              <a href="[preferred]/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-bin.tar.gz">apache-rat-${previousRatVersion}-bin.tar.gz</a>
+            </td>
+            <td>
+              <a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-bin.tar.gz.sha512">sha512</a>
+            </td>
+            <td>
+              <a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-bin.tar.gz.asc">pgp</a>
+            </td>
           </tr>
           <tr>
-              <td><a href="[preferred]/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-bin.zip">apache-rat-${previousRatVersion}-bin.zip</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-bin.zip.sha512">sha512</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-bin.zip.asc">pgp</a></td>
+            <td>
+              <a href="[preferred]/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-bin.zip">apache-rat-${previousRatVersion}-bin.zip</a>
+            </td>
+            <td>
+              <a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-bin.zip.sha512">sha512</a>
+            </td>
+            <td>
+              <a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-bin.zip.asc">pgp</a>
+            </td>
           </tr>
         </table>
       </subsection>
       <subsection name="Source">
         <table>
           <tr>
-              <td><a href="[preferred]/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-src.tar.bz2">apache-rat-${previousRatVersion}-src.tar.bz2</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-src.tar.bz2.sha512">sha512</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-src.tar.bz2.asc">pgp</a></td>
+            <td>
+              <a href="[preferred]/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-src.tar.bz2">apache-rat-${previousRatVersion}-src.tar.bz2</a>
+            </td>
+            <td>
+              <a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-src.tar.bz2.sha512">sha512</a>
+            </td>
+            <td>
+              <a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-src.tar.bz2.asc">pgp</a>
+            </td>
           </tr>
           <tr>
-              <td><a href="[preferred]/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-src.tar.gz">apache-rat-${previousRatVersion}-src.tar.gz</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-src.tar.gz.sha512">sha512</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-src.tar.gz.asc">pgp</a></td>
+            <td>
+              <a href="[preferred]/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-src.tar.gz">apache-rat-${previousRatVersion}-src.tar.gz</a>
+            </td>
+            <td>
+              <a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-src.tar.gz.sha512">sha512</a>
+            </td>
+            <td>
+              <a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-src.tar.gz.asc">pgp</a>
+            </td>
           </tr>
           <tr>
-              <td><a href="[preferred]/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-src.zip">apache-rat-${previousRatVersion}-src.zip</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-src.zip.sha512">sha512</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-src.zip.asc">pgp</a></td>
+            <td>
+              <a href="[preferred]/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-src.zip">apache-rat-${previousRatVersion}-src.zip</a>
+            </td>
+            <td>
+              <a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-src.zip.sha512">sha512</a>
+            </td>
+            <td>
+              <a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-src.zip.asc">pgp</a>
+            </td>
           </tr>
         </table>
       </subsection>
     </section>
+    <div class="section">
+      <h2><a name="Apache_Creadur_Rat_${currentSnapshotRatVersion}"/>${project.name} ${currentSnapshotRatVersion}</h2>
+      <div class="section">
+        <h3><a name="Snapshots"/>Snapshots</h3>
+        <table border="0" class="bodyTable">
+          <tr class="a">
+            <td colspan="4">
+              <a class="externalLink" href="https://repository.apache.org/content/repositories/snapshots/org/apache/rat">${project.name} ${currentSnapshotRatVersion}</a>
+            </td>
+          </tr>
+        </table>
+      </div>
+    </div>
     <section name="Archives">
-        <p>
+      <p>
           Older releases can be obtained from the archives.
         </p>
-        <ul>
-          <li class="download"><a href="[preferred]/creadur/">browse download area</a></li>
-          <li><a href="https://archive.apache.org/dist/creadur/">archives...</a></li>
-          <li><a href="https://archive.apache.org/dist/incubator/rat/">Incubator archives...</a></li>
-        </ul>
+      <ul>
+        <li class="download">
+          <a href="[preferred]/creadur/">browse download area</a>
+        </li>
+        <li>
+          <a href="https://archive.apache.org/dist/creadur/">archives...</a>
+        </li>
+        <li>
+          <a href="https://archive.apache.org/dist/incubator/rat/">Incubator archives...</a>
+        </li>
+      </ul>
     </section>
   </body>
 </document>
