diff --git a/src/main/java/org/apache/openejb/tools/legal/IOUtil.java b/src/main/java/org/apache/openejb/tools/legal/IOUtil.java
index 61daf13..7302efd 100644
--- a/src/main/java/org/apache/openejb/tools/legal/IOUtil.java
+++ b/src/main/java/org/apache/openejb/tools/legal/IOUtil.java
@@ -70,6 +70,12 @@
         return new String(out.toByteArray());
     }
 
+    public static String slurp(URL url) throws IOException {
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        copy(url.openStream(), out);
+        return new String(out.toByteArray());
+    }
+
     public static void writeString(File file, String string) throws IOException {
         final FileWriter out = new FileWriter(file);
         try {
diff --git a/src/main/java/org/apache/openejb/tools/legal/Main.java b/src/main/java/org/apache/openejb/tools/legal/Main.java
index 7b3203c..8e0c58f 100644
--- a/src/main/java/org/apache/openejb/tools/legal/Main.java
+++ b/src/main/java/org/apache/openejb/tools/legal/Main.java
@@ -37,6 +37,7 @@
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
 import java.util.List;
@@ -65,7 +66,9 @@
     private final URI staging;
     private final File repository;
     private final File content;
-    private String asl;
+    private Reports reports;
+    private Map<String, String> licenses = new HashMap<String, String>();
+
 
     public Main(String... args) throws Exception {
         client = new DefaultHttpClient();
@@ -85,8 +88,19 @@
         log.info("Repo: " + staging);
         log.info("Local: " + local);
 
-//        URL resource = this.getClass().getResource("licenses/asl.txt");
-//        asl = IOUtil.readString(resource).trim();
+        reports = new Reports();
+
+        URL style = this.getClass().getClassLoader().getResource("legal/style.css");
+        IOUtil.copy(style.openStream(), new File(local, "style.css"));
+
+        licenses("asl-2.0");
+        licenses("cpl-1.0");
+        licenses("cddl-1.0");
+    }
+
+    private void licenses(String s) throws IOException {
+        URL aslURL = this.getClass().getClassLoader().getResource("licenses/" + s + ".txt");
+        licenses.put(s, IOUtil.slurp(aslURL).trim());
     }
 
     public static void main(String[] args) throws Exception {
@@ -111,10 +125,15 @@
             archives.add(archive);
         }
 
-        Templates.template("archives.vm").add("archives", archives).write(new File(local, "report.html"));
+        Templates.template("archives.vm")
+                .add("archives", archives)
+                .add("reports", reports)
+                .write(new File(local, "archives.html"));
 
         reportLicenses(archives);
         reportNotices(archives);
+        reportDeclaredLicenses(archives);
+        reportDeclaredNotices(archives);
     }
 
     private void reportLicenses(List<Archive> archives) throws IOException {
@@ -131,12 +150,96 @@
                     existing = license;
                 }
 
+                existing.locations.add(file);
                 existing.getArchives().add(archive);
                 archive.getLicenses().add(existing);
             }
         }
 
-        Templates.template("licenses.vm").add("licenses", licenses.values()).write(new File(local, "licenses.html"));
+        Templates.template("licenses.vm")
+                .add("licenses", licenses.values())
+                .add("reports", reports)
+                .write(new File(local, "licenses.html"));
+    }
+
+    private void reportDeclaredLicenses(List<Archive> archives) throws IOException {
+
+        for (Archive archive : archives) {
+
+            final Set<License> undeclared = new HashSet<License>(archive.getLicenses());
+
+            final File contents = contents(archive.getFile());
+            final List<File> files = collect(contents, new Filters(new DeclaredFilter(contents), new LicenseFilter()));
+
+            for (File file : files) {
+
+                final License license = new License(IOUtil.slurp(file));
+
+                undeclared.remove(license);
+
+            }
+
+            archive.getOtherLicenses().addAll(undeclared);
+
+            final Set<License> declared = new HashSet<License>(archive.getLicenses());
+            declared.removeAll(undeclared);
+            archive.getDeclaredLicenses().addAll(declared);
+
+
+            for (License license : undeclared) {
+
+                for (License declare : declared) {
+                    if (license.implies(declare)) {
+                        archive.getOtherLicenses().remove(license);
+                    }
+                }
+            }
+
+            Templates.template("archive-licenses.vm")
+                    .add("archive", archive)
+                    .add("reports", reports)
+                    .write(new File(local, reports.licenses(archive)));
+        }
+
+    }
+
+    private void reportDeclaredNotices(List<Archive> archives) throws IOException {
+
+        for (Archive archive : archives) {
+
+            final Set<Notice> undeclared = new HashSet<Notice>(archive.getNotices());
+
+            final File contents = contents(archive.getFile());
+            final List<File> files = collect(contents, new Filters(new DeclaredFilter(contents), new NoticeFilter()));
+
+            for (File file : files) {
+
+                final Notice notice = new Notice(IOUtil.slurp(file));
+
+                undeclared.remove(notice);
+            }
+
+            archive.getOtherNotices().addAll(undeclared);
+
+            final Set<Notice> declared = new HashSet<Notice>(archive.getNotices());
+            declared.removeAll(undeclared);
+            archive.getDeclaredNotices().addAll(declared);
+
+            for (Notice notice : undeclared) {
+
+                for (Notice declare : declared) {
+                    if (notice.implies(declare)) {
+                        archive.getOtherLicenses().remove(notice);
+                    }
+                }
+            }
+
+
+            Templates.template("archive-notices.vm")
+                    .add("archive", archive)
+                    .add("reports", reports)
+                    .write(new File(local, reports.notices(archive)));
+        }
     }
 
     private void reportNotices(List<Archive> archives) throws IOException {
@@ -153,14 +256,30 @@
                     existing = notice;
                 }
 
+                existing.locations.add(file);
                 existing.getArchives().add(archive);
                 archive.getNotices().add(existing);
             }
         }
 
-        Templates.template("notices.vm").add("notices", notices.values()).write(new File(local, "notices.html"));
+        Templates.template("notices.vm")
+                .add("notices", notices.values())
+                .add("reports", reports)
+                .write(new File(local, "notices.html"));
     }
 
+    public class Reports {
+        public String licenses(Archive archive) {
+            return archive.uri.toString().replace('/', '.') + ".licenses.html";
+        }
+
+        public String notices(Archive archive) {
+            return archive.uri.toString().replace('/', '.') + ".notices.html";
+        }
+
+    }
+
+
     private List<URI> allNoticeFiles() {
         List<File> legal = collect(content, new LegalFilter());
         for (File file : legal) {
@@ -233,10 +352,15 @@
         private final String text;
         private String key;
         private Set<Archive> archives = new HashSet<Archive>();
+        private List<File> locations = new ArrayList<File>();
 
         public License(String text) {
-            this.text = text.trim().intern();
-            key = text.replaceAll("[ \\n\\t\\r]+", "").intern();
+            key = text.replaceAll("[ \\n\\t\\r]+", "").toLowerCase().intern();
+
+            for (Map.Entry<String, String> license : licenses.entrySet()) {
+                text = text.replace(license.getValue(), String.format("---[%s - full text]---\n\n", license.getKey()));
+            }
+            this.text = text.intern();
         }
 
         public String getText() {
@@ -251,6 +375,20 @@
             return archives;
         }
 
+        public Set<URI> locations(Archive archive) {
+            URI contents = contents(archive.getFile()).toURI();
+            Set<URI> locations = new HashSet<URI>();
+            for (File file : this.locations) {
+                URI uri = file.toURI();
+                URI relativize = contents.relativize(uri);
+                if (!relativize.equals(uri)) {
+                    locations.add(relativize);
+                }
+            }
+
+            return locations;
+        }
+
         @Override
         public boolean equals(Object o) {
             if (this == o) return true;
@@ -267,16 +405,21 @@
         public int hashCode() {
             return key.hashCode();
         }
+
+        public boolean implies(License fullLicense) {
+            return fullLicense.key.contains(this.key);
+        }
     }
 
     public class Notice {
         private final String text;
         private String key;
         private Set<Archive> archives = new HashSet<Archive>();
+        private List<File> locations = new ArrayList<File>();
 
         public Notice(String text) {
-            this.text = text.trim().intern();
-            key = text.replaceAll("[ \\n\\t\\r]+", "").intern();
+            this.text = text.intern();
+            key = text.replaceAll("[ \\n\\t\\r]+", "").toLowerCase().intern();
         }
 
         public String getText() {
@@ -291,6 +434,20 @@
             return archives;
         }
 
+        public Set<URI> locations(Archive archive) {
+            URI contents = contents(archive.getFile()).toURI();
+            Set<URI> locations = new HashSet<URI>();
+            for (File file : this.locations) {
+                URI uri = file.toURI();
+                URI relativize = contents.relativize(uri);
+                if (!relativize.equals(uri)) {
+                    locations.add(relativize);
+                }
+            }
+
+            return locations;
+        }
+
         @Override
         public boolean equals(Object o) {
             if (this == o) return true;
@@ -307,6 +464,11 @@
         public int hashCode() {
             return key.hashCode();
         }
+
+        public boolean implies(Notice fullLicense) {
+            return fullLicense.key.contains(this.key);
+        }
+
     }
 
     public List<File> collect(File dir, FileFilter filter) {
@@ -396,6 +558,46 @@
         }
     }
 
+    private static class DeclaredFilter implements FileFilter {
+        private final File file;
+
+        private DeclaredFilter(File file) {
+            this.file = file;
+        }
+
+        @Override
+        public boolean accept(File file) {
+            while (file != null) {
+                if (file.equals(this.file)) break;
+
+                if (file.isDirectory() && file.getName().endsWith(".contents")) return false;
+                file = file.getParentFile();
+            }
+
+            return true;
+        }
+    }
+
+    private static class Filters implements FileFilter {
+
+        List<FileFilter> filters = new ArrayList<FileFilter>();
+
+        private Filters(FileFilter... filters) {
+            for (FileFilter filter : filters) {
+                this.filters.add(filter);
+            }
+        }
+
+        @Override
+        public boolean accept(File file) {
+            for (FileFilter filter : filters) {
+                if (!filter.accept(file)) return false;
+            }
+
+            return true;
+        }
+    }
+
     public class Archive {
 
         private final URI uri;
@@ -408,6 +610,9 @@
         private final Set<License> declaredLicenses = new HashSet<License>();
         private final Set<Notice> declaredNotices = new HashSet<Notice>();
 
+        private final Set<License> otherLicenses = new HashSet<License>();
+        private final Set<Notice> otherNotices = new HashSet<Notice>();
+
         public Archive(File file) {
             this.uri = repository.toURI().relativize(file.toURI());
             this.file = file;
@@ -422,6 +627,14 @@
             return declaredNotices;
         }
 
+        public Set<License> getOtherLicenses() {
+            return otherLicenses;
+        }
+
+        public Set<Notice> getOtherNotices() {
+            return otherNotices;
+        }
+
         public Set<License> getLicenses() {
             return licenses;
         }
diff --git a/src/main/resources/legal/archive-licenses.vm b/src/main/resources/legal/archive-licenses.vm
new file mode 100644
index 0000000..8214319
--- /dev/null
+++ b/src/main/resources/legal/archive-licenses.vm
@@ -0,0 +1,41 @@
+<html>
+<head>
+    <link href="style.css" type="text/css" rel="stylesheet" />
+</head>
+
+<body>
+<a href="archives.html">archives</a> -  <a href="licenses.html">licenses</a> - <a href="notices.html">notices</a> - <a href="content">contents</a><br/><br/>
+<h1>$archive.uri</h1>
+
+<a href="content/${archive.uri}.contents">contents</a>
+
+<h2>Declared Licenses</h2>
+<ul>
+#foreach($license in $archive.declaredLicenses)
+    <li>
+        <ul>
+        #foreach($uri in $license.locations($archive))
+            <li>$uri</li>
+        #end
+        </ul>
+        <pre>$license.text</pre>
+    </li>
+#end
+</ul>
+
+<h2>Undeclared Licenses</h2>
+<ul>
+#foreach($license in $archive.otherLicenses)
+    <li>
+        <ul>
+        #foreach($uri in $license.locations($archive))
+            <li>$uri</li>
+        #end
+        </ul>
+        <pre>$license.text</pre>
+    </li>
+#end
+</ul>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/src/main/resources/legal/archive-notices.vm b/src/main/resources/legal/archive-notices.vm
new file mode 100644
index 0000000..d525b65
--- /dev/null
+++ b/src/main/resources/legal/archive-notices.vm
@@ -0,0 +1,41 @@
+<html>
+<head>
+    <link href="style.css" type="text/css" rel="stylesheet" />
+</head>
+
+<body>
+<a href="archives.html">archives</a> -  <a href="licenses.html">licenses</a> - <a href="notices.html">notices</a> - <a href="content">contents</a><br/><br/>
+<h1>$archive.uri</h1>
+
+<a href="content/${archive.uri}.contents">contents</a>
+
+<h2>Declared Notices</h2>
+<ul>
+#foreach($notice in $archive.declaredNotices)
+    <li>
+        <ul>
+        #foreach($uri in $notice.locations($archive))
+            <li>$uri</li>
+        #end
+        </ul>
+        <pre>$notice.text</pre>
+    </li>
+#end
+</ul>
+
+<h2>Undeclared Notices</h2>
+<ul>
+#foreach($notice in $archive.otherNotices)
+    <li>
+        <ul>
+        #foreach($uri in $notice.locations($archive))
+            <li>$uri</li>
+        #end
+        </ul>
+        <pre>$notice.text</pre>
+    </li>
+#end
+</ul>
+
+</body>
+</html>
diff --git a/src/main/resources/legal/archive.vm b/src/main/resources/legal/archive.vm
deleted file mode 100644
index c384b2f..0000000
--- a/src/main/resources/legal/archive.vm
+++ /dev/null
@@ -1,17 +0,0 @@
-<html>
-
-<body>
-<h1>$archive.uri</h1>
-<ul>
-#foreach($archive in $archives)
-    <li>$archive.uri
-        <ul>
-        #foreach($file in $archive.legal.entrySet())
-            <li><a href="$file.value">$file.key</a></li>
-        #end
-        </ul>
-    </li>
-#end
-</ul>
-</body>
-</html>
\ No newline at end of file
diff --git a/src/main/resources/legal/archives.vm b/src/main/resources/legal/archives.vm
index b4af37e..6fbdc56 100644
--- a/src/main/resources/legal/archives.vm
+++ b/src/main/resources/legal/archives.vm
@@ -1,16 +1,15 @@
 <html>
+<head>
+    <link href="style.css" type="text/css" rel="stylesheet" />
+</head>
 
 <body>
-
-<h1>All</h1>
-<ul>
-<li>all (licenses, notices, <a href="content">contents</a>)</li>
-</ul>
-
+<a href="archives.html">archives</a> -  <a href="licenses.html">licenses</a> - <a href="notices.html">notices</a> - <a href="content">contents</a><br/><br/>
 <h1>Archives</h1>
 <ul>
 #foreach($archive in $archives)
-    <li>$archive.uri  (licenses, notices, <a href="content/${archive.uri}.contents">contents</a>)
+
+    <li>$archive.uri  (<a href="${reports.licenses($archive)}">licenses</a>, <a href="$reports.notices($archive)">notices</a>, <a href="content/${archive.uri}.contents">contents</a>)
         <ul>
         #foreach($file in $archive.legal.entrySet())
             <li><a href="$file.value">$file.key</a></li>
diff --git a/src/main/resources/legal/licenses.vm b/src/main/resources/legal/licenses.vm
index 8b725e9..448ad96 100644
--- a/src/main/resources/legal/licenses.vm
+++ b/src/main/resources/legal/licenses.vm
@@ -1,6 +1,11 @@
 <html>
+<head>
+    <link href="style.css" type="text/css" rel="stylesheet" />
+</head>
 
 <body>
+<a href="archives.html">archives</a> -  <a href="licenses.html">licenses</a> - <a href="notices.html">notices</a> - <a href="content">contents</a><br/><br/>
+<h1>Licenses</h1>
 
 #foreach($license in $licenses)
     <h1>License</h1>
@@ -9,7 +14,7 @@
 </pre>
     <ul>
     #foreach($archive in $license.archives)
-        <li>$archive.uri</li>
+        <li><a href="${reports.licenses($archive)}">$archive.uri</a></li>
     #end
     </ul>
 #end
diff --git a/src/main/resources/legal/notices.vm b/src/main/resources/legal/notices.vm
index 917085c..edb653e 100644
--- a/src/main/resources/legal/notices.vm
+++ b/src/main/resources/legal/notices.vm
@@ -1,6 +1,10 @@
 <html>
-
+<head>
+    <link href="style.css" type="text/css" rel="stylesheet" />
+</head>
 <body>
+<a href="archives.html">archives</a> -  <a href="licenses.html">licenses</a> - <a href="notices.html">notices</a> - <a href="content">contents</a><br/><br/>
+<h1>Notices</h1>
 
 #foreach($notice in $notices)
     <h1>Notice</h1>
@@ -9,7 +13,7 @@
 </pre>
     <ul>
     #foreach($archive in $notice.archives)
-        <li>$archive.uri</li>
+        <li><a href="${reports.notices($archive)}">$archive.uri</a></li>
     #end
     </ul>
 #end
diff --git a/src/main/resources/legal/style.css b/src/main/resources/legal/style.css
new file mode 100644
index 0000000..19f7734
--- /dev/null
+++ b/src/main/resources/legal/style.css
@@ -0,0 +1,3 @@
+pre {
+    background: #eee;
+}
diff --git a/src/main/resources/licenses/asl.txt b/src/main/resources/licenses/asl-2.0.txt
similarity index 99%
rename from src/main/resources/licenses/asl.txt
rename to src/main/resources/licenses/asl-2.0.txt
index 7a4a3ea..d645695 100644
--- a/src/main/resources/licenses/asl.txt
+++ b/src/main/resources/licenses/asl-2.0.txt
@@ -199,4 +199,4 @@
    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.
\ No newline at end of file
+   limitations under the License.
diff --git a/src/main/resources/licenses/cddl-1.0.txt b/src/main/resources/licenses/cddl-1.0.txt
new file mode 100644
index 0000000..e374a64
--- /dev/null
+++ b/src/main/resources/licenses/cddl-1.0.txt
@@ -0,0 +1,324 @@
+COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
+
+1. Definitions.
+
+1.1. Contributor means each individual or entity that creates or
+     contributes to the creation of Modifications.
+
+1.2. Contributor Version means the combination of the Original
+     Software, prior Modifications used by a Contributor (if any), and
+     the Modifications made by that particular Contributor.
+
+1.3. Covered Software means (a) the Original Software, or (b)
+     Modifications, or (c) the combination of files containing
+     Original Software with files containing Modifications, in each
+     case including portions thereof.
+
+1.4. Executable means the Covered Software in any form other than
+     Source Code.
+
+1.5. Initial Developer means the individual or entity that first makes
+     Original Software available under this License.
+
+1.6. Larger Work means a work which combines Covered Software or
+     portions thereof with code not governed by the terms of this
+     License.
+
+1.7. License means this document.
+
+1.8. Licensable means having the right to grant, to the maximum extent
+     possible, whether at the time of the initial grant or
+     subsequently acquired, any and all of the rights conveyed herein.
+
+1.9. Modifications means the Source Code and Executable form of any of
+     the following:
+
+A. Any file that results from an addition to, deletion from or
+modification of the contents of a file containing Original Software or
+previous Modifications;
+
+B. Any new file that contains any part of the Original Software or
+previous Modification; or
+
+C. Any new file that is contributed or otherwise made available under
+the terms of this License.
+
+1.10. Original Software means the Source Code and Executable form of
+      computer software code that is originally released under this
+      License.
+
+1.11. Patent Claims means any patent claim(s), now owned or hereafter
+      acquired, including without limitation, method, process, and
+      apparatus claims, in any patent Licensable by grantor.
+
+1.12. Source Code means (a) the common form of computer software code
+      in which modifications are made and (b) associated documentation
+      included in or with such code.
+
+1.13. You (or Your) means an individual or a legal entity exercising
+      rights under, and complying with all of the terms of, this
+      License. For legal entities, You includes any entity which
+      controls, is controlled by, or is under common control with
+      You. For purposes of this definition, control means (a)?the
+      power, direct or indirect, to cause the direction or management
+      of such entity, whether by contract or otherwise, or
+      (b)?ownership of more than fifty percent (50%) of the
+      outstanding shares or beneficial ownership of such entity.
+
+2. License Grants.
+
+2.1. The Initial Developer Grant.  Conditioned upon Your compliance
+with Section 3.1 below and subject to third party intellectual
+property claims, the Initial Developer hereby grants You a world-wide,
+royalty-free, non-exclusive license: (a) under intellectual property
+rights (other than patent or trademark) Licensable by Initial
+Developer, to use, reproduce, modify, display, perform, sublicense and
+distribute the Original Software (or portions thereof), with or
+without Modifications, and/or as part of a Larger Work; and (b) under
+Patent Claims infringed by the making, using or selling of Original
+Software, to make, have made, use, practice, sell, and offer for sale,
+and/or otherwise dispose of the Original Software (or portions
+thereof).  (c) The licenses granted in Sections?2.1(a) and (b) are
+effective on the date Initial Developer first distributes or otherwise
+makes the Original Software available to a third party under the terms
+of this License.  (d) Notwithstanding Section?2.1(b) above, no patent
+license is granted: (1)?for code that You delete from the Original
+Software, or (2)?for infringements caused by: (i)?the modification of
+the Original Software, or (ii)?the combination of the Original
+Software with other software or devices.
+
+2.2. Contributor Grant.  Conditioned upon Your compliance with Section
+3.1 below and subject to third party intellectual property claims,
+each Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license: (a) under intellectual property rights (other
+than patent or trademark) Licensable by Contributor to use, reproduce,
+modify, display, perform, sublicense and distribute the Modifications
+created by such Contributor (or portions thereof), either on an
+unmodified basis, with other Modifications, as Covered Software and/or
+as part of a Larger Work; and (b) under Patent Claims infringed by the
+making, using, or selling of Modifications made by that Contributor
+either alone and/or in combination with its Contributor Version (or
+portions of such combination), to make, use, sell, offer for sale,
+have made, and/or otherwise dispose of: (1)?Modifications made by that
+Contributor (or portions thereof); and (2)?the combination of
+Modifications made by that Contributor with its Contributor Version
+(or portions of such combination).  (c) The licenses granted in
+Sections?2.2(a) and 2.2(b) are effective on the date Contributor first
+distributes or otherwise makes the Modifications available to a third
+party.  (d) Notwithstanding Section?2.2(b) above, no patent license is
+granted: (1)?for any code that Contributor has deleted from the
+Contributor Version; (2)?for infringements caused by: (i)?third party
+modifications of Contributor Version, or (ii)?the combination of
+Modifications made by that Contributor with other software (except as
+part of the Contributor Version) or other devices; or (3)?under Patent
+Claims infringed by Covered Software in the absence of Modifications
+made by that Contributor.
+
+3. Distribution Obligations.
+
+3.1. Availability of Source Code.
+
+Any Covered Software that You distribute or otherwise make available
+in Executable form must also be made available in Source Code form and
+that Source Code form must be distributed only under the terms of this
+License. You must include a copy of this License with every copy of
+the Source Code form of the Covered Software You distribute or
+otherwise make available. You must inform recipients of any such
+Covered Software in Executable form as to how they can obtain such
+Covered Software in Source Code form in a reasonable manner on or
+through a medium customarily used for software exchange.
+
+3.2. Modifications.
+
+The Modifications that You create or to which You contribute are
+governed by the terms of this License. You represent that You believe
+Your Modifications are Your original creation(s) and/or You have
+sufficient rights to grant the rights conveyed by this License.
+
+3.3. Required Notices.  You must include a notice in each of Your
+Modifications that identifies You as the Contributor of the
+Modification. You may not remove or alter any copyright, patent or
+trademark notices contained within the Covered Software, or any
+notices of licensing or any descriptive text giving attribution to any
+Contributor or the Initial Developer.
+
+3.4. Application of Additional Terms.  You may not offer or impose any
+terms on any Covered Software in Source Code form that alters or
+restricts the applicable version of this License or the recipients
+rights hereunder. You may choose to offer, and to charge a fee for,
+warranty, support, indemnity or liability obligations to one or more
+recipients of Covered Software. However, you may do so only on Your
+own behalf, and not on behalf of the Initial Developer or any
+Contributor. You must make it absolutely clear that any such warranty,
+support, indemnity or liability obligation is offered by You alone,
+and You hereby agree to indemnify the Initial Developer and every
+Contributor for any liability incurred by the Initial Developer or
+such Contributor as a result of warranty, support, indemnity or
+liability terms You offer.
+
+3.5. Distribution of Executable Versions.  You may distribute the
+Executable form of the Covered Software under the terms of this
+License or under the terms of a license of Your choice, which may
+contain terms different from this License, provided that You are in
+compliance with the terms of this License and that the license for the
+Executable form does not attempt to limit or alter the recipients
+rights in the Source Code form from the rights set forth in this
+License. If You distribute the Covered Software in Executable form
+under a different license, You must make it absolutely clear that any
+terms which differ from this License are offered by You alone, not by
+the Initial Developer or Contributor. You hereby agree to indemnify
+the Initial Developer and every Contributor for any liability incurred
+by the Initial Developer or such Contributor as a result of any such
+terms You offer.
+
+3.6. Larger Works.  You may create a Larger Work by combining Covered
+Software with other code not governed by the terms of this License and
+distribute the Larger Work as a single product. In such a case, You
+must make sure the requirements of this License are fulfilled for the
+Covered Software.
+
+4. Versions of the License.
+
+4.1. New Versions.  Sun Microsystems, Inc. is the initial license
+steward and may publish revised and/or new versions of this License
+from time to time. Each version will be given a distinguishing version
+number. Except as provided in Section 4.3, no one other than the
+license steward has the right to modify this License.
+
+4.2. Effect of New Versions.
+
+You may always continue to use, distribute or otherwise make the
+Covered Software available under the terms of the version of the
+License under which You originally received the Covered Software. If
+the Initial Developer includes a notice in the Original Software
+prohibiting it from being distributed or otherwise made available
+under any subsequent version of the License, You must distribute and
+make the Covered Software available under the terms of the version of
+the License under which You originally received the Covered
+Software. Otherwise, You may also choose to use, distribute or
+otherwise make the Covered Software available under the terms of any
+subsequent version of the License published by the license steward.
+4.3. Modified Versions.
+
+When You are an Initial Developer and You want to create a new license
+for Your Original Software, You may create and use a modified version
+of this License if You: (a)?rename the license and remove any
+references to the name of the license steward (except to note that the
+license differs from this License); and (b)?otherwise make it clear
+that the license contains terms which differ from this License.
+
+5. DISCLAIMER OF WARRANTY.
+
+COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN AS IS BASIS,
+WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF
+DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR
+NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF
+THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE
+DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER
+CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR
+CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART
+OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED
+HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+6. TERMINATION.
+
+6.1. This License and the rights granted hereunder will terminate
+     automatically if You fail to comply with terms herein and fail to
+     cure such breach within 30 days of becoming aware of the
+     breach. Provisions which, by their nature, must remain in effect
+     beyond the termination of this License shall survive.
+
+6.2. If You assert a patent infringement claim (excluding declaratory
+     judgment actions) against Initial Developer or a Contributor (the
+     Initial Developer or Contributor against whom You assert such
+     claim is referred to as Participant) alleging that the
+     Participant Software (meaning the Contributor Version where the
+     Participant is a Contributor or the Original Software where the
+     Participant is the Initial Developer) directly or indirectly
+     infringes any patent, then any and all rights granted directly or
+     indirectly to You by such Participant, the Initial Developer (if
+     the Initial Developer is not the Participant) and all
+     Contributors under Sections?2.1 and/or 2.2 of this License shall,
+     upon 60 days notice from Participant terminate prospectively and
+     automatically at the expiration of such 60 day notice period,
+     unless if within such 60 day period You withdraw Your claim with
+     respect to the Participant Software against such Participant
+     either unilaterally or pursuant to a written agreement with
+     Participant.
+
+6.3. In the event of termination under Sections?6.1 or 6.2 above, all
+     end user licenses that have been validly granted by You or any
+     distributor hereunder prior to termination (excluding licenses
+     granted to You by any distributor) shall survive termination.
+
+7. LIMITATION OF LIABILITY.
+
+UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
+(INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
+DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED
+SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY
+PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST
+PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR
+MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN
+IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH
+DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR
+DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTYS NEGLIGENCE TO THE
+EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO
+NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL
+DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+8. U.S. GOVERNMENT END USERS.
+
+The Covered Software is a commercial item, as that term is defined in
+48?C.F.R.?2.101 (Oct. 1995), consisting of commercial computer
+software (as that term is defined at 48 C.F.R. ?252.227-7014(a)(1))
+and commercial computer software documentation as such terms are used
+in 48?C.F.R.?12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and
+48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all
+U.S. Government End Users acquire Covered Software with only those
+rights set forth herein. This U.S. Government Rights clause is in lieu
+of, and supersedes, any other FAR, DFAR, or other clause or provision
+that addresses Government rights in computer software under this
+License.
+
+9. MISCELLANEOUS.
+
+This License represents the complete agreement concerning subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. This License shall be governed by
+the law of the jurisdiction specified in a notice contained within the
+Original Software (except to the extent applicable law, if any,
+provides otherwise), excluding such jurisdictions conflict-of-law
+provisions. Any litigation relating to this License shall be subject
+to the jurisdiction of the courts located in the jurisdiction and
+venue specified in a notice contained within the Original Software,
+with the losing party responsible for costs, including, without
+limitation, court costs and reasonable attorneys fees and
+expenses. The application of the United Nations Convention on
+Contracts for the International Sale of Goods is expressly
+excluded. Any law or regulation which provides that the language of a
+contract shall be construed against the drafter shall not apply to
+this License. You agree that You alone are responsible for compliance
+with the United States export administration regulations (and the
+export control laws and regulation of any other countries) when You
+use, distribute or otherwise make available any Covered Software.
+
+10. RESPONSIBILITY FOR CLAIMS.
+
+As between Initial Developer and the Contributors, each party is
+responsible for claims and damages arising, directly or indirectly,
+out of its utilization of rights under this License and You agree to
+work with Initial Developer and Contributors to distribute such
+responsibility on an equitable basis. Nothing herein is intended or
+shall be deemed to constitute any admission of liability.
+
+NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND
+DISTRIBUTION LICENSE (CDDL) The GlassFish code released under the CDDL
+shall be governed by the laws of the State of California (excluding
+conflict-of-law provisions). Any litigation relating to this License
+shall be subject to the jurisdiction of the Federal Courts of the
+Northern District of California and the state courts of the State of
+California, with venue lying in Santa Clara County, California.
diff --git a/src/main/resources/licenses/cpl-1.0.txt b/src/main/resources/licenses/cpl-1.0.txt
new file mode 100644
index 0000000..cf88cd9
--- /dev/null
+++ b/src/main/resources/licenses/cpl-1.0.txt
@@ -0,0 +1,235 @@
+Common Public License - v 1.0
+
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON
+PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE
+PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and
+   documentation distributed under this Agreement, and
+
+b) in the case of each subsequent Contributor:
+
+i) changes to the Program, and
+
+ii) additions to the Program;
+
+where such changes and/or additions to the Program originate from and are
+distributed by that particular Contributor. A Contribution 'originates'
+from a Contributor if it was added to the Program by such Contributor
+itself or anyone acting on such Contributor's behalf. Contributions do not
+include additions to the Program which: (i) are separate modules of
+software distributed in conjunction with the Program under their own
+license agreement, and (ii) are not derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+
+"Licensed Patents " mean patent claims licensable by a Contributor which
+are necessarily infringed by the use or sale of its Contribution alone or
+when combined with the Program.
+
+
+"Program" means the Contributions distributed in accordance with this
+Agreement.
+
+
+"Recipient" means anyone who receives the Program under this Agreement,
+including all Contributors.
+
+
+2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide, royalty-free copyright license to
+reproduce, prepare derivative works of, publicly display, publicly
+perform, distribute and sublicense the Contribution of such Contributor,
+if any, and such derivative works, in source code and object code form.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide, royalty-free patent license under
+Licensed Patents to make, use, sell, offer to sell, import and otherwise
+transfer the Contribution of such Contributor, if any, in source code and
+object code form. This patent license shall apply to the combination of the
+Contribution and the Program if, at the time the Contribution is added by
+the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply
+to any other combinations which include the Contribution. No hardware per se
+is licensed hereunder.
+
+c) Recipient understands that although each Contributor grants the licenses
+to its Contributions set forth herein, no assurances are provided by any
+Contributor that the Program does not infringe the patent or other
+intellectual property rights of any other entity. Each Contributor disclaims
+any liability to Recipient for claims brought by any other entity based on
+infringement of intellectual property rights or otherwise. As a condition to
+exercising the rights and licenses granted hereunder, each Recipient hereby
+assumes sole responsibility to secure any other intellectual property rights
+needed, if any. For example, if a third party patent license is required to
+allow Recipient to distribute the Program, it is Recipient's responsibility
+to acquire that license before distributing the Program.
+
+d) Each Contributor represents that to its knowledge it has sufficient
+copyright rights in its Contribution, if any, to grant the copyright license
+set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under
+its own license agreement, provided that:
+
+a) it complies with the terms and conditions of this Agreement; and
+
+b) its license agreement:
+
+i) effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose;
+
+ii) effectively excludes on behalf of all Contributors all liability for
+damages, including direct, indirect, special, incidental and consequential
+damages, such as lost profits;
+
+iii) states that any provisions which differ from this Agreement are offered
+by that Contributor alone and not by any other party; and
+
+iv) states that source code for the Program is available from such
+Contributor, and informs licensees how to obtain it in a reasonable manner on
+or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+a) it must be made available under this Agreement; and
+
+b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained within
+the Program.
+
+Each Contributor must identify itself as the originator of its
+Contribution, if any, in a manner that reasonably allows subsequent
+Recipients to identify the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities
+with respect to end users, business partners and the like. While this
+license is intended to facilitate the commercial use of the Program, the
+Contributor who includes the Program in a commercial product offering
+should do so in a manner which does not create potential liability for
+other Contributors. Therefore, if a Contributor includes the Program in a
+commercial product offering, such Contributor ("Commercial Contributor")
+hereby agrees to defend and indemnify every other Contributor ("Indemnified
+Contributor") against any losses, damages and costs (collectively "Losses")
+arising from claims, lawsuits and other legal actions brought by a third
+party against the Indemnified Contributor to the extent caused by the acts
+or omissions of such Commercial Contributor in connection with its
+distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses relating
+to any actual or alleged intellectual property infringement. In order to
+qualify,
+an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial
+Contributor to control, and cooperate with the Commercial Contributor in,
+the defense and any related settlement negotiations. The Indemnified
+Contributor may participate in any such claim at its own expense.
+
+
+For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance claims,
+or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under
+this section, the Commercial Contributor would have to defend claims
+against the other Contributors related to those performance claims and
+warranties, and if a court requires any other Contributor to pay any
+damages as a result, the Commercial Contributor must pay those damages.
+
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED
+ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER
+EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR
+CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A
+PARTICULAR PURPOSE. Each Recipient is solely responsible for determining
+the appropriateness of using and distributing the Program and assumes all
+risks associated with its exercise of rights under this Agreement,
+including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations.
+
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
+CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION
+LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
+EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further action
+by the parties hereto, such provision shall be reformed to the minimum
+extent necessary to make such provision valid and enforceable.
+
+
+If Recipient institutes patent litigation against a Contributor with
+respect to a patent applicable to software (including a cross-claim or
+counterclaim in a lawsuit), then any patent licenses granted by that
+Contributor to such Recipient under this Agreement shall terminate as
+of the date such litigation is filed. In addition, if Recipient
+institutes patent litigation against any entity (including a cross-claim
+or counterclaim in a lawsuit) alleging that the Program itself (excluding
+combinations of the Program with other software or hardware) infringes
+such Recipient's patent(s), then such Recipient's rights granted under
+Section 2(b) shall terminate as of the date such litigation is filed.
+
+
+All Recipient's rights under this Agreement shall terminate if it fails
+to comply with any of the material terms or conditions of this Agreement
+and does not cure such failure in a reasonable period of time after
+becoming aware of such noncompliance. If all Recipient's rights under this
+Agreement terminate, Recipient agrees to cease use and distribution of the
+Program as soon as reasonably practicable. However, Recipient's obligations
+under this Agreement and any licenses granted by Recipient relating to the
+Program shall continue and survive.
+
+
+Everyone is permitted to copy and distribute copies of this Agreement,
+but in order to avoid inconsistency the Agreement is copyrighted and may
+only be modified in the following manner. The Agreement Steward reserves
+the right to publish new versions (including revisions) of this Agreement
+from time to time. No one other than the Agreement Steward has the right
+to modify this Agreement. IBM is the initial Agreement Steward. IBM may
+assign the responsibility to serve as the Agreement Steward to a suitable
+separate entity. Each new version of the Agreement will be given a
+distinguishing version number. The Program (including Contributions) may
+always be distributed subject to the version of the Agreement under which
+it was received. In addition, after a new version of the Agreement is
+published, Contributor may elect to distribute the Program (including its
+Contributions) under the new version. Except as expressly stated in
+Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program
+not expressly granted under this Agreement are reserved.
+
+
+This Agreement is governed by the laws of the State of New York and the
+intellectual property laws of the United States of America. No party to this
+Agreement will bring a legal action under this Agreement more than one year
+after the cause of action arose. Each party waives its rights to a jury
+trial in any resulting litigation.
