diff --git a/apache-rat-api/src/main/java/org/apache/rat/api/domain/RatLicenseFamily.java b/apache-rat-api/src/main/java/org/apache/rat/api/domain/RatLicenseFamily.java
index 1a186bc..8f1f223 100644
--- a/apache-rat-api/src/main/java/org/apache/rat/api/domain/RatLicenseFamily.java
+++ b/apache-rat-api/src/main/java/org/apache/rat/api/domain/RatLicenseFamily.java
@@ -90,8 +90,8 @@
      * @param notes
      *            not null
      */
-    private RatLicenseFamily(final String name, final String category,
-            final String notes) {
+	RatLicenseFamily(final String name, final String category,
+					 final String notes) {
         this.name = name;
         this.category = category;
         this.notes = notes;
diff --git a/apache-rat-core/src/main/java/org/apache/rat/Report.java b/apache-rat-core/src/main/java/org/apache/rat/Report.java
index b34ffcd..de4a2e7 100644
--- a/apache-rat-core/src/main/java/org/apache/rat/Report.java
+++ b/apache-rat-core/src/main/java/org/apache/rat/Report.java
@@ -51,10 +51,9 @@
         configuration.setApproveDefaultLicenses(true);
         Options opts = buildOptions();
 
-        DefaultParser parser = new DefaultParser();
         CommandLine cl = null;
         try {
-            cl = parser.parse(opts, args);
+            cl = new DefaultParser().parse(opts, args);
         } catch (ParseException e) {
             System.err.println("Please use the \"--help\" option to see a list of valid commands and options");
             System.exit(1);
@@ -231,18 +230,17 @@
         HelpFormatter f = new HelpFormatter();
         String header = "Options";
 
-        StringBuilder footer = new StringBuilder();
-        footer.append("\nNOTE:\n");
-        footer.append("Rat is really little more than a grep ATM\n");
-        footer.append("Rat is also rather memory hungry ATM\n");
-        footer.append("Rat is very basic ATM\n");
-        footer.append("Rat highlights possible issues\n");
-        footer.append("Rat reports require interpretation\n");
-        footer.append("Rat often requires some tuning before it runs well against a project\n");
-        footer.append("Rat relies on heuristics: it may miss issues\n");
+        String footer = "\nNOTE:\n" +
+                "Rat is really little more than a grep ATM\n" +
+                "Rat is also rather memory hungry ATM\n" +
+                "Rat is very basic ATM\n" +
+                "Rat highlights possible issues\n" +
+                "Rat reports require interpretation\n" +
+                "Rat often requires some tuning before it runs well against a project\n" +
+                "Rat relies on heuristics: it may miss issues\n";
 
         f.printHelp("java rat.report [options] [DIR|TARBALL]",
-                header, opts, footer.toString(), false);
+                header, opts, footer, false);
         System.exit(0);
     }
 
diff --git a/apache-rat-core/src/main/java/org/apache/rat/analysis/HeaderCheckWorker.java b/apache-rat-core/src/main/java/org/apache/rat/analysis/HeaderCheckWorker.java
index 2ae9edc..b7b51f7 100644
--- a/apache-rat-core/src/main/java/org/apache/rat/analysis/HeaderCheckWorker.java
+++ b/apache-rat-core/src/main/java/org/apache/rat/analysis/HeaderCheckWorker.java
@@ -44,12 +44,6 @@
     private int headerLinesToRead;
     private boolean finished = false;
 
-    public HeaderCheckWorker(Reader reader, int numberOfRetainedHeaderLine,
-            final IHeaderMatcher matcher, final Document name) {
-        this(new BufferedReader(reader), numberOfRetainedHeaderLine, matcher, name);
-    }
-
-
     /**
      * Convenience constructor wraps given <code>Reader</code>
      * in a <code>BufferedReader</code>.
diff --git a/apache-rat-core/src/main/java/org/apache/rat/analysis/license/AppliedApacheSoftwareLicense20.java b/apache-rat-core/src/main/java/org/apache/rat/analysis/license/AppliedApacheSoftwareLicense20.java
index 7d0c1ae..65da0f9 100644
--- a/apache-rat-core/src/main/java/org/apache/rat/analysis/license/AppliedApacheSoftwareLicense20.java
+++ b/apache-rat-core/src/main/java/org/apache/rat/analysis/license/AppliedApacheSoftwareLicense20.java
@@ -56,14 +56,13 @@
 
     @Override
     public boolean match(Document subject, String s) throws RatHeaderAnalysisException {
-        boolean result = false;
         if (isCopyrightMatch()) {
             return textMatcher.match(subject, s); // will report the match if it has occurred
         }
         else {
             matchCopyright(s);
         }
-        return result;
+        return false;
     }
 
     @Override
diff --git a/apache-rat-core/src/main/java/org/apache/rat/analysis/license/FullTextMatchingLicense.java b/apache-rat-core/src/main/java/org/apache/rat/analysis/license/FullTextMatchingLicense.java
index 2bc595d..87b4aa7 100644
--- a/apache-rat-core/src/main/java/org/apache/rat/analysis/license/FullTextMatchingLicense.java
+++ b/apache-rat-core/src/main/java/org/apache/rat/analysis/license/FullTextMatchingLicense.java
@@ -97,7 +97,7 @@
                 return true; // we found a match
             } else { // buffer contains first line but does not contain full text
                 // It's possible that the buffer contains the first line again
-                int offset = buffer.substring(1).toString().indexOf(firstLine);
+                int offset = buffer.substring(1).indexOf(firstLine);
                 if (offset >= 0) { // first line found again
                     buffer.delete(0,offset); // reset buffer to the new start
                 } else { // buffer does not even contain first line, so cannot be used to match full text
diff --git a/apache-rat-core/src/main/java/org/apache/rat/annotation/AbstractLicenseAppender.java b/apache-rat-core/src/main/java/org/apache/rat/annotation/AbstractLicenseAppender.java
index 2e89659..6f9ca40 100644
--- a/apache-rat-core/src/main/java/org/apache/rat/annotation/AbstractLicenseAppender.java
+++ b/apache-rat-core/src/main/java/org/apache/rat/annotation/AbstractLicenseAppender.java
@@ -133,59 +133,59 @@
         Arrays.sort(EXPECTS_XML_DECL);
         Arrays.sort(EXPECTS_MSVSSF_HEADER);
 
-        EXT2TYPE.put("apt", Integer.valueOf(TYPE_APT));
-        EXT2TYPE.put("asax", Integer.valueOf(TYPE_HTML));
-        EXT2TYPE.put("ascx", Integer.valueOf(TYPE_HTML));
-        EXT2TYPE.put("aspx", Integer.valueOf(TYPE_HTML));
-        EXT2TYPE.put("bat", Integer.valueOf(TYPE_BAT));
-        EXT2TYPE.put("bsh", Integer.valueOf(TYPE_BEANSHELL));
-        EXT2TYPE.put("c", Integer.valueOf(TYPE_C));
-        EXT2TYPE.put("cc", Integer.valueOf(TYPE_CPP));
-        EXT2TYPE.put("cmd", Integer.valueOf(TYPE_BAT));
-        EXT2TYPE.put("config", Integer.valueOf(TYPE_XML));
-        EXT2TYPE.put("cpp", Integer.valueOf(TYPE_CPP));
-        EXT2TYPE.put("cs", Integer.valueOf(TYPE_CSHARP));
-        EXT2TYPE.put("csdproj", Integer.valueOf(TYPE_XML));
-        EXT2TYPE.put("csproj", Integer.valueOf(TYPE_XML));
-        EXT2TYPE.put("css", Integer.valueOf(TYPE_CSS));
-        EXT2TYPE.put("fxcop", Integer.valueOf(TYPE_XML));
-        EXT2TYPE.put("fml", Integer.valueOf(TYPE_FML));
-        EXT2TYPE.put("groovy", Integer.valueOf(TYPE_GROOVY));
-        EXT2TYPE.put("go", Integer.valueOf(TYPE_GO));
-        EXT2TYPE.put("h", Integer.valueOf(TYPE_H));
-        EXT2TYPE.put("hh", Integer.valueOf(TYPE_H));
-        EXT2TYPE.put("hpp", Integer.valueOf(TYPE_H));
-        EXT2TYPE.put("htm", Integer.valueOf(TYPE_HTML));
-        EXT2TYPE.put("html", Integer.valueOf(TYPE_HTML));
-        EXT2TYPE.put("java", Integer.valueOf(TYPE_JAVA));
-        EXT2TYPE.put("js", Integer.valueOf(TYPE_JAVASCRIPT));
-        EXT2TYPE.put("jsp", Integer.valueOf(TYPE_JSP));
-        EXT2TYPE.put("ndoc", Integer.valueOf(TYPE_XML));
-        EXT2TYPE.put("nunit", Integer.valueOf(TYPE_XML));
-        EXT2TYPE.put("php", Integer.valueOf(TYPE_PHP));
-        EXT2TYPE.put("pl", Integer.valueOf(TYPE_PERL));
-        EXT2TYPE.put("pm", Integer.valueOf(TYPE_PM));
-        EXT2TYPE.put("properties", Integer.valueOf(TYPE_PROPERTIES));
-        EXT2TYPE.put("py", Integer.valueOf(TYPE_PYTHON));
-        EXT2TYPE.put("rb", Integer.valueOf(TYPE_RUBY));
-        EXT2TYPE.put("rdf", Integer.valueOf(TYPE_XML));
-        EXT2TYPE.put("resx", Integer.valueOf(TYPE_XML));
-        EXT2TYPE.put("scala", Integer.valueOf(TYPE_SCALA));
-        EXT2TYPE.put("sh", Integer.valueOf(TYPE_SH));
-        EXT2TYPE.put("shfbproj", Integer.valueOf(TYPE_XML));
-        EXT2TYPE.put("sln", Integer.valueOf(TYPE_VISUAL_STUDIO_SOLUTION));
-        EXT2TYPE.put("stylecop", Integer.valueOf(TYPE_XML));
-        EXT2TYPE.put("svg", Integer.valueOf(TYPE_XML));
-        EXT2TYPE.put("tcl", Integer.valueOf(TYPE_TCL));
-        EXT2TYPE.put("vbdproj", Integer.valueOf(TYPE_XML));
-        EXT2TYPE.put("vbproj", Integer.valueOf(TYPE_XML));
-        EXT2TYPE.put("vcproj", Integer.valueOf(TYPE_XML));
-        EXT2TYPE.put("vm", Integer.valueOf(TYPE_VM));
-        EXT2TYPE.put("vsdisco", Integer.valueOf(TYPE_XML));
-        EXT2TYPE.put("webinfo", Integer.valueOf(TYPE_XML));
-        EXT2TYPE.put("xml", Integer.valueOf(TYPE_XML));
-        EXT2TYPE.put("xproj", Integer.valueOf(TYPE_XML));
-        EXT2TYPE.put("xsl", Integer.valueOf(TYPE_XML));
+        EXT2TYPE.put("apt", TYPE_APT);
+        EXT2TYPE.put("asax", TYPE_HTML);
+        EXT2TYPE.put("ascx", TYPE_HTML);
+        EXT2TYPE.put("aspx", TYPE_HTML);
+        EXT2TYPE.put("bat", TYPE_BAT);
+        EXT2TYPE.put("bsh", TYPE_BEANSHELL);
+        EXT2TYPE.put("c", TYPE_C);
+        EXT2TYPE.put("cc", TYPE_CPP);
+        EXT2TYPE.put("cmd", TYPE_BAT);
+        EXT2TYPE.put("config", TYPE_XML);
+        EXT2TYPE.put("cpp", TYPE_CPP);
+        EXT2TYPE.put("cs", TYPE_CSHARP);
+        EXT2TYPE.put("csdproj", TYPE_XML);
+        EXT2TYPE.put("csproj", TYPE_XML);
+        EXT2TYPE.put("css", TYPE_CSS);
+        EXT2TYPE.put("fxcop", TYPE_XML);
+        EXT2TYPE.put("fml", TYPE_FML);
+        EXT2TYPE.put("groovy", TYPE_GROOVY);
+        EXT2TYPE.put("go", TYPE_GO);
+        EXT2TYPE.put("h", TYPE_H);
+        EXT2TYPE.put("hh", TYPE_H);
+        EXT2TYPE.put("hpp", TYPE_H);
+        EXT2TYPE.put("htm", TYPE_HTML);
+        EXT2TYPE.put("html", TYPE_HTML);
+        EXT2TYPE.put("java", TYPE_JAVA);
+        EXT2TYPE.put("js", TYPE_JAVASCRIPT);
+        EXT2TYPE.put("jsp", TYPE_JSP);
+        EXT2TYPE.put("ndoc", TYPE_XML);
+        EXT2TYPE.put("nunit", TYPE_XML);
+        EXT2TYPE.put("php", TYPE_PHP);
+        EXT2TYPE.put("pl", TYPE_PERL);
+        EXT2TYPE.put("pm", TYPE_PM);
+        EXT2TYPE.put("properties", TYPE_PROPERTIES);
+        EXT2TYPE.put("py", TYPE_PYTHON);
+        EXT2TYPE.put("rb", TYPE_RUBY);
+        EXT2TYPE.put("rdf", TYPE_XML);
+        EXT2TYPE.put("resx", TYPE_XML);
+        EXT2TYPE.put("scala", TYPE_SCALA);
+        EXT2TYPE.put("sh", TYPE_SH);
+        EXT2TYPE.put("shfbproj", TYPE_XML);
+        EXT2TYPE.put("sln", TYPE_VISUAL_STUDIO_SOLUTION);
+        EXT2TYPE.put("stylecop", TYPE_XML);
+        EXT2TYPE.put("svg", TYPE_XML);
+        EXT2TYPE.put("tcl", TYPE_TCL);
+        EXT2TYPE.put("vbdproj", TYPE_XML);
+        EXT2TYPE.put("vbproj", TYPE_XML);
+        EXT2TYPE.put("vcproj", TYPE_XML);
+        EXT2TYPE.put("vm", TYPE_VM);
+        EXT2TYPE.put("vsdisco", TYPE_XML);
+        EXT2TYPE.put("webinfo", TYPE_XML);
+        EXT2TYPE.put("xml", TYPE_XML);
+        EXT2TYPE.put("xproj", TYPE_XML);
+        EXT2TYPE.put("xsl", TYPE_XML);
     }
 
     private boolean isForced;
@@ -360,7 +360,7 @@
             String ext = path.substring(lastDot + 1);
             Integer type = EXT2TYPE.get(ext);
             if (type != null) {
-                return type.intValue();
+                return type;
             }
         }
         return TYPE_UNKNOWN;
diff --git a/apache-rat-core/src/main/java/org/apache/rat/api/ContentType.java b/apache-rat-core/src/main/java/org/apache/rat/api/ContentType.java
index f179af0..a609b93 100644
--- a/apache-rat-core/src/main/java/org/apache/rat/api/ContentType.java
+++ b/apache-rat-core/src/main/java/org/apache/rat/api/ContentType.java
@@ -43,7 +43,7 @@
         this.subType = subType.toLowerCase(Locale.US);
         this.parameters = new HashMap<String, String>(parameters.size());
         for (Map.Entry<String, String> entry : parameters.entrySet()) {
-            this.parameters.put(entry.getKey().toString().toLowerCase(Locale.US), entry.getValue());
+            this.parameters.put(entry.getKey().toLowerCase(Locale.US), entry.getValue());
         }
     }
 
diff --git a/apache-rat-core/src/main/java/org/apache/rat/config/ReportFormat.java b/apache-rat-core/src/main/java/org/apache/rat/config/ReportFormat.java
index a0635b4..6215585 100644
--- a/apache-rat-core/src/main/java/org/apache/rat/config/ReportFormat.java
+++ b/apache-rat-core/src/main/java/org/apache/rat/config/ReportFormat.java
@@ -25,9 +25,6 @@
     XML;
 
     public boolean is(String optionGiven) {
-        if (optionGiven == null || optionGiven.length() == 0) {
-            return false;
-        }
-        return name().equalsIgnoreCase(optionGiven);
+        return optionGiven != null && optionGiven.length() != 0 && name().equalsIgnoreCase(optionGiven);
     }
 }
diff --git a/apache-rat-core/src/main/java/org/apache/rat/config/SourceCodeManagementSystems.java b/apache-rat-core/src/main/java/org/apache/rat/config/SourceCodeManagementSystems.java
index 195dbef..83a7153 100644
--- a/apache-rat-core/src/main/java/org/apache/rat/config/SourceCodeManagementSystems.java
+++ b/apache-rat-core/src/main/java/org/apache/rat/config/SourceCodeManagementSystems.java
@@ -40,7 +40,7 @@
      */
     private String ignoreFile;
 
-    private SourceCodeManagementSystems(String directory, String ignoreFile) {
+    SourceCodeManagementSystems(String directory, String ignoreFile) {
         this.directory = directory;
         this.ignoreFile = ignoreFile;
     }
diff --git a/apache-rat-core/src/main/java/org/apache/rat/document/impl/DocumentImplUtils.java b/apache-rat-core/src/main/java/org/apache/rat/document/impl/DocumentImplUtils.java
index 6351398..a7d2024 100644
--- a/apache-rat-core/src/main/java/org/apache/rat/document/impl/DocumentImplUtils.java
+++ b/apache-rat-core/src/main/java/org/apache/rat/document/impl/DocumentImplUtils.java
@@ -31,8 +31,7 @@
 
     public final static String toName(File file) {
         String path = file.getPath();
-        String normalisedPath = path.replace('\\', '/');
-        return normalisedPath;
+        return path.replace('\\', '/');
     }
     
     public static final boolean isZipStream(InputStream stream) {
diff --git a/apache-rat-core/src/main/java/org/apache/rat/document/impl/guesser/BinaryGuesser.java b/apache-rat-core/src/main/java/org/apache/rat/document/impl/guesser/BinaryGuesser.java
index 1d669bb..15af318 100644
--- a/apache-rat-core/src/main/java/org/apache/rat/document/impl/guesser/BinaryGuesser.java
+++ b/apache-rat-core/src/main/java/org/apache/rat/document/impl/guesser/BinaryGuesser.java
@@ -158,11 +158,7 @@
      * @return Is a file by that name a known non-binary file?
      */
     public static final boolean isNonBinary(final String name) {
-        if (name == null) {
-            return false;
-        }
-        return extensionMatches(name.toUpperCase(Locale.US),
-                BinaryGuesser.NON_BINARY_EXTENSIONS);
+        return name != null && extensionMatches(name.toUpperCase(Locale.US), BinaryGuesser.NON_BINARY_EXTENSIONS);
     }
 
     /**
@@ -176,8 +172,8 @@
 
     public static boolean containsExtension(final String name,
                                             final String[] exts) {
-        for (int i = 0; i < exts.length; i++) {
-            if (name.contains(DOT + exts[i] + DOT)) {
+        for (String ext : exts) {
+            if (name.contains(DOT + ext + DOT)) {
                 return true;
             }
         }
@@ -186,8 +182,8 @@
 
     public static boolean extensionMatches(final String name,
                                            final String[] exts) {
-        for (int i = 0; i < exts.length; i++) {
-            if (name.endsWith(DOT + exts[i])) {
+        for (String ext : exts) {
+            if (name.endsWith(DOT + ext)) {
                 return true;
             }
         }
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 134152c..288bc25 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
@@ -61,8 +61,7 @@
         }
         if (headers != null) {
             final int length = headers.length;
-            for (int i=0;i<length;i++) {
-                final HeaderBean headerBean = headers[i];
+            for (final HeaderBean headerBean : headers) {
                 if (headerBean != null) {
                     final Pattern headerPattern = headerBean.getHeaderPattern();
                     if (headerPattern != null) {
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 71ab3b9..2542c1d 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
@@ -445,7 +445,7 @@
         if (elementsWritten && elementNames.isEmpty()) {
             throw new OperationNotAllowedException("Root element already closed. Cannot open new element.");
         }
-        if (!isValidName(elementName)) {
+        if (isInvalidName(elementName)) {
             throw new InvalidXmlException("'" + elementName + "' is not a valid element name");
         }
         elementsWritten = true;
@@ -481,7 +481,7 @@
                 throw new OperationNotAllowedException("Close called before an element has been opened.");
             }
         }
-        if (!isValidName(name)) {
+        if (isInvalidName(name)) {
             throw new InvalidXmlException("'" + name + "' is not a valid attribute name.");
         }
         if (!inElement) {
@@ -618,7 +618,7 @@
         }
     }
 
-    private boolean isValidName(final CharSequence sequence) {
+    private boolean isInvalidName(final CharSequence sequence) {
         boolean result = true;
         final int length = sequence.length();
         for (int i = 0; i < length; i++) {
@@ -635,7 +635,7 @@
                 }
             }
         }
-        return result;
+        return !result;
     }
 
     private boolean isValidNameStart(final char character) {
diff --git a/apache-rat-core/src/main/java/org/apache/rat/walker/ArchiveWalker.java b/apache-rat-core/src/main/java/org/apache/rat/walker/ArchiveWalker.java
index 57caccb..4e5ec3b 100644
--- a/apache-rat-core/src/main/java/org/apache/rat/walker/ArchiveWalker.java
+++ b/apache-rat-core/src/main/java/org/apache/rat/walker/ArchiveWalker.java
@@ -90,7 +90,7 @@
                     offset += actualRead;
                 }
 
-                if (!entry.isDirectory() && !ignored(f)) {
+                if (!entry.isDirectory() && isNotIgnored(f)) {
                     report(report, contents, f);
                 }
 
diff --git a/apache-rat-core/src/main/java/org/apache/rat/walker/DirectoryWalker.java b/apache-rat-core/src/main/java/org/apache/rat/walker/DirectoryWalker.java
index 49dfcb4..c9b7f12 100644
--- a/apache-rat-core/src/main/java/org/apache/rat/walker/DirectoryWalker.java
+++ b/apache-rat-core/src/main/java/org/apache/rat/walker/DirectoryWalker.java
@@ -109,7 +109,7 @@
      */
     private void processDirectories(final RatReport report, final File[] files) throws RatException {
         for (final File file : files) {
-            if (!ignored(file) && file.isDirectory()) {
+            if (isNotIgnored(file) && file.isDirectory()) {
                 processDirectory(report, file);
             }
         }
@@ -124,7 +124,7 @@
      */
     private void processNonDirectories(final RatReport report, final File[] files) throws RatException {
         for (final File file : files) {
-            if (!ignored(file) && !file.isDirectory()) {
+            if (isNotIgnored(file) && !file.isDirectory()) {
                 report(report, file);
             }
         }
diff --git a/apache-rat-core/src/main/java/org/apache/rat/walker/Walker.java b/apache-rat-core/src/main/java/org/apache/rat/walker/Walker.java
index 06f8bd7..064d9ed 100644
--- a/apache-rat-core/src/main/java/org/apache/rat/walker/Walker.java
+++ b/apache-rat-core/src/main/java/org/apache/rat/walker/Walker.java
@@ -53,14 +53,14 @@
         return file.getName().startsWith(".");
     }
  
-    protected final boolean ignored(final File file) {
+    protected final boolean isNotIgnored(final File file) {
         boolean result = false;
         if (filter != null) {
             final String name = file.getName();
             final File dir = file.getParentFile();
             result = !filter.accept(dir, name);
         }
-        return result;
+        return !result;
     }
 
     public Walker(File file, final FilenameFilter filter) {
diff --git a/apache-rat-plugin/src/it/it1/verify.groovy b/apache-rat-plugin/src/it/it1/verify.groovy
index 1309c96..1d10809 100644
--- a/apache-rat-plugin/src/it/it1/verify.groovy
+++ b/apache-rat-plugin/src/it/it1/verify.groovy
@@ -14,6 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-content = new File( basedir, 'target/rat.txt' ).text;
+content = new File( basedir, 'target/rat.txt' ).text
 
-assert content.contains( 'YAL__ src.apt' );
\ No newline at end of file
+assert content.contains( 'YAL__ src.apt' )
\ No newline at end of file
diff --git a/apache-rat-plugin/src/it/it4_RAT-168/verify.groovy b/apache-rat-plugin/src/it/it4_RAT-168/verify.groovy
index 3786118..3018f96 100644
--- a/apache-rat-plugin/src/it/it4_RAT-168/verify.groovy
+++ b/apache-rat-plugin/src/it/it4_RAT-168/verify.groovy
@@ -14,15 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-content = new File( basedir, 'build.log' ).text;
+content = new File( basedir, 'build.log' ).text
 
-assert content.contains( 'BUILD SUCCESS' );
+assert content.contains( 'BUILD SUCCESS' )
 
 /*
  * [WARNING] No resources included
  */
-assert ! content.contains( '[WARNING]' );
+assert ! content.contains( '[WARNING]' )
 
-report = new File( basedir, 'target/site/rat-report.html' ).text;
+report = new File( basedir, 'target/site/rat-report.html' ).text
 
-assert report.contains( 'AL    pom.xml' );
+assert report.contains( 'AL    pom.xml' )
diff --git a/apache-rat-plugin/src/test/java/org/apache/rat/mp/util/ScmIgnoreParserTest.java b/apache-rat-plugin/src/test/java/org/apache/rat/mp/util/ScmIgnoreParserTest.java
index 5b24c47..f503b7f 100644
--- a/apache-rat-plugin/src/test/java/org/apache/rat/mp/util/ScmIgnoreParserTest.java
+++ b/apache-rat-plugin/src/test/java/org/apache/rat/mp/util/ScmIgnoreParserTest.java
@@ -97,8 +97,6 @@
             FileWriter fw = new FileWriter(file.getAbsoluteFile());
             bw = new BufferedWriter(fw);
             bw.write(contents);
-        } catch (IOException e) {
-            throw e;
         } finally {
             IOUtils.closeQuietly(bw);
         }
diff --git a/apache-rat-plugin/src/test/resources/unit/it1/pom.xml b/apache-rat-plugin/src/test/resources/unit/it1/pom.xml
index 81e7955..6c8e269 100644
--- a/apache-rat-plugin/src/test/resources/unit/it1/pom.xml
+++ b/apache-rat-plugin/src/test/resources/unit/it1/pom.xml
@@ -19,6 +19,7 @@
     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.codehaus.mojo.rat.test</groupId>
   <artifactId>it1</artifactId>
   <version>1.0</version>
diff --git a/apache-rat-plugin/src/test/resources/unit/it2/pom.xml b/apache-rat-plugin/src/test/resources/unit/it2/pom.xml
index 82eac23..d7aac5e 100644
--- a/apache-rat-plugin/src/test/resources/unit/it2/pom.xml
+++ b/apache-rat-plugin/src/test/resources/unit/it2/pom.xml
@@ -19,6 +19,7 @@
     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.rat.test</groupId>
   <artifactId>it2</artifactId>
   <version>1.0</version>
diff --git a/apache-rat-plugin/src/test/resources/unit/it3/pom.xml b/apache-rat-plugin/src/test/resources/unit/it3/pom.xml
index fff9f7c..8629f28 100644
--- a/apache-rat-plugin/src/test/resources/unit/it3/pom.xml
+++ b/apache-rat-plugin/src/test/resources/unit/it3/pom.xml
@@ -19,6 +19,7 @@
     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.rat.test</groupId>
   <artifactId>it3</artifactId>
   <version>1.0</version>
diff --git a/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/Report.java b/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/Report.java
index dc9f5b0..4090c20 100644
--- a/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/Report.java
+++ b/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/Report.java
@@ -171,10 +171,9 @@
      */
     public void addConfiguredStylesheet(Union u) {
         if (stylesheet != null || u.size() != 1) {
-            throw new BuildException("You must not specify more than one"
-                                     + " stylesheet.");
+            throw new BuildException("You must not specify more than one stylesheet.");
         }
-        stylesheet = (Resource) u.iterator().next();
+        stylesheet = u.iterator().next();
     }
 
     /**
diff --git a/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/ResourceCollectionContainer.java b/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/ResourceCollectionContainer.java
index ff882c1..ddb1836 100644
--- a/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/ResourceCollectionContainer.java
+++ b/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/ResourceCollectionContainer.java
@@ -48,8 +48,7 @@
 
     public void run(RatReport report) throws RatException {
         ResourceDocument document = new ResourceDocument();
-        for (Iterator<?> iter = rc.iterator(); iter.hasNext(); ) {
-            Resource r = (Resource) iter.next();
+        for (Resource r : rc) {
             if (!r.isDirectory()) {
                 document.setResource(r);
                 document.getMetaData().clear();
@@ -68,8 +67,7 @@
         
         public Reader reader() throws IOException {
             final InputStream in = resource.getInputStream();
-            final Reader result = new InputStreamReader(in);
-            return result;
+            return new InputStreamReader(in);
         }
 
         public String getName() {
diff --git a/apache-rat-tasks/src/test/java/org/apache/rat/anttasks/AbstractRatAntTaskTest.java b/apache-rat-tasks/src/test/java/org/apache/rat/anttasks/AbstractRatAntTaskTest.java
index d40b271..aa45b07 100644
--- a/apache-rat-tasks/src/test/java/org/apache/rat/anttasks/AbstractRatAntTaskTest.java
+++ b/apache-rat-tasks/src/test/java/org/apache/rat/anttasks/AbstractRatAntTaskTest.java
@@ -35,7 +35,8 @@
     }
 
     @Override
-    public void setUp() {
+    public void setUp() throws Exception {
+        super.setUp();
         configureProject(getAntFile().getPath());
     }
 
