diff --git a/hyracks-fullstack/LICENSE b/hyracks-fullstack/LICENSE
index 81ae2e0..7816559 100644
--- a/hyracks-fullstack/LICENSE
+++ b/hyracks-fullstack/LICENSE
@@ -513,3 +513,587 @@
    help produce our new eBooks, and how to subscribe to our email newsletter to
    hear about new eBooks.
 ---
+   Portions of the Apache Hyracks Dataflow Std test data
+       located at:
+         hyracks/hyracks-dataflow-std/src/test/resources/data/beer.txt
+
+   are available under Open Database & Database Contents Licenses:
+---
+   Open Database License (ODbL) v1.0
+
+       ODC Open Database License (ODbL)
+       Preamble
+       The Open Database License (ODbL) is a license agreement intended to
+       allow users to freely share, modify, and use this Database while
+       maintaining this same freedom for others. Many databases are covered by
+       copyright, and therefore this document licenses these rights. Some
+       jurisdictions, mainly in the European Union, have specific rights that
+       cover databases, and so the ODbL addresses these rights, too. Finally,
+       the ODbL is also an agreement in contract for users of this Database to
+       act in certain ways in return for accessing this Database.
+
+       Databases can contain a wide variety of types of content (images,
+       audiovisual material, and sounds all in the same database, for example),
+       and so the ODbL only governs the rights over the Database, and not the
+       contents of the Database individually. Licensors should use the ODbL
+       together with another license for the contents, if the contents have a
+       single set of rights that uniformly covers all of the contents. If the
+       contents have multiple sets of different rights, Licensors should
+       describe what rights govern what contents together in the individual
+       record or in some other way that clarifies what rights apply.
+
+       Sometimes the contents of a database, or the database itself, can be
+       covered by other rights not addressed here (such as private contracts,
+       trade mark over the name, or privacy rights / data protection rights
+       over information in the contents), and so you are advised that you may
+       have to consult other documents or clear other rights before doing
+       activities not covered by this License.
+
+       The Licensor (as defined below)
+
+       and
+
+       You (as defined below)
+
+       agree as follows:
+
+       1.0 Definitions of Capitalised Words
+       “Collective Database” – Means this Database in unmodified form as part
+       of a collection of independent databases in themselves that together are
+       assembled into a collective whole. A work that constitutes a Collective
+       Database will not be considered a Derivative Database.
+
+       “Convey” – As a verb, means Using the Database, a Derivative Database,
+       or the Database as part of a Collective Database in any way that enables
+       a Person to make or receive copies of the Database or a Derivative
+       Database. Conveying does not include interaction with a user through a
+       computer network, or creating and Using a Produced Work, where no
+       transfer of a copy of the Database or a Derivative Database occurs.
+       “Contents” – The contents of this Database, which includes the
+       information, independent works, or other material collected into the
+       Database. For example, the contents of the Database could be factual
+       data or works such as images, audiovisual material, text, or sounds.
+
+       “Database” – A collection of material (the Contents) arranged in a
+       systematic or methodical way and individually accessible by electronic
+       or other means offered under the terms of this License.
+
+       “Database Directive” – Means Directive 96/9/EC of the European
+       Parliament and of the Council of 11 March 1996 on the legal protection
+       of databases, as amended or succeeded.
+
+       “Database Right” – Means rights resulting from the Chapter III (“sui
+       generis”) rights in the Database Directive (as amended and as transposed
+       by member states), which includes the Extraction and Re-utilisation of
+       the whole or a Substantial part of the Contents, as well as any similar
+       rights available in the relevant jurisdiction under Section 10.4.
+
+       “Derivative Database” – Means a database based upon the Database, and
+       includes any translation, adaptation, arrangement, modification, or any
+       other alteration of the Database or of a Substantial part of the
+       Contents. This includes, but is not limited to, Extracting or
+       Re-utilising the whole or a Substantial part of the Contents in a new
+       Database.
+
+       “Extraction” – Means the permanent or temporary transfer of all or a
+       Substantial part of the Contents to another medium by any means or in
+       any form.
+
+       “License” – Means this license agreement and is both a license of rights
+       such as copyright and Database Rights and an agreement in contract.
+
+       “Licensor” – Means the Person that offers the Database under the terms
+       of this License.
+
+       “Person” – Means a natural or legal person or a body of persons
+       corporate or incorporate.
+
+       “Produced Work” – a work (such as an image, audiovisual material, text,
+       or sounds) resulting from using the whole or a Substantial part of the
+       Contents (via a search or other query) from this Database, a Derivative
+       Database, or this Database as part of a Collective Database.
+
+       “Publicly” – means to Persons other than You or under Your control by
+       either more than 50% ownership or by the power to direct their
+       activities (such as contracting with an independent consultant).
+
+       “Re-utilisation” – means any form of making available to the public all
+       or a Substantial part of the Contents by the distribution of copies, by
+       renting, by online or other forms of transmission.
+
+       “Substantial” – Means substantial in terms of quantity or quality or a
+       combination of both. The repeated and systematic Extraction or
+       Re-utilisation of insubstantial parts of the Contents may amount to the
+       Extraction or Re-utilisation of a Substantial part of the Contents.
+
+       “Use” – As a verb, means doing any act that is restricted by copyright
+       or Database Rights whether in the original medium or any other; and
+       includes without limitation distributing, copying, publicly performing,
+       publicly displaying, and preparing derivative works of the Database, as
+       well as modifying the Database as may be technically necessary to use it
+       in a different mode or format.
+
+       “You” – Means a Person exercising rights under this License who has not
+       previously violated the terms of this License with respect to the
+       Database, or who has received express permission from the Licensor to
+       exercise rights under this License despite a previous violation.
+
+       Words in the singular include the plural and vice versa.
+
+       2.0 What this License covers
+       2.1. Legal effect of this document. This License is:
+
+             a. A license of applicable copyright and neighbouring rights;
+
+             b. A license of the Database Right; and
+
+             c. An agreement in contract between You and the Licensor.
+
+       2.2 Legal rights covered. This License covers the legal rights in the
+       Database, including:
+
+             a. Copyright. Any copyright or neighbouring rights in the Database.
+       The copyright licensed includes any individual elements of the
+       Database, but does not cover the copyright over the Contents
+       independent of this Database. See Section 2.4 for details. Copyright
+       law varies between jurisdictions, but is likely to cover: the Database
+       model or schema, which is the structure, arrangement, and organisation
+       of the Database, and can also include the Database tables and table
+       indexes; the data entry and output sheets; and the Field names of
+       Contents stored in the Database;
+
+             b. Database Rights. Database Rights only extend to the Extraction and
+       Re-utilisation of the whole or a Substantial part of the Contents.
+       Database Rights can apply even when there is no copyright over the
+             Database. Database Rights can also apply when the Contents are removed
+       from the Database and are selected and arranged in a way that would
+       not infringe any applicable copyright; and
+
+             c. Contract. This is an agreement between You and the Licensor for
+       access to the Database. In return you agree to certain conditions of
+       use on this access as outlined in this License.
+
+       2.3 Rights not covered.
+
+             a. This License does not apply to computer programs used in the making
+       or operation of the Database;
+
+             b. This License does not cover any patents over the Contents or the
+       Database; and
+
+             c. This License does not cover any trademarks associated with the
+             Database.
+
+       2.4 Relationship to Contents in the Database. The individual items of
+       the Contents contained in this Database may be covered by other rights,
+       including copyright, patent, data protection, privacy, or personality
+       rights, and this License does not cover any rights (other than Database
+       Rights or in contract) in individual Contents contained in the Database.
+       For example, if used on a Database of images (the Contents), this
+       License would not apply to copyright over individual images, which could
+       have their own separate licenses, or one single license covering all of
+       the rights over the images.
+
+       3.0 Rights granted
+       3.1 Subject to the terms and conditions of this License, the Licensor
+       grants to You a worldwide, royalty-free, non-exclusive, terminable (but
+       only under Section 9) license to Use the Database for the duration of
+       any applicable copyright and Database Rights. These rights explicitly
+       include commercial use, and do not exclude any field of endeavour. To
+       the extent possible in the relevant jurisdiction, these rights may be
+       exercised in all media and formats whether now known or created in the
+       future.
+
+       The rights granted cover, for example:
+
+             a. Extraction and Re-utilisation of the whole or a Substantial part of
+       the Contents;
+
+             b. Creation of Derivative Databases;
+
+             c. Creation of Collective Databases;
+
+             d. Creation of temporary or permanent reproductions by any means and
+       in any form, in whole or in part, including of any Derivative
+       Databases or as a part of Collective Databases; and
+
+             e. Distribution, communication, display, lending, making available, or
+       performance to the public by any means and in any form, in whole or in
+       part, including of any Derivative Database or as a part of Collective
+             Databases.
+
+       3.2 Compulsory license schemes. For the avoidance of doubt:
+
+             a. Non-waivable compulsory license schemes. In those jurisdictions in
+       which the right to collect royalties through any statutory or
+       compulsory licensing scheme cannot be waived, the Licensor reserves
+       the exclusive right to collect such royalties for any exercise by You
+       of the rights granted under this License;
+
+             b. Waivable compulsory license schemes. In those jurisdictions in
+       which the right to collect royalties through any statutory or
+       compulsory licensing scheme can be waived, the Licensor waives the
+       exclusive right to collect such royalties for any exercise by You of
+       the rights granted under this License; and,
+
+             c. Voluntary license schemes. The Licensor waives the right to collect
+       royalties, whether individually or, in the event that the Licensor is
+       a member of a collecting society that administers voluntary licensing
+       schemes, via that society, from any exercise by You of the rights
+       granted under this License.
+
+       3.3 The right to release the Database under different terms, or to stop
+       distributing or making available the Database, is reserved. Note that
+       this Database may be multiple-licensed, and so You may have the choice
+       of using alternative licenses for this Database. Subject to Section
+       10.4, all other rights not expressly granted by Licensor are reserved.
+
+       4.0 Conditions of Use
+       4.1 The rights granted in Section 3 above are expressly made subject to
+       Your complying with the following conditions of use. These are important
+       conditions of this License, and if You fail to follow them, You will be
+       in material breach of its terms.
+
+       4.2 Notices. If You Publicly Convey this Database, any Derivative
+       Database, or the Database as part of a Collective Database, then You
+       must:
+
+             a. Do so only under the terms of this License or another license
+       permitted under Section 4.4;
+
+             b. Include a copy of this License (or, as applicable, a license
+       permitted under Section 4.4) or its Uniform Resource Identifier (URI)
+       with the Database or Derivative Database, including both in the
+       Database or Derivative Database and in any relevant documentation; and
+
+             c. Keep intact any copyright or Database Right notices and notices
+       that refer to this License.
+
+             d. If it is not possible to put the required notices in a particular
+       file due to its structure, then You must include the notices in a
+       location (such as a relevant directory) where users would be likely to
+       look for it.
+
+       4.3 Notice for using output (Contents). Creating and Using a Produced
+       Work does not require the notice in Section 4.2. However, if you
+       Publicly Use a Produced Work, You must include a notice associated with
+       the Produced Work reasonably calculated to make any Person that uses,
+       views, accesses, interacts with, or is otherwise exposed to the Produced
+       Work aware that Content was obtained from the Database, Derivative
+       Database, or the Database as part of a Collective Database, and that it
+       is available under this License.
+
+             a. Example notice. The following text will satisfy notice under
+       Section 4.3:
+
+           Contains information from DATABASE NAME, which is made available
+           here under the Open Database License (ODbL).
+       DATABASE NAME should be replaced with the name of the Database and a
+       hyperlink to the URI of the Database. “Open Database License” should
+       contain a hyperlink to the URI of the text of this License. If
+       hyperlinks are not possible, You should include the plain text of the
+       required URI’s with the above notice.
+
+       4.4 Share alike.
+
+             a. Any Derivative Database that You Publicly Use must be only under
+       the terms of:
+
+                  i. This License;
+
+                  ii. A later version of this License similar in spirit to this
+       License; or
+
+                  iii. A compatible license.
+
+       If You license the Derivative Database under one of the licenses
+       mentioned in (iii), You must comply with the terms of that license.
+
+             b. For the avoidance of doubt, Extraction or Re-utilisation of the
+       whole or a Substantial part of the Contents into a new database is a
+       Derivative Database and must comply with Section 4.4.
+
+             c. Derivative Databases and Produced Works. A Derivative Database is
+       Publicly Used and so must comply with Section 4.4. if a Produced Work
+       created from the Derivative Database is Publicly Used.
+
+             d. Share Alike and additional Contents. For the avoidance of doubt,
+       You must not add Contents to Derivative Databases under Section 4.4 a
+       that are incompatible with the rights granted under this License.
+
+             e. Compatible licenses. Licensors may authorise a proxy to determine
+       compatible licenses under Section 4.4 a iii. If they do so, the
+       authorised proxy’s public statement of acceptance of a compatible
+       license grants You permission to use the compatible license.
+
+       4.5 Limits of Share Alike. The requirements of Section 4.4 do not apply
+       in the following:
+
+             a. For the avoidance of doubt, You are not required to license
+       Collective Databases under this License if You incorporate this
+       Database or a Derivative Database in the collection, but this License
+       still applies to this Database or a Derivative Database as a part of
+       the Collective Database;
+
+             b. Using this Database, a Derivative Database, or this Database as
+       part of a Collective Database to create a Produced Work does not
+       create a Derivative Database for purposes of Section 4.4; and
+
+             c. Use of a Derivative Database internally within an organisation is
+       not to the public and therefore does not fall under the requirements
+       of Section 4.4.
+
+       4.6 Access to Derivative Databases. If You Publicly Use a Derivative
+       Database or a Produced Work from a Derivative Database, You must also
+       offer to recipients of the Derivative Database or Produced Work a copy
+       in a machine readable form of:
+
+             a. The entire Derivative Database; or
+
+             b. A file containing all of the alterations made to the Database or
+       the method of making the alterations to the Database (such as an
+       algorithm), including any additional Contents, that make up all the
+       differences between the Database and the Derivative Database.
+
+       The Derivative Database (under a.) or alteration file (under b.) must be
+       available at no more than a reasonable production cost for physical
+       distributions and free of charge if distributed over the internet.
+
+       4.7 Technological measures and additional terms
+
+             a. This License does not allow You to impose (except subject to
+       Section 4.7 b.) any terms or any technological measures on the
+       Database, a Derivative Database, or the whole or a Substantial part of
+       the Contents that alter or restrict the terms of this License, or any
+       rights granted under it, or have the effect or intent of restricting
+       the ability of any person to exercise those rights.
+
+             b. Parallel distribution. You may impose terms or technological
+       measures on the Database, a Derivative Database, or the whole or a
+       Substantial part of the Contents (a “Restricted Database”) in
+       contravention of Section 4.74 a. only if You also make a copy of the
+       Database or a Derivative Database available to the recipient of the
+       Restricted Database:
+
+                  i. That is available without additional fee;
+
+                  ii. That is available in a medium that does not alter or restrict
+       the terms of this License, or any rights granted under it, or have
+       the effect or intent of restricting the ability of any person to
+       exercise those rights (an “Unrestricted Database”); and
+
+                  iii. The Unrestricted Database is at least as accessible to the
+       recipient as a practical matter as the Restricted Database.
+
+             c. For the avoidance of doubt, You may place this Database or a
+       Derivative Database in an authenticated environment, behind a
+       password, or within a similar access control scheme provided that You
+       do not alter or restrict the terms of this License or any rights
+       granted under it or have the effect or intent of restricting the
+       ability of any person to exercise those rights.
+
+       4.8 Licensing of others. You may not sublicense the Database. Each time
+       You communicate the Database, the whole or Substantial part of the
+       Contents, or any Derivative Database to anyone else in any way, the
+       Licensor offers to the recipient a license to the Database on the same
+       terms and conditions as this License. You are not responsible for
+       enforcing compliance by third parties with this License, but You may
+       enforce any rights that You have over a Derivative Database. You are
+       solely responsible for any modifications of a Derivative Database made
+       by You or another Person at Your direction. You may not impose any
+       further restrictions on the exercise of the rights granted or affirmed
+       under this License.
+
+       5.0 Moral rights
+       5.1 Moral rights. This section covers moral rights, including any rights
+       to be identified as the author of the Database or to object to treatment
+       that would otherwise prejudice the author’s honour and reputation, or
+       any other derogatory treatment:
+
+             a. For jurisdictions allowing waiver of moral rights, Licensor waives
+       all moral rights that Licensor may have in the Database to the fullest
+       extent possible by the law of the relevant jurisdiction under Section
+             10.4;
+
+             b. If waiver of moral rights under Section 5.1 a in the relevant
+       jurisdiction is not possible, Licensor agrees not to assert any moral
+       rights over the Database and waives all claims in moral rights to the
+       fullest extent possible by the law of the relevant jurisdiction under
+       Section 10.4; and
+
+             c. For jurisdictions not allowing waiver or an agreement not to assert
+       moral rights under Section 5.1 a and b, the author may retain their
+       moral rights over certain aspects of the Database.
+
+       Please note that some jurisdictions do not allow for the waiver of moral
+       rights, and so moral rights may still subsist over the Database in some
+       jurisdictions.
+
+       6.0 Fair dealing, Database exceptions, and other rights not affected
+       6.1 This License does not affect any rights that You or anyone else may
+       independently have under any applicable law to make any use of this
+       Database, including without limitation:
+
+             a. Exceptions to the Database Right including: Extraction of Contents
+       from non-electronic Databases for private purposes, Extraction for
+       purposes of illustration for teaching or scientific research, and
+       Extraction or Re-utilisation for public security or an administrative
+       or judicial procedure.
+
+             b. Fair dealing, fair use, or any other legally recognised limitation
+       or exception to infringement of copyright or other applicable laws.
+
+       6.2 This License does not affect any rights of lawful users to Extract
+       and Re-utilise insubstantial parts of the Contents, evaluated
+       quantitatively or qualitatively, for any purposes whatsoever, including
+       creating a Derivative Database (subject to other rights over the
+       Contents, see Section 2.4). The repeated and systematic Extraction or
+       Re-utilisation of insubstantial parts of the Contents may however amount
+       to the Extraction or Re-utilisation of a Substantial part of the
+       Contents.
+
+       7.0 Warranties and Disclaimer
+       7.1 The Database is licensed by the Licensor “as is” and without any
+       warranty of any kind, either express, implied, or arising by statute,
+       custom, course of dealing, or trade usage. Licensor specifically
+       disclaims any and all implied warranties or conditions of title,
+       non-infringement, accuracy or completeness, the presence or absence of
+       errors, fitness for a particular purpose, merchantability, or otherwise.
+       Some jurisdictions do not allow the exclusion of implied warranties, so
+       this exclusion may not apply to You.
+
+       8.0 Limitation of liability
+       8.1 Subject to any liability that may not be excluded or limited by law,
+       the Licensor is not liable for, and expressly excludes, all liability
+       for loss or damage however and whenever caused to anyone by any use
+       under this License, whether by You or by anyone else, and whether caused
+       by any fault on the part of the Licensor or not. This exclusion of
+       liability includes, but is not limited to, any special, incidental,
+       consequential, punitive, or exemplary damages such as loss of revenue,
+       data, anticipated profits, and lost business. This exclusion applies
+       even if the Licensor has been advised of the possibility of such
+       damages.
+
+       8.2 If liability may not be excluded by law, it is limited to actual and
+       direct financial loss to the extent it is caused by proved negligence on
+       the part of the Licensor.
+
+       9.0 Termination of Your rights under this License
+       9.1 Any breach by You of the terms and conditions of this License
+       automatically terminates this License with immediate effect and without
+       notice to You. For the avoidance of doubt, Persons who have received the
+       Database, the whole or a Substantial part of the Contents, Derivative
+       Databases, or the Database as part of a Collective Database from You
+       under this License will not have their licenses terminated provided
+       their use is in full compliance with this License or a license granted
+       under Section 4.8 of this License. Sections 1, 2, 7, 8, 9 and 10 will
+       survive any termination of this License.
+
+       9.2 If You are not in breach of the terms of this License, the Licensor
+       will not terminate Your rights under it.
+
+       9.3 Unless terminated under Section 9.1, this License is granted to You
+       for the duration of applicable rights in the Database.
+
+       9.4 Reinstatement of rights. If you cease any breach of the terms and
+       conditions of this License, then your full rights under this License
+       will be reinstated:
+
+             a. Provisionally and subject to permanent termination until the 60th
+       day after cessation of breach;
+
+             b. Permanently on the 60th day after cessation of breach unless
+       otherwise reasonably notified by the Licensor; or
+
+             c. Permanently if reasonably notified by the Licensor of the
+       violation, this is the first time You have received notice of
+       violation of this License from the Licensor, and You cure the
+       violation prior to 30 days after your receipt of the notice.
+
+       Persons subject to permanent termination of rights are not eligible to
+       be a recipient and receive a license under Section 4.8.
+
+       9.5 Notwithstanding the above, Licensor reserves the right to release
+       the Database under different license terms or to stop distributing or
+       making available the Database. Releasing the Database under different
+       license terms or stopping the distribution of the Database will not
+       withdraw this License (or any other license that has been, or is
+       required to be, granted under the terms of this License), and this
+       License will continue in full force and effect unless terminated as
+       stated above.
+
+       10.0 General
+       10.1 If any provision of this License is held to be invalid or
+       unenforceable, that must not affect the validity or enforceability of
+       the remainder of the terms and conditions of this License and each
+       remaining provision of this License shall be valid and enforced to the
+       fullest extent permitted by law.
+
+       10.2 This License is the entire agreement between the parties with
+       respect to the rights granted here over the Database. It replaces any
+       earlier understandings, agreements or representations with respect to
+       the Database.
+
+       10.3 If You are in breach of the terms of this License, You will not be
+       entitled to rely on the terms of this License or to complain of any
+       breach by the Licensor.
+
+       10.4 Choice of law. This License takes effect in and will be governed by
+       the laws of the relevant jurisdiction in which the License terms are
+       sought to be enforced. If the standard suite of rights granted under
+       applicable copyright law and Database Rights in the relevant
+       jurisdiction includes additional rights not granted under this License,
+       these additional rights are granted in this License in order to meet the
+       terms of this License.
+
+   Database Contents License (DbCL) v1.0
+
+       ODC Database Contents License (DbCL)
+       The Licensor and You agree as follows:
+
+       1.0 Definitions of Capitalised Words
+       The definitions of the Open Database License (ODbL) 1.0 are incorporated
+       by reference into the Database Contents License.
+
+       2.0 Rights granted and Conditions of Use
+       2.1 Rights granted. The Licensor grants to You a worldwide,
+       royalty-free, non-exclusive, perpetual, irrevocable copyright license to
+       do any act that is restricted by copyright over anything within the
+       Contents, whether in the original medium or any other. These rights
+       explicitly include commercial use, and do not exclude any field of
+       endeavour. These rights include, without limitation, the right to
+       sublicense the work.
+
+       2.2 Conditions of Use. You must comply with the ODbL.
+
+       2.3 Relationship to Databases and ODbL. This license does not cover any
+       Database Rights, Database copyright, or contract over the Contents as
+       part of the Database. Please see the ODbL covering the Database for more
+       details about Your rights and obligations.
+
+       2.4 Non-assertion of copyright over facts. The Licensor takes the
+       position that factual information is not covered by copyright. The DbCL
+       grants you permission for any information having copyright contained in
+       the Contents.
+
+       3.0 Warranties, disclaimer, and limitation of liability
+       3.1 The Contents are licensed by the Licensor “as is” and without any
+       warranty of any kind, either express or implied, whether of title, of
+       accuracy, of the presence of absence of errors, of fitness for purpose,
+       or otherwise. Some jurisdictions do not allow the exclusion of implied
+       warranties, so this exclusion may not apply to You.
+
+       3.2 Subject to any liability that may not be excluded or limited by law,
+       the Licensor is not liable for, and expressly excludes, all liability
+       for loss or damage however and whenever caused to anyone by any use
+       under this License, whether by You or by anyone else, and whether caused
+       by any fault on the part of the Licensor or not. This exclusion of
+       liability includes, but is not limited to, any special, incidental,
+       consequential, punitive, or exemplary damages. This exclusion applies
+       even if the Licensor has been advised of the possibility of such
+       damages.
+
+       3.3 If liability may not be excluded by law, it is limited to actual and
+       direct financial loss to the extent it is caused by proved negligence on
+       the part of the Licensor.
+---
diff --git a/hyracks-fullstack/algebricks/algebricks-tests/src/main/scripts/run.sh b/hyracks-fullstack/algebricks/algebricks-tests/src/main/scripts/run.sh
old mode 100644
new mode 100755
diff --git a/hyracks-fullstack/hyracks-fullstack-license/src/main/licenses/templates/source_only_licenses.ftl b/hyracks-fullstack/hyracks-fullstack-license/src/main/licenses/templates/source_only_licenses.ftl
index c4bc541..7e078b8 100644
--- a/hyracks-fullstack/hyracks-fullstack-license/src/main/licenses/templates/source_only_licenses.ftl
+++ b/hyracks-fullstack/hyracks-fullstack-license/src/main/licenses/templates/source_only_licenses.ftl
@@ -16,8 +16,7 @@
  ! specific language governing permissions and limitations
  ! under the License.
 -->
-<#macro license files component="AsterixDB WebUI"
-                licenseName="the following license">
+<#macro license files component licenseName="the following license">
    Portions of the ${component}
        located at:
 <#if files?is_sequence>
@@ -40,52 +39,6 @@
 </@indent>
 ---
 </#macro>
-<#--
- ! Licensed to the Apache Software Foundation (ASF) under one
- ! or more contributor license agreements.  See the NOTICE file
- ! distributed with this work for additional information
- ! regarding copyright ownership.  The ASF licenses this file
- ! to you under the Apache License, Version 2.0 (the
- ! "License"); you may not use this file except in compliance
- ! with the License.  You may obtain a copy of the License at
- !
- !   http://www.apache.org/licenses/LICENSE-2.0
- !
- ! Unless required by applicable law or agreed to in writing,
- ! software 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.
--->
-<#macro license files component="AsterixDB WebUI"
-                licenseName="the following license">
-   Portions of the ${component}
-       located at:
-<#assign isare="is"/>
-<#if files?is_sequence>
-<#list files as file>
-<#if file?counter < files?size>
-         ${file},
-<#else>
-       and
-         ${file}
-</#if>
-<#sep>
-<#assign isare="are"/>
-</#sep>
-</#list>
-<#else>
-         ${files}
-</#if>
-
-   ${isare} available under ${licenseName}:
----
-<@indent spaces=3 unpad=true wrap=true>
-<#nested>
-</@indent>
----
-</#macro>
 <@license files=["hyracks/hyracks-examples/text-example/textserver/data/file1.txt", "hyracks/hyracks-examples/text-example/textserver/data/file2.txt"]
           component="test data for the Hyracks textserver examples">
 
@@ -390,3 +343,584 @@
 help produce our new eBooks, and how to subscribe to our email newsletter to
 hear about new eBooks.
 </@license>
+<@license files="hyracks/hyracks-dataflow-std/src/test/resources/data/beer.txt"
+          component="Apache Hyracks Dataflow Std test data" licenseName="Open Database & Database Contents Licenses">
+
+Open Database License (ODbL) v1.0
+
+    ODC Open Database License (ODbL)
+    Preamble
+    The Open Database License (ODbL) is a license agreement intended to
+    allow users to freely share, modify, and use this Database while
+    maintaining this same freedom for others. Many databases are covered by
+    copyright, and therefore this document licenses these rights. Some
+    jurisdictions, mainly in the European Union, have specific rights that
+    cover databases, and so the ODbL addresses these rights, too. Finally,
+    the ODbL is also an agreement in contract for users of this Database to
+    act in certain ways in return for accessing this Database.
+
+    Databases can contain a wide variety of types of content (images,
+    audiovisual material, and sounds all in the same database, for example),
+    and so the ODbL only governs the rights over the Database, and not the
+    contents of the Database individually. Licensors should use the ODbL
+    together with another license for the contents, if the contents have a
+    single set of rights that uniformly covers all of the contents. If the
+    contents have multiple sets of different rights, Licensors should
+    describe what rights govern what contents together in the individual
+    record or in some other way that clarifies what rights apply.
+
+    Sometimes the contents of a database, or the database itself, can be
+    covered by other rights not addressed here (such as private contracts,
+    trade mark over the name, or privacy rights / data protection rights
+    over information in the contents), and so you are advised that you may
+    have to consult other documents or clear other rights before doing
+    activities not covered by this License.
+
+    The Licensor (as defined below)
+
+    and
+
+    You (as defined below)
+
+    agree as follows:
+
+    1.0 Definitions of Capitalised Words
+    “Collective Database” – Means this Database in unmodified form as part
+    of a collection of independent databases in themselves that together are
+    assembled into a collective whole. A work that constitutes a Collective
+    Database will not be considered a Derivative Database.
+
+    “Convey” – As a verb, means Using the Database, a Derivative Database,
+    or the Database as part of a Collective Database in any way that enables
+    a Person to make or receive copies of the Database or a Derivative
+    Database. Conveying does not include interaction with a user through a
+    computer network, or creating and Using a Produced Work, where no
+    transfer of a copy of the Database or a Derivative Database occurs.
+    “Contents” – The contents of this Database, which includes the
+    information, independent works, or other material collected into the
+    Database. For example, the contents of the Database could be factual
+    data or works such as images, audiovisual material, text, or sounds.
+
+    “Database” – A collection of material (the Contents) arranged in a
+    systematic or methodical way and individually accessible by electronic
+    or other means offered under the terms of this License.
+
+    “Database Directive” – Means Directive 96/9/EC of the European
+    Parliament and of the Council of 11 March 1996 on the legal protection
+    of databases, as amended or succeeded.
+
+    “Database Right” – Means rights resulting from the Chapter III (“sui
+    generis”) rights in the Database Directive (as amended and as transposed
+    by member states), which includes the Extraction and Re-utilisation of
+    the whole or a Substantial part of the Contents, as well as any similar
+    rights available in the relevant jurisdiction under Section 10.4.
+
+    “Derivative Database” – Means a database based upon the Database, and
+    includes any translation, adaptation, arrangement, modification, or any
+    other alteration of the Database or of a Substantial part of the
+    Contents. This includes, but is not limited to, Extracting or
+    Re-utilising the whole or a Substantial part of the Contents in a new
+    Database.
+
+    “Extraction” – Means the permanent or temporary transfer of all or a
+    Substantial part of the Contents to another medium by any means or in
+    any form.
+
+    “License” – Means this license agreement and is both a license of rights
+    such as copyright and Database Rights and an agreement in contract.
+
+    “Licensor” – Means the Person that offers the Database under the terms
+    of this License.
+
+    “Person” – Means a natural or legal person or a body of persons
+    corporate or incorporate.
+
+    “Produced Work” – a work (such as an image, audiovisual material, text,
+    or sounds) resulting from using the whole or a Substantial part of the
+    Contents (via a search or other query) from this Database, a Derivative
+    Database, or this Database as part of a Collective Database.
+
+    “Publicly” – means to Persons other than You or under Your control by
+    either more than 50% ownership or by the power to direct their
+    activities (such as contracting with an independent consultant).
+
+    “Re-utilisation” – means any form of making available to the public all
+    or a Substantial part of the Contents by the distribution of copies, by
+    renting, by online or other forms of transmission.
+
+    “Substantial” – Means substantial in terms of quantity or quality or a
+    combination of both. The repeated and systematic Extraction or
+    Re-utilisation of insubstantial parts of the Contents may amount to the
+    Extraction or Re-utilisation of a Substantial part of the Contents.
+
+    “Use” – As a verb, means doing any act that is restricted by copyright
+    or Database Rights whether in the original medium or any other; and
+    includes without limitation distributing, copying, publicly performing,
+    publicly displaying, and preparing derivative works of the Database, as
+    well as modifying the Database as may be technically necessary to use it
+    in a different mode or format.
+
+    “You” – Means a Person exercising rights under this License who has not
+    previously violated the terms of this License with respect to the
+    Database, or who has received express permission from the Licensor to
+    exercise rights under this License despite a previous violation.
+
+    Words in the singular include the plural and vice versa.
+
+    2.0 What this License covers
+    2.1. Legal effect of this document. This License is:
+
+          a. A license of applicable copyright and neighbouring rights;
+
+          b. A license of the Database Right; and
+
+          c. An agreement in contract between You and the Licensor.
+
+    2.2 Legal rights covered. This License covers the legal rights in the
+    Database, including:
+
+          a. Copyright. Any copyright or neighbouring rights in the Database.
+    The copyright licensed includes any individual elements of the
+    Database, but does not cover the copyright over the Contents
+    independent of this Database. See Section 2.4 for details. Copyright
+    law varies between jurisdictions, but is likely to cover: the Database
+    model or schema, which is the structure, arrangement, and organisation
+    of the Database, and can also include the Database tables and table
+    indexes; the data entry and output sheets; and the Field names of
+    Contents stored in the Database;
+
+          b. Database Rights. Database Rights only extend to the Extraction and
+    Re-utilisation of the whole or a Substantial part of the Contents.
+    Database Rights can apply even when there is no copyright over the
+          Database. Database Rights can also apply when the Contents are removed
+    from the Database and are selected and arranged in a way that would
+    not infringe any applicable copyright; and
+
+          c. Contract. This is an agreement between You and the Licensor for
+    access to the Database. In return you agree to certain conditions of
+    use on this access as outlined in this License.
+
+    2.3 Rights not covered.
+
+          a. This License does not apply to computer programs used in the making
+    or operation of the Database;
+
+          b. This License does not cover any patents over the Contents or the
+    Database; and
+
+          c. This License does not cover any trademarks associated with the
+          Database.
+
+    2.4 Relationship to Contents in the Database. The individual items of
+    the Contents contained in this Database may be covered by other rights,
+    including copyright, patent, data protection, privacy, or personality
+    rights, and this License does not cover any rights (other than Database
+    Rights or in contract) in individual Contents contained in the Database.
+    For example, if used on a Database of images (the Contents), this
+    License would not apply to copyright over individual images, which could
+    have their own separate licenses, or one single license covering all of
+    the rights over the images.
+
+    3.0 Rights granted
+    3.1 Subject to the terms and conditions of this License, the Licensor
+    grants to You a worldwide, royalty-free, non-exclusive, terminable (but
+    only under Section 9) license to Use the Database for the duration of
+    any applicable copyright and Database Rights. These rights explicitly
+    include commercial use, and do not exclude any field of endeavour. To
+    the extent possible in the relevant jurisdiction, these rights may be
+    exercised in all media and formats whether now known or created in the
+    future.
+
+    The rights granted cover, for example:
+
+          a. Extraction and Re-utilisation of the whole or a Substantial part of
+    the Contents;
+
+          b. Creation of Derivative Databases;
+
+          c. Creation of Collective Databases;
+
+          d. Creation of temporary or permanent reproductions by any means and
+    in any form, in whole or in part, including of any Derivative
+    Databases or as a part of Collective Databases; and
+
+          e. Distribution, communication, display, lending, making available, or
+    performance to the public by any means and in any form, in whole or in
+    part, including of any Derivative Database or as a part of Collective
+          Databases.
+
+    3.2 Compulsory license schemes. For the avoidance of doubt:
+
+          a. Non-waivable compulsory license schemes. In those jurisdictions in
+    which the right to collect royalties through any statutory or
+    compulsory licensing scheme cannot be waived, the Licensor reserves
+    the exclusive right to collect such royalties for any exercise by You
+    of the rights granted under this License;
+
+          b. Waivable compulsory license schemes. In those jurisdictions in
+    which the right to collect royalties through any statutory or
+    compulsory licensing scheme can be waived, the Licensor waives the
+    exclusive right to collect such royalties for any exercise by You of
+    the rights granted under this License; and,
+
+          c. Voluntary license schemes. The Licensor waives the right to collect
+    royalties, whether individually or, in the event that the Licensor is
+    a member of a collecting society that administers voluntary licensing
+    schemes, via that society, from any exercise by You of the rights
+    granted under this License.
+
+    3.3 The right to release the Database under different terms, or to stop
+    distributing or making available the Database, is reserved. Note that
+    this Database may be multiple-licensed, and so You may have the choice
+    of using alternative licenses for this Database. Subject to Section
+    10.4, all other rights not expressly granted by Licensor are reserved.
+
+    4.0 Conditions of Use
+    4.1 The rights granted in Section 3 above are expressly made subject to
+    Your complying with the following conditions of use. These are important
+    conditions of this License, and if You fail to follow them, You will be
+    in material breach of its terms.
+
+    4.2 Notices. If You Publicly Convey this Database, any Derivative
+    Database, or the Database as part of a Collective Database, then You
+    must:
+
+          a. Do so only under the terms of this License or another license
+    permitted under Section 4.4;
+
+          b. Include a copy of this License (or, as applicable, a license
+    permitted under Section 4.4) or its Uniform Resource Identifier (URI)
+    with the Database or Derivative Database, including both in the
+    Database or Derivative Database and in any relevant documentation; and
+
+          c. Keep intact any copyright or Database Right notices and notices
+    that refer to this License.
+
+          d. If it is not possible to put the required notices in a particular
+    file due to its structure, then You must include the notices in a
+    location (such as a relevant directory) where users would be likely to
+    look for it.
+
+    4.3 Notice for using output (Contents). Creating and Using a Produced
+    Work does not require the notice in Section 4.2. However, if you
+    Publicly Use a Produced Work, You must include a notice associated with
+    the Produced Work reasonably calculated to make any Person that uses,
+    views, accesses, interacts with, or is otherwise exposed to the Produced
+    Work aware that Content was obtained from the Database, Derivative
+    Database, or the Database as part of a Collective Database, and that it
+    is available under this License.
+
+          a. Example notice. The following text will satisfy notice under
+    Section 4.3:
+
+        Contains information from DATABASE NAME, which is made available
+        here under the Open Database License (ODbL).
+    DATABASE NAME should be replaced with the name of the Database and a
+    hyperlink to the URI of the Database. “Open Database License” should
+    contain a hyperlink to the URI of the text of this License. If
+    hyperlinks are not possible, You should include the plain text of the
+    required URI’s with the above notice.
+
+    4.4 Share alike.
+
+          a. Any Derivative Database that You Publicly Use must be only under
+    the terms of:
+
+               i. This License;
+
+               ii. A later version of this License similar in spirit to this
+    License; or
+
+               iii. A compatible license.
+
+    If You license the Derivative Database under one of the licenses
+    mentioned in (iii), You must comply with the terms of that license.
+
+          b. For the avoidance of doubt, Extraction or Re-utilisation of the
+    whole or a Substantial part of the Contents into a new database is a
+    Derivative Database and must comply with Section 4.4.
+
+          c. Derivative Databases and Produced Works. A Derivative Database is
+    Publicly Used and so must comply with Section 4.4. if a Produced Work
+    created from the Derivative Database is Publicly Used.
+
+          d. Share Alike and additional Contents. For the avoidance of doubt,
+    You must not add Contents to Derivative Databases under Section 4.4 a
+    that are incompatible with the rights granted under this License.
+
+          e. Compatible licenses. Licensors may authorise a proxy to determine
+    compatible licenses under Section 4.4 a iii. If they do so, the
+    authorised proxy’s public statement of acceptance of a compatible
+    license grants You permission to use the compatible license.
+
+    4.5 Limits of Share Alike. The requirements of Section 4.4 do not apply
+    in the following:
+
+          a. For the avoidance of doubt, You are not required to license
+    Collective Databases under this License if You incorporate this
+    Database or a Derivative Database in the collection, but this License
+    still applies to this Database or a Derivative Database as a part of
+    the Collective Database;
+
+          b. Using this Database, a Derivative Database, or this Database as
+    part of a Collective Database to create a Produced Work does not
+    create a Derivative Database for purposes of Section 4.4; and
+
+          c. Use of a Derivative Database internally within an organisation is
+    not to the public and therefore does not fall under the requirements
+    of Section 4.4.
+
+    4.6 Access to Derivative Databases. If You Publicly Use a Derivative
+    Database or a Produced Work from a Derivative Database, You must also
+    offer to recipients of the Derivative Database or Produced Work a copy
+    in a machine readable form of:
+
+          a. The entire Derivative Database; or
+
+          b. A file containing all of the alterations made to the Database or
+    the method of making the alterations to the Database (such as an
+    algorithm), including any additional Contents, that make up all the
+    differences between the Database and the Derivative Database.
+
+    The Derivative Database (under a.) or alteration file (under b.) must be
+    available at no more than a reasonable production cost for physical
+    distributions and free of charge if distributed over the internet.
+
+    4.7 Technological measures and additional terms
+
+          a. This License does not allow You to impose (except subject to
+    Section 4.7 b.) any terms or any technological measures on the
+    Database, a Derivative Database, or the whole or a Substantial part of
+    the Contents that alter or restrict the terms of this License, or any
+    rights granted under it, or have the effect or intent of restricting
+    the ability of any person to exercise those rights.
+
+          b. Parallel distribution. You may impose terms or technological
+    measures on the Database, a Derivative Database, or the whole or a
+    Substantial part of the Contents (a “Restricted Database”) in
+    contravention of Section 4.74 a. only if You also make a copy of the
+    Database or a Derivative Database available to the recipient of the
+    Restricted Database:
+
+               i. That is available without additional fee;
+
+               ii. That is available in a medium that does not alter or restrict
+    the terms of this License, or any rights granted under it, or have
+    the effect or intent of restricting the ability of any person to
+    exercise those rights (an “Unrestricted Database”); and
+
+               iii. The Unrestricted Database is at least as accessible to the
+    recipient as a practical matter as the Restricted Database.
+
+          c. For the avoidance of doubt, You may place this Database or a
+    Derivative Database in an authenticated environment, behind a
+    password, or within a similar access control scheme provided that You
+    do not alter or restrict the terms of this License or any rights
+    granted under it or have the effect or intent of restricting the
+    ability of any person to exercise those rights.
+
+    4.8 Licensing of others. You may not sublicense the Database. Each time
+    You communicate the Database, the whole or Substantial part of the
+    Contents, or any Derivative Database to anyone else in any way, the
+    Licensor offers to the recipient a license to the Database on the same
+    terms and conditions as this License. You are not responsible for
+    enforcing compliance by third parties with this License, but You may
+    enforce any rights that You have over a Derivative Database. You are
+    solely responsible for any modifications of a Derivative Database made
+    by You or another Person at Your direction. You may not impose any
+    further restrictions on the exercise of the rights granted or affirmed
+    under this License.
+
+    5.0 Moral rights
+    5.1 Moral rights. This section covers moral rights, including any rights
+    to be identified as the author of the Database or to object to treatment
+    that would otherwise prejudice the author’s honour and reputation, or
+    any other derogatory treatment:
+
+          a. For jurisdictions allowing waiver of moral rights, Licensor waives
+    all moral rights that Licensor may have in the Database to the fullest
+    extent possible by the law of the relevant jurisdiction under Section
+          10.4;
+
+          b. If waiver of moral rights under Section 5.1 a in the relevant
+    jurisdiction is not possible, Licensor agrees not to assert any moral
+    rights over the Database and waives all claims in moral rights to the
+    fullest extent possible by the law of the relevant jurisdiction under
+    Section 10.4; and
+
+          c. For jurisdictions not allowing waiver or an agreement not to assert
+    moral rights under Section 5.1 a and b, the author may retain their
+    moral rights over certain aspects of the Database.
+
+    Please note that some jurisdictions do not allow for the waiver of moral
+    rights, and so moral rights may still subsist over the Database in some
+    jurisdictions.
+
+    6.0 Fair dealing, Database exceptions, and other rights not affected
+    6.1 This License does not affect any rights that You or anyone else may
+    independently have under any applicable law to make any use of this
+    Database, including without limitation:
+
+          a. Exceptions to the Database Right including: Extraction of Contents
+    from non-electronic Databases for private purposes, Extraction for
+    purposes of illustration for teaching or scientific research, and
+    Extraction or Re-utilisation for public security or an administrative
+    or judicial procedure.
+
+          b. Fair dealing, fair use, or any other legally recognised limitation
+    or exception to infringement of copyright or other applicable laws.
+
+    6.2 This License does not affect any rights of lawful users to Extract
+    and Re-utilise insubstantial parts of the Contents, evaluated
+    quantitatively or qualitatively, for any purposes whatsoever, including
+    creating a Derivative Database (subject to other rights over the
+    Contents, see Section 2.4). The repeated and systematic Extraction or
+    Re-utilisation of insubstantial parts of the Contents may however amount
+    to the Extraction or Re-utilisation of a Substantial part of the
+    Contents.
+
+    7.0 Warranties and Disclaimer
+    7.1 The Database is licensed by the Licensor “as is” and without any
+    warranty of any kind, either express, implied, or arising by statute,
+    custom, course of dealing, or trade usage. Licensor specifically
+    disclaims any and all implied warranties or conditions of title,
+    non-infringement, accuracy or completeness, the presence or absence of
+    errors, fitness for a particular purpose, merchantability, or otherwise.
+    Some jurisdictions do not allow the exclusion of implied warranties, so
+    this exclusion may not apply to You.
+
+    8.0 Limitation of liability
+    8.1 Subject to any liability that may not be excluded or limited by law,
+    the Licensor is not liable for, and expressly excludes, all liability
+    for loss or damage however and whenever caused to anyone by any use
+    under this License, whether by You or by anyone else, and whether caused
+    by any fault on the part of the Licensor or not. This exclusion of
+    liability includes, but is not limited to, any special, incidental,
+    consequential, punitive, or exemplary damages such as loss of revenue,
+    data, anticipated profits, and lost business. This exclusion applies
+    even if the Licensor has been advised of the possibility of such
+    damages.
+
+    8.2 If liability may not be excluded by law, it is limited to actual and
+    direct financial loss to the extent it is caused by proved negligence on
+    the part of the Licensor.
+
+    9.0 Termination of Your rights under this License
+    9.1 Any breach by You of the terms and conditions of this License
+    automatically terminates this License with immediate effect and without
+    notice to You. For the avoidance of doubt, Persons who have received the
+    Database, the whole or a Substantial part of the Contents, Derivative
+    Databases, or the Database as part of a Collective Database from You
+    under this License will not have their licenses terminated provided
+    their use is in full compliance with this License or a license granted
+    under Section 4.8 of this License. Sections 1, 2, 7, 8, 9 and 10 will
+    survive any termination of this License.
+
+    9.2 If You are not in breach of the terms of this License, the Licensor
+    will not terminate Your rights under it.
+
+    9.3 Unless terminated under Section 9.1, this License is granted to You
+    for the duration of applicable rights in the Database.
+
+    9.4 Reinstatement of rights. If you cease any breach of the terms and
+    conditions of this License, then your full rights under this License
+    will be reinstated:
+
+          a. Provisionally and subject to permanent termination until the 60th
+    day after cessation of breach;
+
+          b. Permanently on the 60th day after cessation of breach unless
+    otherwise reasonably notified by the Licensor; or
+
+          c. Permanently if reasonably notified by the Licensor of the
+    violation, this is the first time You have received notice of
+    violation of this License from the Licensor, and You cure the
+    violation prior to 30 days after your receipt of the notice.
+
+    Persons subject to permanent termination of rights are not eligible to
+    be a recipient and receive a license under Section 4.8.
+
+    9.5 Notwithstanding the above, Licensor reserves the right to release
+    the Database under different license terms or to stop distributing or
+    making available the Database. Releasing the Database under different
+    license terms or stopping the distribution of the Database will not
+    withdraw this License (or any other license that has been, or is
+    required to be, granted under the terms of this License), and this
+    License will continue in full force and effect unless terminated as
+    stated above.
+
+    10.0 General
+    10.1 If any provision of this License is held to be invalid or
+    unenforceable, that must not affect the validity or enforceability of
+    the remainder of the terms and conditions of this License and each
+    remaining provision of this License shall be valid and enforced to the
+    fullest extent permitted by law.
+
+    10.2 This License is the entire agreement between the parties with
+    respect to the rights granted here over the Database. It replaces any
+    earlier understandings, agreements or representations with respect to
+    the Database.
+
+    10.3 If You are in breach of the terms of this License, You will not be
+    entitled to rely on the terms of this License or to complain of any
+    breach by the Licensor.
+
+    10.4 Choice of law. This License takes effect in and will be governed by
+    the laws of the relevant jurisdiction in which the License terms are
+    sought to be enforced. If the standard suite of rights granted under
+    applicable copyright law and Database Rights in the relevant
+    jurisdiction includes additional rights not granted under this License,
+    these additional rights are granted in this License in order to meet the
+    terms of this License.
+
+Database Contents License (DbCL) v1.0
+
+    ODC Database Contents License (DbCL)
+    The Licensor and You agree as follows:
+
+    1.0 Definitions of Capitalised Words
+    The definitions of the Open Database License (ODbL) 1.0 are incorporated
+    by reference into the Database Contents License.
+
+    2.0 Rights granted and Conditions of Use
+    2.1 Rights granted. The Licensor grants to You a worldwide,
+    royalty-free, non-exclusive, perpetual, irrevocable copyright license to
+    do any act that is restricted by copyright over anything within the
+    Contents, whether in the original medium or any other. These rights
+    explicitly include commercial use, and do not exclude any field of
+    endeavour. These rights include, without limitation, the right to
+    sublicense the work.
+
+    2.2 Conditions of Use. You must comply with the ODbL.
+
+    2.3 Relationship to Databases and ODbL. This license does not cover any
+    Database Rights, Database copyright, or contract over the Contents as
+    part of the Database. Please see the ODbL covering the Database for more
+    details about Your rights and obligations.
+
+    2.4 Non-assertion of copyright over facts. The Licensor takes the
+    position that factual information is not covered by copyright. The DbCL
+    grants you permission for any information having copyright contained in
+    the Contents.
+
+    3.0 Warranties, disclaimer, and limitation of liability
+    3.1 The Contents are licensed by the Licensor “as is” and without any
+    warranty of any kind, either express or implied, whether of title, of
+    accuracy, of the presence of absence of errors, of fitness for purpose,
+    or otherwise. Some jurisdictions do not allow the exclusion of implied
+    warranties, so this exclusion may not apply to You.
+
+    3.2 Subject to any liability that may not be excluded or limited by law,
+    the Licensor is not liable for, and expressly excludes, all liability
+    for loss or damage however and whenever caused to anyone by any use
+    under this License, whether by You or by anyone else, and whether caused
+    by any fault on the part of the Licensor or not. This exclusion of
+    liability includes, but is not limited to, any special, incidental,
+    consequential, punitive, or exemplary damages. This exclusion applies
+    even if the Licensor has been advised of the possibility of such
+    damages.
+
+    3.3 If liability may not be excluded by law, it is limited to actual and
+    direct financial loss to the extent it is caused by proved negligence on
+    the part of the Licensor.
+</@license>
diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/pom.xml b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/pom.xml
index 9363208..28df779 100644
--- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/pom.xml
+++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/pom.xml
@@ -31,22 +31,6 @@
     <root.dir>${basedir}/../../..</root.dir>
     <sonar.sources>pom.xml,src/main/java,src/main/resources</sonar.sources>
   </properties>
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.rat</groupId>
-        <artifactId>apache-rat-plugin</artifactId>
-        <executions>
-          <execution>
-            <phase>validate</phase>
-            <goals>
-              <goal>check</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
   <dependencies>
     <dependency>
       <groupId>org.apache.hyracks</groupId>
diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/controllers/ControllerConfig.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/controllers/ControllerConfig.java
index fdc0963..05f7854 100644
--- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/controllers/ControllerConfig.java
+++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/controllers/ControllerConfig.java
@@ -27,10 +27,11 @@
 import org.apache.hyracks.api.config.Section;
 import org.apache.hyracks.control.common.config.ConfigManager;
 import org.apache.hyracks.control.common.config.OptionTypes;
+import org.apache.hyracks.util.file.FileUtil;
 
 public class ControllerConfig implements Serializable {
 
-    public static String defaultDir = System.getProperty("java.io.tmpdir");
+    public static String defaultDir = FileUtil.joinPath(System.getProperty("java.io.tmpdir"), "hyracks");
 
     public enum Option implements IOption {
         CONFIG_FILE(OptionTypes.STRING, "Specify path to master configuration file"),
diff --git a/hyracks-fullstack/pom.xml b/hyracks-fullstack/pom.xml
index 072165b..162832c 100644
--- a/hyracks-fullstack/pom.xml
+++ b/hyracks-fullstack/pom.xml
@@ -225,10 +225,6 @@
             <licenseFamily implementation="org.apache.rat.license.Apache20LicenseFamily"/>
           </licenseFamilies>
           <excludeSubProjects>true</excludeSubProjects>
-          <excludes combine.children="append">
-            <!-- TODO (mblow): ClusterControllerService should not get written outside of **/target/; remove once fixed -->
-            <exclude>**/ClusterControllerService/**</exclude>
-          </excludes>
         </configuration>
       </plugin>
       <plugin>
