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 ec610c8..47b606c 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
@@ -33,6 +33,7 @@
 
 import javax.xml.transform.TransformerConfigurationException;
 import java.io.*;
+import java.util.Arrays;
 import java.util.List;
 import java.util.regex.PatternSyntaxException;
 
@@ -78,7 +79,7 @@
             if (cl.hasOption(EXCLUDE_CLI)) {
                 String[] excludes = cl.getOptionValues(EXCLUDE_CLI);
                 if (excludes != null) {
-                    final FilenameFilter filter = new NotFileFilter(new WildcardFileFilter(excludes));
+                    final FilenameFilter filter = parseExclusions(Arrays.asList(excludes));
                     report.setInputFileFilter(filter);
                 }
             } else if (cl.hasOption(EXCLUDE_FILE_CLI)) {
@@ -114,7 +115,7 @@
         }
     }
 
-    private static FilenameFilter parseExclusions(List<String> excludes) throws IOException {
+    static FilenameFilter parseExclusions(List<String> excludes) throws IOException {
         final OrFileFilter orFilter = new OrFileFilter();
         for (String exclude : excludes) {
             try {
@@ -216,7 +217,7 @@
         return opts;
     }
 
-    private static final void printUsage(Options opts) {
+    private static void printUsage(Options opts) {
         HelpFormatter f = new HelpFormatter();
         String header = "Options";
 
@@ -244,15 +245,6 @@
     }
 
     /**
-     * Gets the current filter used to select files.
-     *
-     * @return current file filter, or null when no filter has been set
-     */
-    public FilenameFilter getInputFileFilter() {
-        return inputFileFilter;
-    }
-
-    /**
      * Sets the current filter used to select files.
      *
      * @param inputFileFilter filter, or null when no filter has been set
diff --git a/apache-rat-core/src/test/java/org/apache/rat/ReportTest.java b/apache-rat-core/src/test/java/org/apache/rat/ReportTest.java
index bccab10..8468a8e 100644
--- a/apache-rat-core/src/test/java/org/apache/rat/ReportTest.java
+++ b/apache-rat-core/src/test/java/org/apache/rat/ReportTest.java
@@ -24,9 +24,13 @@
 import org.junit.Test;
 
 import java.io.File;
+import java.io.FilenameFilter;
+import java.io.IOException;
 import java.io.StringWriter;
+import java.util.Arrays;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
 public class ReportTest {
@@ -130,4 +134,10 @@
                 elementsReports,
                 result.substring(generatedAtLineEnd + NL.length()));
     }
+
+    @Test
+    public void parseExclusionsForCLIUsage() throws IOException {
+        final FilenameFilter filter = Report.parseExclusions(Arrays.asList("foo", "foo/bar"));
+        assertNotNull(filter);
+    }
 }
