diff --git a/LICENSE b/LICENSE
index e06d208..a4c17ca 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,7 @@
-Apache License
+
+Apache Usergrid itself is licensed under the terms of the Apache License:
+
+                                 Apache License
                            Version 2.0, January 2004
                         http://www.apache.org/licenses/
 
@@ -178,7 +181,7 @@
    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 "{}"
+      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
@@ -186,7 +189,7 @@
       same "printed page" as the copyright notice for easier
       identification within third-party archives.
 
-   Copyright {yyyy} {name of copyright owner}
+   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.
@@ -200,3 +203,124 @@
    See the License for the specific language governing permissions and
    limitations under the License.
 
+------------------------------------------------------------------------------
+
+USERGRID SUBCOMPONENTS
+
+The Usergrid software includes a number of subcomponents with separate
+copyrights and license terms. Your use of the source code for these
+subcomponents is subject to the terms and conditions of the following
+licenses.
+
+IOS SDK
+-------
+For the SBJson component:
+
+ Copyright (c) Stig Brautaset. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+   list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+
+ * Neither the name of the author nor the names of its contributors may be used
+   to endorse or promote products derived from this software without specific
+   prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+For the SSKeychain component:
+-----------------------------
+
+ Copyright (c) Sam Soffes, http://soff.es
+
+ 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.
+
+Other components:
+-----------------
+
+This product bundles angular.js
+Copyright(c) Google, Inc. Released under the MIT license.
+
+This product bundles angular-scenario.js, part of jQuery JavaScript Library
+which Includes Sizzle.js Copyright (c) jQuery Foundation, Inc. and others.
+Released under the MIT license.
+
+This product bundles Bootstrap Copyright (c) Twitter, Inc
+Licensed under the MIT license.
+
+The product bundles Intro.js (MIT licensed)
+Copyright (c) usabli.ca - A weekend project by Afshin Mehrabani (@afshinmeh)
+
+This product bundles jQuery
+Licensed under MIT license.
+
+This product bundles jQuery-UI
+Licensed under MIT license.
+
+This product bundles jQuery Sparklines (New BSD License)
+Copyright (c) Splunk Inc.
+
+This product bundles Mocha.
+All rights reserved. Licensed under MIT.
+Copyright (c) TJ Holowaychuk <tj@vision-media.ca>
+
+This product bundles NewtonSoft.Json under MIT license
+
+This product bundles NPM MD5 (BSD-3 licensed)
+Copyright (c) Paul Vorbach and Copyright (C), Jeff Mott.
+
+This product bundles NSubsttute under BSD license
+
+This product bundles SBJson, which is available under a "3-clause BSD" license.
+For details, see sdks/ios/UGAPI/SBJson/ .
+
+This product bundles Sphinx under BSD license
+
+This product bundles SSKeychain, which is available under a "MIT/X11" license.
+For details, see sdks/ios/UGAPI/SSKeychain/.
+
+This product bundles SSToolkit.
+Copyright (c) Sam Soffes. All rights reserved.
+These files can be located within the /sdks/ios package.
+
+This product bundles Entypo, CC by SA license
+
+This product bundles date.min.js, MIT license
+
+This product bundles jquery.ui.timepicker.min.js, MIT license
+
+This product bundles blanket_mocha.min.js, MIT license
+
+This product bundles FontAwesome, SIL Open Font License
