diff --git a/meta/files/common-licenses/Motosoto b/meta/files/common-licenses/Motosoto
new file mode 100644
index 0000000..7a524f6
--- /dev/null
+++ b/meta/files/common-licenses/Motosoto
@@ -0,0 +1,422 @@
+
+MOTOSOTO OPEN SOURCE LICENSE - Version 0.9.1
+This Motosoto Open Source License (the "License") applies to "Community
+Portal Server" and related software products as well as any updatesor
+maintenance releases of that software ("Motosoto Products") that are
+distributed by Motosoto.Com B.V. ("Licensor"). Any Motosoto
+Product licensed pursuant to this License is a "Licensed Product." Licensed
+Product, in its entirety, is protected by Dutch copyright law.
+This
+License identifies the terms under which you may use, copy, distribute or modify
+Licensed Product and has been submitted to the Open Software Initiative (OSI)
+for approval.
+
+Preamble
+
+This Preamble is intended to describe, in plain English, the nature and scope of
+this License. However, this Preamble is not a part of this license. The legal
+effect of this License is dependent only upon the terms of the License and not
+this Preamble.
+This License complies with the Open Source Definition and has been approved by
+Open Source Initiative. Software distributed under this License may be marked
+as "OSI Certified Open Source Software."
+
+This License provides that:
+
+1. You may use, sell or give away the Licensed Product, alone or as a
+component of an aggregate software distribution containing
+programs from several different sources. No royalty or other fee is
+required.
+
+2. Both Source Code and executable versions of the Licensed Product,
+including Modifications made by previous Contributors, are
+available for your use. (The terms "Licensed Product," "Modifications,"
+"Contributors" and "Source Code" are defined in the License.)
+
+3. You are allowed to make Modifications to the Licensed Product, and you
+can create Derivative Works from it. (The term "Derivative
+Works" is defined in the License.)
+
+4. By accepting the Licensed Product under the provisions of this License,
+you agree that any Modifications you make to the Licensed
+Product and then distribute are governed by the provisions of this
+License. In particular, you must make the Source Code of your
+Modifications available to others.
+
+5. You may use the Licensed Product for any purpose, but the Licensor is
+not providing you any warranty whatsoever, nor is the Licensor
+accepting any liability in the event that the Licensed Product doesn`t
+work properly or causes you any injury or damages.
+
+6. If you sublicense the Licensed Product or Derivative Works, you may
+charge fees for warranty or support, or for accepting indemnity
+or liability obligations to your customers. You cannot charge for the
+Source Code.
+
+7. If you assert any patent claims against the Licensor relating to the
+Licensed Product, or if you breach any terms of the License, your
+rights to the Licensed Product under this License automatically
+terminate.
+
+You may use this License to distribute your own Derivative Works, in which
+case the provisions of this License will apply to your Derivative
+Works just as they do to the original Licensed Product.
+
+Alternatively, you may distribute your Derivative Works under any other
+OSI-approved Open Source license, or under a proprietary license of
+your choice. If you use any license other than this License, however, you must
+continue to fulfill the requirements of this License (including the
+provisions relating to publishing the Source Code) for those portions of your
+Derivative Works that consist of the Licensed Product, including
+the files containing Modifications.
+
+New versions of this License may be published from time to time. You may
+choose to continue to use the license terms in this version of the
+License or those from the new version. However, only the Licensor has the right
+to change the License terms as they apply to the Licensed
+Product.
+This License relies on precise definitions for certain terms. Those terms are
+defined when they are first used, and the definitions are repeated for
+your convenience in a Glossary at the end of the License.
+
+License Terms
+
+1. Grant of License From Licensor.
+
+Licensor
+hereby grants you a world-wide, royalty-free, non-exclusive license, subject to
+third
+party intellectual property claims, to do the following:
+
+a. Use, reproduce, modify, display, perform, sublicense and
+distribute Licensed Product or portions thereof (including
+Modifications as hereinafter defined), in both Source Code or as
+an executable program. "Source Code" means the preferred
+form for making modifications to the Licensed Product, including
+all modules contained therein, plus any associated
+interface definition files, scripts used to control compilation
+and installation of an executable program, or a list of
+differential comparisons against the Source Code of the Licensed
+Product.
+
+b. Create Derivative Works (as that term is defined under Dutch
+copyright law) of Licensed Product by adding to or deleting
+from the substance or structure of said Licensed Product.
+
+c. Under claims of patents now or hereafter owned or controlled
+by Licensor, to make, use, sell, offer for sale, have made,
+and/or otherwise dispose of Licensed Product or portions thereof,
+but solely to the extent that any such claim is necessary to
+enable you to make, use, sell, offer for sale, have made, and/or
+otherwise dispose of Licensed Product or portions thereof or
+Derivative Works thereof.
+
+2. Grant of License to Modifications From
+Contributor.
+
+"Modifications" means any additions to or
+deletions from the substance or
+structure of (i) a file containing Licensed Product, or (ii) any new file
+that contains any part of Licensed Product. Hereinafter in this
+License, the term "Licensed Product" shall include all previous
+Modifications that you receive from any Contributor. By
+application of the provisions in Section 4(a) below, each person or
+entity who created or contributed to the creation of, and distributed,
+a Modification (a "Contributor") hereby grants you a world-wide,
+royalty-free, non-exclusive license, subject to third party
+intellectual property claims, to do the following:
+
+a. Use, reproduce, modify, display, perform, sublicense and
+distribute any Modifications created by such Contributor or
+portions thereof, in both Source Code or as an executable program,
+either on an unmodified basis or as part of Derivative
+Works.
+
+b. Under claims of patents now or hereafter owned or controlled by
+Contributor, to make, use, sell, offer for sale, have made,
+and/or otherwise dispose of Modifications or portions thereof, but
+solely to the extent that any such claim is necessary to
+enable you to make, use, sell, offer for sale, have made, and/or
+otherwise dispose of Modifications or portions thereof or
+Derivative Works thereof.
+
+3. Exclusions From License Grant.
+
+Nothing in
+this License shall be deemed to grant any rights to trademarks, copyrights,
+patents,
+trade secrets or any other intellectual property of Licensor or any
+Contributor except as expressly stated herein. No patent license is
+granted separate from the Licensed Product, for code that you delete from
+the Licensed Product, or for combinations of the Licensed
+Product with other software or hardware. No right is granted to the
+trademarks of Licensor or any Contributor even if such marks are
+included in the Licensed Product. Nothing in this License shall be
+interpreted to prohibit Licensor from licensing under different
+terms from this License any code that Licensor otherwise would have a
+right to license.
+
+4. Your Obligations Regarding Distribution.
+
+a. Application of This License to Your
+Modifications. As an express condition for your use of the Licensed
+Product, you
+hereby agree that any Modifications that you create or to which
+you contribute, and which you distribute, are governed by the
+terms of this License including, without limitation, Section 2.
+Any Modifications that you create or to which you contribute
+may be distributed only under the terms of this License or a
+future version of this License released under Section 7. You must
+include a copy of this License with every copy of the
+Modifications you distribute. You agree not to offer or impose any
+terms on any Source Code or executable version of the Licensed
+Product or Modifications that alter or restrict the applicable
+version of this License or the recipients` rights hereunder.
+However, you may include an additional document offering the
+additional rights described in Section 4(e).
+
+b. Availability of Source Code. You must make
+available, under the terms of this License, the Source Code of the Licensed
+Product and any Modifications that you distribute, either on the
+same media as you distribute any executable or other form
+of the Licensed Product, or via a mechanism generally accepted in
+the software development community for the electronic
+transfer of data (an "Electronic Distribution Mechanism"). The
+Source Code for any version of Licensed Product or
+Modifications that you distribute must remain available for at
+least twelve (12) months after the date it initially became
+available, or at least six (6) months after a subsequent version
+of said Licensed Product or Modifications has been made
+available. You are responsible for ensuring that the Source Code
+version remains available even if the Electronic Distribution
+Mechanism is maintained by a third party.
+
+c. Description of Modifications. You must cause any
+Modifications that you create or to which you contribute, and which
+you distribute, to contain a file documenting the additions,
+changes or deletions you made to create or contribute to those
+Modifications, and the dates of any such additions, changes or
+deletions. You must include a prominent statement that the
+Modifications are derived, directly or indirectly, from the
+Licensed Product and include the names of the Licensor and any
+Contributor to the Licensed Product in (i) the Source Code and
+(ii) in any notice displayed by a version of the Licensed
+Product you distribute or in related documentation in which you
+describe the origin or ownership of the Licensed Product.
+You may not modify or delete any preexisting copyright notices in
+the Licensed Product.
+
+d. Intellectual Property Matters.
+
+i. Third Party Claims. If you have
+knowledge that a license to a third party`s intellectual property right is
+required
+to exercise the rights granted by this License, you must
+include a text file with the Source Code distribution titled
+"LEGAL" that describes the claim and the party making the
+claim in sufficient detail that a recipient will know
+whom to contact. If you obtain such knowledge after you make
+any Modifications available as described in Section
+4(b), you shall promptly modify the LEGAL file in all copies
+you make available thereafter and shall take other
+steps (such as notifying appropriate mailing lists or
+newsgroups) reasonably calculated to inform those who
+received the Licensed Product from you that new knowledge
+has been obtained.
+
+ii. Contributor APIs. If your
+Modifications include an application programming interface ("API") and you have
+knowledge of patent licenses that are reasonably necessary
+to implement that API, you must also include this
+information in the LEGAL file.
+
+iii. Representations. You represent that,
+except as disclosed pursuant to 4(d)(i) above, you believe that any
+Modifications you distribute are your original creations and
+that you have sufficient rights to grant the rights
+conveyed by this License.
+
+e. Required Notices. You must duplicate this
+License in any documentation you provide along with the Source Code of any
+Modifications you create or to which you contribute, and which you
+distribute, wherever you describe recipients` rights
+relating to Licensed Product. You must duplicate the notice
+contained in Exhibit A (the "Notice") in each file of the Source
+Code of any copy you distribute of the Licensed Product. If you
+created a Modification, you may add your name as a
+Contributor to the Notice. If it is not possible to put the Notice
+in a particular Source Code file due to its structure, then
+you must include such Notice in a location (such as a relevant
+directory file) where a user would be likely to look for such a
+notice. You may choose to offer, and charge a fee for, warranty,
+support, indemnity or liability obligations to one or more
+recipients of Licensed Product. However, you may do so only on
+your own behalf, and not on behalf of the Licensor or any
+Contributor. You must make it clear that any such warranty,
+support, indemnity or liability obligation is offered by you
+alone, and you hereby agree to indemnify the Licensor and every
+Contributor for any liability incurred by the Licensor or such
+Contributor as a result of warranty, support, indemnity or
+liability terms you offer.
+
+f. Distribution of Executable Versions. You may
+distribute Licensed Product as an executable program under a license of
+your choice that may contain terms different from this License
+provided (i) you have satisfied the requirements of Sections
+4(a) through 4(e) for that distribution, (ii) you include a
+conspicuous notice in the executable version, related documentation
+and collateral materials stating that the Source Code version of
+the Licensed Product is available under the terms of this
+License, including a description of how and where you have
+fulfilled the obligations of Section 4(b), (iii) you retain all
+existing copyright notices in the Licensed Product, and (iv) you
+make it clear that any terms that differ from this License are
+offered by you alone, not by Licensor or any Contributor. You
+hereby agree to indemnify the Licensor and every Contributor
+for any liability incurred by Licensor or such Contributor as a
+result of any terms you offer.
+
+g. Distribution of Derivative Works. You may
+create Derivative Works (e.g., combinations of some or all of the Licensed
+Product with other code) and distribute the Derivative Works as
+products under any other license you select, with the
+proviso that the requirements of this License are fulfilled for
+those portions of the Derivative Works that consist of the
+Licensed Product or any Modifications thereto.
+
+5. Inability to Comply Due to Statute or
+Regulation.
+
+If it is impossible for you to comply with any of
+the terms of this License with
+respect to some or all of the Licensed Product due to statute, judicial
+order, or regulation, then you must (i) comply with the terms of
+this License to the maximum extent possible, (ii) cite the statute or
+regulation that prohibits you from adhering to the License, and
+(iii) describe the limitations and the code they affect. Such description
+must be included in the LEGAL file described in Section 4(d),
+and must be included with all distributions of the Source Code. Except to
+the extent prohibited by statute or regulation, such
+description must be sufficiently detailed for a recipient of ordinary
+skill at computer programming to be able to understand it.
+
+6. Application of This License.
+
+This License
+applies to code to which Licensor or Contributor has attached the Notice in
+Exhibit A,
+which is incorporated herein by this reference.
+
+7. Versions of This License.
+
+a. Version. The Motosoto Open Source License is
+derived from the Jabber Open Source License. All changes are related to
+applicable law and the location of court.
+
+b. New Versions. Licensor may publish from time to
+time revised and/or new versions of the License.
+
+c. Effect of New Versions. Once Licensed Product
+has been published under a particular version of the License, you may always
+continue to use it under the terms of that version. You may also
+choose to use such Licensed Product under the terms of any
+subsequent version of the License published by Licensor. No one
+other than Lic ensor has the right to modify the terms
+applicable to Licensed Product created under this License.
+
+d. Derivative Works of this License. If you
+create or use a modified version of this License, which you may do only in
+order to
+apply it to software that is not already a Licensed Product under
+this License, you must rename your license so that it is not
+confusingly similar to this License, and must make it clear that
+your license contains terms that differ from this License. In
+so naming your license, you may not use any trademark of Licensor
+or any Contributor.
+
+8. Disclaimer of Warranty.
+
+LICENSED PRODUCT IS
+PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT
+WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, WITHOUT
+LIMITATION, WARRANTIES
+THAT THE LICENSED PRODUCT IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A
+PARTICULAR PURPOSE OR
+NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LICENSED PRODUCT IS
+WITH YOU. SHOULD LICENSED PRODUCT PROVE DEFECTIVE IN ANY RESPECT, YOU
+(AND NOT THE LICENSOR 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 LICENSED
+PRODUCT IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+9. Termination.
+
+a. Automatic Termination Upon Breach. This
+license and the rights granted hereunder will terminate automatically if you
+fail to comply with the terms herein and fail to cure such breach
+within thirty (30) days of becoming aware of the breach.
+All sublicenses to the Licensed Product that are properly granted
+shall survive any termination of this license. Provisions
+that, by their nature, must remain in effect beyond the
+termination of this License, shall survive.
+
+b. Termination Upon Assertion of Patent
+Infringement. If you initiate litigation by asserting a patent
+infringement claim
+(excluding declaratory judgment actions) against Licensor or a
+Contributor (Licensor or Contributor against whom you file
+such an action is referred to herein as "Respondent") alleging
+that Licensed Product directly or indirectly infringes any
+patent, then any and all rights granted by such Respondent to you
+under Sections 1 or 2 of this License shall terminate
+prospectively upon sixty (60) days notice from Respondent (the
+"Notice Period") unless within that Notice Period you
+either agree in writing (i) to pay Respondent a mutually agreeable
+reasonably royalty for your past or future use of Licensed
+Product made by such Respondent, or (ii) withdraw your litigation
+claim with respect to Licensed Product against such
+Respondent. If within said Notice Period a reasonable royalty and
+payment arrangement are not mutually agreed upon in
+writing by the parties or the litigation claim is not withdrawn,
+the rights granted by Licensor to you under Sections 1 and 2
+automatically terminate at the expiration of said Notice
+Period.
+
+c. Reasonable Value of This License. If you assert a
+patent infringement claim against Respondent alleging that Licensed
+Product directly or indirectly infringes any patent where such
+claim is resolved (such as by license or settlement) prior to
+the initiation of patent infringement litigation, then the
+reasonable value of the licenses granted by said Respondent under
+Sections 1 and 2 shall be taken into account in determining the
+amount or value of any payment or license.
+
+d. No Retroactive Effect of Termination. In the
+event of termination under Sections 9(a) or 9(b) above, all end user license
+agreements (excluding licenses to distributors and reselle rs)
+that have been validly granted by you or any distributor
+hereunder prior to termination shall survive
+termination.
+
+10. Limitation of Liability.
+
+UNDER NO
+CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
+(INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE LICENSOR, ANY
+CONTRIBUTOR, OR ANY
+DISTRIBUTOR OF LICENSED PRODUCT, 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 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
+PARTY
+
