diff --git a/meta/files/common-licenses/LPPL-1.1 b/meta/files/common-licenses/LPPL-1.1
new file mode 100644
index 0000000..8083319
--- /dev/null
+++ b/meta/files/common-licenses/LPPL-1.1
@@ -0,0 +1,316 @@
+
+
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.1  1999-07-10
+
+Copyright 1999 LaTeX3 Project
+    Everyone is allowed to distribute verbatim copies of this
+    license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the license under which the
+base LaTeX distribution is distributed.
+
+You may use this license for any program that you have written and wish
+to distribute.  This license may be particularly suitable if your
+program is TeX-related (such as a LaTeX package), but you may use it
+even if your program is unrelated to TeX.  The section `WHETHER AND HOW
+TO DISTRIBUTE PROGRAMS UNDER THIS LICENSE`, below, gives instructions,
+examples, and recommendations for authors who are considering
+distributing their programs under this license.
+
+In this license document, `The Program` refers to any program
+distributed under this license.
+
+This license gives conditions under which The Program may be distributed
+and conditions under which modified versions of The Program may be
+distributed.  Individual files of The Program may bear supplementary
+and/or superseding conditions on modification of themselves and on the
+distribution of modified versions of themselves, but *no* file of The
+Program may bear supplementary or superseding conditions on the
+distribution of an unmodified copy of the file.  A distributor wishing
+to distribute a complete, unmodified copy of The Program therefore
+needs to check the conditions only in this license and nowhere else.
+
+Activities other than distribution and/or modification of The Program
+are not covered by this license; they are outside its scope.  In
+particular, the act of running The Program is not restricted.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of The Program
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+The Program.  If you do not see how to achieve your goal while 
+meeting these conditions, then read the document `cfgguide.tex`
+in the base LaTeX distribution for suggestions.
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+You may distribute a complete, unmodified copy of The Program.
+Distribution of only part of The Program is not allowed.
+
+You may not modify in any way a file of The Program that bears a legal
+notice forbidding modification of that file.
+
+You may distribute a modified file of The Program if, and only if, the
+following eight conditions are met:
+
+  1. You must meet any additional conditions borne by the file on the
+     distribution of a modified version of the file as described below
+     in the subsection `Additional Conditions on Individual Files of
+     The Program`.
+ 
+  2. If the file is a LaTeX software file, then you must meet any
+     applicable additional conditions on the distribution of a modified
+     version of the file that are described below in the subsection
+     `Additional Conditions on LaTeX Software Files`.
+ 
+  3. You must not distribute the modified file with the filename of the
+     original file.
+ 
+  4. In the modified file, you must acknowledge the authorship and
+     name of the original file, and the name (if any) of the program
+     which contains it.
+ 
+  5. You must change any identification string in the file to indicate
+     clearly that the modified file is not part of The Program.
+ 
+  6. You must change any addresses in the modified file for the
+     reporting of errors in the file or in The Program generally to
+     ensure that reports for files no longer maintained by the original
+     maintainers will be directed to the maintainers of the modified
+     files.
+ 
+  7. You must distribute the modified file under a license that forbids
+     distribution both of the modified file and of any files derived
+     from the modified file with the filename of the original file.
+ 
+  8. You must do either (A) or (B):
+
+       (A) distribute a copy of The Program (that is, a complete,
+           unmodified copy of The Program) together with the modified
+           file; if your distribution of the modified file is made by
+           offering access to copy the modified file from a designated
+           place, then offering equivalent access to copy The Program
+           from the same place meets this condition, even though third
+           parties are not compelled to copy The Program along with the
+           modified file;
+
+       (B) provide to those who receive the modified file information
+           that is sufficient for them to obtain a copy of The Program;
+           for example, you may provide a Uniform Resource Locator (URL)
+           for a site that you expect will provide them with a copy of 
+           The Program free of charge (either the version from which
+           your modification is derived, or perhaps a later version).
+
+Note that in the above, `distribution` of a file means making the
+file available to others by any means.  This includes, for instance,
+installing the file on any machine in such a way that the file is
+accessible by users other than yourself.  `Modification` of a file
+means any procedure that produces a derivative file under any
+applicable law -- that is, a file containing the original file or
+a significant portion of it, either verbatim or with modifications
+and/or translated into another language.
+
+Changing the name of a file is considered to be a modification of
+the file.
+
+The distribution conditions in this license do not have to be
+applied to files that have been modified in accordance with the
+above conditions.  Note, however, that Condition 7. does apply to
+any such modified file.
+
+The conditions above are not intended to prohibit, and hence do not
+apply to, the updating, by any method, of a file so that it becomes
+identical to the latest version of that file of The Program.
+
+ 
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a file of The Program, even for your own
+personal use, without also meeting the above eight conditions for
+distributing the modified file.  While you might intend that such
+modified files will never be distributed, often this will happen by
+accident -- you may forget that you have modified the file; or it may
+not occur to you when allowing others to access the modified file
+that you are thus distributing it and violating the conditions of
+this license.  It is usually in your best interest to keep your copy
+of The Program identical with the public one.  Many programs provide
+ways to control the behavior of that program without altering its
+licensed files.
+
+
+Additional Conditions on Individual Files of The Program
+--------------------------------------------------------
+
+An individual file of The Program may bear additional conditions that
+supplement and/or supersede the conditions in this license if, and only
+if, such additional conditions exclusively concern modification of the
+file or distribution of a modified version of the file.  The conditions
+on individual files of The Program therefore may differ only with
+respect to the kind and extent of modification of those files that
+is allowed, and with respect to the distribution of modified versions
+of those files.
+
+
+Additional Conditions on LaTeX Software Files
+---------------------------------------------
+
+If a file of The Program is intended to be used with LaTeX (that is,
+if it is a LaTeX software file), then the following additional
+conditions, which supplement and/or supersede the conditions
+above, apply to the file according to its filename extension:
+
+  - You may not modify any file with filename extension `.ins` since
+    these are installation files containing the legal notices that are
+    placed in the files they generate.
+ 
+  - You may distribute modified versions of files with filename
+    extension `.fd` (LaTeX font definition files) under the standard
+    conditions of the LPPL as described above.  You may also distribute
+    such modified LaTeX font definition files with their original names
+    provided that:
+    (1) the only changes to the original files either enable use of
+        available fonts or prevent attempts to access unavailable fonts;
+    (2) you also distribute the original, unmodified files (TeX input
+        paths can be used to control which set of LaTeX font definition
+        files is actually used by TeX).
+
+  - You may distribute modified versions of files with filename
+    extension `.cfg` (configuration files) with their original names.
+    The Program may (and usually will) specify the range of commands
+    that are allowed in a particular configuration file.
+ 
+Because of portability and exchangeability issues in LaTeX software,
+The LaTeX3 Project deprecates the distribution of modified versions of
+components of LaTeX or of generally available contributed code for them,
+but such distribution can meet the conditions of this license.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for The Program.  Except when otherwise stated in
+writing, The Copyright Holder provides The Program `as is`, without
+warranty of any kind, either expressed or implied, including, but not
+limited to, the implied warranties of merchantability and fitness for
+a particular purpose.  The entire risk as to the quality and performance
+of The Program is with you.  Should The Program prove defective, you
+assume the cost of all necessary servicing, repair, or correction.
+
+In no event unless agreed to in writing will The Copyright Holder, or
+any author named in the files of The Program, or any other party who may
+distribute and/or modify The Program as permitted below, be liable to
+you for damages, including any general, special, incidental or
+consequential damages arising out of any use of The Program or out of
+inability to use The Program (including, but not limited to, loss of
+data, data being rendered inaccurate, or losses sustained by anyone as
+a result of any failure of The Program to operate with any other
+programs), even if The Copyright Holder or said author or said other
+party has been advised of the possibility of such damages.
+
+
+WHETHER AND HOW TO DISTRIBUTE PROGRAMS UNDER THIS LICENSE
+=========================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+programs under this license.  These authors are addressed as `you` in
+this section.
+
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your program you want or need to use *distribution*
+conditions that differ from those in this license, then do not refer to
+this license anywhere in your program but instead distribute your
+program under a different license.  You may use the text of this license
+as a model for your own license, but your license should not refer to
+the LPPL or otherwise give the impression that your program is
+distributed under the LPPL.
+
+The document `modguide.tex` in the base LaTeX distribution explains
+the motivation behind the conditions of this license.  It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate.  Even if your program is
+unrelated to LaTeX, the discussion in `modguide.tex` may still be
+relevant, and authors intending to distribute their programs under any
+license are encouraged to read it.
+
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the files of your program both
+an explicit copyright notice including your name and the year and also
+a statement that the distribution and/or modification of the file is
+constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+  %% pig.dtx
+  %% Copyright 2001 M. Y. Name
+  %
+  % This program may be distributed and/or modified under the
+  % conditions of the LaTeX Project Public License, either version 1.1
+  % of this license or (at your option) any later version.
+  % The latest version of this license is in
+  %   http://www.latex-project.org/lppl.txt
+  % and version 1.1 or later is part of all distributions of LaTeX 
+  % version 1999/06/01 or later.
+  %
+  % This program consists of the files pig.dtx and pig.ins
+
+Given such a notice and statement in a file, the conditions given in
+this license document would apply, with `The Program` referring to the
+two files `pig.dtx` and `pig.ins`, and `The Copyright Holder` referring
+to the person `M. Y. Name`.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes The Program
+
+   The LPPL requires that distributions of The Program contain all the
+   files of The Program.  It is therefore important that you provide a
+   way for the licensee to determine which files constitute The Program.
+   This could, for example, be achieved by explicitly listing all the
+   files of The Program near the copyright notice of each file or by
+   using a line like
+
+    % This program consists of all files listed in manifest.txt.
+
+   in that place.  In the absence of an unequivocal list it might be
+   impossible for the licensee to determine what is considered by you
+   to comprise The Program.
+
+ Noting Exceptional Files
+  
+   If The Program contains any files bearing additional conditions on
+   modification, or on distribution of modified versions, of those
+   files (other than those listed in `Additional Conditions on LaTeX
+   Software Files`), then it is recommended that The Program contain a
+   prominent file that defines the exceptional conditions, and either
+   lists the exceptional files or defines one or more categories of
+   exceptional files.
+
+   Files containing the text of a license (such as this file) are
+   often examples of files bearing more restrictive conditions on
+   modification.  LaTeX configuration files (with filename extension
+   `.cfg`) are examples of files bearing less restrictive conditions
+   on the distribution of a modified version of the file.  The
+   additional conditions on LaTeX software given above are examples 
+   of declaring a category of files bearing exceptional additional
+   conditions.
+
