diff --git a/asterixdb/LICENSE b/asterixdb/LICENSE
index 427fa0a..62d1c3e 100644
--- a/asterixdb/LICENSE
+++ b/asterixdb/LICENSE
@@ -1,4 +1,3 @@
-
                                  Apache License
                            Version 2.0, January 2004
                         http://www.apache.org/licenses/
@@ -200,20 +199,20 @@
    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.
+===
+   AsterixDB includes source code with separate copyright notices and
+   license terms. Your use of this source code is subject to the terms
+   and condition of the following licenses.
+===
+   Portions of the AsterixDB WebUI
+       located at:
+         asterix-app/src/main/resources/webui/static/js/jquery.min.js,
+         asterix-app/src/main/resources/webui/static/js/jquery.autosize-min.js,
+       and
+         asterix-app/src/main/resources/queryui/js/jquery-1.12.4.min.js
 
-
-ASTERIXDB COMPONENTS:
-
-AsterixDB includes a number of subcomponents with separate copyright
-notices and license terms. Your use of the source code for these
-subcomponents is subject to the terms and condition of the following
-licenses.
-
-For portions of the AsterixDB WebUI at:
-asterix-app/src/main/resources/webui/static/js/jquery.min.js
-and
-asterix-app/src/main/resources/webui/static/js/jquery.autosize-min.js
-
+   are available under an MIT-style license:
+---
    Copyright jQuery Foundation and other contributors, https://jquery.org/
 
    This software consists of voluntary contributions made by many
@@ -250,10 +249,78 @@
    externally maintained libraries used by this software which have their
    own licenses; we recommend you read them, as their terms may differ from
    the terms above.
+---
+   Portions of the AsterixDB WebUI
+       located at:
+         asterix-app/src/main/resources/webui/static/js/bootstrap.min.js,
+         asterix-app/src/main/resources/webui/static/css/bootstrap-responsive.min.css,
+       and
+         asterix-app/src/main/resources/webui/static/css/bootstrap.min.css
 
-as well as portions of the WebUI at:
-asterix-app/src/main/resources/webui/static/js/bootstrap.min.js
+   are available under the following license:
+---
+   Copyright 2012 Twitter, Inc.
+   http://www.apache.org/licenses/LICENSE-2.0.txt
+---
+   Portions of the AsterixDB WebUI
+       located at:
+         asterix-app/src/main/resources/webui/static/js/smoothie.js,
+       and
+         asterix-app/src/main/resources/feed/smoothie.js
 
+   are available under the following license:
+---
+   Copyright (c) 2010-2013, Joe Walnes
+
+   Permission is hereby granted, free of charge, to any person obtaining a copy
+   of this software and associated documentation files (the "Software"), to deal
+   in the Software without restriction, including without limitation the rights
+   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+   copies of the Software, and to permit persons to whom the Software is
+   furnished to do so, subject to the following conditions:
+
+   The above copyright notice and this permission notice shall be included in
+   all copies or substantial portions of the Software.
+
+   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+   THE SOFTWARE.
+---
+   Portions of the AsterixDB QueryUI
+       located at:
+         asterix-app/src/main/resources/queryui/js/json-formatter.min.js,
+       and
+         asterix-app/src/main/resources/queryui/css/json-formatter.min.css
+
+   are available under the following license:
+---
+   Copyright 2014 Mohsen Azimi
+
+   Licensed 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.
+---
+   Portions of the AsterixDB QueryUI
+       located at:
+         asterix-app/src/main/resources/queryui/js/bootstrap.min.js,
+         asterix-app/src/main/resources/queryui/css/bootstrap.min.css,
+       and
+         asterix-app/src/main/resources/queryui/css/bootstrap-theme.min.css
+
+   are available under the following license:
+---
    The MIT License (MIT)
 
    Copyright (c) 2011-2015 Twitter, Inc
@@ -275,234 +342,144 @@
    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    THE SOFTWARE.
+---
+   Portions of the AsterixDB QueryUI
+       located at:
+         asterix-app/src/main/resources/queryui/js/angular.min.js
 
+   are available under The MIT License:
+---
+   Copyright (c) 2010-2016 Google, Inc. http://angularjs.org
 
-and portions of the WebUI at:
-asterix-app/src/main/resources/webui/static/js/smoothie.js
-and
-asterix-app/src/main/resources/feed/smoothie.js
+   Permission is hereby granted, free of charge, to any person obtaining a copy
+   of this software and associated documentation files (the "Software"), to deal
+   in the Software without restriction, including without limitation the rights
+   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+   copies of the Software, and to permit persons to whom the Software is
+   furnished to do so, subject to the following conditions:
 
-   MIT License
-   -----------
+   The above copyright notice and this permission notice shall be included in
+   all copies or substantial portions of the Software.
 
-   Copyright (c) 2010-2013, Joe Walnes
-                 2013-2014, Drew Noakes
+   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+   THE SOFTWARE.
+---
+   Portions of the AsterixDB QueryUI
+       located at:
+         asterix-app/src/main/resources/queryui/js/codemirror.js,
+         asterix-app/src/main/resources/queryui/js/javascript.js,
+       and
+         asterix-app/src/main/resources/queryui/css/codemirror.css
 
-                 Permission is hereby granted, free of charge, to any person obtaining a copy
-                 of this software and associated documentation files (the "Software"), to deal
-                 in the Software without restriction, including without limitation the rights
-                 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-                 copies of the Software, and to permit persons to whom the Software is
-                 furnished to do so, subject to the following conditions:
+   are available under The MIT License:
+---
+   Copyright (C) 2016 by Marijn Haverbeke <marijnh@gmail.com> and others
 
-                 The above copyright notice and this permission notice shall be included in
-                 all copies or substantial portions of the Software.
+   Permission is hereby granted, free of charge, to any person obtaining a copy
+   of this software and associated documentation files (the "Software"), to deal
+   in the Software without restriction, including without limitation the rights
+   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+   copies of the Software, and to permit persons to whom the Software is
+   furnished to do so, subject to the following conditions:
 
-                 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-                 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-                 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-                 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-                 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-                 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-                 THE SOFTWARE.
+   The above copyright notice and this permission notice shall be included in
+   all copies or substantial portions of the Software.
 
-For portions of the Asterix API examples at:
-asterix-examples/src/main/resources/admaql101-demo/bottle.py
+   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+   THE SOFTWARE.
+---
+   Portions of the AsterixDB QueryUI
+       located at:
+         asterix-app/src/main/resources/queryui/js/ui-codemirror.js
 
-    Copyright (c) 2014, Marcel Hellkamp.
+   are available under The MIT License:
+---
+   Copyright (c) 2012 the AngularUI Team, http://angular-ui.github.com
 
-    Permission is hereby granted, free of charge, to any person obtaining a copy
-    of this software and associated documentation files (the "Software"), to deal
-    in the Software without restriction, including without limitation the rights
-    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-    copies of the Software, and to permit persons to whom the Software is
-    furnished to do so, subject to the following conditions:
+   Permission is hereby granted, free of charge, to any person obtaining a copy
+   of this software and associated documentation files (the "Software"), to deal
+   in the Software without restriction, including without limitation the rights
+   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+   copies of the Software, and to permit persons to whom the Software is
+   furnished to do so, subject to the following conditions:
 
-    The above copyright notice and this permission notice shall be included in
-    all copies or substantial portions of the Software.
+   The above copyright notice and this permission notice shall be included in
+   all copies or substantial portions of the Software.
 
-    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-    THE SOFTWARE.
+   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+   THE SOFTWARE.
+---
+   Portions of the AsterixDB API examples
+       located at:
+         asterix-examples/src/main/resources/admaql101-demo/bottle.py
 
-and at asterix-examples/src/main/resources/tweetbook-demo/static/js/geostats.js:
+   are available under The MIT License:
+---
+   Copyright (c) 2014, Marcel Hellkamp.
 
-Copyright (c) 2011 Simon Georget
+   Permission is hereby granted, free of charge, to any person obtaining a copy
+   of this software and associated documentation files (the "Software"), to deal
+   in the Software without restriction, including without limitation the rights
+   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+   copies of the Software, and to permit persons to whom the Software is
+   furnished to do so, subject to the following conditions:
 
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+   The above copyright notice and this permission notice shall be included in
+   all copies or substantial portions of the Software.
 
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+   THE SOFTWARE.
+---
+   Portions of the AsterixDB API examples
+       located at:
+         asterix-examples/src/main/resources/tweetbook-demo/static/js/geostats.js
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+   are available under The MIT License:
+---
+   Copyright (c) 2011 Simon Georget
 
-as well as at asterix-examples/src/main/resources/tweetbook-demo/static/js/rainbowvis.js:
+   Permission is hereby granted, free of charge, to any person obtaining a copy of
+   this software and associated documentation files (the "Software"), to deal in
+   the Software without restriction, including without limitation the rights to
+   use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+   the Software, and to permit persons to whom the Software is furnished to do so,
+   subject to the following conditions:
 
-RainbowVis-JS 
-Released under MIT License
+   The above copyright notice and this permission notice shall be included in all
+   copies or substantial portions of the Software.
 
-Source: https://github.com/anomal/RainbowVis-JS
+   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+   FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+   COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+   IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+---
+   Portions of the AsterixDB API examples
+       located at:
+         asterix-examples/src/main/resources/tweetbook-demo/static/js/rainbowvis.js
 
-For portions of the AsterixDB QueryUI at:
-asterix-app/src/main/resources/queryui/js/jquery-1.12.4.min.js
-
-    Copyright jQuery Foundation and other contributors, https://jquery.org/
-
-    This software consists of voluntary contributions made by many
-    individuals. For exact contribution history, see the revision history
-    available at https://github.com/jquery/jquery
-
-    The following license applies to all parts of this software except as
-    documented below:
-
-    ====
-
-    Permission is hereby granted, free of charge, to any person obtaining
-    a copy of this software and associated documentation files (the
-    "Software"), to deal in the Software without restriction, including
-    without limitation the rights to use, copy, modify, merge, publish,
-    distribute, sublicense, and/or sell copies of the Software, and to
-    permit persons to whom the Software is furnished to do so, subject to
-    the following conditions:
-
-    The above copyright notice and this permission notice shall be
-    included in all copies or substantial portions of the Software.
-
-    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-    LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-    OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-    WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-    ====
-
-    All files located in the node_modules and external directories are
-    externally maintained libraries used by this software which have their
-    own licenses; we recommend you read them, as their terms may differ from
-    the terms above.
-
-For more portions of the AsterixDB QueryUI at:
-asterix-app/src/main/resources/queryui/js/bootstrap.min.js
-asterix-app/src/main/resources/queryui/css/bootstrap.min.css
-asterix-app/src/main/resources/queryui/css/bootstrap-theme.min.css
-
-    The MIT License (MIT)
-
-    Copyright (c) 2011-2016 Twitter, Inc.
-
-    Permission is hereby granted, free of charge, to any person obtaining a copy
-    of this software and associated documentation files (the "Software"), to deal
-    in the Software without restriction, including without limitation the rights
-    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-    copies of the Software, and to permit persons to whom the Software is
-    furnished to do so, subject to the following conditions:
-
-    The above copyright notice and this permission notice shall be included in
-    all copies or substantial portions of the Software.
-
-    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-    THE SOFTWARE.
-
-For more portions of the AsterixDB QueryUI at:
-asterix-app/src/main/resources/queryui/js/angular.min.js
-
-    The MIT License
-
-    Copyright (c) 2010-2016 Google, Inc. http://angularjs.org
-
-    Permission is hereby granted, free of charge, to any person obtaining a copy
-    of this software and associated documentation files (the "Software"), to deal
-    in the Software without restriction, including without limitation the rights
-    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-    copies of the Software, and to permit persons to whom the Software is
-    furnished to do so, subject to the following conditions:
-
-    The above copyright notice and this permission notice shall be included in
-    all copies or substantial portions of the Software.
-
-    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-    THE SOFTWARE.
-
-For more portions of the AsterixDB QueryUI at:
-asterix-app/src/main/resources/queryui/js/codemirror.js
-asterix-app/src/main/resources/queryui/js/javascript.js
-asterix-app/src/main/resources/queryui/css/codemirror.css
-
-    Copyright (C) 2016 by Marijn Haverbeke <marijnh@gmail.com> and others
-
-    Permission is hereby granted, free of charge, to any person obtaining a copy
-    of this software and associated documentation files (the "Software"), to deal
-    in the Software without restriction, including without limitation the rights
-    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-    copies of the Software, and to permit persons to whom the Software is
-    furnished to do so, subject to the following conditions:
-
-    The above copyright notice and this permission notice shall be included in
-    all copies or substantial portions of the Software.
-
-    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-    THE SOFTWARE.
-    Status API Training Shop Blog About
-
-For more portions of the AsterixDB QueryUI at:
-asterix-app/src/main/resources/queryui/js/ui-codemirror.js
-
-    The MIT License
-
-    Copyright (c) 2012 the AngularUI Team, http://angular-ui.github.com
-
-    Permission is hereby granted, free of charge, to any person obtaining a copy
-    of this software and associated documentation files (the "Software"), to deal
-    in the Software without restriction, including without limitation the rights
-    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-    copies of the Software, and to permit persons to whom the Software is
-    furnished to do so, subject to the following conditions:
-
-    The above copyright notice and this permission notice shall be included in
-    all copies or substantial portions of the Software.
-
-    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-    THE SOFTWARE.
-
-For more portions of the AsterixDB QueryUI at:
-asterix-app/src/main/resources/queryui/js/json-formatter.min.js
-asterix-app/src/main/resources/queryui/css/json-formatter.min.css
-
-    Copyright 2014 Mohsen Azimi
-
-    Licensed 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.
+   are available under The MIT License:
+---
+   See https://opensource.org/licenses/mit-license.php
+---
diff --git a/asterixdb/NOTICE b/asterixdb/NOTICE
index 6285a2e..6cd6f73 100644
--- a/asterixdb/NOTICE
+++ b/asterixdb/NOTICE
@@ -1,5 +1,5 @@
 Apache AsterixDB
-Copyright 2015 The Apache Software Foundation
+Copyright 2015-2017 The Apache Software Foundation
 
 This product includes software developed at
 The Apache Software Foundation (http://www.apache.org/).
diff --git a/asterixdb/asterix-examples/src/main/resources/tweetbook-demo/static/js/rainbowvis.js b/asterixdb/asterix-examples/src/main/resources/tweetbook-demo/static/js/rainbowvis.js
index 1f444dc..862622d 100644
--- a/asterixdb/asterix-examples/src/main/resources/tweetbook-demo/static/js/rainbowvis.js
+++ b/asterixdb/asterix-examples/src/main/resources/tweetbook-demo/static/js/rainbowvis.js
@@ -2,7 +2,7 @@
 RainbowVis-JS 
 Released under MIT License
 
-Source: https://github.com/anomal/RainbowVis-JS
+Source: https://github.com/anomal/RainbowVis-JS/blob/e160e6db8be28f7de99ba17c6566007410ee1f98/rainbowvis.js
 */
 
 function Rainbow()
@@ -10,10 +10,10 @@
 	var gradients = null;
 	var minNum = 0;
 	var maxNum = 100;
-	var colours = ['ff0000', 'ffff00', '00ff00', '0000ff']; 
+	var colours = ['ff0000', 'ffff00', '00ff00', '0000ff'];
 	setColours(colours);
-	
-	function setColours (spectrum) 
+
+	function setColours (spectrum)
 	{
 		if (spectrum.length < 2) {
 			throw new Error('Rainbow must have two or more colours.');
@@ -23,12 +23,12 @@
 			firstGradient.setGradient(spectrum[0], spectrum[1]);
 			firstGradient.setNumberRange(minNum, minNum + increment);
 			gradients = [ firstGradient ];
-			
+
 			for (var i = 1; i < spectrum.length - 1; i++) {
 				var colourGradient = new ColourGradient();
 				colourGradient.setGradient(spectrum[i], spectrum[i + 1]);
-				colourGradient.setNumberRange(minNum + increment * i, minNum + increment * (i + 1)); 
-				gradients[i] = colourGradient; 
+				colourGradient.setNumberRange(minNum + increment * i, minNum + increment * (i + 1));
+				gradients[i] = colourGradient;
 			}
 
 			colours = spectrum;
@@ -38,7 +38,7 @@
 
 	this.setColors = this.setColours;
 
-	this.setSpectrum = function () 
+	this.setSpectrum = function ()
 	{
 		setColours(arguments);
 		return this;
@@ -78,7 +78,7 @@
 	}
 }
 
-function ColourGradient() 
+function ColourGradient()
 {
 	var startColour = 'ff0000';
 	var endColour = '0000ff';
@@ -103,11 +103,11 @@
 
 	this.colourAt = function (number)
 	{
-		return calcHex(number, startColour.substring(0,2), endColour.substring(0,2)) 
-			+ calcHex(number, startColour.substring(2,4), endColour.substring(2,4)) 
+		return calcHex(number, startColour.substring(0,2), endColour.substring(0,2))
+			+ calcHex(number, startColour.substring(2,4), endColour.substring(2,4))
 			+ calcHex(number, startColour.substring(4,6), endColour.substring(4,6));
 	}
-	
+
 	function calcHex(number, channelStart_Base16, channelEnd_Base16)
 	{
 		var num = number;
@@ -116,24 +116,24 @@
 		}
 		if (num > maxNum) {
 			num = maxNum;
-		} 
+		}
 		var numRange = maxNum - minNum;
 		var cStart_Base10 = parseInt(channelStart_Base16, 16);
-		var cEnd_Base10 = parseInt(channelEnd_Base16, 16); 
+		var cEnd_Base10 = parseInt(channelEnd_Base16, 16);
 		var cPerUnit = (cEnd_Base10 - cStart_Base10)/numRange;
 		var c_Base10 = Math.round(cPerUnit * (num - minNum) + cStart_Base10);
 		return formatHex(c_Base10.toString(16));
 	}
 
-	formatHex = function (hex) 
+	formatHex = function (hex)
 	{
 		if (hex.length === 1) {
 			return '0' + hex;
 		} else {
 			return hex;
 		}
-	} 
-	
+	}
+
 	function isHexColour(string)
 	{
 		var regex = /^#?[0-9a-fA-F]{6}$/i;
@@ -175,4 +175,3 @@
 		}
 	}
 }
-
diff --git a/asterixdb/asterix-installer/pom.xml b/asterixdb/asterix-installer/pom.xml
index 2f34f1d..d0b84ae 100644
--- a/asterixdb/asterix-installer/pom.xml
+++ b/asterixdb/asterix-installer/pom.xml
@@ -41,9 +41,9 @@
   <build>
     <plugins>
       <plugin>
-        <groupId>org.apache.asterix</groupId>
+        <groupId>org.apache.hyracks</groupId>
         <artifactId>license-automation-plugin</artifactId>
-        <version>${project.version}</version>
+        <version>${hyracks.version}</version>
         <executions>
           <execution>
             <phase>generate-resources</phase>
@@ -60,7 +60,7 @@
               <outputFile>LICENSE</outputFile>
             </generatedFile>
             <generatedFile>
-              <template>asterixdb/src/main/licenses/templates/asterix-notice.ftl</template>
+              <template>hyracks-fullstack/hyracks-fullstack-license/src/main/licenses/templates/asterix-notice.ftl</template>
               <outputFile>NOTICE</outputFile>
             </generatedFile>
           </generatedFiles>
@@ -129,8 +129,9 @@
             </override>
           </overrides>
           <templateProperties>
-            <assembly>asterix/asterix-server-${project.version}-binary-assembly.zip</assembly>
             <packageName>Managix Install</packageName>
+            <asterixAppLocation>repo/asterix-app-${project.version}.jar, within asterix/asterix-server-${project.version}-binary-assembly.zip</asterixAppLocation>
+            <hyracksControlCcLocation>repo/hyracks-control-cc-${project.version}.jar, within asterix/asterix-server-${project.version}-binary-assembly.zip</hyracksControlCcLocation>
           </templateProperties>
         </configuration>
       </plugin>
diff --git a/asterixdb/asterix-license/pom.xml b/asterixdb/asterix-license/pom.xml
new file mode 100644
index 0000000..533b23e
--- /dev/null
+++ b/asterixdb/asterix-license/pom.xml
@@ -0,0 +1,122 @@
+<!--
+ ! 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.
+ !-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>asterix-license</artifactId>
+  <name>asterix-license</name>
+  <parent>
+    <groupId>org.apache.asterix</groupId>
+    <artifactId>apache-asterixdb</artifactId>
+    <version>0.8.9-SNAPSHOT</version>
+  </parent>
+
+  <licenses>
+    <license>
+      <name>Apache License, Version 2.0</name>
+      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+      <distribution>repo</distribution>
+      <comments>A business-friendly OSS license</comments>
+    </license>
+  </licenses>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.hyracks</groupId>
+        <artifactId>license-automation-plugin</artifactId>
+        <version>${hyracks.version}</version>
+        <executions>
+          <execution>
+            <phase>generate-resources</phase>
+            <goals>
+              <goal>generate</goal>
+            </goals>
+          </execution>
+        </executions>
+        <configuration>
+          <templateRootDir>${basedir}/../../</templateRootDir>
+          <outputDir>${basedir}/..</outputDir>
+          <location>ignored</location>
+          <generatedFiles>
+            <generatedFile>
+              <template>asterixdb/src/main/licenses/templates/asterix-source-license.ftl</template>
+              <outputFile>LICENSE</outputFile>
+            </generatedFile>
+            <generatedFile>
+              <template>hyracks-fullstack/hyracks-fullstack-license/src/main/licenses/templates/asterix-notice.ftl</template>
+              <outputFile>NOTICE</outputFile>
+            </generatedFile>
+          </generatedFiles>
+          <excludedScopes>
+            <excludedScope>test</excludedScope>
+          </excludedScopes>
+          <licenseDirectory>${basedir}/../src/main/licenses/content</licenseDirectory>
+          <models>
+             <model>${basedir}/../src/main/appended-resources/supplemental-models.xml</model>
+          </models>
+          <licenses>
+            <license>
+              <displayName>The Apache Software License, Version 2.0</displayName>
+              <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+              <aliasUrls>
+                <aliasUrl>http://www.apache.org/licenses/LICENSE-2.0</aliasUrl>
+                <aliasUrl>https://www.apache.org/licenses/LICENSE-2.0.txt</aliasUrl>
+                <aliasUrl>http://www.apache.org/licenses/LICENSE-2.0.html</aliasUrl>
+              </aliasUrls>
+              <metric>1</metric>
+            </license>
+          </licenses>
+          <templateProperties>
+            <asterixAppLocation/>
+            <asterixAppResourcesPrefix>asterix-app/src/main/resources/</asterixAppResourcesPrefix>
+            <packageName/>
+          </templateProperties>
+        </configuration>
+      </plugin>
+    </plugins>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.eclipse.m2e</groupId>
+          <artifactId>lifecycle-mapping</artifactId>
+          <version>1.0.0</version>
+          <configuration>
+            <lifecycleMappingMetadata>
+              <pluginExecutions>
+                <pluginExecution>
+                  <pluginExecutionFilter>
+                    <groupId>org.apache.asterix</groupId>
+                    <artifactId>license-automation-plugin</artifactId>
+                    <versionRange>${project.version}</versionRange>
+                    <goals>
+                      <goal>generate</goal>
+                    </goals>
+                  </pluginExecutionFilter>
+                  <action>
+                    <ignore />
+                  </action>
+                </pluginExecution>
+              </pluginExecutions>
+            </lifecycleMappingMetadata>
+          </configuration>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+</project>
diff --git a/asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/freemarker/IndentDirective.java b/asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/freemarker/IndentDirective.java
deleted file mode 100644
index fed2a12..0000000
--- a/asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/freemarker/IndentDirective.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * 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.
- */
-package org.apache.asterix.license.freemarker;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.Arrays;
-import java.util.Map;
-
-import freemarker.core.Environment;
-import freemarker.template.TemplateDirectiveBody;
-import freemarker.template.TemplateDirectiveModel;
-import freemarker.template.TemplateException;
-import freemarker.template.TemplateModel;
-import freemarker.template.TemplateModelException;
-import freemarker.template.TemplateNumberModel;
-
-public class IndentDirective implements TemplateDirectiveModel {
-
-    private static final String PARAM_NAME_SPACES = "spaces";
-
-    @Override
-    public void execute(Environment env, Map params, TemplateModel [] loopVars, TemplateDirectiveBody body)
-            throws TemplateException, IOException {
-
-        int spacesParam = -1;
-
-        for (Object o : params.entrySet()) {
-            Map.Entry ent = (Map.Entry) o;
-
-            String paramName = (String) ent.getKey();
-            TemplateModel paramValue = (TemplateModel) ent.getValue();
-
-            if (paramName.equals(PARAM_NAME_SPACES)) {
-                if (!(paramValue instanceof TemplateNumberModel)) {
-                    throw new TemplateModelException(
-                            "The \"" + PARAM_NAME_SPACES + "\" parameter must be a number.");
-                }
-                spacesParam = ((TemplateNumberModel) paramValue).getAsNumber().intValue();
-                if (spacesParam < 0) {
-                    throw new TemplateModelException(
-                            "The \"" + PARAM_NAME_SPACES + "\" parameter can't be negative.");
-                }
-            } else {
-                throw new TemplateModelException("Unsupported parameter: " + paramName);
-            }
-        }
-        if (spacesParam < 0) {
-            throw new TemplateModelException("The required \"" + PARAM_NAME_SPACES + "\" parameter is missing.");
-        }
-
-        if (body == null) {
-            throw new TemplateModelException("Indent requires a body");
-        } else {
-            // Executes the nested body (same as <#nested> in FTL). In this
-            // case we don't provide a special writer as the parameter:
-            body.render(new IndentingWriter(env.getOut(), spacesParam));
-        }
-    }
-
-    private static class IndentingWriter extends Writer {
-        private final Writer out;
-        private final char[] padChars;
-        boolean needsToPad;
-
-        public IndentingWriter(Writer out, int numSpaces) {
-            this.out = out;
-            padChars = new char[numSpaces];
-            Arrays.fill(padChars, ' ');
-            needsToPad = true;
-        }
-
-        @Override
-        public void write(char[] cbuf, int off, int len) throws IOException {
-            for (int i = off; i < len; i++) {
-                if (cbuf[i] == '\n') {
-                    out.write(cbuf[i]);
-                    needsToPad = true;
-                } else {
-                    if (needsToPad) {
-                        out.write(padChars);
-                        needsToPad = false;
-                    }
-                    out.write(cbuf[i]);
-                }
-            }
-        }
-
-        @Override
-        public void flush() throws IOException {
-            out.flush();
-        }
-
-        @Override
-        public void close() throws IOException {
-            out.flush();
-        }
-    }
-}
diff --git a/asterixdb/asterix-maven-plugins/pom.xml b/asterixdb/asterix-maven-plugins/pom.xml
index 9da5759..9207abe 100644
--- a/asterixdb/asterix-maven-plugins/pom.xml
+++ b/asterixdb/asterix-maven-plugins/pom.xml
@@ -57,6 +57,5 @@
     <module>asterix-evaluator-generator-maven-plugin</module>
     <module>asterix-test-datagenerator-maven-plugin</module>
     <module>asterix-grammar-extension-maven-plugin</module>
-    <module>license-automation-plugin</module>
   </modules>
 </project>
\ No newline at end of file
diff --git a/asterixdb/asterix-server/pom.xml b/asterixdb/asterix-server/pom.xml
index 8cf52d1..ad783a7 100644
--- a/asterixdb/asterix-server/pom.xml
+++ b/asterixdb/asterix-server/pom.xml
@@ -42,9 +42,9 @@
   <build>
     <plugins>
       <plugin>
-        <groupId>org.apache.asterix</groupId>
+        <groupId>org.apache.hyracks</groupId>
         <artifactId>license-automation-plugin</artifactId>
-        <version>${project.version}</version>
+        <version>${hyracks.version}</version>
         <executions>
           <execution>
             <phase>generate-resources</phase>
@@ -61,7 +61,7 @@
               <outputFile>LICENSE</outputFile>
             </generatedFile>
             <generatedFile>
-              <template>asterixdb/src/main/licenses/templates/asterix-notice.ftl</template>
+              <template>hyracks-fullstack/hyracks-fullstack-license/src/main/licenses/templates/asterix-notice.ftl</template>
               <outputFile>NOTICE</outputFile>
             </generatedFile>
           </generatedFiles>
@@ -219,8 +219,9 @@
             </license>
           </licenses>
           <templateProperties>
-            <assembly>this assembly</assembly>
             <packageName>Server Install</packageName>
+            <asterixAppLocation>repo/asterix-app-${project.version}.jar, within this assembly</asterixAppLocation>
+            <hyracksControlCcLocation>repo/hyracks-control-cc-${project.version}.jar, within this assembly</hyracksControlCcLocation>
           </templateProperties>
         </configuration>
       </plugin>
diff --git a/asterixdb/asterix-yarn/pom.xml b/asterixdb/asterix-yarn/pom.xml
index ed476ca..03e62ea 100644
--- a/asterixdb/asterix-yarn/pom.xml
+++ b/asterixdb/asterix-yarn/pom.xml
@@ -86,9 +86,9 @@
         </executions>
       </plugin>
       <plugin>
-        <groupId>org.apache.asterix</groupId>
+        <groupId>org.apache.hyracks</groupId>
         <artifactId>license-automation-plugin</artifactId>
-        <version>${project.version}</version>
+        <version>${hyracks.version}</version>
         <executions>
           <execution>
             <phase>generate-resources</phase>
@@ -104,7 +104,7 @@
               <outputFile>LICENSE</outputFile>
             </generatedFile>
             <generatedFile>
-              <template>asterixdb/src/main/licenses/templates/asterix-notice.ftl</template>
+              <template>hyracks-fullstack/hyracks-fullstack-license/src/main/licenses/templates/asterix-notice.ftl</template>
               <outputFile>NOTICE</outputFile>
             </generatedFile>
           </generatedFiles>
@@ -187,8 +187,9 @@
             </license>
           </licenses>
           <templateProperties>
-            <assembly>asterix/asterix-server-${project.version}-binary-assembly.zip</assembly>
             <packageName>YARN Install</packageName>
+            <asterixAppLocation>repo/asterix-app-${project.version}.jar, within asterix/asterix-server-${project.version}-binary-assembly.zip</asterixAppLocation>
+            <hyracksControlCcLocation>repo/hyracks-control-cc-${project.version}.jar, within asterix/asterix-server-${project.version}-binary-assembly.zip</hyracksControlCcLocation>
           </templateProperties>
         </configuration>
       </plugin>
diff --git a/asterixdb/pom.xml b/asterixdb/pom.xml
index 043f801..af301b0 100644
--- a/asterixdb/pom.xml
+++ b/asterixdb/pom.xml
@@ -473,7 +473,7 @@
       </properties>
     </profile>
     <profile>
-      <id>asterix-release</id>
+      <id>source-assembly</id>
       <activation>
         <file>
           <exists>src/main/assembly/source.xml</exists>
@@ -498,7 +498,6 @@
                 </goals>
                 <!-- combine.self should be override to replace the configuration in the parent POM -->
                 <configuration combine.self="override">
-                  <runOnlyAtExecutionRoot>true</runOnlyAtExecutionRoot>
                   <descriptors>
                     <descriptor>src/main/assembly/source.xml</descriptor>
                   </descriptors>
@@ -617,6 +616,7 @@
     <module>asterix-coverage</module>
     <module>asterix-active</module>
     <module>asterix-client-helper</module>
+    <module>asterix-license</module>
   </modules>
 
   <repositories>
diff --git a/asterixdb/src/main/licenses/templates/asterix-license.ftl b/asterixdb/src/main/licenses/templates/asterix-license.ftl
index 140b365..8b83c1f 100644
--- a/asterixdb/src/main/licenses/templates/asterix-license.ftl
+++ b/asterixdb/src/main/licenses/templates/asterix-license.ftl
@@ -30,9 +30,8 @@
    ASTERIXDB COMPONENTS:
 
    AsterixDB includes a number of subcomponents with separate copyright
-   notices and license terms. Your use of the source code for these
-   subcomponents is subject to the terms and condition of the following
-   licenses.
+   notices and license terms. Your use of these subcomponents is subject
+   to the terms and condition of the following licenses.
 ===
 <#list licenseMap as e>
    <#assign licenseUrl = e.getKey()/>
@@ -66,5 +65,10 @@
    </#if>
 ---
 </#list>
+===
+   AsterixDB includes source code with separate copyright notices and
+   license terms. Your use of this source code is subject to the terms
+   and condition of the following licenses.
+===
 <#include "source_licenses.ftl">
-<#include "../../../../../hyracks-fullstack/src/main/licenses/templates/source_licenses.ftl">
+<#include "../../../../../hyracks-fullstack/hyracks-fullstack-license/src/main/licenses/templates/source_licenses.ftl">
diff --git a/asterixdb/src/main/licenses/templates/asterix-notice.ftl b/asterixdb/src/main/licenses/templates/asterix-source-license.ftl
similarity index 60%
copy from asterixdb/src/main/licenses/templates/asterix-notice.ftl
copy to asterixdb/src/main/licenses/templates/asterix-source-license.ftl
index add0a35..f157446 100644
--- a/asterixdb/src/main/licenses/templates/asterix-notice.ftl
+++ b/asterixdb/src/main/licenses/templates/asterix-source-license.ftl
@@ -16,25 +16,18 @@
  ! specific language governing permissions and limitations
  ! under the License.
 -->
-Apache AsterixDB ${packageName}
-Copyright 2015-2017 The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
-
-AsterixDB utilizes many libraries, which come with the following applicable NOTICE(s):
-
-<#list noticeMap as e>
-   <#assign noticeText = e.getKey()/>
-   <#assign projects = e.getValue()/>
-   <#list projects as p>
-       <#list p.locations as loc>
-- ${loc}${p.artifactId}-${p.version}.jar
-       </#list>
-   </#list>
-
-<@indent spaces=6>
-${noticeText}
-</@indent>
-
+<@indent spaces=3>
+<#list licenses as license>
+  <#if license.url == "http://www.apache.org/licenses/LICENSE-2.0.txt">
+${license.content}
+    <#break>
+  </#if>
 </#list>
+</@indent>
+===
+   AsterixDB includes source code with separate copyright notices and
+   license terms. Your use of this source code is subject to the terms
+   and condition of the following licenses.
+===
+<#include "source_licenses.ftl">
+<#include "source_only_licenses.ftl">
diff --git a/asterixdb/src/main/licenses/templates/source_licenses.ftl b/asterixdb/src/main/licenses/templates/source_licenses.ftl
index 47af1e5..475c6ac 100644
--- a/asterixdb/src/main/licenses/templates/source_licenses.ftl
+++ b/asterixdb/src/main/licenses/templates/source_licenses.ftl
@@ -1,12 +1,51 @@
-   Portions of the AsterixDB WebUI in:
-       repo/asterix-app-${project.version}.jar, within ${assembly}
+<#--
+ ! 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" location="${asterixAppLocation!}"
+                filePrefix="${asterixAppResourcesPrefix!}"
+                licenseName="the following license">
+   Portions of the ${component}
+<#if location?has_content>
+       in: ${location}
+</#if>
        located at:
-         webui/static/js/jquery.min.js
+<#if files?is_sequence>
+<#list files as file>
+<#if file?counter < files?size>
+         ${filePrefix}${file},
+<#else>
        and
-         webui/static/js/jquery.autosize-min.js
+         ${filePrefix}${file}
+</#if>
+</#list>
+<#else>
+         ${filePrefix}${files}
+</#if>
 
-   are available under an MIT-style license:
+   are available under ${licenseName}:
 ---
+<@indent spaces=3 unpad=true wrap=true>
+<#nested>
+</@indent>
+---
+</#macro>
+<@license files=["webui/static/js/jquery.min.js", "webui/static/js/jquery.autosize-min.js", "queryui/js/jquery-1.12.4.min.js"]
+          licenseName="an MIT-style license">
    Copyright jQuery Foundation and other contributors, https://jquery.org/
 
    This software consists of voluntary contributions made by many
@@ -43,64 +82,143 @@
    externally maintained libraries used by this software which have their
    own licenses; we recommend you read them, as their terms may differ from
    the terms above.
----
-   Portions of the AsterixDB WebUI in:
-       repo/asterix-app-${project.version}.jar, within ${assembly}
-       located at:
-         webui/static/js/bootstrap.min.js
+</@license>
+<@license files=["webui/static/js/bootstrap.min.js", "webui/static/css/bootstrap-responsive.min.css", "webui/static/css/bootstrap.min.css"]>
+   Copyright 2012 Twitter, Inc.
+   http://www.apache.org/licenses/LICENSE-2.0.txt
+</@license>
+<@license files=["webui/static/js/smoothie.js", "feed/smoothie.js"]>
+Copyright (c) 2010-2013, Joe Walnes
 
-   are available under an MIT-style license:
----
-   The MIT License (MIT)
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
 
-   Copyright (c) 2011-2015 Twitter, Inc
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
 
-   Permission is hereby granted, free of charge, to any person obtaining a copy
-   of this software and associated documentation files (the "Software"), to deal
-   in the Software without restriction, including without limitation the rights
-   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-   copies of the Software, and to permit persons to whom the Software is
-   furnished to do so, subject to the following conditions:
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+</@license>
+<@license component="AsterixDB QueryUI" files=["queryui/js/json-formatter.min.js", "queryui/css/json-formatter.min.css"]>
+    Copyright 2014 Mohsen Azimi
 
-   The above copyright notice and this permission notice shall be included in
-   all copies or substantial portions of the Software.
+    Licensed 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
 
-   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-   THE SOFTWARE.
----
-   Portions of the AsterixDB WebUI in:
-       repo/asterix-app-${project.version}.jar, within ${assembly}
-       located at:
-         webui/static/js/smoothie.js
+        http://www.apache.org/licenses/LICENSE-2.0
 
-   are available under an MIT-style license:
----
-   MIT License
-   -----------
+    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.
+</@license>
+<@license component="AsterixDB QueryUI" files=["queryui/js/bootstrap.min.js", "queryui/css/bootstrap.min.css", "queryui/css/bootstrap-theme.min.css"]>
+The MIT License (MIT)
 
-   Copyright (c) 2010-2013, Joe Walnes
-                 2013-2014, Drew Noakes
+Copyright (c) 2011-2015 Twitter, Inc
 
-                 Permission is hereby granted, free of charge, to any person obtaining a copy
-                 of this software and associated documentation files (the "Software"), to deal
-                 in the Software without restriction, including without limitation the rights
-                 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-                 copies of the Software, and to permit persons to whom the Software is
-                 furnished to do so, subject to the following conditions:
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
 
-                 The above copyright notice and this permission notice shall be included in
-                 all copies or substantial portions of the Software.
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
 
-                 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-                 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-                 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-                 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-                 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-                 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-                 THE SOFTWARE.
----
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+queryui/css/bootstrap.min.css also contains normalize.css v3.0.3 (http://github.com/necolas/normalize.css), having the following copyright:
+
+Copyright © Nicolas Gallagher and Jonathan Neal
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+</@license>
+
+<@license component="AsterixDB QueryUI" files="queryui/js/angular.min.js" licenseName="The MIT License">
+    Copyright (c) 2010-2016 Google, Inc. http://angularjs.org
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the "Software"), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+    THE SOFTWARE.
+</@license>
+<@license component="AsterixDB QueryUI" licenseName="The MIT License"
+          files=["queryui/js/codemirror.js", "queryui/js/javascript.js", "queryui/css/codemirror.css"]>
+    Copyright (C) 2016 by Marijn Haverbeke <marijnh@gmail.com> and others
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the "Software"), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+    THE SOFTWARE.
+</@license>
+<@license component="AsterixDB QueryUI" files="queryui/js/ui-codemirror.js" licenseName="The MIT License">
+    Copyright (c) 2012 the AngularUI Team, http://angular-ui.github.com
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the "Software"), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+    THE SOFTWARE.
+</@license>
diff --git a/asterixdb/src/main/licenses/templates/source_only_licenses.ftl b/asterixdb/src/main/licenses/templates/source_only_licenses.ftl
new file mode 100644
index 0000000..376b1bf
--- /dev/null
+++ b/asterixdb/src/main/licenses/templates/source_only_licenses.ftl
@@ -0,0 +1,80 @@
+<#--
+ ! 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:
+<#if files?is_sequence>
+<#list files as file>
+<#if file?counter < files?size>
+         ${file},
+<#else>
+       and
+         ${file}
+</#if>
+</#list>
+<#else>
+         ${files}
+</#if>
+
+   are available under ${licenseName}:
+---
+<@indent spaces=3 unpad=true wrap=true>
+<#nested>
+</@indent>
+---
+</#macro>
+<@license files="asterix-examples/src/main/resources/admaql101-demo/bottle.py"
+          component="AsterixDB API examples" licenseName="The MIT License">
+    Copyright (c) 2014, Marcel Hellkamp.
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the "Software"), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+    THE SOFTWARE.
+</@license>
+<@license files="asterix-examples/src/main/resources/tweetbook-demo/static/js/geostats.js"
+          component="AsterixDB API examples" licenseName="The MIT License">
+Copyright (c) 2011 Simon Georget
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+</@license>
+<@license files="asterix-examples/src/main/resources/tweetbook-demo/static/js/rainbowvis.js"
+          component="AsterixDB API examples" licenseName="The MIT License">
+
+See https://opensource.org/licenses/mit-license.php
+
+</@license>
diff --git a/hyracks-fullstack/LICENSE b/hyracks-fullstack/LICENSE
index e8ff1e1..fa9d611 100644
--- a/hyracks-fullstack/LICENSE
+++ b/hyracks-fullstack/LICENSE
@@ -1,4 +1,3 @@
-
                                  Apache License
                            Version 2.0, January 2004
                         http://www.apache.org/licenses/
@@ -200,17 +199,17 @@
    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.
+===
+   AsterixDB Hyracks includes source code with separate copyright notices
+   and license terms. Your use of this source code is subject to the terms
+   and condition of the following licenses.
+===
+   Portions of the Hyracks admin console
+       located at:
+         hyracks/hyracks-control/hyracks-control-cc/src/main/resources/static/javascript/flot/
 
-ASTERIXDB COMPONENTS:
-
-AsterixDB includes a number of subcomponents with separate copyright
-notices and license terms. Your use of the source code for these
-subcomponents is subject to the terms and condition of the following
-licenses.
-
-For portions of the Hyracks admin console at
-hyracks/hyracks-control/hyracks-control-cc/src/main/resources/static/javascript/flot/
-
+   are available under The MIT License:
+---
    Copyright (c) 2007-2014 IOLA and Ole Laursen
 
    Permission is hereby granted, free of charge, to any person
@@ -233,10 +232,13 @@
    WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
    OTHER DEALINGS IN THE SOFTWARE.
+---
+   Portions of the Hyracks admin console
+       located at:
+         hyracks/hyracks-control/hyracks-control-cc/src/main/resources/static/javascript/jsplumb/
 
-As well as the Hyracks adminconsole resources at:
-hyracks/hyracks-control/hyracks-control-cc/src/main/resources/static/javascript/jsplumb/
-
+   are available under The MIT License:
+---
    Copyright (c) 2010 - 2014 jsPlumb, http://jsplumbtoolkit.com/
 
    Permission is hereby granted, free of charge, to any person obtaining
@@ -257,12 +259,15 @@
    LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+---
+   Portions of the Hyracks admin console
+       located at:
+         hyracks/hyracks-control/hyracks-control-cc/src/main/resources/static/javascript/jquery,
+       and
+         hyracks/hyracks-control/hyracks-control-cc/src/main/resources/static/javascript/jquery-ui
 
-and also the Hyracks adminconsole resources at:
-hyracks/hyracks-control/hyracks-control-cc/src/main/resources/static/javascript/jquery
-and
-hyracks/hyracks-control/hyracks-control-cc/src/main/resources/static/stylesheet/jquery-ui
-
+   are available under The MIT License:
+---
    Copyright jQuery Foundation and other contributors, https://jquery.org/
 
    This software consists of voluntary contributions made by many
@@ -299,20 +304,25 @@
    externally maintained libraries used by this software which have their
    own licenses; we recommend you read them, as their terms may differ from
    the terms above.
+---
+   Portions of the Hyracks admin console
+       located at:
+         hyracks/hyracks-control/hyracks-control-cc/src/main/resources/static/javascript/jquery/plugins/jquery.getParams.js
 
-and also the Hyracks adminconsole resource at:
-hyracks/hyracks-control/hyracks-control-cc/src/main/resources/static/javascript/jquery/plugins/jquery.getParams.js
-
-
+   are available under The MIT License:
+---
    Copyright (c) 2006 Mathias Bank (http://www.mathias-bank.de)
    Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
    and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 
    Thanks to Hinnerk Ruemenapf - http://hinnerk.ruemenapf.de/ for bug reporting and fixing.
+---
+   Portions of the Hyracks admin console
+       located at:
+         hyracks/hyracks-control/hyracks-control-cc/src/main/resources/static/javascript/jquery/plugins/jquery.timer.js
 
-and also the Hyracks adminconsole resource at:
-hyracks/hyracks-control/hyracks-control-cc/src/main/resources/static/javascript/jquery/plugins/jquery.timer.js
-
+   are available under The MIT License:
+---
    jquery.timer.js
 
    Copyright (c) 2011 Jason Chavannes <jason.chavannes@gmail.com>
@@ -338,309 +348,341 @@
    ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
    CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    SOFTWARE.
+---
+   Portions of the Hyracks admin console
+       located at:
+         hyracks/hyracks-control/hyracks-control-cc/src/main/resources/static/stylesheet/json.human.css,
+       and
+         hyracks/hyracks-control/hyracks-control-cc/src/main/resources/static/javascript/adminconsole/json.human.js
 
-also the test data for the Hyracks textserver examples at
-hyracks/hyracks-examples/text-example/textserver/data/file1.txt and
-hyracks/hyracks-examples/text-example/textserver/data/file2.txt
+   are available under The MIT License:
+---
+   Copyright (c) 2015, Mariano Guerra
 
-THE FULL PROJECT GUTENBERG LICENSE
+   Permission is hereby granted, free of charge, to any person obtaining a copy
+   of this software and associated documentation files (the "Software"), to deal
+   in the Software without restriction, including without limitation the rights
+   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+   copies of the Software, and to permit persons to whom the Software is
+   furnished to do so, subject to the following conditions:
 
-PLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK
+   The above copyright notice and this permission notice shall be included in
+   all copies or substantial portions of the Software.
 
-To protect the Project Gutenberg-tm mission of promoting the free distribution
-of electronic works, by using or distributing this work (or any other work
-associated in any way with the phrase "Project Gutenberg"), you agree to comply
-with all the terms of the Full Project Gutenberg-tm License available with this
-file or online at www.gutenberg.org/license.
+   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+   THE SOFTWARE.
+---
+   Portions of the test data for the Hyracks textserver examples
+       located at:
+         hyracks/hyracks-examples/text-example/textserver/data/file1.txt,
+       and
+         hyracks/hyracks-examples/text-example/textserver/data/file2.txt
 
-Section 1.
-General Terms of Use and Redistributing Project Gutenberg-tm electronic works
+   are available under the following license:
+---
+   THE FULL PROJECT GUTENBERG LICENSE
 
-1.A. By reading or using any part of this Project Gutenberg-tm
-electronic work, you indicate that you have read, understand, agree to and
-accept all the terms of this license and intellectual property
-(trademark/copyright) agreement. If you do not agree to abide by all the terms
-of this agreement, you must cease using and return or destroy all copies of
-Project Gutenberg-tm electronic works in your possession. If you paid a fee for
-obtaining a copy of or access to a Project Gutenberg-tm electronic work and you
-do not agree to be bound by the terms of this agreement, you may obtain a
-refund from the person or entity to whom you paid the fee as set forth in
-paragraph 1.E.8.
+   PLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK
 
-1.B. "Project Gutenberg" is a registered trademark. It may only be used on or
-associated in any way with an electronic work by people who agree to be bound
-by the terms of this agreement. There are a few things that you can do with
-most Project Gutenberg-tm electronic works even without complying with the full
-terms of this agreement. See paragraph 1.C below. There are a lot of things you
-can do with Project Gutenberg-tm electronic works if you follow the terms of
-this agreement and help preserve free future access to Project Gutenberg-tm
-electronic works. See paragraph 1.E below.
+   To protect the Project Gutenberg-tm mission of promoting the free distribution
+   of electronic works, by using or distributing this work (or any other work
+   associated in any way with the phrase "Project Gutenberg"), you agree to comply
+   with all the terms of the Full Project Gutenberg-tm License available with this
+   file or online at www.gutenberg.org/license.
 
-1.C. The Project Gutenberg Literary Archive Foundation ("the Foundation" or
-PGLAF), owns a compilation copyright in the collection of Project Gutenberg-tm
-electronic works. Nearly all the individual works in the collection are in the
-public domain in the United States. If an individual work is unprotected by
-copyright law in the United States and you are located in the United States, we
-do not claim a right to prevent you from copying, distributing, performing,
-displaying or creating derivative works based on the work as long as all
-references to Project Gutenberg are removed. Of course, we hope that you will
-support the Project Gutenberg-tm mission of promoting free access to electronic
-works by freely sharing Project Gutenberg-tm works in compliance with the terms
-of this agreement for keeping the Project Gutenberg-tm name associated with the
-work. You can easily comply with the terms of this agreement by keeping this
-work in the same format with its attached full Project Gutenberg-tm License
-when you share it without charge with others.
+   Section 1.
+   General Terms of Use and Redistributing Project Gutenberg-tm electronic works
 
-[*] This particular work is one of the few individual works protected by
-copyright law in the United States and most of the remainder of the world,
-included in the Project Gutenberg collection with the permission of the
-copyright holder. Information on the copyright owner for this particular work
-and the terms of use imposed by the copyright holder on this work are set forth
-at the beginning of this work.
+   1.A. By reading or using any part of this Project Gutenberg-tm
+   electronic work, you indicate that you have read, understand, agree to and
+   accept all the terms of this license and intellectual property
+   (trademark/copyright) agreement. If you do not agree to abide by all the terms
+   of this agreement, you must cease using and return or destroy all copies of
+   Project Gutenberg-tm electronic works in your possession. If you paid a fee for
+   obtaining a copy of or access to a Project Gutenberg-tm electronic work and you
+   do not agree to be bound by the terms of this agreement, you may obtain a
+   refund from the person or entity to whom you paid the fee as set forth in
+   paragraph 1.E.8.
 
-1.D. The copyright laws of the place where you are located also govern what you
-can do with this work. Copyright laws in most countries are in a constant state
-of change. If you are outside the United States, check the laws of your country
-in addition to the terms of this agreement before downloading, copying,
-displaying, performing, distributing or creating derivative works based on this
-work or any other Project Gutenberg-tm work. The Foundation makes no
-representations concerning the copyright status of any work in any country
-outside the United States.
+   1.B. "Project Gutenberg" is a registered trademark. It may only be used on or
+   associated in any way with an electronic work by people who agree to be bound
+   by the terms of this agreement. There are a few things that you can do with
+   most Project Gutenberg-tm electronic works even without complying with the full
+   terms of this agreement. See paragraph 1.C below. There are a lot of things you
+   can do with Project Gutenberg-tm electronic works if you follow the terms of
+   this agreement and help preserve free future access to Project Gutenberg-tm
+   electronic works. See paragraph 1.E below.
 
-1.E. Unless you have removed all references to Project Gutenberg:
+   1.C. The Project Gutenberg Literary Archive Foundation ("the Foundation" or
+   PGLAF), owns a compilation copyright in the collection of Project Gutenberg-tm
+   electronic works. Nearly all the individual works in the collection are in the
+   public domain in the United States. If an individual work is unprotected by
+   copyright law in the United States and you are located in the United States, we
+   do not claim a right to prevent you from copying, distributing, performing,
+   displaying or creating derivative works based on the work as long as all
+   references to Project Gutenberg are removed. Of course, we hope that you will
+   support the Project Gutenberg-tm mission of promoting free access to electronic
+   works by freely sharing Project Gutenberg-tm works in compliance with the terms
+   of this agreement for keeping the Project Gutenberg-tm name associated with the
+   work. You can easily comply with the terms of this agreement by keeping this
+   work in the same format with its attached full Project Gutenberg-tm License
+   when you share it without charge with others.
 
-1.E.1. The following sentence, with active links to, or other immediate access
-to, the full Project Gutenberg-tm License must appear prominently whenever any
-copy of a Project Gutenberg-tm work (any work on which the phrase "Project
-Gutenberg" appears, or with which the phrase "Project Gutenberg" is associated)
-is accessed, displayed, performed, viewed, copied or distributed:
+   [*] This particular work is one of the few individual works protected by
+   copyright law in the United States and most of the remainder of the world,
+   included in the Project Gutenberg collection with the permission of the
+   copyright holder. Information on the copyright owner for this particular work
+   and the terms of use imposed by the copyright holder on this work are set forth
+   at the beginning of this work.
 
-This eBook is for the use of anyone anywhere in the United States and most
-other parts of the world at no cost and with almost no restrictions whatsoever.
-You may copy it, give it away or re-use it under the terms of the Project
-Gutenberg License included with this eBook or online at www.gutenberg.org. If
-you are not located in the United States, you'll have to check the laws of the
-country where you are located before using this ebook.
+   1.D. The copyright laws of the place where you are located also govern what you
+   can do with this work. Copyright laws in most countries are in a constant state
+   of change. If you are outside the United States, check the laws of your country
+   in addition to the terms of this agreement before downloading, copying,
+   displaying, performing, distributing or creating derivative works based on this
+   work or any other Project Gutenberg-tm work. The Foundation makes no
+   representations concerning the copyright status of any work in any country
+   outside the United States.
 
-1.E.2. If an individual Project Gutenberg-tm electronic work is derived from
-texts not protected by U.S. copyright law (does not contain a notice indicating
-that it is posted with permission of the copyright holder), the work can be
-copied and distributed to anyone in the United States without paying any fees
-or charges. If you are redistributing or providing access to a work with the
-phrase "Project Gutenberg" associated with or appearing on the work, you must
-comply either with the requirements of paragraphs 1.E.1 through 1.E.7 or obtain
-permission for the use of the work and the Project Gutenberg-tm trademark as
-set forth in paragraphs 1.E.8 or 1.E.9.
+   1.E. Unless you have removed all references to Project Gutenberg:
 
-1.E.3. If an individual Project Gutenberg-tm electronic work is posted with the
-permission of the copyright holder, your use and distribution must comply with
-both paragraphs 1.E.1 through 1.E.7 and any additional terms imposed by the
-copyright holder. Additional terms will be linked to the Project Gutenberg-tm
-License for all works posted with the permission of the copyright holder found
-at the beginning of this work.
+   1.E.1. The following sentence, with active links to, or other immediate access
+   to, the full Project Gutenberg-tm License must appear prominently whenever any
+   copy of a Project Gutenberg-tm work (any work on which the phrase "Project
+   Gutenberg" appears, or with which the phrase "Project Gutenberg" is associated)
+   is accessed, displayed, performed, viewed, copied or distributed:
 
-1.E.4. Do not unlink or detach or remove the full Project Gutenberg-tm License
-terms from this work, or any files containing a part of this work or any other
-work associated with Project Gutenberg-tm.
+   This eBook is for the use of anyone anywhere in the United States and most
+   other parts of the world at no cost and with almost no restrictions whatsoever.
+   You may copy it, give it away or re-use it under the terms of the Project
+   Gutenberg License included with this eBook or online at www.gutenberg.org. If
+   you are not located in the United States, you'll have to check the laws of the
+   country where you are located before using this ebook.
 
-1.E.5. Do not copy, display, perform, distribute or redistribute this
-electronic work, or any part of this electronic work, without prominently
-displaying the sentence set forth in paragraph 1.E.1 with active links or
-immediate access to the full terms of the Project Gutenberg-tm License.
+   1.E.2. If an individual Project Gutenberg-tm electronic work is derived from
+   texts not protected by U.S. copyright law (does not contain a notice indicating
+   that it is posted with permission of the copyright holder), the work can be
+   copied and distributed to anyone in the United States without paying any fees
+   or charges. If you are redistributing or providing access to a work with the
+   phrase "Project Gutenberg" associated with or appearing on the work, you must
+   comply either with the requirements of paragraphs 1.E.1 through 1.E.7 or obtain
+   permission for the use of the work and the Project Gutenberg-tm trademark as
+   set forth in paragraphs 1.E.8 or 1.E.9.
 
-1.E.6. You may convert to and distribute this work in any binary, compressed,
-marked up, nonproprietary or proprietary form, including any word processing or
-hypertext form. However, if you provide access to or distribute copies of a
-Project Gutenberg-tm work in a format other than "Plain Vanilla ASCII" or other
-format used in the official version posted on the official Project Gutenberg-tm
-web site (www.gutenberg.org), you must, at no additional cost, fee or expense
-to the user, provide a copy, a means of exporting a copy, or a means of
-obtaining a copy upon request, of the work in its original "Plain Vanilla
-ASCII" or other form. Any alternate format must include the full Project
-Gutenberg-tm License as specified in paragraph 1.E.1.
+   1.E.3. If an individual Project Gutenberg-tm electronic work is posted with the
+   permission of the copyright holder, your use and distribution must comply with
+   both paragraphs 1.E.1 through 1.E.7 and any additional terms imposed by the
+   copyright holder. Additional terms will be linked to the Project Gutenberg-tm
+   License for all works posted with the permission of the copyright holder found
+   at the beginning of this work.
 
-1.E.7. Do not charge a fee for access to, viewing, displaying, performing,
-copying or distributing any Project Gutenberg-tm works unless you comply with
-paragraph 1.E.8 or 1.E.9.
+   1.E.4. Do not unlink or detach or remove the full Project Gutenberg-tm License
+   terms from this work, or any files containing a part of this work or any other
+   work associated with Project Gutenberg-tm.
 
-1.E.8. You may charge a reasonable fee for copies of or providing access to or
-distributing Project Gutenberg-tm electronic works provided that
+   1.E.5. Do not copy, display, perform, distribute or redistribute this
+   electronic work, or any part of this electronic work, without prominently
+   displaying the sentence set forth in paragraph 1.E.1 with active links or
+   immediate access to the full terms of the Project Gutenberg-tm License.
 
-You pay a royalty fee of 20% of the gross profits you derive from the use of
-Project Gutenberg-tm works calculated using the method you already use to
-calculate your applicable taxes. The fee is owed to the owner of the Project
-Gutenberg-tm trademark, but he has agreed to donate royalties under this
-paragraph to the Project Gutenberg Literary Archive Foundation. Royalty
-payments must be paid within 60 days following each date on which you prepare
-(or are legally required to prepare) your periodic tax returns. Royalty
-payments should be clearly marked as such and sent to the Project Gutenberg
-Literary Archive Foundation at the address specified in Section 4, "Information
-about donations to the Project Gutenberg Literary Archive Foundation." You
-provide a full refund of any money paid by a user who notifies you in writing
-(or by e-mail) within 30 days of receipt that s/he does not agree to the terms
-of the full Project Gutenberg-tm License. You must require such a user to
-return or destroy all copies of the works possessed in a physical medium and
-discontinue all use of and all access to other copies of Project Gutenberg-tm
-works.  You provide, in accordance with paragraph 1.F.3, a full refund of any
-money paid for a work or a replacement copy, if a defect in the electronic work
-is discovered and reported to you within 90 days of receipt of the work.  You
-comply with all other terms of this agreement for free distribution of Project
-Gutenberg-tm works.  1.E.9. If you wish to charge a fee or distribute a Project
-Gutenberg-tm electronic work or group of works on different terms than are set
-forth in this agreement, you must obtain permission in writing from both the
-Project Gutenberg Literary Archive Foundation and The Project Gutenberg
-Trademark LLC, the owner of the Project Gutenberg-tm trademark. Contact the
-Foundation as set forth in Section 3 below.
+   1.E.6. You may convert to and distribute this work in any binary, compressed,
+   marked up, nonproprietary or proprietary form, including any word processing or
+   hypertext form. However, if you provide access to or distribute copies of a
+   Project Gutenberg-tm work in a format other than "Plain Vanilla ASCII" or other
+   format used in the official version posted on the official Project Gutenberg-tm
+   web site (www.gutenberg.org), you must, at no additional cost, fee or expense
+   to the user, provide a copy, a means of exporting a copy, or a means of
+   obtaining a copy upon request, of the work in its original "Plain Vanilla
+   ASCII" or other form. Any alternate format must include the full Project
+   Gutenberg-tm License as specified in paragraph 1.E.1.
 
-1.F.
+   1.E.7. Do not charge a fee for access to, viewing, displaying, performing,
+   copying or distributing any Project Gutenberg-tm works unless you comply with
+   paragraph 1.E.8 or 1.E.9.
 
-1.F.1. Project Gutenberg volunteers and employees expend considerable effort to
-identify, do copyright research on, transcribe and proofread works not
-protected by U.S. copyright law in creating the Project Gutenberg-tm
-collection. Despite these efforts, Project Gutenberg-tm electronic works, and
-the medium on which they may be stored, may contain "Defects," such as, but not
-limited to, incomplete, inaccurate or corrupt data, transcription errors, a
-copyright or other intellectual property infringement, a defective or damaged
-disk or other medium, a computer virus, or computer codes that damage or cannot
-be read by your equipment.
+   1.E.8. You may charge a reasonable fee for copies of or providing access to or
+   distributing Project Gutenberg-tm electronic works provided that
 
-1.F.2. LIMITED WARRANTY, DISCLAIMER OF DAMAGES - Except for the "Right of
-Replacement or Refund" described in paragraph 1.F.3, the Project Gutenberg
-Literary Archive Foundation, the owner of the Project Gutenberg-tm trademark,
-and any other party distributing a Project Gutenberg-tm electronic work under
-this agreement, disclaim all liability to you for damages, costs and expenses,
-including legal fees. YOU AGREE THAT YOU HAVE NO REMEDIES FOR NEGLIGENCE,
-STRICT LIABILITY, BREACH OF WARRANTY OR BREACH OF CONTRACT EXCEPT THOSE
-PROVIDED IN PARAGRAPH 1.F.3. YOU AGREE THAT THE FOUNDATION, THE TRADEMARK
-OWNER, AND ANY DISTRIBUTOR UNDER THIS AGREEMENT WILL NOT BE LIABLE TO YOU FOR
-ACTUAL, DIRECT, INDIRECT, CONSEQUENTIAL, PUNITIVE OR INCIDENTAL DAMAGES EVEN IF
-YOU GIVE NOTICE OF THE POSSIBILITY OF SUCH DAMAGE.
+   You pay a royalty fee of 20% of the gross profits you derive from the use of
+   Project Gutenberg-tm works calculated using the method you already use to
+   calculate your applicable taxes. The fee is owed to the owner of the Project
+   Gutenberg-tm trademark, but he has agreed to donate royalties under this
+   paragraph to the Project Gutenberg Literary Archive Foundation. Royalty
+   payments must be paid within 60 days following each date on which you prepare
+   (or are legally required to prepare) your periodic tax returns. Royalty
+   payments should be clearly marked as such and sent to the Project Gutenberg
+   Literary Archive Foundation at the address specified in Section 4, "Information
+   about donations to the Project Gutenberg Literary Archive Foundation." You
+   provide a full refund of any money paid by a user who notifies you in writing
+   (or by e-mail) within 30 days of receipt that s/he does not agree to the terms
+   of the full Project Gutenberg-tm License. You must require such a user to
+   return or destroy all copies of the works possessed in a physical medium and
+   discontinue all use of and all access to other copies of Project Gutenberg-tm
+   works.  You provide, in accordance with paragraph 1.F.3, a full refund of any
+   money paid for a work or a replacement copy, if a defect in the electronic work
+   is discovered and reported to you within 90 days of receipt of the work.  You
+   comply with all other terms of this agreement for free distribution of Project
+   Gutenberg-tm works.  1.E.9. If you wish to charge a fee or distribute a Project
+   Gutenberg-tm electronic work or group of works on different terms than are set
+   forth in this agreement, you must obtain permission in writing from both the
+   Project Gutenberg Literary Archive Foundation and The Project Gutenberg
+   Trademark LLC, the owner of the Project Gutenberg-tm trademark. Contact the
+   Foundation as set forth in Section 3 below.
 
-1.F.3. LIMITED RIGHT OF REPLACEMENT OR REFUND - If you discover a defect in
-this electronic work within 90 days of receiving it, you can receive a refund
-of the money (if any) you paid for it by sending a written explanation to the
-person you received the work from. If you received the work on a physical
-medium, you must return the medium with your written explanation. The person or
-entity that provided you with the defective work may elect to provide a
-replacement copy in lieu of a refund. If you received the work electronically,
-the person or entity providing it to you may choose to give you a second
-opportunity to receive the work electronically in lieu of a refund. If the
-second copy is also defective, you may demand a refund in writing without
-further opportunities to fix the problem.
+   1.F.
 
-1.F.4. Except for the limited right of replacement or refund set forth in
-paragraph 1.F.3, this work is provided to you 'AS-IS', WITH NO OTHER WARRANTIES
-OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO WARRANTIES OF
-MERCHANTABILITY OR FITNESS FOR ANY PURPOSE.
+   1.F.1. Project Gutenberg volunteers and employees expend considerable effort to
+   identify, do copyright research on, transcribe and proofread works not
+   protected by U.S. copyright law in creating the Project Gutenberg-tm
+   collection. Despite these efforts, Project Gutenberg-tm electronic works, and
+   the medium on which they may be stored, may contain "Defects," such as, but not
+   limited to, incomplete, inaccurate or corrupt data, transcription errors, a
+   copyright or other intellectual property infringement, a defective or damaged
+   disk or other medium, a computer virus, or computer codes that damage or cannot
+   be read by your equipment.
 
-1.F.5. Some states do not allow disclaimers of certain implied warranties or
-the exclusion or limitation of certain types of damages. If any disclaimer or
-limitation set forth in this agreement violates the law of the state applicable
-to this agreement, the agreement shall be interpreted to make the maximum
-disclaimer or limitation permitted by the applicable state law. The invalidity
-or unenforceability of any provision of this agreement shall not void the
-remaining provisions.
+   1.F.2. LIMITED WARRANTY, DISCLAIMER OF DAMAGES - Except for the "Right of
+   Replacement or Refund" described in paragraph 1.F.3, the Project Gutenberg
+   Literary Archive Foundation, the owner of the Project Gutenberg-tm trademark,
+   and any other party distributing a Project Gutenberg-tm electronic work under
+   this agreement, disclaim all liability to you for damages, costs and expenses,
+   including legal fees. YOU AGREE THAT YOU HAVE NO REMEDIES FOR NEGLIGENCE,
+   STRICT LIABILITY, BREACH OF WARRANTY OR BREACH OF CONTRACT EXCEPT THOSE
+   PROVIDED IN PARAGRAPH 1.F.3. YOU AGREE THAT THE FOUNDATION, THE TRADEMARK
+   OWNER, AND ANY DISTRIBUTOR UNDER THIS AGREEMENT WILL NOT BE LIABLE TO YOU FOR
+   ACTUAL, DIRECT, INDIRECT, CONSEQUENTIAL, PUNITIVE OR INCIDENTAL DAMAGES EVEN IF
+   YOU GIVE NOTICE OF THE POSSIBILITY OF SUCH DAMAGE.
 
-1.F.6. INDEMNITY - You agree to indemnify and hold the Foundation, the
-trademark owner, any agent or employee of the Foundation, anyone providing
-copies of Project Gutenberg-tm electronic works in accordance with this
-agreement, and any volunteers associated with the production, promotion and
-distribution of Project Gutenberg-tm electronic works, harmless from all
-liability, costs and expenses, including legal fees, that arise directly or
-indirectly from any of the following which you do or cause to occur: (a)
-distribution of this or any Project Gutenberg-tm work, (b) alteration,
-modification, or additions or deletions to any Project Gutenberg-tm work, and
-(c) any Defect you cause.
+   1.F.3. LIMITED RIGHT OF REPLACEMENT OR REFUND - If you discover a defect in
+   this electronic work within 90 days of receiving it, you can receive a refund
+   of the money (if any) you paid for it by sending a written explanation to the
+   person you received the work from. If you received the work on a physical
+   medium, you must return the medium with your written explanation. The person or
+   entity that provided you with the defective work may elect to provide a
+   replacement copy in lieu of a refund. If you received the work electronically,
+   the person or entity providing it to you may choose to give you a second
+   opportunity to receive the work electronically in lieu of a refund. If the
+   second copy is also defective, you may demand a refund in writing without
+   further opportunities to fix the problem.
 
-Section 2.
-Information about the Mission of Project Gutenberg-tm Project
+   1.F.4. Except for the limited right of replacement or refund set forth in
+   paragraph 1.F.3, this work is provided to you 'AS-IS', WITH NO OTHER WARRANTIES
+   OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO WARRANTIES OF
+   MERCHANTABILITY OR FITNESS FOR ANY PURPOSE.
 
-Gutenberg-tm is synonymous with the free distribution of electronic works in
-formats readable by the widest variety of computers including obsolete, old,
-middle-aged and new computers. It exists because of the efforts of hundreds of
-volunteers and donations from people in all walks of life.
+   1.F.5. Some states do not allow disclaimers of certain implied warranties or
+   the exclusion or limitation of certain types of damages. If any disclaimer or
+   limitation set forth in this agreement violates the law of the state applicable
+   to this agreement, the agreement shall be interpreted to make the maximum
+   disclaimer or limitation permitted by the applicable state law. The invalidity
+   or unenforceability of any provision of this agreement shall not void the
+   remaining provisions.
 
-Volunteers and financial support to provide volunteers with the assistance they
-need are critical to reaching Project Gutenberg-tm's goals and ensuring that
-the Project Gutenberg-tm collection will remain freely available for
-generations to come. In 2001, the Project Gutenberg Literary Archive Foundation
-was created to provide a secure and permanent future for Project Gutenberg-tm
-and future generations. To learn more about the Project Gutenberg Literary
-Archive Foundation and how your efforts and donations can help, see Sections 3
-and 4 and the Foundation information page at www.gutenberg.org
+   1.F.6. INDEMNITY - You agree to indemnify and hold the Foundation, the
+   trademark owner, any agent or employee of the Foundation, anyone providing
+   copies of Project Gutenberg-tm electronic works in accordance with this
+   agreement, and any volunteers associated with the production, promotion and
+   distribution of Project Gutenberg-tm electronic works, harmless from all
+   liability, costs and expenses, including legal fees, that arise directly or
+   indirectly from any of the following which you do or cause to occur: (a)
+   distribution of this or any Project Gutenberg-tm work, (b) alteration,
+   modification, or additions or deletions to any Project Gutenberg-tm work, and
+   (c) any Defect you cause.
 
-Section 3.
-Information about the Project Gutenberg Literary Archive Foundation
+   Section 2.
+   Information about the Mission of Project Gutenberg-tm Project
 
-The Project Gutenberg Literary Archive Foundation is a non profit 501(c)(3)
-educational corporation organized under the laws of the state of Mississippi
-and granted tax exempt status by the Internal Revenue Service. The Foundation's
-EIN or federal tax identification number is 64-6221541. Contributions to the
-Project Gutenberg Literary Archive Foundation are tax deductible to the full
-extent permitted by U.S. federal laws and your state's laws.
+   Gutenberg-tm is synonymous with the free distribution of electronic works in
+   formats readable by the widest variety of computers including obsolete, old,
+   middle-aged and new computers. It exists because of the efforts of hundreds of
+   volunteers and donations from people in all walks of life.
 
-The Foundation's principal office is located at 4557 Melan Dr. S. Fairbanks,
-AK, 99712., but its volunteers and employees are scattered throughout numerous
-locations. Its business office is located at 809 North 1500 West, Salt Lake
-City, UT 84116, (801) 596-1887. Email contact links and up to date contact
-information can be found at the Foundation's web site and official page at
-www.gutenberg.org/contact
+   Volunteers and financial support to provide volunteers with the assistance they
+   need are critical to reaching Project Gutenberg-tm's goals and ensuring that
+   the Project Gutenberg-tm collection will remain freely available for
+   generations to come. In 2001, the Project Gutenberg Literary Archive Foundation
+   was created to provide a secure and permanent future for Project Gutenberg-tm
+   and future generations. To learn more about the Project Gutenberg Literary
+   Archive Foundation and how your efforts and donations can help, see Sections 3
+   and 4 and the Foundation information page at www.gutenberg.org
 
-For additional contact information:
-    Dr. Gregory B. Newby Chief Executive and Director
-    gbnewby@pglaf.org
+   Section 3.
+   Information about the Project Gutenberg Literary Archive Foundation
 
-Section 4.
-Information about Donations to the Project Gutenberg Literary Archive
+   The Project Gutenberg Literary Archive Foundation is a non profit 501(c)(3)
+   educational corporation organized under the laws of the state of Mississippi
+   and granted tax exempt status by the Internal Revenue Service. The Foundation's
+   EIN or federal tax identification number is 64-6221541. Contributions to the
+   Project Gutenberg Literary Archive Foundation are tax deductible to the full
+   extent permitted by U.S. federal laws and your state's laws.
 
-Foundation Project Gutenberg-tm depends upon and cannot survive without
-wide spread public support and donations to carry out its mission of
-increasing the number of public domain and licensed works that can be
-freely distributed in machine readable form accessible by the widest array
-of equipment including outdated equipment. Many small donations ($1 to
-$5,000) are particularly important to maintaining tax exempt status with
-the IRS.
+   The Foundation's principal office is located at 4557 Melan Dr. S. Fairbanks,
+   AK, 99712., but its volunteers and employees are scattered throughout numerous
+   locations. Its business office is located at 809 North 1500 West, Salt Lake
+   City, UT 84116, (801) 596-1887. Email contact links and up to date contact
+   information can be found at the Foundation's web site and official page at
+   www.gutenberg.org/contact
 
-The Foundation is committed to complying with the laws regulating charities and
-charitable donations in all 50 states of the United States. Compliance
-requirements are not uniform and it takes a considerable effort, much paperwork
-and many fees to meet and keep up with these requirements. We do not solicit
-donations in locations where we have not received written confirmation of
-compliance. To SEND DONATIONS or determine the status of compliance for any
-particular state visit www.gutenberg.org/donate
+   For additional contact information:
+       Dr. Gregory B. Newby Chief Executive and Director
+       gbnewby@pglaf.org
 
-While we cannot and do not solicit contributions from states where we have not
-met the solicitation requirements, we know of no prohibition against accepting
-unsolicited donations from donors in such states who approach us with offers to
-donate.
+   Section 4.
+   Information about Donations to the Project Gutenberg Literary Archive
 
-International donations are gratefully accepted, but we cannot make any
-statements concerning tax treatment of donations received from outside the
-United States. U.S. laws alone swamp our small staff.
+   Foundation Project Gutenberg-tm depends upon and cannot survive without
+   wide spread public support and donations to carry out its mission of
+   increasing the number of public domain and licensed works that can be
+   freely distributed in machine readable form accessible by the widest array
+   of equipment including outdated equipment. Many small donations ($1 to
+   $5,000) are particularly important to maintaining tax exempt status with
+   the IRS.
 
-Please check the Project Gutenberg Web pages for current donation methods and
-addresses. Donations are accepted in a number of other ways including checks,
-online payments and credit card donations. To donate, please visit:
-www.gutenberg.org/donate
+   The Foundation is committed to complying with the laws regulating charities and
+   charitable donations in all 50 states of the United States. Compliance
+   requirements are not uniform and it takes a considerable effort, much paperwork
+   and many fees to meet and keep up with these requirements. We do not solicit
+   donations in locations where we have not received written confirmation of
+   compliance. To SEND DONATIONS or determine the status of compliance for any
+   particular state visit www.gutenberg.org/donate
 
-Section 5.
-General Information About Project Gutenberg-tm electronic works.
+   While we cannot and do not solicit contributions from states where we have not
+   met the solicitation requirements, we know of no prohibition against accepting
+   unsolicited donations from donors in such states who approach us with offers to
+   donate.
 
-Professor Michael S. Hart was the originator of the Project Gutenberg-tm
-concept of a library of electronic works that could be freely shared with
-anyone. For forty years, he produced and distributed Project Gutenberg-tm
-eBooks with only a loose network of volunteer support.
+   International donations are gratefully accepted, but we cannot make any
+   statements concerning tax treatment of donations received from outside the
+   United States. U.S. laws alone swamp our small staff.
 
-Project Gutenberg-tm eBooks are often created from several printed editions,
-all of which are confirmed as not protected by copyright in the U.S. unless a
-copyright notice is included. Thus, we do not necessarily keep eBooks in
-compliance with any particular paper edition.
+   Please check the Project Gutenberg Web pages for current donation methods and
+   addresses. Donations are accepted in a number of other ways including checks,
+   online payments and credit card donations. To donate, please visit:
+   www.gutenberg.org/donate
 
-Most people start at our Web site which has the main PG search facility:
-www.gutenberg.org
+   Section 5.
+   General Information About Project Gutenberg-tm electronic works.
 
-This Web site includes information about Project Gutenberg-tm, including how to
-make donations to the Project Gutenberg Literary Archive Foundation, how to
-help produce our new eBooks, and how to subscribe to our email newsletter to
-hear about new eBooks.
+   Professor Michael S. Hart was the originator of the Project Gutenberg-tm
+   concept of a library of electronic works that could be freely shared with
+   anyone. For forty years, he produced and distributed Project Gutenberg-tm
+   eBooks with only a loose network of volunteer support.
 
+   Project Gutenberg-tm eBooks are often created from several printed editions,
+   all of which are confirmed as not protected by copyright in the U.S. unless a
+   copyright notice is included. Thus, we do not necessarily keep eBooks in
+   compliance with any particular paper edition.
+
+   Most people start at our Web site which has the main PG search facility:
+   www.gutenberg.org
+
+   This Web site includes information about Project Gutenberg-tm, including how to
+   make donations to the Project Gutenberg Literary Archive Foundation, how to
+   help produce our new eBooks, and how to subscribe to our email newsletter to
+   hear about new eBooks.
+---
diff --git a/hyracks-fullstack/NOTICE b/hyracks-fullstack/NOTICE
index 723b9bd..4888468 100644
--- a/hyracks-fullstack/NOTICE
+++ b/hyracks-fullstack/NOTICE
@@ -1,5 +1,5 @@
 Apache AsterixDB Hyracks and Algebricks
-Copyright 2015 The Apache Software Foundation
+Copyright 2015-2017 The Apache Software Foundation
 
 This product includes software developed at
 The Apache Software Foundation (http://www.apache.org/).
diff --git a/hyracks-fullstack/algebricks/algebricks-compiler/pom.xml b/hyracks-fullstack/algebricks/algebricks-compiler/pom.xml
index 3b23f75..951fe0f 100644
--- a/hyracks-fullstack/algebricks/algebricks-compiler/pom.xml
+++ b/hyracks-fullstack/algebricks/algebricks-compiler/pom.xml
@@ -65,7 +65,6 @@
     <dependency>
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-lang3</artifactId>
-      <version>3.5</version>
     </dependency>
   </dependencies>
 </project>
diff --git a/hyracks-fullstack/algebricks/algebricks-core/pom.xml b/hyracks-fullstack/algebricks/algebricks-core/pom.xml
index 5829ac5..d3c9172 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/pom.xml
+++ b/hyracks-fullstack/algebricks/algebricks-core/pom.xml
@@ -84,7 +84,6 @@
     <dependency>
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-lang3</artifactId>
-      <version>3.5</version>
     </dependency>
     <dependency>
       <groupId>com.e-movimento.tinytools</groupId>
diff --git a/hyracks-fullstack/algebricks/algebricks-examples/piglet-example/pom.xml b/hyracks-fullstack/algebricks/algebricks-examples/piglet-example/pom.xml
index c3179da..3bb2b76 100644
--- a/hyracks-fullstack/algebricks/algebricks-examples/piglet-example/pom.xml
+++ b/hyracks-fullstack/algebricks/algebricks-examples/piglet-example/pom.xml
@@ -165,7 +165,6 @@
     <dependency>
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-lang3</artifactId>
-      <version>3.5</version>
     </dependency>
   </dependencies>
 </project>
diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/pom.xml b/hyracks-fullstack/algebricks/algebricks-rewriter/pom.xml
index 3f5e5f4..15b326e 100644
--- a/hyracks-fullstack/algebricks/algebricks-rewriter/pom.xml
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/pom.xml
@@ -60,7 +60,6 @@
     <dependency>
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-lang3</artifactId>
-      <version>3.5</version>
     </dependency>
   </dependencies>
 </project>
diff --git a/hyracks-fullstack/hyracks-fullstack-license/pom.xml b/hyracks-fullstack/hyracks-fullstack-license/pom.xml
new file mode 100644
index 0000000..a25c0d6
--- /dev/null
+++ b/hyracks-fullstack/hyracks-fullstack-license/pom.xml
@@ -0,0 +1,119 @@
+<!--
+ ! 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.
+ !-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>hyracks-fullstack-license</artifactId>
+  <name>hyracks-fullstack-license</name>
+  <parent>
+    <groupId>org.apache.hyracks</groupId>
+    <artifactId>apache-asterixdb-hyracks</artifactId>
+    <version>0.2.18-SNAPSHOT</version>
+  </parent>
+
+  <licenses>
+    <license>
+      <name>Apache License, Version 2.0</name>
+      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+      <distribution>repo</distribution>
+      <comments>A business-friendly OSS license</comments>
+    </license>
+  </licenses>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.hyracks</groupId>
+        <artifactId>license-automation-plugin</artifactId>
+        <version>${project.version}</version>
+        <executions>
+          <execution>
+            <phase>generate-resources</phase>
+            <goals>
+              <goal>generate</goal>
+            </goals>
+          </execution>
+        </executions>
+        <configuration>
+          <templateRootDir>${basedir}</templateRootDir>
+          <outputDir>${basedir}/..</outputDir>
+          <location>ignored</location>
+          <generatedFiles>
+            <generatedFile>
+              <template>src/main/licenses/templates/hyracks-source-license.ftl</template>
+              <outputFile>LICENSE</outputFile>
+            </generatedFile>
+            <generatedFile>
+              <template>src/main/licenses/templates/asterix-notice.ftl</template>
+              <outputFile>NOTICE</outputFile>
+            </generatedFile>
+          </generatedFiles>
+          <excludedScopes>
+            <excludedScope>test</excludedScope>
+          </excludedScopes>
+          <licenseDirectory>${basedir}/src/main/licenses/content</licenseDirectory>
+          <licenses>
+            <license>
+              <displayName>The Apache Software License, Version 2.0</displayName>
+              <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+              <aliasUrls>
+                <aliasUrl>http://www.apache.org/licenses/LICENSE-2.0</aliasUrl>
+                <aliasUrl>https://www.apache.org/licenses/LICENSE-2.0.txt</aliasUrl>
+                <aliasUrl>http://www.apache.org/licenses/LICENSE-2.0.html</aliasUrl>
+              </aliasUrls>
+              <metric>1</metric>
+            </license>
+          </licenses>
+          <templateProperties>
+            <hyracksControlCcLocation/>
+            <hyracksControlCcResourcesPrefix>hyracks/hyracks-control/hyracks-control-cc/src/main/resources/</hyracksControlCcResourcesPrefix>
+            <packageName>Hyracks and Algebricks</packageName>
+          </templateProperties>
+        </configuration>
+      </plugin>
+    </plugins>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.eclipse.m2e</groupId>
+          <artifactId>lifecycle-mapping</artifactId>
+          <version>1.0.0</version>
+          <configuration>
+            <lifecycleMappingMetadata>
+              <pluginExecutions>
+                <pluginExecution>
+                  <pluginExecutionFilter>
+                    <groupId>org.apache.asterix</groupId>
+                    <artifactId>license-automation-plugin</artifactId>
+                    <versionRange>${project.version}</versionRange>
+                    <goals>
+                      <goal>generate</goal>
+                    </goals>
+                  </pluginExecutionFilter>
+                  <action>
+                    <ignore />
+                  </action>
+                </pluginExecution>
+              </pluginExecutions>
+            </lifecycleMappingMetadata>
+          </configuration>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+</project>
diff --git a/hyracks-fullstack/hyracks-fullstack-license/src/main/licenses/content/www.apache.org_licenses_LICENSE-2.0.txt b/hyracks-fullstack/hyracks-fullstack-license/src/main/licenses/content/www.apache.org_licenses_LICENSE-2.0.txt
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/hyracks-fullstack/hyracks-fullstack-license/src/main/licenses/content/www.apache.org_licenses_LICENSE-2.0.txt
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed 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.
diff --git a/asterixdb/src/main/licenses/templates/asterix-notice.ftl b/hyracks-fullstack/hyracks-fullstack-license/src/main/licenses/templates/asterix-notice.ftl
similarity index 90%
rename from asterixdb/src/main/licenses/templates/asterix-notice.ftl
rename to hyracks-fullstack/hyracks-fullstack-license/src/main/licenses/templates/asterix-notice.ftl
index add0a35..61f732e 100644
--- a/asterixdb/src/main/licenses/templates/asterix-notice.ftl
+++ b/hyracks-fullstack/hyracks-fullstack-license/src/main/licenses/templates/asterix-notice.ftl
@@ -16,15 +16,20 @@
  ! specific language governing permissions and limitations
  ! under the License.
 -->
-Apache AsterixDB ${packageName}
+<#if packageName?has_content>
+Apache AsterixDB ${packageName!}
+<#else>
+Apache AsterixDB
+</#if>
 Copyright 2015-2017 The Apache Software Foundation
 
 This product includes software developed at
 The Apache Software Foundation (http://www.apache.org/).
+<#list noticeMap>
 
 AsterixDB utilizes many libraries, which come with the following applicable NOTICE(s):
 
-<#list noticeMap as e>
+<#items as e>
    <#assign noticeText = e.getKey()/>
    <#assign projects = e.getValue()/>
    <#list projects as p>
@@ -37,4 +42,5 @@
 ${noticeText}
 </@indent>
 
+</#items>
 </#list>
diff --git a/asterixdb/src/main/licenses/templates/asterix-notice.ftl b/hyracks-fullstack/hyracks-fullstack-license/src/main/licenses/templates/hyracks-source-license.ftl
similarity index 60%
copy from asterixdb/src/main/licenses/templates/asterix-notice.ftl
copy to hyracks-fullstack/hyracks-fullstack-license/src/main/licenses/templates/hyracks-source-license.ftl
index add0a35..b542891 100644
--- a/asterixdb/src/main/licenses/templates/asterix-notice.ftl
+++ b/hyracks-fullstack/hyracks-fullstack-license/src/main/licenses/templates/hyracks-source-license.ftl
@@ -16,25 +16,18 @@
  ! specific language governing permissions and limitations
  ! under the License.
 -->
-Apache AsterixDB ${packageName}
-Copyright 2015-2017 The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
-
-AsterixDB utilizes many libraries, which come with the following applicable NOTICE(s):
-
-<#list noticeMap as e>
-   <#assign noticeText = e.getKey()/>
-   <#assign projects = e.getValue()/>
-   <#list projects as p>
-       <#list p.locations as loc>
-- ${loc}${p.artifactId}-${p.version}.jar
-       </#list>
-   </#list>
-
-<@indent spaces=6>
-${noticeText}
-</@indent>
-
+<@indent spaces=3>
+<#list licenses as license>
+  <#if license.url == "http://www.apache.org/licenses/LICENSE-2.0.txt">
+${license.content}
+    <#break>
+  </#if>
 </#list>
+</@indent>
+===
+   AsterixDB Hyracks includes source code with separate copyright notices
+   and license terms. Your use of this source code is subject to the terms
+   and condition of the following licenses.
+===
+<#include "source_licenses.ftl">
+<#include "source_only_licenses.ftl">
diff --git a/hyracks-fullstack/src/main/licenses/templates/source_licenses.ftl b/hyracks-fullstack/hyracks-fullstack-license/src/main/licenses/templates/source_licenses.ftl
similarity index 72%
rename from hyracks-fullstack/src/main/licenses/templates/source_licenses.ftl
rename to hyracks-fullstack/hyracks-fullstack-license/src/main/licenses/templates/source_licenses.ftl
index 6fd73bd..24a47c6 100644
--- a/hyracks-fullstack/src/main/licenses/templates/source_licenses.ftl
+++ b/hyracks-fullstack/hyracks-fullstack-license/src/main/licenses/templates/source_licenses.ftl
@@ -1,8 +1,50 @@
-   Portions of the Hyracks admin console in:
-       repo/hyracks-control-cc-${project.version}.jar, within ${assembly}
+<#--
+ ! 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="Hyracks admin console" location="${hyracksControlCcLocation!}"
+                filePrefix="${hyracksControlCcResourcesPrefix!}"
+                licenseName="the following license">
+   Portions of the ${component}
+<#if location?has_content>
+       in: ${location}
+</#if>
        located at:
-         static/javascript/flot/
+<#if files?is_sequence>
+<#list files as file>
+<#if file?counter < files?size>
+         ${filePrefix}${file},
+<#else>
+       and
+         ${filePrefix}${file}
+</#if>
+</#list>
+<#else>
+         ${filePrefix}${files}
+</#if>
+
+   are available under ${licenseName}:
 ---
+<@indent spaces=3 unpad=true wrap=true>
+<#nested>
+</@indent>
+---
+</#macro>
+<@license files="static/javascript/flot/" licenseName="The MIT License">
    Copyright (c) 2007-2014 IOLA and Ole Laursen
 
    Permission is hereby granted, free of charge, to any person
@@ -25,12 +67,8 @@
    WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
    OTHER DEALINGS IN THE SOFTWARE.
----
-   Portions of the Hyracks admin console in:
-       repo/hyracks-control-cc-${project.version}.jar, within ${assembly}
-       located at:
-         static/javascript/jsplumb/
----
+</@license>
+<@license files="static/javascript/jsplumb/" licenseName="The MIT License">
    Copyright (c) 2010 - 2014 jsPlumb, http://jsplumbtoolkit.com/
 
    Permission is hereby granted, free of charge, to any person obtaining
@@ -51,14 +89,8 @@
    LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
----
-   Portions of the Hyracks admin console in:
-       repo/hyracks-control-cc-${project.version}.jar, within ${assembly}
-       located at:
-         static/javascript/jquery
-       and
-         static/stylesheet/jquery-ui
----
+</@license>
+<@license files=["static/javascript/jquery", "static/javascript/jquery-ui"] licenseName="The MIT License">
    Copyright jQuery Foundation and other contributors, https://jquery.org/
 
    This software consists of voluntary contributions made by many
@@ -95,23 +127,15 @@
    externally maintained libraries used by this software which have their
    own licenses; we recommend you read them, as their terms may differ from
    the terms above.
----
-   Portions of the Hyracks admin console in:
-       repo/hyracks-control-cc-${project.version}.jar, within ${assembly}
-       located at:
-         static/javascript/jquery/plugins/jquery.getParams.js
----
+</@license>
+<@license files="static/javascript/jquery/plugins/jquery.getParams.js" licenseName="The MIT License">
    Copyright (c) 2006 Mathias Bank (http://www.mathias-bank.de)
    Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
    and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 
    Thanks to Hinnerk Ruemenapf - http://hinnerk.ruemenapf.de/ for bug reporting and fixing.
----
-   Portions of the Hyracks admin console in:
-       repo/hyracks-control-cc-${project.version}.jar, within ${assembly}
-       located at:
-         static/javascript/jquery/plugins/jquery.timer.js
----
+</@license>
+<@license files="static/javascript/jquery/plugins/jquery.timer.js" licenseName="The MIT License">
    jquery.timer.js
 
    Copyright (c) 2011 Jason Chavannes <jason.chavannes@gmail.com>
@@ -137,16 +161,9 @@
    ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
    CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    SOFTWARE.
----
-   Portions of the Hyracks admin console in:
-       repo/hyracks-control-cc-${project.version}.jar, within ${assembly}
-       located at:
-         static/stylesheet/json.human.css
----
-   json.human.css
-
-   MIT License:
-
+</@license>
+<@license files=["static/stylesheet/json.human.css", "static/javascript/adminconsole/json.human.js"]
+          licenseName="The MIT License">
    Copyright (c) 2015, Mariano Guerra
 
    Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -166,32 +183,4 @@
    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    THE SOFTWARE.
----
-   Portions of the Hyracks admin console in:
-       repo/hyracks-control-cc-${project.version}.jar, within ${assembly}
-       located at:
-         static/javascript/adminconsole/json.human.js
----
-   json.human.js
-
-   MIT License:
-
-   Copyright (c) 2015, Mariano Guerra
-
-   Permission is hereby granted, free of charge, to any person obtaining a copy
-   of this software and associated documentation files (the "Software"), to deal
-   in the Software without restriction, including without limitation the rights
-   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-   copies of the Software, and to permit persons to whom the Software is
-   furnished to do so, subject to the following conditions:
-
-   The above copyright notice and this permission notice shall be included in
-   all copies or substantial portions of the Software.
-
-   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-   THE SOFTWARE.
+</@license>
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
new file mode 100644
index 0000000..c4bc541
--- /dev/null
+++ b/hyracks-fullstack/hyracks-fullstack-license/src/main/licenses/templates/source_only_licenses.ftl
@@ -0,0 +1,392 @@
+<#--
+ ! 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:
+<#if files?is_sequence>
+<#list files as file>
+<#if file?counter < files?size>
+         ${file},
+<#else>
+       and
+         ${file}
+</#if>
+</#list>
+<#else>
+         ${files}
+</#if>
+
+   are available under ${licenseName}:
+---
+<@indent spaces=3 unpad=true wrap=true>
+<#nested>
+</@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">
+
+THE FULL PROJECT GUTENBERG LICENSE
+
+PLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK
+
+To protect the Project Gutenberg-tm mission of promoting the free distribution
+of electronic works, by using or distributing this work (or any other work
+associated in any way with the phrase "Project Gutenberg"), you agree to comply
+with all the terms of the Full Project Gutenberg-tm License available with this
+file or online at www.gutenberg.org/license.
+
+Section 1.
+General Terms of Use and Redistributing Project Gutenberg-tm electronic works
+
+1.A. By reading or using any part of this Project Gutenberg-tm
+electronic work, you indicate that you have read, understand, agree to and
+accept all the terms of this license and intellectual property
+(trademark/copyright) agreement. If you do not agree to abide by all the terms
+of this agreement, you must cease using and return or destroy all copies of
+Project Gutenberg-tm electronic works in your possession. If you paid a fee for
+obtaining a copy of or access to a Project Gutenberg-tm electronic work and you
+do not agree to be bound by the terms of this agreement, you may obtain a
+refund from the person or entity to whom you paid the fee as set forth in
+paragraph 1.E.8.
+
+1.B. "Project Gutenberg" is a registered trademark. It may only be used on or
+associated in any way with an electronic work by people who agree to be bound
+by the terms of this agreement. There are a few things that you can do with
+most Project Gutenberg-tm electronic works even without complying with the full
+terms of this agreement. See paragraph 1.C below. There are a lot of things you
+can do with Project Gutenberg-tm electronic works if you follow the terms of
+this agreement and help preserve free future access to Project Gutenberg-tm
+electronic works. See paragraph 1.E below.
+
+1.C. The Project Gutenberg Literary Archive Foundation ("the Foundation" or
+PGLAF), owns a compilation copyright in the collection of Project Gutenberg-tm
+electronic works. Nearly all the individual works in the collection are in the
+public domain in the United States. If an individual work is unprotected by
+copyright law in the United States and you are located in the United States, we
+do not claim a right to prevent you from copying, distributing, performing,
+displaying or creating derivative works based on the work as long as all
+references to Project Gutenberg are removed. Of course, we hope that you will
+support the Project Gutenberg-tm mission of promoting free access to electronic
+works by freely sharing Project Gutenberg-tm works in compliance with the terms
+of this agreement for keeping the Project Gutenberg-tm name associated with the
+work. You can easily comply with the terms of this agreement by keeping this
+work in the same format with its attached full Project Gutenberg-tm License
+when you share it without charge with others.
+
+[*] This particular work is one of the few individual works protected by
+copyright law in the United States and most of the remainder of the world,
+included in the Project Gutenberg collection with the permission of the
+copyright holder. Information on the copyright owner for this particular work
+and the terms of use imposed by the copyright holder on this work are set forth
+at the beginning of this work.
+
+1.D. The copyright laws of the place where you are located also govern what you
+can do with this work. Copyright laws in most countries are in a constant state
+of change. If you are outside the United States, check the laws of your country
+in addition to the terms of this agreement before downloading, copying,
+displaying, performing, distributing or creating derivative works based on this
+work or any other Project Gutenberg-tm work. The Foundation makes no
+representations concerning the copyright status of any work in any country
+outside the United States.
+
+1.E. Unless you have removed all references to Project Gutenberg:
+
+1.E.1. The following sentence, with active links to, or other immediate access
+to, the full Project Gutenberg-tm License must appear prominently whenever any
+copy of a Project Gutenberg-tm work (any work on which the phrase "Project
+Gutenberg" appears, or with which the phrase "Project Gutenberg" is associated)
+is accessed, displayed, performed, viewed, copied or distributed:
+
+This eBook is for the use of anyone anywhere in the United States and most
+other parts of the world at no cost and with almost no restrictions whatsoever.
+You may copy it, give it away or re-use it under the terms of the Project
+Gutenberg License included with this eBook or online at www.gutenberg.org. If
+you are not located in the United States, you'll have to check the laws of the
+country where you are located before using this ebook.
+
+1.E.2. If an individual Project Gutenberg-tm electronic work is derived from
+texts not protected by U.S. copyright law (does not contain a notice indicating
+that it is posted with permission of the copyright holder), the work can be
+copied and distributed to anyone in the United States without paying any fees
+or charges. If you are redistributing or providing access to a work with the
+phrase "Project Gutenberg" associated with or appearing on the work, you must
+comply either with the requirements of paragraphs 1.E.1 through 1.E.7 or obtain
+permission for the use of the work and the Project Gutenberg-tm trademark as
+set forth in paragraphs 1.E.8 or 1.E.9.
+
+1.E.3. If an individual Project Gutenberg-tm electronic work is posted with the
+permission of the copyright holder, your use and distribution must comply with
+both paragraphs 1.E.1 through 1.E.7 and any additional terms imposed by the
+copyright holder. Additional terms will be linked to the Project Gutenberg-tm
+License for all works posted with the permission of the copyright holder found
+at the beginning of this work.
+
+1.E.4. Do not unlink or detach or remove the full Project Gutenberg-tm License
+terms from this work, or any files containing a part of this work or any other
+work associated with Project Gutenberg-tm.
+
+1.E.5. Do not copy, display, perform, distribute or redistribute this
+electronic work, or any part of this electronic work, without prominently
+displaying the sentence set forth in paragraph 1.E.1 with active links or
+immediate access to the full terms of the Project Gutenberg-tm License.
+
+1.E.6. You may convert to and distribute this work in any binary, compressed,
+marked up, nonproprietary or proprietary form, including any word processing or
+hypertext form. However, if you provide access to or distribute copies of a
+Project Gutenberg-tm work in a format other than "Plain Vanilla ASCII" or other
+format used in the official version posted on the official Project Gutenberg-tm
+web site (www.gutenberg.org), you must, at no additional cost, fee or expense
+to the user, provide a copy, a means of exporting a copy, or a means of
+obtaining a copy upon request, of the work in its original "Plain Vanilla
+ASCII" or other form. Any alternate format must include the full Project
+Gutenberg-tm License as specified in paragraph 1.E.1.
+
+1.E.7. Do not charge a fee for access to, viewing, displaying, performing,
+copying or distributing any Project Gutenberg-tm works unless you comply with
+paragraph 1.E.8 or 1.E.9.
+
+1.E.8. You may charge a reasonable fee for copies of or providing access to or
+distributing Project Gutenberg-tm electronic works provided that
+
+You pay a royalty fee of 20% of the gross profits you derive from the use of
+Project Gutenberg-tm works calculated using the method you already use to
+calculate your applicable taxes. The fee is owed to the owner of the Project
+Gutenberg-tm trademark, but he has agreed to donate royalties under this
+paragraph to the Project Gutenberg Literary Archive Foundation. Royalty
+payments must be paid within 60 days following each date on which you prepare
+(or are legally required to prepare) your periodic tax returns. Royalty
+payments should be clearly marked as such and sent to the Project Gutenberg
+Literary Archive Foundation at the address specified in Section 4, "Information
+about donations to the Project Gutenberg Literary Archive Foundation." You
+provide a full refund of any money paid by a user who notifies you in writing
+(or by e-mail) within 30 days of receipt that s/he does not agree to the terms
+of the full Project Gutenberg-tm License. You must require such a user to
+return or destroy all copies of the works possessed in a physical medium and
+discontinue all use of and all access to other copies of Project Gutenberg-tm
+works.  You provide, in accordance with paragraph 1.F.3, a full refund of any
+money paid for a work or a replacement copy, if a defect in the electronic work
+is discovered and reported to you within 90 days of receipt of the work.  You
+comply with all other terms of this agreement for free distribution of Project
+Gutenberg-tm works.  1.E.9. If you wish to charge a fee or distribute a Project
+Gutenberg-tm electronic work or group of works on different terms than are set
+forth in this agreement, you must obtain permission in writing from both the
+Project Gutenberg Literary Archive Foundation and The Project Gutenberg
+Trademark LLC, the owner of the Project Gutenberg-tm trademark. Contact the
+Foundation as set forth in Section 3 below.
+
+1.F.
+
+1.F.1. Project Gutenberg volunteers and employees expend considerable effort to
+identify, do copyright research on, transcribe and proofread works not
+protected by U.S. copyright law in creating the Project Gutenberg-tm
+collection. Despite these efforts, Project Gutenberg-tm electronic works, and
+the medium on which they may be stored, may contain "Defects," such as, but not
+limited to, incomplete, inaccurate or corrupt data, transcription errors, a
+copyright or other intellectual property infringement, a defective or damaged
+disk or other medium, a computer virus, or computer codes that damage or cannot
+be read by your equipment.
+
+1.F.2. LIMITED WARRANTY, DISCLAIMER OF DAMAGES - Except for the "Right of
+Replacement or Refund" described in paragraph 1.F.3, the Project Gutenberg
+Literary Archive Foundation, the owner of the Project Gutenberg-tm trademark,
+and any other party distributing a Project Gutenberg-tm electronic work under
+this agreement, disclaim all liability to you for damages, costs and expenses,
+including legal fees. YOU AGREE THAT YOU HAVE NO REMEDIES FOR NEGLIGENCE,
+STRICT LIABILITY, BREACH OF WARRANTY OR BREACH OF CONTRACT EXCEPT THOSE
+PROVIDED IN PARAGRAPH 1.F.3. YOU AGREE THAT THE FOUNDATION, THE TRADEMARK
+OWNER, AND ANY DISTRIBUTOR UNDER THIS AGREEMENT WILL NOT BE LIABLE TO YOU FOR
+ACTUAL, DIRECT, INDIRECT, CONSEQUENTIAL, PUNITIVE OR INCIDENTAL DAMAGES EVEN IF
+YOU GIVE NOTICE OF THE POSSIBILITY OF SUCH DAMAGE.
+
+1.F.3. LIMITED RIGHT OF REPLACEMENT OR REFUND - If you discover a defect in
+this electronic work within 90 days of receiving it, you can receive a refund
+of the money (if any) you paid for it by sending a written explanation to the
+person you received the work from. If you received the work on a physical
+medium, you must return the medium with your written explanation. The person or
+entity that provided you with the defective work may elect to provide a
+replacement copy in lieu of a refund. If you received the work electronically,
+the person or entity providing it to you may choose to give you a second
+opportunity to receive the work electronically in lieu of a refund. If the
+second copy is also defective, you may demand a refund in writing without
+further opportunities to fix the problem.
+
+1.F.4. Except for the limited right of replacement or refund set forth in
+paragraph 1.F.3, this work is provided to you 'AS-IS', WITH NO OTHER WARRANTIES
+OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO WARRANTIES OF
+MERCHANTABILITY OR FITNESS FOR ANY PURPOSE.
+
+1.F.5. Some states do not allow disclaimers of certain implied warranties or
+the exclusion or limitation of certain types of damages. If any disclaimer or
+limitation set forth in this agreement violates the law of the state applicable
+to this agreement, the agreement shall be interpreted to make the maximum
+disclaimer or limitation permitted by the applicable state law. The invalidity
+or unenforceability of any provision of this agreement shall not void the
+remaining provisions.
+
+1.F.6. INDEMNITY - You agree to indemnify and hold the Foundation, the
+trademark owner, any agent or employee of the Foundation, anyone providing
+copies of Project Gutenberg-tm electronic works in accordance with this
+agreement, and any volunteers associated with the production, promotion and
+distribution of Project Gutenberg-tm electronic works, harmless from all
+liability, costs and expenses, including legal fees, that arise directly or
+indirectly from any of the following which you do or cause to occur: (a)
+distribution of this or any Project Gutenberg-tm work, (b) alteration,
+modification, or additions or deletions to any Project Gutenberg-tm work, and
+(c) any Defect you cause.
+
+Section 2.
+Information about the Mission of Project Gutenberg-tm Project
+
+Gutenberg-tm is synonymous with the free distribution of electronic works in
+formats readable by the widest variety of computers including obsolete, old,
+middle-aged and new computers. It exists because of the efforts of hundreds of
+volunteers and donations from people in all walks of life.
+
+Volunteers and financial support to provide volunteers with the assistance they
+need are critical to reaching Project Gutenberg-tm's goals and ensuring that
+the Project Gutenberg-tm collection will remain freely available for
+generations to come. In 2001, the Project Gutenberg Literary Archive Foundation
+was created to provide a secure and permanent future for Project Gutenberg-tm
+and future generations. To learn more about the Project Gutenberg Literary
+Archive Foundation and how your efforts and donations can help, see Sections 3
+and 4 and the Foundation information page at www.gutenberg.org
+
+Section 3.
+Information about the Project Gutenberg Literary Archive Foundation
+
+The Project Gutenberg Literary Archive Foundation is a non profit 501(c)(3)
+educational corporation organized under the laws of the state of Mississippi
+and granted tax exempt status by the Internal Revenue Service. The Foundation's
+EIN or federal tax identification number is 64-6221541. Contributions to the
+Project Gutenberg Literary Archive Foundation are tax deductible to the full
+extent permitted by U.S. federal laws and your state's laws.
+
+The Foundation's principal office is located at 4557 Melan Dr. S. Fairbanks,
+AK, 99712., but its volunteers and employees are scattered throughout numerous
+locations. Its business office is located at 809 North 1500 West, Salt Lake
+City, UT 84116, (801) 596-1887. Email contact links and up to date contact
+information can be found at the Foundation's web site and official page at
+www.gutenberg.org/contact
+
+For additional contact information:
+    Dr. Gregory B. Newby Chief Executive and Director
+    gbnewby@pglaf.org
+
+Section 4.
+Information about Donations to the Project Gutenberg Literary Archive
+
+Foundation Project Gutenberg-tm depends upon and cannot survive without
+wide spread public support and donations to carry out its mission of
+increasing the number of public domain and licensed works that can be
+freely distributed in machine readable form accessible by the widest array
+of equipment including outdated equipment. Many small donations ($1 to
+$5,000) are particularly important to maintaining tax exempt status with
+the IRS.
+
+The Foundation is committed to complying with the laws regulating charities and
+charitable donations in all 50 states of the United States. Compliance
+requirements are not uniform and it takes a considerable effort, much paperwork
+and many fees to meet and keep up with these requirements. We do not solicit
+donations in locations where we have not received written confirmation of
+compliance. To SEND DONATIONS or determine the status of compliance for any
+particular state visit www.gutenberg.org/donate
+
+While we cannot and do not solicit contributions from states where we have not
+met the solicitation requirements, we know of no prohibition against accepting
+unsolicited donations from donors in such states who approach us with offers to
+donate.
+
+International donations are gratefully accepted, but we cannot make any
+statements concerning tax treatment of donations received from outside the
+United States. U.S. laws alone swamp our small staff.
+
+Please check the Project Gutenberg Web pages for current donation methods and
+addresses. Donations are accepted in a number of other ways including checks,
+online payments and credit card donations. To donate, please visit:
+www.gutenberg.org/donate
+
+Section 5.
+General Information About Project Gutenberg-tm electronic works.
+
+Professor Michael S. Hart was the originator of the Project Gutenberg-tm
+concept of a library of electronic works that could be freely shared with
+anyone. For forty years, he produced and distributed Project Gutenberg-tm
+eBooks with only a loose network of volunteer support.
+
+Project Gutenberg-tm eBooks are often created from several printed editions,
+all of which are confirmed as not protected by copyright in the U.S. unless a
+copyright notice is included. Thus, we do not necessarily keep eBooks in
+compliance with any particular paper edition.
+
+Most people start at our Web site which has the main PG search facility:
+www.gutenberg.org
+
+This Web site includes information about Project Gutenberg-tm, including how to
+make donations to the Project Gutenberg Literary Archive Foundation, how to
+help produce our new eBooks, and how to subscribe to our email newsletter to
+hear about new eBooks.
+</@license>
diff --git a/hyracks-fullstack/hyracks/hyracks-api/pom.xml b/hyracks-fullstack/hyracks/hyracks-api/pom.xml
index 2c00862..f61a4b0 100644
--- a/hyracks-fullstack/hyracks/hyracks-api/pom.xml
+++ b/hyracks-fullstack/hyracks/hyracks-api/pom.xml
@@ -72,7 +72,6 @@
     <dependency>
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-lang3</artifactId>
-      <version>3.5</version>
     </dependency>
     <dependency>
       <groupId>org.apache.httpcomponents</groupId>
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 63c6047..eafc8d2 100644
--- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/pom.xml
+++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/pom.xml
@@ -98,7 +98,6 @@
     <dependency>
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-lang3</artifactId>
-      <version>3.5</version>
     </dependency>
     <dependency>
       <groupId>com.google.guava</groupId>
diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/pom.xml b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/pom.xml
index 73ed8b2..72fbc53 100644
--- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/pom.xml
+++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/pom.xml
@@ -70,7 +70,6 @@
     <dependency>
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-lang3</artifactId>
-      <version>3.5</version>
     </dependency>
   </dependencies>
 </project>
diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-nc-service/pom.xml b/hyracks-fullstack/hyracks/hyracks-control/hyracks-nc-service/pom.xml
index 2f966a3..0e2fd27 100644
--- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-nc-service/pom.xml
+++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-nc-service/pom.xml
@@ -58,12 +58,11 @@
     <dependency>
       <groupId>org.apache.hyracks</groupId>
       <artifactId>hyracks-control-common</artifactId>
-      <version>0.2.18-SNAPSHOT</version>
+      <version>${project.version}</version>
     </dependency>
     <dependency>
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-lang3</artifactId>
-      <version>3.5</version>
     </dependency>
     <dependency>
       <groupId>com.e-movimento.tinytools</groupId>
diff --git a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/pom.xml b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/pom.xml
index 8e62184..6d4ed61 100644
--- a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/pom.xml
+++ b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/pom.xml
@@ -34,7 +34,6 @@
     <dependency>
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-lang3</artifactId>
-      <version>3.5</version>
     </dependency>
     <dependency>
       <groupId>org.apache.hyracks</groupId>
diff --git a/hyracks-fullstack/hyracks/hyracks-dataflow-std/pom.xml b/hyracks-fullstack/hyracks/hyracks-dataflow-std/pom.xml
index 0158068..a4ac6db 100644
--- a/hyracks-fullstack/hyracks/hyracks-dataflow-std/pom.xml
+++ b/hyracks-fullstack/hyracks/hyracks-dataflow-std/pom.xml
@@ -55,21 +55,16 @@
     <dependency>
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-lang3</artifactId>
-      <version>3.5</version>
     </dependency>
     <dependency>
       <groupId>org.apache.hyracks</groupId>
       <artifactId>hyracks-api</artifactId>
       <version>${project.version}</version>
-      <type>jar</type>
-      <scope>compile</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.hyracks</groupId>
       <artifactId>hyracks-dataflow-common</artifactId>
       <version>${project.version}</version>
-      <type>jar</type>
-      <scope>compile</scope>
     </dependency>
     <dependency>
       <groupId>commons-io</groupId>
diff --git a/asterixdb/asterix-maven-plugins/license-automation-plugin/pom.xml b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/pom.xml
similarity index 94%
rename from asterixdb/asterix-maven-plugins/license-automation-plugin/pom.xml
rename to hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/pom.xml
index 6abbf71..5190bbb 100644
--- a/asterixdb/asterix-maven-plugins/license-automation-plugin/pom.xml
+++ b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/pom.xml
@@ -19,9 +19,9 @@
  !-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
   <parent>
-    <groupId>org.apache.asterix</groupId>
-    <artifactId>asterix-maven-plugins</artifactId>
-    <version>0.8.9-SNAPSHOT</version>
+    <groupId>org.apache.hyracks</groupId>
+    <artifactId>hyracks-maven-plugins</artifactId>
+    <version>0.2.18-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <packaging>maven-plugin</packaging>
@@ -46,7 +46,6 @@
     <dependency>
       <groupId>com.fasterxml.jackson.core</groupId>
       <artifactId>jackson-databind</artifactId>
-      <version>2.8.4</version>
     </dependency>
     <dependency>
       <groupId>org.freemarker</groupId>
diff --git a/asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/DependencySet.java b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/DependencySet.java
similarity index 96%
rename from asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/DependencySet.java
rename to hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/DependencySet.java
index 64e5f7d..8e91be4 100644
--- a/asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/DependencySet.java
+++ b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/DependencySet.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.license;
+package org.apache.hyracks.maven.license;
 
 import java.util.List;
 import java.util.regex.Pattern;
diff --git a/asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/DownloadLicensesMojo.java b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/DownloadLicensesMojo.java
similarity index 98%
rename from asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/DownloadLicensesMojo.java
rename to hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/DownloadLicensesMojo.java
index cb9f172..8219dfc 100644
--- a/asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/DownloadLicensesMojo.java
+++ b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/DownloadLicensesMojo.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.license;
+package org.apache.hyracks.maven.license;
 
 import java.io.File;
 import java.io.FileWriter;
diff --git a/asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/ExtraLicenseFile.java b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/ExtraLicenseFile.java
similarity index 96%
rename from asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/ExtraLicenseFile.java
rename to hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/ExtraLicenseFile.java
index 6a0c163..025260b 100644
--- a/asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/ExtraLicenseFile.java
+++ b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/ExtraLicenseFile.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.license;
+package org.apache.hyracks.maven.license;
 
 import java.io.File;
 
diff --git a/asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/GenerateFileMojo.java b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/GenerateFileMojo.java
similarity index 95%
rename from asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/GenerateFileMojo.java
rename to hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/GenerateFileMojo.java
index 191aa6b..3dfbb1a 100644
--- a/asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/GenerateFileMojo.java
+++ b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/GenerateFileMojo.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.license;
+package org.apache.hyracks.maven.license;
 
 import java.io.File;
 import java.io.FileWriter;
@@ -49,10 +49,10 @@
 import freemarker.template.Configuration;
 import freemarker.template.Template;
 import freemarker.template.TemplateException;
-import org.apache.asterix.license.freemarker.IndentDirective;
-import org.apache.asterix.license.freemarker.LoadFileDirective;
-import org.apache.asterix.license.project.LicensedProjects;
-import org.apache.asterix.license.project.Project;
+import org.apache.hyracks.maven.license.freemarker.IndentDirective;
+import org.apache.hyracks.maven.license.freemarker.LoadFileDirective;
+import org.apache.hyracks.maven.license.project.LicensedProjects;
+import org.apache.hyracks.maven.license.project.Project;
 import org.apache.commons.io.IOUtils;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
@@ -119,8 +119,12 @@
     }
 
     private void resolveLicenseContent() throws IOException {
+        Set<LicenseSpec> licenseSpecs = new HashSet<>();
         for (LicensedProjects licensedProjects : licenseMap.values()) {
-            final LicenseSpec license = licensedProjects.getLicense();
+            licenseSpecs.add(licensedProjects.getLicense());
+        }
+        licenseSpecs.addAll(urlToLicenseMap.values());
+        for (LicenseSpec license : licenseSpecs) {
             if (license.getContent() == null) {
                 getLog().debug("Resolving content for " + license.getUrl() + " (" + license.getContentFile() + ")");
                 File cFile = new File(license.getContentFile());
@@ -183,6 +187,7 @@
         props.put("project", project);
         props.put("noticeMap", noticeMap.entrySet());
         props.put("licenseMap", licenseMap.entrySet());
+        props.put("licenses", urlToLicenseMap.values());
         props.putAll(templateProperties);
         return props;
     }
diff --git a/asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/GeneratedFile.java b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/GeneratedFile.java
similarity index 96%
rename from asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/GeneratedFile.java
rename to hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/GeneratedFile.java
index b89dc88..1b36109 100644
--- a/asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/GeneratedFile.java
+++ b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/GeneratedFile.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.license;
+package org.apache.hyracks.maven.license;
 
 public class GeneratedFile {
 
diff --git a/asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/LicenseMojo.java b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/LicenseMojo.java
similarity index 98%
rename from asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/LicenseMojo.java
rename to hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/LicenseMojo.java
index eab4f10..ea5c878 100644
--- a/asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/LicenseMojo.java
+++ b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/LicenseMojo.java
@@ -16,9 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.license;
+package org.apache.hyracks.maven.license;
 
 import java.io.File;
+import java.lang.*;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.ArrayList;
@@ -32,8 +33,8 @@
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
-import org.apache.asterix.license.project.LicensedProjects;
-import org.apache.asterix.license.project.Project;
+import org.apache.hyracks.maven.license.project.LicensedProjects;
+import org.apache.hyracks.maven.license.project.Project;
 import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.maven.artifact.Artifact;
diff --git a/asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/LicenseSpec.java b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/LicenseSpec.java
similarity index 98%
rename from asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/LicenseSpec.java
rename to hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/LicenseSpec.java
index 885a5bc..f2ff5dd 100644
--- a/asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/LicenseSpec.java
+++ b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/LicenseSpec.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.license;
+package org.apache.hyracks.maven.license;
 
 import java.net.URI;
 import java.net.URISyntaxException;
diff --git a/asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/LicenseUtil.java b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/LicenseUtil.java
similarity index 82%
rename from asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/LicenseUtil.java
rename to hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/LicenseUtil.java
index 8d09a81..8983160 100644
--- a/asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/LicenseUtil.java
+++ b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/LicenseUtil.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.license;
+package org.apache.hyracks.maven.license;
 
 import java.io.BufferedReader;
 import java.io.File;
@@ -54,6 +54,16 @@
         }
     }
 
+    public static String process(String input, boolean unpad, boolean wrap) throws IOException {
+        try (BufferedReader reader = new BufferedReader(new StringReader(input))) {
+            reader.mark(input.length() + 1);
+            StringWriter sw = new StringWriter();
+            trim(sw, reader, unpad, wrap);
+            sw.append('\n');
+            return sw.toString();
+        }
+    }
+
     public static void readAndTrim(Writer out, File file) throws IOException {
         try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
             reader.mark((int) file.length() * 2);
@@ -62,9 +72,17 @@
     }
 
     private static void trim(Writer out, BufferedReader reader) throws IOException {
-        Pair<Integer, Integer> result = analyze(reader);
-        reader.reset();
-        doTrim(out, reader, result.getLeft(), result.getRight() > wrapThreshold ? wrapLength : Integer.MAX_VALUE);
+        trim(out, reader, true, true);
+    }
+
+    private static void trim(Writer out, BufferedReader reader, boolean unpad, boolean wrap) throws IOException {
+        Pair<Integer, Integer> result = null;
+        if (unpad || wrap) {
+            result = analyze(reader);
+            reader.reset();
+        }
+        doTrim(out, reader, unpad ? result.getLeft() : 0,
+                wrap && (result.getRight() > wrapThreshold) ? wrapLength : Integer.MAX_VALUE);
     }
 
     private static void doTrim(Writer out, BufferedReader reader, int extraPadding, int wrapLength) throws IOException {
diff --git a/asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/Override.java b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/Override.java
similarity index 96%
rename from asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/Override.java
rename to hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/Override.java
index 4d1bbbe..c99a047 100644
--- a/asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/Override.java
+++ b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/Override.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.license;
+package org.apache.hyracks.maven.license;
 
 public class Override  {
 
diff --git a/asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/SupplementalModelHelper.java b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/SupplementalModelHelper.java
similarity index 98%
rename from asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/SupplementalModelHelper.java
rename to hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/SupplementalModelHelper.java
index 9059d07..5ba525a 100644
--- a/asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/SupplementalModelHelper.java
+++ b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/SupplementalModelHelper.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.license;
+package org.apache.hyracks.maven.license;
 
 import java.io.File;
 import java.io.FileReader;
diff --git a/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/freemarker/IndentDirective.java b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/freemarker/IndentDirective.java
new file mode 100644
index 0000000..77b8afd
--- /dev/null
+++ b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/freemarker/IndentDirective.java
@@ -0,0 +1,151 @@
+/*
+ * 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.
+ */
+package org.apache.hyracks.maven.license.freemarker;
+
+import java.io.IOException;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.util.Arrays;
+import java.util.Map;
+
+import freemarker.core.Environment;
+import freemarker.template.TemplateBooleanModel;
+import freemarker.template.TemplateDirectiveBody;
+import freemarker.template.TemplateDirectiveModel;
+import freemarker.template.TemplateException;
+import freemarker.template.TemplateModel;
+import freemarker.template.TemplateModelException;
+import freemarker.template.TemplateNumberModel;
+import org.apache.commons.io.IOUtils;
+import org.apache.hyracks.maven.license.LicenseUtil;
+
+public class IndentDirective implements TemplateDirectiveModel {
+
+    private static final String PARAM_NAME_SPACES = "spaces";
+    private static final String PARAM_NAME_UNPAD = "unpad";
+    private static final String PARAM_NAME_WRAP = "wrap";
+
+    @Override
+    public void execute(Environment env, Map params, TemplateModel [] loopVars, TemplateDirectiveBody body)
+            throws TemplateException, IOException {
+
+        int numSpaces = -1;
+        boolean unpad = false;
+        boolean wrap = false;
+
+        for (Object o : params.entrySet()) {
+            Map.Entry ent = (Map.Entry) o;
+
+            String paramName = (String) ent.getKey();
+            TemplateModel paramValue = (TemplateModel) ent.getValue();
+
+            switch (paramName) {
+                case PARAM_NAME_SPACES:
+                    numSpaces = getIntParam(paramName, paramValue);
+                    break;
+                case PARAM_NAME_UNPAD:
+                    unpad = getBooleanParam(paramName, paramValue);
+                    break;
+                case PARAM_NAME_WRAP:
+                    wrap = getBooleanParam(paramName, paramValue);
+                    break;
+                default:
+                    throw new TemplateModelException("Unsupported parameter: " + paramName);
+            }
+        }
+        if (numSpaces < 0) {
+            throw new TemplateModelException("The required \"" + PARAM_NAME_SPACES + "\" parameter is missing.");
+        }
+
+        if (body == null) {
+            throw new TemplateModelException("Indent requires a body");
+        } else {
+            // Executes the nested body (same as <#nested> in FTL). In this
+            // case we don't provide a special writer as the parameter:
+            StringWriter sw = new StringWriter();
+            body.render(sw);
+            String fixedup = LicenseUtil.process(sw.toString(), unpad, wrap);
+            IOUtils.copy(new StringReader(fixedup), new IndentingWriter(env.getOut(), numSpaces));
+        }
+    }
+
+    private int getIntParam(String paramName, TemplateModel paramValue) throws TemplateModelException {
+        int spacesParam;
+        if (!(paramValue instanceof TemplateNumberModel)) {
+            throw paramException(paramName, "must be a number");
+        }
+        spacesParam = ((TemplateNumberModel) paramValue).getAsNumber().intValue();
+        if (spacesParam < 0) {
+            throw paramException(paramName, "can't be negative");
+        }
+        return spacesParam;
+    }
+
+    private boolean getBooleanParam(String paramName, TemplateModel paramValue) throws TemplateModelException {
+        if (!(paramValue instanceof TemplateBooleanModel)) {
+            throw paramException(paramName, "must be a boolean");
+        }
+        return ((TemplateBooleanModel) paramValue).getAsBoolean();
+    }
+
+    private TemplateModelException paramException(String paramName, String message) throws TemplateModelException {
+        return new TemplateModelException(
+                "The '" + paramName + "' parameter " + message);
+    }
+
+    private static class IndentingWriter extends Writer {
+        private final Writer out;
+        private final char[] padChars;
+        boolean needsToPad;
+
+        public IndentingWriter(Writer out, int numSpaces) {
+            this.out = out;
+            padChars = new char[numSpaces];
+            Arrays.fill(padChars, ' ');
+            needsToPad = true;
+        }
+
+        @Override
+        public void write(char[] cbuf, int off, int len) throws IOException {
+            for (int i = off; i < len; i++) {
+                if (cbuf[i] == '\n') {
+                    out.write(cbuf[i]);
+                    needsToPad = true;
+                } else {
+                    if (needsToPad) {
+                        out.write(padChars);
+                        needsToPad = false;
+                    }
+                    out.write(cbuf[i]);
+                }
+            }
+        }
+
+        @Override
+        public void flush() throws IOException {
+            out.flush();
+        }
+
+        @Override
+        public void close() throws IOException {
+            out.flush();
+        }
+    }
+}
diff --git a/asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/freemarker/LoadFileDirective.java b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/freemarker/LoadFileDirective.java
similarity index 97%
rename from asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/freemarker/LoadFileDirective.java
rename to hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/freemarker/LoadFileDirective.java
index 603c6bc..61d84f1 100644
--- a/asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/freemarker/LoadFileDirective.java
+++ b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/freemarker/LoadFileDirective.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.license.freemarker;
+package org.apache.hyracks.maven.license.freemarker;
 
 import java.io.File;
 import java.io.FileReader;
@@ -34,7 +34,7 @@
 import freemarker.template.TemplateModel;
 import freemarker.template.TemplateModelException;
 import freemarker.template.TemplateScalarModel;
-import org.apache.asterix.license.LicenseUtil;
+import org.apache.hyracks.maven.license.LicenseUtil;
 import org.apache.commons.io.IOUtils;
 
 public class LoadFileDirective implements TemplateDirectiveModel {
diff --git a/asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/project/LicensedProjects.java b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/project/LicensedProjects.java
similarity index 93%
rename from asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/project/LicensedProjects.java
rename to hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/project/LicensedProjects.java
index 5b1aa22..952b91a 100644
--- a/asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/project/LicensedProjects.java
+++ b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/project/LicensedProjects.java
@@ -16,13 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.license.project;
+package org.apache.hyracks.maven.license.project;
 
 import java.util.Set;
 import java.util.SortedSet;
 import java.util.TreeSet;
 
-import org.apache.asterix.license.LicenseSpec;
+import org.apache.hyracks.maven.license.LicenseSpec;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;
diff --git a/asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/project/Project.java b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/project/Project.java
similarity index 98%
rename from asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/project/Project.java
rename to hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/project/Project.java
index ce5417e..e5e57ad 100644
--- a/asterixdb/asterix-maven-plugins/license-automation-plugin/src/main/java/org/apache/asterix/license/project/Project.java
+++ b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/project/Project.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.license.project;
+package org.apache.hyracks.maven.license.project;
 
 import java.io.File;
 import java.util.Comparator;
diff --git a/hyracks-fullstack/hyracks/hyracks-maven-plugins/pom.xml b/hyracks-fullstack/hyracks/hyracks-maven-plugins/pom.xml
index 176f1d9..474618b 100644
--- a/hyracks-fullstack/hyracks/hyracks-maven-plugins/pom.xml
+++ b/hyracks-fullstack/hyracks/hyracks-maven-plugins/pom.xml
@@ -47,12 +47,11 @@
       <groupId>org.apache.maven</groupId>
       <artifactId>maven-plugin-api</artifactId>
       <version>3.3.9</version>
-      <type>jar</type>
-      <scope>compile</scope>
     </dependency>
   </dependencies>
 
   <modules>
     <module>hyracks-virtualcluster-maven-plugin</module>
+    <module>license-automation-plugin</module>
   </modules>
 </project>
diff --git a/hyracks-fullstack/hyracks/hyracks-server/pom.xml b/hyracks-fullstack/hyracks/hyracks-server/pom.xml
index 3667951..4f34e52 100644
--- a/hyracks-fullstack/hyracks/hyracks-server/pom.xml
+++ b/hyracks-fullstack/hyracks/hyracks-server/pom.xml
@@ -171,7 +171,6 @@
     <dependency>
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-lang3</artifactId>
-      <version>3.5</version>
     </dependency>
     <dependency>
       <groupId>org.apache.hyracks</groupId>
diff --git a/hyracks-fullstack/pom.xml b/hyracks-fullstack/pom.xml
index efad75b..4473802 100644
--- a/hyracks-fullstack/pom.xml
+++ b/hyracks-fullstack/pom.xml
@@ -137,6 +137,11 @@
         <artifactId>guava</artifactId>
         <version>18.0</version>
       </dependency>
+      <dependency>
+        <groupId>org.apache.commons</groupId>
+        <artifactId>commons-lang3</artifactId>
+        <version>3.5</version>
+      </dependency>
     </dependencies>
   </dependencyManagement>
 
@@ -471,7 +476,6 @@
                 </goals>
                 <!-- combine.self should be override to replace the configuration in the parent POM -->
                 <configuration combine.self="override">
-                  <runOnlyAtExecutionRoot>true</runOnlyAtExecutionRoot>
                   <descriptors>
                     <descriptor>src/main/assembly/source.xml</descriptor>
                   </descriptors>
@@ -547,5 +551,6 @@
   <modules>
     <module>hyracks</module>
     <module>algebricks</module>
+    <module>hyracks-fullstack-license</module>
   </modules>
 </project>
