diff --git a/.gitignore b/.gitignore
index 03d57dc..865d742 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,7 +14,6 @@
 
 # building
 target
-[Bb]uild/
 null
 tmp
 temp
@@ -79,7 +78,6 @@
 *.sdf
 ipch/
 obj/
-[Bb]in
 [Dd]ebug*/
 !debugger/
 modules/debugger/classes/
diff --git a/ApproveSDK.xml b/ApproveSDK.xml
index 1048fba..ef60232 100644
--- a/ApproveSDK.xml
+++ b/ApproveSDK.xml
@@ -52,12 +52,13 @@
     </condition>
 	<property name="package.suffix" value="tar.gz" />
 	
-	<property name="rat.report" value="${basedir}/rat-report.txt"/>
+    <property name="src.rat.report" value="${basedir}/rat-report-src.txt"/>
+    <property name="bin.rat.report" value="${basedir}/rat-report-bin.txt"/>
 	<property name="apache.rat.jar" value="apache-rat-0.8.jar" />
 	<property name="apache.rat.tasks.jar" value="apache-rat-tasks-0.8.jar" />
 	<property name="apache.rat.url" value="http://people.apache.org/~aharui/rat" />
 	   
-    <property file="${basedir}/approvefalcon.properties"/>
+    <property file="${basedir}/approvesdk.properties"/>
     
 	<property name="mac.text.display" value="cat" />
 	<property name="win.text.display" value="type" />
@@ -108,13 +109,24 @@
     <fail message="The release version is not set.  Specify -Drelease.version=&lt;release version (e.g. 3.1, 3.2, etc)&gt;"
     unless="release.version"/>
 
-
-    <condition property="package.url.path" value="http://apacheflexbuild.cloudapp.net:8080/job/flex-sdk_release-candidate/lastSuccessfulBuild/artifact/out">
-        <isset property="nightly" />
+    <condition property="package.url.path"
+        value="http://apacheflexbuild.cloudapp.net:8080/job/flex-sdk_release-candidate/lastSuccessfulBuild/artifact/out">
+        <not>
+            <isset property="rc" />
+        </not>
     </condition>
-    
+    <condition property="bin.package.url.path"
+        value="${package.url.path}">
+        <not>
+            <isset property="rc" />
+        </not>
+    </condition>
+
 	<property name="package.url.path" value="https://dist.apache.org/repos/dist/dev/flex/sdk/${release.version}/rc${rc}" />
-	<property name="package.url.name" value="apache-flex-sdk-${release.version}-src" />
+    <property name="src.package.url.path" value="${package.url.path}" />
+    <property name="bin.package.url.path" value="${package.url.path}/binaries" />
+    <property name="src.package.url.name" value="apache-flex-sdk-${release.version}-src" />
+    <property name="bin.package.url.name" value="apache-flex-sdk-${release.version}-bin" />
 	
     <condition property="zip.package">
         <equals arg1="zip" arg2="${package.suffix}" />
@@ -171,10 +183,10 @@
         <echo>Testing nightly build of release ${release.version}</echo>
     </target>
     
-    <target name="main" depends="install-rat,echo-mode,download,check-sigs,uncompress,rat-check,check-notices,build,approve" description="Perform required release approval steps">
+    <target name="main" depends="write-out-jars-list,install-rat,download,check-sigs,uncompress,rat-check,examine-jars,external-jar-folder-dump,check-notices,build,approve" description="Perform required release approval steps">
     </target>
     
-    <target name="main-no-download" depends="install-rat,check-sigs,uncompress,rat-check,check-notices,build,approve" description="Perform required release approval steps">
+    <target name="main-no-download" depends="write-out-jars-list,install-rat,check-sigs,uncompress,rat-check,examine-jars,external-jar-folder-dump,check-notices,build,approve" description="Perform required release approval steps">
     </target>
 	
     <target name="test" >
@@ -182,6 +194,16 @@
 		<replaceregexp file="${rat.report}.bin.txt" match="..AL.*" replace="" byline="true"/>
     </target>
 	
+    <target name="write-out-jars-list" >
+        <delete file="jars.txt" />
+        <!-- this is a comma-delimited, no spaces, no-line-breaks list used to decide which jars
+         to skip in the rat-check of the binaries and which jars to examine before approval -->
+        <property name="jars-list" value="ant/lib/flexTasks.jar,lib/asc.jar,lib/asdoc.jar,lib/batik-all-flex.jar,lib/compc.jar,lib/copylocale.jar,lib/digest.jar,lib/fcsh.jar,lib/fdb.jar,lib/flex-compiler-oem.jar,lib/flex-tool-api.jar,lib/fxgutils.jar,lib/mxmlc.jar,lib/mxmlc_da.jar,lib/mxmlc_de.jar,lib/mxmlc_es.jar,lib/mxmlc_fi.jar,lib/mxmlc_fr.jar,lib/mxmlc_it.jar,lib/mxmlc_ja.jar,lib/mxmlc_ko.jar,lib/mxmlc_nb.jar,lib/mxmlc_nl.jar,lib/mxmlc_pt.jar,lib/mxmlc_ru.jar,lib/mxmlc_sv.jar,lib/mxmlc_zh_CN.jar,lib/mxmlc_zh_TW.jar,lib/optimizer.jar,lib/swcdepends.jar,lib/swfdump.jar,lib/swfutils.jar,lib/velocity-dep-1.4-flex.jar"/>
+        <echo file="${basedir}/jars.txt" message="${jars-list}"/>
+        <echo file="${basedir}/jarexcludes.txt" message="${jars-list}"/>
+        <replaceregexp file="${basedir}/jarexcludes.txt" match="," flags="g" replace="${line.separator}" />
+    </target>
+    
 	<target name="display-text" >
 		<antcall target="display-text-mac" />
 		<antcall target="display-text-win" />
@@ -195,60 +217,89 @@
 	</target>
 	
     <target name="download" description="download the release package">
-        <get src="${package.url.path}/${package.url.name}.${package.suffix}"
-            dest="${basedir}/${package.url.name}.${package.suffix}" />
-        <get src="${package.url.path}/${package.url.name}.${package.suffix}.md5"
-            dest="${basedir}/${package.url.name}.${package.suffix}.md5" />
-        <antcall target="downloadasc" />
+        <get src="${src.package.url.path}/${src.package.url.name}.${package.suffix}"
+        dest="${basedir}/${src.package.url.name}.${package.suffix}" />
+        <get src="${src.package.url.path}/${src.package.url.name}.${package.suffix}.md5"
+        dest="${basedir}/${src.package.url.name}.${package.suffix}.md5" />
+        <get src="${bin.package.url.path}/${bin.package.url.name}.${package.suffix}"
+        dest="${basedir}/${bin.package.url.name}.${package.suffix}" />
+        <get src="${bin.package.url.path}/${bin.package.url.name}.${package.suffix}.md5"
+        dest="${basedir}/${bin.package.url.name}.${package.suffix}.md5" />
+        <antcall target="asc_get" />
     </target>
-    <target name="downloadasc" if="rc" >
-        <get src="${package.url.path}/${package.url.name}.${package.suffix}.asc"
-            dest="${basedir}/${package.url.name}.${package.suffix}.asc" />
+    
+    <target name="asc_get" if="rc" >
+        <get src="${src.package.url.path}/${src.package.url.name}.${package.suffix}.asc"
+        dest="${basedir}/${src.package.url.name}.${package.suffix}.asc" />
+        <get src="${bin.package.url.path}/${bin.package.url.name}.${package.suffix}.asc"
+        dest="${basedir}/${bin.package.url.name}.${package.suffix}.asc" />
     </target>
     
     <target name="check-sigs" description="check md5 and gpg sigs">
-		<replace file="${basedir}/${package.url.name}.${package.suffix}.md5"
-			token=" " />
-		<checksum file="${basedir}/${package.url.name}.${package.suffix}" algorithm="md5" verifyproperty="md5.ok" />
-        <condition property="MD5Invalid">
-			<not>
-				<equals arg1="${md5.ok}" arg2="true" />
-			</not>
+        <replace file="${basedir}/${src.package.url.name}.${package.suffix}.md5"
+        token=" " />
+        <checksum file="${basedir}/${src.package.url.name}.${package.suffix}" algorithm="md5" verifyproperty="src.md5.ok" />
+        <condition property="SourceMD5Invalid">
+            <not>
+                <equals arg1="${src.md5.ok}" arg2="true" />
+            </not>
         </condition>
-        <fail message="MD5 checksum did not match" if="MD5Invalid" />
-        <antcall target="checkasc" />
+        <fail message="Source Package MD5 checksum did not match" if="SourceMD5Invalid" />
+        <replace file="${basedir}/${bin.package.url.name}.${package.suffix}.md5"
+        token=" " />
+        <checksum file="${basedir}/${bin.package.url.name}.${package.suffix}" algorithm="md5" verifyproperty="bin.md5.ok" />
+        <condition property="BinaryMD5Invalid">
+            <not>
+                <equals arg1="${bin.md5.ok}" arg2="true" />
+            </not>
+        </condition>
+        <fail message="Binary Package MD5 checksum did not match" if="BinaryMD5Invalid" />
+        <echo>rc is ${rc}</echo>
+        <antcall target="gpg_check" />
     </target>
-    <target name="checkasc" if="rc" >
-		<exec executable="gpg" failonerror="true">
-			<arg value="--verify" />
-			<arg value="${basedir}/${package.url.name}.${package.suffix}.asc" />
-			<arg value="${basedir}/${package.url.name}.${package.suffix}" />
-		</exec>
+    
+    <target name="gpg_check" if="rc">
+        <exec executable="gpg" failonerror="true">
+            <arg value="--verify" />
+            <arg value="${basedir}/${src.package.url.name}.${package.suffix}.asc" />
+            <arg value="${basedir}/${src.package.url.name}.${package.suffix}" />
+        </exec>
+        <exec executable="gpg" failonerror="true">
+            <arg value="--verify" />
+            <arg value="${basedir}/${bin.package.url.name}.${package.suffix}.asc" />
+            <arg value="${basedir}/${bin.package.url.name}.${package.suffix}" />
+        </exec>
     </target>
+    
 
     <target name="uncompress" depends="pre-clean, untar-file, unzip-file" />
 
     <target name="pre-clean" description="remove old uncompressed package" >
-		<delete dir="${basedir}/${package.url.name}" failonerror="false" />
-	</target>
-	
+        <delete dir="${basedir}/${src.package.url.name}" failonerror="false" />
+        <delete dir="${basedir}/${bin.package.url.name}" failonerror="false" />
+    </target>
+
     <target name="untar-file" unless="zip.package" description="Untars zipFile">
-        <untar src="${basedir}/${package.url.name}.${package.suffix}"
-                dest="${basedir}" compression="gzip"/>
+        <untar src="${basedir}/${src.package.url.name}.${package.suffix}"
+        dest="${basedir}" compression="gzip"/>
+        <untar src="${basedir}/${bin.package.url.name}.${package.suffix}"
+        dest="${basedir}" compression="gzip"/>
     </target>
 
     <target name="unzip-file" if="zip.package" description="Unzips zipFile">
-        <unzip src="${basedir}/${package.url.name}.${package.suffix}"
-                dest="${basedir}/${package.url.name}"/>
+        <unzip src="${basedir}/${src.package.url.name}.${package.suffix}"
+        dest="${basedir}/${src.package.url.name}"/>
+        <unzip src="${basedir}/${bin.package.url.name}.${package.suffix}"
+        dest="${basedir}/${bin.package.url.name}"/>
     </target>
 
     <target name="rat-check" >
 
-        <echo message="Checking files at ${basedir}/${package.url.name}, report is ${rat.report}"/>
+        <echo message="Checking files at ${basedir}/${src.package.url.name}, report is ${src.rat.report}"/>
 
         <rat:report xmlns:rat="antlib:org.apache.rat.anttasks"
-            reportFile="${rat.report}">
-            <fileset dir="${basedir}/${package.url.name}">
+            reportFile="${src.rat.report}">
+            <fileset dir="${basedir}/${src.package.url.name}">
                 <!--          Start of binary files           -->
                 <!-- exclude Flash Professional file used for integration with Flash Professional -->
                 <exclude name="frameworks/projects/flash-integration/FLA/ContentHolder.fla"/>
@@ -268,10 +319,11 @@
                 <!-- exclude text files -->
                 <exclude name="CONTRIBUTING"/>
                 <exclude name="CONTRIBUTORS"/>
-                <exclude name="LICENSE.bin"/>
-                <exclude name="NOTICE.bin"/>
-                <exclude name="NOTICE.asc"/>
-                <exclude name="NOTICE.base"/>
+                <exclude name="licenseParts/LICENSE.bin"/>
+                <exclude name="licenseParts/NOTICE.bin"/>
+                <exclude name="licenseParts/NOTICE.asc"/>
+                <exclude name="licenseParts/NOTICE.base"/>
+                <exclude name="licenseParts/NOTICE.pb"/>
                 <exclude name="modules/thirdparty/batik/lib/**/LICENSE*.txt"/>
                 <exclude name="modules/thirdparty/batik/lib/**/README*.txt"/>
                 <exclude name="frameworks/projects/flatspark/src/flatspark/assets/fonts/**/OFL.txt"/>
@@ -289,90 +341,836 @@
             </fileset>
         </rat:report>
 		<antcall target="display-text" >
-            <param name="file" value="${rat.report}" />
+            <param name="file" value="${src.rat.report}" />
         </antcall>
         <input
 			message="Check that there are no unknown or unapproved licenses or archives. Is it ok?"
             validargs="y,n"
         defaultvalue="y"
-        addproperty="rat.license.ok"/>
+        addproperty="rat.src.license.ok"/>
 		<echo>filtering out AL files to make it easier to see binary files</echo>
-		<copy file="${rat.report}" tofile="${rat.report}.bin.txt" />
-		<replaceregexp file="${rat.report}.bin.txt" match="..AL.*" replace="" byline="true"/>
-		<antcall target="display-text" >
-            <param name="file" value="${rat.report}.bin.txt" />
+		<copy file="${src.rat.report}" tofile="${src.rat.report}.bin.txt" />
+        <replaceregexp file="${src.rat.report}.bin.txt" match="..AL.*" replace="__AL" byline="true"/>
+        <replaceregexp file="${src.rat.report}.bin.txt" flags="gs" match="__AL." replace="" byline="false"/>
+        <antcall target="display-text" >
+            <param name="file" value="${src.rat.report}.bin.txt" />
         </antcall>
         <input
-			message="Check that there are no unexpected binaries.  Is it ok?"
-            validargs="y,n"
+        message="Check that there are no unexpected binaries.  Is it ok?"
+        validargs="y,n"
         defaultvalue="n"
-        addproperty="rat.binaries.ok"/>
+        addproperty="rat.src.binaries.ok"/>
+        
+        <echo message="Checking files at ${basedir}/${bin.package.url.name}, report is ${bin.rat.report}"/>
+        
+        <antcall target="binary-rat" />
+        <antcall target="display-text" >
+            <param name="file" value="${bin.rat.report}" />
+        </antcall>
+        <input
+        message="Check that there are no unknown or unapproved licenses or archives. Is it ok?"
+        validargs="y,n"
+        defaultvalue="y"
+        addproperty="rat.bin.license.ok"/>
+        <echo>filtering out AL files to make it easier to see binary files</echo>
+        <copy file="${bin.rat.report}" tofile="${bin.rat.report}.bin.txt" />
+        <replaceregexp file="${bin.rat.report}.bin.txt" match="..AL.*" replace="__AL" byline="true"/>
+        <replaceregexp file="${bin.rat.report}.bin.txt" flags="gs" match="__AL." replace="" byline="false"/>
+        <antcall target="display-text" >
+            <param name="file" value="${bin.rat.report}.bin.txt" />
+        </antcall>
+        <input
+        message="Check that there are no unexpected binaries.  Is it ok?"
+        validargs="y,n"
+        defaultvalue="n"
+        addproperty="rat.bin.binaries.ok"/>
+    </target>
+
+    <target name="binary-rat" >
+        <echo>${jars-list}</echo>
+        <rat:report xmlns:rat="antlib:org.apache.rat.anttasks"
+            reportFile="${bin.rat.report}">
+            <fileset dir="${basedir}/${bin.package.url.name}">
+                <!--          Start of binary files           -->
+                <!-- exclude Flash Professional file used for integration with Flash Professional -->
+                <exclude name="frameworks/projects/flash-integration/FLA/ContentHolder.fla"/>
+                <!-- exclude font embedded in asdoc example -->
+                <exclude name="frameworks/projects/framework/asdoc/en_US/mx/effects/examples/assets/OpenSans-Regular.ttf"/>
+                <!-- exclude media (png, gif, jpg, mp3, flv) -->
+                <exclude name="**/*.png"/>
+                <exclude name="**/*.gif"/>
+                <exclude name="**/*.jpg"/>
+                <exclude name="**/*.mp3"/>
+                <exclude name="**/*.flv"/>
+                <!-- exclude batik icon -->
+                <exclude name="modules/thirdparty/batik/sources/*.icns"/>
+                <!--          End of binary files           -->
+                <!-- exclude batik manifests -->
+                <exclude name="modules/thirdparty/batik/sources/*.mf"/>
+                <!-- exclude text files -->
+                <exclude name="CONTRIBUTING"/>
+                <exclude name="CONTRIBUTORS"/>
+                <exclude name="licenseParts/LICENSE.bin"/>
+                <exclude name="licenseParts/NOTICE.bin"/>
+                <exclude name="licenseParts/NOTICE.asc"/>
+                <exclude name="licenseParts/NOTICE.base"/>
+                <exclude name="licenseParts/NOTICE.pb"/>
+                <exclude name="modules/thirdparty/batik/lib/**/LICENSE*.txt"/>
+                <exclude name="modules/thirdparty/batik/lib/**/README*.txt"/>
+                <exclude name="frameworks/projects/flatspark/src/flatspark/assets/fonts/**/OFL.txt"/>
+                <!-- exclude w3c sources -->
+                <exclude name="modules/thirdparty/batik/resources/org/apache/flex/forks/batik/dom/svg/resources/*.mod"/>
+                <exclude name="modules/thirdparty/batik/resources/org/apache/flex/forks/batik/dom/svg/resources/*.dtd"/>
+                <exclude name="modules/thirdparty/batik/sources/org/w3c/css/sac/LexicalUnit.java"/>
+                <exclude name="modules/thirdparty/batik/sources/org/w3c/flex/forks/css/sac/*.java"/>
+                <exclude name="modules/thirdparty/batik/sources/org/w3c/flex/forks/css/sac/helpers/ParserFactory.java"/>
+                <!-- exclude config files -->
+                <exclude name="modules/thirdparty/batik/svn-revision"/>
+                <exclude name="modules/thirdparty/xerces-patch/src/java/META-INF/services/javax.xml.parsers.SAXParserFactory"/>
+                <exclude name="modules/thirdparty/xerces-patch/src/java/META-INF/services/org.apache.xerces.xni.parser.XMLParserConfiguration"/>
+                <exclude name="modules/thirdparty/xerces-patch/src/java/org/apache/xerces/jaxp/javax.xml.parsers.SAXParserFactory"/>
+                <exclude name="frameworks/libs/advancedgrids.swc"/>
+                <exclude name="frameworks/libs/air/airframework.swc"/>
+                <exclude name="frameworks/libs/air/airspark.swc"/>
+                <exclude name="frameworks/libs/apache.swc"/>
+                <exclude name="frameworks/libs/authoringsupport.swc"/>
+                <exclude name="frameworks/libs/automation/automation.swc"/>
+                <exclude name="frameworks/libs/automation/automation_agent.swc"/>
+                <exclude name="frameworks/libs/automation/automation_air.swc"/>
+                <exclude name="frameworks/libs/automation/automation_airspark.swc"/>
+                <exclude name="frameworks/libs/automation/automation_dmv.swc"/>
+                <exclude name="frameworks/libs/automation/automation_flashflexkit.swc"/>
+                <exclude name="frameworks/libs/automation/automation_spark.swc"/>
+                <exclude name="frameworks/libs/automation/tool.swc"/>
+                <exclude name="frameworks/libs/automation/tool_air.swc"/>
+                <exclude name="frameworks/libs/charts.swc"/>
+                <exclude name="frameworks/libs/core.swc"/>
+                <exclude name="frameworks/libs/experimental.swc"/>
+                <exclude name="frameworks/libs/experimental_mobile.swc"/>
+                <exclude name="frameworks/libs/flash-integration.swc"/>
+                <exclude name="frameworks/libs/flatspark.swc"/>
+                <exclude name="frameworks/libs/framework.swc"/>
+                <exclude name="frameworks/libs/mobile/mobilecomponents.swc"/>
+                <exclude name="frameworks/libs/mx/mx.swc"/>
+                <exclude name="frameworks/libs/rpc.swc"/>
+                <exclude name="frameworks/libs/spark.swc"/>
+                <exclude name="frameworks/libs/spark_dmv.swc"/>
+                <exclude name="frameworks/libs/sparkskins.swc"/>
+                <exclude name="frameworks/libs/textLayout.swc"/>
+                <exclude name="frameworks/locale/da_DK/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/da_DK/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/da_DK/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/da_DK/apache_rb.swc"/>
+                <exclude name="frameworks/locale/da_DK/automation_agent_rb.swc"/>
+                <exclude name="frameworks/locale/da_DK/automation_rb.swc"/>
+                <exclude name="frameworks/locale/da_DK/charts_rb.swc"/>
+                <exclude name="frameworks/locale/da_DK/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/da_DK/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/da_DK/framework_rb.swc"/>
+                <exclude name="frameworks/locale/da_DK/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/da_DK/mx_rb.swc"/>
+                <exclude name="frameworks/locale/da_DK/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/da_DK/spark_rb.swc"/>
+                <exclude name="frameworks/locale/da_DK/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/da_DK/tool_air_rb.swc"/>
+                <exclude name="frameworks/locale/de_CH/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/de_CH/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/de_CH/apache_rb.swc"/>
+                <exclude name="frameworks/locale/de_CH/automation_agent_rb.swc"/>
+                <exclude name="frameworks/locale/de_CH/automation_rb.swc"/>
+                <exclude name="frameworks/locale/de_CH/charts_rb.swc"/>
+                <exclude name="frameworks/locale/de_CH/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/de_CH/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/de_CH/framework_rb.swc"/>
+                <exclude name="frameworks/locale/de_CH/mx_rb.swc"/>
+                <exclude name="frameworks/locale/de_CH/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/de_CH/spark_rb.swc"/>
+                <exclude name="frameworks/locale/de_CH/tool_air_rb.swc"/>
+                <exclude name="frameworks/locale/de_DE/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/de_DE/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/de_DE/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/de_DE/apache_rb.swc"/>
+                <exclude name="frameworks/locale/de_DE/automation_agent_rb.swc"/>
+                <exclude name="frameworks/locale/de_DE/automation_rb.swc"/>
+                <exclude name="frameworks/locale/de_DE/charts_rb.swc"/>
+                <exclude name="frameworks/locale/de_DE/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/de_DE/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/de_DE/flash-integration_rb.swc"/>
+                <exclude name="frameworks/locale/de_DE/framework_rb.swc"/>
+                <exclude name="frameworks/locale/de_DE/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/de_DE/mx_rb.swc"/>
+                <exclude name="frameworks/locale/de_DE/playerglobal_rb.swc"/>
+                <exclude name="frameworks/locale/de_DE/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/de_DE/spark_rb.swc"/>
+                <exclude name="frameworks/locale/de_DE/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/de_DE/tool_air_rb.swc"/>
+                <exclude name="frameworks/locale/el_GR/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/el_GR/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/el_GR/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/el_GR/apache_rb.swc"/>
+                <exclude name="frameworks/locale/el_GR/automation_rb.swc"/>
+                <exclude name="frameworks/locale/el_GR/charts_rb.swc"/>
+                <exclude name="frameworks/locale/el_GR/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/el_GR/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/el_GR/framework_rb.swc"/>
+                <exclude name="frameworks/locale/el_GR/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/el_GR/mx_rb.swc"/>
+                <exclude name="frameworks/locale/el_GR/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/el_GR/spark_rb.swc"/>
+                <exclude name="frameworks/locale/el_GR/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/en_AU/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/en_AU/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/en_AU/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/en_AU/apache_rb.swc"/>
+                <exclude name="frameworks/locale/en_AU/automation_rb.swc"/>
+                <exclude name="frameworks/locale/en_AU/charts_rb.swc"/>
+                <exclude name="frameworks/locale/en_AU/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/en_AU/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/en_AU/framework_rb.swc"/>
+                <exclude name="frameworks/locale/en_AU/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/en_AU/mx_rb.swc"/>
+                <exclude name="frameworks/locale/en_AU/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/en_AU/spark_rb.swc"/>
+                <exclude name="frameworks/locale/en_AU/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/en_CA/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/en_CA/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/en_CA/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/en_CA/apache_rb.swc"/>
+                <exclude name="frameworks/locale/en_CA/automation_rb.swc"/>
+                <exclude name="frameworks/locale/en_CA/charts_rb.swc"/>
+                <exclude name="frameworks/locale/en_CA/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/en_CA/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/en_CA/framework_rb.swc"/>
+                <exclude name="frameworks/locale/en_CA/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/en_CA/mx_rb.swc"/>
+                <exclude name="frameworks/locale/en_CA/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/en_CA/spark_rb.swc"/>
+                <exclude name="frameworks/locale/en_CA/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/en_GB/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/en_GB/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/en_GB/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/en_GB/apache_rb.swc"/>
+                <exclude name="frameworks/locale/en_GB/automation_rb.swc"/>
+                <exclude name="frameworks/locale/en_GB/charts_rb.swc"/>
+                <exclude name="frameworks/locale/en_GB/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/en_GB/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/en_GB/framework_rb.swc"/>
+                <exclude name="frameworks/locale/en_GB/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/en_GB/mx_rb.swc"/>
+                <exclude name="frameworks/locale/en_GB/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/en_GB/spark_rb.swc"/>
+                <exclude name="frameworks/locale/en_GB/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/en_US/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/en_US/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/en_US/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/en_US/apache_rb.swc"/>
+                <exclude name="frameworks/locale/en_US/automation_agent_rb.swc"/>
+                <exclude name="frameworks/locale/en_US/automation_rb.swc"/>
+                <exclude name="frameworks/locale/en_US/charts_rb.swc"/>
+                <exclude name="frameworks/locale/en_US/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/en_US/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/en_US/flash-integration_rb.swc"/>
+                <exclude name="frameworks/locale/en_US/framework_rb.swc"/>
+                <exclude name="frameworks/locale/en_US/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/en_US/mx_rb.swc"/>
+                <exclude name="frameworks/locale/en_US/playerglobal_rb.swc"/>
+                <exclude name="frameworks/locale/en_US/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/en_US/spark_rb.swc"/>
+                <exclude name="frameworks/locale/en_US/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/en_US/tool_air_rb.swc"/>
+                <exclude name="frameworks/locale/es_ES/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/es_ES/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/es_ES/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/es_ES/apache_rb.swc"/>
+                <exclude name="frameworks/locale/es_ES/automation_agent_rb.swc"/>
+                <exclude name="frameworks/locale/es_ES/automation_rb.swc"/>
+                <exclude name="frameworks/locale/es_ES/charts_rb.swc"/>
+                <exclude name="frameworks/locale/es_ES/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/es_ES/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/es_ES/framework_rb.swc"/>
+                <exclude name="frameworks/locale/es_ES/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/es_ES/mx_rb.swc"/>
+                <exclude name="frameworks/locale/es_ES/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/es_ES/spark_rb.swc"/>
+                <exclude name="frameworks/locale/es_ES/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/es_ES/tool_air_rb.swc"/>
+                <exclude name="frameworks/locale/fi_FI/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/fi_FI/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/fi_FI/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/fi_FI/apache_rb.swc"/>
+                <exclude name="frameworks/locale/fi_FI/automation_agent_rb.swc"/>
+                <exclude name="frameworks/locale/fi_FI/automation_rb.swc"/>
+                <exclude name="frameworks/locale/fi_FI/charts_rb.swc"/>
+                <exclude name="frameworks/locale/fi_FI/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/fi_FI/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/fi_FI/framework_rb.swc"/>
+                <exclude name="frameworks/locale/fi_FI/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/fi_FI/mx_rb.swc"/>
+                <exclude name="frameworks/locale/fi_FI/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/fi_FI/spark_rb.swc"/>
+                <exclude name="frameworks/locale/fi_FI/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/fi_FI/tool_air_rb.swc"/>
+                <exclude name="frameworks/locale/fr_CH/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/fr_CH/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/fr_CH/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/fr_CH/apache_rb.swc"/>
+                <exclude name="frameworks/locale/fr_CH/automation_agent_rb.swc"/>
+                <exclude name="frameworks/locale/fr_CH/automation_rb.swc"/>
+                <exclude name="frameworks/locale/fr_CH/charts_rb.swc"/>
+                <exclude name="frameworks/locale/fr_CH/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/fr_CH/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/fr_CH/framework_rb.swc"/>
+                <exclude name="frameworks/locale/fr_CH/mx_rb.swc"/>
+                <exclude name="frameworks/locale/fr_CH/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/fr_CH/spark_rb.swc"/>
+                <exclude name="frameworks/locale/fr_FR/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/fr_FR/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/fr_FR/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/fr_FR/apache_rb.swc"/>
+                <exclude name="frameworks/locale/fr_FR/automation_agent_rb.swc"/>
+                <exclude name="frameworks/locale/fr_FR/automation_rb.swc"/>
+                <exclude name="frameworks/locale/fr_FR/charts_rb.swc"/>
+                <exclude name="frameworks/locale/fr_FR/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/fr_FR/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/fr_FR/flash-integration_rb.swc"/>
+                <exclude name="frameworks/locale/fr_FR/framework_rb.swc"/>
+                <exclude name="frameworks/locale/fr_FR/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/fr_FR/mx_rb.swc"/>
+                <exclude name="frameworks/locale/fr_FR/playerglobal_rb.swc"/>
+                <exclude name="frameworks/locale/fr_FR/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/fr_FR/spark_rb.swc"/>
+                <exclude name="frameworks/locale/fr_FR/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/fr_FR/tool_air_rb.swc"/>
+                <exclude name="frameworks/locale/it_IT/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/it_IT/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/it_IT/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/it_IT/apache_rb.swc"/>
+                <exclude name="frameworks/locale/it_IT/automation_agent_rb.swc"/>
+                <exclude name="frameworks/locale/it_IT/automation_rb.swc"/>
+                <exclude name="frameworks/locale/it_IT/charts_rb.swc"/>
+                <exclude name="frameworks/locale/it_IT/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/it_IT/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/it_IT/framework_rb.swc"/>
+                <exclude name="frameworks/locale/it_IT/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/it_IT/mx_rb.swc"/>
+                <exclude name="frameworks/locale/it_IT/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/it_IT/spark_rb.swc"/>
+                <exclude name="frameworks/locale/it_IT/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/it_IT/tool_air_rb.swc"/>
+                <exclude name="frameworks/locale/ja_JP/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/ja_JP/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/ja_JP/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/ja_JP/apache_rb.swc"/>
+                <exclude name="frameworks/locale/ja_JP/automation_agent_rb.swc"/>
+                <exclude name="frameworks/locale/ja_JP/automation_rb.swc"/>
+                <exclude name="frameworks/locale/ja_JP/charts_rb.swc"/>
+                <exclude name="frameworks/locale/ja_JP/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/ja_JP/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/ja_JP/flash-integration_rb.swc"/>
+                <exclude name="frameworks/locale/ja_JP/framework_rb.swc"/>
+                <exclude name="frameworks/locale/ja_JP/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/ja_JP/mx_rb.swc"/>
+                <exclude name="frameworks/locale/ja_JP/playerglobal_rb.swc"/>
+                <exclude name="frameworks/locale/ja_JP/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/ja_JP/spark_rb.swc"/>
+                <exclude name="frameworks/locale/ja_JP/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/ja_JP/tool_air_rb.swc"/>
+                <exclude name="frameworks/locale/ko_KR/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/ko_KR/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/ko_KR/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/ko_KR/apache_rb.swc"/>
+                <exclude name="frameworks/locale/ko_KR/automation_agent_rb.swc"/>
+                <exclude name="frameworks/locale/ko_KR/automation_rb.swc"/>
+                <exclude name="frameworks/locale/ko_KR/charts_rb.swc"/>
+                <exclude name="frameworks/locale/ko_KR/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/ko_KR/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/ko_KR/framework_rb.swc"/>
+                <exclude name="frameworks/locale/ko_KR/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/ko_KR/mx_rb.swc"/>
+                <exclude name="frameworks/locale/ko_KR/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/ko_KR/spark_rb.swc"/>
+                <exclude name="frameworks/locale/ko_KR/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/ko_KR/tool_air_rb.swc"/>
+                <exclude name="frameworks/locale/nb_NO/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/nb_NO/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/nb_NO/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/nb_NO/apache_rb.swc"/>
+                <exclude name="frameworks/locale/nb_NO/automation_agent_rb.swc"/>
+                <exclude name="frameworks/locale/nb_NO/automation_rb.swc"/>
+                <exclude name="frameworks/locale/nb_NO/charts_rb.swc"/>
+                <exclude name="frameworks/locale/nb_NO/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/nb_NO/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/nb_NO/framework_rb.swc"/>
+                <exclude name="frameworks/locale/nb_NO/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/nb_NO/mx_rb.swc"/>
+                <exclude name="frameworks/locale/nb_NO/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/nb_NO/spark_rb.swc"/>
+                <exclude name="frameworks/locale/nb_NO/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/nb_NO/tool_air_rb.swc"/>
+                <exclude name="frameworks/locale/nl_NL/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/nl_NL/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/nl_NL/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/nl_NL/apache_rb.swc"/>
+                <exclude name="frameworks/locale/nl_NL/automation_agent_rb.swc"/>
+                <exclude name="frameworks/locale/nl_NL/automation_rb.swc"/>
+                <exclude name="frameworks/locale/nl_NL/charts_rb.swc"/>
+                <exclude name="frameworks/locale/nl_NL/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/nl_NL/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/nl_NL/framework_rb.swc"/>
+                <exclude name="frameworks/locale/nl_NL/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/nl_NL/mx_rb.swc"/>
+                <exclude name="frameworks/locale/nl_NL/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/nl_NL/spark_rb.swc"/>
+                <exclude name="frameworks/locale/nl_NL/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/nl_NL/tool_air_rb.swc"/>
+                <exclude name="frameworks/locale/pt_BR/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/pt_BR/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/pt_BR/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/pt_BR/apache_rb.swc"/>
+                <exclude name="frameworks/locale/pt_BR/automation_agent_rb.swc"/>
+                <exclude name="frameworks/locale/pt_BR/automation_rb.swc"/>
+                <exclude name="frameworks/locale/pt_BR/charts_rb.swc"/>
+                <exclude name="frameworks/locale/pt_BR/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/pt_BR/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/pt_BR/framework_rb.swc"/>
+                <exclude name="frameworks/locale/pt_BR/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/pt_BR/mx_rb.swc"/>
+                <exclude name="frameworks/locale/pt_BR/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/pt_BR/spark_rb.swc"/>
+                <exclude name="frameworks/locale/pt_BR/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/pt_BR/tool_air_rb.swc"/>
+                <exclude name="frameworks/locale/pt_PT/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/pt_PT/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/pt_PT/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/pt_PT/apache_rb.swc"/>
+                <exclude name="frameworks/locale/pt_PT/automation_rb.swc"/>
+                <exclude name="frameworks/locale/pt_PT/charts_rb.swc"/>
+                <exclude name="frameworks/locale/pt_PT/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/pt_PT/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/pt_PT/framework_rb.swc"/>
+                <exclude name="frameworks/locale/pt_PT/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/pt_PT/mx_rb.swc"/>
+                <exclude name="frameworks/locale/pt_PT/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/pt_PT/spark_rb.swc"/>
+                <exclude name="frameworks/locale/pt_PT/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/ru_RU/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/ru_RU/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/ru_RU/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/ru_RU/apache_rb.swc"/>
+                <exclude name="frameworks/locale/ru_RU/automation_agent_rb.swc"/>
+                <exclude name="frameworks/locale/ru_RU/automation_rb.swc"/>
+                <exclude name="frameworks/locale/ru_RU/charts_rb.swc"/>
+                <exclude name="frameworks/locale/ru_RU/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/ru_RU/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/ru_RU/flash-integration_rb.swc"/>
+                <exclude name="frameworks/locale/ru_RU/framework_rb.swc"/>
+                <exclude name="frameworks/locale/ru_RU/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/ru_RU/mx_rb.swc"/>
+                <exclude name="frameworks/locale/ru_RU/playerglobal_rb.swc"/>
+                <exclude name="frameworks/locale/ru_RU/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/ru_RU/spark_rb.swc"/>
+                <exclude name="frameworks/locale/ru_RU/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/ru_RU/tool_air_rb.swc"/>
+                <exclude name="frameworks/locale/sv_SE/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/sv_SE/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/sv_SE/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/sv_SE/apache_rb.swc"/>
+                <exclude name="frameworks/locale/sv_SE/automation_agent_rb.swc"/>
+                <exclude name="frameworks/locale/sv_SE/automation_rb.swc"/>
+                <exclude name="frameworks/locale/sv_SE/charts_rb.swc"/>
+                <exclude name="frameworks/locale/sv_SE/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/sv_SE/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/sv_SE/framework_rb.swc"/>
+                <exclude name="frameworks/locale/sv_SE/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/sv_SE/mx_rb.swc"/>
+                <exclude name="frameworks/locale/sv_SE/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/sv_SE/spark_rb.swc"/>
+                <exclude name="frameworks/locale/sv_SE/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/sv_SE/tool_air_rb.swc"/>
+                <exclude name="frameworks/locale/zh_CN/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/zh_CN/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/zh_CN/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/zh_CN/apache_rb.swc"/>
+                <exclude name="frameworks/locale/zh_CN/automation_agent_rb.swc"/>
+                <exclude name="frameworks/locale/zh_CN/automation_rb.swc"/>
+                <exclude name="frameworks/locale/zh_CN/charts_rb.swc"/>
+                <exclude name="frameworks/locale/zh_CN/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/zh_CN/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/zh_CN/flash-integration_rb.swc"/>
+                <exclude name="frameworks/locale/zh_CN/framework_rb.swc"/>
+                <exclude name="frameworks/locale/zh_CN/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/zh_CN/mx_rb.swc"/>
+                <exclude name="frameworks/locale/zh_CN/playerglobal_rb.swc"/>
+                <exclude name="frameworks/locale/zh_CN/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/zh_CN/spark_rb.swc"/>
+                <exclude name="frameworks/locale/zh_CN/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/zh_CN/tool_air_rb.swc"/>
+                <exclude name="frameworks/locale/zh_TW/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/zh_TW/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/zh_TW/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/zh_TW/apache_rb.swc"/>
+                <exclude name="frameworks/locale/zh_TW/automation_agent_rb.swc"/>
+                <exclude name="frameworks/locale/zh_TW/automation_rb.swc"/>
+                <exclude name="frameworks/locale/zh_TW/charts_rb.swc"/>
+                <exclude name="frameworks/locale/zh_TW/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/zh_TW/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/zh_TW/framework_rb.swc"/>
+                <exclude name="frameworks/locale/zh_TW/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/zh_TW/mx_rb.swc"/>
+                <exclude name="frameworks/locale/zh_TW/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/zh_TW/spark_rb.swc"/>
+                <exclude name="frameworks/locale/zh_TW/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/zh_TW/tool_air_rb.swc"/>
+                <exclude name="frameworks/projects/flash-integration/libs/flash-integration.swc"/>
+                <exclude name="frameworks/themes/Halo/halo.swc"/>
+                <exclude name="frameworks/themes/Mobile/mobile.swc"/>
+                <exclude name="frameworks/themes/Wireframe/wireframe.swc"/>
+                <exclude name="samples/themes/arcade/arcade.swc"/>
+                <exclude name="samples/themes/cobalt/cobalt.swc"/>
+                <exclude name="samples/themes/graphite/graphite.swc"/>
+                <exclude name="frameworks/localFonts.ser"/>
+                <exclude name="frameworks/macFonts.ser"/>
+                <exclude name="frameworks/projects/advancedgrids/bundles.properties"/>
+                <exclude name="frameworks/projects/airframework/bundles.properties"/>
+                <exclude name="frameworks/projects/airspark/bundles.properties"/>
+                <exclude name="frameworks/projects/apache/bundles.properties"/>
+                <exclude name="frameworks/projects/authoringsupport/bundles.properties"/>
+                <exclude name="frameworks/projects/automation/bundles.properties"/>
+                <exclude name="frameworks/projects/automation_agent/bundles.properties"/>
+                <exclude name="frameworks/projects/automation_air/bundles.properties"/>
+                <exclude name="frameworks/projects/automation_airspark/bundles.properties"/>
+                <exclude name="frameworks/projects/charts/bundles.properties"/>
+                <exclude name="frameworks/projects/core/bundles.properties"/>
+                <exclude name="frameworks/projects/experimental/bundles.properties"/>
+                <exclude name="frameworks/projects/experimental_mobile/bundles.properties"/>
+                <exclude name="frameworks/projects/flash-integration/bundles.properties"/>
+                <exclude name="frameworks/projects/flatspark/bundles.properties"/>
+                <exclude name="frameworks/projects/framework/bundles.properties"/>
+                <exclude name="frameworks/projects/halo/bundles.properties"/>
+                <exclude name="frameworks/projects/mobilecomponents/bundles.properties"/>
+                <exclude name="frameworks/projects/mobiletheme/bundles.properties"/>
+                <exclude name="frameworks/projects/mx/bundles.properties"/>
+                <exclude name="frameworks/projects/rpc/bundles.properties"/>
+                <exclude name="frameworks/projects/spark/bundles.properties"/>
+                <exclude name="frameworks/projects/spark_dmv/bundles.properties"/>
+                <exclude name="frameworks/projects/sparkskins/bundles.properties"/>
+                <exclude name="frameworks/projects/tool/bundles.properties"/>
+                <exclude name="frameworks/projects/tool_air/bundles.properties"/>
+                <exclude name="frameworks/projects/wireframe/bundles.properties"/>
+                <exclude name="frameworks/winFonts.ser"/>
+                <!-- external jars.  If you add an external jar, also add it to the external-jar-folder-dump target -->
+                <exclude name="lib/external/commons-collections.jar"/>
+                <exclude name="lib/external/commons-discovery.jar"/>
+                <exclude name="lib/external/commons-logging.jar"/>
+                <exclude name="lib/external/javacc.jar"/>
+                <exclude name="lib/external/saxon9.jar"/>
+                <exclude name="lib/external/xalan.jar"/>
+                <exclude name="lib/external/xercesImpl.jar"/>
+                <exclude name="lib/external/xercesPatch.jar"/>
+                <exclude name="lib/external/xml-apis-ext.jar"/>
+                <exclude name="lib/external/xml-apis.jar"/>
+                <!-- end list of external jars.  Next is their collateral files -->
+                <exclude name="lib/external/README.xml-apis-ext.txt"/>
+                <exclude name="lib/external/commons-collections-LICENSE.txt"/>
+                <exclude name="lib/external/commons-discovery-LICENSE"/>
+                <exclude name="lib/external/commons-logging-NOTICE.txt"/>
+                <exclude name="lib/external/saxon9-NOTICES/APACHE-ANT.txt"/>
+                <exclude name="lib/external/saxon9-NOTICES/APACHE-RESOLVER.txt"/>
+                <exclude name="lib/external/saxon9-NOTICES/APACHE-XERCES.txt"/>
+                <exclude name="lib/external/saxon9-NOTICES/FRIJTERS.txt"/>
+                <exclude name="lib/external/saxon9-NOTICES/GPL+CLASSPATH.txt"/>
+                <exclude name="lib/external/saxon9-NOTICES/JAMESCLARK.txt"/>
+                <exclude name="lib/external/saxon9-NOTICES/LEGAL.txt"/>
+                <exclude name="lib/external/saxon9-NOTICES/THAI.txt"/>
+                <exclude name="lib/external/xalan-LICENSES/BCEL.README.txt"/>
+                <exclude name="lib/external/xalan-LICENSES/java_cup.README.txt"/>
+                <exclude name="lib/external/xalan-LICENSES/regexp.README.txt"/>
+                <exclude name="lib/external/xalan-LICENSES/runtime.README.txt"/>
+                <exclude name="lib/external/xalan-NOTICE"/>
+                <exclude name="lib/external/xerces-LICENSE/LICENSE-SAX.html"/>
+                <exclude name="lib/external/xerces-NOTICES/NOTICE.resolver.txt"/>
+                <exclude name="lib/external/xerces-NOTICES/NOTICE.serializer.txt"/>
+                <exclude name="lib/external/xml-apis-LICENSES/LICENSE.sax.txt"/>
+                <exclude name="lib/external/xml-apis-LICENSES/README.dom.txt"/>
+                <exclude name="lib/external/xml-apis-LICENSES/README.sax.txt"/>
+                <exclude name="lib/external/xml-apis-ext-LICENSES/LICENSE.sac.html"/>
+                <exclude name="lib/external/xml-apis-ext-LICENSES/README.dom.txt"/>
+                <!-- this list is generated from a list at the top of this file -->
+                <excludesfile name="${basedir}/jarexcludes.txt" />
+            </fileset>
+        </rat:report>
+    </target>
+    
+    <target name="external-jar-folder-dump" >
+        <echo>list of folders in external jars.  This may impact LICENSE and NOTICE</echo>
+        <antcall target="show-jar-folders" >
+            <param name="thisFile" value="lib/external/commons-collections.jar" />
+        </antcall>
+        <antcall target="show-jar-folders" >
+            <param name="thisFile" value="lib/external/commons-discovery.jar" />
+        </antcall>
+        <antcall target="show-jar-folders" >
+            <param name="thisFile" value="lib/external/commons-logging.jar" />
+        </antcall>
+        <antcall target="show-jar-folders" >
+            <param name="thisFile" value="lib/external/javacc.jar" />
+        </antcall>
+        <antcall target="show-jar-folders" >
+            <param name="thisFile" value="lib/external/saxon9.jar" />
+        </antcall>
+        <antcall target="show-jar-folders" >
+            <param name="thisFile" value="lib/external/xalan.jar" />
+        </antcall>
+        <antcall target="show-jar-folders" >
+            <param name="thisFile" value="lib/external/xercesImpl.jar" />
+        </antcall>
+        <antcall target="show-jar-folders" >
+            <param name="thisFile" value="lib/external/xercesPatch.jar" />
+        </antcall>
+        <antcall target="show-jar-folders" >
+            <param name="thisFile" value="lib/external/xml-apis-ext.jar" />
+        </antcall>
+        <antcall target="show-jar-folders" >
+            <param name="thisFile" value="lib/external/xml-apis.jar" />
+        </antcall>
+        <echo>end of list of folders in external jars.  This may impact LICENSE and NOTICE</echo>
+    </target>
+
+    <!-- someday figure out how to use
+     find . -name "*.jar" -exec tar ft {} \; | sort -u > paths.txt -->
+
+    <!-- how to do tar and sort on Windows? -->
+    <target name="examine-jars" if="isMac">
+        <!-- comma delimited list, no spaces, not one file per line -->
+        <copy file="jars.txt" tofile="loop.txt" />
+        <ant antfile="ApproveSDK.xml" target="loopOnce" inheritAll="false" />
+    </target>
+    <target name="loopOnce" >
+        <!-- make a copy of the list so we can munge it to
+         get the first item in the list -->
+        <delete file="loop1.txt" />
+        <copy file="loop.txt" tofile="loop1.txt" />
+        <loadfile srcFile="loop.txt" property="checkiflast" />
+        <condition property="islast" value="true">
+            <not>
+                <contains string="${checkiflast}" substring="," />
+            </not>
+        </condition>
+        <antcall target="notlast" />
+        <antcall target="lastone" />
+    </target>
+    <target name="notlast" unless="islast">
+        <loadfile srcFile="loop1.txt" property="echoFile" />
+        <replaceregexp file="loop1.txt" match="^(.*),(.*)" replace="\2" />
+        <loadfile srcFile="loop1.txt" property="thisFile" />
+        <antcall target="jar-check" />
+        <replaceregexp file="loop.txt" match="^(.*),(.*)" replace="\1" />
+        <ant antfile="ApproveSDK.xml" target="loopOnce" inheritAll="false"/>
+    </target>
+    <target name="lastone" if="islast">
+        <loadfile srcFile="loop1.txt" property="thisFile" />
+        <antcall target="jar-check" />
+        <delete file="loop.txt" />
+        <delete file="loop1.txt" />
+    </target>
+
+    <target name="show-jar-folders">
+        <delete dir="${basedir}/jar" failonerror="false" />
+        <mkdir dir="${basedir}/jar" />
+        <unjar src="${basedir}/${bin.package.url.name}/${thisFile}" dest="${basedir}/jar" />
+        <exec executable="tar" output="${basedir}/jarclasses.txt">
+            <arg value="tf" />
+            <arg value="${basedir}/${bin.package.url.name}/${thisFile}" />
+        </exec>
+        <replaceregexp file="${basedir}/jarclasses.txt" match="(.*)/(.*)" replace="\1" flags="m" byline="true"/>
+        <exec executable="sort" output="${basedir}/jarpaths.txt">
+            <arg value="-u" />
+            <arg value="${basedir}/jarclasses.txt" />
+        </exec>
+        <antcall target="display-text" >
+            <param name="file" value="${basedir}/jarpaths.txt" />
+        </antcall>
+    </target>
+    
+    <target name="jar-check" >
+        <antcall target="show-jar-folders" />
+        <input
+        message="Above is the list of folders in this ${thisFile}.&#xA;Folder names can sometimes indicate presence of third-party content that needs to be in LICENSE and/or NOTICE files.&#xA;Press the Enter key to see the LICENSE for this jar."/>
+        <fail message="LICENSE not in ${basedir}/${bin.package.url.name}/${thisFile}">
+            <condition>
+                <not>
+                    <available file="${basedir}/jar/META-INF/LICENSE" />
+                </not>
+            </condition>
+        </fail>
+        <fail message="NOTICE not in ${basedir}/${bin.package.url.name}/${thisFile}">
+            <condition>
+                <not>
+                    <available file="${basedir}/jar/META-INF/NOTICE" />
+                </not>
+            </condition>
+        </fail>
+        <antcall target="display-text" >
+            <param name="file" value="${basedir}/jar/META-INF/LICENSE" />
+        </antcall>
+        <input
+        message="Check the LICENSE for the Apache License and third-party licenses. Is it ok?"
+        validargs="y,n"
+        defaultvalue="y"
+        addproperty="jar.license.ok"/>
+        <fail message="LICENSE for ${basedir}/${bin.package.url.name}/${thisFile} not correct">
+            <condition>
+                <not>
+                    <equals arg1="${jar.license.ok}" arg2="y" />
+                </not>
+            </condition>
+        </fail>
+        <antcall target="display-text" >
+            <param name="file" value="${basedir}/jar/META-INF/NOTICE" />
+        </antcall>
+        <input
+        message="Check the NOTICE for required notices from third-parties. Is it ok?"
+        validargs="y,n"
+        defaultvalue="y"
+        addproperty="jar.notice.ok"/>
+        <fail message="NOTICE for ${basedir}/${bin.package.url.name}/${thisFile} not correct">
+            <condition>
+                <not>
+                    <equals arg1="${jar.notice.ok}" arg2="y" />
+                </not>
+            </condition>
+        </fail>
+        
     </target>
 
     <target name="check-notices" description="open each notice file for review, grep for a few things" >
-        <fail message="README not in package">
-			<condition>
-	            <not>
-    	            <available file="${basedir}/${package.url.name}/README" />
-        	    </not>
-			</condition>
+        <fail message="README not in source package">
+            <condition>
+                <not>
+                    <available file="${basedir}/${src.package.url.name}/README" />
+                </not>
+            </condition>
         </fail>
-        <fail message="RELEASE_NOTES not in package">
-			<condition>
-				<not>
-					<available file="${basedir}/${package.url.name}/RELEASE_NOTES" />
-				</not>
-			</condition>
+        <fail message="RELEASE_NOTES not in source package">
+            <condition>
+                <not>
+                    <available file="${basedir}/${src.package.url.name}/RELEASE_NOTES" />
+                </not>
+            </condition>
         </fail>
-        <fail message="NOTICE not in package">
-			<condition>
-				<not>
-					<available file="${basedir}/${package.url.name}/NOTICE" />
-				</not>
-			</condition>
+        <fail message="NOTICE not in source package">
+            <condition>
+                <not>
+                    <available file="${basedir}/${src.package.url.name}/NOTICE" />
+                </not>
+            </condition>
         </fail>
-        <fail message="LICENSE not in package">
-			<condition>
-				<not>
-					<available file="${basedir}/${package.url.name}/LICENSE" />
-				</not>
-			</condition>
+        <fail message="LICENSE not in source package">
+            <condition>
+                <not>
+                    <available file="${basedir}/${src.package.url.name}/LICENSE" />
+                </not>
+            </condition>
         </fail>
-		<antcall target="display-text" >
-            <param name="file" value="${basedir}/${package.url.name}/README" />
+        <fail message="README not in binary package">
+            <condition>
+                <not>
+                    <available file="${basedir}/${bin.package.url.name}/README" />
+                </not>
+            </condition>
+        </fail>
+        <fail message="RELEASE_NOTES not in binary package">
+            <condition>
+                <not>
+                    <available file="${basedir}/${bin.package.url.name}/RELEASE_NOTES" />
+                </not>
+            </condition>
+        </fail>
+        <fail message="NOTICE not in binary package">
+            <condition>
+                <not>
+                    <available file="${basedir}/${bin.package.url.name}/NOTICE" />
+                </not>
+            </condition>
+        </fail>
+        <fail message="LICENSE not in binary package">
+            <condition>
+                <not>
+                    <available file="${basedir}/${bin.package.url.name}/LICENSE" />
+                </not>
+            </condition>
+        </fail>
+        <checksum file="${basedir}/${src.package.url.name}/RELEASE_NOTES" property="src.rnmd5" />
+        <checksum file="${basedir}/${bin.package.url.name}/RELEASE_NOTES" property="bin.rnmd5" />
+        <fail message="RELEASE_NOTES in binary package does not match source package">
+            <condition>
+                <not>
+                    <equals arg1="${src.rnmd5}" arg2="${bin.rnmd5}" />
+                </not>
+            </condition>
+        </fail>
+        <checksum file="${basedir}/${src.package.url.name}/README" property="src.rmd5" />
+        <checksum file="${basedir}/${bin.package.url.name}/README" property="bin.rmd5" />
+        <fail message="README in binary package does not match source package">
+            <condition>
+                <not>
+                    <equals arg1="${src.rmd5}" arg2="${bin.rmd5}" />
+                </not>
+            </condition>
+        </fail>
+        <antcall target="display-text" >
+            <param name="file" value="${basedir}/${src.package.url.name}/README" />
         </antcall>
-		<input
-			message="Check the README for version numbers, spelling, grammar, accuracy.  Is it ok?"
-            validargs="y,n"
+        <input
+        message="Check the README for version numbers, spelling, grammar, accuracy.  Is it ok?"
+        validargs="y,n"
         defaultvalue="y"
         addproperty="readme.ok"/>
-		<antcall target="display-text" >
-            <param name="file" value="${basedir}/${package.url.name}/RELEASE_NOTES" />
+        
+        <antcall target="display-text" >
+            <param name="file" value="${basedir}/${src.package.url.name}/RELEASE_NOTES" />
         </antcall>
-		<input
-			message="Check the RELEASE_NOTES for copyright years, spelling, grammar, accuracy. Is it ok?"
-            validargs="y,n"
+        <input
+        message="Check the RELEASE_NOTES for copyright years, spelling, grammar, accuracy. Is it ok?"
+        validargs="y,n"
         defaultvalue="y"
         addproperty="releasenotes.ok"/>
-		
         
-		<antcall target="display-text" >
-            <param name="file" value="${basedir}/${package.url.name}/NOTICE" />
+        <antcall target="display-text" >
+            <param name="file" value="${basedir}/${src.package.url.name}/NOTICE" />
         </antcall>
-		<input
-			message="Check the NOTICE for required notices from third-parties. Is it ok?"
-            validargs="y,n"
+        <input
+        message="Check the source package NOTICE for required notices from third-parties. Is it ok?"
+        validargs="y,n"
         defaultvalue="y"
-        addproperty="notice.ok"/>
-
-		<antcall target="display-text" >
-            <param name="file" value="${basedir}/${package.url.name}/LICENSE" />
+        addproperty="src.notice.ok"/>
+        
+        <antcall target="display-text" >
+            <param name="file" value="${basedir}/${src.package.url.name}/LICENSE" />
         </antcall>
-		<input
-			message="Check the LICENSE for the Apache License and third-party licenses. Is it ok?"
-            validargs="y,n"
+        <input
+        message="Check the source package LICENSE for the Apache License and third-party licenses. Is it ok?"
+        validargs="y,n"
         defaultvalue="y"
-        addproperty="license.ok"/>
+        addproperty="src.license.ok"/>
+        
+        <antcall target="display-text" >
+            <param name="file" value="${basedir}/${bin.package.url.name}/NOTICE" />
+        </antcall>
+        <input
+        message="Check the binary package NOTICE for required notices from third-parties. Is it ok?"
+        validargs="y,n"
+        defaultvalue="y"
+        addproperty="bin.notice.ok"/>
+        
+        <antcall target="display-text" >
+            <param name="file" value="${basedir}/${bin.package.url.name}/LICENSE" />
+        </antcall>
+        <input
+        message="Check the binary package LICENSE for the Apache License and third-party licenses. Is it ok?"
+        validargs="y,n"
+        defaultvalue="y"
+        addproperty="bin.license.ok"/>
     </target>
 
     <target name="build" depends="copy.downloads">
@@ -380,16 +1178,16 @@
 			message="The final step is to run the build and any tests the build script runs.  This can take several minutes.  Press y to start the build."
             validargs="y"
         defaultvalue="y" />
-        <chmod file="${basedir}/${package.url.name}/bin/compc" perm="ugo+rx"/>
-        <chmod file="${basedir}/${package.url.name}/bin/mxmlc" perm="ugo+rx"/>
+        <chmod file="${basedir}/${src.package.url.name}/bin/compc" perm="ugo+rx"/>
+        <chmod file="${basedir}/${src.package.url.name}/bin/mxmlc" perm="ugo+rx"/>
         <property name="build.noprompt" value="true" />
-        <ant dir="${basedir}/${package.url.name}" target="main" />
-        <ant dir="${basedir}/${package.url.name}" target="checkintests" />
+        <ant dir="${basedir}/${src.package.url.name}" target="main" />
+        <ant dir="${basedir}/${src.package.url.name}" target="checkintests" />
     </target>
 
     <target name="copy.downloads" if="${do.copy.downloads}" description="instead of actually downloading all of the dependencies, you can save lots of time by just copying from some other folder in some other SDK.">
 		<echo>Copying downloads</echo>
-        <copy todir="${basedir}/${package.url.name}/in" >
+        <copy todir="${basedir}/${src.package.url.name}/in" >
 			<fileset dir="${download.cache.dir}" />
 		</copy>
     </target>
@@ -397,28 +1195,41 @@
 	<target name="approve" >
 		<condition property="vote" value="+1">
 			<and>
-				<equals arg1="${rat.license.ok}" arg2="y" />
-				<equals arg1="${rat.binaries.ok}" arg2="y" />
-				<equals arg1="${readme.ok}" arg2="y" />
-				<equals arg1="${releasenotes.ok}" arg2="y" />
-				<equals arg1="${notice.ok}" arg2="y" />
-				<equals arg1="${license.ok}" arg2="y" />
+                <equals arg1="${rat.src.license.ok}" arg2="y" />
+                <equals arg1="${rat.src.binaries.ok}" arg2="y" />
+                <equals arg1="${rat.bin.license.ok}" arg2="y" />
+                <equals arg1="${rat.bin.binaries.ok}" arg2="y" />
+                <equals arg1="${readme.ok}" arg2="y" />
+                <equals arg1="${releasenotes.ok}" arg2="y" />
+                <equals arg1="${src.notice.ok}" arg2="y" />
+                <equals arg1="${bin.notice.ok}" arg2="y" />
+                <equals arg1="${src.license.ok}" arg2="y" />
+                <equals arg1="${bin.license.ok}" arg2="y" />
 			</and>
 		</condition>
 		<property name="vote" value="-1" />
 		<echo>
 ${vote}
-Package ${package.url.path}/${package.url.name}.${package.suffix}
+Package ${src.package.url.path}/${src.package.url.name}.${package.suffix}
 Java ${ant.java.version}
 OS: ${os.name} ${os.arch} ${os.version}
 Source kit signatures match: y
 Source kit builds: y
 README is ok: ${readme.ok}
 RELEASE_NOTES is ok: ${releasenotes.ok}
-NOTICE is ok: ${notice.ok}
-LICENSE is ok: ${license.ok}
-No unapproved licenses or archives: ${rat.license.ok}
-No unapproved binaries: ${rat.binaries.ok}
+NOTICE is ok: ${src.notice.ok}
+LICENSE is ok: ${src.license.ok}
+No unapproved licenses or archives: ${rat.src.license.ok}
+No unapproved binaries: ${rat.src.binaries.ok}
+
+Package ${bin.package.url.path}/${bin.package.url.name}.${package.suffix}
+Binary kit signatures match: y
+NOTICE is ok: ${bin.notice.ok}
+LICENSE is ok: ${bin.license.ok}
+No unapproved licenses or files in jars: y
+No unapproved licenses or archives in binary package: ${rat.bin.license.ok}
+No unapproved binaries in binary package: ${rat.bin.binaries.ok}
+
 		</echo>
 		<fail>
 			<condition>
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index f47fde0..885d751 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -1,6 +1,13 @@
 The following volunteers have contributed code, documentation, testing and/or
 support to the Apache Flex SDK.
 
+Apache Flex SDK 4.15.0
+----------------------
+Ad Pijnenburg, Aleksey, Alex Harui, Andrey Gorbatov, Andy Dufilie, Andrei Tchijov,
+Chris Martin, Christofer Dutz, Dany Dhondt, Darrell Loverin, Erik de Bruin,
+Frédéric Thomas, Harbs,  Josh Tynjala, Justin Mclean, Mark Kessler, Mihai Chira,
+OmPrakash Muppirala, Piotr Zarzycki, Robbyn Gerhardt, Tom Chiverton, Tom Goemaes
+
 Apache Flex SDK 4.14.1
 ----------------------
 Alex Harui, Dany Dhondt, Erik de Bruin, George Yabra, Greg Dove, Justin Mclean,
diff --git a/GIT-TEST.txt b/GIT-TEST.txt
index aff0518..8209ac9 100644
--- a/GIT-TEST.txt
+++ b/GIT-TEST.txt
@@ -76,4 +76,10 @@
 
 Testing, testing (jfernandes)
 
-I'll just leave this here... --chrsmrtn
\ No newline at end of file
+I'll just leave this here... --chrsmrtn
+
+Hello from joshtynjala!
+
+ello from Michael Schmalle
+
+Did it work? I won't get my hopes up. (May 30, 2015) -kmg ..
\ No newline at end of file
diff --git a/NOTICE b/NOTICE
index a78d131..650a047 100644
--- a/NOTICE
+++ b/NOTICE
@@ -1,5 +1,5 @@
 Apache Flex
-Copyright 2012-2015 The Apache Software Foundation
+Copyright 2012-2016 The Apache Software Foundation
 
 This product includes software developed at
 The Apache Software Foundation (http://www.apache.org/).
diff --git a/README b/README
index 81e93dc..9e65b3b 100644
--- a/README
+++ b/README
@@ -2,8 +2,8 @@
 ===================
 
 The Apache Flex SDK is the evolution of the popular Adobe Flex SDK. The Apache
-Flex SDK is an application development framework for easily building Flash
-based applications for mobile devices, web browsers, and desktop platforms.
+Flex SDK is an application development framework for easily building Flash-based
+applications for mobile devices, web browsers, and desktop platforms.
 Currently supported platforms include:
 
     Microsoft Windows
@@ -21,7 +21,7 @@
 
     http://flex.apache.org/
 
-The Apache Flex SDK 4.14.1 is a follow up release to version 4.14.0. It is
+The Apache Flex SDK 4.15 is a follow up release to version 4.14.1. It is
 compatible with most code written for the original Adobe Flex 4.6 SDK.
 
 
@@ -78,7 +78,7 @@
 
 Before building the Apache Flex SDK you must install the following software and
 set the corresponding environment variables. Make sure to use absolute paths,
-relative paths will result in build errors.
+as relative paths will result in build errors.
 
 The environment variables PLAYERGLOBAL_HOME, AIR_HOME, FLASHPLAYER_DEBUGGER,
 TLF_HOME, BLAZEDS_HOME and ADOBE_EXTENSION_MANAGER can also be set in a
@@ -144,11 +144,11 @@
 * 3)
 The Adobe AIR integration kit for Windows can be downloaded from:
 
-   http://airdownload.adobe.com/air/win/download/16.0/AdobeAIRSDK.zip
+   http://airdownload.adobe.com/air/win/download/20.0/AdobeAIRSDK.zip
 
 The Adobe AIR integration kit for Mac can be downloaded from:
 
-    http://airdownload.adobe.com/air/mac/download/16.0/AdobeAIRSDK.tbz2
+    http://airdownload.adobe.com/air/mac/download/20.0/AdobeAIRSDK.tbz2
 
 The Adobe AIR integration kit for Linux can be downloaded from:
 
@@ -169,7 +169,7 @@
 This version of the Apache Flex SDK was certified for use with Adobe Flash
 Player 11.1, and is compatible with version 10.2 and up. It has been tested
 with versions 11.1, 11.7, 13.0 and 16.0 on Windows and Mac. It has been
-compiled, but not fully tested, against other Adobe Flash Player versions.
+compiled, but not fully tested, with other Adobe Flash Player versions.
 It has not been fully tested on Linux.
 
 On Windows, set FLASHPLAYER_DEBUGGER to the absolute path including the
@@ -195,8 +195,8 @@
 'Adobe Flash Player Version Support' below.
 
 * 6)
-The build scripts assume that the source code folder containing the Apache Flex
-Text Layout Framework root folder ('flex-tlf') is at the same level as the SDK
+The build scripts assume that the root folder containing the source code for
+Apache Flex Text Layout Framework ('flex-tlf') is at the same level as the SDK
 root folder ('flex-sdk'). See 'Getting the source code', below. If this is not
 the case on your system, then you must set the TLF_HOME environment variable to
 point to your TLF root folder. If you are using a released artifact, the
@@ -226,9 +226,9 @@
 On Linux, no Adobe Extension Manager exists.
 
 * 8)
-The build scripts assume that the source code folder containing the Apache Flex
-BlazeDS root folder ('flex-blazeds') is at the same level as the SDK
-root folder ('flex-sdk'). See 'Getting the source code', below. If this is not
+The build scripts assume that the root folder containing the source code for Apache
+Flex BlazeDS ('flex-blazeds') is at the same level as the SDK root folder
+('flex-sdk'). See 'Getting the source code', below. If this is not
 the case on your system, then you must set the BLAZEDS_HOME environment variable
 to point to your BLAZEDS root folder. If you are using a released artifact, the
 source should be included in the artifact, so setting BLAZEDS_HOME is not
@@ -324,15 +324,15 @@
     ant -f installer.xml
     
 If you want to set the Flash Player and AIR versions to something other
-than their defaults, pass the verisons to the ant script like so:
+than their defaults, pass the versions to the ant script like so:
 
      ant -f installer.xml -Dflash.sdk.version=16.0 -Dair.sdk.version=16.0
 
 On Mac/Linux the AIR and Flash Player version can be changed, after the SDK
 has been compiled, by running:
 
-    ./ide/setFlashPlayerVersion.sh ./ 16.0
-    ./ide/addAIRtoSDK.sh 16.0 ./
+    ./ide/setFlashPlayerVersion.sh ./ 20.0
+    ./ide/addAIRtoSDK.sh 20.0 ./
 
 
 
@@ -414,9 +414,9 @@
 Change the playerglobal.version in the build.properties file to have a value
 other than '11.1'. For this change to take effect, the SDK needs to be
 recompiled. For example, to compile against the latest version of the Adobe
-Flash Player, set the value of playerglobal.version to be '16.0' like so:
+Flash Player, set the value of playerglobal.version to be '20.0' like so:
 
-    playerglobal.version = 16.0
+    playerglobal.version = 20.0
 
 OR
 
diff --git a/RELEASE_NOTES b/RELEASE_NOTES
index 39a00f9..7d50fe5 100644
--- a/RELEASE_NOTES
+++ b/RELEASE_NOTES
@@ -1,3 +1,99 @@
+Apache Flex 4.15.0
+==================
+
+New Features
+------------
+- FLEX-34837    Full support for sorting on complex fields of DataGrid rows
+- FLEX-34852    Sorting by complex fields in ListCollectionView
+- FLEX-34927    Allow the setting of an arbitrary property on an object via
+                ObjectUtil
+- FLEX-34941    Allow custom validators to use the triggerEvent
+- FLEX-34945    Validators now able to validate nested properties
+
+AIR and Flash Player Support
+----------------------------
+- Support Flash Player 18.0, 19.0 and 20.0
+- Support for AIR 18.0, 19.0 and 20.0
+
+Bug Fixes
+---------
+FLEX-32249	AdvancedDataGrid.makeListData() incorrectly references 
+			HierarchicalCollectionViewCursor class instead of 
+			IHierarchicalCollectionViewCursor interface
+FLEX-33537	Spark TextArea writing in prompt text format
+FLEX-34028	Cannot Ctrl-Click A Datagrid Row to deselect it when dragEnabled 
+			is set to true
+FLEX-34728	HaloDefaults.findStyleDeclaration doesn't go through styleManager 
+			chains correctly
+FLEX-34741	Spark DataGrid Drag and Drop non functioning
+FLEX-34744	TextFlowElement parent nulled when addChild method used via 
+			parent reference
+FLEX-34751	Regression in fdb tool: VM is resumed if breakpoint can't be set
+FLEX-34753	Returning strongly typed object in Promise fails
+FLEX-34775	Application hangs (in infinite loop) when opening a node inside  
+			a HierarchicalCollectionView whose parent is closed and then  
+			trying to navigate the collection
+FLEX-34807	TLF - EditManager - TextFlowEdit -insertTextScrap
+FLEX-34812	Error "Could not find or load main class Flash" when running 
+			`ant frameworks-rsls`
+FLEX-34837  DataGrid sorted with complex dataField doesn't keep track of changes
+            to those fields, leading to RTE when trying to remove selected item
+FLEX-34838	getItemIndex returns -1 for item whose property was edited with 
+			GridItemEditor in a sorted DataGrid
+FLEX-34850	Applying sort with complex dataField on DataGrid results in 
+			unintuitive item ordering
+FLEX-34857	Adding an id to a fx:Vector when using -keep compiler argument 
+			results in a compiler error
+FLEX-34858	Adding a subclass of a Vector's type to the Vector in MXML 
+			results in an internal build error
+FLEX-34862	RTE on ListBase when dataProvider is changed
+FLEX-34876	Paste Problem with multiple paragraphs
+FLEX-34878	error property of NumberFormatter returns null and not it's 
+			default value
+FLEX-34879	FLEX-34853 Deprecate state setters and reverse() for mx and 
+			spark SortField and Sort classes
+FLEX-34891	TLF: pasted text doesn't get the format of the original text
+FLEX-34909	Embedded fonts not working on charts
+FLEX-34929	Error #1009 when copy/paste a text with style effect in a 
+			RichEditableText/RichTextEditor
+FLEX-34934	Spark Window - Closed Window
+FLEX-34944	GridItemRenderer overrides error tooltip
+FLEX-34954	SkinnableTextBase steals focus by callLater(textDisplay.setFocus)
+FLEX-34982	Charting components that are unable to find their style
+			declarations causing RTE
+FLEX-35003	Update to FontAwesome 4.5
+PR#8		Mxmlc accepts not only *.swc but also *.ane files
+PR#12		Fix MenuBar.styleChanged() crash bug
+
+
+
+
+Known Issues
+------------
+
+Adobe Flash Builder Integration
+
+Adobe Flash Builder 4.7 and Adobe Flash Builder 4.6 both contain a bug where,
+when generating the .mxml file for a new project that uses Apache Flex SDK
+4.10.0 or later Spark Application, Flash Builder will incorrectly insert the
+attribute:
+
+    layout="absolute"
+
+This results in a compile error in the new project.  The remedy is to simply
+remove the errant attribute.
+
+The following wiki page has been set up to contain the latest news on Adobe's
+attempt to correct this problem:
+
+    https://cwiki.apache.org/confluence/display/FLEX/Adobe+Flash+Builder+'New+Project'+Bug
+
+Adobe has provided a patch for Flash Builder 4.7 that resolves this issue:
+
+    http://helpx.adobe.com/flash-builder/kb/flex-new-project-issue--.html
+
+
+
 Apache Flex 4.14.1
 ==================
 
@@ -161,6 +257,8 @@
 FLEX-26478  Runtime error occured when a TextInput's text mouse selection isn't
             finished yet but the TextInput instance is removed or its text
             changes
+FLEX-34625  Setting focus with a zero size component and focusThickness causes
+            RTE
 
 Other fixes (no JIRA issue created):
 - correct case for osmf.swc so compiles on Linux work
diff --git a/asdoc/build.xml b/asdoc/build.xml
index 930abca..654926b 100644
--- a/asdoc/build.xml
+++ b/asdoc/build.xml
@@ -69,7 +69,7 @@
 
 	<target name="doc">
 
-	    <condition property="asdoc.jvm.args" value="-Xmx512m">
+	    <condition property="asdoc.jvm.args" value="-Xmx1024m">
 	        <os family="windows"/>
 	    </condition>
 
diff --git a/build.properties b/build.properties
index 72b635e..c2c7d51 100644
--- a/build.properties
+++ b/build.properties
@@ -18,8 +18,8 @@
 ################################################################################
 
 # flex-sdk-description values
-release = Apache Flex 4.14.1
-release.version = 4.14.1
+release = Apache Flex 4.15.0
+release.version = 4.15.0
 
 # override on command line with -Dbuild.number=999 or in local.properties
 build.number = 0
diff --git a/build.xml b/build.xml
index 96ea1d5..9fd4ac4 100644
--- a/build.xml
+++ b/build.xml
@@ -70,26 +70,6 @@
             property="TLF_HOME"
             value="${FLEX_HOME}/frameworks/projects" />
 
-    <available file="${FLEX_HOME}/../flex-blazeds/modules/remoting"
-            type="dir"
-            property="BLAZEDS_HOME"
-            value="${FLEX_HOME}/../flex-blazeds" />
-
-    <available file="${FLEX_HOME}/../blazeds/modules/remoting"
-            type="dir"
-            property="BLAZEDS_HOME"
-            value="${FLEX_HOME}/../blazeds" />
-
-    <available file="${env.BLAZEDS_HOME}"
-            type="dir"
-            property="BLAZEDS_HOME"
-            value="${env.BLAZEDS_HOME}"/>
-
-    <available file="${FLEX_HOME}/modules/flex-messaging-common/common/src"
-            type="dir"
-            property="BLAZEDS_HOME"
-            value="${FLEX_HOME}/modules/flex-messaging-common/common/src" />
-
     <tstamp>
         <format property="build.number.date" pattern="yyyyMMdd" />
     </tstamp>
@@ -183,7 +163,7 @@
     <target name="prebuild" depends="check-compile-env,thirdparty-downloads,create-description" 
         description="Stuff that needs to be done before any builds." />
 
-    <target name="check-compile-env" depends="check-playerglobal-home,check-air-home,check-tlf-home,check-blazeds-home"
+    <target name="check-compile-env" depends="check-playerglobal-home,check-air-home,check-tlf-home"
         description="Check for the required environment variables for compilation.">
             <echo>OS: ${os.name} / ${os.version} / ${os.arch}</echo>
             <echo>VM: ${java.vm.name} / ${java.vm.version}</echo>
@@ -249,21 +229,6 @@
     	
     </target>
 
-    <target name="check-blazeds-home" unless="BLAZEDS_HOME"
-        description="Check BLAZEDS_HOME is a directory.">
-        
-        <echo message="BLAZEDS_HOME is ${env.BLAZEDS_HOME}"/>
-        
-        <available file="${env.BLAZEDS_HOME}"
-            type="dir"
-            property="BLAZEDS_HOME"
-            value="${env.BLAZEDS_HOME}"/>
-        
-        <fail message="BLAZEDS_HOME must be set correctly for a release build"
-            unless="BLAZEDS_HOME"/>
-        
-    </target>
-
     <target name="check-adobe-extension-manager-env" unless="ADOBE_EXTENSION_MANAGER.set"
         description="Check ADOBE_EXTENSION_MANAGER is a directory.">
         
@@ -465,7 +430,7 @@
             </unzip>
             <!-- optimize out metadata but keep debug info for the unsigned RSL -->
             <java jar="${basedir}/lib/optimizer.jar" fork="true" failonerror="true">
-                <jvmarg line="-ea -DAS3 -DAVMPLUS -Dflexlib=${basedir}/frameworks -Xms32m -Xmx384m -Dsun.io.useCanonCaches=false"/>
+                <jvmarg line="-ea -DAS3 -DAVMPLUS -Dflexlib='${basedir}/frameworks' -Xms32m -Xmx384m -Dsun.io.useCanonCaches=false"/>
                 <arg line="'@{rsl-dir}/library.swf' --output '@{rsl-dir}/@{swc-name}_@{build-number}.swf' --keep-as3-metadata='Bindable,Managed,ChangeEvent,NonCommittingChangeEvent,Transient,SkinPart' --debug='true' "/>	
             </java>
             <delete file="@{rsl-dir}/library.swf"/>
@@ -601,12 +566,8 @@
                 <include name="installer.properties/**"/>
                 <include name="CHANGES"/>
                 <include name="LICENSE"/>
-                <include name="LICENSE.base"/>
-                <include name="LICENSE.bin"/>
+                <include name="licenseParts/*"/>
                 <include name="NOTICE"/>
-                <include name="NOTICE.asc"/>
-                <include name="NOTICE.base"/>
-                <include name="NOTICE.bin"/>
                 <include name="README"/>
                 <include name="RELEASE_NOTES"/>
             	<include name="CONTRIBUTING"/>
@@ -626,9 +587,6 @@
         <!-- modules -->
         <antcall target="stage-modules"/>
         
-        <!-- blazeds -->
-        <antcall target="stage-blazeds"/>
-        
         <!-- asdoc -->
         <copy todir="${basedir}/temp/asdoc" includeEmptyDirs="false">
             <fileset dir="${basedir}/asdoc">
@@ -754,23 +712,6 @@
         </copy>
     </target>
     
-    <!-- blazeds -->
-    <target name="stage-blazeds">
-        <copy todir="${basedir}/temp/modules/flex-messaging-common/common" includeEmptyDirs="false">
-            <fileset dir="${BLAZEDS_HOME}/modules/common">
-                <include name="**/**"/>
-                <exclude name="target/**"/>
-                <exclude name="classes/**"/>
-            </fileset>
-        </copy>
-        <copy todir="${basedir}/temp/modules/flex-messaging-common" includeEmptyDirs="false">
-            <fileset dir="${BLAZEDS_HOME}">
-                <include name="LICENSE"/>
-                <include name="NOTICE"/>
-            </fileset>
-        </copy>
-    </target>
-    
     <target name="stage-bin">
         <copy todir="${basedir}/temp/bin" includeEmptyDirs="false">
             <fileset dir="${basedir}/bin">
@@ -862,8 +803,8 @@
             </fileset>
         </copy>
         <copy file="${basedir}/README.pb" tofile="${basedir}/temp/README" />
-        <copy file="${basedir}/LICENSE.pb" tofile="${basedir}/temp/LICENSE" />
-        <copy file="${basedir}/NOTICE.pb" tofile="${basedir}/temp/NOTICE" />
+        <copy file="${basedir}/licenseParts/LICENSE.pb" tofile="${basedir}/temp/LICENSE" />
+        <copy file="${basedir}/licenseParts/NOTICE.pb" tofile="${basedir}/temp/NOTICE" />
         <echo file="${basedir}/temp/RELEASE_NOTES">
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements.  See the NOTICE file distributed with
@@ -943,11 +884,11 @@
         
         <!-- concat the license file with the binary license file for the 3rd party deps -->
         <concat destfile="${basedir}/temp/LICENSE">
-            <filelist dir="${FLEX_HOME}" files="LICENSE,LICENSE.bin"/>
+            <filelist dir="${FLEX_HOME}" files="LICENSE,licenseParts/LICENSE.bin"/>
         </concat>
         <!-- concat the license file with the binary license file for the 3rd party deps -->
         <concat destfile="${basedir}/temp/NOTICE">
-            <filelist dir="${FLEX_HOME}" files="NOTICE,NOTICE.bin"/>
+            <filelist dir="${FLEX_HOME}" files="NOTICE,licenseParts/NOTICE.bin"/>
         </concat>
         
         <!-- use this to build frameworks -->
@@ -1854,10 +1795,7 @@
                 <!-- exclude text files -->
                 <exclude name="CONTRIBUTING"/>
                 <exclude name="CONTRIBUTORS"/>
-                <exclude name="LICENSE.bin"/>
-                <exclude name="NOTICE.bin"/>
-                <exclude name="NOTICE.asc"/>
-                <exclude name="NOTICE.base"/>
+                <exclude name="licenseParts/*"/>
                 <exclude name="modules/thirdparty/batik/lib/**/LICENSE*.txt"/>
                 <exclude name="modules/thirdparty/batik/lib/**/README*.txt"/>
                 <exclude name="frameworks/projects/flatspark/src/flatspark/assets/fonts/**/OFL.txt"/>
diff --git a/flex-sdk-description.xml b/flex-sdk-description.xml
index dd2db09..6ce6fde 100644
--- a/flex-sdk-description.xml
+++ b/flex-sdk-description.xml
@@ -18,8 +18,8 @@
 
 -->
 <flex-sdk-description>
-<name>Apache Flex 4.14.1 FP11.1 AIR16.0 en_US</name>
-<version>4.14.1</version>
-<build>0</build>
+<name>Apache Flex 4.15.0 FP18.0 AIR18.0 en_US</name>
+<version>4.15.0</version>
+<build>20151228</build>
 </flex-sdk-description>
-        
\ No newline at end of file
+        
diff --git a/frameworks/air-config.xml b/frameworks/air-config.xml
index 1f50b0e..b57aefc 100644
--- a/frameworks/air-config.xml
+++ b/frameworks/air-config.xml
@@ -21,10 +21,10 @@
 
 <flex-config>
     <!-- Specifies the minimum player version that will run the compiled SWF. -->
-    <target-player>11.1</target-player>
+    <target-player>18.0</target-player>
 
     <!-- Specifies the version of the compiled SWF -->
-    <swf-version>14</swf-version>
+    <swf-version>29</swf-version>
     
    <compiler>
 
diff --git a/frameworks/airmobile-config.xml b/frameworks/airmobile-config.xml
index 866d7a1..4a9b579 100644
--- a/frameworks/airmobile-config.xml
+++ b/frameworks/airmobile-config.xml
@@ -21,10 +21,10 @@
 
 <flex-config>
     <!-- Specifies the minimum player version that will run the compiled SWF. -->
-    <target-player>11.1</target-player>
+    <target-player>18.0</target-player>
 
     <!-- Specifies the version of the compiled SWF -->
-    <swf-version>14</swf-version>
+    <swf-version>29</swf-version>
     
    <compiler>
 
diff --git a/frameworks/build.xml b/frameworks/build.xml
index ce5205f..c902ec5 100644
--- a/frameworks/build.xml
+++ b/frameworks/build.xml
@@ -141,6 +141,7 @@
         <antcall target="apache-test"/>
         <antcall target="spark-test"/>
         <antcall target="advancedgrids-test"/>
+        <antcall target="framework-test"/>
     </target>
 
 	<target name="flex-config" depends="playerglobal-setswfversion" description="Copy the flex/air/airmobile config templates to flex/air/airmobile-config.xml and inject version numbers">
@@ -222,6 +223,15 @@
 		<condition property="playerglobal.swfversion" value="28">
 			<equals arg1="${playerglobal.version}" arg2="17.0" />
 		</condition>
+		<condition property="playerglobal.swfversion" value="29">
+			<equals arg1="${playerglobal.version}" arg2="18.0" />
+		</condition>
+		<condition property="playerglobal.swfversion" value="30">
+			<equals arg1="${playerglobal.version}" arg2="19.0" />
+		</condition>
+		<condition property="playerglobal.swfversion" value="31">
+			<equals arg1="${playerglobal.version}" arg2="20.0" />
+		</condition>
 	</target>	
 
     <!--
@@ -526,6 +536,9 @@
     <target name="advancedgrids-test" description="Tests for 'advancedgrids' project">
         <ant dir="${basedir}/projects/advancedgrids" target="test"/>
     </target>
+    <target name="framework-test" description="Tests for 'framework' project">
+        <ant dir="${basedir}/projects/framework" target="test"/>
+    </target>
 
     <target name="experimental" description="Clean build of experimental.swc">
         <ant dir="${basedir}/projects/experimental"/>
diff --git a/frameworks/downloads.xml b/frameworks/downloads.xml
index 0652183..5d09c39 100644
--- a/frameworks/downloads.xml
+++ b/frameworks/downloads.xml
@@ -31,8 +31,11 @@
     <!-- See note in modules/download.xml about this property. -->
     <property name="lib.opt.dir" value="${FLEX_HOME}/lib/external/optional"/>
 
-    <property name="adobe.flex.dir" value="adobe_flex_sdk_4.6"/>
-    <property name="adobe.flex.zip.file" value="flex_sdk_4.6.0.23201B.zip"/>
+    <property name="flex-deps.dir" value="flex_deps"/>
+    <property name="adobe.afe.file" value="afe.jar"/>
+    <property name="adobe.aglj40.file" value="aglj40.jar"/>
+    <property name="adobe.rideau.file" value="rideau.jar"/>
+    <property name="adobe.flex-fontkit.file" value="flex-fontkit.jar"/>
     <property name="pixelbender.url" value="http://www.apache.org/dyn/mirrors/mirrors.cgi" />
     <property name="pixelbender.folder" value="flex/pixelbender/1.0/binaries" />
     <property name="pixelbender.bin.zip" value="apache-flex-sdk-pixel-bender-1.0.0-bin.zip" />
@@ -75,7 +78,6 @@
         </delete>
         <delete includeEmptyDirs="true" failonerror="false">
             <fileset dir="${download.dir}">
-                <include name="${adobe.flex.zip.file}"/>
                 <include name="OSMF*/**"/>
                 <include name="osmf*/**"/>
                 <include name="swfobject*/**"/>
@@ -147,15 +149,16 @@
         description="Copies SWFObject from code.google.com">
         
         <mkdir dir="${download.dir}"/>
-        <get src="http://swfobject.googlecode.com/files/swfobject_2_2.zip" 
+        <get src="https://codeload.github.com/swfobject/swfobject/zip/2.2"
             dest="${download.dir}/swfobject_2_2.zip" 
             verbose="false"/>
         
-        <unzip src="${download.dir}/swfobject_2_2.zip" dest="${FLEX_HOME}/templates">
+        <unzip src="${download.dir}/swfobject_2_2.zip" dest="${FLEX_HOME}/templates/swfobject">
             <patternset>
-                <include name="swfobject/expressInstall.swf"/>
-                <include name="swfobject/swfobject.js"/>
+                <include name="swfobject-2.2/swfobject/expressInstall.swf"/>
+                <include name="swfobject-2.2/swfobject/swfobject.js"/>
             </patternset>
+            <flattenmapper />
         </unzip>
     </target>
 
@@ -215,7 +218,7 @@
 
     <!-- Prompt before downloading.  -->
     <target name="ask-font" unless="font.donot.ask"
-        description="Prompt the user before downloading BlaseDS">
+        description="Prompt the user before downloading Fontkit libraries">
         
         <property name="font.prompt.text" 
             value="Apache Flex can optionally integrate with Adobe's embedded font support.
@@ -238,59 +241,63 @@
     
     <target name="get-font-jars" depends="ask-font" if="do.font.install">
         
-        <available file="${download.dir}/${adobe.flex.dir}" type="dir"
-            property="adobe.flex.sdk.exists"/>
-        
-        <antcall target="get-adobe-flex-sdk"/>
-        
+        <antcall target="get-adobe-flex-dependencies"/>
+
         <copy todir="${lib.opt.dir}" verbose="true">
-            <fileset dir="${download.dir}/${adobe.flex.dir}/lib">
+            <fileset dir="${download.dir}">
                 <include name="afe.jar" />
                 <include name="aglj40.jar" />
                 <include name="flex-fontkit.jar" />
                 <include name="rideau.jar" />
             </fileset>
         </copy>
-        
-        <copy file="${download.dir}/${adobe.flex.dir}/license-adobesdk.htm" 
-            tofile="${lib.opt.dir}/flex-fontkit-LICENSE.htm" verbose="true"/>
-        <copy file="${download.dir}/${adobe.flex.dir}/license-adobesdk.htm" 
-            tofile="${lib.opt.dir}/afe-LICENSE.htm" verbose="true"/>
-        <copy file="${download.dir}/${adobe.flex.dir}/license-adobesdk.htm" 
-            tofile="${lib.opt.dir}/aglj40-LICENSE.htm" verbose="true"/>
-        <copy file="${download.dir}/${adobe.flex.dir}/license-adobesdk.htm" 
-            tofile="${lib.opt.dir}/rideau.jar-LICENSE.htm" verbose="true"/>
     </target>
         	
-    <target name="get-adobe-flex-sdk" unless="adobe.flex.sdk.exists"
-        description="Downloads the Adobe Flex 4.6 SDK">
-        
-        <available file="${download.dir}/${adobe.flex.zip.file}" type="file"
-            property="adobe.flex.sdk.download.exists"/>
-        
-        <antcall target="download-adobe-flex-sdk" />
-        
-        <unzip src="${download.dir}/${adobe.flex.zip.file}" 
-            dest="${download.dir}/${adobe.flex.dir}">
-            <patternset>
-                <include name="license-adobesdk.htm"/>
-                <include name="lib/flex-messaging-common.jar"/>
-                <include name="lib/afe.jar" />
-                <include name="lib/aglj40.jar" />
-                <include name="lib/flex-fontkit.jar" />
-                <include name="lib/rideau.jar" />
-            </patternset>
-        </unzip>
+    <target name="get-adobe-flex-dependencies"
+        description="Making sure the Adobe Flex Dependencies ar available">
+
+        <available file="${download.dir}/${adobe.afe.file}" type="file"
+                   property="adobe.afe.download.exists"/>
+        <available file="${download.dir}/${adobe.aglj40.file}" type="file"
+                   property="adobe.aglj40.download.exists"/>
+        <available file="${download.dir}/${adobe.rideau.file}" type="file"
+                   property="adobe.rideau.download.exists"/>
+        <available file="${download.dir}/${adobe.flex-fontkit.file}" type="file"
+                   property="adobe.flex-fontkit.download.exists"/>
+
+        <antcall target="download-afe" />
+        <antcall target="download-aglj40" />
+        <antcall target="download-rideau" />
+        <antcall target="download-flex-fontkit" />
+
     </target>
-    
-    <target name="download-adobe-flex-sdk" unless="adobe.flex.sdk.download.exists" >
-        <mkdir dir="${download.dir}"/>        
-        <get src="http://fpdownload.adobe.com/pub/flex/sdk/builds/flex4.6/${adobe.flex.zip.file}" 
-            dest="${download.dir}/${adobe.flex.zip.file}"/>
+
+    <target name="download-afe" unless="adobe.afe.download.exists" >
+        <mkdir dir="${download.dir}"/>
+        <get src="http://sourceforge.net/adobe/flexsdk/code/HEAD/tree/trunk/lib/afe.jar?format=raw"
+            dest="${download.dir}/${adobe.afe.file}"/>
     </target>
-    
+
+    <target name="download-aglj40" unless="adobe.aglj40.download.exists" >
+        <mkdir dir="${download.dir}"/>
+        <get src="http://sourceforge.net/adobe/flexsdk/code/HEAD/tree/trunk/lib/aglj40.jar?format=raw"
+             dest="${download.dir}/${adobe.aglj40.file}"/>
+    </target>
+
+    <target name="download-rideau" unless="adobe.rideau.download.exists" >
+        <mkdir dir="${download.dir}"/>
+        <get src="http://sourceforge.net/adobe/flexsdk/code/HEAD/tree/trunk/lib/rideau.jar?format=raw"
+             dest="${download.dir}/${adobe.rideau.file}"/>
+    </target>
+
+    <target name="download-flex-fontkit" unless="adobe.flex-fontkit.download.exists" >
+        <mkdir dir="${download.dir}"/>
+        <get src="http://sourceforge.net/adobe/flexsdk/code/HEAD/tree/trunk/lib/flex-fontkit.jar?format=raw"
+             dest="${download.dir}/${adobe.flex-fontkit.file}"/>
+    </target>
+
     <target name="clean-adobe-flex-sdk">
-        <delete dir="${download.dir}/${adobe.flex.dir}"/>
+        <delete dir="${download.dir}/${flex-deps.dir}"/>
     </target>
 
     <target name="get_from_mirror">
@@ -314,11 +321,21 @@
     <target name="download_using_mirror" if="usingmirror">
         <get src="${server}/${folder}/${file}?asjson=true" verbose="true" dest="${basedir}/mirror.json" />
         <replace file="${basedir}/mirror.json">
+            <replacefilter token="{"
+            value="" />
+            <replacefilter token="}"
+            value="" />
             <replacefilter token="&quot;"
             value="" />
-            <replacefilter token=": "
+            <replacefilter token=","
+            value="&#x0d;&#x0a;" />
+            <replacefilter token=":"
             value="=" />
         </replace>
+        <replace file="${basedir}/mirror.json">
+            <replacefilter token="http="
+            value="http:" />
+        </replace>
         <property file="${basedir}/mirror.json" />
         <delete file="${basedir}/mirror.json" />
         <echo>Using mirror: ${preferred}</echo>
diff --git a/frameworks/flex-config.xml b/frameworks/flex-config.xml
index 7092b13..6ecec99 100644
--- a/frameworks/flex-config.xml
+++ b/frameworks/flex-config.xml
@@ -22,10 +22,10 @@
 
 <flex-config>
     <!-- Specifies the minimum player version that will run the compiled SWF. -->
-   <target-player>11.1</target-player>
+   <target-player>18.0</target-player>
 
     <!-- Specifies the version of the compiled SWF -->
-   <swf-version>14</swf-version>
+   <swf-version>29</swf-version>
 
    <compiler>
 
diff --git a/frameworks/projects/advancedgrids/src/mx/collections/HierarchicalCollectionView.as b/frameworks/projects/advancedgrids/src/mx/collections/HierarchicalCollectionView.as
index d752e8e..987a684 100644
--- a/frameworks/projects/advancedgrids/src/mx/collections/HierarchicalCollectionView.as
+++ b/frameworks/projects/advancedgrids/src/mx/collections/HierarchicalCollectionView.as
@@ -103,11 +103,6 @@
 
     /**
      *  @private
-     */
-    private var cursor:HierarchicalCollectionViewCursor;
-
-    /**
-     *  @private
      *  The total number of nodes we know about.
      */
     private var currentLength:int;
@@ -323,7 +318,9 @@
     //----------------------------------
 
     /**
-     *  The length of the currently parsed collection.  
+     *  The length of the currently parsed collection (i.e. the number
+     *  of nodes that can be accessed by navigating the collection via
+     *  HierarchicalCollectionViewCursor)
      *  
      *  @langversion 3.0
      *  @playerversion Flash 9
@@ -375,7 +372,7 @@
      *
      *  @return IViewCursor instance.
      *
-     *  @see mx.utils.IViewCursor
+     *  @see mx.collections.IViewCursor
      *  
      *  @langversion 3.0
      *  @playerversion Flash 9
@@ -643,7 +640,18 @@
         // check if the node is already opened
         if (_openNodes[uid] != null)
             return;
-        
+
+        // check if the node is accessible, abort if not
+        var parent:* = getParentItem(node);
+        while(parent)
+        {
+            parent = getParentItem(parent);
+        }
+
+        //undefined means an ancestor is not open, which means the node is inaccessible
+        if(parent === undefined)
+            return;
+
         // add the node to the openNodes object and update the length
         _openNodes[uid] = node;
         
@@ -792,14 +800,12 @@
      *     </li>
      * </ul>
      *
-     *  @param node The Object that defines the parent node.
+     *  @param parent The Object that defines the parent node.
      * 
      *  @param newChild The Object that defines the child node.
      * 
      *  @param index The 0-based index of where to insert the child node.
-     * 
-     *  @param source The entire collection that this node is a part of.
-     * 
+     *
      *  @return <code>true</code> if the child is added successfully.
      *  
      *  @langversion 3.0
@@ -1295,9 +1301,9 @@
     
     /**
      * @private
-     * Force a recalulation of length   
+     * Force a recalculation of length
      */
-     private function updateLength(node:Object=null, parent:Object = null):void
+     private function updateLength():void
      {
         currentLength = calculateLength();
      }
@@ -1527,7 +1533,6 @@
                 }
 
                 // prune the replacements from this list
-                var j:int = 0;
                 for (i = 0; i < n; i++)
                 {
                     node = ce.items[i].oldValue;
@@ -1648,7 +1653,6 @@
                 }
 
                 // prune the replacements from this list
-                var j:int = 0;
                 for (i = 0; i < n; i++)
                 {
                     changingNode = ce.items[i].oldValue;
@@ -1712,9 +1716,6 @@
                                         value:Object, 
                                         detail:Object):void
     {
-        var prop:String;
-        var oldValue:Object;
-        var newValue:Object;
         var children:XMLListCollection;
         var location:int;
         var event:CollectionEvent;
diff --git a/frameworks/projects/advancedgrids/src/mx/controls/AdvancedDataGrid.as b/frameworks/projects/advancedgrids/src/mx/controls/AdvancedDataGrid.as
index 5e1995f..fe4b981 100644
--- a/frameworks/projects/advancedgrids/src/mx/controls/AdvancedDataGrid.as
+++ b/frameworks/projects/advancedgrids/src/mx/controls/AdvancedDataGrid.as
@@ -20,89 +20,89 @@
 package mx.controls
 {
 
-import flash.display.DisplayObject;
-import flash.display.Graphics;
-import flash.display.Shape;
-import flash.display.Sprite;
-import flash.events.Event;
-import flash.events.KeyboardEvent;
-import flash.events.MouseEvent;
-import flash.geom.Point;
-import flash.geom.Rectangle;
-import flash.ui.Keyboard;
-import flash.utils.Dictionary;
-import flash.utils.describeType;
-import flash.utils.getDefinitionByName;
-import flash.utils.getQualifiedClassName;
+    import flash.display.DisplayObject;
+    import flash.display.Graphics;
+    import flash.display.Shape;
+    import flash.display.Sprite;
+    import flash.events.Event;
+    import flash.events.KeyboardEvent;
+    import flash.events.MouseEvent;
+    import flash.geom.Point;
+    import flash.geom.Rectangle;
+    import flash.ui.Keyboard;
+    import flash.utils.Dictionary;
+    import flash.utils.describeType;
+    import flash.utils.getDefinitionByName;
+    import flash.utils.getQualifiedClassName;
 
-import mx.collections.ArrayCollection;
-import mx.collections.CursorBookmark;
-import mx.collections.HierarchicalCollectionView;
-import mx.collections.HierarchicalCollectionViewCursor;
-import mx.collections.HierarchicalData;
-import mx.collections.ICollectionView;
-import mx.collections.IGroupingCollection;
-import mx.collections.IGroupingCollection2;
-import mx.collections.IHierarchicalCollectionView;
-import mx.collections.IHierarchicalData;
-import mx.collections.IViewCursor;
-import mx.collections.ItemResponder;
-import mx.collections.Sort;
-import mx.collections.SortField;
-import mx.collections.SummaryObject;
-import mx.collections.errors.ItemPendingError;
-import mx.controls.advancedDataGridClasses.AdvancedDataGridBaseSelectionData;
-import mx.controls.advancedDataGridClasses.AdvancedDataGridBaseSelectionPending;
-import mx.controls.advancedDataGridClasses.AdvancedDataGridColumn;
-import mx.controls.advancedDataGridClasses.AdvancedDataGridColumnGroup;
-import mx.controls.advancedDataGridClasses.AdvancedDataGridGroupItemRenderer;
-import mx.controls.advancedDataGridClasses.AdvancedDataGridHeaderInfo;
-import mx.controls.advancedDataGridClasses.AdvancedDataGridListData;
-import mx.controls.advancedDataGridClasses.AdvancedDataGridRendererDescription;
-import mx.controls.advancedDataGridClasses.IAdvancedDataGridRendererProvider;
-import mx.controls.advancedDataGridClasses.SortInfo;
-import mx.controls.listClasses.BaseListData;
-import mx.controls.listClasses.IDropInListItemRenderer;
-import mx.controls.listClasses.IListItemRenderer;
-import mx.controls.listClasses.ListBaseSeekPending;
-import mx.controls.listClasses.ListRowInfo;
-import mx.core.ClassFactory;
-import mx.core.EdgeMetrics;
-import mx.core.EventPriority;
-import mx.core.FlexShape;
-import mx.core.FlexSprite;
-import mx.core.IDataRenderer;
-import mx.core.IFactory;
-import mx.core.IFlexDisplayObject;
-import mx.core.IInvalidating;
-import mx.core.IUITextField;
-import mx.core.ScrollPolicy;
-import mx.core.SpriteAsset;
-import mx.core.UIComponent;
-import mx.core.UIComponentGlobals;
-import mx.core.mx_internal;
-import mx.effects.Tween;
-import mx.events.AdvancedDataGridEvent;
-import mx.events.AdvancedDataGridEventReason;
-import mx.events.CollectionEvent;
-import mx.events.CollectionEventKind;
-import mx.events.DragEvent;
-import mx.events.FlexEvent;
-import mx.events.IndexChangedEvent;
-import mx.events.ListEvent;
-import mx.events.ListEventReason;
-import mx.events.ScrollEvent;
-import mx.events.ScrollEventDetail;
-import mx.events.ScrollEventDirection;
-import mx.events.TweenEvent;
-import mx.managers.DragManager;
-import mx.resources.IResourceManager;
-import mx.resources.ResourceManager;
-import mx.styles.ISimpleStyleClient;
-import mx.styles.IStyleClient;
-import mx.utils.UIDUtil;
+    import mx.collections.ArrayCollection;
+    import mx.collections.CursorBookmark;
+    import mx.collections.HierarchicalCollectionView;
+    import mx.collections.HierarchicalData;
+    import mx.collections.ICollectionView;
+    import mx.collections.IGroupingCollection;
+    import mx.collections.IGroupingCollection2;
+    import mx.collections.IHierarchicalCollectionView;
+    import mx.collections.IHierarchicalCollectionViewCursor;
+    import mx.collections.IHierarchicalData;
+    import mx.collections.IViewCursor;
+    import mx.collections.ItemResponder;
+    import mx.collections.Sort;
+    import mx.collections.SortField;
+    import mx.collections.SummaryObject;
+    import mx.collections.errors.ItemPendingError;
+    import mx.controls.advancedDataGridClasses.AdvancedDataGridBaseSelectionData;
+    import mx.controls.advancedDataGridClasses.AdvancedDataGridBaseSelectionPending;
+    import mx.controls.advancedDataGridClasses.AdvancedDataGridColumn;
+    import mx.controls.advancedDataGridClasses.AdvancedDataGridColumnGroup;
+    import mx.controls.advancedDataGridClasses.AdvancedDataGridGroupItemRenderer;
+    import mx.controls.advancedDataGridClasses.AdvancedDataGridHeaderInfo;
+    import mx.controls.advancedDataGridClasses.AdvancedDataGridListData;
+    import mx.controls.advancedDataGridClasses.AdvancedDataGridRendererDescription;
+    import mx.controls.advancedDataGridClasses.IAdvancedDataGridRendererProvider;
+    import mx.controls.advancedDataGridClasses.SortInfo;
+    import mx.controls.listClasses.BaseListData;
+    import mx.controls.listClasses.IDropInListItemRenderer;
+    import mx.controls.listClasses.IListItemRenderer;
+    import mx.controls.listClasses.ListBaseSeekPending;
+    import mx.controls.listClasses.ListRowInfo;
+    import mx.core.ClassFactory;
+    import mx.core.EdgeMetrics;
+    import mx.core.EventPriority;
+    import mx.core.FlexShape;
+    import mx.core.FlexSprite;
+    import mx.core.IDataRenderer;
+    import mx.core.IFactory;
+    import mx.core.IFlexDisplayObject;
+    import mx.core.IInvalidating;
+    import mx.core.IUITextField;
+    import mx.core.ScrollPolicy;
+    import mx.core.SpriteAsset;
+    import mx.core.UIComponent;
+    import mx.core.UIComponentGlobals;
+    import mx.core.mx_internal;
+    import mx.effects.Tween;
+    import mx.events.AdvancedDataGridEvent;
+    import mx.events.AdvancedDataGridEventReason;
+    import mx.events.CollectionEvent;
+    import mx.events.CollectionEventKind;
+    import mx.events.DragEvent;
+    import mx.events.FlexEvent;
+    import mx.events.IndexChangedEvent;
+    import mx.events.ListEvent;
+    import mx.events.ListEventReason;
+    import mx.events.ScrollEvent;
+    import mx.events.ScrollEventDetail;
+    import mx.events.ScrollEventDirection;
+    import mx.events.TweenEvent;
+    import mx.managers.DragManager;
+    import mx.resources.IResourceManager;
+    import mx.resources.ResourceManager;
+    import mx.styles.ISimpleStyleClient;
+    import mx.styles.IStyleClient;
+    import mx.utils.UIDUtil;
 
-use namespace mx_internal;
+    use namespace mx_internal;
 
 //--------------------------------------
 //  Events
@@ -3583,7 +3583,7 @@
             advancedDataGridListData = 
                 super.makeListData(data, uid, rowNum,columnNum,column) as AdvancedDataGridListData;
 
-        if (iterator && iterator is HierarchicalCollectionViewCursor && columnNum == treeColumnIndex
+        if (iterator && iterator is IHierarchicalCollectionViewCursor && columnNum == treeColumnIndex
                         && !(data is AdvancedDataGridColumn))
             initListData(data, advancedDataGridListData);
         else
diff --git a/frameworks/projects/advancedgrids/src/mx/controls/AdvancedDataGridBaseEx.as b/frameworks/projects/advancedgrids/src/mx/controls/AdvancedDataGridBaseEx.as
index 3bdf4bd..b0a1f67 100644
--- a/frameworks/projects/advancedgrids/src/mx/controls/AdvancedDataGridBaseEx.as
+++ b/frameworks/projects/advancedgrids/src/mx/controls/AdvancedDataGridBaseEx.as
@@ -6133,13 +6133,8 @@
         }
 
         column.sortDescending = desc;
-        var field:ISortField = new SortField(columnName);
-        field.sortCompareType = column.sortCompareType;
-        field.descending = desc;
-        
-        if (column.sortCompareFunction != null)
-            field.compareFunction = column.sortCompareFunction;
-		
+        var field:ISortField = new SortField(columnName, false, desc, null, column.sortCompareType, column.sortCompareFunction);
+
 		fields = collection.sort.fields;
 		if (fields == null)
 			fields = [];
@@ -6892,7 +6887,7 @@
      *  @private
      *  Catches any events from the model. Optimized for editing one item.
      *  Creates columns when there are none. Inherited from list.
-     *  @param eventObj
+     *  @param event
      */
     override protected function collectionChangeHandler(event:Event):void
     {
diff --git a/frameworks/projects/advancedgrids/src/mx/core/Version.as b/frameworks/projects/advancedgrids/src/mx/core/Version.as
index 3b6707f..3077bda 100644
--- a/frameworks/projects/advancedgrids/src/mx/core/Version.as
+++ b/frameworks/projects/advancedgrids/src/mx/core/Version.as
@@ -23,4 +23,4 @@
  *  @private
  *  Version string for this class.
  */
-mx_internal static const VERSION:String = "4.14.1.0";
+mx_internal static const VERSION:String = "4.16.0.0";
diff --git a/frameworks/projects/airframework/src/mx/core/Version.as b/frameworks/projects/airframework/src/mx/core/Version.as
index 3b6707f..3077bda 100644
--- a/frameworks/projects/airframework/src/mx/core/Version.as
+++ b/frameworks/projects/airframework/src/mx/core/Version.as
@@ -23,4 +23,4 @@
  *  @private
  *  Version string for this class.
  */
-mx_internal static const VERSION:String = "4.14.1.0";
+mx_internal static const VERSION:String = "4.16.0.0";
diff --git a/frameworks/projects/airspark/src/spark/components/Window.as b/frameworks/projects/airspark/src/spark/components/Window.as
index c6472e6..bc89733 100644
--- a/frameworks/projects/airspark/src/spark/components/Window.as
+++ b/frameworks/projects/airspark/src/spark/components/Window.as
@@ -749,7 +749,7 @@
      */
     override public function get maxHeight():Number
     {
-        if (nativeWindow && !maxHeightChanged)
+        if (nativeWindow && !maxHeightChanged && !nativeWindow.closed && nativeWindow.maxSize)
             return nativeWindow.maxSize.y - chromeHeight();
         else
             return _maxHeight;
@@ -797,7 +797,7 @@
      */
     override public function get maxWidth():Number
     {
-        if (nativeWindow && !maxWidthChanged)
+        if (nativeWindow && !maxWidthChanged && !nativeWindow.closed && nativeWindow.maxSize)
             return nativeWindow.maxSize.x - chromeWidth();
         else
             return _maxWidth;
@@ -851,7 +851,7 @@
      */
     override public function get minHeight():Number
     {
-        if (nativeWindow && !minHeightChanged)
+        if (nativeWindow && !minHeightChanged && !nativeWindow.closed && nativeWindow.minSize)
             return nativeWindow.minSize.y - chromeHeight();
         else
             return _minHeight;
@@ -899,7 +899,7 @@
      */
     override public function get minWidth():Number
     {
-        if (nativeWindow && !minWidthChanged)
+        if (nativeWindow && !minWidthChanged && !nativeWindow.closed && nativeWindow.minSize)
             return nativeWindow.minSize.x - chromeWidth();
         else
             return _minWidth;
diff --git a/frameworks/projects/airspark/src/spark/components/WindowedApplication.as b/frameworks/projects/airspark/src/spark/components/WindowedApplication.as
index 8843e5a..71e55f5 100644
--- a/frameworks/projects/airspark/src/spark/components/WindowedApplication.as
+++ b/frameworks/projects/airspark/src/spark/components/WindowedApplication.as
@@ -690,7 +690,7 @@
      */
     override public function get maxHeight():Number
     {
-        if (nativeWindow && !maxHeightChanged)
+        if (nativeWindow && !maxHeightChanged && !nativeWindow.closed && nativeWindow.maxSize)
             return nativeWindow.maxSize.y - chromeHeight();
         else
             return _maxHeight;
@@ -738,7 +738,7 @@
      */
     override public function get maxWidth():Number
     {
-        if (nativeWindow && !maxWidthChanged)
+        if (nativeWindow && !maxWidthChanged && !nativeWindow.closed && nativeWindow.maxSize)
             return nativeWindow.maxSize.x - chromeWidth();
         else
             return _maxWidth;
@@ -792,7 +792,7 @@
      */
     override public function get minHeight():Number
     {
-        if (nativeWindow && !minHeightChanged)
+        if (nativeWindow && !minHeightChanged && !nativeWindow.closed && nativeWindow.minSize)
             return nativeWindow.minSize.y - chromeHeight();
         else
             return _minHeight;
@@ -840,7 +840,7 @@
      */
     override public function get minWidth():Number
     {
-        if (nativeWindow && !minWidthChanged)
+        if (nativeWindow && !minWidthChanged && !nativeWindow.closed && nativeWindow.minSize)
             return nativeWindow.minSize.x - chromeWidth();
         else
             return _minWidth;
diff --git a/frameworks/projects/airspark/src/spark/core/Version.as b/frameworks/projects/airspark/src/spark/core/Version.as
index 3b6707f..3077bda 100644
--- a/frameworks/projects/airspark/src/spark/core/Version.as
+++ b/frameworks/projects/airspark/src/spark/core/Version.as
@@ -23,4 +23,4 @@
  *  @private
  *  Version string for this class.
  */
-mx_internal static const VERSION:String = "4.14.1.0";
+mx_internal static const VERSION:String = "4.16.0.0";
diff --git a/frameworks/projects/apache/src/core/Version.as b/frameworks/projects/apache/src/core/Version.as
index 3b6707f..3077bda 100644
--- a/frameworks/projects/apache/src/core/Version.as
+++ b/frameworks/projects/apache/src/core/Version.as
@@ -23,4 +23,4 @@
  *  @private
  *  Version string for this class.
  */
-mx_internal static const VERSION:String = "4.14.1.0";
+mx_internal static const VERSION:String = "4.16.0.0";
diff --git a/frameworks/projects/apache/src/org/apache/flex/collections/VectorList.as b/frameworks/projects/apache/src/org/apache/flex/collections/VectorList.as
index 5892935..52b34a0 100644
--- a/frameworks/projects/apache/src/org/apache/flex/collections/VectorList.as
+++ b/frameworks/projects/apache/src/org/apache/flex/collections/VectorList.as
@@ -597,8 +597,8 @@
     }
     
     /**
-     *  Called whenever any of the contained items in the list fire an
-     *  ObjectChange event.  
+     *  Called whenever any of the contained items in the list fires a
+     *  <code>PropertyChangeEvent</code>.
      *  Wraps it in a CollectionEventKind.UPDATE.
      */    
     protected function itemUpdateHandler(event:PropertyChangeEvent):void
diff --git a/frameworks/projects/apache/src/org/apache/flex/promises/Promise.as b/frameworks/projects/apache/src/org/apache/flex/promises/Promise.as
index aacd101..ef39926 100644
--- a/frameworks/projects/apache/src/org/apache/flex/promises/Promise.as
+++ b/frameworks/projects/apache/src/org/apache/flex/promises/Promise.as
@@ -182,8 +182,7 @@
 		try 
 		{
 			if (result && 
-				(typeof(result) === 'object' || 
-				 typeof(result) === 'function') &&
+				result.hasOwnProperty("then") &&
 				result.then is Function)
 			{
 				doResolve_(result.then, resolve_, reject_);
diff --git a/frameworks/projects/apache/tests/promises/PromisesTestSuite.as b/frameworks/projects/apache/tests/promises/PromisesTestSuite.as
index 2fbb424..223a579 100644
--- a/frameworks/projects/apache/tests/promises/PromisesTestSuite.as
+++ b/frameworks/projects/apache/tests/promises/PromisesTestSuite.as
@@ -21,6 +21,7 @@
 {
 
 import promises.cases.PromisesBasicTests;
+import promises.cases.PromisesJIRATests;
 
 [Suite]
 [RunWith("org.flexunit.runners.Suite")]
@@ -28,6 +29,8 @@
 {
 
 	public var promisesBasic:PromisesBasicTests;
+	
+	public var promisesJIRA:PromisesJIRATests;
 
 }
 }
\ No newline at end of file
diff --git a/frameworks/projects/apache/tests/promises/cases/PromisesJIRATests.as b/frameworks/projects/apache/tests/promises/cases/PromisesJIRATests.as
new file mode 100644
index 0000000..a6a3d9e
--- /dev/null
+++ b/frameworks/projects/apache/tests/promises/cases/PromisesJIRATests.as
@@ -0,0 +1,130 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 promises.cases
+{
+
+import flash.events.TimerEvent;
+import flash.net.URLRequest;
+import flash.utils.Timer;
+
+import org.apache.flex.promises.Promise;
+import org.apache.flex.promises.interfaces.IThenable;
+import org.flexunit.asserts.assertEquals;
+import org.flexunit.async.Async;
+
+public class PromisesJIRATests
+{
+
+	//--------------------------------------------------------------------------
+	//
+	//    Variables
+	//
+	//--------------------------------------------------------------------------
+	
+	private var expected_:*;
+	
+	private var promise_:IThenable;
+	
+	private var got_:*;
+	
+	private var timer_:Timer;
+	
+	
+	
+	//--------------------------------------------------------------------------
+	//
+	//    Methods
+	//
+	//--------------------------------------------------------------------------
+	
+	//----------------------------------
+	//    parseGot_
+	//----------------------------------
+	
+	private function parseGot_(value:*):void {
+		this.got_ = value;
+	}
+	
+	//----------------------------------
+	//    setUp
+	//----------------------------------
+	
+	[Before(async)]
+	public function setUp():void
+	{
+		this.timer_ = new Timer(100, 1);
+	}
+	
+	//----------------------------------
+	//    tearDown
+	//----------------------------------
+	
+	[After(async)]
+	public function tearDown():void
+	{
+		this.promise_ = null;
+		
+		if (this.timer_)
+		{
+			this.timer_.stop();
+			this.timer_ = null;
+		}
+	}
+	
+	//----------------------------------
+	//    verifyGotType_
+	//----------------------------------
+	
+	private function verifyGotType_(event:TimerEvent, result:*):void {
+		assertEquals(this.expected_, this.got_.toString());
+	}
+	
+
+	
+	//--------------------------------------------------------------------------
+	//
+	//    Tests
+	//
+	//--------------------------------------------------------------------------
+	
+	//----------------------------------
+	//    test_FLEX34753
+	//----------------------------------
+	
+	[Test(async)]
+	public function test_FLEX34753():void
+	{
+		Async.handleEvent(this, timer_, TimerEvent.TIMER_COMPLETE, verifyGotType_);
+		
+		timer_.start();
+		
+		promise_ = new Promise(function (fulfill:Function = null, reject:Function = null):*
+		{
+			var urlRequest:URLRequest = new URLRequest('http://flex.apache.org');
+			
+			fulfill(urlRequest);
+		});
+		
+		expected_ = '[object URLRequest]';
+		
+		promise_.then(parseGot_);
+	}
+	
+}}
\ No newline at end of file
diff --git a/frameworks/projects/automation/src/mx/core/Version.as b/frameworks/projects/automation/src/mx/core/Version.as
index 3b6707f..3077bda 100644
--- a/frameworks/projects/automation/src/mx/core/Version.as
+++ b/frameworks/projects/automation/src/mx/core/Version.as
@@ -23,4 +23,4 @@
  *  @private
  *  Version string for this class.
  */
-mx_internal static const VERSION:String = "4.14.1.0";
+mx_internal static const VERSION:String = "4.16.0.0";
diff --git a/frameworks/projects/automation_agent/src/mx/core/Version.as b/frameworks/projects/automation_agent/src/mx/core/Version.as
index 3b6707f..3077bda 100644
--- a/frameworks/projects/automation_agent/src/mx/core/Version.as
+++ b/frameworks/projects/automation_agent/src/mx/core/Version.as
@@ -23,4 +23,4 @@
  *  @private
  *  Version string for this class.
  */
-mx_internal static const VERSION:String = "4.14.1.0";
+mx_internal static const VERSION:String = "4.16.0.0";
diff --git a/frameworks/projects/automation_air/src/mx/core/Version.as b/frameworks/projects/automation_air/src/mx/core/Version.as
index 3b6707f..3077bda 100644
--- a/frameworks/projects/automation_air/src/mx/core/Version.as
+++ b/frameworks/projects/automation_air/src/mx/core/Version.as
@@ -23,4 +23,4 @@
  *  @private
  *  Version string for this class.
  */
-mx_internal static const VERSION:String = "4.14.1.0";
+mx_internal static const VERSION:String = "4.16.0.0";
diff --git a/frameworks/projects/automation_dmv/src/mx/core/Version.as b/frameworks/projects/automation_dmv/src/mx/core/Version.as
index 3b6707f..3077bda 100644
--- a/frameworks/projects/automation_dmv/src/mx/core/Version.as
+++ b/frameworks/projects/automation_dmv/src/mx/core/Version.as
@@ -23,4 +23,4 @@
  *  @private
  *  Version string for this class.
  */
-mx_internal static const VERSION:String = "4.14.1.0";
+mx_internal static const VERSION:String = "4.16.0.0";
diff --git a/frameworks/projects/automation_flashflexkit/src/mx/core/Version.as b/frameworks/projects/automation_flashflexkit/src/mx/core/Version.as
index dbcafc3..0b10511 100644
--- a/frameworks/projects/automation_flashflexkit/src/mx/core/Version.as
+++ b/frameworks/projects/automation_flashflexkit/src/mx/core/Version.as
@@ -24,4 +24,4 @@
  *  @private
  *  Version string for this class.
  */
-mx_internal static const VERSION:String = "4.14.1.0";
+mx_internal static const VERSION:String = "4.16.0.0";
diff --git a/frameworks/projects/automation_spark/src/mx/core/Version.as b/frameworks/projects/automation_spark/src/mx/core/Version.as
index 3b6707f..3077bda 100644
--- a/frameworks/projects/automation_spark/src/mx/core/Version.as
+++ b/frameworks/projects/automation_spark/src/mx/core/Version.as
@@ -23,4 +23,4 @@
  *  @private
  *  Version string for this class.
  */
-mx_internal static const VERSION:String = "4.14.1.0";
+mx_internal static const VERSION:String = "4.16.0.0";
diff --git a/frameworks/projects/automation_spark/src/spark/core/Version.as b/frameworks/projects/automation_spark/src/spark/core/Version.as
index 3b6707f..3077bda 100644
--- a/frameworks/projects/automation_spark/src/spark/core/Version.as
+++ b/frameworks/projects/automation_spark/src/spark/core/Version.as
@@ -23,4 +23,4 @@
  *  @private
  *  Version string for this class.
  */
-mx_internal static const VERSION:String = "4.14.1.0";
+mx_internal static const VERSION:String = "4.16.0.0";
diff --git a/frameworks/projects/charts/src/mx/charts/series/AreaSeries.as b/frameworks/projects/charts/src/mx/charts/series/AreaSeries.as
index 1b26975..5d89c71 100644
--- a/frameworks/projects/charts/src/mx/charts/series/AreaSeries.as
+++ b/frameworks/projects/charts/src/mx/charts/series/AreaSeries.as
@@ -283,6 +283,9 @@
         _instanceCache.creationCallback = applyItemRendererProperties;
         
         dataTransform = new CartesianTransform();
+
+		// our style settings
+		initStyles();
     }
 
     //--------------------------------------------------------------------------
@@ -869,11 +872,13 @@
 	/**
 	 *  @private
 	 */
-	private function initStyles():Boolean
+	private function initStyles():void
 	{
 		HaloDefaults.init(styleManager);
-		
+
 		var areaSeriesStyle:CSSStyleDeclaration = HaloDefaults.findStyleDeclaration(styleManager, "mx.charts.series.AreaSeries");
+
+
 		if (areaSeriesStyle)
 		{
 			areaSeriesStyle.setStyle("areaRenderer", new ClassFactory(mx.charts.renderers.AreaRenderer));
@@ -882,10 +887,18 @@
 			areaSeriesStyle.setStyle("fills", []);
 			areaSeriesStyle.setStyle("stroke", HaloDefaults.pointStroke);
 		}
-		
-		return true;
+        else
+        {
+            //Fallback to set the style to this chart directly.
+			setStyle("areaRenderer", new ClassFactory(mx.charts.renderers.AreaRenderer));
+			setStyle("legendMarkerRenderer", new ClassFactory(AreaSeriesLegendMarker));
+			setStyle("areaFill", new SolidColor(0x000000));
+			setStyle("fills", []);
+			setStyle("stroke", HaloDefaults.pointStroke);
+        }
 	}
-	
+
+
 	/**
 	 *  @inheritDoc
 	 *  
@@ -902,9 +915,6 @@
 			return;
 		
 		_moduleFactoryInitialized[factory] = true;
-		
-		// our style settings
-		initStyles();
 	}
 	
     /**
diff --git a/frameworks/projects/charts/src/mx/charts/series/BarSeries.as b/frameworks/projects/charts/src/mx/charts/series/BarSeries.as
index 864e37e..9ca363a 100644
--- a/frameworks/projects/charts/src/mx/charts/series/BarSeries.as
+++ b/frameworks/projects/charts/src/mx/charts/series/BarSeries.as
@@ -273,6 +273,9 @@
         };
         
         dataTransform = new CartesianTransform();
+
+        // our style settings
+        initStyles();
     }
     
     private function getLabelClass():Class
@@ -1058,11 +1061,13 @@
 	/**
      *  @private
      */
-    private function initStyles():Boolean
+    private function initStyles():void
     {
         HaloDefaults.init(styleManager);
 		
 		var barSeriesStyle:CSSStyleDeclaration = HaloDefaults.findStyleDeclaration(styleManager, "mx.charts.series.BarSeries");
+
+
 		if (barSeriesStyle)
 		{
 			barSeriesStyle.setStyle("itemRenderer", new ClassFactory(mx.charts.renderers.BoxItemRenderer));
@@ -1070,10 +1075,17 @@
 			barSeriesStyle.setStyle("fills", []);
 			barSeriesStyle.setStyle("stroke", HaloDefaults.emptyStroke);
 		}
-		
-        return true;
+        else
+        {
+            //Fallback to set the style to this chart directly.
+			setStyle("itemRenderer", new ClassFactory(mx.charts.renderers.BoxItemRenderer));
+			setStyle("fill", new SolidColor(0x000000));
+			setStyle("fills", []);
+			setStyle("stroke", HaloDefaults.emptyStroke);
+        }
     }
-    
+
+
     /**
      *  @inheritDoc
      *  
@@ -1090,9 +1102,6 @@
             return;
         
         _moduleFactoryInitialized[factory] = true;
-        
-        // our style settings
-        initStyles();
     }
     
     /**
diff --git a/frameworks/projects/charts/src/mx/charts/series/BubbleSeries.as b/frameworks/projects/charts/src/mx/charts/series/BubbleSeries.as
index 57bfcfb..428e83a 100644
--- a/frameworks/projects/charts/src/mx/charts/series/BubbleSeries.as
+++ b/frameworks/projects/charts/src/mx/charts/series/BubbleSeries.as
@@ -200,6 +200,9 @@
         _instanceCache.creationCallback = applyItemRendererProperties;
         
         dataTransform = new CartesianTransform();
+
+		// our style settings
+		initStyles();
     }
 
     //--------------------------------------------------------------------------
@@ -699,11 +702,13 @@
 	/**
 	 *  @private
 	 */
-	private function initStyles():Boolean
+	private function initStyles():void
 	{
 		HaloDefaults.init(styleManager);
-		
+
 		var bubbleSeriesStyle:CSSStyleDeclaration = HaloDefaults.findStyleDeclaration(styleManager, "mx.charts.series.BubbleSeries");
+
+
 		if (bubbleSeriesStyle)
 		{
 			bubbleSeriesStyle.setStyle("itemRenderer", new ClassFactory(mx.charts.renderers.CircleItemRenderer));
@@ -711,10 +716,17 @@
 			bubbleSeriesStyle.setStyle("fills", []);
 			bubbleSeriesStyle.setStyle("stroke", new SolidColorStroke(0,1,0.2));
 		}
-		
-		return true;
+        else
+        {
+            //Fallback to set the style to this chart directly.
+			setStyle("itemRenderer", new ClassFactory(mx.charts.renderers.CircleItemRenderer));
+			setStyle("fill", new SolidColor(0x444444));
+			setStyle("fills", []);
+			setStyle("stroke", new SolidColorStroke(0,1,0.2));
+        }
 	}
-	
+
+
 	/**
 	 *  @inheritDoc
 	 *  
@@ -731,9 +743,6 @@
 			return;
 		
 		_moduleFactoryInitialized[factory] = true;
-		
-		// our style settings
-		initStyles();
 	}
 	
     /**
diff --git a/frameworks/projects/charts/src/mx/charts/series/CandlestickSeries.as b/frameworks/projects/charts/src/mx/charts/series/CandlestickSeries.as
index 32959fb..9c0856e 100644
--- a/frameworks/projects/charts/src/mx/charts/series/CandlestickSeries.as
+++ b/frameworks/projects/charts/src/mx/charts/series/CandlestickSeries.as
@@ -166,6 +166,9 @@
     public function CandlestickSeries()
     {
         super();
+
+        // our style settings
+        initStyles();
     }
     //--------------------------------------------------------------------------
     //
@@ -284,11 +287,13 @@
     /**
      *  @private
      */
-    private function initStyles():Boolean
+    private function initStyles():void
     {
         HaloDefaults.init(styleManager);
-		
+
 		var csSeriesStyle:CSSStyleDeclaration = HaloDefaults.findStyleDeclaration(styleManager, "mx.charts.series.CandlestickSeries");
+
+
 		if (csSeriesStyle)
 		{
 			csSeriesStyle.setStyle("boxStroke", new SolidColorStroke(0,0));
@@ -298,8 +303,16 @@
 			csSeriesStyle.setStyle("fills", []);
 			csSeriesStyle.setStyle("stroke", new SolidColorStroke(0,0));
 		}
-		
-        return true;
+        else
+        {
+            //Fallback to set the style to this chart directly.
+			setStyle("boxStroke", new SolidColorStroke(0,0));
+			setStyle("declineFill", new SolidColor(0));
+			setStyle("itemRenderer", new ClassFactory(mx.charts.renderers.CandlestickItemRenderer));
+			setStyle("fill", new SolidColor(0xFFFFFF));
+			setStyle("fills", []);
+			setStyle("stroke", new SolidColorStroke(0,0));
+        }
     }
 
     
@@ -319,9 +332,6 @@
             return;
         
         _moduleFactoryInitialized[factory] = true;
-        
-        // our style settings
-        initStyles();
     }
     
     /**
diff --git a/frameworks/projects/charts/src/mx/charts/series/ColumnSeries.as b/frameworks/projects/charts/src/mx/charts/series/ColumnSeries.as
index bf81896..08ac997 100644
--- a/frameworks/projects/charts/src/mx/charts/series/ColumnSeries.as
+++ b/frameworks/projects/charts/src/mx/charts/series/ColumnSeries.as
@@ -272,6 +272,9 @@
         };
             
         dataTransform = new CartesianTransform();
+
+        // our style settings
+        initStyles();
     }
     
     private function getLabelClass():Class
@@ -1046,21 +1049,31 @@
     /**
      *  @private
      */
-    private function initStyles():Boolean
+    private function initStyles():void
     {
         HaloDefaults.init(styleManager);
 		
 		var columnSeriesStyle:CSSStyleDeclaration = HaloDefaults.findStyleDeclaration(styleManager, "mx.charts.series.ColumnSeries");
+
+
 		if (columnSeriesStyle)
 		{
 			columnSeriesStyle.setStyle("itemRenderer", new ClassFactory(mx.charts.renderers.BoxItemRenderer));
 			columnSeriesStyle.setStyle("fill", new SolidColor(0x000000));
 			columnSeriesStyle.setStyle("fills", []);
 			columnSeriesStyle.setStyle("stroke", HaloDefaults.emptyStroke);
-		}		
-        return true;
+		}
+        else
+        {
+            //Fallback to set the style to this chart directly.
+			setStyle("itemRenderer", new ClassFactory(mx.charts.renderers.BoxItemRenderer));
+			setStyle("fill", new SolidColor(0x000000));
+			setStyle("fills", []);
+			setStyle("stroke", HaloDefaults.emptyStroke);
+        }
     }
 
+
     /**
      *  @inheritDoc
      *  
@@ -1077,9 +1090,6 @@
             return;
         
         _moduleFactoryInitialized[factory] = true;
-        
-        // our style settings
-        initStyles();
     }
     
     /**
diff --git a/frameworks/projects/charts/src/mx/charts/series/HLOCSeries.as b/frameworks/projects/charts/src/mx/charts/series/HLOCSeries.as
index dfcc8af..59af25f 100644
--- a/frameworks/projects/charts/src/mx/charts/series/HLOCSeries.as
+++ b/frameworks/projects/charts/src/mx/charts/series/HLOCSeries.as
@@ -166,6 +166,9 @@
 	public function HLOCSeries()
 	{
 		super();
+
+		//Our style settings
+		initStyles();
 	}
 
 	//--------------------------------------------------------------------------
@@ -188,11 +191,13 @@
 	/**
 	 *  @private
 	 */
-	private function initStyles():Boolean
+	private function initStyles():void
 	{
 		HaloDefaults.init(styleManager);
-		
+
 		var hlocSeriesStyle:CSSStyleDeclaration = HaloDefaults.findStyleDeclaration(styleManager, "mx.charts.series.HLOCSeries");
+
+
 		if (hlocSeriesStyle)
 		{
 			hlocSeriesStyle.setStyle("closeTickStroke", new SolidColorStroke(0, 3, 1, false, "normal", "none"));
@@ -200,10 +205,17 @@
 			hlocSeriesStyle.setStyle("itemRenderer", new ClassFactory(mx.charts.renderers.HLOCItemRenderer));
 			hlocSeriesStyle.setStyle("stroke", new SolidColorStroke(0,0));
 		}
-		
-		return true;
+        else
+        {
+            //Fallback to set the style to this chart directly.
+			setStyle("closeTickStroke", new SolidColorStroke(0, 3, 1, false, "normal", "none"));
+			setStyle("openTickStroke", new SolidColorStroke(0, 3, 1, false, "normal", "none"));
+			setStyle("itemRenderer", new ClassFactory(mx.charts.renderers.HLOCItemRenderer));
+			setStyle("stroke", new SolidColorStroke(0,0));
+        }
 	}
 
+
 	/**
 	 *  @inheritDoc
 	 *  
@@ -220,9 +232,6 @@
 			return;
 		
 		_moduleFactoryInitialized[factory] = true;
-		
-		// our style settings
-		initStyles();
 	}
 	
 	/**
diff --git a/frameworks/projects/charts/src/mx/charts/series/LineSeries.as b/frameworks/projects/charts/src/mx/charts/series/LineSeries.as
index 08c97c4..4494fa6 100644
--- a/frameworks/projects/charts/src/mx/charts/series/LineSeries.as
+++ b/frameworks/projects/charts/src/mx/charts/series/LineSeries.as
@@ -289,6 +289,9 @@
         _segmentInstanceCache.properties = { styleName: this };
         
         dataTransform = new CartesianTransform();
+
+        // our style settings
+        initStyles();
     }
 
     //--------------------------------------------------------------------------
@@ -883,21 +886,31 @@
 	/**
      *  @private
      */
-    private function initStyles():Boolean
+    private function initStyles():void
     {
         HaloDefaults.init(styleManager);
-		
+
 		var lineSeriesStyle:CSSStyleDeclaration = HaloDefaults.findStyleDeclaration(styleManager, "mx.charts.series.LineSeries");
+
+
 		if (lineSeriesStyle)
 		{
 			lineSeriesStyle.setStyle("lineSegmentRenderer", new ClassFactory(LineRenderer));
 			lineSeriesStyle.setStyle("fill", new SolidColor(0xFFFFFF));
 			lineSeriesStyle.setStyle("fills", []);
 			lineSeriesStyle.setStyle("lineStroke", new SolidColorStroke(0,3));
-		}		
-        return true;
+		}
+        else
+        {
+            //Fallback to set the style to this chart directly.
+			setStyle("lineSegmentRenderer", new ClassFactory(LineRenderer));
+			setStyle("fill", new SolidColor(0xFFFFFF));
+			setStyle("fills", []);
+			setStyle("lineStroke", new SolidColorStroke(0,3));
+        }
     }
-    
+
+
     /**
      *  @inheritDoc
      *  
@@ -914,9 +927,6 @@
             return;
         
         _moduleFactoryInitialized[factory] = true;
-        
-        // our style settings
-        initStyles();
     }
     
     /**
diff --git a/frameworks/projects/charts/src/mx/charts/series/PieSeries.as b/frameworks/projects/charts/src/mx/charts/series/PieSeries.as
index 97783b1..4931674 100644
--- a/frameworks/projects/charts/src/mx/charts/series/PieSeries.as
+++ b/frameworks/projects/charts/src/mx/charts/series/PieSeries.as
@@ -359,7 +359,10 @@
 		filters = [ new DropShadowFilter(DROP_SHADOW_SIZE, 45, 0, 60,
                                          DROP_SHADOW_SIZE, DROP_SHADOW_SIZE) ];
         
-        dataTransform = new PolarTransform();                                 
+        dataTransform = new PolarTransform();  
+
+		// our style settings
+		initStyles();
     }
 
     //--------------------------------------------------------------------------
@@ -1170,29 +1173,39 @@
 	/**
 	 *  @private
 	 */
-	private function initStyles():Boolean
+	private function initStyles():void
 	{
 		HaloDefaults.init(styleManager);
 		
+		var pieSeriesStyle:CSSStyleDeclaration = HaloDefaults.findStyleDeclaration(styleManager, "mx.charts.series.PieSeries");
 		var pieFills:Array /* of IFill */ = [];
-		
 		var n:int = HaloDefaults.defaultFills.length;
+
+
 		for (var i:int = 0; i < n; i++)
 		{
 			pieFills[i] = HaloDefaults.defaultFills[i];
 		}
-		
-		var pieSeriesStyle:CSSStyleDeclaration = HaloDefaults.findStyleDeclaration(styleManager, "mx.charts.series.PieSeries");
+
+
 		if (pieSeriesStyle)
 		{
 			pieSeriesStyle.setStyle("itemRenderer", new ClassFactory(mx.charts.renderers.WedgeItemRenderer));
 			pieSeriesStyle.setStyle("fills", pieFills);
 			pieSeriesStyle.setStyle("legendMarkerRenderer", new ClassFactory(PieSeriesLegendMarker));
 			pieSeriesStyle.setStyle("calloutStroke", new SolidColorStroke(0,0,1));
-		}		
-		return true;
+		}
+        else
+        {
+            //Fallback to set the style to this chart directly.
+			setStyle("itemRenderer", new ClassFactory(mx.charts.renderers.WedgeItemRenderer));
+			setStyle("fills", pieFills);
+			setStyle("legendMarkerRenderer", new ClassFactory(PieSeriesLegendMarker));
+			setStyle("calloutStroke", new SolidColorStroke(0,0,1));
+        }
 	}
-	
+
+
 	/**
 	 *  @inheritDoc
 	 *  
@@ -1209,9 +1222,6 @@
 			return;
 		
 		_moduleFactoryInitialized[factory] = true;
-		
-		// our style settings
-		initStyles();
 	}
 	
     /**
diff --git a/frameworks/projects/charts/src/mx/charts/series/PlotSeries.as b/frameworks/projects/charts/src/mx/charts/series/PlotSeries.as
index 7d1c7bb..4bd74dd 100644
--- a/frameworks/projects/charts/src/mx/charts/series/PlotSeries.as
+++ b/frameworks/projects/charts/src/mx/charts/series/PlotSeries.as
@@ -204,6 +204,9 @@
         _instanceCache.creationCallback = applyItemRendererProperties;
         
         dataTransform = new CartesianTransform();
+
+        // our style settings
+        initStyles();
     }
     
 
@@ -632,18 +635,26 @@
 	/**
      *  @private
      */
-    private function initStyles():Boolean
+    private function initStyles():void
     {
         HaloDefaults.init(styleManager);
 		
 		var plotSeriesStyle:CSSStyleDeclaration = HaloDefaults.findStyleDeclaration(styleManager, "mx.charts.series.PlotSeries");
+
+
 		if (plotSeriesStyle)
 		{
 			plotSeriesStyle.setStyle("itemRenderer", new ClassFactory(mx.charts.renderers.DiamondItemRenderer));
 			plotSeriesStyle.setStyle("fill", new SolidColor(0x4444AA));
 			plotSeriesStyle.setStyle("fills", []);
-		}		
-        return true;
+		}
+        else
+        {
+            //Fallback to set the style to this chart directly.
+			setStyle("itemRenderer", new ClassFactory(mx.charts.renderers.DiamondItemRenderer));
+			setStyle("fill", new SolidColor(0x4444AA));
+			setStyle("fills", []);
+        }
     }
 
     
@@ -663,9 +674,6 @@
             return;
         
         _moduleFactoryInitialized[factory] = true;
-        
-        // our style settings
-        initStyles();
     }
     
     /**
diff --git a/frameworks/projects/charts/src/mx/charts/styles/HaloDefaults.as b/frameworks/projects/charts/src/mx/charts/styles/HaloDefaults.as
index 4fb3e67..278ed13 100644
--- a/frameworks/projects/charts/src/mx/charts/styles/HaloDefaults.as
+++ b/frameworks/projects/charts/src/mx/charts/styles/HaloDefaults.as
@@ -233,8 +233,8 @@
 		var decl:CSSStyleDeclaration = styleManager.getStyleDeclaration(name);
 		if (!decl)
 		{
-			var sm:IStyleManager2 = styleManager;
-			while (sm.parent)
+			var sm:IStyleManager2 = styleManager.parent;
+			while (sm)
 			{
 				decl = sm.getStyleDeclaration(name);
 				if (decl)
diff --git a/frameworks/projects/charts/src/mx/core/Version.as b/frameworks/projects/charts/src/mx/core/Version.as
index 3b6707f..3077bda 100644
--- a/frameworks/projects/charts/src/mx/core/Version.as
+++ b/frameworks/projects/charts/src/mx/core/Version.as
@@ -23,4 +23,4 @@
  *  @private
  *  Version string for this class.
  */
-mx_internal static const VERSION:String = "4.14.1.0";
+mx_internal static const VERSION:String = "4.16.0.0";
diff --git a/frameworks/projects/experimental/src/spark/skins/richTextEditorClasses/AlignToolSkin.mxml b/frameworks/projects/experimental/src/spark/skins/richTextEditorClasses/AlignToolSkin.mxml
index 36e58b3..c22c693 100644
--- a/frameworks/projects/experimental/src/spark/skins/richTextEditorClasses/AlignToolSkin.mxml
+++ b/frameworks/projects/experimental/src/spark/skins/richTextEditorClasses/AlignToolSkin.mxml
@@ -53,7 +53,7 @@
 			@see spark.skins.spark.ButtonBarFirstButtonSkin
 		-->
 		<fx:Component id="firstButton">
-			<s:ButtonBarButton skinClass="spark.skins.spark.ButtonBarFirstButtonSkin" toolTip="{data.toolTip}"/>
+			<s:ButtonBarButton skinClass="spark.skins.spark.ButtonBarFirstButtonSkin" dataChange="toolTip=data.toolTip"/>
 		</fx:Component>
 
 		<!---
@@ -62,7 +62,7 @@
 			@see spark.skins.spark.ButtonBarMiddleButtonSkin
 		-->
 		<fx:Component id="middleButton">
-			<s:ButtonBarButton skinClass="spark.skins.spark.ButtonBarMiddleButtonSkin" toolTip="{data.toolTip}"/>
+			<s:ButtonBarButton skinClass="spark.skins.spark.ButtonBarMiddleButtonSkin" dataChange="toolTip=data.toolTip"/>
 		</fx:Component>
 
 		<!---
@@ -71,7 +71,7 @@
 			@see spark.skins.spark.ButtonBarLastButtonSkin
 		-->
 		<fx:Component id="lastButton">
-			<s:ButtonBarButton skinClass="spark.skins.spark.ButtonBarLastButtonSkin" toolTip="{data.toolTip}"/>
+			<s:ButtonBarButton skinClass="spark.skins.spark.ButtonBarLastButtonSkin" dataChange="toolTip=data.toolTip"/>
 		</fx:Component>
 
 	</fx:Declarations>
diff --git a/frameworks/projects/flatspark/src/flatspark/assets/fonts/awesome/FontAwesome.otf b/frameworks/projects/flatspark/src/flatspark/assets/fonts/awesome/FontAwesome.otf
index 81c9ad9..3ed7f8b 100644
--- a/frameworks/projects/flatspark/src/flatspark/assets/fonts/awesome/FontAwesome.otf
+++ b/frameworks/projects/flatspark/src/flatspark/assets/fonts/awesome/FontAwesome.otf
Binary files differ
diff --git a/frameworks/projects/flatspark/src/flatspark/utils/AwesomeUtils.as b/frameworks/projects/flatspark/src/flatspark/utils/AwesomeUtils.as
index 07782c5..87cfc06 100644
--- a/frameworks/projects/flatspark/src/flatspark/utils/AwesomeUtils.as
+++ b/frameworks/projects/flatspark/src/flatspark/utils/AwesomeUtils.as
@@ -25,417 +25,699 @@
 			
 		}
 		
-		public static const fa_glass:String = "\uf000";
-		public static const fa_music:String = "\uf001";
-		public static const fa_search:String = "\uf002";
-		public static const fa_envelope_o:String = "\uf003";
-		public static const fa_heart:String = "\uf004";
-		public static const fa_star:String = "\uf005";
-		public static const fa_star_o:String = "\uf006";
-		public static const fa_user:String = "\uf007";
-		public static const fa_film:String = "\uf008";
-		public static const fa_th_large:String = "\uf009";
-		public static const fa_th:String = "\uf00a";
-		public static const fa_th_list:String = "\uf00b";
-		public static const fa_check:String = "\uf00c";
-		public static const fa_times:String = "\uf00d";
-		public static const fa_search_plus:String = "\uf00e";
-		public static const fa_search_minus:String = "\uf010";
-		public static const fa_power_off:String = "\uf011";
-		public static const fa_signal:String = "\uf012";
-		public static const fa_cog:String = "\uf013";
-		public static const fa_trash_o:String = "\uf014";
-		public static const fa_home:String = "\uf015";
-		public static const fa_file_o:String = "\uf016";
-		public static const fa_clock_o:String = "\uf017";
-		public static const fa_road:String = "\uf018";
-		public static const fa_download:String = "\uf019";
-		public static const fa_arrow_circle_o_down:String = "\uf01a";
-		public static const fa_arrow_circle_o_up:String = "\uf01b";
-		public static const fa_inbox:String = "\uf01c";
-		public static const fa_play_circle_o:String = "\uf01d";
-		public static const fa_repeat:String = "\uf01e";
-		public static const fa_refresh:String = "\uf021";
-		public static const fa_list_alt:String = "\uf022";
-		public static const fa_lock:String = "\uf023";
-		public static const fa_flag:String = "\uf024";
-		public static const fa_headphones:String = "\uf025";
-		public static const fa_volume_off:String = "\uf026";
-		public static const fa_volume_down:String = "\uf027";
-		public static const fa_volume_up:String = "\uf028";
-		public static const fa_qrcode:String = "\uf029";
-		public static const fa_barcode:String = "\uf02a";
-		public static const fa_tag:String = "\uf02b";
-		public static const fa_tags:String = "\uf02c";
-		public static const fa_book:String = "\uf02d";
-		public static const fa_bookmark:String = "\uf02e";
-		public static const fa_print:String = "\uf02f";
-		public static const fa_camera:String = "\uf030";
-		public static const fa_font:String = "\uf031";
-		public static const fa_bold:String = "\uf032";
-		public static const fa_italic:String = "\uf033";
-		public static const fa_text_height:String = "\uf034";
-		public static const fa_text_width:String = "\uf035";
-		public static const fa_align_left:String = "\uf036";
-		public static const fa_align_center:String = "\uf037";
-		public static const fa_align_right:String = "\uf038";
-		public static const fa_align_justify:String = "\uf039";
-		public static const fa_list:String = "\uf03a";
-		public static const fa_outdent:String = "\uf03b";
-		public static const fa_indent:String = "\uf03c";
-		public static const fa_video_camera:String = "\uf03d";
-		public static const fa_picture_o:String = "\uf03e";
-		public static const fa_pencil:String = "\uf040";
-		public static const fa_map_marker:String = "\uf041";
+		public static const fa_500px:String = "\uf26e";
 		public static const fa_adjust:String = "\uf042";
-		public static const fa_tint:String = "\uf043";
-		public static const fa_pencil_square_o:String = "\uf044";
-		public static const fa_share_square_o:String = "\uf045";
-		public static const fa_check_square_o:String = "\uf046";
-		public static const fa_arrows:String = "\uf047";
-		public static const fa_step_backward:String = "\uf048";
-		public static const fa_fast_backward:String = "\uf049";
-		public static const fa_backward:String = "\uf04a";
-		public static const fa_play:String = "\uf04b";
-		public static const fa_pause:String = "\uf04c";
-		public static const fa_stop:String = "\uf04d";
-		public static const fa_forward:String = "\uf04e";
-		public static const fa_fast_forward:String = "\uf050";
-		public static const fa_step_forward:String = "\uf051";
-		public static const fa_eject:String = "\uf052";
-		public static const fa_chevron_left:String = "\uf053";
-		public static const fa_chevron_right:String = "\uf054";
-		public static const fa_plus_circle:String = "\uf055";
-		public static const fa_minus_circle:String = "\uf056";
-		public static const fa_times_circle:String = "\uf057";
-		public static const fa_check_circle:String = "\uf058";
-		public static const fa_question_circle:String = "\uf059";
-		public static const fa_info_circle:String = "\uf05a";
-		public static const fa_crosshairs:String = "\uf05b";
-		public static const fa_times_circle_o:String = "\uf05c";
-		public static const fa_check_circle_o:String = "\uf05d";
-		public static const fa_ban:String = "\uf05e";
-		public static const fa_arrow_left:String = "\uf060";
-		public static const fa_arrow_right:String = "\uf061";
-		public static const fa_arrow_up:String = "\uf062";
-		public static const fa_arrow_down:String = "\uf063";
-		public static const fa_share:String = "\uf064";
-		public static const fa_expand:String = "\uf065";
-		public static const fa_compress:String = "\uf066";
-		public static const fa_plus:String = "\uf067";
-		public static const fa_minus:String = "\uf068";
-		public static const fa_asterisk:String = "\uf069";
-		public static const fa_exclamation_circle:String = "\uf06a";
-		public static const fa_gift:String = "\uf06b";
-		public static const fa_leaf:String = "\uf06c";
-		public static const fa_fire:String = "\uf06d";
-		public static const fa_eye:String = "\uf06e";
-		public static const fa_eye_slash:String = "\uf070";
-		public static const fa_exclamation_triangle:String = "\uf071";
-		public static const fa_plane:String = "\uf072";
-		public static const fa_calendar:String = "\uf073";
-		public static const fa_random:String = "\uf074";
-		public static const fa_comment:String = "\uf075";
-		public static const fa_magnet:String = "\uf076";
-		public static const fa_chevron_up:String = "\uf077";
-		public static const fa_chevron_down:String = "\uf078";
-		public static const fa_retweet:String = "\uf079";
-		public static const fa_shopping_cart:String = "\uf07a";
-		public static const fa_folder:String = "\uf07b";
-		public static const fa_folder_open:String = "\uf07c";
-		public static const fa_arrows_v:String = "\uf07d";
-		public static const fa_arrows_h:String = "\uf07e";
-		public static const fa_bar_chart_o:String = "\uf080";
-		public static const fa_twitter_square:String = "\uf081";
-		public static const fa_facebook_square:String = "\uf082";
-		public static const fa_camera_retro:String = "\uf083";
-		public static const fa_key:String = "\uf084";
-		public static const fa_cogs:String = "\uf085";
-		public static const fa_comments:String = "\uf086";
-		public static const fa_thumbs_o_up:String = "\uf087";
-		public static const fa_thumbs_o_down:String = "\uf088";
-		public static const fa_star_half:String = "\uf089";
-		public static const fa_heart_o:String = "\uf08a";
-		public static const fa_sign_out:String = "\uf08b";
-		public static const fa_linkedin_square:String = "\uf08c";
-		public static const fa_thumb_tack:String = "\uf08d";
-		public static const fa_external_link:String = "\uf08e";
-		public static const fa_sign_in:String = "\uf090";
-		public static const fa_trophy:String = "\uf091";
-		public static const fa_github_square:String = "\uf092";
-		public static const fa_upload:String = "\uf093";
-		public static const fa_lemon_o:String = "\uf094";
-		public static const fa_phone:String = "\uf095";
-		public static const fa_square_o:String = "\uf096";
-		public static const fa_bookmark_o:String = "\uf097";
-		public static const fa_phone_square:String = "\uf098";
-		public static const fa_twitter:String = "\uf099";
-		public static const fa_facebook:String = "\uf09a";
-		public static const fa_github:String = "\uf09b";
-		public static const fa_unlock:String = "\uf09c";
-		public static const fa_credit_card:String = "\uf09d";
-		public static const fa_rss:String = "\uf09e";
-		public static const fa_hdd_o:String = "\uf0a0";
-		public static const fa_bullhorn:String = "\uf0a1";
-		public static const fa_bell:String = "\uf0f3";
-		public static const fa_certificate:String = "\uf0a3";
-		public static const fa_hand_o_right:String = "\uf0a4";
-		public static const fa_hand_o_left:String = "\uf0a5";
-		public static const fa_hand_o_up:String = "\uf0a6";
-		public static const fa_hand_o_down:String = "\uf0a7";
-		public static const fa_arrow_circle_left:String = "\uf0a8";
-		public static const fa_arrow_circle_right:String = "\uf0a9";
-		public static const fa_arrow_circle_up:String = "\uf0aa";
-		public static const fa_arrow_circle_down:String = "\uf0ab";
-		public static const fa_globe:String = "\uf0ac";
-		public static const fa_wrench:String = "\uf0ad";
-		public static const fa_tasks:String = "\uf0ae";
-		public static const fa_filter:String = "\uf0b0";
-		public static const fa_briefcase:String = "\uf0b1";
-		public static const fa_arrows_alt:String = "\uf0b2";
-		public static const fa_users:String = "\uf0c0";
-		public static const fa_link:String = "\uf0c1";
-		public static const fa_cloud:String = "\uf0c2";
-		public static const fa_flask:String = "\uf0c3";
-		public static const fa_scissors:String = "\uf0c4";
-		public static const fa_files_o:String = "\uf0c5";
-		public static const fa_paperclip:String = "\uf0c6";
-		public static const fa_floppy_o:String = "\uf0c7";
-		public static const fa_square:String = "\uf0c8";
-		public static const fa_bars:String = "\uf0c9";
-		public static const fa_list_ul:String = "\uf0ca";
-		public static const fa_list_ol:String = "\uf0cb";
-		public static const fa_strikethrough:String = "\uf0cc";
-		public static const fa_underline:String = "\uf0cd";
-		public static const fa_table:String = "\uf0ce";
-		public static const fa_magic:String = "\uf0d0";
-		public static const fa_truck:String = "\uf0d1";
-		public static const fa_pinterest:String = "\uf0d2";
-		public static const fa_pinterest_square:String = "\uf0d3";
-		public static const fa_google_plus_square:String = "\uf0d4";
-		public static const fa_google_plus:String = "\uf0d5";
-		public static const fa_money:String = "\uf0d6";
-		public static const fa_caret_down:String = "\uf0d7";
-		public static const fa_caret_up:String = "\uf0d8";
-		public static const fa_caret_left:String = "\uf0d9";
-		public static const fa_caret_right:String = "\uf0da";
-		public static const fa_columns:String = "\uf0db";
-		public static const fa_sort:String = "\uf0dc";
-		public static const fa_sort_asc:String = "\uf0dd";
-		public static const fa_sort_desc:String = "\uf0de";
-		public static const fa_envelope:String = "\uf0e0";
-		public static const fa_linkedin:String = "\uf0e1";
-		public static const fa_undo:String = "\uf0e2";
-		public static const fa_gavel:String = "\uf0e3";
-		public static const fa_tachometer:String = "\uf0e4";
-		public static const fa_comment_o:String = "\uf0e5";
-		public static const fa_comments_o:String = "\uf0e6";
-		public static const fa_bolt:String = "\uf0e7";
-		public static const fa_sitemap:String = "\uf0e8";
-		public static const fa_umbrella:String = "\uf0e9";
-		public static const fa_clipboard:String = "\uf0ea";
-		public static const fa_lightbulb_o:String = "\uf0eb";
-		public static const fa_exchange:String = "\uf0ec";
-		public static const fa_cloud_download:String = "\uf0ed";
-		public static const fa_cloud_upload:String = "\uf0ee";
-		public static const fa_user_md:String = "\uf0f0";
-		public static const fa_stethoscope:String = "\uf0f1";
-		public static const fa_suitcase:String = "\uf0f2";
-		public static const fa_bell_o:String = "\uf0a2";
-		public static const fa_coffee:String = "\uf0f4";
-		public static const fa_cutlery:String = "\uf0f5";
-		public static const fa_file_text_o:String = "\uf0f6";
-		public static const fa_building_o:String = "\uf0f7";
-		public static const fa_hospital_o:String = "\uf0f8";
+		public static const fa_adn:String = "\uf170";
+		public static const fa_align_center:String = "\uf037";
+		public static const fa_align_justify:String = "\uf039";
+		public static const fa_align_left:String = "\uf036";
+		public static const fa_align_right:String = "\uf038";
+		public static const fa_amazon:String = "\uf270";
 		public static const fa_ambulance:String = "\uf0f9";
-		public static const fa_medkit:String = "\uf0fa";
-		public static const fa_fighter_jet:String = "\uf0fb";
-		public static const fa_beer:String = "\uf0fc";
-		public static const fa_h_square:String = "\uf0fd";
-		public static const fa_plus_square:String = "\uf0fe";
+		public static const fa_anchor:String = "\uf13d";
+		public static const fa_android:String = "\uf17b";
+		public static const fa_angellist:String = "\uf209";
+		public static const fa_angle_double_down:String = "\uf103";
 		public static const fa_angle_double_left:String = "\uf100";
 		public static const fa_angle_double_right:String = "\uf101";
 		public static const fa_angle_double_up:String = "\uf102";
-		public static const fa_angle_double_down:String = "\uf103";
+		public static const fa_angle_down:String = "\uf107";
 		public static const fa_angle_left:String = "\uf104";
 		public static const fa_angle_right:String = "\uf105";
 		public static const fa_angle_up:String = "\uf106";
-		public static const fa_angle_down:String = "\uf107";
-		public static const fa_desktop:String = "\uf108";
-		public static const fa_laptop:String = "\uf109";
-		public static const fa_tablet:String = "\uf10a";
-		public static const fa_mobile:String = "\uf10b";
-		public static const fa_circle_o:String = "\uf10c";
-		public static const fa_quote_left:String = "\uf10d";
-		public static const fa_quote_right:String = "\uf10e";
-		public static const fa_spinner:String = "\uf110";
-		public static const fa_circle:String = "\uf111";
-		public static const fa_reply:String = "\uf112";
-		public static const fa_github_alt:String = "\uf113";
-		public static const fa_folder_o:String = "\uf114";
-		public static const fa_folder_open_o:String = "\uf115";
-		public static const fa_smile_o:String = "\uf118";
-		public static const fa_frown_o:String = "\uf119";
-		public static const fa_meh_o:String = "\uf11a";
-		public static const fa_gamepad:String = "\uf11b";
-		public static const fa_keyboard_o:String = "\uf11c";
-		public static const fa_flag_o:String = "\uf11d";
-		public static const fa_flag_checkered:String = "\uf11e";
-		public static const fa_terminal:String = "\uf120";
-		public static const fa_code:String = "\uf121";
-		public static const fa_reply_all:String = "\uf122";
-		public static const fa_mail_reply_all:String = "\uf122";
-		public static const fa_star_half_o:String = "\uf123";
-		public static const fa_location_arrow:String = "\uf124";
-		public static const fa_crop:String = "\uf125";
-		public static const fa_code_fork:String = "\uf126";
-		public static const fa_chain_broken:String = "\uf127";
-		public static const fa_question:String = "\uf128";
-		public static const fa_info:String = "\uf129";
-		public static const fa_exclamation:String = "\uf12a";
-		public static const fa_superscript:String = "\uf12b";
-		public static const fa_subscript:String = "\uf12c";
-		public static const fa_eraser:String = "\uf12d";
-		public static const fa_puzzle_piece:String = "\uf12e";
-		public static const fa_microphone:String = "\uf130";
-		public static const fa_microphone_slash:String = "\uf131";
-		public static const fa_shield:String = "\uf132";
-		public static const fa_calendar_o:String = "\uf133";
-		public static const fa_fire_extinguisher:String = "\uf134";
-		public static const fa_rocket:String = "\uf135";
-		public static const fa_maxcdn:String = "\uf136";
-		public static const fa_chevron_circle_left:String = "\uf137";
-		public static const fa_chevron_circle_right:String = "\uf138";
-		public static const fa_chevron_circle_up:String = "\uf139";
-		public static const fa_chevron_circle_down:String = "\uf13a";
-		public static const fa_html5:String = "\uf13b";
-		public static const fa_css3:String = "\uf13c";
-		public static const fa_anchor:String = "\uf13d";
-		public static const fa_unlock_alt:String = "\uf13e";
-		public static const fa_bullseye:String = "\uf140";
-		public static const fa_ellipsis_h:String = "\uf141";
-		public static const fa_ellipsis_v:String = "\uf142";
-		public static const fa_rss_square:String = "\uf143";
-		public static const fa_play_circle:String = "\uf144";
-		public static const fa_ticket:String = "\uf145";
-		public static const fa_minus_square:String = "\uf146";
-		public static const fa_minus_square_o:String = "\uf147";
-		public static const fa_level_up:String = "\uf148";
-		public static const fa_level_down:String = "\uf149";
-		public static const fa_check_square:String = "\uf14a";
-		public static const fa_pencil_square:String = "\uf14b";
-		public static const fa_external_link_square:String = "\uf14c";
-		public static const fa_share_square:String = "\uf14d";
-		public static const fa_compass:String = "\uf14e";
-		public static const fa_caret_square_o_down:String = "\uf150";
-		public static const fa_caret_square_o_up:String = "\uf151";
-		public static const fa_caret_square_o_right:String = "\uf152";
-		public static const fa_eur:String = "\uf153";
-		public static const fa_gbp:String = "\uf154";
-		public static const fa_usd:String = "\uf155";
-		public static const fa_inr:String = "\uf156";
-		public static const fa_jpy:String = "\uf157";
-		public static const fa_rub:String = "\uf158";
-		public static const fa_krw:String = "\uf159";
-		public static const fa_btc:String = "\uf15a";
-		public static const fa_file:String = "\uf15b";
-		public static const fa_file_text:String = "\uf15c";
-		public static const fa_sort_alpha_asc:String = "\uf15d";
-		public static const fa_sort_alpha_desc:String = "\uf15e";
-		public static const fa_sort_amount_asc:String = "\uf160";
-		public static const fa_sort_amount_desc:String = "\uf161";
-		public static const fa_sort_numeric_asc:String = "\uf162";
-		public static const fa_sort_numeric_desc:String = "\uf163";
-		public static const fa_thumbs_up:String = "\uf164";
-		public static const fa_thumbs_down:String = "\uf165";
-		public static const fa_youtube_square:String = "\uf166";
-		public static const fa_youtube:String = "\uf167";
-		public static const fa_xing:String = "\uf168";
-		public static const fa_xing_square:String = "\uf169";
-		public static const fa_youtube_play:String = "\uf16a";
-		public static const fa_dropbox:String = "\uf16b";
-		public static const fa_stack_overflow:String = "\uf16c";
-		public static const fa_instagram:String = "\uf16d";
-		public static const fa_flickr:String = "\uf16e";
-		public static const fa_adn:String = "\uf170";
-		public static const fa_bitbucket:String = "\uf171";
-		public static const fa_bitbucket_square:String = "\uf172";
-		public static const fa_tumblr:String = "\uf173";
-		public static const fa_tumblr_square:String = "\uf174";
-		public static const fa_long_arrow_down:String = "\uf175";
-		public static const fa_long_arrow_up:String = "\uf176";
-		public static const fa_long_arrow_left:String = "\uf177";
-		public static const fa_long_arrow_right:String = "\uf178";
 		public static const fa_apple:String = "\uf179";
-		public static const fa_windows:String = "\uf17a";
-		public static const fa_android:String = "\uf17b";
-		public static const fa_linux:String = "\uf17c";
-		public static const fa_dribbble:String = "\uf17d";
-		public static const fa_skype:String = "\uf17e";
-		public static const fa_foursquare:String = "\uf180";
-		public static const fa_trello:String = "\uf181";
-		public static const fa_female:String = "\uf182";
-		public static const fa_male:String = "\uf183";
-		public static const fa_gittip:String = "\uf184";
-		public static const fa_sun_o:String = "\uf185";
-		public static const fa_moon_o:String = "\uf186";
 		public static const fa_archive:String = "\uf187";
-		public static const fa_bug:String = "\uf188";
-		public static const fa_vk:String = "\uf189";
-		public static const fa_weibo:String = "\uf18a";
-		public static const fa_renren:String = "\uf18b";
-		public static const fa_pagelines:String = "\uf18c";
-		public static const fa_stack_exchange:String = "\uf18d";
-		public static const fa_arrow_circle_o_right:String = "\uf18e";
-		public static const fa_arrow_circle_o_left:String = "\uf190";
-		public static const fa_caret_square_o_left:String = "\uf191";
-		public static const fa_dot_circle_o:String = "\uf192";
-		public static const fa_wheelchair:String = "\uf193";
-		public static const fa_vimeo_square:String = "\uf194";
-		public static const fa_try:String = "\uf195";
-		public static const fa_plus_square_o:String = "\uf196";
-		public static const fa_angellist:String = "\uf209";
 		public static const fa_area_chart:String = "\uf1fe";
+		public static const fa_arrow_circle_down:String = "\uf0ab";
+		public static const fa_arrow_circle_left:String = "\uf0a8";
+		public static const fa_arrow_circle_o_down:String = "\uf01a";
+		public static const fa_arrow_circle_o_left:String = "\uf190";
+		public static const fa_arrow_circle_o_right:String = "\uf18e";
+		public static const fa_arrow_circle_o_up:String = "\uf01b";
+		public static const fa_arrow_circle_right:String = "\uf0a9";
+		public static const fa_arrow_circle_up:String = "\uf0aa";
+		public static const fa_arrow_down:String = "\uf063";
+		public static const fa_arrow_left:String = "\uf060";
+		public static const fa_arrow_right:String = "\uf061";
+		public static const fa_arrow_up:String = "\uf062";
+		public static const fa_arrows:String = "\uf047";
+		public static const fa_arrows_alt:String = "\uf0b2";
+		public static const fa_arrows_h:String = "\uf07e";
+		public static const fa_arrows_v:String = "\uf07d";
+		public static const fa_asterisk:String = "\uf069";
 		public static const fa_at:String = "\uf1fa";
+		public static const fa_automobile:String = "\uf1b9";
+		public static const fa_backward:String = "\uf04a";
+		public static const fa_balance_scale:String = "\uf24e";
+		public static const fa_ban:String = "\uf05e";
+		public static const fa_bank:String = "\uf19c";
+		public static const fa_bar_chart:String = "\uf080";
+		public static const fa_bar_chart_o:String = "\uf080";
+		public static const fa_barcode:String = "\uf02a";
+		public static const fa_bars:String = "\uf0c9";
+		public static const fa_battery_0:String = "\uf244";
+		public static const fa_battery_1:String = "\uf243";
+		public static const fa_battery_2:String = "\uf242";
+		public static const fa_battery_3:String = "\uf241";
+		public static const fa_battery_4:String = "\uf240";
+		public static const fa_battery_empty:String = "\uf244";
+		public static const fa_battery_full:String = "\uf240";
+		public static const fa_battery_half:String = "\uf242";
+		public static const fa_battery_quarter:String = "\uf243";
+		public static const fa_battery_three_quarters:String = "\uf241";
+		public static const fa_bed:String = "\uf236";
+		public static const fa_beer:String = "\uf0fc";
+		public static const fa_behance:String = "\uf1b4";
+		public static const fa_behance_square:String = "\uf1b5";
+		public static const fa_bell:String = "\uf0f3";
+		public static const fa_bell_o:String = "\uf0a2";
 		public static const fa_bell_slash:String = "\uf1f6";
 		public static const fa_bell_slash_o:String = "\uf1f7";
 		public static const fa_bicycle:String = "\uf206";
 		public static const fa_binoculars:String = "\uf1e5";
 		public static const fa_birthday_cake:String = "\uf1fd";
+		public static const fa_bitbucket:String = "\uf171";
+		public static const fa_bitbucket_square:String = "\uf172";
+		public static const fa_bitcoin:String = "\uf15a";
+		public static const fa_black_tie:String = "\uf27e";
+		public static const fa_bluetooth:String = "\uf293";
+		public static const fa_bluetooth_b:String = "\uf294";
+		public static const fa_bold:String = "\uf032";
+		public static const fa_bolt:String = "\uf0e7";
+		public static const fa_bomb:String = "\uf1e2";
+		public static const fa_book:String = "\uf02d";
+		public static const fa_bookmark:String = "\uf02e";
+		public static const fa_bookmark_o:String = "\uf097";
+		public static const fa_briefcase:String = "\uf0b1";
+		public static const fa_btc:String = "\uf15a";
+		public static const fa_bug:String = "\uf188";
+		public static const fa_building:String = "\uf1ad";
+		public static const fa_building_o:String = "\uf0f7";
+		public static const fa_bullhorn:String = "\uf0a1";
+		public static const fa_bullseye:String = "\uf140";
 		public static const fa_bus:String = "\uf207";
+		public static const fa_buysellads:String = "\uf20d";
+		public static const fa_cab:String = "\uf1ba";
 		public static const fa_calculator:String = "\uf1ec";
+		public static const fa_calendar:String = "\uf073";
+		public static const fa_calendar_check_o:String = "\uf274";
+		public static const fa_calendar_minus_o:String = "\uf272";
+		public static const fa_calendar_o:String = "\uf133";
+		public static const fa_calendar_plus_o:String = "\uf271";
+		public static const fa_calendar_times_o:String = "\uf273";
+		public static const fa_camera:String = "\uf030";
+		public static const fa_camera_retro:String = "\uf083";
+		public static const fa_car:String = "\uf1b9";
+		public static const fa_caret_down:String = "\uf0d7";
+		public static const fa_caret_left:String = "\uf0d9";
+		public static const fa_caret_right:String = "\uf0da";
+		public static const fa_caret_square_o_down:String = "\uf150";
+		public static const fa_caret_square_o_left:String = "\uf191";
+		public static const fa_caret_square_o_right:String = "\uf152";
+		public static const fa_caret_square_o_up:String = "\uf151";
+		public static const fa_caret_up:String = "\uf0d8";
+		public static const fa_cart_arrow_down:String = "\uf218";
+		public static const fa_cart_plus:String = "\uf217";
 		public static const fa_cc:String = "\uf20a";
 		public static const fa_cc_amex:String = "\uf1f3";
+		public static const fa_cc_diners_club:String = "\uf24c";
 		public static const fa_cc_discover:String = "\uf1f2";
+		public static const fa_cc_jcb:String = "\uf24b";
 		public static const fa_cc_mastercard:String = "\uf1f1";
 		public static const fa_cc_paypal:String = "\uf1f4";
 		public static const fa_cc_stripe:String = "\uf1f5";
 		public static const fa_cc_visa:String = "\uf1f0";
+		public static const fa_certificate:String = "\uf0a3";
+		public static const fa_chain:String = "\uf0c1";
+		public static const fa_chain_broken:String = "\uf127";
+		public static const fa_check:String = "\uf00c";
+		public static const fa_check_circle:String = "\uf058";
+		public static const fa_check_circle_o:String = "\uf05d";
+		public static const fa_check_square:String = "\uf14a";
+		public static const fa_check_square_o:String = "\uf046";
+		public static const fa_chevron_circle_down:String = "\uf13a";
+		public static const fa_chevron_circle_left:String = "\uf137";
+		public static const fa_chevron_circle_right:String = "\uf138";
+		public static const fa_chevron_circle_up:String = "\uf139";
+		public static const fa_chevron_down:String = "\uf078";
+		public static const fa_chevron_left:String = "\uf053";
+		public static const fa_chevron_right:String = "\uf054";
+		public static const fa_chevron_up:String = "\uf077";
+		public static const fa_child:String = "\uf1ae";
+		public static const fa_chrome:String = "\uf268";
+		public static const fa_circle:String = "\uf111";
+		public static const fa_circle_o:String = "\uf10c";
+		public static const fa_circle_o_notch:String = "\uf1ce";
+		public static const fa_circle_thin:String = "\uf1db";
+		public static const fa_clipboard:String = "\uf0ea";
+		public static const fa_clock_o:String = "\uf017";
+		public static const fa_clone:String = "\uf24d";
+		public static const fa_close:String = "\uf00d";
+		public static const fa_cloud:String = "\uf0c2";
+		public static const fa_cloud_download:String = "\uf0ed";
+		public static const fa_cloud_upload:String = "\uf0ee";
+		public static const fa_cny:String = "\uf157";
+		public static const fa_code:String = "\uf121";
+		public static const fa_code_fork:String = "\uf126";
+		public static const fa_codepen:String = "\uf1cb";
+		public static const fa_codiepie:String = "\uf284";
+		public static const fa_coffee:String = "\uf0f4";
+		public static const fa_cog:String = "\uf013";
+		public static const fa_cogs:String = "\uf085";
+		public static const fa_columns:String = "\uf0db";
+		public static const fa_comment:String = "\uf075";
+		public static const fa_comment_o:String = "\uf0e5";
+		public static const fa_commenting:String = "\uf27a";
+		public static const fa_commenting_o:String = "\uf27b";
+		public static const fa_comments:String = "\uf086";
+		public static const fa_comments_o:String = "\uf0e6";
+		public static const fa_compass:String = "\uf14e";
+		public static const fa_compress:String = "\uf066";
+		public static const fa_connectdevelop:String = "\uf20e";
+		public static const fa_contao:String = "\uf26d";
+		public static const fa_copy:String = "\uf0c5";
 		public static const fa_copyright:String = "\uf1f9";
+		public static const fa_creative_commons:String = "\uf25e";
+		public static const fa_credit_card:String = "\uf09d";
+		public static const fa_credit_card_alt:String = "\uf283";
+		public static const fa_crop:String = "\uf125";
+		public static const fa_crosshairs:String = "\uf05b";
+		public static const fa_css3:String = "\uf13c";
+		public static const fa_cube:String = "\uf1b2";
+		public static const fa_cubes:String = "\uf1b3";
+		public static const fa_cut:String = "\uf0c4";
+		public static const fa_cutlery:String = "\uf0f5";
+		public static const fa_dashboard:String = "\uf0e4";
+		public static const fa_dashcube:String = "\uf210";
+		public static const fa_database:String = "\uf1c0";
+		public static const fa_dedent:String = "\uf03b";
+		public static const fa_delicious:String = "\uf1a5";
+		public static const fa_desktop:String = "\uf108";
+		public static const fa_deviantart:String = "\uf1bd";
+		public static const fa_diamond:String = "\uf219";
+		public static const fa_digg:String = "\uf1a6";
+		public static const fa_dollar:String = "\uf155";
+		public static const fa_dot_circle_o:String = "\uf192";
+		public static const fa_download:String = "\uf019";
+		public static const fa_dribbble:String = "\uf17d";
+		public static const fa_dropbox:String = "\uf16b";
+		public static const fa_drupal:String = "\uf1a9";
+		public static const fa_edge:String = "\uf282";
+		public static const fa_edit:String = "\uf044";
+		public static const fa_eject:String = "\uf052";
+		public static const fa_ellipsis_h:String = "\uf141";
+		public static const fa_ellipsis_v:String = "\uf142";
+		public static const fa_empire:String = "\uf1d1";
+		public static const fa_envelope:String = "\uf0e0";
+		public static const fa_envelope_o:String = "\uf003";
+		public static const fa_envelope_square:String = "\uf199";
+		public static const fa_eraser:String = "\uf12d";
+		public static const fa_eur:String = "\uf153";
+		public static const fa_euro:String = "\uf153";
+		public static const fa_exchange:String = "\uf0ec";
+		public static const fa_exclamation:String = "\uf12a";
+		public static const fa_exclamation_circle:String = "\uf06a";
+		public static const fa_exclamation_triangle:String = "\uf071";
+		public static const fa_expand:String = "\uf065";
+		public static const fa_expeditedssl:String = "\uf23e";
+		public static const fa_external_link:String = "\uf08e";
+		public static const fa_external_link_square:String = "\uf14c";
+		public static const fa_eye:String = "\uf06e";
+		public static const fa_eye_slash:String = "\uf070";
 		public static const fa_eyedropper:String = "\uf1fb";
+		public static const fa_facebook:String = "\uf09a";
+		public static const fa_facebook_f:String = "\uf09a";
+		public static const fa_facebook_official:String = "\uf230";
+		public static const fa_facebook_square:String = "\uf082";
+		public static const fa_fast_backward:String = "\uf049";
+		public static const fa_fast_forward:String = "\uf050";
+		public static const fa_fax:String = "\uf1ac";
+		public static const fa_feed:String = "\uf09e";
+		public static const fa_female:String = "\uf182";
+		public static const fa_fighter_jet:String = "\uf0fb";
+		public static const fa_file:String = "\uf15b";
+		public static const fa_file_archive_o:String = "\uf1c6";
+		public static const fa_file_audio_o:String = "\uf1c7";
+		public static const fa_file_code_o:String = "\uf1c9";
+		public static const fa_file_excel_o:String = "\uf1c3";
+		public static const fa_file_image_o:String = "\uf1c5";
+		public static const fa_file_movie_o:String = "\uf1c8";
+		public static const fa_file_o:String = "\uf016";
+		public static const fa_file_pdf_o:String = "\uf1c1";
+		public static const fa_file_photo_o:String = "\uf1c5";
+		public static const fa_file_picture_o:String = "\uf1c5";
+		public static const fa_file_powerpoint_o:String = "\uf1c4";
+		public static const fa_file_sound_o:String = "\uf1c7";
+		public static const fa_file_text:String = "\uf15c";
+		public static const fa_file_text_o:String = "\uf0f6";
+		public static const fa_file_video_o:String = "\uf1c8";
+		public static const fa_file_word_o:String = "\uf1c2";
+		public static const fa_file_zip_o:String = "\uf1c6";
+		public static const fa_files_o:String = "\uf0c5";
+		public static const fa_film:String = "\uf008";
+		public static const fa_filter:String = "\uf0b0";
+		public static const fa_fire:String = "\uf06d";
+		public static const fa_fire_extinguisher:String = "\uf134";
+		public static const fa_firefox:String = "\uf269";
+		public static const fa_flag:String = "\uf024";
+		public static const fa_flag_checkered:String = "\uf11e";
+		public static const fa_flag_o:String = "\uf11d";
+		public static const fa_flash:String = "\uf0e7";
+		public static const fa_flask:String = "\uf0c3";
+		public static const fa_flickr:String = "\uf16e";
+		public static const fa_floppy_o:String = "\uf0c7";
+		public static const fa_folder:String = "\uf07b";
+		public static const fa_folder_o:String = "\uf114";
+		public static const fa_folder_open:String = "\uf07c";
+		public static const fa_folder_open_o:String = "\uf115";
+		public static const fa_font:String = "\uf031";
+		public static const fa_fonticons:String = "\uf280";
+		public static const fa_fort_awesome:String = "\uf286";
+		public static const fa_forumbee:String = "\uf211";
+		public static const fa_forward:String = "\uf04e";
+		public static const fa_foursquare:String = "\uf180";
+		public static const fa_frown_o:String = "\uf119";
 		public static const fa_futbol_o:String = "\uf1e3";
+		public static const fa_gamepad:String = "\uf11b";
+		public static const fa_gavel:String = "\uf0e3";
+		public static const fa_gbp:String = "\uf154";
+		public static const fa_ge:String = "\uf1d1";
+		public static const fa_gear:String = "\uf013";
+		public static const fa_gears:String = "\uf085";
+		public static const fa_genderless:String = "\uf22d";
+		public static const fa_get_pocket:String = "\uf265";
+		public static const fa_gg:String = "\uf260";
+		public static const fa_gg_circle:String = "\uf261";
+		public static const fa_gift:String = "\uf06b";
+		public static const fa_git:String = "\uf1d3";
+		public static const fa_git_square:String = "\uf1d2";
+		public static const fa_github:String = "\uf09b";
+		public static const fa_github_alt:String = "\uf113";
+		public static const fa_github_square:String = "\uf092";
+		public static const fa_gittip:String = "\uf184";
+		public static const fa_glass:String = "\uf000";
+		public static const fa_globe:String = "\uf0ac";
+		public static const fa_google:String = "\uf1a0";
+		public static const fa_google_plus:String = "\uf0d5";
+		public static const fa_google_plus_square:String = "\uf0d4";
 		public static const fa_google_wallet:String = "\uf1ee";
+		public static const fa_graduation_cap:String = "\uf19d";
+		public static const fa_gratipay:String = "\uf184";
+		public static const fa_group:String = "\uf0c0";
+		public static const fa_h_square:String = "\uf0fd";
+		public static const fa_hacker_news:String = "\uf1d4";
+		public static const fa_hand_grab_o:String = "\uf255";
+		public static const fa_hand_lizard_o:String = "\uf258";
+		public static const fa_hand_o_down:String = "\uf0a7";
+		public static const fa_hand_o_left:String = "\uf0a5";
+		public static const fa_hand_o_right:String = "\uf0a4";
+		public static const fa_hand_o_up:String = "\uf0a6";
+		public static const fa_hand_paper_o:String = "\uf256";
+		public static const fa_hand_peace_o:String = "\uf25b";
+		public static const fa_hand_pointer_o:String = "\uf25a";
+		public static const fa_hand_rock_o:String = "\uf255";
+		public static const fa_hand_scissors_o:String = "\uf257";
+		public static const fa_hand_spock_o:String = "\uf259";
+		public static const fa_hand_stop_o:String = "\uf256";
+		public static const fa_hashtag:String = "\uf292";
+		public static const fa_hdd_o:String = "\uf0a0";
+		public static const fa_header:String = "\uf1dc";
+		public static const fa_headphones:String = "\uf025";
+		public static const fa_heart:String = "\uf004";
+		public static const fa_heart_o:String = "\uf08a";
+		public static const fa_heartbeat:String = "\uf21e";
+		public static const fa_history:String = "\uf1da";
+		public static const fa_home:String = "\uf015";
+		public static const fa_hospital_o:String = "\uf0f8";
+		public static const fa_hotel:String = "\uf236";
+		public static const fa_hourglass:String = "\uf254";
+		public static const fa_hourglass_1:String = "\uf251";
+		public static const fa_hourglass_2:String = "\uf252";
+		public static const fa_hourglass_3:String = "\uf253";
+		public static const fa_hourglass_end:String = "\uf253";
+		public static const fa_hourglass_half:String = "\uf252";
+		public static const fa_hourglass_o:String = "\uf250";
+		public static const fa_hourglass_start:String = "\uf251";
+		public static const fa_houzz:String = "\uf27c";
+		public static const fa_html5:String = "\uf13b";
+		public static const fa_i_cursor:String = "\uf246";
 		public static const fa_ils:String = "\uf20b";
+		public static const fa_image:String = "\uf03e";
+		public static const fa_inbox:String = "\uf01c";
+		public static const fa_indent:String = "\uf03c";
+		public static const fa_industry:String = "\uf275";
+		public static const fa_info:String = "\uf129";
+		public static const fa_info_circle:String = "\uf05a";
+		public static const fa_inr:String = "\uf156";
+		public static const fa_instagram:String = "\uf16d";
+		public static const fa_institution:String = "\uf19c";
+		public static const fa_internet_explorer:String = "\uf26b";
+		public static const fa_intersex:String = "\uf224";
 		public static const fa_ioxhost:String = "\uf208";
+		public static const fa_italic:String = "\uf033";
+		public static const fa_joomla:String = "\uf1aa";
+		public static const fa_jpy:String = "\uf157";
+		public static const fa_jsfiddle:String = "\uf1cc";
+		public static const fa_key:String = "\uf084";
+		public static const fa_keyboard_o:String = "\uf11c";
+		public static const fa_krw:String = "\uf159";
+		public static const fa_language:String = "\uf1ab";
+		public static const fa_laptop:String = "\uf109";
 		public static const fa_lastfm:String = "\uf202";
 		public static const fa_lastfm_square:String = "\uf203";
+		public static const fa_leaf:String = "\uf06c";
+		public static const fa_leanpub:String = "\uf212";
+		public static const fa_legal:String = "\uf0e3";
+		public static const fa_lemon_o:String = "\uf094";
+		public static const fa_level_down:String = "\uf149";
+		public static const fa_level_up:String = "\uf148";
+		public static const fa_life_bouy:String = "\uf1cd";
+		public static const fa_life_buoy:String = "\uf1cd";
+		public static const fa_life_ring:String = "\uf1cd";
+		public static const fa_life_saver:String = "\uf1cd";
+		public static const fa_lightbulb_o:String = "\uf0eb";
 		public static const fa_line_chart:String = "\uf201";
+		public static const fa_link:String = "\uf0c1";
+		public static const fa_linkedin:String = "\uf0e1";
+		public static const fa_linkedin_square:String = "\uf08c";
+		public static const fa_linux:String = "\uf17c";
+		public static const fa_list:String = "\uf03a";
+		public static const fa_list_alt:String = "\uf022";
+		public static const fa_list_ol:String = "\uf0cb";
+		public static const fa_list_ul:String = "\uf0ca";
+		public static const fa_location_arrow:String = "\uf124";
+		public static const fa_lock:String = "\uf023";
+		public static const fa_long_arrow_down:String = "\uf175";
+		public static const fa_long_arrow_left:String = "\uf177";
+		public static const fa_long_arrow_right:String = "\uf178";
+		public static const fa_long_arrow_up:String = "\uf176";
+		public static const fa_magic:String = "\uf0d0";
+		public static const fa_magnet:String = "\uf076";
+		public static const fa_mail_forward:String = "\uf064";
+		public static const fa_mail_reply:String = "\uf112";
+		public static const fa_mail_reply_all:String = "\uf122";
+		public static const fa_male:String = "\uf183";
+		public static const fa_map:String = "\uf279";
+		public static const fa_map_marker:String = "\uf041";
+		public static const fa_map_o:String = "\uf278";
+		public static const fa_map_pin:String = "\uf276";
+		public static const fa_map_signs:String = "\uf277";
+		public static const fa_mars:String = "\uf222";
+		public static const fa_mars_double:String = "\uf227";
+		public static const fa_mars_stroke:String = "\uf229";
+		public static const fa_mars_stroke_h:String = "\uf22b";
+		public static const fa_mars_stroke_v:String = "\uf22a";
+		public static const fa_maxcdn:String = "\uf136";
 		public static const fa_meanpath:String = "\uf20c";
+		public static const fa_medium:String = "\uf23a";
+		public static const fa_medkit:String = "\uf0fa";
+		public static const fa_meh_o:String = "\uf11a";
+		public static const fa_mercury:String = "\uf223";
+		public static const fa_microphone:String = "\uf130";
+		public static const fa_microphone_slash:String = "\uf131";
+		public static const fa_minus:String = "\uf068";
+		public static const fa_minus_circle:String = "\uf056";
+		public static const fa_minus_square:String = "\uf146";
+		public static const fa_minus_square_o:String = "\uf147";
+		public static const fa_mixcloud:String = "\uf289";
+		public static const fa_mobile:String = "\uf10b";
+		public static const fa_mobile_phone:String = "\uf10b";
+		public static const fa_modx:String = "\uf285";
+		public static const fa_money:String = "\uf0d6";
+		public static const fa_moon_o:String = "\uf186";
+		public static const fa_mortar_board:String = "\uf19d";
+		public static const fa_motorcycle:String = "\uf21c";
+		public static const fa_mouse_pointer:String = "\uf245";
+		public static const fa_music:String = "\uf001";
+		public static const fa_navicon:String = "\uf0c9";
+		public static const fa_neuter:String = "\uf22c";
 		public static const fa_newspaper_o:String = "\uf1ea";
+		public static const fa_object_group:String = "\uf247";
+		public static const fa_object_ungroup:String = "\uf248";
+		public static const fa_odnoklassniki:String = "\uf263";
+		public static const fa_odnoklassniki_square:String = "\uf264";
+		public static const fa_opencart:String = "\uf23d";
+		public static const fa_openid:String = "\uf19b";
+		public static const fa_opera:String = "\uf26a";
+		public static const fa_optin_monster:String = "\uf23c";
+		public static const fa_outdent:String = "\uf03b";
+		public static const fa_pagelines:String = "\uf18c";
 		public static const fa_paint_brush:String = "\uf1fc";
+		public static const fa_paper_plane:String = "\uf1d8";
+		public static const fa_paper_plane_o:String = "\uf1d9";
+		public static const fa_paperclip:String = "\uf0c6";
+		public static const fa_paragraph:String = "\uf1dd";
+		public static const fa_paste:String = "\uf0ea";
+		public static const fa_pause:String = "\uf04c";
+		public static const fa_pause_circle:String = "\uf28b";
+		public static const fa_pause_circle_o:String = "\uf28c";
+		public static const fa_paw:String = "\uf1b0";
 		public static const fa_paypal:String = "\uf1ed";
+		public static const fa_pencil:String = "\uf040";
+		public static const fa_pencil_square:String = "\uf14b";
+		public static const fa_pencil_square_o:String = "\uf044";
+		public static const fa_percent:String = "\uf295";
+		public static const fa_phone:String = "\uf095";
+		public static const fa_phone_square:String = "\uf098";
+		public static const fa_photo:String = "\uf03e";
+		public static const fa_picture_o:String = "\uf03e";
 		public static const fa_pie_chart:String = "\uf200";
+		public static const fa_pied_piper:String = "\uf1a7";
+		public static const fa_pied_piper_alt:String = "\uf1a8";
+		public static const fa_pinterest:String = "\uf0d2";
+		public static const fa_pinterest_p:String = "\uf231";
+		public static const fa_pinterest_square:String = "\uf0d3";
+		public static const fa_plane:String = "\uf072";
+		public static const fa_play:String = "\uf04b";
+		public static const fa_play_circle:String = "\uf144";
+		public static const fa_play_circle_o:String = "\uf01d";
 		public static const fa_plug:String = "\uf1e6";
+		public static const fa_plus:String = "\uf067";
+		public static const fa_plus_circle:String = "\uf055";
+		public static const fa_plus_square:String = "\uf0fe";
+		public static const fa_plus_square_o:String = "\uf196";
+		public static const fa_power_off:String = "\uf011";
+		public static const fa_print:String = "\uf02f";
+		public static const fa_product_hunt:String = "\uf288";
+		public static const fa_puzzle_piece:String = "\uf12e";
+		public static const fa_qq:String = "\uf1d6";
+		public static const fa_qrcode:String = "\uf029";
+		public static const fa_question:String = "\uf128";
+		public static const fa_question_circle:String = "\uf059";
+		public static const fa_quote_left:String = "\uf10d";
+		public static const fa_quote_right:String = "\uf10e";
+		public static const fa_ra:String = "\uf1d0";
+		public static const fa_random:String = "\uf074";
+		public static const fa_rebel:String = "\uf1d0";
+		public static const fa_recycle:String = "\uf1b8";
+		public static const fa_reddit:String = "\uf1a1";
+		public static const fa_reddit_alien:String = "\uf281";
+		public static const fa_reddit_square:String = "\uf1a2";
+		public static const fa_refresh:String = "\uf021";
+		public static const fa_registered:String = "\uf25d";
+		public static const fa_remove:String = "\uf00d";
+		public static const fa_renren:String = "\uf18b";
+		public static const fa_reorder:String = "\uf0c9";
+		public static const fa_repeat:String = "\uf01e";
+		public static const fa_reply:String = "\uf112";
+		public static const fa_reply_all:String = "\uf122";
+		public static const fa_retweet:String = "\uf079";
+		public static const fa_rmb:String = "\uf157";
+		public static const fa_road:String = "\uf018";
+		public static const fa_rocket:String = "\uf135";
+		public static const fa_rotate_left:String = "\uf0e2";
+		public static const fa_rotate_right:String = "\uf01e";
+		public static const fa_rouble:String = "\uf158";
+		public static const fa_rss:String = "\uf09e";
+		public static const fa_rss_square:String = "\uf143";
+		public static const fa_rub:String = "\uf158";
+		public static const fa_ruble:String = "\uf158";
+		public static const fa_rupee:String = "\uf156";
+		public static const fa_safari:String = "\uf267";
+		public static const fa_save:String = "\uf0c7";
+		public static const fa_scissors:String = "\uf0c4";
+		public static const fa_scribd:String = "\uf28a";
+		public static const fa_search:String = "\uf002";
+		public static const fa_search_minus:String = "\uf010";
+		public static const fa_search_plus:String = "\uf00e";
+		public static const fa_sellsy:String = "\uf213";
+		public static const fa_send:String = "\uf1d8";
+		public static const fa_send_o:String = "\uf1d9";
+		public static const fa_server:String = "\uf233";
+		public static const fa_share:String = "\uf064";
+		public static const fa_share_alt:String = "\uf1e0";
+		public static const fa_share_alt_square:String = "\uf1e1";
+		public static const fa_share_square:String = "\uf14d";
+		public static const fa_share_square_o:String = "\uf045";
 		public static const fa_shekel:String = "\uf20b";
 		public static const fa_sheqel:String = "\uf20b";
+		public static const fa_shield:String = "\uf132";
+		public static const fa_ship:String = "\uf21a";
+		public static const fa_shirtsinbulk:String = "\uf214";
+		public static const fa_shopping_bag:String = "\uf290";
+		public static const fa_shopping_basket:String = "\uf291";
+		public static const fa_shopping_cart:String = "\uf07a";
+		public static const fa_sign_in:String = "\uf090";
+		public static const fa_sign_out:String = "\uf08b";
+		public static const fa_signal:String = "\uf012";
+		public static const fa_simplybuilt:String = "\uf215";
+		public static const fa_sitemap:String = "\uf0e8";
+		public static const fa_skyatlas:String = "\uf216";
+		public static const fa_skype:String = "\uf17e";
+		public static const fa_slack:String = "\uf198";
+		public static const fa_sliders:String = "\uf1de";
 		public static const fa_slideshare:String = "\uf1e7";
+		public static const fa_smile_o:String = "\uf118";
 		public static const fa_soccer_ball_o:String = "\uf1e3";
+		public static const fa_sort:String = "\uf0dc";
+		public static const fa_sort_alpha_asc:String = "\uf15d";
+		public static const fa_sort_alpha_desc:String = "\uf15e";
+		public static const fa_sort_amount_asc:String = "\uf160";
+		public static const fa_sort_amount_desc:String = "\uf161";
+		public static const fa_sort_asc:String = "\uf0de";
+		public static const fa_sort_desc:String = "\uf0dd";
+		public static const fa_sort_down:String = "\uf0dd";
+		public static const fa_sort_numeric_asc:String = "\uf162";
+		public static const fa_sort_numeric_desc:String = "\uf163";
+		public static const fa_sort_up:String = "\uf0de";
+		public static const fa_soundcloud:String = "\uf1be";
+		public static const fa_space_shuttle:String = "\uf197";
+		public static const fa_spinner:String = "\uf110";
+		public static const fa_spoon:String = "\uf1b1";
+		public static const fa_spotify:String = "\uf1bc";
+		public static const fa_square:String = "\uf0c8";
+		public static const fa_square_o:String = "\uf096";
+		public static const fa_stack_exchange:String = "\uf18d";
+		public static const fa_stack_overflow:String = "\uf16c";
+		public static const fa_star:String = "\uf005";
+		public static const fa_star_half:String = "\uf089";
+		public static const fa_star_half_empty:String = "\uf123";
+		public static const fa_star_half_full:String = "\uf123";
+		public static const fa_star_half_o:String = "\uf123";
+		public static const fa_star_o:String = "\uf006";
+		public static const fa_steam:String = "\uf1b6";
+		public static const fa_steam_square:String = "\uf1b7";
+		public static const fa_step_backward:String = "\uf048";
+		public static const fa_step_forward:String = "\uf051";
+		public static const fa_stethoscope:String = "\uf0f1";
+		public static const fa_sticky_note:String = "\uf249";
+		public static const fa_sticky_note_o:String = "\uf24a";
+		public static const fa_stop:String = "\uf04d";
+		public static const fa_stop_circle:String = "\uf28d";
+		public static const fa_stop_circle_o:String = "\uf28e";
+		public static const fa_street_view:String = "\uf21d";
+		public static const fa_strikethrough:String = "\uf0cc";
+		public static const fa_stumbleupon:String = "\uf1a4";
+		public static const fa_stumbleupon_circle:String = "\uf1a3";
+		public static const fa_subscript:String = "\uf12c";
+		public static const fa_subway:String = "\uf239";
+		public static const fa_suitcase:String = "\uf0f2";
+		public static const fa_sun_o:String = "\uf185";
+		public static const fa_superscript:String = "\uf12b";
+		public static const fa_support:String = "\uf1cd";
+		public static const fa_table:String = "\uf0ce";
+		public static const fa_tablet:String = "\uf10a";
+		public static const fa_tachometer:String = "\uf0e4";
+		public static const fa_tag:String = "\uf02b";
+		public static const fa_tags:String = "\uf02c";
+		public static const fa_tasks:String = "\uf0ae";
+		public static const fa_taxi:String = "\uf1ba";
+		public static const fa_television:String = "\uf26c";
+		public static const fa_tencent_weibo:String = "\uf1d5";
+		public static const fa_terminal:String = "\uf120";
+		public static const fa_text_height:String = "\uf034";
+		public static const fa_text_width:String = "\uf035";
+		public static const fa_th:String = "\uf00a";
+		public static const fa_th_large:String = "\uf009";
+		public static const fa_th_list:String = "\uf00b";
+		public static const fa_thumb_tack:String = "\uf08d";
+		public static const fa_thumbs_down:String = "\uf165";
+		public static const fa_thumbs_o_down:String = "\uf088";
+		public static const fa_thumbs_o_up:String = "\uf087";
+		public static const fa_thumbs_up:String = "\uf164";
+		public static const fa_ticket:String = "\uf145";
+		public static const fa_times:String = "\uf00d";
+		public static const fa_times_circle:String = "\uf057";
+		public static const fa_times_circle_o:String = "\uf05c";
+		public static const fa_tint:String = "\uf043";
+		public static const fa_toggle_down:String = "\uf150";
+		public static const fa_toggle_left:String = "\uf191";
 		public static const fa_toggle_off:String = "\uf204";
 		public static const fa_toggle_on:String = "\uf205";
+		public static const fa_toggle_right:String = "\uf152";
+		public static const fa_toggle_up:String = "\uf151";
+		public static const fa_trademark:String = "\uf25c";
+		public static const fa_train:String = "\uf238";
+		public static const fa_transgender:String = "\uf224";
+		public static const fa_transgender_alt:String = "\uf225";
 		public static const fa_trash:String = "\uf1f8";
+		public static const fa_trash_o:String = "\uf014";
+		public static const fa_tree:String = "\uf1bb";
+		public static const fa_trello:String = "\uf181";
+		public static const fa_tripadvisor:String = "\uf262";
+		public static const fa_trophy:String = "\uf091";
+		public static const fa_truck:String = "\uf0d1";
+		public static const fa_try:String = "\uf195";
 		public static const fa_tty:String = "\uf1e4";
+		public static const fa_tumblr:String = "\uf173";
+		public static const fa_tumblr_square:String = "\uf174";
+		public static const fa_turkish_lira:String = "\uf195";
+		public static const fa_tv:String = "\uf26c";
 		public static const fa_twitch:String = "\uf1e8";
+		public static const fa_twitter:String = "\uf099";
+		public static const fa_twitter_square:String = "\uf081";
+		public static const fa_umbrella:String = "\uf0e9";
+		public static const fa_underline:String = "\uf0cd";
+		public static const fa_undo:String = "\uf0e2";
+		public static const fa_university:String = "\uf19c";
+		public static const fa_unlink:String = "\uf127";
+		public static const fa_unlock:String = "\uf09c";
+		public static const fa_unlock_alt:String = "\uf13e";
+		public static const fa_unsorted:String = "\uf0dc";
+		public static const fa_upload:String = "\uf093";
+		public static const fa_usb:String = "\uf287";
+		public static const fa_usd:String = "\uf155";
+		public static const fa_user:String = "\uf007";
+		public static const fa_user_md:String = "\uf0f0";
+		public static const fa_user_plus:String = "\uf234";
+		public static const fa_user_secret:String = "\uf21b";
+		public static const fa_user_times:String = "\uf235";
+		public static const fa_users:String = "\uf0c0";
+		public static const fa_venus:String = "\uf221";
+		public static const fa_venus_double:String = "\uf226";
+		public static const fa_venus_mars:String = "\uf228";
+		public static const fa_viacoin:String = "\uf237";
+		public static const fa_video_camera:String = "\uf03d";
+		public static const fa_vimeo:String = "\uf27d";
+		public static const fa_vimeo_square:String = "\uf194";
+		public static const fa_vine:String = "\uf1ca";
+		public static const fa_vk:String = "\uf189";
+		public static const fa_volume_down:String = "\uf027";
+		public static const fa_volume_off:String = "\uf026";
+		public static const fa_volume_up:String = "\uf028";
+		public static const fa_warning:String = "\uf071";
+		public static const fa_wechat:String = "\uf1d7";
+		public static const fa_weibo:String = "\uf18a";
+		public static const fa_weixin:String = "\uf1d7";
+		public static const fa_whatsapp:String = "\uf232";
+		public static const fa_wheelchair:String = "\uf193";
 		public static const fa_wifi:String = "\uf1eb";
+		public static const fa_wikipedia_w:String = "\uf266";
+		public static const fa_windows:String = "\uf17a";
+		public static const fa_won:String = "\uf159";
+		public static const fa_wordpress:String = "\uf19a";
+		public static const fa_wrench:String = "\uf0ad";
+		public static const fa_xing:String = "\uf168";
+		public static const fa_xing_square:String = "\uf169";
+		public static const fa_y_combinator:String = "\uf23b";
+		public static const fa_y_combinator_square:String = "\uf1d4";
+		public static const fa_yahoo:String = "\uf19e";
+		public static const fa_yc:String = "\uf23b";
+		public static const fa_yc_square:String = "\uf1d4";
 		public static const fa_yelp:String = "\uf1e9";
+		public static const fa_yen:String = "\uf157";
+		public static const fa_youtube:String = "\uf167";
+		public static const fa_youtube_play:String = "\uf16a";
+		public static const fa_youtube_square:String = "\uf166";
 	}
 }
\ No newline at end of file
diff --git a/frameworks/projects/framework/build.xml b/frameworks/projects/framework/build.xml
index a308bee..7e1504a 100644
--- a/frameworks/projects/framework/build.xml
+++ b/frameworks/projects/framework/build.xml
@@ -321,4 +321,10 @@
         <delete dir="${FLEX_HOME}/tempDoc" failonerror="false" includeEmptyDirs="true"/>
         <delete file="${basedir}/bundles/en_US/packages.dita" failonerror="false"/>
     </target>
+
+    <target name="test" description="Runs the FlexUnit tests for this project">
+        <ant antfile="${FLEX_HOME}/flexunit-tests.xml">
+            <property name="project.root" value="${basedir}"/>
+        </ant>
+    </target>
 </project>
diff --git a/frameworks/projects/framework/manifest.xml b/frameworks/projects/framework/manifest.xml
index b27bc2a..ce26f05 100644
--- a/frameworks/projects/framework/manifest.xml
+++ b/frameworks/projects/framework/manifest.xml
@@ -89,6 +89,8 @@
     <component id="SolidColorStroke" class="mx.graphics.SolidColorStroke"/>
     <component id="Sort" class="mx.collections.Sort"/>
     <component id="SortField" class="mx.collections.SortField"/>
+    <component id="ComplexSortField" class="mx.collections.ComplexSortField"/>
+    <component id="ComplexFieldChangeWatcher" class="mx.collections.ComplexFieldChangeWatcher"/>
     <component id="SoundEffect" class="mx.effects.SoundEffect"/>
     <component id="Spacer" class="mx.controls.Spacer"/>
     <component id="Sprite" class="flash.display.Sprite" lookupOnly="true"/>
diff --git a/frameworks/projects/framework/src/mx/binding/Binding.as b/frameworks/projects/framework/src/mx/binding/Binding.as
index 6122921..15bef54 100644
--- a/frameworks/projects/framework/src/mx/binding/Binding.as
+++ b/frameworks/projects/framework/src/mx/binding/Binding.as
@@ -468,9 +468,9 @@
 
 	/**
 	 *	@private
-	 *  true iff XMLLists x and y contain the same node sequence.
+	 *  true if XMLLists x and y contain the same node sequence.
 	 */
-	private function nodeSeqEqual(x:XMLList, y:XMLList):Boolean
+	private static function nodeSeqEqual(x:XMLList, y:XMLList):Boolean
 	{
 		var n:uint = x.length();
 		if (n == y.length())
diff --git a/frameworks/projects/framework/src/mx/binding/utils/BindingUtils.as b/frameworks/projects/framework/src/mx/binding/utils/BindingUtils.as
index e9b8e46..d07ea68 100644
--- a/frameworks/projects/framework/src/mx/binding/utils/BindingUtils.as
+++ b/frameworks/projects/framework/src/mx/binding/utils/BindingUtils.as
@@ -20,8 +20,6 @@
 package mx.binding.utils
 {
 
-import mx.binding.utils.ChangeWatcher;
-
 /**
  *  The BindingUtils class defines utility methods
  *  for performing data binding from ActionScript.
@@ -158,7 +156,7 @@
      *  The <code>host</code> maintains a list of <code>setters</code> to update 
      *  when <code>prop</code> changes.
      *
-     *  @param name The name of the property, or property chain. 
+     *  @param chain The name of the property, or property chain.
      *  See the <code>bindProperty()</code> method for more information.
      *
      *  @param commitOnly Set to <code>true</code> if the handler should be
diff --git a/frameworks/projects/framework/src/mx/binding/utils/ChangeWatcher.as b/frameworks/projects/framework/src/mx/binding/utils/ChangeWatcher.as
index 6e07aba..9dc2470 100644
--- a/frameworks/projects/framework/src/mx/binding/utils/ChangeWatcher.as
+++ b/frameworks/projects/framework/src/mx/binding/utils/ChangeWatcher.as
@@ -246,7 +246,7 @@
     /**
      *  Lets you determine if an Object has any properties.
      *
-     *  @param Object to inspect.
+     *  @param obj to inspect.
      *
      *  @return <code>true</code> if Object has no properties.
      *  
diff --git a/frameworks/projects/framework/src/mx/collections/ArrayList.as b/frameworks/projects/framework/src/mx/collections/ArrayList.as
index 3051b50..c2f1a1b 100644
--- a/frameworks/projects/framework/src/mx/collections/ArrayList.as
+++ b/frameworks/projects/framework/src/mx/collections/ArrayList.as
@@ -630,7 +630,13 @@
         event.oldValue = oldValue;
         event.newValue = newValue;
         
-        itemUpdateHandler(event);        
+        if(!property)
+        {
+            stopTrackUpdates(oldValue);
+            startTrackUpdates(newValue);
+        }
+
+        itemUpdateHandler(event);
     }    
     
     /**
@@ -746,7 +752,8 @@
                 var event:CollectionEvent =
                     new CollectionEvent(CollectionEvent.COLLECTION_CHANGE);
                 event.kind = kind;
-                event.items.push(item);
+				if(kind != CollectionEventKind.RESET && kind != CollectionEventKind.REFRESH)
+				    event.items.push(item);
                 event.location = location;
                 dispatchEvent(event);
             }
@@ -768,11 +775,11 @@
     }
     
     /**
-     *  Called when any of the contained items in the list dispatch an
-     *  ObjectChange event.  
+     *  Called when any of the contained items in the list dispatches a
+     *  <code>PropertyChangeEvent</code>.
      *  Wraps it in a <code>CollectionEventKind.UPDATE</code> object.
      *
-     *  @param event The event object for the ObjectChange event.
+     *  @param event The event object for the <code>PropertyChangeEvent</code>.
      *  
      *  @langversion 3.0
      *  @playerversion Flash 9
diff --git a/frameworks/projects/framework/src/mx/collections/ComplexFieldChangeWatcher.as b/frameworks/projects/framework/src/mx/collections/ComplexFieldChangeWatcher.as
new file mode 100644
index 0000000..20b1e8c
--- /dev/null
+++ b/frameworks/projects/framework/src/mx/collections/ComplexFieldChangeWatcher.as
@@ -0,0 +1,218 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 mx.collections {
+    import flash.events.EventDispatcher;
+    import flash.utils.Dictionary;
+
+    import mx.binding.utils.ChangeWatcher;
+    import mx.core.mx_internal;
+    import mx.events.CollectionEvent;
+    import mx.events.CollectionEventKind;
+    import mx.events.PropertyChangeEvent;
+
+    public class ComplexFieldChangeWatcher extends EventDispatcher
+    {
+        private var _complexFieldWatchers:Dictionary = new Dictionary(true);
+        private var _list:IList;
+        private var _listCollection:ICollectionView;
+
+        public function stopWatchingForComplexFieldChanges():void
+        {
+            unwatchListForChanges();
+            unwatchAllItems();
+        }
+
+        private function unwatchAllItems():void
+        {
+            for(var item:Object in _complexFieldWatchers)
+            {
+                unwatchItem(item);
+                delete _complexFieldWatchers[item];
+            }
+        }
+
+        private function unwatchArrayOfItems(items:Array):void
+        {
+            for(var i:int = 0; i < items.length; i++)
+            {
+                unwatchItem(items[i]);
+            }
+        }
+
+        private function unwatchItem(item:Object):void
+        {
+            var watchersForItem:Array = _complexFieldWatchers[item] as Array;
+            while(watchersForItem && watchersForItem.length)
+            {
+                var watcher:ChangeWatcher = watchersForItem.pop() as ChangeWatcher;
+                if(watcher)
+                    watcher.unwatch();
+            }
+        }
+
+        public function startWatchingForComplexFieldChanges():void
+        {
+            watchListForChanges();
+            watchAllItems();
+        }
+
+        private function watchAllItems():void
+        {
+            watchItems(list);
+        }
+
+        private function watchItems(items:IList):void
+        {
+            if(sortFields)
+            {
+                for(var i:int = 0; i < items.length; i++)
+                {
+                    watchItem(items.getItemAt(i), sortFields);
+                }
+            }
+        }
+
+        private function watchArrayOfItems(items:Array):void
+        {
+            if(sortFields)
+            {
+                for(var i:int = 0; i < items.length; i++)
+                {
+                    watchItem(items[i], sortFields);
+                }
+            }
+        }
+
+        private function watchItem(item:Object, fieldsToWatch:Array):void
+        {
+            if(item)
+            {
+                for(var i:int = 0; i < fieldsToWatch.length; i++)
+                {
+                    var sortField:IComplexSortField = fieldsToWatch[i] as IComplexSortField;
+                    if(sortField && sortField.nameParts)
+                    {
+                        watchItemForField(item, sortField.nameParts);
+                    }
+                }
+            }
+        }
+
+        private function watchItemForField(item:Object, chain:Array):void
+        {
+            var watcher:ChangeWatcher = ChangeWatcher.watch(item, chain, new Closure(item, onComplexValueChanged).callFunctionOnObject, false, true);
+            if(watcher)
+            {
+                addWatcher(watcher, item);
+            }
+        }
+
+        private function addWatcher(watcher:ChangeWatcher, forItem:Object):void
+        {
+            if(!_complexFieldWatchers[forItem])
+                _complexFieldWatchers[forItem] = [];
+            (_complexFieldWatchers[forItem] as Array).push(watcher);
+        }
+
+        private function onComplexValueChanged(item:Object):void
+        {
+            dispatchEvent(PropertyChangeEvent.createUpdateEvent(item, null, null, null));
+        }
+
+        private function get sortFields():Array
+        {
+            return _listCollection && _listCollection.sort ? _listCollection.sort.fields : null;
+        }
+
+        mx_internal function set list(value:IList):void
+        {
+            if(_list != value)
+            {
+                stopWatchingForComplexFieldChanges();
+
+                _list = value;
+                _listCollection = value as ICollectionView;
+            }
+        }
+
+        protected function get list():IList
+        {
+            return _list;
+        }
+
+        private function watchListForChanges():void
+        {
+            if(list)
+                list.addEventListener(CollectionEvent.COLLECTION_CHANGE, onCollectionChanged, false, 0, true);
+        }
+
+        private function unwatchListForChanges():void
+        {
+            if(list)
+                list.removeEventListener(CollectionEvent.COLLECTION_CHANGE, onCollectionChanged);
+        }
+
+        private function onCollectionChanged(event:CollectionEvent):void
+        {
+            switch(event.kind)
+            {
+                case CollectionEventKind.ADD: {
+                    watchArrayOfItems(event.items);
+                    break;
+                }
+                case CollectionEventKind.REMOVE: {
+                    unwatchArrayOfItems(event.items);
+                    break;
+                }
+                case CollectionEventKind.REFRESH:
+                case CollectionEventKind.RESET:
+                {
+                    reset();
+                    break;
+                }
+            }
+        }
+
+        private function reset():void
+        {
+            unwatchAllItems();
+            watchAllItems();
+        }
+    }
+}
+
+import flash.events.Event;
+
+class Closure
+{
+    private var _object:Object;
+    private var _function:Function;
+
+    public function Closure(cachedObject:Object, cachedFunction:Function)
+    {
+        _object = cachedObject;
+        _function = cachedFunction;
+    }
+
+    public function callFunctionOnObject(event:Event):void
+    {
+        _function.apply(null, [_object]);
+    }
+}
\ No newline at end of file
diff --git a/frameworks/projects/framework/src/mx/collections/ComplexSortField.as b/frameworks/projects/framework/src/mx/collections/ComplexSortField.as
new file mode 100644
index 0000000..eb29649
--- /dev/null
+++ b/frameworks/projects/framework/src/mx/collections/ComplexSortField.as
@@ -0,0 +1,56 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 mx.collections {
+    import mx.utils.ObjectUtil;
+
+    public class ComplexSortField extends SortField implements IComplexSortField
+    {
+        private var _nameParts:Array;
+
+        public function ComplexSortField(name:String = null,
+                                         caseInsensitive:Boolean = false,
+                                         descending:Boolean = false,
+                                         numeric:Object = null)
+        {
+            super(name, caseInsensitive, descending, numeric);
+            _nameParts = name ? name.split(".") : [];
+        }
+
+        public function get nameParts():Array
+        {
+            return _nameParts;
+        }
+
+        override public function objectHasSortField(object:Object):Boolean
+        {
+            return object && nameParts && nameParts.length && object.hasOwnProperty(nameParts[0]);
+        }
+
+        override protected function getSortFieldValue(obj:Object):*
+        {
+            return ObjectUtil.getValue(obj, _nameParts);
+        }
+
+        override public function get arraySortOnOptions():int
+        {
+            return -1;
+        }
+    }
+}
diff --git a/frameworks/projects/framework/src/mx/collections/IComplexSortField.as b/frameworks/projects/framework/src/mx/collections/IComplexSortField.as
new file mode 100644
index 0000000..dffb216
--- /dev/null
+++ b/frameworks/projects/framework/src/mx/collections/IComplexSortField.as
@@ -0,0 +1,24 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 mx.collections {
+    public interface IComplexSortField {
+        function get nameParts():Array;
+    }
+}
diff --git a/frameworks/projects/framework/src/mx/collections/ISort.as b/frameworks/projects/framework/src/mx/collections/ISort.as
index a9cae60..640b49a 100644
--- a/frameworks/projects/framework/src/mx/collections/ISort.as
+++ b/frameworks/projects/framework/src/mx/collections/ISort.as
@@ -128,10 +128,16 @@
      *  @productversion Flex 4.5
      */
     function get compareFunction():Function;
+
+    /**
+     *  @deprecated A future release of Apache Flex SDK will remove this function. Please use the constructor
+     *  argument instead.
+     */
     function set compareFunction(value:Function):void;
 
     /**
-     *  An <code>Array</code> of <code>ISortField</code> objects that specifies the fields to compare.
+     *  An <code>Array</code> of <code>ISortField</code> objects that
+     *  specifies the fields to compare.
      *  The order of the ISortField objects in the array determines
      *  field priority order when sorting.
      *  The default sort comparator checks the sort fields in array
@@ -148,6 +154,11 @@
      *  @productversion Flex 4.5
      */
     function get fields():Array;
+
+    /**
+     *  @deprecated A future release of Apache Flex SDK will remove this function. Please use the constructor
+     *  argument instead.
+     */
     function set fields(value:Array):void;
 
     /**
@@ -169,6 +180,11 @@
      *  @productversion Flex 4.5
      */
     function get unique():Boolean;
+
+    /**
+     *  @deprecated A future release of Apache Flex SDK will remove this function. Please use the constructor
+     *  argument instead.
+     */
     function set unique(value:Boolean):void;
 
     //--------------------------------------------------------------------------
@@ -280,7 +296,7 @@
      *  The function cannot determine a definitive answer if the sort uses a
      *  custom comparator; it always returns <code>true</code> in this case.
      *
-     *  @param property The name of the field that to test.
+     *  @param property The name of the field to test.
      *  @return Whether the property value might affect the sort outcome.
      *  If the sort uses the default compareFunction, returns
      *  <code>true</code> if the
@@ -305,6 +321,10 @@
      *  update when the objects in the <code>fields</code> array are modified; 
      *  call its <code>refresh()</code> method to update the view.</p>
      *
+     *  <p>Note: a future release of Apache Flex SDK will change the signature
+     *  of this function to return a reversed clone of this Sort instance. See
+     *  FLEX-34853.</p>
+     *
      *  @langversion 3.0
      *  @playerversion Flash 9
      *  @playerversion AIR 1.1
diff --git a/frameworks/projects/framework/src/mx/collections/ISortField.as b/frameworks/projects/framework/src/mx/collections/ISortField.as
index be4bdc8..766bd69 100644
--- a/frameworks/projects/framework/src/mx/collections/ISortField.as
+++ b/frameworks/projects/framework/src/mx/collections/ISortField.as
@@ -42,7 +42,7 @@
      *  and <code>sort()</code> methods. Other uses of this property are not 
      *  supported.
      *  Returns -1 if this ISortField shouldn't be used by the <code>Sort</code>
-     *  class to sort the field (there is no compareFunction or no name). Otherwise, returns a bitmask of sort options..
+     *  class to sort the field (there is no compareFunction or no name). Otherwise, returns a bitmask of sort options.
      * 
      *  @langversion 3.0
      *  @playerversion Flash 9
@@ -77,6 +77,11 @@
      *  @productversion Flex 4.5
      */
     function get compareFunction():Function;
+
+    /**
+     *  @deprecated A future release of Apache Flex SDK will remove this function. Please use the constructor
+     *  argument instead.
+     */
     function set compareFunction(c:Function):void;
 
     /**
@@ -91,6 +96,11 @@
      *  @productversion Flex 4.5
      */
     function get descending():Boolean;
+
+    /**
+     *  @deprecated A future release of Apache Flex SDK will remove this function. Please use the constructor
+     *  argument instead.
+     */
     function set descending(value:Boolean):void;
 
     /**
@@ -102,6 +112,11 @@
      *  @productversion Flex 4.5
      */
     function get name():String;
+
+    /**
+     *  @deprecated A future release of Apache Flex SDK will remove this function. Please use the constructor
+     *  argument instead.
+     */
     function set name(n:String):void;
 
     /**
@@ -137,6 +152,11 @@
      *  @productversion Flex 4.5
      */
     function get numeric():Object;
+
+    /**
+     *  @deprecated A future release of Apache Flex SDK will remove this function. Please use the constructor
+     *  argument instead.
+     */
     function set numeric(value:Object):void;
 
 
@@ -152,6 +172,11 @@
      *  @productversion Flex 4.11
      */
     function get sortCompareType():String;
+
+    /**
+     *  @deprecated A future release of Apache Flex SDK will remove this function. Please use the constructor
+     *  argument instead.
+     */
     function set sortCompareType(value:String):void;
 
 
@@ -202,6 +227,10 @@
      *  update when the <code>ISortFields</code> are modified; call its 
      *  <code>refresh()</code> method to update the view.</p>
      *
+     *  <p>Note: a future release of Apache Flex SDK will change the signature
+     *  of this function to return a reversed clone of this SortField instance.
+     *  See FLEX-34853 for more details.</p>
+     *
      *  @langversion 3.0
      *  @playerversion Flash 9
      *  @playerversion AIR 1.1
@@ -213,6 +242,9 @@
     /**
      *  This changes the internal compare function used by the <code>SortField</code> based
      *  on the value of <code>sortCompareType</code>.
+     *
+     *  @deprecated A future release of Apache Flex SDK will remove this function in favour of
+     *  making ISortField instances immutable.
      * 
      *  @return true for successfully matched or false for failure to match the <code>sortCompareType</code>.
      * 
@@ -222,5 +254,19 @@
      *  @productversion Flex 4.11
      */
     function updateSortCompareType():Boolean;
+
+    /**
+     *  Returns true if the object has the field required by this <code>ISortField</code> instance.
+     *  In  the case of <code>ComplexSortField</code>, returns true if the object has a field with
+     *  an identical name to the first part of the <code>namePath</code>.
+     *
+     *  @return true if the object has the field required by this <code>ISortField</code> instance.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 11.8
+     *  @playerversion AIR 3.8
+     *  @productversion Flex 4.15
+     */
+    function objectHasSortField(object:Object):Boolean;
 }
 }
diff --git a/frameworks/projects/framework/src/mx/collections/ListCollectionView.as b/frameworks/projects/framework/src/mx/collections/ListCollectionView.as
index 5267b2d..301796b 100644
--- a/frameworks/projects/framework/src/mx/collections/ListCollectionView.as
+++ b/frameworks/projects/framework/src/mx/collections/ListCollectionView.as
@@ -20,29 +20,27 @@
 package mx.collections
 {
 
-import flash.events.Event;
-import flash.events.EventDispatcher;
-import flash.utils.Proxy;
-import flash.utils.flash_proxy;
-import flash.utils.getQualifiedClassName;
+    import flash.events.Event;
+    import flash.events.EventDispatcher;
+    import flash.utils.Proxy;
+    import flash.utils.flash_proxy;
+    import flash.utils.getQualifiedClassName;
 
-import mx.collections.errors.CollectionViewError;
-import mx.collections.errors.CursorError;
-import mx.collections.errors.ItemPendingError;
-import mx.collections.errors.SortError;
-import mx.core.IMXMLObject;
-import mx.core.mx_internal;
-import mx.events.CollectionEvent;
-import mx.events.CollectionEventKind;
-import mx.events.FlexEvent;
-import mx.events.PropertyChangeEvent;
-import mx.managers.ISystemManager;
-import mx.managers.SystemManager;
-import mx.resources.IResourceManager;
-import mx.resources.ResourceManager;
-import mx.utils.ObjectUtil;
+    import mx.binding.utils.BindingUtils;
+    import mx.binding.utils.ChangeWatcher;
+    import mx.collections.errors.CollectionViewError;
+    import mx.collections.errors.ItemPendingError;
+    import mx.collections.errors.SortError;
+    import mx.core.IMXMLObject;
+    import mx.core.mx_internal;
+    import mx.events.CollectionEvent;
+    import mx.events.CollectionEventKind;
+    import mx.events.PropertyChangeEvent;
+    import mx.resources.IResourceManager;
+    import mx.resources.ResourceManager;
+    import mx.utils.ObjectUtil;
 
-use namespace mx_internal;
+    use namespace mx_internal;
 
 /**
  *  Dispatched when the ICollectionView has been updated in some way.
@@ -104,6 +102,12 @@
 
     /**
      *  @private
+     *  Change watcher for complex sort fields.
+     */
+    private var _complexFieldWatcher:ComplexFieldChangeWatcher;
+
+    /**
+     *  @private
      *  Internal event dispatcher.
      */
     private var eventDispatcher:EventDispatcher;
@@ -375,13 +379,22 @@
     /**
      *  @private
      */
-    public function set sort(s:ISort):void
+    public function set sort(value:ISort):void
     {
-        _sort = s;
-		
-        dispatchEvent(new Event("sortChanged"));
+        if(_sort != value)
+        {
+            stopWatchingForComplexFieldsChanges();
+
+            _sort = value;
+
+            startWatchingForComplexFieldsChanges();
+
+            dispatchEvent(new Event("sortChanged"));
+        }
     }
 
+
+
     //--------------------------------------------------------------------------
     //
     // ICollectionView Methods
@@ -622,7 +635,7 @@
      *  Adds a list of items to the current list, placing them at the end of
      *  the list in the order they are passed.
      * 
-     *  @param IList The list of items to add to the current list
+     *  @param addList IList The list of items to add to the current list
      *  
      *  @langversion 3.0
      *  @playerversion Flash 9
@@ -642,7 +655,7 @@
      *  index passed in to the function.  The items are placed at the index location
      *  and placed in the order they are recieved.
      * 
-     *  @param IList The list of items to add to the current list
+     *  @param addList IList The list of items to add to the current list
      *  @param index The location of the current list to place the new items.
      *  @throws RangeError if index is less than 0 or greater than the length of the list. 
      *  
@@ -1052,13 +1065,13 @@
      *  @playerversion AIR 1.1
      *  @productversion Flex 3
      */
-    public function addEventListener(type:String,
+    public function addEventListener(eventType:String,
                                      listener:Function,
                                      useCapture:Boolean = false,
                                      priority:int = 0,
                                      useWeakReference:Boolean = false):void
     {
-        eventDispatcher.addEventListener(type, listener, useCapture,
+        eventDispatcher.addEventListener(eventType, listener, useCapture,
                                          priority, useWeakReference);
     }
 
@@ -1070,11 +1083,11 @@
      *  @playerversion AIR 1.1
      *  @productversion Flex 3
      */
-    public function removeEventListener(type:String,
+    public function removeEventListener(eventType:String,
                                         listener:Function,
                                         useCapture:Boolean = false):void
     {
-        eventDispatcher.removeEventListener(type, listener, useCapture);
+        eventDispatcher.removeEventListener(eventType, listener, useCapture);
     }
 
     /**
@@ -1098,9 +1111,9 @@
      *  @playerversion AIR 1.1
      *  @productversion Flex 3
      */
-    public function hasEventListener(type:String):Boolean
+    public function hasEventListener(eventType:String):Boolean
     {
-        return eventDispatcher.hasEventListener(type);
+        return eventDispatcher.hasEventListener(eventType);
     }
 
     /**
@@ -1111,9 +1124,9 @@
      *  @playerversion AIR 1.1
      *  @productversion Flex 3
      */
-    public function willTrigger(type:String):Boolean
+    public function willTrigger(eventType:String):Boolean
     {
-        return eventDispatcher.willTrigger(type);
+        return eventDispatcher.willTrigger(eventType);
     }
 
     //--------------------------------------------------------------------------
@@ -1129,8 +1142,6 @@
      *
      *  @param items the items to add into the view
      *  @param sourceLocation the location within the list where the items were added
-     *  @param extendedInfo Object reference to any additional event information
-     *         that needs to be preserved.
      *  @param dispatch true if the view should dispatch a corresponding
      *                 CollectionEvent with kind ADD (default is true)
      *  
@@ -1260,7 +1271,7 @@
         }
         catch (e:SortError)
         {
-            // usually because the find critieria is not compatible with the sort.
+            // usually because the find criteria is not compatible with the sort.
         }
         
         return -1;
@@ -1408,7 +1419,7 @@
     }
 
     /**
-     * Given a set of PropertyChangeEvents go through and update the view.
+     * Given a set of <code>PropertyChangeEvent</code>s go through and update the view.
      * This is currently not optimized.
      *  
      *  @langversion 3.0
@@ -1456,7 +1467,7 @@
 					if (updatedItems[j].item == item)
 					{
 						// even if it is, if a different property changed, track that too.
-						var evts:Array = updatedItems[j].events;
+						var evts:Array = updatedItems[j].events as Array;
 						var l:int = evts.length;
 						for (var k:int = 0; k < l; k++)
 						{
@@ -1479,7 +1490,8 @@
                 }
                 else
                 {
-                    updateEntry = { item: item, move: defaultMove, events: [ updateInfo ] };
+                    updateEntry = {item: item, move: defaultMove, events: [updateInfo],
+                        entireObjectChanged: updateInfo.property == null, oldItem: updateInfo.property == null ? updateInfo.oldValue : null};
                     updatedItems.push(updateEntry);
                 }
 
@@ -1491,7 +1503,7 @@
                 updateEntry.move =
                     updateEntry.move
                     || filterFunction != null
-                    || !updateInfo.property
+                    || updateEntry.entireObjectChanged
                     || (sort && sort.propertyAffectsSort(String(updateInfo.property)));
             }
 
@@ -1503,6 +1515,10 @@
                 updateEntry = updatedItems[i];
                 if (updateEntry.move)
                 {
+                    if(updateEntry.entireObjectChanged)
+                    {
+                        removeItemsFromView([updateEntry.oldItem], -1, true);
+                    }
                     moveItemInView(updateEntry.item, updateEntry.item, eventItems);
                 }
                 else
@@ -1654,8 +1670,7 @@
      *  @playerversion AIR 1.1
      *  @productversion Flex 3
      */
-    private function moveItemInView(item:Object,
-                                      dispatch:Boolean = true, updateEventItems:Array = null):void
+    private function moveItemInView(item:Object, dispatch:Boolean = true, updateEventItems:Array = null):void
     {
         if (localIndex)
         {
@@ -1794,18 +1809,18 @@
      *  @playerversion AIR 1.1
      *  @productversion Flex 3
      */
-    private function replaceItemsInView(items:Array,
+    private function replaceItemsInView(changeEvents:Array,
                                           location:int,
                                           dispatch:Boolean = true):void
     {
         if (localIndex)
         {
-            var len:int = items.length;
+            var len:int = changeEvents.length;
             var oldItems:Array = [];
             var newItems:Array = [];
             for (var i:int = 0; i < len; i++)
             {
-                var propertyEvent:PropertyChangeEvent = items[i];
+                var propertyEvent:PropertyChangeEvent = changeEvents[i];
                 oldItems.push(propertyEvent.oldValue);
                 newItems.push(propertyEvent.newValue);
             }
@@ -1818,7 +1833,7 @@
                 new CollectionEvent(CollectionEvent.COLLECTION_CHANGE);
             event.kind = CollectionEventKind.REPLACE;
             event.location = location;
-            event.items = items;
+            event.items = changeEvents;
             dispatchEvent(event);
         }
     }
@@ -1839,19 +1854,61 @@
         }
     }
 
+    public function get complexFieldWatcher():ComplexFieldChangeWatcher
+    {
+        return _complexFieldWatcher;
+    }
+
+    public function set complexFieldWatcher(value:ComplexFieldChangeWatcher):void
+    {
+        if(_complexFieldWatcher != value)
+        {
+            stopWatchingForComplexFieldsChanges();
+
+            _complexFieldWatcher = value;
+            if(_complexFieldWatcher)
+                _complexFieldWatcher.mx_internal::list = this;
+
+            startWatchingForComplexFieldsChanges();
+        }
+    }
+
+    private function startWatchingForComplexFieldsChanges():void
+    {
+        if(complexFieldWatcher && sort && sort.fields)
+        {
+            _complexFieldWatcher.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE, onComplexFieldValueChanged, false, 0, true);
+            _complexFieldWatcher.startWatchingForComplexFieldChanges();
+        }
+    }
+
+    private function stopWatchingForComplexFieldsChanges():void
+    {
+        if(complexFieldWatcher)
+        {
+            _complexFieldWatcher.removeEventListener(PropertyChangeEvent.PROPERTY_CHANGE, onComplexFieldValueChanged);
+            _complexFieldWatcher.stopWatchingForComplexFieldChanges();
+        }
+    }
+
+    private function onComplexFieldValueChanged(changeEvent:PropertyChangeEvent):void
+    {
+        if(sort)
+        {
+            moveItemInView(changeEvent.source);
+        }
+    }
 }
 
 }
 
-import flash.events.EventDispatcher;
 import flash.events.Event;
-import flash.events.IEventDispatcher;
+import flash.events.EventDispatcher;
 
-import mx.events.*;
 import mx.collections.*;
 import mx.collections.errors.*;
 import mx.core.mx_internal;
-import mx.managers.*;
+import mx.events.*;
 import mx.resources.IResourceManager;
 import mx.resources.ResourceManager;
 
@@ -2300,7 +2357,6 @@
      *  @see mx.collections.IViewCursor#current
      *  @see mx.collections.IViewCursor#movePrevious
      *  @see mx.collections.errors.ItemPendingError
-     *  @see mx.collectoins.events.ItemAvailableEvent
      *  @example
      *  <pre>
      *    var myArrayCollection:ICollectionView = new ArrayCollection(["Bobby", "Mark", "Trevor", "Jacey", "Tyler"]);
@@ -2353,7 +2409,6 @@
      *  @see mx.collections.IViewCursor#current
      *  @see mx.collections.IViewCursor#moveNext
      *  @see mx.collections.errors.ItemPendingError
-     *  @see mx.collectoins.events.ItemAvailableEvent
      *  @example
      *  <pre>
      *     var myArrayCollection:ICollectionView = new ArrayCollection(["Bobby", "Mark", "Trevor", "Jacey", "Tyler"]);
@@ -2711,4 +2766,4 @@
     {
         return view.getBookmarkIndex(this);
     }
-}
+}
\ No newline at end of file
diff --git a/frameworks/projects/framework/src/mx/collections/Sort.as b/frameworks/projects/framework/src/mx/collections/Sort.as
index a1c7333..2859f48 100644
--- a/frameworks/projects/framework/src/mx/collections/Sort.as
+++ b/frameworks/projects/framework/src/mx/collections/Sort.as
@@ -20,43 +20,46 @@
 package mx.collections
 {
 
-import flash.events.Event;
-import flash.events.EventDispatcher;
-import mx.collections.ISort;
-import mx.collections.ISortField;
-import mx.collections.errors.SortError;
-import mx.managers.ISystemManager;
-import mx.managers.SystemManager;
-import mx.resources.IResourceManager;
-import mx.resources.ResourceManager;
-import mx.utils.ObjectUtil;
+    import flash.events.Event;
+    import flash.events.EventDispatcher;
 
-[DefaultProperty("fields")]
+    import mx.collections.errors.SortError;
+    import mx.core.mx_internal;
+    import mx.resources.IResourceManager;
+    import mx.resources.ResourceManager;
+    import mx.utils.ObjectUtil;
+
+    use namespace mx_internal;
+
+    [DefaultProperty("fields")]
 [ResourceBundle("collections")]
 [Alternative(replacement="spark.collections.Sort", since="4.5")]
 
 /**
  *  Provides the sorting information required to establish a sort on an
- *  existing view (ICollectionView interface or class that implements the
- *  interface). After you assign a Sort instance to the view's
+ *  existing view (<code>ICollectionView</code> interface or class that
+ *  implements the interface). After you assign a <code>Sort</code> instance to the view's
  *  <code>sort</code> property, you must call the view's
  *  <code>refresh()</code> method to apply the sort criteria.
  *
- *  Typically the sort is defined for collections of complex items, that is 
+ *  <p>Typically the sort is defined for collections of complex items, that is
  *  collections in which the sort is performed on one or more properties of 
  *  the objects in the collection.
- *  The following example shows this use:
+ *  The following example shows this use:</p>
  *  <pre><code>
  *     var col:ICollectionView = new ArrayCollection();
  *     // In the real world, the collection would have more than one item.
  *     col.addItem({first:"Anders", last:"Dickerson"});
+ *
  *     // Create the Sort instance.
- *     var sort:Sort = new Sort();
+ *     var sort:ISort = new Sort();
+ *
  *     // Set the sort field; sort on the last name first, first name second.
  *     // Both fields are case-insensitive.
  *     sort.fields = [new SortField("last",true), new SortField("first",true)];
  *       // Assign the Sort object to the view.
  *     col.sort = sort;
+ *
  *     // Apply the sort to the collection.
  *     col.refresh();
  *  </code></pre>
@@ -73,7 +76,8 @@
  *     col.addItem("California");
  *     col.addItem("Arizona");
  *     var sort:Sort = new Sort();
- *     // There is only one sort field, so use a <code>null</code> 
+ *
+ *     // There is only one sort field, so use a <code>null</code>
  *     // first parameter.
  *     sort.fields = [new SortField(null, true)];
  *     col.sort = sort;
@@ -81,8 +85,8 @@
  *  </code></pre>
  *  </p>
  *
- *  <p>The Flex implementations of the ICollectionView interface retrieve 
- *  all items from a remote location before executing a sort.
+ *  <p>The Flex implementations of the <code>ICollectionView</code> interface
+ *  retrieve all items from a remote location before executing a sort.
  *  If you use paging with a sorted list, apply the sort to the remote
  *  collection before you retrieve the data.
  *  </p>
@@ -180,14 +184,24 @@
      *
      *  <p>Creates a new Sort with no fields set and no custom comparator.</p>
      *
+     *  @param fields An <code>Array</code> of <code>ISortField</code> objects that
+     *  specifies the fields to compare.
+     *  @param customCompareFunction Use a custom function to compare the
+     *  objects in the collection to which this sort will be applied.
+     *  @param unique Indicates if the sort should be unique.
+     *
      *  @langversion 3.0
      *  @playerversion Flash 9
      *  @playerversion AIR 1.1
      *  @productversion Flex 3
      */
-    public function Sort()
+    public function Sort(fields:Array = null, customCompareFunction:Function = null, unique:Boolean = false)
     {
         super();
+
+        this.fields = fields;
+        this.compareFunction = customCompareFunction;
+        this.unique = unique;
     }
 
     //--------------------------------------------------------------------------
@@ -203,6 +217,12 @@
     private var resourceManager:IResourceManager =
                                     ResourceManager.getInstance();
 
+    /**
+     *  @private
+     *  True if we should attempt to use Array.sortOn when possible.
+     */
+    mx_internal var useSortOn:Boolean = true;
+
     //--------------------------------------------------------------------------
     //
     //  Properties
@@ -258,11 +278,6 @@
      */
     private var _fields:Array;
 
-    /**
-     *  @private
-     */
-    private var fieldList:Array = [];
-
     [Inspectable(category="General", arrayType="mx.collections.ISortField")]
     [Bindable("fieldsChanged")]
 
@@ -289,16 +304,7 @@
     public function set fields(value:Array):void
     {
         _fields = value;
-        fieldList = [];
-        if (_fields)
-        {
-            var field:ISortField;
-            for (var i:int = 0; i<_fields.length; i++)
-            {
-                field = ISortField(_fields[i]);
-                fieldList.push(field.name);
-            }
-        }
+
         dispatchEvent(new Event("fieldsChanged"));
     }
 
@@ -334,7 +340,7 @@
      */
     public function set unique(value:Boolean):void
     {
-        _unique = value;
+            _unique = value;
     }
 
     //--------------------------------------------------------------------------
@@ -392,38 +398,29 @@
         {
             compareForFind = this.compareFunction;
             // configure the search criteria
-            if (values && fieldList.length > 0)
+            if (values && fields && fields.length > 0)
             {
                 fieldsForCompare = [];
                 //build up the fields we can compare, if we skip a field in the
-                //middle throw an error.  it is ok to not have all the fields
-                //though
-                var fieldName:String;
+                //middle throw an error. It is ok to not have all the fields though
+                var field:ISortField;
                 var hadPreviousFieldName:Boolean = true;
-                for (var i:int = 0; i < fieldList.length; i++)
+                for (var i:int = 0; i < fields.length; i++)
                 {
-                    fieldName = fieldList[i];
-                    if (fieldName)
+                    field = fields[i] as ISortField;
+                    if (field.name)
                     {
-                        var hasFieldName:Boolean = false;     
-						try
-                        {
-                            hasFieldName = values[fieldName] !== undefined;
-                        }
-                        catch(e:Error)
-                        {
-                        }
-                        if (hasFieldName)
+                        if (field.objectHasSortField(values))
                         {
                             if (!hadPreviousFieldName)
                             {
                                 message = resourceManager.getString(
-                                    "collections", "findCondition", [ fieldName ]);
+                                    "collections", "findCondition", [field.name]);
                                 throw new SortError(message);
                             }
                             else
                             {
-                                fieldsForCompare.push(fieldName);
+                                fieldsForCompare.push(field.name);
                             }
                         }
                         else
@@ -433,7 +430,7 @@
                     }
                     else
                     {
-                        //this is ok because sometimes a sortfield might
+                        //this is ok because sometimes a SortField might
                         //have a custom comparator
                         fieldsForCompare.push(null);
                     }
@@ -650,10 +647,8 @@
         }
         else
         {
-            var fields:Array = this.fields;
             if (fields && fields.length > 0)
             {
-                var i:int;
                 //doing the init value each time may be a little inefficient
                 //but allows for the data to change and the comparators
                 //to update correctly
@@ -668,14 +663,13 @@
                 if (unique)
                 {
                     var uniqueRet2:Object;
-                    if (sortArgs && fields.length == 1)
+                    if (useSortOn && sortArgs && fields.length == 1)
                     {
                         uniqueRet2 = items.sortOn(sortArgs.fields[0], sortArgs.options[0] | Array.UNIQUESORT);
                     }
                     else
                     {
-                        uniqueRet2 = items.sort(internalCompare,
-                                                Array.UNIQUESORT);
+                        uniqueRet2 = items.sort(internalCompare, Array.UNIQUESORT);
                     }
                     if (uniqueRet2 == 0)
                     {
@@ -686,7 +680,7 @@
                 }
                 else
                 {
-                    if (sortArgs)
+                    if (useSortOn && sortArgs)
                     {
                         items.sortOn(sortArgs.fields, sortArgs.options);
                     }
@@ -791,7 +785,7 @@
     {
         if (!defaultEmptyField)
         {
-            defaultEmptyField = new SortField();
+            defaultEmptyField = createEmptySortField();
             try
             {
                 defaultEmptyField.initializeDefaultCompareFunction(a);
@@ -814,5 +808,10 @@
 
         return result;
     }
+
+    protected function createEmptySortField():ISortField
+    {
+        return new SortField();
+    }
 }
 }
diff --git a/frameworks/projects/framework/src/mx/collections/SortField.as b/frameworks/projects/framework/src/mx/collections/SortField.as
index 53b2dab..a465656 100644
--- a/frameworks/projects/framework/src/mx/collections/SortField.as
+++ b/frameworks/projects/framework/src/mx/collections/SortField.as
@@ -20,17 +20,16 @@
 package mx.collections
 {
 
-import flash.events.Event;
-import flash.events.EventDispatcher;
-import mx.collections.errors.SortError;
-import mx.managers.ISystemManager;
-import mx.managers.SystemManager;
-import mx.resources.IResourceManager;
-import mx.resources.ResourceManager;
-import mx.utils.ObjectUtil;
-import mx.collections.SortFieldCompareTypes;
+    import flash.events.Event;
+    import flash.events.EventDispatcher;
 
-[ResourceBundle("collections")]
+    import mx.collections.errors.SortError;
+    import mx.core.mx_internal;
+    import mx.resources.IResourceManager;
+    import mx.resources.ResourceManager;
+    import mx.utils.ObjectUtil;
+
+    [ResourceBundle("collections")]
 [Alternative(replacement="spark.collections.SortField", since="4.5")]
 
 /**
@@ -69,10 +68,10 @@
  *
  *  <p>By default the comparison provided by the SortField class does
  *  not provide correct language specific
- *  sorting for strings.  For this type of sorting please see the 
- *  <code>spark.collections.Sort</code> and 
+ *  sorting for strings.  For this type of sorting please see the
+ *  <code>spark.collections.Sort</code> and
  *  <code>spark.collections.SortField</code> classes.</p>
- * 
+ *
  *  @mxml
  *
  *  <p>The <code>&lt;mx:SortField&gt;</code> tag has the following attributes:</p>
@@ -120,6 +119,10 @@
      *              descending order.
      *  @param numeric Tells the comparator whether to compare sort items as
      *              numbers, instead of alphabetically.
+     *  @param sortCompareType Gives an indication to SortField which of the
+     *              default compare functions to use.
+     *  @param customCompareFunction Use a custom function to compare the
+     *              objects based on this SortField.
      *
      *  @langversion 3.0
      *  @playerversion Flash 9
@@ -129,7 +132,9 @@
     public function SortField(name:String = null,
                               caseInsensitive:Boolean = false,
                               descending:Boolean = false,
-                              numeric:Object = null)
+                              numeric:Object = null,
+                              sortCompareType:String = null,
+                              customCompareFunction:Function = null)
     {
         super();
 
@@ -137,8 +142,13 @@
         _caseInsensitive = caseInsensitive;
         _descending = descending;
         _numeric = numeric;
+        _sortCompareType = sortCompareType;
 
-        if (updateSortCompareType() == false)
+        if(customCompareFunction != null)
+        {
+            compareFunction = customCompareFunction;
+        }
+        else if (updateSortCompareType() == false)
         {
             _compareFunction = stringCompare;
         }
@@ -220,9 +230,10 @@
     }
 
     /**
-     *  @private
+     *  @deprecated A future release of Apache Flex SDK will remove this function. Please use the constructor
+     *  argument instead.
      */
-    public function set caseInsensitive(value:Boolean):void
+    mx_internal function setCaseInsensitive(value:Boolean):void
     {
         if (value != _caseInsensitive)
         {
@@ -246,9 +257,10 @@
     /**
      *  The function that compares two items during a sort of items for the
      *  associated collection. If you specify a <code>compareFunction</code>
-     *  property in an ISort object, Flex ignores any 
-     *  <code>compareFunction</code> properties of the ISort's SortField
-     *  objects.
+     *  property in an <code>ISort</code> object, Flex ignores any
+     *  <code>compareFunction</code> properties of the ISort's
+     *  <code>SortField</code> objects.
+     *
      *  <p>The compare function must have the following signature:</p>
      *
      *  <p><code>function myCompare(a:Object, b:Object):int</code></p>
@@ -256,25 +268,26 @@
      *  <p>This function must return the following values:</p>
      *
      *   <ul>
-     *        <li>-1, if <code>a</code> should appear before <code>b</code> in
-     *        the sorted sequence</li>
-     *        <li>0, if <code>a</code> equals <code>b</code></li>
-     *        <li>1, if <code>a</code> should appear after <code>b</code> in the
-     *        sorted sequence</li>
+     *        <li>-1, if the <code>Object a</code> should appear before the
+     *        <code>Object b</code> in the sorted sequence</li>
+     *        <li>0, if the <code>Object a</code> equals the
+     *        <code>Object b</code></li>
+     *        <li>1, if the <code>Object a</code> should appear after the
+     *        <code>Object b</code> in the sorted sequence</li>
      *  </ul>
-     * 
+     *
      *  <p>The default value is an internal compare function that can perform
      *  a string, numeric, or date comparison in ascending or descending order,
      *  with case-sensitive or case-insensitive string comparisons.
      *  Specify your own function only if you need a need a custom comparison
      *  algorithm. This is normally only the case if a calculated field is
      *  used in a display.</p>
-     *  
-     *  Note if you need, language specific sorting then consider using the
+     *
+     *  Note if you need language-specific sorting then consider using the
      *  <code>spark.collections.SortField</code> class.
-     * 
+     *
      *  @see spark.collections.SortField
-     * 
+     *
      *  @langversion 3.0
      *  @playerversion Flash 9
      *  @playerversion AIR 1.1
@@ -286,7 +299,8 @@
     }
 
     /**
-     *  @private
+     *  @deprecated A future release of Apache Flex SDK will remove this function. Please use the constructor
+     *  argument instead.
      */
     public function set compareFunction(c:Function):void
     {
@@ -321,7 +335,8 @@
     }
 
     /**
-     *  @private
+     *  @deprecated A future release of Apache Flex SDK will remove this function. Please use the constructor
+     *  argument instead.
      */
     public function set descending(value:Boolean):void
     {
@@ -361,7 +376,8 @@
     }
 
     /**
-     *  @private
+     *  @deprecated A future release of Apache Flex SDK will remove this function. Please use the constructor
+     *  argument instead.
      */
     public function set name(n:String):void
     {
@@ -398,7 +414,8 @@
     }
 
     /**
-     *  @private
+     *  @deprecated A future release of Apache Flex SDK will remove this function. Please use the constructor
+     *  argument instead.
      */
     public function set numeric(value:Object):void
     {
@@ -434,7 +451,8 @@
     }
 
     /**
-     *  @private
+     *  @deprecated A future release of Apache Flex SDK will remove this function. Please use the constructor
+     *  argument instead.
      */
     public function set sortCompareType(value:String):void
     {
@@ -444,7 +462,6 @@
             dispatchEvent(new Event("sortCompareTypeChanged"));
         }
 
-
         updateSortCompareType();
     }
 
@@ -476,7 +493,7 @@
 
     /**
      *  @private
-     *  A pretty printer for Sort that lists the sort fields and their
+     *  A pretty printer for SortField that lists the sort fields and their
      *  options.
      */
     override public function toString():String
@@ -522,13 +539,7 @@
                 var value:Object;
                 if (_name)
                 {
-                    try
-                    {
-                        value = obj[_name];
-                    }
-                    catch(error:Error)
-                    {
-                    }
+                    value = getSortFieldValue(obj);
                 }
                 //this needs to be an == null check because !value will return true
                 //where value == 0 or value == false
@@ -593,7 +604,7 @@
 
     /**
      *  @inheritDoc
-     * 
+     *
      *  @langversion 3.0
      *  @playerversion Flash 11.8
      *  @playerversion AIR 3.8
@@ -651,6 +662,33 @@
     }
 
 
+    public function objectHasSortField(object:Object):Boolean
+    {
+        return getSortFieldValue(object) !== undefined;
+    }
+
+
+    //--------------------------------------------------------------------------
+    //
+    //  Protected Methods
+    //
+    //--------------------------------------------------------------------------
+
+    protected function getSortFieldValue(obj:Object):*
+    {
+        var result:* = undefined;
+
+        try
+        {
+            result = obj[_name];
+        }
+        catch(error:Error)
+        {
+        }
+
+        return result;
+    }
+
     //--------------------------------------------------------------------------
     //
     //  Private Methods
@@ -659,7 +697,6 @@
 
     private function nullCompare(a:Object, b:Object):int
     {
-        var value:Object;
         var left:Object;
         var right:Object;
 
@@ -674,21 +711,8 @@
         // we need to introspect the data a little bit
         if (_name)
         {
-            try
-            {
-                left = a[_name];
-            }
-            catch(error:Error)
-            {
-            }
-
-            try
-            {
-                right = b[_name];
-            }
-            catch(error:Error)
-            {
-            }
+            left = getSortFieldValue(a);
+            right = getSortFieldValue(b);
         }
 
         // return 0 (ie equal) if both are null
@@ -753,23 +777,8 @@
      */
     private function numericCompare(a:Object, b:Object):int
     {
-        var fa:Number;
-        try
-        {
-            fa = _name == null ? Number(a) : Number(a[_name]);
-        }
-        catch(error:Error)
-        {
-        }
-
-        var fb:Number;
-        try
-        {
-            fb = _name == null ? Number(b) : Number(b[_name]);
-        }
-        catch(error:Error)
-        {
-        }
+        var fa:Number = _name == null ? Number(a) : Number(getSortFieldValue(a));
+        var fb:Number = _name == null ? Number(b) : Number(getSortFieldValue(b));
 
         return ObjectUtil.numericCompare(fa, fb);
     }
@@ -784,23 +793,8 @@
      */
     private function dateCompare(a:Object, b:Object):int
     {
-        var fa:Date;
-        try
-        {
-            fa = _name == null ? a as Date : a[_name] as Date;
-        }
-        catch(error:Error)
-        {
-        }
-
-        var fb:Date;
-        try
-        {
-            fb = _name == null ? b as Date : b[_name] as Date;
-        }
-        catch(error:Error)
-        {
-        }
+        var fa:Date = _name == null ? a as Date : getSortFieldValue(a) as Date;
+        var fb:Date = _name == null ? b as Date : getSortFieldValue(b) as Date;
 
         return ObjectUtil.dateCompare(fa, fb);
     }
@@ -813,25 +807,10 @@
      *  @playerversion AIR 1.1
      *  @productversion Flex 3
      */
-    private function stringCompare(a:Object, b:Object):int
+    protected function stringCompare(a:Object, b:Object):int
     {
-        var fa:String;
-        try
-        {
-            fa = _name == null ? String(a) : String(a[_name]);
-        }
-        catch(error:Error)
-        {
-        }
-
-        var fb:String;
-        try
-        {
-            fb = _name == null ? String(b) : String(b[_name]);
-        }
-        catch(error:Error)
-        {
-        }
+        var fa:String = _name == null ? String(a) : String(getSortFieldValue(a));
+        var fb:String = _name == null ? String(b) : String(getSortFieldValue(b));
 
         return ObjectUtil.stringCompare(fa, fb, _caseInsensitive);
     }
@@ -846,25 +825,10 @@
      *  @playerversion AIR 1.1
      *  @productversion Flex 3
      */
-    private function xmlCompare(a:Object, b:Object):int
+    protected function xmlCompare(a:Object, b:Object):int
     {
-        var sa:String;
-        try
-        {
-            sa = _name == null ? a.toString() : a[_name].toString();
-        }
-        catch(error:Error)
-        {
-        }
-
-        var sb:String;
-        try
-        {
-            sb = _name == null ? b.toString() : b[_name].toString();
-        }
-        catch(error:Error)
-        {
-        }
+        var sa:String = _name == null ? a.toString() : getSortFieldValue(a).toString();
+        var sb:String = _name == null ? b.toString() : getSortFieldValue(b).toString();
 
         if (numeric == true)
         {
diff --git a/frameworks/projects/framework/src/mx/collections/XMLListAdapter.as b/frameworks/projects/framework/src/mx/collections/XMLListAdapter.as
index 0a8b5e6..f1646a7 100644
--- a/frameworks/projects/framework/src/mx/collections/XMLListAdapter.as
+++ b/frameworks/projects/framework/src/mx/collections/XMLListAdapter.as
@@ -633,8 +633,8 @@
 	}
 
     /**
-     *  Called whenever any of the contained items in the list fire an
-     *  ObjectChange event.  
+     *  Called whenever any of the contained items in the list fires a
+     *  <code>PropertyChangeEvent</code>.
      *  Wraps it in a CollectionEventKind.UPDATE.
      *  
      *  @langversion 3.0
diff --git a/frameworks/projects/framework/src/mx/core/FlexVersion.as b/frameworks/projects/framework/src/mx/core/FlexVersion.as
index 28445d5..bce991b 100644
--- a/frameworks/projects/framework/src/mx/core/FlexVersion.as
+++ b/frameworks/projects/framework/src/mx/core/FlexVersion.as
@@ -56,10 +56,10 @@
      *  @playerversion AIR 1.1
      *  @productversion Flex 3
      */
-    public static const CURRENT_VERSION:uint = 0x040E0001;
+    public static const CURRENT_VERSION:uint = 0x040F0000;
 	
 	/** 
-	 *  The <code>compatibilityVersion</code> value of Flex 4.14.1,
+	 *  The <code>compatibilityVersion</code> value of Flex 4.15,
 	 *  encoded numerically as a <code>uint</code>.
 	 *  Code can compare this constant against
 	 *  the <code>compatibilityVersion</code>
@@ -70,7 +70,7 @@
 	 *  @playerversion AIR 3
 	 *  @productversion Apache Flex 4.14
 	 */
-	public static const VERSION_4_14_1:uint = 0x040E0001;
+	public static const VERSION_4_15:uint = 0x040F0000;
 	
     /** 
      *  The <code>compatibilityVersion</code> value of Flex 4.14,
diff --git a/frameworks/projects/framework/src/mx/core/Version.as b/frameworks/projects/framework/src/mx/core/Version.as
index 3b6707f..3077bda 100644
--- a/frameworks/projects/framework/src/mx/core/Version.as
+++ b/frameworks/projects/framework/src/mx/core/Version.as
@@ -23,4 +23,4 @@
  *  @private
  *  Version string for this class.
  */
-mx_internal static const VERSION:String = "4.14.1.0";
+mx_internal static const VERSION:String = "4.16.0.0";
diff --git a/frameworks/projects/framework/src/mx/formatters/Formatter.as b/frameworks/projects/framework/src/mx/formatters/Formatter.as
index 11c4541..ae88476 100644
--- a/frameworks/projects/framework/src/mx/formatters/Formatter.as
+++ b/frameworks/projects/framework/src/mx/formatters/Formatter.as
@@ -117,9 +117,13 @@
 
 	/**
 	 *  Error message for an invalid format string specified to the formatter.
+	 *  The localeChain property of the ResourceManager is used to resolve
+	 *  the default error message. If it is unable to find a value, it will
+	 *  return <code>null</code>. This can happen if none of the locales
+	 *  specified in the localeChain are compiled into the application.
 	 * 
 	 *  @default "Invalid format"
-	 *  
+	 *
 	 *  @langversion 3.0
 	 *  @playerversion Flash 9
 	 *  @playerversion AIR 1.1
@@ -162,7 +166,11 @@
 	private static var defaultInvalidValueErrorOverride:String
 
 	/**
-	 *  Error messages for an invalid value specified to the formatter.
+	 *  Error messages for an invalid value specified to the formatter. The
+	 *  localeChain property of the ResourceManager is used to resolve the
+	 *  default error message. If it is unable to find a value, it will return
+	 *  <code>null</code>. This can happen if none of the locales specified in
+	 *  the localeChain are compiled into the application.
 	 * 
 	 *  @default "Invalid value"
 	 *  
diff --git a/frameworks/projects/framework/src/mx/managers/ToolTipManagerImpl.as b/frameworks/projects/framework/src/mx/managers/ToolTipManagerImpl.as
index f8f5412..8a341fe 100644
--- a/frameworks/projects/framework/src/mx/managers/ToolTipManagerImpl.as
+++ b/frameworks/projects/framework/src/mx/managers/ToolTipManagerImpl.as
@@ -20,38 +20,36 @@
 package mx.managers
 {
 
-import flash.display.DisplayObject;
-import flash.events.Event;
-import flash.events.EventDispatcher;
-import flash.events.IEventDispatcher;
-import flash.events.MouseEvent;
-import flash.events.TimerEvent;
-import flash.geom.Point;
-import flash.geom.Rectangle;
-import flash.utils.Timer;
+    import flash.display.DisplayObject;
+    import flash.events.Event;
+    import flash.events.EventDispatcher;
+    import flash.events.MouseEvent;
+    import flash.events.TimerEvent;
+    import flash.geom.Point;
+    import flash.geom.Rectangle;
+    import flash.utils.Timer;
 
-import mx.controls.ToolTip;
-import mx.core.FlexGlobals;
-import mx.core.FlexVersion;
-import mx.core.IFlexDisplayObject;
-import mx.core.IFlexModule;
-import mx.core.IInvalidating;
-import mx.core.ILayoutDirectionElement;
-import mx.core.IToolTip;
-import mx.core.IUIComponent;
-import mx.core.IVisualElement;
-import mx.core.LayoutDirection;
-import mx.core.mx_internal;
-import mx.effects.EffectManager;
-import mx.effects.IAbstractEffect;
-import mx.events.DynamicEvent;
-import mx.events.EffectEvent;
-import mx.events.ToolTipEvent;
-import mx.managers.IToolTipManagerClient;
-import mx.styles.IStyleClient;
-import mx.validators.IValidatorListener;
+    import mx.controls.ToolTip;
+    import mx.core.FlexGlobals;
+    import mx.core.FlexVersion;
+    import mx.core.IFlexDisplayObject;
+    import mx.core.IFlexModule;
+    import mx.core.IInvalidating;
+    import mx.core.ILayoutDirectionElement;
+    import mx.core.IToolTip;
+    import mx.core.IUIComponent;
+    import mx.core.IVisualElement;
+    import mx.core.LayoutDirection;
+    import mx.core.mx_internal;
+    import mx.effects.EffectManager;
+    import mx.effects.IAbstractEffect;
+    import mx.events.DynamicEvent;
+    import mx.events.EffectEvent;
+    import mx.events.ToolTipEvent;
+    import mx.styles.IStyleClient;
+    import mx.validators.IValidatorListener;
 
-use namespace mx_internal;
+    use namespace mx_internal;
 
 [ExcludeClass]
 
@@ -627,7 +625,7 @@
             // If the mouse is over the object whose toolTip
             // is being removed, hide the tip.
             if (mouseIsOver(target))
-            	hideImmediately(target);
+            	hideImmediately();
         }
     }
 
@@ -680,7 +678,7 @@
             // If the mouse is over the object whose toolTip
             // is being removed, hide the tip.
             if (mouseIsOver(target))
-            	hideImmediately(target);
+            	hideImmediately();
         }
     }
     
@@ -688,7 +686,7 @@
      *  @private
      *  Returns true if the mouse is over the specified target.
      */
-    private function mouseIsOver(target:DisplayObject):Boolean
+    private static function mouseIsOver(target:DisplayObject):Boolean
     {
     	if (!target || !target.stage)
     		return false;
@@ -726,7 +724,7 @@
      * @param target DisplayObject
      * @return Boolean true is all parents are visible, false if one of them is invisible
      */
-    private function isVisibleParentsIncluded(target:DisplayObject):Boolean 
+    private static function isVisibleParentsIncluded(target:DisplayObject):Boolean
     {
         if (target == null) return false;
         return isTopLevelApplication(target) ? target.visible :
@@ -742,7 +740,7 @@
      * @param target UIComponent
      * @return Boolean true is is topLevelApplication, otherwise false
      */
-    private function isTopLevelApplication(target:DisplayObject):Boolean 
+    private static function isTopLevelApplication(target:DisplayObject):Boolean
     {
         return target == FlexGlobals.topLevelApplication;
     }
@@ -765,7 +763,7 @@
      *  Hides the tip immediately when the toolTip or errorTip property 
      *  becomes null and the mouse is over the target.
      */
-    private function hideImmediately(target:DisplayObject):void
+    private function hideImmediately():void
     {
     	checkIfTargetChanged(null);
     }
@@ -829,7 +827,6 @@
                 if (displayObject is IStyleClient)
                     showErrorTip = FlexVersion.compatibilityVersion < FlexVersion.VERSION_4_0 ||
                                    IStyleClient(displayObject).getStyle("showErrorTip");
-                                   ;
                 if (currentText != null && currentText != "" && showErrorTip)
                 {
                     currentTarget = displayObject;
@@ -870,7 +867,7 @@
     {
         // Do lazy creation of the Timer objects this class uses.
         if (!initialized)
-            initialize()
+            initialize();
 
         var event:ToolTipEvent;
         
@@ -1186,7 +1183,7 @@
             // we have to force a remeasurement and change its size.
             // This is because objects in the toolTips layer
             // don't undergo normal measurement and layout.
-            sizeTip(currentToolTip)
+            sizeTip(currentToolTip);
             
             // If we changed the tooltip max size, we change it back.
             // Otherwise, if RTL, and x wasn't set for maxWidth, reposition 
@@ -1589,7 +1586,7 @@
     /**
      *  @private
      */
-    private function getGlobalBounds(obj:DisplayObject, 
+    private static function getGlobalBounds(obj:DisplayObject,
                                      parent:DisplayObject, 
                                      mirror:Boolean):Rectangle
     {
diff --git a/frameworks/projects/framework/src/mx/resources/ResourceManagerImpl.as b/frameworks/projects/framework/src/mx/resources/ResourceManagerImpl.as
index 3e9c6fa..9b56bee 100644
--- a/frameworks/projects/framework/src/mx/resources/ResourceManagerImpl.as
+++ b/frameworks/projects/framework/src/mx/resources/ResourceManagerImpl.as
@@ -239,15 +239,6 @@
     public function set localeChain(value:Array /* of String */):void
     {
         _localeChain = value;
-		
-		for each (var locale:String in value)
-		{
-			if (!localeMap.hasOwnProperty(locale))
-			{
-				throw new Error(
-					"Could not find compiled locale '" + locale + "'.");	
-			}
-		}
         
         update();
     }
diff --git a/frameworks/projects/framework/src/mx/styles/AdvancedStyleClient.as b/frameworks/projects/framework/src/mx/styles/AdvancedStyleClient.as
index 8ec8a1d..6b2dc21 100644
--- a/frameworks/projects/framework/src/mx/styles/AdvancedStyleClient.as
+++ b/frameworks/projects/framework/src/mx/styles/AdvancedStyleClient.as
@@ -20,18 +20,16 @@
 package mx.styles
 {
 
-import flash.events.*;
+    import flash.events.*;
 
-import mx.core.FlexGlobals;
-import mx.core.IFlexDisplayObject;
-import mx.core.IFlexModule;
-import mx.core.IFlexModuleFactory;
-import mx.core.IMXMLObject;
-import mx.core.UIComponent;
-import mx.styles.*;
-import mx.utils.NameUtil;
+    import mx.core.FlexGlobals;
+    import mx.core.IFlexModule;
+    import mx.core.IFlexModuleFactory;
+    import mx.core.IMXMLObject;
+    import mx.core.UIComponent;
+    import mx.utils.NameUtil;
 
-/**
+    /**
  *  A base class that can be used
  *  when implementing an object that uses the
  *  <code>IAdvancedStyleClient</code> interface.  The base class supplies
@@ -91,7 +89,7 @@
      *  Keeps track of the setStyles() calls that have been deferred
      *  until a moduleFactory is set.
      */
-    private var deferredSetStyles:Object;
+    protected var deferredSetStyles:Object;
 
     //--------------------------------------------------------------------------
     //
@@ -237,15 +235,14 @@
         return StyleManager.getStyleManager(moduleFactory);
     }
 
-    private function setDeferredStyles():void
+    protected function setDeferredStyles():void
     {
         if (!deferredSetStyles)
             return;
 
         for (var styleProp:String in deferredSetStyles)
         {
-            StyleProtoChain.setStyle(
-                                this, styleProp, deferredSetStyles[styleProp]);
+            StyleProtoChain.setStyle(this, styleProp, deferredSetStyles[styleProp]);
         }
 
         deferredSetStyles = null;
diff --git a/frameworks/projects/framework/src/mx/utils/ObjectUtil.as b/frameworks/projects/framework/src/mx/utils/ObjectUtil.as
index 2e79ed9..5934878 100644
--- a/frameworks/projects/framework/src/mx/utils/ObjectUtil.as
+++ b/frameworks/projects/framework/src/mx/utils/ObjectUtil.as
@@ -204,8 +204,8 @@
      */
     public static function isSimple(value:Object):Boolean
     {
-        var type:String = typeof(value);
-        switch (type)
+        var objectType:String = typeof(value);
+        switch (objectType)
         {
             case "number":
             case "string":
@@ -394,7 +394,7 @@
      *   (somepackage::MyCustomClass)#0
      *      clazz = (Date)</pre>
      *
-     *  @param obj Object to be pretty printed.
+     *  @param value Object to be pretty printed.
      * 
      *  @param namespaceURIs Array of namespace URIs for properties 
      *  that should be included in the output.
@@ -567,8 +567,8 @@
                                              exclude:Array = null):String
     {
         var str:String;
-        var type:String = value == null ? "null" : typeof(value);
-        switch (type)
+        var objectType:String = value == null ? "null" : typeof(value);
+        switch (objectType)
         {
             case "boolean":
             case "number":
@@ -710,7 +710,7 @@
 
             default:
             {
-                return "(" + type + ")";
+                return "(" + objectType + ")";
             }
         }
         
@@ -791,7 +791,7 @@
                     if (aRef == bRef)
                         return 0;
                     // the cool thing about our dictionary is that if 
-                    // we've seen objects and determined that they are inequal, then 
+                    // we've seen objects and determined that they are unequal, then
                     // we would've already exited out of this compare() call.  So the 
                     // only info in the dictionary are sets of equal items
                     
@@ -831,10 +831,10 @@
                         
                         // if the objects are dynamic they could have different 
                         // # of properties and should be treated on that basis first
-                        var isDynamicObject:Boolean = isDynamicObject(a);
+                        var isObjectDynamic:Boolean = isDynamicObject(a);
                         
                         // if it's dynamic, check to see that they have all the same properties
-                        if (isDynamicObject)
+                        if (isObjectDynamic)
                         {
                             bProps = getClassInfo(b).properties;
                             result = arrayCompare(aProps, bProps, currentDepth, newDepth, refs);
@@ -860,7 +860,7 @@
                     }
                     else
                     {
-                        // We must be inequal, so return 1
+                        // We must be unequal, so return 1
                         return 1;
                     }
                     break;
@@ -881,7 +881,7 @@
      *
      *  @param obj The Object to inspect.
      *
-     *  @param exclude Array of Strings specifying the property names that should be 
+     *  @param excludes Array of Strings specifying the property names that should be
      *  excluded from the returned result. For example, you could specify 
      *  <code>["currentTarget", "target"]</code> for an Event object since these properties 
      *  can cause the returned result to become large.
@@ -938,7 +938,7 @@
         var classAlias:String;
         var properties:XMLList;
         var prop:XML;
-        var dynamic:Boolean = false;
+        var isDynamic:Boolean = false;
         var metadataInfo:Object;
 
         if (typeof(obj) == "xml")
@@ -954,7 +954,7 @@
             var classInfo:XML = DescribeTypeCache.describeType(obj).typeDescription;
             className = classInfo.@name.toString();
             classAlias = classInfo.@alias.toString();
-            dynamic = (classInfo.@isDynamic.toString() == "true");
+            isDynamic = classInfo.@isDynamic.toString() == "true";
 
             if (options.includeReadOnly)
                 properties = classInfo..accessor.(@access != "writeonly") + classInfo..variable;
@@ -965,7 +965,7 @@
         }
 
         // If type is not dynamic, check our cache for class info...
-        if (!dynamic)
+        if (!isDynamic)
         {
             cacheKey = getCacheKey(obj, excludes, options);
             result = CLASS_INFO_CACHE[cacheKey];
@@ -977,7 +977,7 @@
         result["name"] = className;
         result["alias"] = classAlias;
         result["properties"] = propertyNames;
-        result["dynamic"] = dynamic;
+        result["dynamic"] = isDynamic;
         result["metadata"] = metadataInfo = recordMetadata(properties);
         
         var excludeObject:Object = {};
@@ -1003,7 +1003,7 @@
                 propertyNames.push(key);
             }
         }
-        else if (dynamic)
+        else if (isDynamic)
         {
             for (var p:String in obj)
             {
@@ -1134,7 +1134,7 @@
 
         // For normal, non-dynamic classes we cache the class info
 		// Don't cache XML as it can be dynamic
-        if (!dynamic && className != "XML")
+        if (!isDynamic && className != "XML")
         {
             cacheKey = getCacheKey(obj, excludes, options);
             CLASS_INFO_CACHE[cacheKey] = result;
@@ -1199,7 +1199,75 @@
         }
         return true;
     }
-    
+
+    /**
+     *  Returns the value at the end of the property chain <code>path</code>.
+     *  If the value cannot be reached due to null links on the chain,
+     *  <code>undefined</code> is returned.
+     *
+     *  @param obj The object at the beginning of the property chain
+     *  @param path The path to inspect (e.g. "address.street")
+     *
+     *  @return the value at the end of the property chain, <code>undefined</code>
+     *  if it cannot be reached, or the object itself when <code>path</code> is empty.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public static function getValue(obj:Object, path:Array):*
+    {
+        if(!obj)
+            return undefined;
+
+        if(!path || !path.length)
+            return obj;
+
+        var result:* = obj;
+        var i:int = -1;
+        while(++i < path.length && result)
+            result = result.hasOwnProperty(path[i]) ? result[path[i]] : undefined;
+
+        return result;
+    }
+
+
+    /**
+     *  Sets a new value at the end of the property chain <code>path</code>.
+     *  If the value cannot be reached due to null links on the chain,
+     *  <code>false</code> is returned.
+     *
+     *  @param obj The object at the beginning of the property chain
+     *  @param path The path to traverse (e.g. "address.street")
+     *  @param newValue The value to set (e.g. "Fleet Street")
+     *
+     *  @return <code>true</code> if the value is successfully set,
+     *  <code>false</code> otherwise. Note that the function does not
+     *  use a try/catch block. You can implement one in the calling
+     *  function if there's a risk of type mismatch or other errors during
+     *  the assignment.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public static function setValue(obj:Object, path:Array, newValue:*):Boolean
+    {
+        if(!obj || !path || !path.length)
+            return false;
+
+        var secondToLastLink:* = getValue(obj, path.slice(0, -1));
+        if(secondToLastLink && secondToLastLink.hasOwnProperty(path[path.length - 1]))
+        {
+            secondToLastLink[path[path.length - 1]] = newValue;
+            return true;
+        }
+
+        return false;
+    }
+
     /**
      *  @private
      */
diff --git a/frameworks/projects/framework/src/mx/validators/Validator.as b/frameworks/projects/framework/src/mx/validators/Validator.as
index b311765..a366608 100644
--- a/frameworks/projects/framework/src/mx/validators/Validator.as
+++ b/frameworks/projects/framework/src/mx/validators/Validator.as
@@ -20,18 +20,16 @@
 package mx.validators
 {
 
-import flash.events.Event;
-import flash.events.EventDispatcher;
-import flash.events.IEventDispatcher;
-import mx.binding.BindingManager;
-import mx.core.IMXMLObject;
-import mx.events.FlexEvent;
-import mx.events.ValidationResultEvent;
-import mx.managers.ISystemManager;
-import mx.managers.SystemManager;
-import mx.resources.IResourceManager;
-import mx.resources.ResourceManager;
-import mx.validators.IValidator;
+    import flash.events.Event;
+    import flash.events.EventDispatcher;
+    import flash.events.IEventDispatcher;
+
+    import mx.core.IMXMLObject;
+    import mx.events.FlexEvent;
+    import mx.events.ValidationResultEvent;
+    import mx.resources.IResourceManager;
+    import mx.resources.ResourceManager;
+    import mx.utils.ObjectUtil;
 
 //--------------------------------------
 //  Events
@@ -179,53 +177,7 @@
         return result;
     }
     
-    /**
-     *  @private
-     */
-    private static function findObjectFromString(doc:Object,
-                                                 value:String):Object
-    {
-        var obj:Object = doc;
-        var parts:Array = value.split(".");
 
-        var n:int = parts.length;
-        for (var i:int = 0; i < n; i++)
-        {
-            try
-            {
-                obj = obj[parts[i]];
-                
-                // There's no guarantee that the objects have
-                // already been created when this function fires;
-                // for example, in the deferred instantiation case,
-                // this function fires before the object for validation
-                // has been created.
-                if (obj == null)
-                {
-                    //return true;
-                }
-            }
-            catch(error:Error)
-            {
-                if ((error is TypeError) &&
-                    (error.message.indexOf("null has no properties") != -1))
-                {
-                    var resourceManager:IResourceManager =
-                        ResourceManager.getInstance();
-                    var message:String = resourceManager.getString(
-                        "validators", "fieldNotFound", [ value ]);
-                    throw new Error(message);
-                }
-                else
-                {                    
-                    throw error;
-                }
-            }
-        }
-        
-        return obj;
-    }
-    
     /**
      *  @private
      */
@@ -986,7 +938,7 @@
 
         if (_source && _property)
         {
-            return _source[_property];
+            return _property.indexOf(".") == -1 ? _source[_property] : ObjectUtil.getValue(_source, _property.split("."));
         }
 
         else if (!_source && _property)
@@ -1171,7 +1123,7 @@
     /**
      *  @private
      */
-    private function triggerHandler(event:Event):void
+    protected function triggerHandler(event:Event):void
     {
         validate();
     }
diff --git a/frameworks/projects/framework/tests/FLEX_34852_Tests.as b/frameworks/projects/framework/tests/FLEX_34852_Tests.as
new file mode 100644
index 0000000..654cb92
--- /dev/null
+++ b/frameworks/projects/framework/tests/FLEX_34852_Tests.as
@@ -0,0 +1,322 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 {
+    import mx.collections.ArrayList;
+    import mx.collections.ComplexSortField;
+    import mx.collections.IList;
+    import mx.collections.ListCollectionView;
+    import mx.collections.Sort;
+    import mx.collections.SortFieldCompareTypes;
+
+    import org.flexunit.asserts.assertEquals;
+    import org.flexunit.asserts.assertTrue;
+
+    public class FLEX_34852_Tests {
+        private var _sut:ListCollectionView;
+
+        [Before]
+        public function setUp():void
+        {
+            _sut = new ListCollectionView(new ArrayList());
+        }
+
+        [After]
+        public function tearDown():void
+        {
+            _sut = null;
+        }
+
+        [Test]
+        public function test_ascending_sort_by_complex_string_fields():void
+        {
+            //given
+            var from4To0:IList = generateVOs(5, true);
+            _sut.addAll(from4To0); //values["address.street"]: Street4, Street3, Street2, Street1, Street0
+
+            const sortByStreetAscending:Sort = new Sort();
+            sortByStreetAscending.fields = [new ComplexSortField("address.street", false, false, false)];
+            _sut.sort = sortByStreetAscending;
+
+            //when
+            _sut.refresh(); //should be: Street0, Street1, Street2, Street3, Street4
+
+            //then
+            assertIndexesAre([0, 1, 2, 3, 4]);
+        }
+
+        [Test]
+        public function test_finding_items_works_after_ascending_sort_by_complex_string_fields():void
+        {
+            //given
+            var from4To0:IList = generateVOs(5, true);
+            _sut.addAll(from4To0); //values["address.street"]: Street4, Street3, Street2, Street1, Street0
+
+            const sortByStreetAscending:Sort = new Sort();
+            sortByStreetAscending.fields = [new ComplexSortField("address.street", false, false, false)];
+            _sut.sort = sortByStreetAscending;
+
+            //when
+            _sut.refresh(); //should be: Street0, Street1, Street2, Street3, Street4
+
+            //then
+            for(var i:int = 0; i < from4To0.length; i++)
+            {
+                var vo:FLEX_34852_VO = from4To0.getItemAt(i) as FLEX_34852_VO;
+                assertEquals(vo.index, _sut.getItemIndex(vo));
+            }
+        }
+
+        [Test]
+        public function test_simple_descending_sort_by_complex_string_fields():void
+        {
+            //given
+            var from0To4:IList = generateVOs(5);
+            _sut.addAll(from0To4); //values["address.street"]: Street0, Street1, Street2, Street3, Street4
+
+            const sortByStreetDescending:Sort = new Sort();
+            sortByStreetDescending.fields = [new ComplexSortField("address.street", false, true, false)];
+            _sut.sort = sortByStreetDescending;
+
+            //when
+            _sut.refresh(); //should be: Street4, Street3, Street2, Street1, Street0
+
+            //then
+            assertIndexesAre([4, 3, 2, 1, 0]);
+        }
+
+        [Test]
+        public function test_simple_ascending_sort_by_complex_string_fields_with_unique_field():void
+        {
+            //given
+            var from4To0:IList = generateVOs(5, true);
+            _sut.addAll(from4To0); //values["address.street"]: Street4, Street3, Street2, Street1, Street0
+
+            const sortByStreetAscending:Sort = new Sort();
+            sortByStreetAscending.fields = [new ComplexSortField("address.street", false, false, false)];
+            sortByStreetAscending.unique = true;
+            _sut.sort = sortByStreetAscending;
+
+            //when
+            _sut.refresh(); //should be: Street0, Street1, Street2, Street3, Street4
+
+            //then
+            assertIndexesAre([0, 1, 2, 3, 4]);
+        }
+
+        [Test(expects="Error")]
+        public function test_simple_ascending_sort_by_complex_string_fields_with_unique_flag_and_duplicating_field_throws_error():void
+        {
+            //given
+            var from4To0:IList = generateVOs(5, true);
+            _sut.addAll(from4To0); //values["address.street"]: Street4, Street3, Street2, Street1, Street0
+            FLEX_34852_VO(_sut.getItemAt(0)).address.street = "Street0"; //making sure there's a duplicate
+
+            const sortByStreetAscending:Sort = new Sort();
+            sortByStreetAscending.fields = [new ComplexSortField("address.street", false, false, false)];
+            sortByStreetAscending.unique = true;
+            _sut.sort = sortByStreetAscending;
+
+            //when
+            _sut.refresh(); //should throw an error about there being a duplicate value
+        }
+
+        [Test]
+        public function test_simple_ascending_sort_by_complex_date_fields():void
+        {
+            //given
+            var from2004To2000:IList = generateVOs(5, true);
+            _sut.addAll(from2004To2000); //values["address.dateMovedIn"].getYear(): 2004, 2003, 2002, 2001, 2000
+
+            const sortByDateMovedInAscending:Sort = new Sort();
+            var complexSortField:ComplexSortField = new ComplexSortField("address.dateMovedIn", false, false, false);
+            complexSortField.sortCompareType = SortFieldCompareTypes.DATE;
+            sortByDateMovedInAscending.fields = [complexSortField];
+            _sut.sort = sortByDateMovedInAscending;
+
+            //when
+            _sut.refresh(); //should be: 2000, 2001, 2002, 2003, 2004
+
+            //then
+            assertIndexesAre([0, 1, 2, 3, 4]);
+        }
+
+        [Test]
+        public function test_simple_descending_sort_by_complex_date_fields():void
+        {
+            //given
+            var from2000To2004:IList = generateVOs(5);
+            _sut.addAll(from2000To2004); //values["address.dateMovedIn"].getYear(): 2000, 2001, 2002, 2003, 2004
+
+            const sortByDateMovedInDescending:Sort = new Sort();
+            var complexSortField:ComplexSortField = new ComplexSortField("address.dateMovedIn", false, true, false);
+            complexSortField.sortCompareType = SortFieldCompareTypes.DATE;
+            sortByDateMovedInDescending.fields = [complexSortField];
+            _sut.sort = sortByDateMovedInDescending;
+
+            //when
+            _sut.refresh(); //should be: 2004, 2003, 2002, 2001, 2000
+
+            //then
+            assertIndexesAre([4, 3, 2, 1, 0]);
+        }
+
+        [Test]
+        public function test_simple_ascending_sort_by_complex_number_fields():void
+        {
+            //given
+            var from4To0:IList = generateVOs(5, true);
+            _sut.addAll(from4To0); //values["address.houseNumber"]: 4, 3, 2, 1, 0
+
+            const sortByHouseNumberAscending:Sort = new Sort();
+            sortByHouseNumberAscending.fields = [new ComplexSortField("address.houseNumber", false, false, true)];
+            _sut.sort = sortByHouseNumberAscending;
+
+            //when
+            _sut.refresh(); //should be: 0, 1, 2, 3, 4
+
+            //then
+            assertIndexesAre([0, 1, 2, 3, 4]);
+        }
+
+        [Test]
+        public function test_simple_descending_sort_by_complex_number_fields():void
+        {
+            //given
+            var from4To0:IList = generateVOs(5);
+            _sut.addAll(from4To0); //values["address.houseNumber"]: 0, 1, 2, 3, 4
+
+            const sortByHouseNumberDescending:Sort = new Sort();
+            sortByHouseNumberDescending.fields = [new ComplexSortField("address.houseNumber", false, true, true)];
+            _sut.sort = sortByHouseNumberDescending;
+
+            //when
+            _sut.refresh(); //should be: 4, 3, 2, 1, 0
+
+            //then
+            assertIndexesAre([4, 3, 2, 1, 0]);
+        }
+
+        [Test]
+        public function test_simple_ascending_sort_with_empty_field_name_should_not_throw_error():void
+        {
+            //given
+            var from4To0:IList = generateVOs(5, true);
+            _sut.addAll(from4To0); //values["index"]: 4, 3, 2, 1, 0
+
+            const sortByNothingAscending:Sort = new Sort();
+            sortByNothingAscending.fields = [new ComplexSortField("", false, false)];
+            _sut.sort = sortByNothingAscending;
+
+            //when
+            _sut.refresh(); //just make sure it doesn't throw an error.
+
+            //then - we cannot guarantee the order of the items because SortField.nullCompare returns 0 in this
+            // situation, so we just make sure there's no error
+            assertTrue(true);
+        }
+
+        [Test]
+        public function test_simple_ascending_sort_with_erroneous_field_name_should_not_throw_error():void
+        {
+            //given
+            var from4To0:IList = generateVOs(5, true);
+            _sut.addAll(from4To0); //values["index"]: 4, 3, 2, 1, 0
+
+            const sortByNothingAscending:Sort = new Sort();
+            sortByNothingAscending.fields = [new ComplexSortField("aFieldThatDoesntExist", false, false)];
+            _sut.sort = sortByNothingAscending;
+
+            //when
+            _sut.refresh(); //just make sure it doesn't throw an error.
+
+            //then - we cannot guarantee the order of the items because SortField.nullCompare returns 0 in this
+            // situation, so we just make sure there's no error
+            assertTrue(true);
+        }
+
+
+
+
+        private function assertIndexesAre(indexes:Array):void
+        {
+            assertEquals(indexes.length, _sut.length);
+
+            for(var i:int = 0; i < _sut.length; i++)
+            {
+                assertEquals(FLEX_34852_VO(_sut.getItemAt(i)).index, indexes[i]);
+            }
+        }
+
+
+        private static function generateVOs(no:int, reverse:Boolean = false):IList
+        {
+            return generateObjects(no, reverse, generateOneObject);
+        }
+
+        private static function generateObjects(no:int, reverse:Boolean, generator:Function):IList
+        {
+            var result:Array = [];
+            for(var i:int = 0; i < no; i++)
+            {
+                result.push(generator(i));
+            }
+
+            if(reverse)
+                result.reverse();
+
+            return new ArrayList(result);
+        }
+
+        private static function generateOneObject(i:Number):FLEX_34852_VO
+        {
+            return new FLEX_34852_VO(i, "Object", "Street");
+        }
+    }
+}
+
+[Bindable]
+class FLEX_34852_VO
+{
+    public var name:String;
+    public var address:FLEX_34852_AddressVO;
+    public var index:Number;
+
+    public function FLEX_34852_VO(index:Number, namePrefix:String, streetPrefix:String)
+    {
+        this.index = index;
+        this.name = namePrefix + index;
+        this.address = new FLEX_34852_AddressVO(streetPrefix + index, Math.floor(index), new Date(2000 + Math.floor(index), 0, 0, 0, 0, 0, 1));
+    }
+}
+
+[Bindable]
+class FLEX_34852_AddressVO
+{
+    public var street:String;
+    public var houseNumber:int;
+    public var dateMovedIn:Date;
+
+    public function FLEX_34852_AddressVO(street:String, houseNumber:int, dateMovedIn:Date)
+    {
+        this.street = street;
+        this.houseNumber = houseNumber;
+        this.dateMovedIn = dateMovedIn;
+    }
+}
\ No newline at end of file
diff --git a/frameworks/projects/framework/tests/FLEX_34854_Tests.as b/frameworks/projects/framework/tests/FLEX_34854_Tests.as
new file mode 100644
index 0000000..803e8ab
--- /dev/null
+++ b/frameworks/projects/framework/tests/FLEX_34854_Tests.as
@@ -0,0 +1,276 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 {
+    import mx.collections.ArrayList;
+    import mx.collections.ComplexFieldChangeWatcher;
+    import mx.collections.ComplexSortField;
+    import mx.collections.IList;
+    import mx.collections.ListCollectionView;
+    import mx.collections.Sort;
+
+    import org.flexunit.assertThat;
+
+    import org.flexunit.asserts.assertEquals;
+
+    public class FLEX_34854_Tests {
+        private var _sut:ListCollectionView;
+
+        [Before]
+        public function setUp():void
+        {
+            _sut = new ListCollectionView(new ArrayList());
+        }
+
+        [After]
+        public function tearDown():void
+        {
+            _sut = null;
+        }
+
+        [Test]
+        public function test_changing_complex_sort_field_value_places_it_correctly_according_to_collection_sort():void
+        {
+            //given
+            var from1To4:IList = generateVOs(5);
+            from1To4.removeItemAt(0);
+            _sut.addAll(from1To4);
+
+            const sortByNameAscending:Sort = new Sort();
+            sortByNameAscending.fields = [new ComplexSortField("address.street", false, false, false)];
+            _sut.sort = sortByNameAscending;
+            _sut.refresh(); //values: Object1, Object2, Object3, Object4
+
+            _sut.complexFieldWatcher = new ComplexFieldChangeWatcher();
+
+            //when
+            const first:ListCollectionView_FLEX_34854_VO = _sut.getItemAt(0) as ListCollectionView_FLEX_34854_VO;
+            first.address.street = "Street9"; //this should immediately place the newItem at the end
+
+            //then
+            const newItemIndex:int = _sut.getItemIndex(first);
+            assertEquals("the new item should have been placed at the end of the list as soon as its address's street name was changed", _sut.length - 1, newItemIndex);
+        }
+
+        [Test]
+        public function test_adding_and_changing_complex_sort_field_value_places_it_correctly_according_to_collection_sort():void
+        {
+            //given
+            var from1To4:IList = generateVOs(5);
+            from1To4.removeItemAt(0);
+            _sut.addAll(from1To4);
+
+            const sortByNameAscending:Sort = new Sort();
+            sortByNameAscending.fields = [new ComplexSortField("address.street", false, false, false)];
+            _sut.sort = sortByNameAscending;
+            _sut.refresh(); //values: Object1, Object2, Object3, Object4
+
+            _sut.complexFieldWatcher = new ComplexFieldChangeWatcher();
+
+            //when
+            const newItem:ListCollectionView_FLEX_34854_VO = generateOneObject(5);
+            _sut.addItem(newItem); //values: Object1, Object2, Object3, Object4, Object5
+            newItem.address.street = "Street0"; //this should immediately place the newItem at position 0
+
+            //then
+            const newItemIndex:int = _sut.getItemIndex(newItem);
+            assertEquals("the new item should have been placed at the beginning of the list as soon as its address's street name was changed", 0, newItemIndex);
+            _sut.removeItemAt(_sut.getItemIndex(newItem)); //if the bug is present, this will throw an RTE
+        }
+
+        [Test]
+        public function test_removing_and_changing_complex_sort_field_value_keeps_it_away_from_collection():void
+        {
+            //given
+            var from1To4:IList = generateVOs(5);
+            from1To4.removeItemAt(0);
+            _sut.addAll(from1To4);
+
+            const sortByNameAscending:Sort = new Sort();
+            sortByNameAscending.fields = [new ComplexSortField("address.street", false, false, false)];
+            _sut.sort = sortByNameAscending;
+            _sut.refresh(); //values: Object1, Object2, Object3, Object4
+
+            _sut.complexFieldWatcher = new ComplexFieldChangeWatcher();
+
+            //when
+            const removedItem:ListCollectionView_FLEX_34854_VO = _sut.getItemAt(0) as ListCollectionView_FLEX_34854_VO;
+            _sut.removeItemAt(0);
+            removedItem.address.street = "Street22";
+
+            //then
+            const newItemIndex:int = _sut.getItemIndex(removedItem);
+            assertEquals("the item should have been removed form the list", -1, newItemIndex);
+            for(var i:int = 0; i < _sut.length; i++)
+            {
+                assertThat(_sut.getItemAt(i) != removedItem);
+            }
+        }
+
+        [Test]
+        public function test_replacing_and_changing_complex_sort_field_value_keeps_it_away_from_collection():void
+        {
+            //given
+            var from1To4:IList = generateVOs(5);
+            from1To4.removeItemAt(0);
+            _sut.addAll(from1To4);
+
+            const sortByNameAscending:Sort = new Sort();
+            sortByNameAscending.fields = [new ComplexSortField("address.street", false, false, false)];
+            _sut.sort = sortByNameAscending;
+            _sut.refresh(); //values["address.street"]: Street1, Street2, Street3, Street4
+
+            _sut.complexFieldWatcher = new ComplexFieldChangeWatcher();
+
+            //when
+            const replacedItem:ListCollectionView_FLEX_34854_VO = _sut.getItemAt(0) as ListCollectionView_FLEX_34854_VO;
+            const newItem:ListCollectionView_FLEX_34854_VO = generateOneObject(9);
+            _sut.setItemAt(newItem, 0);
+            replacedItem.address.street = "Street9"; //should make no difference
+            newItem.address.street = "Street5"; //should move it to the end of the list
+
+            //then
+            const indexOfRemovedItem:int = _sut.getItemIndex(replacedItem);
+            assertEquals("the item should have been removed form the list", -1, indexOfRemovedItem);
+            for(var i:int = 0; i < _sut.length; i++)
+            {
+                assertThat(_sut.getItemAt(i) != replacedItem);
+            }
+            assertEquals("the new item should have been moved to the end of the list", _sut.length - 1, _sut.getItemIndex(newItem));
+        }
+
+        [Test]
+        public function test_replacing_list_and_changing_old_items_does_not_influence_current_list():void
+        {
+            //given
+            var from0To4:IList = generateVOs(5);
+            _sut.addAll(from0To4);
+
+            _sut.complexFieldWatcher = new ComplexFieldChangeWatcher();
+
+            const sortByNameAscending:Sort = new Sort();
+            sortByNameAscending.fields = [new ComplexSortField("address.street", false, false, false)];
+            _sut.sort = sortByNameAscending;
+            _sut.refresh(); //values["address.street"]: Street0, Street1, Street2, Street3, Street4
+
+            //when
+            const firstItemFromOldList:ListCollectionView_FLEX_34854_VO = _sut.getItemAt(0) as ListCollectionView_FLEX_34854_VO;
+            _sut.list = generateVOs(3); //values["address.street"]: Street0, Street1, Street2
+            const firstItemFromNewList:ListCollectionView_FLEX_34854_VO = _sut.getItemAt(0) as ListCollectionView_FLEX_34854_VO;
+
+            firstItemFromOldList.address.street = "Street9"; //should make no difference
+            firstItemFromNewList.address.street = "Street9"; //should move it to the end of the list
+
+            //then
+            const indexOfRemovedItem:int = _sut.getItemIndex(firstItemFromOldList);
+            assertEquals("the item should have been removed form the list", -1, indexOfRemovedItem);
+            for(var i:int = 0; i < _sut.length; i++)
+            {
+                assertThat(_sut.getItemAt(i) != firstItemFromOldList);
+            }
+            assertEquals("the new item should have been moved to the end of the list", _sut.length - 1, _sut.getItemIndex(firstItemFromNewList));
+        }
+
+        [Test]
+        public function test_marking_entire_item_as_updated_gets_the_old_object_out_of_the_list():void
+        {
+            //given
+            var from0To4:IList = generateVOs(5, true); //values["address.street"]: Street4, Street3, Street2, Street1, Street0
+            _sut.addAll(from0To4);
+
+            _sut.complexFieldWatcher = new ComplexFieldChangeWatcher();
+
+            const sortByNameAscending:Sort = new Sort();
+            sortByNameAscending.fields = [new ComplexSortField("address.street", false, false, false)];
+            _sut.sort = sortByNameAscending;
+            _sut.refresh(); //values["name"]: Street0, Street1, Street2, Street3, Street4
+
+            //when
+            const removedItem:ListCollectionView_FLEX_34854_VO = (_sut.list as ArrayList).source[0] as ListCollectionView_FLEX_34854_VO;
+            var newItem:ListCollectionView_FLEX_34854_VO = generateOneObject(-1);
+            (_sut.list as ArrayList).source[0] = newItem;
+            _sut.itemUpdated(newItem, null, removedItem, newItem);
+
+            removedItem.address.street = "Street7"; //should make no difference
+            newItem.address.street = "Street8"; //should place it at the end of the list
+
+            //then
+            const indexOfRemovedItem:int = _sut.getItemIndex(removedItem);
+            assertEquals("the item should have been removed from the list", -1, indexOfRemovedItem);
+            for(var i:int = 0; i < _sut.length; i++)
+            {
+                assertThat(_sut.getItemAt(i) != removedItem);
+            }
+            assertEquals("the new item should have been moved to the end of the list", _sut.length - 1, _sut.getItemIndex(newItem));
+        }
+
+
+
+        private static function generateVOs(no:int, reverse:Boolean = false):IList
+        {
+            return generateObjects(no, reverse, generateOneObject);
+        }
+
+        private static function generateObjects(no:int, reverse:Boolean, generator:Function):IList
+        {
+            var result:Array = [];
+            for(var i:int = 0; i < no; i++)
+            {
+                result.push(generator(i));
+            }
+
+            if(reverse)
+                result.reverse();
+
+            return new ArrayList(result);
+        }
+
+        private static function generateOneObject(i:Number):ListCollectionView_FLEX_34854_VO
+        {
+            return new ListCollectionView_FLEX_34854_VO(i, "Object", "Street");
+        }
+    }
+}
+
+
+[Bindable]
+class ListCollectionView_FLEX_34854_VO
+{
+    public var name:String;
+    public var address:ListCollectionView_FLEX_34854_AddressVO;
+    public var index:Number;
+
+    public function ListCollectionView_FLEX_34854_VO(index:Number, namePrefix:String, streetPrefix:String)
+    {
+        this.index = index;
+        this.name = namePrefix + index;
+        this.address = new ListCollectionView_FLEX_34854_AddressVO(streetPrefix + index);
+    }
+}
+
+[Bindable]
+class ListCollectionView_FLEX_34854_AddressVO
+{
+    public var street:String;
+
+    public function ListCollectionView_FLEX_34854_AddressVO(street:String)
+    {
+        this.street = street;
+    }
+}
\ No newline at end of file
diff --git a/frameworks/projects/framework/tests/FLEX_34884_Tests.as b/frameworks/projects/framework/tests/FLEX_34884_Tests.as
new file mode 100644
index 0000000..abf5d70
--- /dev/null
+++ b/frameworks/projects/framework/tests/FLEX_34884_Tests.as
@@ -0,0 +1,506 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 {
+    import mx.collections.ArrayList;
+    import mx.collections.ComplexFieldChangeWatcher;
+    import mx.collections.ComplexSortField;
+    import mx.collections.IList;
+    import mx.collections.ListCollectionView;
+    import spark.collections.Sort;
+    import spark.collections.SortField;
+
+    import org.flexunit.assertThat;
+
+    import org.flexunit.asserts.assertEquals;
+
+    public class FLEX_34884_Tests {
+        private var _sut:ListCollectionView;
+
+        private static const MILLISECONDS_IN_A_SECOND:Number = 1000;
+        private static const MILLISECONDS_IN_A_MINUTE:Number = MILLISECONDS_IN_A_SECOND * 60;
+        private static const MILLISECONDS_IN_AN_HOUR:Number = MILLISECONDS_IN_A_MINUTE * 60;
+        private static const MILLISECONDS_IN_A_DAY:Number = MILLISECONDS_IN_AN_HOUR * 24;
+
+        [Before]
+        public function setUp():void
+        {
+            _sut = new ListCollectionView(new ArrayList());
+        }
+
+        [After]
+        public function tearDown():void
+        {
+            _sut = null;
+        }
+
+        [Test]
+        public function getItemIndex_finds_first_item_in_simple_sorted_non_filtered_list():void
+        {
+            //given
+            var from0To4:IList = generateVOs(5);
+            _sut.addAll(from0To4); //values: Object0, Object1, Object2, Object3, Object4
+
+            const sortByIndexAscending:Sort = new Sort();
+            sortByIndexAscending.fields = [new SortField("index", false, true)];
+            _sut.sort = sortByIndexAscending;
+            _sut.refresh(); //values (unchanged): Object0, Object1, Object2, Object3, Object4
+
+            //when
+            var item0:FLEX_34884_VO = from0To4.getItemAt(0) as FLEX_34884_VO;
+            var item0Index:int = _sut.getItemIndex(item0);
+
+            //then
+            assertEquals(0, item0Index);
+        }
+
+        [Test]
+        public function getItemIndex_finds_last_item_in_simple_descending_sorted_non_filtered_list():void
+        {
+            //given
+            var from0To4:IList = generateVOs(5);
+            _sut.addAll(from0To4); //values: Object0, Object1, Object2, Object3, Object4
+
+            const sortByIndexDescending:Sort = new Sort();
+            sortByIndexDescending.fields = [new SortField("index", true, true)];
+            _sut.sort = sortByIndexDescending;
+            _sut.refresh(); //values: Object4, Object3, Object2, Object1, Object0
+
+            //when
+            var item0:FLEX_34884_VO = from0To4.getItemAt(0) as FLEX_34884_VO;
+            var item0Index:int = _sut.getItemIndex(item0);
+
+            //then
+            assertEquals(_sut.length - 1, item0Index);
+        }
+
+        [Test]
+        public function getItemIndex_finds_second_to_last_item_in_simple_descending_sorted_non_filtered_list():void
+        {
+            //given
+            var from0To4:IList = generateVOs(5);
+            _sut.addAll(from0To4); //values: Object0, Object1, Object2, Object3, Object4
+
+            const sortByIndexDescending:Sort = new Sort();
+            sortByIndexDescending.fields = [new SortField("index", true, true)];
+            _sut.sort = sortByIndexDescending;
+            _sut.refresh(); //values: Object4, Object3, Object2, Object1, Object0
+
+            //when
+            var item1:FLEX_34884_VO = from0To4.getItemAt(1) as FLEX_34884_VO;
+            var item1Index:int = _sut.getItemIndex(item1);
+
+            //then
+            assertEquals(_sut.length - 2, item1Index);
+        }
+
+        [Test]
+        public function getItemIndex_finds_item_in_descending_two_sort_fields_sorted_list_after_changing_one_field():void
+        {
+            //given
+            var from0To4:IList = generateVOs(5);
+            _sut.addAll(from0To4); //index/name: 0/Object0, 1/Object1, 2/Object2, 3/Object3, 4/Object4
+
+            const sortByIndexDescending:Sort = new Sort();
+            sortByIndexDescending.fields = [new SortField("index", true, true), new SortField("name", false, false)];
+            _sut.sort = sortByIndexDescending;
+            _sut.refresh(); //index/name: 4/Object4, 3/Object3, 2/Object2, 1/Object1, 0/Object0
+
+            //when
+            var item1:FLEX_34884_VO = from0To4.getItemAt(1) as FLEX_34884_VO;
+            item1.index = 0; //index/name: 4/Object4, 3/Object3, 2/Object2, 0/Object0, 0/Object1
+
+            var item2:FLEX_34884_VO = from0To4.getItemAt(2) as FLEX_34884_VO;
+            item2.index = 0; //index/name: 4/Object4, 3/Object3, 0/Object0, 0/Object1, 0/Object2
+
+            //then
+            assertEquals(_sut.length - 1, _sut.getItemIndex(item2));
+            assertEquals(_sut.length - 2, _sut.getItemIndex(item1));
+        }
+
+        [Test]
+        public function getItemIndex_finds_second_to_last_item_in_simple_no_fields_non_unique_sorted_list():void
+        {
+            //given
+            var from0To4:IList = generateVOs(5);
+            _sut.addAll(from0To4); //values: Object0, Object1, Object2, Object3, Object4
+
+            const emptySort:Sort = new Sort(null, null, false);
+            _sut.sort = emptySort;
+            _sut.refresh(); //values should be unchanged
+
+            //when
+            var item1:FLEX_34884_VO = from0To4.getItemAt(1) as FLEX_34884_VO;
+
+            //then
+            var item1Index:int = _sut.getItemIndex(item1);
+            assertEquals(1, item1Index);
+        }
+
+        [Test]
+        public function getItemIndex_finds_second_to_last_item_in_simple_no_fields_unique_sorted_list():void
+        {
+            //given
+            var from0To4:IList = generateVOs(5);
+            _sut.addAll(from0To4); //values: Object0, Object1, Object2, Object3, Object4
+
+            const emptySort:Sort = new Sort(null, null, true);
+            _sut.sort = emptySort;
+            _sut.refresh(); //values should be unchanged
+
+            //when
+            var item1:FLEX_34884_VO = from0To4.getItemAt(1) as FLEX_34884_VO;
+
+            //then
+            var item1Index:int = _sut.getItemIndex(item1);
+            assertEquals(1, item1Index);
+        }
+
+        [Test]
+        public function getItemIndex_finds_second_to_last_date_in_simple_no_fields_unique_sorted_list_of_dates():void
+        {
+            //given
+            var yesterday:Date = new Date();
+            yesterday.setTime(yesterday.getTime() - MILLISECONDS_IN_A_DAY);
+
+            var today:Date = new Date();
+
+            var tomorrow:Date = new Date();
+            tomorrow.setTime(tomorrow.getTime() + MILLISECONDS_IN_A_DAY);
+
+            _sut.addItem(tomorrow);
+            _sut.addItem(today);
+            _sut.addItem(yesterday);
+
+            //when
+            const emptySort:Sort = new Sort(null, null, true);
+            _sut.sort = emptySort;
+            _sut.refresh(); //values: yesterday, today, tomorrow
+
+            //then
+            assertEquals(0, _sut.getItemIndex(yesterday));
+            assertEquals(1, _sut.getItemIndex(today));
+            assertEquals(2, _sut.getItemIndex(tomorrow));
+        }
+
+        [Test]
+        public function getItemIndex_finds_second_to_last_date_in_simple_no_fields_non_unique_sorted_list_of_dates():void
+        {
+            //given
+            var yesterday:Date = new Date();
+            yesterday.setTime(yesterday.getTime() - MILLISECONDS_IN_A_DAY);
+
+            var today:Date = new Date();
+
+            var tomorrow:Date = new Date();
+            tomorrow.setTime(tomorrow.getTime() + MILLISECONDS_IN_A_DAY);
+
+            _sut.addItem(tomorrow);
+            _sut.addItem(today);
+            _sut.addItem(yesterday);
+            _sut.addItem(today);
+
+            //when
+            const emptySort:Sort = new Sort(null, null, true);
+            _sut.sort = emptySort;
+            _sut.refresh(); //values: yesterday, today, today, tomorrow
+
+            //then
+            assertEquals(0, _sut.getItemIndex(yesterday));
+            var todayIndex:int = _sut.getItemIndex(today);
+            assertThat(todayIndex == 1 || todayIndex == 2);
+            assertEquals(3, _sut.getItemIndex(tomorrow));
+        }
+
+        [Test]
+        public function getItemIndex_finds_first_item_in_complex_sorted_non_filtered_list():void
+        {
+            //given
+            var from0To4:IList = generateVOs(5);
+            _sut.addAll(from0To4); //values[address.street]: Street0, Street1, Street2, Street3, Street4
+
+            const sortByIndexAscending:Sort = new Sort();
+            sortByIndexAscending.fields = [new ComplexSortField("address.street", false, false)];
+            _sut.sort = sortByIndexAscending;
+            _sut.refresh(); //values[address.street] (unchanged): Street0, Street1, Street2, Street3, Street4
+
+            //when
+            var item0:FLEX_34884_VO = from0To4.getItemAt(0) as FLEX_34884_VO;
+            var item0Index:int = _sut.getItemIndex(item0);
+
+            //then
+            assertEquals(0, item0Index);
+        }
+
+        [Test]
+        public function getItemIndex_finds_last_item_in_complex_descending_sorted_non_filtered_list():void
+        {
+            //given
+            var from0To4:IList = generateVOs(5);
+            _sut.addAll(from0To4); //values[address.street]: Street0, Street1, Street2, Street3, Street4
+
+            const sortByIndexDescending:Sort = new Sort();
+            sortByIndexDescending.fields = [new ComplexSortField("address.street", false, true, false)];
+            _sut.sort = sortByIndexDescending;
+            _sut.refresh(); //values: Street4, Street3, Street2, Street1, Street0
+
+            //when
+            var item0:FLEX_34884_VO = from0To4.getItemAt(0) as FLEX_34884_VO;
+            var item0Index:int = _sut.getItemIndex(item0);
+
+            //then
+            assertEquals(_sut.length - 1, item0Index);
+        }
+
+        [Test]
+        public function getItemIndex_finds_item_in_complex_multi_field_sorted_non_filtered_list():void
+        {
+            //given
+            var from0To4:IList = generateVOs(5);
+            _sut.addAll(from0To4); //index / address.street: 0/Street0, 1/Street1, 2/Street2, 3/Street3, 4/Street4
+
+            const sortByStreetAndIndex:Sort = new Sort();
+            sortByStreetAndIndex.fields = [new ComplexSortField("address.street", false, true, false), new SortField("index", false, true)];
+            _sut.sort = sortByStreetAndIndex;
+            _sut.refresh(); //index / address.street: 4/Street4, 3/Street3, 2/Street2, 1/Street1, 0/Street0
+
+            _sut.complexFieldWatcher = new ComplexFieldChangeWatcher();
+
+            //when
+            var item0:FLEX_34884_VO = from0To4.getItemAt(0) as FLEX_34884_VO;
+            item0.address.street = "Street4"; //index / address.street: 0/Street4, 4/Street4, 3/Street3, 2/Street2, 1/Street1
+
+            var item1:FLEX_34884_VO = from0To4.getItemAt(1) as FLEX_34884_VO;
+            item1.address.street = "Street4"; //index / address.street: 0/Street4, 1/Street4, 4/Street4, 3/Street3, 2/Street2
+            item1.index = 9; //index / address.street: 0/Street4, 4/Street4, 9/Street4, 3/Street3, 2/Street2
+
+            //then
+            assertEquals(0, _sut.getItemIndex(item0));
+            assertEquals(2, _sut.getItemIndex(item1));
+        }
+
+        [Test]
+        public function getItemIndex_finds_item_in_complex_multi_field_sorted_filtered_list():void
+        {
+            function excludeIndexesAbove4(item:Object):Boolean
+            {
+                return FLEX_34884_VO(item).index <= 4;
+            }
+
+            //given
+            var from0To4:IList = generateVOs(5);
+            _sut.addAll(from0To4); //index / address.street: 0/Street0, 1/Street1, 2/Street2, 3/Street3, 4/Street4
+
+            const sortByStreetAndIndex:Sort = new Sort();
+            sortByStreetAndIndex.fields = [new ComplexSortField("address.street", false, true, false), new SortField("index", false, true)];
+            _sut.sort = sortByStreetAndIndex;
+
+            _sut.refresh(); //index / address.street: 4/Street4, 3/Street3, 2/Street2, 1/Street1, 0/Street0
+
+            _sut.complexFieldWatcher = new ComplexFieldChangeWatcher();
+
+            //when
+            var item0:FLEX_34884_VO = from0To4.getItemAt(0) as FLEX_34884_VO;
+            item0.address.street = "Street4"; //index / address.street: 0/Street4, 4/Street4, 3/Street3, 2/Street2, 1/Street1
+
+            var item1:FLEX_34884_VO = from0To4.getItemAt(1) as FLEX_34884_VO;
+            item1.address.street = "Street4"; //index / address.street: 0/Street4, 1/Street4, 4/Street4, 3/Street3, 2/Street2
+            item1.index = 9; //index / address.street: 0/Street4, 4/Street4, 9/Street4, 3/Street3, 2/Street2
+
+            _sut.filterFunction = excludeIndexesAbove4;
+            _sut.refresh(); //index / address.street: 0/Street4, 4/Street4, 3/Street3, 2/Street2
+
+            //then
+            assertEquals(0, _sut.getItemIndex(item0));
+            assertEquals(-1, _sut.getItemIndex(item1));
+            var item3:FLEX_34884_VO = from0To4.getItemAt(3) as FLEX_34884_VO;
+            assertEquals(2, _sut.getItemIndex(item3));
+        }
+
+        [Test]
+        public function getItemIndex_finds_item_in_complex_descending_sorted_list_after_its_repositioned_due_to_its_sort_field_changing():void
+        {
+            //given
+            var from0To4:IList = generateVOs(5);
+            _sut.addAll(from0To4); //values[address.street]: Street0, Street1, Street2, Street3, Street4
+
+            const sortByIndexDescending:Sort = new Sort();
+            sortByIndexDescending.fields = [new ComplexSortField("address.street", false, true, false)];
+            _sut.sort = sortByIndexDescending;
+            _sut.refresh(); //values: Street4, Street3, Street2, Street1, Street0
+
+            _sut.complexFieldWatcher = new ComplexFieldChangeWatcher();
+
+            //when
+            var item0:FLEX_34884_VO = from0To4.getItemAt(0) as FLEX_34884_VO;
+            var item999:FLEX_34884_VO = item0;
+            item999.address.street = "Street999";
+
+            //then
+            var item999Index:int = _sut.getItemIndex(item0);
+            assertEquals(0, item999Index);
+        }
+
+        [Test]
+        public function getItemIndex_finds_item_in_complex_descending_sorted_list_after_its_repositioned_in_middle_due_to_its_sort_field_changing():void
+        {
+            //given
+            var from0To4:IList = generateVOs(5);
+            _sut.addAll(from0To4); //values[address.street]: Street0, Street1, Street2, Street3, Street4
+
+            const sortByIndexDescending:Sort = new Sort();
+            sortByIndexDescending.fields = [new ComplexSortField("address.street", false, true, false)];
+            _sut.sort = sortByIndexDescending;
+            _sut.refresh(); //values[address.street]: Street4, Street3, Street2, Street1, Street0
+
+            _sut.complexFieldWatcher = new ComplexFieldChangeWatcher();
+
+            //when
+            var item2:FLEX_34884_VO = from0To4.getItemAt(2) as FLEX_34884_VO;
+            item2.address.street = "Street9"; //values[address.street]: Street9, Street4, Street3, Street1, Street0
+
+            var item0:FLEX_34884_VO = from0To4.getItemAt(0) as FLEX_34884_VO;
+            item0.address.street = "Street2"; //values[address.street]: Street9, Street4, Street3, Street2, Street1
+
+            //then
+            var street2Index:int = _sut.getItemIndex(item0);
+            assertEquals(3, street2Index);
+        }
+
+        [Test]
+        public function getItemIndex_finds_newly_inserted_item_in_complex_descending_sorted_list():void
+        {
+            //given
+            var from0To4:IList = generateVOs(5);
+            _sut.addAll(from0To4); //values[address.street]: Street0, Street1, Street2, Street3, Street4
+
+            const sortByStreetDescending:Sort = new Sort();
+            sortByStreetDescending.fields = [new ComplexSortField("address.street", false, true, false)];
+            _sut.sort = sortByStreetDescending;
+            _sut.refresh(); //values[address.street]: Street4, Street3, Street2, Street1, Street0
+
+            _sut.complexFieldWatcher = new ComplexFieldChangeWatcher();
+
+            //when
+            var newItem:FLEX_34884_VO = generateOneObject(9);
+            _sut.addItemAt(newItem, _sut.length - 1); //values[address.street]: Street9, Street4, Street3, Street2, Street1, Street0
+
+            //then
+            assertEquals(0, _sut.getItemIndex(newItem));
+        }
+
+        [Test]
+        public function getItemIndex_finds_newly_inserted_item_in_complex_multi_field_sorted_list():void
+        {
+            //given
+            var from0To4:IList = generateVOs(5);
+            _sut.addAll(from0To4); //values[address.street/index]: Street0/0, Street1/1, Street2/2, Street3/3, Street4/4
+
+            const sortByStreetAndIndex:Sort = new Sort();
+            sortByStreetAndIndex.fields = [new ComplexSortField("address.street", false, true, false), new SortField("index", false, true)];
+            _sut.sort = sortByStreetAndIndex;
+            _sut.refresh(); //values[address.street/index]: Street4/4, Street3/3, Street2/2, Street1/1, Street0/0
+
+            _sut.complexFieldWatcher = new ComplexFieldChangeWatcher();
+
+            //when
+            var newItem:FLEX_34884_VO = generateOneObject(9);
+            newItem.address.street = "Street4";
+            _sut.addItemAt(newItem, _sut.length - 1); //values[address.street/index]: Street4/4, Street4/9, Street3/3, Street2/2, Street1/1, Street0/0
+
+            //then
+            assertEquals(1, _sut.getItemIndex(newItem));
+        }
+
+        [Test]
+        public function getItemIndex_finds_newly_inserted_item_in_complex_descending_sorted_list_after_its_sort_field_changes():void
+        {
+            //given
+            var from0To4:IList = generateVOs(5);
+            _sut.addAll(from0To4); //values[address.street]: Street0, Street1, Street2, Street3, Street4
+
+            const sortByIndexDescending:Sort = new Sort();
+            sortByIndexDescending.fields = [new ComplexSortField("address.street", false, true, false)];
+            _sut.sort = sortByIndexDescending;
+            _sut.refresh(); //values[address.street]: Street4, Street3, Street2, Street1, Street0
+
+            _sut.complexFieldWatcher = new ComplexFieldChangeWatcher();
+
+            //when
+            var newItem:FLEX_34884_VO = generateOneObject(1);
+            _sut.addItemAt(newItem, _sut.length - 1); //values[address.street]: Street4, Street3, Street2, Street1, Street1, Street0
+
+            newItem.address.street = "Street3"; //values[address.street]: Street4, Street3, Street3, Street2, Street1, Street1, Street0
+
+            //then
+            var newItemIndex:int = _sut.getItemIndex(newItem);
+            assertThat(newItemIndex == 1 || newItemIndex == 2);
+        }
+
+        private static function generateVOs(no:int, reverse:Boolean = false):IList
+        {
+            return generateObjects(no, reverse, generateOneObject);
+        }
+
+        private static function generateObjects(no:int, reverse:Boolean, generator:Function):IList
+        {
+            var result:Array = [];
+            for(var i:int = 0; i < no; i++)
+            {
+                result.push(generator(i));
+            }
+
+            if(reverse)
+                result.reverse();
+
+            return new ArrayList(result);
+        }
+
+        private static function generateOneObject(i:Number):FLEX_34884_VO
+        {
+            return new FLEX_34884_VO(i, "Object", "Street");
+        }
+    }
+}
+
+[Bindable]
+class FLEX_34884_VO
+{
+    public var name:String;
+    public var address:FLEX_34884_AddressVO;
+    public var index:Number;
+
+    public function FLEX_34884_VO(index:Number, namePrefix:String, streetPrefix:String)
+    {
+        this.index = index;
+        this.name = namePrefix + index;
+        this.address = new FLEX_34884_AddressVO(streetPrefix + index);
+    }
+}
+
+[Bindable]
+class FLEX_34884_AddressVO
+{
+    public var street:String;
+
+    public function FLEX_34884_AddressVO(street:String)
+    {
+        this.street = street;
+    }
+}
\ No newline at end of file
diff --git a/frameworks/projects/framework/tests/ListCollectionView_FLEX_34837_Tests.as b/frameworks/projects/framework/tests/ListCollectionView_FLEX_34837_Tests.as
new file mode 100644
index 0000000..f762358
--- /dev/null
+++ b/frameworks/projects/framework/tests/ListCollectionView_FLEX_34837_Tests.as
@@ -0,0 +1,186 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 {
+    import mx.collections.ArrayList;
+    import mx.collections.ComplexSortField;
+    import mx.collections.IList;
+    import mx.collections.ListCollectionView;
+    import mx.collections.Sort;
+    import mx.collections.SortField;
+    import mx.utils.ObjectUtil;
+
+    import org.flexunit.asserts.assertEquals;
+
+    public class ListCollectionView_FLEX_34837_Tests {
+        private var _sut:ListCollectionView;
+
+        [Before]
+        public function setUp():void
+        {
+            _sut = new ListCollectionView(new ArrayList());
+        }
+
+        [After]
+        public function tearDown():void
+        {
+            _sut = null;
+        }
+
+        [Test]
+        public function test_sort_by_complex_fields_with_custom_compare_function_for_sort():void
+        {
+            function compareByStreet(a:ListCollectionView_FLEX_34837_VO, b:ListCollectionView_FLEX_34837_VO, fields:Array):int
+            {
+                var streetA:String = a.address ? a.address.street : null;
+                var streetB:String = b.address ? b.address.street : null;
+
+                return ObjectUtil.stringCompare(streetA, streetB, true);
+            }
+
+            //given
+            var from4To0:IList = generateVOs(5, true);
+            _sut.addAll(from4To0); //values["address.street"]: Street4, Street3, Street2, Street1, Street0
+
+            const sortByStreetAscending:Sort = new Sort();
+            sortByStreetAscending.fields = [new ComplexSortField("address.street", false, false, false)]; //should make no difference
+            sortByStreetAscending.compareFunction = compareByStreet;
+            _sut.sort = sortByStreetAscending;
+
+            //when
+            _sut.refresh(); //should be: Street0, Street1, Street2, Street3, Street4
+
+            //then
+            assertIndexesAre([0, 1, 2, 3, 4]);
+        }
+
+        [Test]
+        public function test_sort_by_complex_fields_with_custom_compare_function_for_sort_field():void
+        {
+            function compareByStreet(a:ListCollectionView_FLEX_34837_VO, b:ListCollectionView_FLEX_34837_VO):int
+            {
+                var streetA:String = a.address ? a.address.street : null;
+                var streetB:String = b.address ? b.address.street : null;
+
+                return ObjectUtil.stringCompare(streetA, streetB, true);
+            }
+
+            //given
+            var from4To0:IList = generateVOs(5, true);
+            _sut.addAll(from4To0); //values["address.street"]: Street4, Street3, Street2, Street1, Street0
+
+            const sortByStreetAscending:Sort = new Sort();
+            var sortField:SortField = new ComplexSortField("address.street", false, false, false);
+            sortField.compareFunction = compareByStreet;
+            sortByStreetAscending.fields = [sortField];
+            _sut.sort = sortByStreetAscending;
+
+            //when
+            _sut.refresh(); //should be: Street0, Street1, Street2, Street3, Street4
+
+            //then
+            assertIndexesAre([0, 1, 2, 3, 4]);
+        }
+
+        [Test]
+        public function test_changing_simple_sort_field_value_places_it_correctly_according_to_collection_sort():void
+        {
+            //given
+            var from1To4:IList = generateVOs(5);
+            from1To4.removeItemAt(0);
+            _sut.addAll(from1To4);
+
+            const sortByNameAscending:Sort = new Sort();
+            sortByNameAscending.fields = [new SortField("name", false, false, false)];
+            _sut.sort = sortByNameAscending;
+            _sut.refresh(); //values: Object1, Object2, Object3, Object4
+
+            //when
+            const newItem:ListCollectionView_FLEX_34837_VO = generateOneObject(5);
+            _sut.addItem(newItem); //values: Object1, Object2, Object3, Object4, Object5
+            newItem.name = "Object0"; //this should immediately place the newItem at position 0
+
+            //then
+            const newItemIndex:int = _sut.getItemIndex(newItem);
+            assertEquals("the new item should have been placed at the beginning of the list as soon as its name was changed", 0, newItemIndex);
+        }
+
+
+        private function assertIndexesAre(indexes:Array):void
+        {
+            assertEquals(indexes.length, _sut.length);
+
+            for(var i:int = 0; i < _sut.length; i++)
+            {
+                assertEquals(ListCollectionView_FLEX_34837_VO(_sut.getItemAt(i)).index, indexes[i]);
+            }
+        }
+
+
+        private static function generateVOs(no:int, reverse:Boolean = false):IList
+        {
+            return generateObjects(no, reverse, generateOneObject);
+        }
+
+        private static function generateObjects(no:int, reverse:Boolean, generator:Function):IList
+        {
+            var result:Array = [];
+            for(var i:int = 0; i < no; i++)
+            {
+                result.push(generator(i));
+            }
+
+            if(reverse)
+                result.reverse();
+
+            return new ArrayList(result);
+        }
+
+        private static function generateOneObject(index:Number):ListCollectionView_FLEX_34837_VO
+        {
+            return new ListCollectionView_FLEX_34837_VO(index, "Object", "Street");
+        }
+    }
+}
+
+[Bindable]
+class ListCollectionView_FLEX_34837_VO
+{
+    public var name:String;
+    public var address:ListCollectionView_FLEX_34837_AddressVO;
+    public var index:Number;
+
+    public function ListCollectionView_FLEX_34837_VO(index:Number, namePrefix:String, streetPrefix:String)
+    {
+        this.index = index;
+        this.name = namePrefix + index;
+        this.address = new ListCollectionView_FLEX_34837_AddressVO(streetPrefix + index);
+    }
+}
+
+[Bindable]
+class ListCollectionView_FLEX_34837_AddressVO
+{
+    public var street:String;
+
+    public function ListCollectionView_FLEX_34837_AddressVO(street:String)
+    {
+        this.street = street;
+    }
+}
\ No newline at end of file
diff --git a/frameworks/projects/framework/tests/ListCollectionView_Sort_Tests.as b/frameworks/projects/framework/tests/ListCollectionView_Sort_Tests.as
new file mode 100644
index 0000000..5338923
--- /dev/null
+++ b/frameworks/projects/framework/tests/ListCollectionView_Sort_Tests.as
@@ -0,0 +1,500 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 {
+    import mx.collections.ArrayList;
+    import mx.collections.IList;
+    import mx.collections.ListCollectionView;
+
+    import org.flexunit.assertThat;
+
+    import org.flexunit.asserts.assertEquals;
+
+    import mx.collections.Sort;
+    import mx.collections.SortField;
+
+    public class ListCollectionView_Sort_Tests {
+        private var _sut:ListCollectionView;
+
+        [Before]
+        public function setUp():void
+        {
+            _sut = new ListCollectionView(new ArrayList());
+        }
+
+        [After]
+        public function tearDown():void
+        {
+            _sut = null;
+        }
+
+        [Test]
+        public function test_numeric_descending_sort_on_simple_objects():void
+        {
+            //given
+            var from0To4:IList = generateNumbers(5);
+            _sut.addAll(from0To4); //values: 0, 1, 2, 3, 4
+
+            const sortByIndexDescending:Sort = new Sort();
+            sortByIndexDescending.fields = [new SortField(null, false, true, true)];
+            _sut.sort = sortByIndexDescending;
+
+            //when
+            _sut.refresh(); //should be: 4, 3, 2, 1, 0
+
+            //then
+            assertItemsAre([4, 3, 2, 1, 0]);
+            assertRemoveAll();
+        }
+
+        [Test]
+        public function test_numeric_descending_sort_on_simple_objects_adds_new_object_in_right_place():void
+        {
+            //given
+            var from0To4:IList = generateNumbers(5);
+            _sut.addAll(from0To4); //values: 0, 1, 2, 3, 4
+
+            const sortByIndexDescending:Sort = new Sort();
+            sortByIndexDescending.fields = [new SortField(null, false, true, true)];
+            _sut.sort = sortByIndexDescending;
+            _sut.refresh(); //values: 4, 3, 2, 1, 0
+
+            //when
+            _sut.addItem(5); //should be: 5, 4, 3, 2, 1, 0
+
+            //then
+            assertItemsAre([5, 4, 3, 2, 1, 0]);
+            assertRemoveAll();
+        }
+
+        [Test]
+        public function test_numeric_descending_sort_on_simple_objects_removes_object_correctly():void
+        {
+            //given
+            var from0To4:IList = generateNumbers(5);
+            _sut.addAll(from0To4); //values: 0, 1, 2, 3, 4
+
+            const sortByIndexDescending:Sort = new Sort();
+            sortByIndexDescending.fields = [new SortField(null, false, true, true)];
+            _sut.sort = sortByIndexDescending;
+            _sut.refresh(); //values: 4, 3, 2, 1, 0
+
+            //when
+            _sut.removeItem(3); //should be: 4, 2, 1, 0
+
+            //then
+            assertItemsAre([4, 2, 1, 0]);
+            assertRemoveAll();
+        }
+
+        [Test]
+        public function test_numeric_descending_sort_on_simple_objects_removes_object_at_index_correctly():void
+        {
+            //given
+            var from0To4:IList = generateNumbers(5);
+            _sut.addAll(from0To4); //values: 0, 1, 2, 3, 4
+
+            const sortByIndexDescending:Sort = new Sort();
+            sortByIndexDescending.fields = [new SortField(null, false, true, true)];
+            _sut.sort = sortByIndexDescending;
+            _sut.refresh(); //values: 4, 3, 2, 1, 0
+
+            //when
+            _sut.removeItemAt(3); //should be: 4, 3, 2, 0
+
+            //then
+            assertItemsAre([4, 3, 2, 0]);
+            assertRemoveAll();
+        }
+
+        [Test]
+        public function test_numeric_descending_sort_on_simple_objects_moves_replaced_object_in_right_place():void
+        {
+            //given
+            var from0To4:IList = generateNumbers(5);
+            _sut.addAll(from0To4); //values: 0, 1, 2, 3, 4
+
+            const sortByIndexDescending:Sort = new Sort();
+            sortByIndexDescending.fields = [new SortField(null, false, true, true)];
+            _sut.sort = sortByIndexDescending;
+            _sut.refresh(); //values: 4, 3, 2, 1, 0
+
+            //when
+            _sut.setItemAt(100, 3); //before re-sort: 4, 3, 2, 100, 0
+
+            //then
+            assertItemsAre([100, 4, 3, 2, 0]);
+            assertRemoveAll();
+        }
+
+        [Test]
+        public function test_numeric_descending_sort_on_simple_objects_adds_new_identical_object_in_right_place():void
+        {
+            //given
+            var from0To4:IList = generateNumbers(5);
+            _sut.addAll(from0To4); //values: 0, 1, 2, 3, 4
+
+            const sortByIndexDescending:Sort = new Sort();
+            sortByIndexDescending.fields = [new SortField(null, false, true, true)];
+            _sut.sort = sortByIndexDescending;
+            _sut.refresh(); //values: 4, 3, 2, 1, 0
+
+            //when
+            _sut.addItem(3); //should be: 5, 4, 3, 2, 1, 0
+
+            //then
+            assertItemsAre([4, 3, 3, 2, 1, 0]);
+            assertRemoveAll();
+        }
+
+        [Test]
+        public function test_numeric_descending_sort_on_simple_objects_adds_new_identical_object_in_right_place_even_with_addItemAt():void
+        {
+            //given
+            var from0To4:IList = generateNumbers(5);
+            _sut.addAll(from0To4); //values: 0, 1, 2, 3, 4
+
+            const sortByIndexDescending:Sort = new Sort();
+            sortByIndexDescending.fields = [new SortField(null, false, true, true)];
+            _sut.sort = sortByIndexDescending;
+            _sut.refresh(); //values: 4, 3, 2, 1, 0
+
+            //when
+            _sut.addItemAt(3, 0); //should be: 5, 4, 3, 2, 1, 0
+
+            //then
+            assertItemsAre([4, 3, 3, 2, 1, 0]);
+            assertRemoveAll();
+        }
+
+
+        [Test]
+        public function test_numeric_descending_sort_on_complex_objects():void
+        {
+            //given
+            var from0To4:IList = generateVOs(5);
+            _sut.addAll(from0To4); //values["name"]: Object0, Object1, Object2, Object3, Object4
+
+            const sortByIndexDescending:Sort = new Sort();
+            sortByIndexDescending.fields = [new SortField("index", false, true, true)];
+            _sut.sort = sortByIndexDescending;
+
+            //when
+            _sut.refresh(); //should be: Object4, Object3, Object2, Object1, Object0
+
+            //then
+            assertIndexesAre([4, 3, 2, 1, 0]);
+            assertGetItemIndex(from0To4);
+            assertRemoveAll();
+        }
+
+        [Test]
+        public function test_multiple_sort_fields_on_complex_objects():void
+        {
+            //given
+            var from0To4:IList = generateVOs(5);
+            _sut.addAll(from0To4); //values["name"]: Object0, Object1, Object2, Object3, Object4
+            const abc2:ListCollectionView_Sort_VO = generateOneObject(2, "ABC");
+            _sut.addItem(abc2); //values["name"]: Object0, Object1, Object2, Object3, Object4, ABC2
+
+            const sortByIndexDescending:Sort = new Sort();
+            sortByIndexDescending.fields = [new SortField("index", false, true, true), new SortField("name", false, false, false)];
+            _sut.sort = sortByIndexDescending;
+
+            //when
+            _sut.refresh(); //should be: Object0, Object1, ABC2, Object2, Object3, Object4
+
+            //then
+            assertIndexesAre([4, 3, 2, 2, 1, 0]);
+            assertNamesAre(["Object4", "Object3", "ABC2", "Object2", "Object1", "Object0"]);
+
+            const itemsInSUT:ListCollectionView = new ListCollectionView(new ArrayList());
+            itemsInSUT.addAll(from0To4);
+            itemsInSUT.addItem(abc2);
+            assertGetItemIndex(itemsInSUT);
+
+            assertRemoveAll();
+        }
+
+        [Test]
+        public function test_numeric_descending_sort_on_complex_objects_adds_new_objects_in_right_place():void
+        {
+            //given
+            var from0To4:IList = generateVOs(5);
+            _sut.addAll(from0To4); //values["name"]: Object0, Object1, Object2, Object3, Object4
+
+            const sortByIndexDescending:Sort = new Sort();
+            sortByIndexDescending.fields = [new SortField("index", false, true, true)];
+            _sut.sort = sortByIndexDescending;
+            _sut.refresh(); //values["name"]: Object4, Object3, Object2, Object1, Object0
+
+            //when
+            const item6:ListCollectionView_Sort_VO = generateOneObject(6);
+            _sut.addItem(item6);
+            const item3_5:ListCollectionView_Sort_VO = generateOneObject(3.5);
+            _sut.addItem(item3_5);
+
+            //then
+            assertIndexesAre([6, 4, 3.5, 3, 2, 1, 0]);
+
+            const itemsInSUT:ListCollectionView = new ListCollectionView(new ArrayList());
+            itemsInSUT.addAll(from0To4);
+            itemsInSUT.addItem(item6);
+            itemsInSUT.addItem(item3_5);
+            assertGetItemIndex(itemsInSUT);
+
+            assertRemoveAll();
+        }
+
+        [Test]
+        public function test_numeric_descending_sort_on_complex_objects_moves_replaced_object_in_right_place():void
+        {
+            //given
+            var from0To4:IList = generateVOs(5);
+            _sut.addAll(from0To4); //values["name"]: Object0, Object1, Object2, Object3, Object4
+
+            const sortByIndexDescending:Sort = new Sort();
+            sortByIndexDescending.fields = [new SortField("index", false, true, true)];
+            _sut.sort = sortByIndexDescending;
+            _sut.refresh(); //values["name"]: Object4, Object3, Object2, Object1, Object0
+
+            //when
+            const addedItem:ListCollectionView_Sort_VO = generateOneObject(6);
+            _sut.setItemAt(addedItem, 1);
+
+            //then
+            assertIndexesAre([6, 4, 2, 1, 0]);
+            const itemsInSUT:ListCollectionView = new ListCollectionView(new ArrayList());
+            itemsInSUT.addAll(from0To4);
+            itemsInSUT.setItemAt(addedItem, 3);
+            assertGetItemIndex(itemsInSUT);
+
+            assertRemoveAll();
+        }
+
+        [Test]
+        public function test_simple_numeric_ascending_sort_on_complex_objects():void
+        {
+            //given
+            var from4To0:IList = generateVOs(5, true);
+            _sut.addAll(from4To0); //values["name"]: Object4, Object3, Object2, Object1, Object0
+
+            const sortByIndexAscending:Sort = new Sort();
+            sortByIndexAscending.fields = [new SortField("index", false, false, true)];
+            _sut.sort = sortByIndexAscending;
+
+            //when
+            _sut.refresh(); //should be: Object0, Object1, Object2, Object3, Object4
+
+            //then
+            assertIndexesAre([0, 1, 2, 3, 4]);
+            assertGetItemIndex(from4To0);
+
+            assertRemoveAll();
+        }
+
+        [Test]
+        public function test_simple_numeric_ascending_sort_on_complex_objects_with_dot_in_property_name():void
+        {
+            //given
+            var from4To0:IList = generateVOs(5, true);
+
+            const fieldName:String = "property.with.dot";
+            for(var i:int = 0; i < from4To0.length; i++)
+            {
+                var object:ListCollectionView_Sort_VO = from4To0.getItemAt(i) as ListCollectionView_Sort_VO;
+                object[fieldName] = object.index;
+            }
+            _sut.addAll(from4To0); //values["name"]: Object4, Object3, Object2, Object1, Object0
+
+            const sortByIndexAscending:Sort = new Sort();
+            sortByIndexAscending.fields = [new SortField(fieldName, false, false, true)];
+            _sut.sort = sortByIndexAscending;
+
+            //when
+            _sut.refresh(); //should be: Object0, Object1, Object2, Object3, Object4
+
+            //then
+            assertIndexesAre([0, 1, 2, 3, 4]);
+            assertGetItemIndex(from4To0);
+            assertRemoveAll();
+        }
+
+
+        [Test(description="Testing that changing the properties of the Sort doesn't impact the actual sort order")]
+        public function test_sort_fields_on_complex_objects_dont_change_unless_sort_reapplied():void
+        {
+            //given
+            var from4To0:IList = generateVOs(5, true);
+            _sut.addAll(from4To0); //values["name"]: Object4, Object3, Object2, Object1, Object0
+
+            const sortByIndexAscending:Sort = new Sort();
+            var originalSortField:SortField = new SortField("index", false, false, true);
+            sortByIndexAscending.fields = [originalSortField];
+            _sut.sort = sortByIndexAscending;
+            _sut.refresh(); //should be: Object0, Object1, Object2, Object3, Object4
+
+            //when
+            sortByIndexAscending.fields = [new SortField("name", false, true, false)]; //should have no effect
+
+            //then
+            assertIndexesAre([0, 1, 2, 3, 4]);
+            sortByIndexAscending.fields = [originalSortField]; //TODO remove once FLEX-34853 is fixed
+            assertGetItemIndex(from4To0);
+            assertRemoveAll();
+        }
+
+        [Test]
+        public function test_marking_entire_item_as_updated_gets_the_old_object_out_of_the_list():void
+        {
+            //given
+            var from0To4:IList = generateVOs(5, true); //values["name"]: Object4, Object3, Object2, Object1, Object0
+            _sut.addAll(from0To4);
+
+            const sortByNameAscending:Sort = new Sort();
+            sortByNameAscending.fields = [new SortField("name", false, false, false)];
+            _sut.sort = sortByNameAscending;
+            _sut.refresh(); //values["name"]: Object0, Object1, Object2, Object3, Object4
+
+            //when
+            const removedItem:ListCollectionView_Sort_VO = (_sut.list as ArrayList).source[0] as ListCollectionView_Sort_VO;
+            const newItem:ListCollectionView_Sort_VO = generateOneObject(-1);
+            (_sut.list as ArrayList).source[0] = newItem;
+            _sut.itemUpdated(newItem, null, removedItem, newItem);
+
+            removedItem.name = "Object7"; //should make no difference
+            newItem.name = "Object9"; //should place it at the end of the list
+
+            //then
+            const indexOfRemovedItem:int = _sut.getItemIndex(removedItem);
+            assertEquals("the item should have been removed from the list", -1, indexOfRemovedItem);
+            for(var i:int = 0; i < _sut.length; i++)
+            {
+                assertThat(_sut.getItemAt(i) != removedItem);
+            }
+            assertEquals("the new item should have been moved to the end of the list", _sut.length - 1, _sut.getItemIndex(newItem));
+        }
+
+        private function assertIndexesAre(indexes:Array):void
+        {
+            assertFieldValuesAre("index", indexes);
+        }
+
+        private function assertNamesAre(names:Array):void
+        {
+            assertFieldValuesAre("name", names);
+        }
+
+        private function assertFieldValuesAre(field:String, values:Array):void
+        {
+            assertEquals(values.length, _sut.length);
+
+            for(var i:int = 0; i < _sut.length; i++)
+            {
+                assertEquals(ListCollectionView_Sort_VO(_sut.getItemAt(i))[field], values[i]);
+            }
+        }
+
+        private function assertItemsAre(indexes:Array):void
+        {
+            assertEquals(indexes.length, _sut.length);
+
+            for(var i:int = 0; i < _sut.length; i++)
+            {
+                assertEquals(indexes[i], _sut.getItemAt(i));
+            }
+        }
+
+        private function assertGetItemIndex(items:IList):void
+        {
+            for(var i:int = 0; i < items.length; i++)
+            {
+                var target:ListCollectionView_Sort_VO = items.getItemAt(i) as ListCollectionView_Sort_VO;
+                assertThat("could not find " + target.name, _sut.getItemIndex(target) != -1); //in some bugs, an RTE is thrown here
+            }
+        }
+
+        private function assertRemoveAll():void
+        {
+            _sut.removeAll(); //in some bugs, an RTE is thrown here
+            assertEquals(0, _sut.length);
+        }
+
+
+        private static function generateVOs(no:int, reverse:Boolean = false):IList
+        {
+            return generateObjects(no, reverse, generateOneObject);
+        }
+
+        private static function generateNumbers(no:int, reverse:Boolean = false):IList
+        {
+            return generateObjects(no, reverse, generateOneNumber);
+        }
+
+        private static function generateObjects(no:int, reverse:Boolean = false, generator:Function = null):IList
+        {
+            var result:Array = [];
+            for(var i:int = 0; i < no; i++)
+            {
+                result.push(generator(i));
+            }
+
+            if(reverse)
+                result.reverse();
+
+            return new ArrayList(result);
+        }
+
+        private static function generateOneObject(index:Number, name:String = "Object"):ListCollectionView_Sort_VO
+        {
+            return new ListCollectionView_Sort_VO(index, name, "Street");
+        }
+
+        private static function generateOneNumber(value:Number):Number
+        {
+            return value;
+        }
+    }
+}
+
+[Bindable]
+dynamic class ListCollectionView_Sort_VO
+{
+    public var name:String;
+    public var address:ListCollectionView_Sort_AddressVO;
+    public var index:Number;
+
+    public function ListCollectionView_Sort_VO(index:Number, namePrefix:String, streetPrefix:String)
+    {
+        this.index = index;
+        this.name = namePrefix + index;
+        this.address = new ListCollectionView_Sort_AddressVO(streetPrefix + index);
+    }
+}
+
+[Bindable]
+class ListCollectionView_Sort_AddressVO
+{
+    public var street:String;
+
+    public function ListCollectionView_Sort_AddressVO(street:String)
+    {
+        this.street = street;
+    }
+}
\ No newline at end of file
diff --git a/frameworks/projects/framework/tests/ObjectUtil_FLEX_34852_Tests.as b/frameworks/projects/framework/tests/ObjectUtil_FLEX_34852_Tests.as
new file mode 100644
index 0000000..13820ae
--- /dev/null
+++ b/frameworks/projects/framework/tests/ObjectUtil_FLEX_34852_Tests.as
@@ -0,0 +1,127 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 {
+    import mx.utils.ObjectUtil;
+
+    import org.flexunit.assertThat;
+
+    import org.flexunit.asserts.assertEquals;
+
+    public class ObjectUtil_FLEX_34852_Tests {
+        [Test]
+        public function test_getValue_for_two_field_path():void
+        {
+            //given
+            const streetPrefix:String = "Street no. ";
+            const index:int = 1;
+            var obj:ObjectUtil_FLEX_34852_VO = new ObjectUtil_FLEX_34852_VO(index, "SomeObject", streetPrefix);
+
+            //when
+            var streetName:String = ObjectUtil.getValue(obj, ["address", "street"]) as String;
+
+            //then
+            assertEquals(streetPrefix + index, streetName);
+        }
+
+        [Test]
+        public function test_getValue_for_one_field_path():void
+        {
+            //given
+            const streetPrefix:String = "Street no. ";
+            const index:int = 1;
+            var obj:ObjectUtil_FLEX_34852_VO = new ObjectUtil_FLEX_34852_VO(index, "SomeObject", streetPrefix);
+
+            //when
+            var result:* = ObjectUtil.getValue(obj, ["address"]);
+
+            //then
+            assertEquals(obj.address, result);
+        }
+
+        [Test]
+        public function test_getValue_for_zero_field_path_returns_parameter():void
+        {
+            //given
+            var obj:ObjectUtil_FLEX_34852_VO = new ObjectUtil_FLEX_34852_VO(1, "SomeObject", "Street no. ");
+
+            //when
+            var result:* = ObjectUtil.getValue(obj, null);
+
+            //then
+            assertEquals(obj, result);
+        }
+
+        [Test]
+        public function test_getValue_for_null_object_returns_undefined():void
+        {
+            //given
+            var obj:ObjectUtil_FLEX_34852_VO = null;
+
+            //when
+            var result:* = ObjectUtil.getValue(obj, ["address", "street"]);
+
+            //then
+            assertThat(result === undefined);
+        }
+
+        [Test]
+        public function test_getValue_for_wrong_path_returns_undefined():void
+        {
+            //given
+            var obj:ObjectUtil_FLEX_34852_VO = new ObjectUtil_FLEX_34852_VO(1, "SomeObject", "Street no. ");
+
+            //when
+            var result:* = ObjectUtil.getValue(obj, ["address", "name"]);
+
+            //then
+            assertThat(result === undefined);
+        }
+    }
+}
+
+class ObjectUtil_FLEX_34852_VO
+{
+    [Bindable]
+    public var name:String;
+
+    [Bindable]
+    public var address:ObjectUtil_FLEX_34852_AddressVO;
+
+    [Bindable]
+    public var index:Number;
+
+    public function ObjectUtil_FLEX_34852_VO(index:Number, namePrefix:String, streetPrefix:String)
+    {
+        this.index = index;
+        this.name = namePrefix + index;
+        this.address = new ObjectUtil_FLEX_34852_AddressVO(streetPrefix + index);
+    }
+}
+
+class ObjectUtil_FLEX_34852_AddressVO
+{
+    [Bindable]
+    public var street:String;
+
+    public function ObjectUtil_FLEX_34852_AddressVO(street:String)
+    {
+        this.street = street;
+    }
+}
\ No newline at end of file
diff --git a/frameworks/projects/mx/src/mx/controls/DataGrid.as b/frameworks/projects/mx/src/mx/controls/DataGrid.as
index 03d36b5..92dca9b 100644
--- a/frameworks/projects/mx/src/mx/controls/DataGrid.as
+++ b/frameworks/projects/mx/src/mx/controls/DataGrid.as
@@ -3969,11 +3969,10 @@
                 {
                     for (var i:int = 0; i < sf.length; i++)
                     {
-
                         if (sf[i].name == c.dataField)
                         {
                             // we're part of the current sort
-                            f = sf[i]
+                            f = sf[i];
                             // flip the logic so desc is new desired order
                             desc = !f.descending;
                             break;
@@ -3986,7 +3985,7 @@
 
             if (!f)
             {
-                f = new SortField(c.dataField);
+                f = new SortField(c.dataField, false, desc, null, null, c.sortCompareFunction);
                 f.sortCompareType = c.sortCompareType;
             }
 
@@ -4002,14 +4001,7 @@
 
             // if you have a labelFunction you must supply a sortCompareFunction
             f.name = c.dataField;
-            if (c.sortCompareFunction != null)
-            {
-                f.compareFunction = c.sortCompareFunction;
-            }
-            else
-            {
-                f.compareFunction = null;
-            }
+            f.compareFunction = c.sortCompareFunction;
             f.descending = desc;
             s.fields = [f];
         }
diff --git a/frameworks/projects/mx/src/mx/controls/MenuBar.as b/frameworks/projects/mx/src/mx/controls/MenuBar.as
index c4158b2..62ee1e2 100644
--- a/frameworks/projects/mx/src/mx/controls/MenuBar.as
+++ b/frameworks/projects/mx/src/mx/controls/MenuBar.as
@@ -1410,8 +1410,7 @@
         var i:int;
         super.styleChanged(styleProp);
 
-        var n:int = menuBarItems.length;
-        for (i = 0; i < n; i++)
+        for (i = 0; i < menuBarItems.length; i++)
         {
             getMenuAt(i).styleChanged(styleProp);
         }
@@ -1447,8 +1446,7 @@
     {
         super.notifyStyleChangeInChildren(styleProp, recursive);
 
-        var n:int = menuBarItems.length;
-        for (var i:int = 0; i < n; i++)
+        for (var i:int = 0; i < menuBarItems.length; i++)
         {
             getMenuAt(i).notifyStyleChangeInChildren(styleProp, recursive);
         }
diff --git a/frameworks/projects/mx/src/mx/core/Version.as b/frameworks/projects/mx/src/mx/core/Version.as
index 3b6707f..3077bda 100644
--- a/frameworks/projects/mx/src/mx/core/Version.as
+++ b/frameworks/projects/mx/src/mx/core/Version.as
@@ -23,4 +23,4 @@
  *  @private
  *  Version string for this class.
  */
-mx_internal static const VERSION:String = "4.14.1.0";
+mx_internal static const VERSION:String = "4.16.0.0";
diff --git a/frameworks/projects/rpc/src/mx/core/Version.as b/frameworks/projects/rpc/src/mx/core/Version.as
index 8873dc1..463469f 100644
--- a/frameworks/projects/rpc/src/mx/core/Version.as
+++ b/frameworks/projects/rpc/src/mx/core/Version.as
@@ -22,4 +22,4 @@
  *  @private
  *  Version string for this class.
  */
-mx_internal static const VERSION:String = "4.14.1.0";
+mx_internal static const VERSION:String = "4.16.0.0";
diff --git a/frameworks/projects/spark/src/spark/collections/AdvancedStyleClientImplementation.as b/frameworks/projects/spark/src/spark/collections/AdvancedStyleClientImplementation.as
new file mode 100644
index 0000000..9e4e087
--- /dev/null
+++ b/frameworks/projects/spark/src/spark/collections/AdvancedStyleClientImplementation.as
@@ -0,0 +1,188 @@
+import mx.core.IFlexModuleFactory;
+import mx.core.UIComponent;
+import mx.styles.AdvancedStyleClient;
+import mx.styles.CSSStyleDeclaration;
+import mx.styles.IAdvancedStyleClient;
+import mx.styles.IStyleManager2;
+import mx.styles.StyleProtoChain;
+import mx.utils.NameUtil;
+
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+private var _advancedStyleClient:AdvancedStyleClient_;
+
+private function initAdvancedStyleClient():void
+{
+    _advancedStyleClient = new AdvancedStyleClient_(this);
+    _advancedStyleClient.addEventListener("allStylesChanged", dispatchIfListenersExist);
+}
+
+private function dispatchIfListenersExist(event:Event):void
+{
+    if(hasEventListener(event.type))
+        dispatchEvent(event);
+}
+
+public function get id():String
+{
+    return _advancedStyleClient.id;
+}
+
+public function set id(value:String):void
+{
+    _advancedStyleClient.id = value;
+}
+
+public function get styleParent():IAdvancedStyleClient
+{
+    return _advancedStyleClient.styleParent;
+}
+
+public function set styleParent(parent:IAdvancedStyleClient):void
+{
+    _advancedStyleClient.styleParent = parent;
+}
+
+public function stylesInitialized():void
+{
+    _advancedStyleClient.stylesInitialized();
+}
+
+public function matchesCSSState(cssState:String):Boolean
+{
+    return _advancedStyleClient.matchesCSSState(cssState);
+}
+
+public function matchesCSSType(cssType:String):Boolean
+{
+    return _advancedStyleClient.matchesCSSType(cssType);
+}
+
+public function hasCSSState():Boolean
+{
+    return _advancedStyleClient.hasCSSState();
+}
+
+public function get className():String
+{
+    return _advancedStyleClient.className;
+}
+
+public function get inheritingStyles():Object
+{
+    return _advancedStyleClient.inheritingStyles;
+}
+
+public function set inheritingStyles(value:Object):void
+{
+    _advancedStyleClient.inheritingStyles = value;
+}
+
+public function get nonInheritingStyles():Object
+{
+    return _advancedStyleClient.nonInheritingStyles;
+}
+
+public function set nonInheritingStyles(value:Object):void
+{
+    _advancedStyleClient.nonInheritingStyles = value;
+}
+
+public function get styleDeclaration():CSSStyleDeclaration
+{
+    return _advancedStyleClient.styleDeclaration;
+}
+
+public function set styleDeclaration(value:CSSStyleDeclaration):void
+{
+    _advancedStyleClient.styleDeclaration = value;
+}
+
+public function getStyle(styleProp:String):*
+{
+    return _getStyle(styleProp);
+}
+
+public function setStyle(styleProp:String, newValue:*):void
+{
+    _setStyle(styleProp, newValue);
+}
+
+public function clearStyle(styleProp:String):void
+{
+    _advancedStyleClient.clearStyle(styleProp);
+}
+
+public function getClassStyleDeclarations():Array
+{
+    return _advancedStyleClient.getClassStyleDeclarations();
+}
+
+public function notifyStyleChangeInChildren(styleProp:String, recursive:Boolean):void
+{
+    _advancedStyleClient.notifyStyleChangeInChildren(styleProp, recursive)
+}
+
+public function regenerateStyleCache(recursive:Boolean):void
+{
+    _advancedStyleClient.regenerateStyleCache(recursive);
+}
+
+public function registerEffects(effects:Array):void
+{
+    _advancedStyleClient.registerEffects(effects);
+}
+
+public function get styleName():Object
+{
+    return _advancedStyleClient.styleName;
+}
+
+public function set styleName(value:Object):void
+{
+    _advancedStyleClient.styleName = value;
+}
+
+public function styleChanged(styleProp:String):void
+{
+    _advancedStyleClient.addEventListener(styleProp + "Changed", dispatchIfListenersExist);
+    _styleChanged(styleProp);
+    _advancedStyleClient.removeEventListener(styleProp + "Changed", dispatchIfListenersExist);
+}
+
+public function get styleManager():IStyleManager2
+{
+    return _advancedStyleClient.styleManager;
+}
+
+public function get moduleFactory():IFlexModuleFactory
+{
+    return _advancedStyleClient.moduleFactory;
+}
+
+public function set moduleFactory(factory:IFlexModuleFactory):void
+{
+    _advancedStyleClient.moduleFactory = factory;
+}
+
+public function initialized(document:Object, id:String):void
+{
+    _advancedStyleClient.initialized(document, id);
+}
\ No newline at end of file
diff --git a/frameworks/projects/spark/src/spark/collections/AdvancedStyleClient_.as b/frameworks/projects/spark/src/spark/collections/AdvancedStyleClient_.as
new file mode 100644
index 0000000..1e76730
--- /dev/null
+++ b/frameworks/projects/spark/src/spark/collections/AdvancedStyleClient_.as
@@ -0,0 +1,126 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 spark.collections {
+    import mx.core.FlexGlobals;
+    import mx.core.UIComponent;
+    import mx.styles.AdvancedStyleClient;
+    import mx.styles.IAdvancedStyleClient;
+    import mx.styles.StyleProtoChain;
+    import mx.utils.NameUtil;
+
+    public class AdvancedStyleClient_ extends AdvancedStyleClient {
+        private var _styleClient:IAdvancedStyleClient;
+
+        public function AdvancedStyleClient_(styleClient:IAdvancedStyleClient)
+        {
+            super();
+            _styleClient = styleClient;
+        }
+
+        override public function initialized(document:Object, id:String):void
+        {
+            var uiComponent:UIComponent = document as UIComponent;
+
+            if (uiComponent == null)
+                uiComponent = FlexGlobals.topLevelApplication as UIComponent;
+
+            this.id = id;
+
+            this.moduleFactory = uiComponent.moduleFactory;
+
+            uiComponent.addStyleClient(_styleClient);
+        }
+
+        override protected function setDeferredStyles():void
+        {
+            if (!deferredSetStyles)
+                return;
+
+            for (var styleProp:String in deferredSetStyles)
+            {
+                StyleProtoChain.setStyle(_styleClient, styleProp, deferredSetStyles[styleProp]);
+            }
+
+            deferredSetStyles = null;
+        }
+
+        override public function setStyle(styleProp:String, newValue:*):void
+        {
+            _styleClient.setStyle(styleProp, newValue);
+        }
+
+        public function setStyleImpl(styleProp:String, newValue:*):void
+        {
+            // If there is no module factory then defer the set
+            // style until a module factory is set.
+            if (moduleFactory)
+            {
+                StyleProtoChain.setStyle(_styleClient, styleProp, newValue);
+            }
+            else
+            {
+                if (!deferredSetStyles)
+                    deferredSetStyles = {};
+
+                deferredSetStyles[styleProp] = newValue;
+            }
+        }
+
+        override public function getStyle(styleProp:String):*
+        {
+            return _styleClient.getStyle(styleProp);
+        }
+
+        public function getStyleImpl(styleProp:String):*
+        {
+            return super.getStyle(styleProp);
+        }
+
+        override public function matchesCSSType(cssType:String):Boolean
+        {
+            return StyleProtoChain.matchesCSSType(_styleClient, cssType);
+        }
+
+        override public function get className():String
+        {
+            return NameUtil.getUnqualifiedClassName(_styleClient);
+        }
+
+        override public function getClassStyleDeclarations():Array
+        {
+            return StyleProtoChain.getClassStyleDeclarations(_styleClient);
+        }
+
+        override public function regenerateStyleCache(recursive:Boolean):void
+        {
+            StyleProtoChain.initProtoChain(_styleClient);
+        }
+
+        override public function styleChanged(styleProp:String):void
+        {
+            _styleClient.styleChanged(styleProp);
+        }
+
+        public function styleChangedImpl(styleProp:String):void
+        {
+            super.styleChanged(styleProp);
+        }
+    }
+}
diff --git a/frameworks/projects/spark/src/spark/collections/ComplexSortField.as b/frameworks/projects/spark/src/spark/collections/ComplexSortField.as
new file mode 100644
index 0000000..2444101
--- /dev/null
+++ b/frameworks/projects/spark/src/spark/collections/ComplexSortField.as
@@ -0,0 +1,53 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 spark.collections {
+    import mx.collections.IComplexSortField;
+    import mx.utils.ObjectUtil;
+
+    public class ComplexSortField extends SortField implements IComplexSortField {
+        private var _nameParts:Array;
+
+        public function ComplexSortField(name:String = null, descending:Boolean = false, numeric:Object = null, sortCompareType:String = null, customCompareFunction:Function = null)
+        {
+            super(name, descending, numeric, sortCompareType, customCompareFunction);
+            _nameParts = name ? name.split(".") : [];
+        }
+
+        public function get nameParts():Array
+        {
+            return _nameParts;
+        }
+
+        override public function objectHasSortField(object:Object):Boolean
+        {
+            return object && nameParts && nameParts.length && object.hasOwnProperty(nameParts[0]);
+        }
+
+        override protected function getSortFieldValue(obj:Object):*
+        {
+            return ObjectUtil.getValue(obj, _nameParts);
+        }
+
+        override public function get arraySortOnOptions():int
+        {
+            return -1;
+        }
+    }
+}
diff --git a/frameworks/projects/spark/src/spark/collections/Sort.as b/frameworks/projects/spark/src/spark/collections/Sort.as
index a6131b1..0f31834 100644
--- a/frameworks/projects/spark/src/spark/collections/Sort.as
+++ b/frameworks/projects/spark/src/spark/collections/Sort.as
@@ -20,24 +20,14 @@
 package spark.collections
 {
 
-import flash.errors.IllegalOperationError;
-import flash.events.Event;
-import flash.events.EventDispatcher;
+    import flash.events.Event;
+    import mx.styles.IAdvancedStyleClient;
+    import mx.collections.ISortField;
+    import mx.core.FlexGlobals;
+    import mx.core.IFlexModule;
+    import mx.core.IMXMLObject;
 
-import mx.collections.ISort;
-import mx.collections.ISortField;
-import mx.collections.errors.SortError;
-import mx.core.FlexGlobals;
-import mx.core.UIComponent;
-import mx.managers.ISystemManager;
-import mx.managers.SystemManager;
-import mx.resources.IResourceManager;
-import mx.resources.ResourceManager;
-import mx.styles.AdvancedStyleClient;
-import mx.styles.IAdvancedStyleClient;
-import mx.utils.ObjectUtil;
-
-[DefaultProperty("fields")]
+    [DefaultProperty("fields")]
 [ResourceBundle("collections")]
 
 //--------------------------------------
@@ -136,8 +126,8 @@
  *  </p>
  *
  *  <p>The default comparison provided by the <code>SortField</code> class 
- *  provides correct language specific
- *  sorting for strings. The language is selected by the setting the locale
+ *  provides correct language-specific
+ *  sorting for strings. The language is selected by setting the locale
  *  style on an instance of the class in one of the following ways:
  *  </p>
  *  <ul>
@@ -184,9 +174,9 @@
  *  /&gt;
  *  </pre>
  *
- *  <p>In case items have inconsistent data types or items have complex data types, use of default
- *  built-in compare functions is not desired. Inconsistent sort result may occur in such cases.
- *  To avoid such problem, provide custom compare function and/or make item types consistent.</p>
+ *  <p>In case items have inconsistent data types or items have complex data types, the use of the default
+ *  built-in compare functions is not recommended. Inconsistent sorting results may occur in such cases.
+ *  To avoid such problem, provide a custom compare function and/or make the item types consistent.</p>
  *
  *  @includeExample examples/SortExample1.mxml
  *  @includeExample examples/SortExample2.mxml
@@ -199,9 +189,10 @@
  *  @playerversion AIR 2.5
  *  @productversion Flex 4.5
  */
-public class Sort extends AdvancedStyleClient implements ISort
+public class Sort extends mx.collections.Sort implements IAdvancedStyleClient, IFlexModule, IMXMLObject
 {
     include "../core/Version.as";
+    include "AdvancedStyleClientImplementation.as";
 
     //--------------------------------------------------------------------------
     //
@@ -250,14 +241,23 @@
      *
      *  <p>Creates a new Sort with no fields set and no custom comparator.</p>
      *
+     *  @param fields An <code>Array</code> of <code>ISortField</code> objects that
+     *  specifies the fields to compare.
+     *  @param customCompareFunction Use a custom function to compare the
+     *  objects in the collection to which this sort will be applied.
+     *  @param unique Indicates if the sort should be unique.
+     *
      *  @langversion 3.0
      *  @playerversion Flash 10.1
      *  @playerversion AIR 2.5
      *  @productversion Flex 4.5
      */
-    public function Sort()
+    public function Sort(fields:Array = null, customCompareFunction:Function = null, unique:Boolean = false)
     {
-        super();
+        super(fields, customCompareFunction, unique);
+        mx_internal::useSortOn = false;
+
+        initAdvancedStyleClient();
     }
 
     //--------------------------------------------------------------------------
@@ -268,13 +268,6 @@
 
     /**
      *  @private
-     *  Used for accessing localized Error messages.
-     */
-    private var resourceManager:IResourceManager =
-                                    ResourceManager.getInstance();
-
-    /**
-     *  @private
      *  Cache for "locale" style.
      *
      *  The code needs be able to find out if the locale style has been changed
@@ -288,133 +281,7 @@
     //
     //--------------------------------------------------------------------------
 
-    //----------------------------------
-    //  compareFunction
-    //----------------------------------
 
-    /**
-     *  @private
-     *  Storage for the compareFunction property.
-     */
-    private var _compareFunction:Function;
-
-    /**
-     *  @private
-     */
-    private var usingCustomCompareFunction:Boolean;
-
-    [Inspectable(category="General")]
-
-    /**
- *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10.1
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4.5
-     */
-    public function get compareFunction():Function
-    {
-        return usingCustomCompareFunction ? _compareFunction : internalCompare;
-    }
-
-    /**
-     *  @private
-     */
-    public function set compareFunction(value:Function):void
-    {
-        _compareFunction = value;
-        usingCustomCompareFunction = _compareFunction != null;
-    }
-
-    //----------------------------------
-    //  fields
-    //----------------------------------
-
-    /**
-     *  @private
-     *  Storage for the fields property.
-     */
-    private var _fields:Array;
-
-    /**
-     *  @private
-     */
-    private var fieldList:Array = [];
-
-    [Inspectable(category="General", arrayType="spark.globalization.ISortField")]
-    [Bindable("fieldsChanged")]
-
-    /**
-     *  @inheritDoc
-     *
-     *  @default null
-     *
-     *  @see SortField
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10.1
-     *  @playerversion AIR 2.5
-     *  @productversion Flex 4.5
-     */
-    public function get fields():Array
-    {
-        return _fields;
-    }
-
-    /**
-     *  @private
-     */
-    public function set fields(value:Array):void
-    {
-        _fields = value;
-        fieldList = [];
-        if (_fields)
-        {
-            var field:ISortField;
-            for (var i:int = 0; i<_fields.length; i++)
-            {
-                field = ISortField(_fields[i]);
-                fieldList.push(field.name);
-            }
-        }
-        dispatchEvent(new Event("fieldsChanged"));
-    }
-
-    //----------------------------------
-    //  unique
-    //----------------------------------
-
-    /**
-     *  @private
-     *  Storage for the unique property.
-     */
-    private var _unique:Boolean;
-
-    [Inspectable(category="General")]
-
-    /**
-     *  @inheritDoc
-     *
-     *  @default false
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10.1
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4.5
-     */
-    public function get unique():Boolean
-    {
-        return _unique;
-    }
-
-    /**
-     *  @inheritDoc
-     */
-    public function set unique(value:Boolean):void
-    {
-        _unique = value;
-    }
 
     //--------------------------------------------------------------------------
     //
@@ -425,10 +292,10 @@
     /**
     *  @private
     */
-    override public function getStyle(styleProp:String):*
+    private function _getStyle(styleProp:String):*
     {
         if (styleProp != "locale")
-            return super.getStyle(styleProp);
+            return _advancedStyleClient.getStyleImpl(styleProp);
 
         if ((localeStyle !== undefined) && (localeStyle !== null))
             return localeStyle;
@@ -453,9 +320,9 @@
      *  the class to be updated immediately when the locale style is
      *  set directly on this class instance.
      */
-    override public function setStyle(styleProp:String, newValue:*):void
+    private function _setStyle(styleProp:String, newValue:*):void
     {
-        super.setStyle(styleProp, newValue);
+        _advancedStyleClient.setStyleImpl(styleProp, newValue);
 
         if (styleProp != "locale")
             return;
@@ -483,357 +350,10 @@
      *  @playerversion AIR 2.5
      *  @productversion Flex 4.5
      */
-    override public function styleChanged(styleProp:String):void
+    private function _styleChanged(styleProp:String):void
     {
         localeChanged();
-        super.styleChanged(styleProp);
-    }
-
-    /**
-     *  @private
-     *  A pretty printer for Sort that lists the sort fields and their
-     *  options.
-     */
-    override public function toString():String
-    {
-        return ObjectUtil.toString(this);
-    }
-
-    //--------------------------------------------------------------------------
-    //
-    //  Methods
-    //
-    //--------------------------------------------------------------------------
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10.1
-     *  @playerversion AIR 2.5
-     *  @productversion Flex 4.5
-    */
-    public function findItem(items:Array,
-                             values:Object,
-                             mode:String,
-                             returnInsertionIndex:Boolean = false,
-                             compareFunction:Function = null):int
-    {
-        var compareForFind:Function;
-        var fieldsForCompare:Array;
-        var message:String;
-
-        if (!items)
-        {
-            message = resourceManager.getString(
-                "collections", "noItems");
-            throw new SortError(message);
-        }
-        else if (items.length == 0)
-        {
-            return returnInsertionIndex ? 1 : -1;
-        }
-
-        if (compareFunction == null)
-        {
-            compareForFind = this.compareFunction;
-            // configure the search criteria
-            if (values && fieldList.length > 0)
-            {
-                fieldsForCompare = [];
-                //build up the fields we can compare, if we skip a field in the
-                //middle throw an error.  it is ok to not have all the fields
-                //though
-                var fieldName:String;
-                var hadPreviousFieldName:Boolean = true;
-                for (var i:int = 0; i < fieldList.length; i++)
-                {
-                    fieldName = fieldList[i];
-                    if (fieldName)
-                    {
-                        var hasFieldName:Boolean = false;
-                        
-						try
-                        {
-                            hasFieldName = values[fieldName] !== undefined;
-                        }
-                        catch(e:Error)
-                        {
-                        }
-                        if (hasFieldName)
-                        {
-                            if (!hadPreviousFieldName)
-                            {
-                                message = resourceManager.getString(
-                                    "collections", "findCondition", [ fieldName ]);
-                                throw new SortError(message);
-                            }
-                            else
-                            {
-                                fieldsForCompare.push(fieldName);
-                            }
-                        }
-                        else
-                        {
-                            hadPreviousFieldName = false;
-                        }
-                    }
-                    else
-                    {
-                        //this is ok because sometimes a sortfield might
-                        //have a custom comparator
-                        fieldsForCompare.push(null);
-                    }
-                }
-                if (fieldsForCompare.length == 0)
-                {
-                    message = resourceManager.getString(
-                        "collections", "findRestriction");
-                    throw new SortError(message);
-                }
-                else
-                {
-                    try
-                    {
-                        initSortFields(items[0]);
-                    }
-                    catch(initSortError:SortError)
-                    {
-                        //oh well, use the default comparators...
-                    }
-                }
-            }
-        }
-        else
-        {
-            compareForFind = compareFunction;
-        }
-
-        // let's begin searching
-        var found:Boolean = false;
-        var objFound:Boolean = false;
-        var index:int = 0;
-        var lowerBound:int = 0;
-        var upperBound:int = items.length -1;
-        var obj:Object = null;
-        var direction:int = 1;
-        while(!objFound && (lowerBound <= upperBound))
-        {
-            index = Math.round((lowerBound+ upperBound)/2);
-            obj = items[index];
-            //if we were given fields for comparison use that method, but
-            //if not the comparator may be for SortField in which case
-            //it'd be an error to pass a 3rd parameter
-            direction = fieldsForCompare
-                ? compareForFind(values, obj, fieldsForCompare)
-                : compareForFind(values, obj);
-
-            switch(direction)
-            {
-                case -1:
-                    upperBound = index -1;
-                break;
-
-                case 0:
-                    objFound = true;
-                    switch(mode)
-                    {
-                        case ANY_INDEX_MODE:
-                            found = true;
-                        break;
-
-                        case FIRST_INDEX_MODE:
-                            found = (index == lowerBound);
-                            // start looking towards bof
-                            var objIndex:int = index - 1;
-                            var match:Boolean = true;
-                            while(match && !found && (objIndex >= lowerBound))
-                            {
-                                obj = items[objIndex];
-                                var prevCompare:int = fieldsForCompare
-                                    ? compareForFind(values, obj, fieldsForCompare)
-                                    : compareForFind(values, obj);
-                                match = (prevCompare == 0);
-                                if (!match || (match && (objIndex == lowerBound)))
-                                {
-                                    found= true;
-                                    index = objIndex + (match ? 0 : 1);
-                                } // if match
-                                objIndex--;
-                            } // while
-                        break;
-
-                        case LAST_INDEX_MODE:
-                            // if we where already at the edge case then we already found the last value
-                            found = (index == upperBound);
-                            // start looking towards eof
-                            objIndex = index + 1;
-                            match = true;
-                            while(match && !found && (objIndex <= upperBound))
-                            {
-                                obj = items[objIndex];
-                                var nextCompare:int = fieldsForCompare
-                                    ? compareForFind(values, obj, fieldsForCompare)
-                                    : compareForFind(values, obj);
-                                match = (nextCompare == 0);
-                                if (!match || (match && (objIndex == upperBound)))
-                                {
-                                    found= true;
-                                    index = objIndex - (match ? 0 : 1);
-                                } // if match
-                                objIndex++;
-                            } // while
-                        break;
-                        default:
-                        {
-                            message = resourceManager.getString(
-                                "collections", "unknownMode");
-                            throw new SortError(message);
-                        }
-                    } // switch
-                break;
-
-                case 1:
-                    lowerBound = index +1;
-                break;
-            } // switch
-        } // while
-        if (!found && !returnInsertionIndex)
-        {
-            return -1;
-        }
-        else
-        {
-            return (direction > 0) ? index + 1 : index;
-        }
-    }
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10.1
-     *  @playerversion AIR 2.5
-     *  @productversion Flex 4.5
-     */
-    public function propertyAffectsSort(property:String):Boolean
-    {
-        if (usingCustomCompareFunction || !fields) return true;
-        for (var i:int = 0; i < fields.length; i++)
-        {
-            var field:ISortField = fields[i];
-            if (field.name == property || field.usingCustomCompareFunction)
-            {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10.1
-     *  @playerversion AIR 2.5
-     *  @productversion Flex 4.5
-     */
-    public function reverse():void
-    {
-        if (fields)
-        {
-            for (var i:int = 0; i < fields.length; i++)
-            {
-                ISortField(fields[i]).reverse();
-            }
-        }
-        noFieldsDescending = !noFieldsDescending;
-    }
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10.1
-     *  @playerversion AIR 2.5
-     *  @productversion Flex 4.5
-     */
-    public function sort(items:Array):void
-    {
-        if (!items || items.length <= 1)
-        {
-            return;
-        }
-
-        if (usingCustomCompareFunction)
-        {
-            // bug 185872
-            // the Sort.internalCompare function knows to use Sort._fields; that same logic
-            // needs to be part of calling a custom compareFunction. Of course, a user shouldn't
-            // be doing this -- so I wrap calls to compareFunction with _fields as the last parameter
-            const fixedCompareFunction:Function =
-                function (a:Object, b:Object):int
-                {
-                    // append our fields to the call, since items.sort() won't
-                    return compareFunction(a, b, _fields);
-                };
-
-            var message:String;
-
-            if (unique)
-            {
-                var uniqueRet1:Object = items.sort(fixedCompareFunction, Array.UNIQUESORT);
-                if (uniqueRet1 == 0)
-                {
-                    message = resourceManager.getString(
-                        "collections", "nonUnique");
-                    throw new SortError(message);
-                }
-            }
-            else
-            {
-                items.sort(fixedCompareFunction);
-            }
-        }
-        else
-        {
-            var fields:Array = this.fields;
-            if (fields && fields.length > 0)
-            {
-                var i:int;
-                //doing the init value each time may be a little inefficient
-                //but allows for the data to change and the comparators
-                //to update correctly
-                //the sortArgs is an object that if non-null means
-                //we can use Array.sortOn which will be much faster
-                //than going through internalCompare.  However
-                //if the Sort is supposed to be unique and fields.length > 1
-                //we cannot use sortOn since it only tests uniqueness
-                //on the first field
-                var sortArgs:Object = initSortFields(items[0], true);
-
-                if (unique)
-                {
-                    var uniqueRet2:Object;
-                    uniqueRet2 = items.sort(internalCompare,
-                                            Array.UNIQUESORT);
-                    if (uniqueRet2 == 0)
-                    {
-                        message = resourceManager.getString(
-                            "collections", "nonUnique");
-                        throw new SortError(message);
-                    }
-                }
-                else
-                {
-                    items.sort(internalCompare);
-                }
-            }
-            else
-            {
-                items.sort(internalCompare);
-            }
-        }
+        _advancedStyleClient.styleChangedImpl(styleProp);
     }
 
     //--------------------------------------------------------------------------
@@ -868,116 +388,18 @@
         }
     }
 
-    /**
-     *  @private
-     *  Make sure all SortFields are ready to execute their comparators.
-     */
-    private function initSortFields(item:Object, buildArraySortArgs:Boolean = false):Object
-    {
-        var arraySortArgs:Object = null;
-        var i:int;
-        for (i = 0; i<fields.length; i++)
-        {
-            ISortField(fields[i]).initializeDefaultCompareFunction(item);
-        }
-        if (buildArraySortArgs)
-        {
-            arraySortArgs = {fields: [], options: []};
-            for (i = 0; i<fields.length; i++)
-            {
-                var field:ISortField = fields[i];
-                var options:int = field.arraySortOnOptions;
-                if (options == -1)
-                {
-                    return null;
-                }
-                else
-                {
-                    arraySortArgs.fields.push(field.name);
-                    arraySortArgs.options.push(options);
-                }
-            }
 
-        }
-        return arraySortArgs;
-    }
-
-    /**
-     *  @private
-     *  Compares the values specified based on the sort field options specified
-     *  for this sort.  The fields parameter is really just used to get the
-     *  number of fields to check.  We don't look at the actual values
-     *  to see if they match the actual sort.
-     */
-    private function internalCompare(a:Object, b:Object, fields:Array = null):int
-    {
-        var result:int = 0;
-        if (!_fields)
-        {
-            result = noFieldsCompare(a, b);
-        }
-        else
-        {
-            var i:int = 0;
-            var len:int = fields ? fields.length : _fields.length;
-            while (result == 0 && (i < len))
-            {
-                var sf:ISortField = ISortField(_fields[i]);
-                result = sf.compareFunction(a, b);
-                if (sf.descending)
-                    result *= -1;
-                i++;
-            }
-        }
-
-        return result;
-    }
 
     private var defaultEmptyField:SortField;
-    private var noFieldsDescending:Boolean = false;
 
-    /**
-     *  If the sort does not have any sort fields nor a custom comparator
-     *  just use an empty SortField object and have it use its default
-     *  logic.
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10.1
-     *  @playerversion AIR 2.5
-     *  @productversion Flex 4.5
-     */
-    private function noFieldsCompare(a:Object, b:Object, fields:Array = null):int
+    override protected function createEmptySortField():ISortField
     {
-        if (!defaultEmptyField)
-        {
-            ensureStyleSource();
-
-            defaultEmptyField = new SortField();
-            const locale:* = getStyle("locale");
-            if (locale !== undefined)
-                defaultEmptyField.setStyle("locale", locale);
-
-            try
-            {
-                defaultEmptyField.initializeDefaultCompareFunction(a);
-            }
-            catch(e:SortError)
-            {
-                //this error message isn't as useful in this case so replace
-                var message:String = resourceManager.getString(
-                    "collections", "noComparator", [ a ]);
-                throw new SortError(message);
-            }
-        }
-
-        var result:int = defaultEmptyField.compareFunction(a, b);
-
-        if (noFieldsDescending)
-        {
-            result *= -1;
-        }
-
-        return result;
+        ensureStyleSource();
+        var sortField:SortField = new SortField();
+        const locale:* = getStyle("locale");
+        if (locale !== undefined)
+            sortField.setStyle("locale", locale);
+        return sortField;
     }
 
     /**
@@ -993,16 +415,16 @@
      */
     private function localeChanged():void
     {
-        const newlocaleStyle:* = super.getStyle("locale");
+        const newLocaleStyle:* = _advancedStyleClient.getStyleImpl("locale");
 
-        if (localeStyle === newlocaleStyle)
+        if (localeStyle === newLocaleStyle)
             return;
 
-        localeStyle = newlocaleStyle;
+        localeStyle = newLocaleStyle;
         if (defaultEmptyField)
             defaultEmptyField.setStyle("locale", localeStyle);
 
         dispatchEvent(new Event(Event.CHANGE));
     }
-}
-}
+    }
+}
\ No newline at end of file
diff --git a/frameworks/projects/spark/src/spark/collections/SortField.as b/frameworks/projects/spark/src/spark/collections/SortField.as
index 38d81e6..760b725 100644
--- a/frameworks/projects/spark/src/spark/collections/SortField.as
+++ b/frameworks/projects/spark/src/spark/collections/SortField.as
@@ -20,26 +20,17 @@
 package spark.collections
 {
 
-import flash.errors.IllegalOperationError;
-import flash.events.Event;
-import flash.events.EventDispatcher;
+    import flash.events.Event;
+    import mx.styles.IAdvancedStyleClient;
+    import mx.collections.ISortField;
+    import mx.core.FlexGlobals;
+    import mx.core.IFlexModule;
+    import mx.core.IMXMLObject;
+    import mx.utils.ObjectUtil;
 
-import mx.collections.ISortField;
-import mx.collections.errors.SortError;
-import mx.core.FlexGlobals;
-import mx.core.UIComponent;
-import mx.managers.ISystemManager;
-import mx.managers.SystemManager;
-import mx.resources.IResourceManager;
-import mx.resources.ResourceManager;
-import mx.styles.AdvancedStyleClient;
-import mx.utils.ObjectUtil;
+    import spark.globalization.SortingCollator;
 
-import spark.globalization.SortingCollator;
-import spark.collections.SortFieldCompareTypes;
-
-
-[ResourceBundle("collections")]
+    [ResourceBundle("collections")]
 
 //--------------------------------------
 //  Styles
@@ -69,7 +60,7 @@
  *  Provides the sorting information required to establish a sort on a field
  *  or property in a collection view.
  *
- *  SortField class is meant to be used with Sort class.
+ *  The SortField class is meant to be used with the Sort class.
  *
  *  Typically the sort is defined for collections of complex items, that
  *  is items in which the sort is performed on properties of those objects.
@@ -164,9 +155,10 @@
  *  @playerversion AIR 2.5
  *  @productversion Flex 4.5
  */
-public class SortField extends AdvancedStyleClient implements ISortField
+public class SortField extends mx.collections.SortField implements IAdvancedStyleClient, IFlexModule, IMXMLObject
 {
     include "../core/Version.as";
+    include "AdvancedStyleClientImplementation.as";
 
     //--------------------------------------------------------------------------
     //
@@ -184,6 +176,10 @@
      *              descending order.
      *  @param numeric Tells the comparator whether to compare sort items as
      *              numbers, instead of alphabetically.
+     *  @param sortCompareType Gives an indication to SortField which of the
+     *              default compare functions to use.
+     *  @param customCompareFunction Use a custom function to compare the
+     *              objects based on this SortField.
      *
      *  @langversion 3.0
      *  @playerversion Flash 10.1
@@ -192,20 +188,15 @@
      */
     public function SortField(name:String = null,
                               descending:Boolean = false,
-                              numeric:Object = null)
+                              numeric:Object = null,
+                              sortCompareType:String = null,
+                              customCompareFunction:Function = null)
     {
-        super();
+        super(name, false, descending, numeric, sortCompareType, customCompareFunction);
 
-        _name = name;
-        _descending = descending;
-        _numeric = numeric;
-
-        if (updateSortCompareType() == false)
-        {
-            _compareFunction = stringCompare;
-        }
+        initAdvancedStyleClient();
     }
-
+	
     //--------------------------------------------------------------------------
     //
     //  Variables
@@ -214,13 +205,6 @@
 
     /**
      *  @private
-     *  Used for accessing localized Error messages.
-     */
-    private var resourceManager:IResourceManager =
-                                    ResourceManager.getInstance();
-
-    /**
-     *  @private
      *  Cache for "locale" style.
      *
      *  The code needs be able to find out if the locale style has been changed
@@ -234,39 +218,6 @@
     //
     //--------------------------------------------------------------------------
 
-    /**
-    *  @inheritDoc
-    * 
-    *  @langversion 3.0
-    *  @playerversion Flash 10.1
-    *  @playerversion AIR 2.5
-    *  @productversion Flex 4.5
-    */
-    public function get arraySortOnOptions():int
-    {
-        if (usingCustomCompareFunction
-            || name == null
-            || _compareFunction == xmlCompare
-            || _compareFunction == dateCompare)
-        {
-            return -1;
-        }
-        var options:int = 0;
-        if (descending) options |= Array.DESCENDING;
-        if (numeric == true || _compareFunction == numericCompare) options |= Array.NUMERIC;
-        return options;
-    }
-
-    //---------------------------------
-    //  compareFunction
-    //---------------------------------
-
-    /**
-     *  @private
-     *  Storage for the compareFunction property.
-     */
-    private var _compareFunction:Function;
-
     [Inspectable(category="General")]
 
     /**
@@ -296,7 +247,7 @@
      *  The string comparison is performed using the locale (language,
      *  region and script) specific comparison method from the
      *  <code>SortingCollator</code> class.
-     *  This class uses the locale style to determine a locale
+     *  This class uses the locale style to determine a locale.
      *  Specify your own function only if you need a need a custom comparison
      *  algorithm. This is normally only the case if a calculated field is
      *  used in a display.</p>
@@ -306,196 +257,21 @@
      *  @playerversion AIR 2.5
      *  @productversion Flex 4.5
      */
-    public function get compareFunction():Function
+    override public function get compareFunction():Function
     {
-        return _compareFunction;
+        return super.compareFunction;
     }
 
     /**
-     *  @private
+     *  @deprecated A future release of Apache Flex SDK will remove this function. Please use the constructor
+     *  argument instead.
      */
-    public function set compareFunction(c:Function):void
+    override public function set compareFunction(c:Function):void
     {
-        _compareFunction = c;
-        _usingCustomCompareFunction = (c != null);
-    }
-
-    //---------------------------------
-    //  descending
-    //---------------------------------
-
-    /**
-     *  @private
-     *  Storage for the descending property.
-     */
-    private var _descending:Boolean;
-
-    [Inspectable(category="General")]
-    [Bindable("descendingChanged")]
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10.1
-     *  @playerversion AIR 2.5
-     *  @productversion Flex 4.5
-     */
-    public function get descending():Boolean
-    {
-        return _descending;
-    }
-
-    /**
-     *  @private
-     */
-    public function set descending(value:Boolean):void
-    {
-        if (_descending != value)
-        {
-            _descending = value;
-            dispatchEvent(new Event("descendingChanged"));
-        }
-    }
-
-    //---------------------------------
-    //  name
-    //---------------------------------
-
-    /**
-     *  @private
-     *  Storage for the name property.
-     */
-    private var _name:String;
-
-    [Inspectable(category="General")]
-    [Bindable("nameChanged")]
-
-    /**
-     *  @inheritDoc
-     *
-     *  @default null
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10.1
-     *  @playerversion AIR 2.5
-     *  @productversion Flex 4.5
-     */
-    public function get name():String
-    {
-        return _name;
-    }
-
-    /**
-     *  @private
-     */
-    public function set name(n:String):void
-    {
-        _name = n;
-        dispatchEvent(new Event("nameChanged"));
-    }
-
-    //---------------------------------
-    //  numeric
-    //---------------------------------
-
-    /**
-     *  @private
-     *  Storage for the numeric property.
-     */
-    private var _numeric:Object;
-
-    [Inspectable(category="General")]
-    [Bindable("numericChanged")]
-
-    /**
-     *  @inheritDoc
-     *
-     *  @default null
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10.1
-     *  @playerversion AIR 2.5
-     *  @productversion Flex 4.5
-     */
-    public function get numeric():Object
-    {
-        return _numeric;
-    }
-
-    /**
-     *  @private
-     */
-    public function set numeric(value:Object):void
-    {
-        if (_numeric != value)
-        {
-            _numeric = value;
-            dispatchEvent(new Event("numericChanged"));
-        }
+        super.compareFunction = c;
     }
 
 
-    //---------------------------------
-    //  sortCompareType
-    //---------------------------------
-
-    // TODO: Currently the sortfield is independant of the column. Add in way to check when column._sortCompareType changes.
-    /**
-     *  @private
-     */
-    private var _sortCompareType:String = null;
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 11.8
-     *  @playerversion AIR 3.8
-     *  @productversion Flex 4.11
-     */
-    [Bindable("sortCompareTypeChanged")]
-    public function get sortCompareType():String
-    {
-        return _sortCompareType;
-    }
-
-    /**
-     *  @private
-     */
-    public function set sortCompareType(value:String):void
-    {
-        if (_sortCompareType != value)
-        {
-            _sortCompareType = value;
-            dispatchEvent(new Event("sortCompareTypeChanged"));
-        }
-
-
-        updateSortCompareType();
-    }
-
-
-    //---------------------------------
-    //  usingCustomCompareFunction
-    //---------------------------------
-
-    private var _usingCustomCompareFunction:Boolean;
-
-    /**
-     *  @inheritDoc
-     *
-     *  @see @compareFunction
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10.1
-     *  @playerversion AIR 2.5
-     *  @productversion Flex 4.5
-     */
-    public function get usingCustomCompareFunction():Boolean
-    {
-        return _usingCustomCompareFunction;
-    }
 
     //--------------------------------------------------------------------------
     //
@@ -505,11 +281,13 @@
 
     /**
     *  @private
+     *
+     *  Called by AdvancedStyleClientImplementation.as
     */
-    override public function getStyle(styleProp:String):*
+    private function _getStyle(styleProp:String):*
     {
         if (styleProp != "locale")
-            return super.getStyle(styleProp);
+            return _advancedStyleClient.getStyleImpl(styleProp);
 
         if ((localeStyle !== undefined) && (localeStyle !== null))
             return localeStyle;
@@ -528,15 +306,17 @@
      *  Intercept style change for "locale".
      *
      *  In the case that there is no associated UI component or the
-     *  module factory of the UIComponent has not yet been intialized
+     *  module factory of the UIComponent has not yet been initialized
      *  style changes are only recorded but the styleChanged method
      *  is not called.  Overriding the setStyle method allows
      *  the class to be updated immediately when the locale style is
      *  set directly on this class instance.
+     *
+     *  Called by AdvancedStyleClientImplementation.as
      */
-    override public function setStyle(styleProp:String, newValue:*):void
+    private function _setStyle(styleProp:String, newValue:*):void
     {
-        super.setStyle(styleProp, newValue);
+        _advancedStyleClient.setStyleImpl(styleProp, newValue);
 
         if (styleProp != "locale")
             return;
@@ -556,6 +336,8 @@
      *  updated the <code>change</code> event will be dispatched and
      *  uses of the bindable methods or properties will be updated.
      *
+     *  Called by AdvancedStyleClientImplementation.as
+     *
      *  @param styleProp The name of the style property, or null if
      *  all styles for this component have changed.
      *
@@ -564,186 +346,11 @@
      *  @playerversion AIR 2.5
      *  @productversion Flex 4.5
      */
-    override public function styleChanged(styleProp:String):void
+    private function _styleChanged(styleProp:String):void
     {
         localeChanged();
-        super.styleChanged(styleProp);
-    }
 
-    /**
-     *  @private
-     *  A pretty printer for Sort that lists the sort fields and their
-     *  options.
-     */
-    override public function toString():String
-    {
-        return ObjectUtil.toString(this);
-    }
-
-    //--------------------------------------------------------------------------
-    //
-    //  Methods
-    //
-    //--------------------------------------------------------------------------
-
-    /**
-     *  @inheritDoc
-     * 
-     *  @langversion 3.0
-     *  @playerversion Flash 10.1
-     *  @playerversion AIR 2.5
-     *  @productversion Flex 4.5
-     */
-    public function initializeDefaultCompareFunction(obj:Object):void
-    {
-        // if the compare function is not already set then we can set it
-        if (!usingCustomCompareFunction)
-        {
-            if (_sortCompareType)
-            {
-                //Attempt to set the compare function based on the sortCompareType
-                if (updateSortCompareType() == true)
-                {
-                    return;
-                }
-            }
-
-            if (numeric == true)
-                _compareFunction = numericCompare;
-            else if (numeric == false)
-                _compareFunction = stringCompare;
-            else
-            {
-                // we need to introspect the data a little bit
-                var value:Object;
-                if (_name)
-                {
-                    try
-                    {
-                        value = obj[_name];
-                    }
-                    catch(error:Error)
-                    {
-                    }
-                }
-                //this needs to be an == null check because !value will return true
-                //where value == 0 or value == false
-                if (value == null)
-                {
-                    value = obj;
-                }
-
-                var typ:String = typeof(value);
-                switch (typ)
-                {
-                    case "string":
-                        _compareFunction = stringCompare;
-                    break;
-                    case "object":
-                        if (value is Date)
-                        {
-                            _compareFunction = dateCompare;
-                        }
-                        else
-                        {
-                            _compareFunction = stringCompare;
-                            var test:String;
-                            try
-                            {
-                                test = value.toString();
-                            }
-                            catch(error2:Error)
-                            {
-                            }
-                            if (!test || test == "[object Object]")
-                            {
-                                _compareFunction = nullCompare;
-                            }
-                        }
-                    break;
-                    case "xml":
-                        _compareFunction = xmlCompare;
-                    break;
-                    case "boolean":
-                    case "number":
-                        _compareFunction = numericCompare;
-                    break;
-                }
-            }  // else
-        } // if
-    }
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10.1
-     *  @playerversion AIR 2.5
-     *  @productversion Flex 4.5
-     */
-    public function reverse():void
-    {
-        descending = !descending;
-    }
-
-
-    /**
-     *  @inheritDoc
-     * 
-     *  @langversion 3.0
-     *  @playerversion Flash 11.8
-     *  @playerversion AIR 3.8
-     *  @productversion Flex 4.11
-     */
-    public function updateSortCompareType():Boolean
-    {
-        if (!_sortCompareType)
-        {
-            return false;
-        }
-
-
-        //Lookup the sortCompareType by its SortFieldCompareTypes value and set the associated compare method.
-        switch(_sortCompareType)
-        {
-            case SortFieldCompareTypes.DATE:
-            {
-                _compareFunction = dateCompare;
-
-                return true;
-            }
-
-            case SortFieldCompareTypes.NULL:
-            {
-                _compareFunction = nullCompare;
-
-                return true;
-            }
-
-            case SortFieldCompareTypes.NUMERIC:
-            {
-                _compareFunction = numericCompare;
-
-                return true;
-            }
-
-            case SortFieldCompareTypes.STRING:
-            {
-                _compareFunction = stringCompare;
-
-                return true;
-            }
-
-            case SortFieldCompareTypes.XML:
-            {
-                _compareFunction = xmlCompare;
-
-                return true;
-            }
-        }
-
-
-        return false;
+        _advancedStyleClient.styleChangedImpl(styleProp);
     }
 
 
@@ -820,154 +427,10 @@
         }
     }
 
-    private function nullCompare(a:Object, b:Object):int
-    {
-        var value:Object;
-        var left:Object;
-        var right:Object;
-
-        var found:Boolean = false;
-
-        // return 0 (ie equal) if both are null
-        if (a == null && b == null)
-        {
-            return 0;
-        }
-
-        // we need to introspect the data a little bit
-        if (_name)
-        {
-            try
-            {
-                left = a[_name];
-            }
-            catch(error:Error)
-            {
-            }
-
-            try
-            {
-                right = b[_name];
-            }
-            catch(error:Error)
-            {
-            }
-        }
-
-        // return 0 (ie equal) if both are null
-        if (left == null && right == null)
-            return 0;
-
-        if (left == null && !_name)
-            left = a;
-
-        if (right == null && !_name)
-            right = b;
 
 
-        var typeLeft:String = typeof(left);
-        var typeRight:String = typeof(right);
 
 
-        if (typeLeft == "string" || typeRight == "string")
-        {
-                found = true;
-                _compareFunction = stringCompare;
-        }
-        else if (typeLeft == "object" || typeRight == "object")
-        {
-            if (left is Date || right is Date)
-            {
-                found = true;
-                _compareFunction = dateCompare
-            }
-        }
-        else if (typeLeft == "xml" || typeRight == "xml")
-        {
-                found = true;
-                _compareFunction = xmlCompare;
-        }
-        else if (typeLeft == "number" || typeRight == "number"
-                 || typeLeft == "boolean" || typeRight == "boolean")
-        {
-                found = true;
-                _compareFunction = numericCompare;
-        }
-
-        if (found)
-        {
-            return _compareFunction(left, right);
-        }
-        else
-        {
-            var message:String = resourceManager.getString(
-                "collections", "noComparatorSortField", [ name ]);
-            throw new SortError(message);
-        }
-    }
-
-    /**
-     *  Pull the numbers from the objects and call the implementation.
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10.1
-     *  @playerversion AIR 2.5
-     *  @productversion Flex 4.5
-     */
-    private function numericCompare(a:Object, b:Object):int
-    {
-        var fa:Number;
-        try
-        {
-            fa = _name == null ? Number(a) : Number(a[_name]);
-        }
-        catch(error:Error)
-        {
-        }
-
-        var fb:Number;
-        try
-        {
-            fb = _name == null ? Number(b) : Number(b[_name]);
-        }
-        catch(error:Error)
-        {
-        }
-
-        return ObjectUtil.numericCompare(fa, fb);
-    }
-
-    /**
-     *  Pull the date objects from the values and compare them.
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10.1
-     *  @playerversion AIR 2.5
-     *  @productversion Flex 4.5
-     */
-    private function dateCompare(a:Object, b:Object):int
-    {
-        var fa:Date;
-        try
-        {
-            fa = _name == null ? a as Date : a[_name] as Date;
-        }
-        catch(error:Error)
-        {
-        }
-
-        var fb:Date;
-        try
-        {
-            fb = _name == null ? b as Date : b[_name] as Date;
-        }
-        catch(error:Error)
-        {
-        }
-
-        return ObjectUtil.dateCompare(fa, fb);
-    }
-
     /**
      *  Pull the strings from the objects and call the implementation.
      *
@@ -976,25 +439,10 @@
      *  @playerversion AIR 2.5
      *  @productversion Flex 4.5
      */
-    private function stringCompare(a:Object, b:Object):int
+    override protected function stringCompare(a:Object, b:Object):int
     {
-        var fa:String;
-        try
-        {
-            fa = _name == null ? String(a) : String(a[_name]);
-        }
-        catch(error:Error)
-        {
-        }
-
-        var fb:String;
-        try
-        {
-            fb = _name == null ? String(b) : String(b[_name]);
-        }
-        catch(error:Error)
-        {
-        }
+        var fa:String = name == null ? String(a) : String(getSortFieldValue(a));
+        var fb:String = name == null ? String(b) : String(getSortFieldValue(b));
 
         return stringCollator.compare(fa, fb);
     }
@@ -1009,25 +457,10 @@
      *  @playerversion AIR 2.5
      *  @productversion Flex 4.5
      */
-    private function xmlCompare(a:Object, b:Object):int
+    override protected function xmlCompare(a:Object, b:Object):int
     {
-        var sa:String;
-        try
-        {
-            sa = _name == null ? a.toString() : a[_name].toString();
-        }
-        catch(error:Error)
-        {
-        }
-
-        var sb:String;
-        try
-        {
-            sb = _name == null ? b.toString() : b[_name].toString();
-        }
-        catch(error:Error)
-        {
-        }
+        var sa:String = name == null ? a.toString() : getSortFieldValue(a).toString();
+        var sb:String = name == null ? b.toString() : getSortFieldValue(b).toString();
 
         if (numeric == true)
         {
@@ -1052,12 +485,12 @@
      */
     private function localeChanged():void
     {
-        const newlocaleStyle:* = super.getStyle("locale");
+        const newLocaleStyle:* = _advancedStyleClient.getStyleImpl("locale");
 
-        if (localeStyle === newlocaleStyle)
+        if (localeStyle === newLocaleStyle)
             return;
 
-        localeStyle = newlocaleStyle;
+        localeStyle = newLocaleStyle;
 
         if (internalStringCollator)
         {
diff --git a/frameworks/projects/spark/src/spark/components/DataGrid.as b/frameworks/projects/spark/src/spark/components/DataGrid.as
index 9b17f60..fb0676f 100644
--- a/frameworks/projects/spark/src/spark/components/DataGrid.as
+++ b/frameworks/projects/spark/src/spark/components/DataGrid.as
@@ -19,72 +19,73 @@
 
 package spark.components
 {
-import flash.display.DisplayObject;
-import flash.display.Graphics;
-import flash.events.Event;
-import flash.events.FocusEvent;
-import flash.events.KeyboardEvent;
-import flash.events.MouseEvent;
-import flash.geom.Point;
-import flash.geom.Rectangle;
-import flash.ui.Keyboard;
+    import flash.display.DisplayObject;
+    import flash.display.Graphics;
+    import flash.events.Event;
+    import flash.events.FocusEvent;
+    import flash.events.KeyboardEvent;
+    import flash.events.MouseEvent;
+    import flash.geom.Point;
+    import flash.geom.Rectangle;
+    import flash.ui.Keyboard;
 
-import mx.collections.ArrayCollection;
-import mx.collections.ICollectionView;
-import mx.collections.IList;
-import mx.collections.ISort;
-import mx.collections.ISortField;
-import mx.core.DragSource;
-import mx.core.EventPriority;
-import mx.core.IFactory;
-import mx.core.IFlexDisplayObject;
-import mx.core.IIMESupport;
-import mx.core.IUID;
-import mx.core.IVisualElement;
-import mx.core.InteractionMode;
-import mx.core.LayoutDirection;
-import mx.core.ScrollPolicy;
-import mx.core.UIComponent;
-import mx.core.mx_internal;
-import mx.events.DragEvent;
-import mx.events.FlexEvent;
-import mx.events.SandboxMouseEvent;
-import mx.events.TouchInteractionEvent;
-import mx.managers.CursorManager;
-import mx.managers.CursorManagerPriority;
-import mx.managers.DragManager;
-import mx.managers.IFocusManagerComponent;
-import mx.styles.AdvancedStyleClient;
-import mx.utils.ObjectUtil;
-import mx.utils.UIDUtil;
+    import mx.collections.ArrayCollection;
+    import mx.collections.ComplexFieldChangeWatcher;
+    import mx.collections.ICollectionView;
+    import mx.collections.IComplexSortField;
+    import mx.collections.IList;
+    import mx.collections.ISort;
+    import mx.collections.ISortField;
+    import mx.collections.ListCollectionView;
+    import mx.core.DragSource;
+    import mx.core.EventPriority;
+    import mx.core.IFactory;
+    import mx.core.IFlexDisplayObject;
+    import mx.core.IIMESupport;
+    import mx.core.IUID;
+    import mx.core.IVisualElement;
+    import mx.core.InteractionMode;
+    import mx.core.LayoutDirection;
+    import mx.core.ScrollPolicy;
+    import mx.core.UIComponent;
+    import mx.core.mx_internal;
+    import mx.events.DragEvent;
+    import mx.events.FlexEvent;
+    import mx.events.SandboxMouseEvent;
+    import mx.events.TouchInteractionEvent;
+    import mx.managers.CursorManager;
+    import mx.managers.CursorManagerPriority;
+    import mx.managers.DragManager;
+    import mx.managers.IFocusManagerComponent;
+    import mx.styles.IAdvancedStyleClient;
+    import mx.utils.ObjectUtil;
+    import mx.utils.UIDUtil;
 
-import spark.collections.Sort;
-import spark.components.gridClasses.CellPosition;
-import spark.components.gridClasses.CellRegion;
-import spark.components.gridClasses.DataGridEditor;
-import spark.components.gridClasses.GridDoubleClickMode;
-import spark.components.gridClasses.GridColumn;
-import spark.components.gridClasses.GridHeaderLayout;
-import spark.components.gridClasses.GridItemEditorActivationMouseEvent;
-import spark.components.gridClasses.GridLayout;
-import spark.components.gridClasses.GridSelection;
-import spark.components.gridClasses.GridSelectionMode;
-import spark.components.gridClasses.GridSortField;
-import spark.components.gridClasses.GridView;
-import spark.components.gridClasses.IDataGridElement;
-import spark.components.gridClasses.IGridItemEditor;
-import spark.components.supportClasses.IDataProviderEnhance;
-import spark.components.supportClasses.RegExPatterns;
-import spark.components.supportClasses.SkinnableContainerBase;
-import spark.core.NavigationUnit;
-import spark.events.GridCaretEvent;
-import spark.events.GridEvent;
-import spark.events.GridSelectionEvent;
-import spark.events.GridSelectionEventKind;
-import spark.events.GridSortEvent;
-import spark.layouts.supportClasses.DropLocation;
+    import spark.collections.Sort;
+    import spark.components.gridClasses.CellPosition;
+    import spark.components.gridClasses.CellRegion;
+    import spark.components.gridClasses.DataGridEditor;
+    import spark.components.gridClasses.GridColumn;
+    import spark.components.gridClasses.GridItemEditorActivationMouseEvent;
+    import spark.components.gridClasses.GridLayout;
+    import spark.components.gridClasses.GridSelection;
+    import spark.components.gridClasses.GridSelectionMode;
+    import spark.components.gridClasses.GridView;
+    import spark.components.gridClasses.GridViewLayout;
+    import spark.components.gridClasses.IDataGridElement;
+    import spark.components.gridClasses.IGridItemEditor;
+    import spark.components.supportClasses.IDataProviderEnhance;
+    import spark.components.supportClasses.RegExPatterns;
+    import spark.components.supportClasses.SkinnableContainerBase;
+    import spark.core.NavigationUnit;
+    import spark.events.GridCaretEvent;
+    import spark.events.GridEvent;
+    import spark.events.GridSelectionEvent;
+    import spark.events.GridSelectionEventKind;
+    import spark.events.GridSortEvent;
+    import spark.layouts.supportClasses.DropLocation;
 
-use namespace mx_internal;
+    use namespace mx_internal;
 
 //--------------------------------------
 //  Styles
@@ -861,16 +862,7 @@
      *  comitting the selection until mouse up.
      */
     private var pendingSelectionOnMouseUp:Boolean = false;
-    
-    /**
-     *  @private
-     */
-    private var pendingSelectionShiftKey:Boolean;
-    
-    /**
-     *  @private
-     */
-    private var pendingSelectionCtrlKey:Boolean;
+
     
     //--------------------------------------------------------------------------
     //
@@ -1022,7 +1014,7 @@
      *  @playerversion AIR 2.5
      *  @productversion Flex 4.5
      */
-    public var grid:spark.components.Grid;    
+    public var grid:Grid;
     
     //----------------------------------
     //  hoverIndicator
@@ -1854,7 +1846,7 @@
      * 
      *  @default false
      * 
-     *  @see #sortable 
+     *  @see #sortableColumns
      *  @see spark.components.gridClasses.GridColumn#sortable
 
      *  @langversion 3.0
@@ -3799,7 +3791,7 @@
             var f:Function = function(g:Grid):void
             {
                 g.selectedIndex = value;
-            }
+            };
             deferredGridOperations.push(f);
         }
     }
@@ -4483,11 +4475,7 @@
      *  @param columnCount If <code>selectionEventKind</code> is for a cell region, 
      *  the number  of columns in the cell region.  The default is -1 to 
      *  indicate this parameter is not being used.
-     * 
-     *  @param indices If <code>selectionEventKind</code> is for multiple rows,
-     *  the 0-based row indices of the rows in the selection.  The default is 
-     *  null to indicate this parameter is not being used.
-     * 
+     *
      *  @return <code>true</code> if the selection was committed or did not change, or 
      *  <code>false</code> if the selection was canceled or could not be committed due to 
      *  an error, such as index out of range or the <code>selectionEventKind</code> is not 
@@ -4784,7 +4772,7 @@
 	}
 	
 	/**
-	 *  Override to make a datagrid cell editabe based on the data item.
+	 *  Override to make a datagrid cell editable based on the data item.
 	 * 
 	 *  @langversion 3.0
 	 *  @playerversion Flash 10
@@ -4866,46 +4854,67 @@
     {
         return new DataGridEditor(this);    
     }
-    
+
     //--------------------------------------------------------------------------
     //
     //  Sorting Methods
     //
     //--------------------------------------------------------------------------
 
+    private function ensureComplexFieldsMonitoring(sortFields:Array):void
+    {
+        if(!(dataProvider is ListCollectionView))
+            return;
+
+        for (var i:int = 0; i < sortFields.length; i++)
+        {
+            var sortField:ISortField = sortFields[i];
+            if(sortField is IComplexSortField)
+                break;
+        }
+
+        if(i < sortFields.length)
+        {
+            if(!ListCollectionView(dataProvider).complexFieldWatcher)
+                ListCollectionView(dataProvider).complexFieldWatcher = new ComplexFieldChangeWatcher();
+        }
+        else
+            ListCollectionView(dataProvider).complexFieldWatcher = null;
+    }
+
     /**
      *  Sort the DataGrid by one or more columns, and refresh the display.
-     * 
+     *
      *  <p>If the <code>dataProvider</code> is an ICollectionView, then it's <code>sort</code> property is
      *  set to a value based on each column's <code>dataField</code>, <code>sortCompareFunction</code>,
      *  and <code>sortDescending</code> flag.
      *  Then, the data provider's <code>refresh()</code> method is called. </p>
-     *  
+     *
      *  <p>If the <code>dataProvider</code> is not an ICollectionView, then this method has no effect.</p>
-     * 
-     *  <p>If isInteractive is true then a <code>GridSortEvent.SORT_CHANGING</code> is dispatched before the 
+     *
+     *  <p>If isInteractive is true then a <code>GridSortEvent.SORT_CHANGING</code> is dispatched before the
      *  sort is applied.  Listeners can change modify the event to change the sort or cancel
      *  the event to cancel the sort.   If isInteractive is true and the sort is not cancelled, then a
      *  <code>GridSortEvent.SORT_CHANGE</code> event is dispatched after the dataProvider's sort has been
      *  updated.</p>
-     * 
+     *
      *  <p>If the sort has not be cancelled, the columnHeaderGroup's <code>visibleSortIndicatorIndices</code> is updated.</p>
-     * 
+     *
      *  @param columnIndices The indices of the columns by which to sort the <code>dataProvider</code>.
-     * 
+     *
      *  @param isInteractive If true, <code>GridSortEvent.SORT_CHANGING</code> and
      *  <code>GridSortEvent.SORT_CHANGE</code> events are dispatched.
-     * 
+     *
      *  @return <code>true</code> if the <code>dataProvider</code> was sorted with the provided
      *  column indicies.
-     * 
+     *
      *  @see spark.components.DataGrid#dataProvider
      *  @see spark.components.gridClasses.GridColumn#sortCompareFunction
      *  @see spark.components.gridClasses.GridColumn#sortDescending
      *  @see spark.components.gridClasses.GridColumn#sortField
-     *  @see spark.components.gridClasses.GridColumnHeaderGroup#visibleSortIndicatorIndices
+     *  @see spark.components.GridColumnHeaderGroup#visibleSortIndicatorIndices
      *  @see spark.events.GridSortEvent
-     * 
+     *
      *  @langversion 3.0
      *  @playerversion Flash 10
      *  @playerversion AIR 2.5
@@ -4916,19 +4925,19 @@
        const dataProvider:ICollectionView = this.dataProvider as ICollectionView;
         if (!dataProvider)
             return false;
-        
+
         var sort:ISort = dataProvider.sort;
         if (sort)
             sort.compareFunction = null;
         else
             sort = new Sort();
-        
+
         var sortFields:Array = createSortFields(columnIndices, sort.fields);
-        if (!sortFields || (sortFields.length == 0)) 
+        if (!sortFields || (sortFields.length == 0))
             return false;
-        
+
         var oldSortFields:Array = (dataProvider.sort) ? dataProvider.sort.fields : null;
-        
+
         // Dispatch the "changing" event. If preventDefault() is called
         // on this event, the sort operation will be cancelled.  If columnIndices or
         // sortFields are changed, the new values will be used.
@@ -4938,83 +4947,85 @@
             // are copied to the new Array, not the ISortField objects themselves.
             if (oldSortFields)
                 oldSortFields = oldSortFields.concat();
-            
+
             if (hasEventListener(GridSortEvent.SORT_CHANGING))
             {
-                const changingEvent:GridSortEvent = 
+                const changingEvent:GridSortEvent =
                     new GridSortEvent(GridSortEvent.SORT_CHANGING,
-                        false, true, 
-                        columnIndices, 
+                        false, true,
+                        columnIndices,
                         oldSortFields,  /* intended to be read-only but no way to enforce this */
-                        sortFields); 
-                
+                        sortFields);
+
                 // The event was cancelled so don't sort.
                 if (!dispatchEvent(changingEvent))
                     return false;
-                
+
                 // Update the sort columns since they might have changed.
                 columnIndices = changingEvent.columnIndices;
                 if (!columnIndices)
                     return false;
-                
+
                 // Update the new sort fields since they might have changed.
                 sortFields = changingEvent.newSortFields;
                 if (!sortFields)
                     return false;
             }
         }
-        
+
         // Remove each old SortField that's not a member of the new sortFields Array
         // as a "styleClient" of this DataGrid.
-        
+
         if (oldSortFields)
         {
             for each (var oldSortField:ISortField in oldSortFields)
             {
-                var oldASC:AdvancedStyleClient = oldSortField as AdvancedStyleClient;
+                var oldASC:IAdvancedStyleClient = oldSortField as IAdvancedStyleClient;
                 if (!oldASC || (oldASC.styleParent != this) || (sortFields.indexOf(oldASC) != -1))
                     continue;
                 removeStyleClient(oldASC);
             }
         }
-        
+
         // Add new SortFields as "styleClients" of this DataGrid so that they
-        // inherit this DataGrid's locale style. 
-        
+        // inherit this DataGrid's locale style.
+
         for each (var newSortField:ISortField in sortFields)
         {
-            var newASC:AdvancedStyleClient = newSortField as AdvancedStyleClient;
+            var newASC:IAdvancedStyleClient = newSortField as IAdvancedStyleClient;
             if (!newASC || (newASC.styleParent == this))
                 continue;
             addStyleClient(newASC);
         }
-        
+
+        ensureComplexFieldsMonitoring(sortFields);
+
         sort.fields = sortFields;
-        
+
         dataProvider.sort = sort;
         dataProvider.refresh();
-        
+
         if (isInteractive)
         {
             // Dispatch the "change" event.
             if (hasEventListener(GridSortEvent.SORT_CHANGE))
             {
-                const changeEvent:GridSortEvent = 
+                const changeEvent:GridSortEvent =
                     new GridSortEvent(GridSortEvent.SORT_CHANGE,
-                        false, true, 
-                        columnIndices, 
-                        oldSortFields, sortFields); 
+                        false, true,
+                        columnIndices,
+                        oldSortFields, sortFields);
                 dispatchEvent(changeEvent);
             }
-            
+
             // Update the visible sort indicators.
             if (columnHeaderGroup)
-                columnHeaderGroup.visibleSortIndicatorIndices = columnIndices;            
-        }           
-        
+                columnHeaderGroup.visibleSortIndicatorIndices = columnIndices;
+        }
+
         return true;
     }
-    
+
     /**
      *  @private
      *  Return an array of ISortFields, one per column.   If a matching sort field is found in 
@@ -5032,9 +5043,7 @@
             if (!col || (!col.dataField && (col.labelFunction == null) && (col.sortCompareFunction == null)))
                 return null;
 
-            var dataField:String = col.dataField;
-            var isComplexDataField:Boolean = (dataField && (dataField.indexOf(".") != -1));
-            var sortField:ISortField = findSortField(dataField, previousFields, isComplexDataField);
+            var sortField:ISortField = findSortField(col.dataField, previousFields);
             
             if (!sortField)
             {
@@ -5055,27 +5064,18 @@
     /**
      *  @private
      *  Finds a SortField using the provided dataField and returns it.
-     *  If the dataField is complex, it tries to find a GridSortField
-     *  with a matching dataFieldPath.
-     * 
+     *
      *  @param dataField The dataField of the column.
      *  @param fields The array of SortFields to search through.
-     *  @param isComplexDataField true if the dataField is a path.
      */
-    private static function findSortField(dataField:String, fields:Array, isComplexDataField:Boolean):ISortField
+    private static function findSortField(dataField:String, fields:Array):ISortField
     {
         if (dataField == null)
             return null;
         
         for each (var field:ISortField in fields)
         {
-            var name:String = field.name;
-            if (isComplexDataField && (field is GridSortField))
-            {
-                name = GridSortField(field).dataFieldPath;
-            }
-            
-            if (name == dataField)
+            if (field.name == dataField)
                 return field;
         }
         
@@ -5619,29 +5619,23 @@
         // position.
         if (rowIndex == -1 || isCellSelection && columnIndex == -1)
             return;
-        
-        if (dragEnabled && isRowSelectionMode() && selectionContainsIndex(rowIndex))
+
+
+        if (event.ctrlKey)
         {
-            pendingSelectionOnMouseUp = true;
-            pendingSelectionShiftKey = event.shiftKey;
-            pendingSelectionCtrlKey = event.ctrlKey;            
+            // ctrl-click toggles the selection and updates caret and anchor.
+            if (!toggleSelection(rowIndex, columnIndex))
+                return;
+            
+            grid.anchorRowIndex = rowIndex;
+            grid.anchorColumnIndex = columnIndex;
         }
         else
         {
-            if (event.ctrlKey)
-            {
-                // ctrl-click toggles the selection and updates caret and anchor.
-                if (!toggleSelection(rowIndex, columnIndex))
-                    return;
-                
-                grid.anchorRowIndex = rowIndex;
-                grid.anchorColumnIndex = columnIndex;
-            }
-            else if (event.shiftKey)
+            if (event.shiftKey)
             {
                 // shift-click extends the selection and updates the caret.
-                if  (grid.selectionMode == GridSelectionMode.MULTIPLE_ROWS || 
-                    grid.selectionMode == GridSelectionMode.MULTIPLE_CELLS)
+                if  (grid.selectionMode == GridSelectionMode.MULTIPLE_ROWS || grid.selectionMode == GridSelectionMode.MULTIPLE_CELLS)
                 {    
                     if (!extendSelection(rowIndex, columnIndex))
                         return;
@@ -5653,6 +5647,12 @@
                 setSelectionAnchorCaret(rowIndex, columnIndex);
             }
         }
+
+
+        if (dragEnabled && isRowSelectionMode() && selectionContainsIndex(rowIndex))
+        {
+            pendingSelectionOnMouseUp = true;
+        }
         
         // If selection is pending on mouse up then we have just moused down on
         // an item, part of an already commited selection.
@@ -6264,20 +6264,13 @@
     //
     //--------------------------------------------------------------------------
     
-    private function calculateDropLocation(event:DragEvent):DropLocation
-    {
-        // Verify data format
-        if (!enabled || !event.dragSource.hasFormat("itemsByIndex"))
-            return null;
-        
-        // Calculate the drop location
-        var location:DropLocation = grid.layout.calculateDropLocation(event);
-		if (location.dropIndex > dataProvider.length) 
-			location.dropIndex = dataProvider.length;
-		
-		return location;
-    }
-    
+    /**
+    *  @private
+    *  Used in drag n drop methods for drop location / drop indicators.
+    */
+    private var _gridViewLayout:GridViewLayout = null;
+
+
     /**
      *  Creates and instance of the dropIndicator class that is used to
      *  display the visuals of the drop location during a drag and drop
@@ -6300,10 +6293,12 @@
     public function createDropIndicator():DisplayObject
     {
         // Do we have a drop indicator already?
-        if (grid.layout.dropIndicator)
-            return grid.layout.dropIndicator;
-        
+        if (_gridViewLayout.dropIndicator)
+            return _gridViewLayout.dropIndicator;
+
+
         var dropIndicatorInstance:DisplayObject;
+
         if (dropIndicator)
         {
             dropIndicatorInstance = DisplayObject(createDynamicPartInstance("dropIndicator"));
@@ -6314,11 +6309,13 @@
             if (dropIndicatorClass)
                 dropIndicatorInstance = new dropIndicatorClass();
         }
+
         if (dropIndicatorInstance is IVisualElement)
             IVisualElement(dropIndicatorInstance).owner = this;
         
         // Set it in the layout
-        grid.layout.dropIndicator = dropIndicatorInstance;
+        _gridViewLayout.dropIndicator = dropIndicatorInstance;
+
         return dropIndicatorInstance;
     }
     
@@ -6340,15 +6337,17 @@
      */
     public function destroyDropIndicator():DisplayObject
     {
-        var dropIndicatorInstance:DisplayObject = grid.layout.dropIndicator;
+        var dropIndicatorInstance:DisplayObject = _gridViewLayout.dropIndicator;
+
         if (!dropIndicatorInstance)
             return null;
         
         // Release the reference from the layout
-        grid.layout.dropIndicator = null;
+        _gridViewLayout.dropIndicator = null;
         
         // Release it if it's a dynamic skin part
         var count:int = numDynamicParts("dropIndicator");
+
         for (var i:int = 0; i < count; i++)
         {
             if (dropIndicatorInstance == getDynamicPartAt("dropIndicator", i))
@@ -6358,6 +6357,7 @@
                 break;
             }
         }
+
         return dropIndicatorInstance;
     }
     
@@ -6383,8 +6383,17 @@
     {
         if (event.isDefaultPrevented())
             return;
-        
-        var dropLocation:DropLocation = calculateDropLocation(event); 
+
+
+        if (!_gridViewLayout)
+        {
+            //Store a current gridview layout.
+            _gridViewLayout = (grid.layout as GridLayout).centerGridView.layout as GridViewLayout;
+        }
+
+
+        var dropLocation:DropLocation = _gridViewLayout.calculateDropLocation(event);
+
         if (dropLocation)
         {
             DragManager.acceptDragDrop(this);
@@ -6401,7 +6410,7 @@
             DragManager.showFeedback(event.ctrlKey ? DragManager.COPY : DragManager.MOVE);
             
             // Show drop indicator
-            grid.layout.showDropIndicator(dropLocation);
+            _gridViewLayout.showDropIndicator(dropLocation);
         }
         else
         {
@@ -6431,8 +6440,10 @@
     {
         if (event.isDefaultPrevented())
             return;
-        
-        var dropLocation:DropLocation = calculateDropLocation(event);
+
+
+        var dropLocation:DropLocation = _gridViewLayout.calculateDropLocation(event);
+
         if (dropLocation)
         {
             // Show focus
@@ -6443,12 +6454,12 @@
             DragManager.showFeedback(event.ctrlKey ? DragManager.COPY : DragManager.MOVE);
             
             // Show drop indicator
-            grid.layout.showDropIndicator(dropLocation);
+            _gridViewLayout.showDropIndicator(dropLocation);
         }
         else
         {
             // Hide if previously showing
-            grid.layout.hideDropIndicator();
+            _gridViewLayout.hideDropIndicator();
             
             // Hide focus
             drawFocus(false);
@@ -6480,9 +6491,9 @@
     {
         if (event.isDefaultPrevented())
             return;
-        
+
         // Hide if previously showing
-        grid.layout.hideDropIndicator();
+        _gridViewLayout.hideDropIndicator();
         
         // Hide focus
         drawFocus(false);
@@ -6535,9 +6546,10 @@
     {
         if (event.isDefaultPrevented())
             return;
-        
+
+
         // Hide the drop indicator
-        grid.layout.hideDropIndicator();
+		_gridViewLayout.hideDropIndicator();
         destroyDropIndicator();
         
         // Hide focus
@@ -6545,7 +6557,8 @@
         drawFocusAnyway = false;
         
         // Get the dropLocation
-        var dropLocation:DropLocation = calculateDropLocation(event);
+		var dropLocation:DropLocation = _gridViewLayout.calculateDropLocation(event);
+
         if (!dropLocation)
             return;
         
diff --git a/frameworks/projects/spark/src/spark/components/Grid.as b/frameworks/projects/spark/src/spark/components/Grid.as
index d327377..78b2429 100644
--- a/frameworks/projects/spark/src/spark/components/Grid.as
+++ b/frameworks/projects/spark/src/spark/components/Grid.as
@@ -5396,7 +5396,10 @@
                 {
                     const oldLocation:int = event.oldLocation;
                     if ((oldCaretRowIndex >= oldLocation) && (oldCaretRowIndex < (oldLocation + itemsLength)))
+                    {
                         caretRowIndex += location - oldLocation;
+                        ensureCellIsVisible(caretRowIndex, -1);
+                    }
                 }
                 break;                        
                 
diff --git a/frameworks/projects/spark/src/spark/components/gridClasses/DataGridEditor.as b/frameworks/projects/spark/src/spark/components/gridClasses/DataGridEditor.as
index 234c67a..11cffcc 100644
--- a/frameworks/projects/spark/src/spark/components/gridClasses/DataGridEditor.as
+++ b/frameworks/projects/spark/src/spark/components/gridClasses/DataGridEditor.as
@@ -943,7 +943,7 @@
      *  
      */
     private function endEdit():Boolean
-    {
+    {        
         // Focus is inside an item renderer
         if (!itemEditorInstance && editedItemRenderer)
         {
@@ -953,7 +953,7 @@
             return true;
         }
         
-        // this happens if the renderer is removed asynchronously ususally with FDS
+        // this happens if the renderer is removed asynchronously usually with FDS
         if (!itemEditorInstance)
             return false;
         
@@ -1373,7 +1373,7 @@
         {
             // if the user clicks outside the cell but we can't save the data,
             // say, because the data was invalid, then cancel the save.
-            if (!dataGrid.endItemEditorSession())
+            if (!inEndEdit && !dataGrid.endItemEditorSession())
             {
                 dataGrid.endItemEditorSession(true);
             }
@@ -1564,7 +1564,7 @@
         {
             // If we can't save the data, say, because the data was invalid, 
             // then cancel the save.
-            if (!dataGrid.endItemEditorSession())
+            if (!inEndEdit && !dataGrid.endItemEditorSession())
             {
                 dataGrid.endItemEditorSession(true);
             }
@@ -1582,7 +1582,7 @@
 		{
 			// If we can't save the data, say, because the data was invalid, 
 			// then cancel the save.
-			if (!dataGrid.endItemEditorSession())
+			if (!inEndEdit && !dataGrid.endItemEditorSession())
 			{
 				dataGrid.endItemEditorSession(true);
 			}
@@ -1614,7 +1614,7 @@
         {
             // If we can't save the data, say, because the data was invalid, 
             // then cancel the save.
-            if (!dataGrid.endItemEditorSession())
+            if (!inEndEdit && !dataGrid.endItemEditorSession())
             {
                 dataGrid.endItemEditorSession(true);
             }
@@ -1799,7 +1799,7 @@
         
         // If we can't save the data, say, because the data was invalid, 
         // then cancel the save.
-        if (!dataGrid.endItemEditorSession())
+        if (!inEndEdit && !dataGrid.endItemEditorSession())
         {
             dataGrid.endItemEditorSession(true);
         }
diff --git a/frameworks/projects/spark/src/spark/components/gridClasses/DefaultGridItemEditor.mxml b/frameworks/projects/spark/src/spark/components/gridClasses/DefaultGridItemEditor.mxml
index 5b7dea0..d8cfd33 100644
--- a/frameworks/projects/spark/src/spark/components/gridClasses/DefaultGridItemEditor.mxml
+++ b/frameworks/projects/spark/src/spark/components/gridClasses/DefaultGridItemEditor.mxml
@@ -42,8 +42,7 @@
 -->
 <s:GridItemEditor xmlns:fx="http://ns.adobe.com/mxml/2009" 
                                   xmlns:s="library://ns.adobe.com/flex/spark" 
-                                  xmlns:mx="library://ns.adobe.com/flex/mx" 
-                                  xmlns:gridEditorClasses="spark.components.gridEditorClasses.*">
+                                  xmlns:mx="library://ns.adobe.com/flex/mx">
     
     <fx:Script>
         <![CDATA[
@@ -65,7 +64,7 @@
              */ 
             override public function get value():Object
             {
-                return textArea.text;            
+                return textArea.text;
             }
             
             /**
diff --git a/frameworks/projects/spark/src/spark/components/gridClasses/GridColumn.as b/frameworks/projects/spark/src/spark/components/gridClasses/GridColumn.as
index 5c3236f..afb9047 100644
--- a/frameworks/projects/spark/src/spark/components/gridClasses/GridColumn.as
+++ b/frameworks/projects/spark/src/spark/components/gridClasses/GridColumn.as
@@ -19,25 +19,25 @@
 
 package spark.components.gridClasses
 {
-import flash.events.Event;
-import flash.events.EventDispatcher;
+    import flash.events.Event;
+    import flash.events.EventDispatcher;
 
-import mx.core.ClassFactory;
-import mx.core.IFactory;
-import mx.core.mx_internal;
-import mx.events.CollectionEvent;
-import mx.events.CollectionEventKind;
-import mx.events.PropertyChangeEvent;
-import mx.formatters.IFormatter;
-import mx.styles.IAdvancedStyleClient;
-import mx.utils.ObjectUtil;
+    import mx.collections.ComplexFieldChangeWatcher;
+    import mx.collections.ISortField;
+    import mx.collections.ListCollectionView;
+    import mx.core.ClassFactory;
+    import mx.core.IFactory;
+    import mx.events.CollectionEvent;
+    import mx.events.CollectionEventKind;
+    import mx.events.PropertyChangeEvent;
+    import mx.formatters.IFormatter;
+    import mx.styles.IAdvancedStyleClient;
+    import mx.utils.ObjectUtil;
+    import mx.core.mx_internal;
+    import spark.collections.SortField;
+    import spark.components.Grid;
 
-import spark.collections.SortField;
-import spark.components.Grid;
-import spark.components.gridClasses.DefaultGridItemEditor;
-import spark.components.gridClasses.GridSortField;
-
-use namespace mx_internal;
+    use namespace mx_internal;
 
 /**
  *  The GridColumn class defines a column of a Spark grid control,
@@ -115,7 +115,7 @@
      *  @playerversion AIR 2.5
      *  @productversion Flex 4.5
      */
-    public static const ERROR_TEXT:String = new String(" ");
+    public static const ERROR_TEXT:String = " ";
     
     //--------------------------------------------------------------------------
     //
@@ -138,43 +138,13 @@
             _defaultItemEditorFactory = new ClassFactory(DefaultGridItemEditor);
         return _defaultItemEditorFactory;
     }
-    
-    /**
-     *  @private
-     *  A default compare function for sorting if the dataField is a complex path.
-     */
-    private static function dataFieldPathSortCompare(obj1:Object, obj2:Object, column:GridColumn):int
-    {
-        if (!obj1 && !obj2)
-            return 0;
-        
-        if (!obj1)
-            return 1;
-        
-        if (!obj2)
-            return -1;
-        
-        const dataFieldPath:Array = column.dataField.split(".");
-        const formatter:IFormatter = column.formatter;
-        
-        const obj1String:String = column.itemToString(obj1, dataFieldPath, null, formatter);
-        const obj2String:String = column.itemToString(obj2, dataFieldPath, null, formatter);
-        
-        if ( obj1String < obj2String )
-            return -1;
-        
-        if ( obj1String > obj2String )
-            return 1;
-        
-        return 0;
-    }
 
     //--------------------------------------------------------------------------
     //
     //  Constructor
     //
     //--------------------------------------------------------------------------
-    
+
     /**
      *  Constructor. 
      * 
@@ -336,7 +306,7 @@
         {
             dataFieldPath = [value];
         }
-        
+
         invalidateGrid();
         if (grid)
             grid.clearGridLayoutCache(true);
@@ -1606,62 +1576,40 @@
      *  @playerversion AIR 2.5
      *  @productversion Flex 4.5
      */
-    public function get sortField():SortField
+    public function get sortField():ISortField
     {
         const column:GridColumn = this;
         const isComplexDataField:Boolean = dataFieldPath.length > 1;
-        
-        // A complex dataField requires a GridSortField for the DataGrid
-        // to reverse a previous sort on this column by matching dataFieldPath
-        // to the dataField.
+
         // TODO (klin): Might be fixed in Spark Sort. The only reason this is
         // required is because MX Sort RTEs when the dataField doesn't exist on the
         // data object even though a sortCompareFunction is defined.
-        var sortField:SortField;
-        if (isComplexDataField)
-        {
-            sortField = new GridSortField();
-            GridSortField(sortField).dataFieldPath = dataField;
-        }
-        else
-        {
-            sortField = new SortField(dataField);
-        }
+        var sortField:ISortField = isComplexDataField ? new GridSortFieldComplex(this, dataField) : new GridSortFieldSimple(this, dataField);
 
         sortField.sortCompareType = column._sortCompareType;
 
-        var cF:Function = null;
+        var compareFunc:Function = null;
         if (_sortCompareFunction != null)
         {
-            cF = function (a:Object, b:Object):int
+            compareFunc = function (a:Object, b:Object):int
             { 
                 return _sortCompareFunction(a, b, column);
             };
         }
         else
         {
-            // If no sortCompareFunction is specified, there are defaults for
-            // two special cases: complex dataFields and labelFunctions without dataFields.
-            
-            if (isComplexDataField)
+            // If no sortCompareFunction is specified, there is a default for
+            // labelFunctions without dataFields.
+            if(dataField == null && _labelFunction != null)
             {
-                // use custom compare function for a complex dataField if one isn't provided.
-                cF = function (a:Object, b:Object):int
-                { 
-                    return dataFieldPathSortCompare(a, b, column);
-                };
-            }
-            else if (dataField == null && _labelFunction != null)
-            {
-                // use basic string compare on the labelFunction results
-                cF = function (a:Object, b:Object):int
+                compareFunc = function (a:Object, b:Object):int
                 { 
                     return ObjectUtil.stringCompare(_labelFunction(a, column), _labelFunction(b, column));
                 };
             }
         }
         
-        sortField.compareFunction = cF;
+        sortField.compareFunction = compareFunc;
         sortField.descending = column.sortDescending;
         return sortField;
     }
@@ -1856,10 +1804,10 @@
     /**
      *  @private
      */
-    private function dispatchChangeEvent(type:String):void
+    private function dispatchChangeEvent(eventType:String):void
     {
-        if (hasEventListener(type))
-            dispatchEvent(new Event(type));
+        if (hasEventListener(eventType))
+            dispatchEvent(new Event(eventType));
     }
     
     /**
diff --git a/frameworks/projects/spark/src/spark/components/gridClasses/GridItemEditor.as b/frameworks/projects/spark/src/spark/components/gridClasses/GridItemEditor.as
index 205eec0..32bd73f 100644
--- a/frameworks/projects/spark/src/spark/components/gridClasses/GridItemEditor.as
+++ b/frameworks/projects/spark/src/spark/components/gridClasses/GridItemEditor.as
@@ -19,26 +19,21 @@
 
 package spark.components.gridClasses
 {
-import flash.events.Event;
-import flash.events.MouseEvent;
-import flash.geom.Point;
-import flash.utils.describeType;
+    import flash.events.Event;
+    import flash.events.MouseEvent;
+    import flash.geom.Point;
+    import flash.utils.describeType;
 
-import mx.collections.ICollectionView;
-import mx.collections.ISort;
-import mx.core.IIMESupport;
-import mx.core.IInvalidating;
-import mx.core.IVisualElement;
-import mx.core.IVisualElementContainer;
-import mx.core.mx_internal;
-import mx.validators.IValidatorListener;
+    import mx.core.IIMESupport;
+    import mx.core.IInvalidating;
+    import mx.core.IVisualElement;
+    import mx.core.IVisualElementContainer;
+    import mx.validators.IValidatorListener;
+    import mx.core.mx_internal;
+    import spark.components.DataGrid;
+    import spark.components.Group;
 
-import spark.components.DataGrid;
-import spark.components.Group;
-import spark.components.gridClasses.GridColumn;
-
-
-use namespace mx_internal;
+    use namespace mx_internal;
 
 /**
  *  The GridItemEditor class defines the base class for custom item editors
@@ -149,7 +144,7 @@
      */
     public function get columnIndex():int
     {
-        return column.columnIndex;;
+        return column.columnIndex;
     }
 
     //----------------------------------
@@ -391,7 +386,7 @@
     {
         if (newValue != value)
         {
-            _value = newValue
+            _value = newValue;
             
             if (hasEventListener("valueChanged"))
             {
@@ -513,36 +508,14 @@
                 var strNewData:String = newData.toString();
                 if (strNewData)
                 {
-                    newData = (strNewData.toLowerCase() == "true") ? true : false;
+                    newData = strNewData.toLowerCase() == "true";
                 }
             }
         }
 
         if (property && data[property] !== newData)
         {
-            // If the data is sorted, turn off the sort for the edited data.
-            var sort:ISort = null;
-            if (dataGrid.dataProvider is ICollectionView)
-            {
-                var dataProvider:ICollectionView = ICollectionView(dataGrid.dataProvider);
-                if (dataProvider.sort)
-                {
-                    sort = dataProvider.sort;
-                    dataProvider.sort = null;
-                }
-            }
-
-            var oldData:Object = data[property];
             data[property] = newData;
-            
-            // If a complex field reference then the data and property local vars were modified and
-            // no longer point to the top-level data object and the complete path to the property
-            // so use the original values.
-            dataGrid.dataProvider.itemUpdated(this.data, column.dataField, oldData, newData);
-            
-            // Restore the sort. The data will not be sorted due to this change.
-            if (sort)
-                ICollectionView(dataGrid.dataProvider).sort = sort;
         }
 
         return true;
@@ -584,7 +557,7 @@
      *  @param container container to verify, may not be null.
      *  @return true if the container and its children are valid, false otherwise. 
      */
-    private function validateContainer(container:IVisualElementContainer):Boolean
+    private static function validateContainer(container:IVisualElementContainer):Boolean
     {
         if (container is IValidatorListener && IValidatorListener(container).errorString)
             return false;
@@ -618,14 +591,14 @@
      * 
      *  @param container container to verify, may not be null.
      */
-    private function clearErrorStringFromContainer(container:IVisualElementContainer):void
+    private static function clearErrorStringFromContainer(container:IVisualElementContainer):void
     {
         if (container is IValidatorListener && IValidatorListener(container).errorString)
         {
             clearErrorString(IValidatorListener(container));
         }
         
-        // loop thru the children, looking for errors to clear.
+        // loop through the children, looking for errors to clear.
         var n:int = container.numElements;
         for (var i:int = 0; i < n; i++)
         {
@@ -657,7 +630,7 @@
      * 
      *  @param validatorListener listener to clear error message in.
      */
-    private function clearErrorString(validatorListener:IValidatorListener):void
+    private static function clearErrorString(validatorListener:IValidatorListener):void
     {
         validatorListener.errorString = "";
         if (validatorListener is IInvalidating)
@@ -670,7 +643,7 @@
      *   @private
      *   Stop the item renderer from getting the click.
      */ 
-    private function mouseUpDownMoveHandler(event:MouseEvent):void
+    private static function mouseUpDownMoveHandler(event:MouseEvent):void
     {
         if (event.cancelable)
             event.preventDefault();
diff --git a/frameworks/projects/spark/src/spark/components/gridClasses/GridItemRenderer.as b/frameworks/projects/spark/src/spark/components/gridClasses/GridItemRenderer.as
index dd45eb7..d9bc6ef 100644
--- a/frameworks/projects/spark/src/spark/components/gridClasses/GridItemRenderer.as
+++ b/frameworks/projects/spark/src/spark/components/gridClasses/GridItemRenderer.as
@@ -19,28 +19,27 @@
 
 package spark.components.gridClasses
 {
-import flash.display.DisplayObject;
-import flash.events.Event;
-import flash.geom.Point;
-import flash.geom.Rectangle;
+    import flash.display.DisplayObject;
+    import flash.events.Event;
+    import flash.geom.Point;
+    import flash.geom.Rectangle;
 
-import mx.core.ILayoutDirectionElement;
-import mx.core.IToolTip;
-import mx.core.IUIComponent;
-import mx.core.LayoutDirection;
-import mx.core.mx_internal;
-import mx.events.FlexEvent;
-import mx.events.ToolTipEvent;
-import mx.managers.ISystemManager;
-import mx.managers.IToolTipManagerClient;
-import mx.managers.ToolTipManager;
-import mx.utils.PopUpUtil;
+    import mx.core.IToolTip;
+    import mx.core.IUIComponent;
+    import mx.core.LayoutDirection;
+    import mx.core.mx_internal;
+    import mx.events.FlexEvent;
+    import mx.events.ToolTipEvent;
+    import mx.managers.IToolTipManagerClient;
+    import mx.managers.ToolTipManager;
+    import mx.utils.PopUpUtil;
+    import mx.validators.IValidatorListener;
 
-import spark.components.Grid;
-import spark.components.Group;
-import spark.components.supportClasses.TextBase;
+    import spark.components.Grid;
+    import spark.components.Group;
+    import spark.components.supportClasses.TextBase;
 
-use namespace mx_internal;
+    use namespace mx_internal;
 
 //--------------------------------------
 //  Events
@@ -213,6 +212,9 @@
         const uiComp:IUIComponent = event.currentTarget as IUIComponent;
         if (!uiComp)
             return;
+
+        if(uiComp is IValidatorListener && IValidatorListener(uiComp).errorString)
+            return;
         
         // If the renderer is partially obscured because the Grid has been 
         // scrolled, we'll put the tooltip in the center of the exposed portion
@@ -310,10 +312,10 @@
     /**
      *  @private
      */
-    private function dispatchChangeEvent(type:String):void
+    private function dispatchChangeEvent(eventType:String):void
     {
-        if (hasEventListener(type))
-            dispatchEvent(new Event(type));
+        if (hasEventListener(eventType))
+            dispatchEvent(new Event(eventType));
     }
     
     //----------------------------------
diff --git a/frameworks/projects/spark/src/spark/components/gridClasses/GridSortField.as b/frameworks/projects/spark/src/spark/components/gridClasses/GridSortField.as
deleted file mode 100644
index 3fe6572..0000000
--- a/frameworks/projects/spark/src/spark/components/gridClasses/GridSortField.as
+++ /dev/null
@@ -1,77 +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 spark.components.gridClasses
-{
-
-import spark.collections.SortField;
-
-[ExcludeClass]
-
-/**
- *  A subclass of SortField used by DataGrid and GridColumn to keep track
- *  of complex dataFields when trying to reverse the sort.
- *  
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 2.5
- *  @productversion Flex 4.5
- */
-public class GridSortField extends SortField
-{
-    //--------------------------------------------------------------------------
-    //
-    //  Constructor
-    //
-    //--------------------------------------------------------------------------
-    
-    /**
-     *  Constructor.
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 2.5
-     *  @productversion Flex 4.5
-     */
-    public function GridSortField(name:String=null, descending:Boolean=false, numeric:Object=null)
-    {
-        super(name, descending, numeric);
-    }
-    
-    
-    //--------------------------------------------------------------------------
-    //
-    //  Properties
-    //
-    //--------------------------------------------------------------------------
-    
-    /**
-     *  The complex dataField in dot notation
-     *  of the column associated with this SortField.
-     *  
-     *  If dataFieldPath is specified, the name is null.
-     * 
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 2.5
-     *  @productversion Flex 4.5
-     */
-    public var dataFieldPath:String;
-}
-}
\ No newline at end of file
diff --git a/frameworks/projects/spark/src/spark/components/gridClasses/GridSortFieldComplex.as b/frameworks/projects/spark/src/spark/components/gridClasses/GridSortFieldComplex.as
new file mode 100644
index 0000000..a8f54f2
--- /dev/null
+++ b/frameworks/projects/spark/src/spark/components/gridClasses/GridSortFieldComplex.as
@@ -0,0 +1,72 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 spark.components.gridClasses {
+
+    import spark.collections.ComplexSortField;
+    import mx.utils.ObjectUtil;
+
+    [ExcludeClass]
+
+    /**
+     *  A subclass of SortField used by DataGrid and GridColumn to keep track
+     *  of complex dataFields when trying to reverse the sort.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
+     */
+    public class GridSortFieldComplex extends ComplexSortField {
+        private var _column:GridColumn;
+
+        /**
+         *  Constructor.
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10
+         *  @playerversion AIR 2.5
+         *  @productversion Flex 4.5
+         */
+
+        public function GridSortFieldComplex(column:GridColumn, name:String = null, descending:Boolean = false, numeric:Object = null, sortCompareType:String = null, customCompareFunction:Function = null)
+        {
+            _column = column;
+            super(name, descending, numeric, sortCompareType, customCompareFunction);
+        }
+
+
+        override protected function getSortFieldValue(obj:Object):*
+        {
+            var unformattedValue:* = ObjectUtil.getValue(obj, nameParts);
+            return column && column.formatter ? column.formatter.format(unformattedValue) : unformattedValue;
+        }
+
+        //--------------------------------------------------------------------------
+        //
+        //  Properties
+        //
+        //--------------------------------------------------------------------------
+
+        public function get column():GridColumn
+        {
+            return _column;
+        }
+    }
+}
\ No newline at end of file
diff --git a/frameworks/projects/spark/src/spark/components/gridClasses/GridSortFieldSimple.as b/frameworks/projects/spark/src/spark/components/gridClasses/GridSortFieldSimple.as
new file mode 100644
index 0000000..72290b5
--- /dev/null
+++ b/frameworks/projects/spark/src/spark/components/gridClasses/GridSortFieldSimple.as
@@ -0,0 +1,45 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 spark.components.gridClasses {
+    import mx.utils.ObjectUtil;
+
+    import spark.collections.SortField;
+
+    public class GridSortFieldSimple extends SortField {
+        private var _column:GridColumn;
+
+        public function GridSortFieldSimple(column:GridColumn, name:String = null, descending:Boolean = false, numeric:Object = null, sortCompareType:String = null, customCompareFunction:Function = null)
+        {
+            _column = column;
+            super(name, descending, numeric, sortCompareType, customCompareFunction);
+        }
+
+        public function get column():GridColumn
+        {
+            return _column;
+        }
+
+        override protected function getSortFieldValue(obj:Object):*
+        {
+            var unformattedValue:* = ObjectUtil.getValue(obj, [name]);
+            return column && column.formatter ? column.formatter.format(unformattedValue) : unformattedValue;
+        }
+    }
+}
diff --git a/frameworks/projects/spark/src/spark/components/supportClasses/ListBase.as b/frameworks/projects/spark/src/spark/components/supportClasses/ListBase.as
index a03a30a..c72d4d5 100644
--- a/frameworks/projects/spark/src/spark/components/supportClasses/ListBase.as
+++ b/frameworks/projects/spark/src/spark/components/supportClasses/ListBase.as
@@ -1980,13 +1980,13 @@
 
     /**
      *  @private
-     *  Called when an item has been removed from this component.
+     *  Called on rollover or roll out.
      */
     private function item_mouseEventHandler(event:MouseEvent):void
     {
         var type:String = event.type;
         type = TYPE_MAP[type];
-        if (hasEventListener(type))
+        if (hasEventListener(type) && dataProvider != null)
         {
             var itemRenderer:IItemRenderer = event.currentTarget as IItemRenderer;
             
@@ -1995,7 +1995,11 @@
                 itemIndex = itemRenderer.itemIndex;
             else
                 itemIndex = dataGroup.getElementIndex(event.currentTarget as IVisualElement);
-            
+			// The event can be called by an item renderer which has already been removed from the dataProvider.
+			// In that case, bail out.
+            if(itemIndex < 0 || itemIndex >= dataProvider.length)
+				return;
+			
             var listEvent:ListEvent = new ListEvent(type, false, false,
                                                     event.localX,
                                                     event.localY,
diff --git a/frameworks/projects/spark/src/spark/components/supportClasses/SkinnableTextBase.as b/frameworks/projects/spark/src/spark/components/supportClasses/SkinnableTextBase.as
index b08c7a3..abb6dfb 100644
--- a/frameworks/projects/spark/src/spark/components/supportClasses/SkinnableTextBase.as
+++ b/frameworks/projects/spark/src/spark/components/supportClasses/SkinnableTextBase.as
@@ -1875,8 +1875,10 @@
             }
             else
             {
-                //Calling later so the skin/state can finish setting up before accepting focus on textDisplay.
-                callLater(textDisplay.setFocus);
+                //Force properties to validate before resetting focus.
+                validateProperties();
+
+                textDisplay.setFocus();
             }
         }
     }
@@ -2693,18 +2695,23 @@
      */
     private function textDisplay_changeHandler(event:Event):void
     {        
-        //trace(id, "textDisplay_changeHandler", textDisplay.text);
-        
         // The text component has changed.  Generate an UPDATE_COMPLETE event.
         invalidateDisplayList();
-        
+
+
         // We may have gone from empty to non-empty or vice-versa. This should
         // cause the prompt to show or hide.
-        if (prompt != null && prompt != "" && skin && skin.currentState &&
-            (skin.currentState.indexOf("WithPrompt") != -1 && text.length != 0 ||
-            skin.currentState.indexOf("WithPrompt") == -1 && text.length == 0))
-            invalidateSkinState();
-                
+        if (prompt != null && prompt != "" && skin && skin.currentState)
+        {
+            //Checks when to invalidate skin. However when component is focused (and not prompt with focus) it will not have "WithPrompt".  Broken out for clarity.
+            if (skin.currentState.indexOf("WithPrompt") != -1 && text.length != 0 ||
+                skin.currentState.indexOf("WithPrompt") == -1 && text.length == 0)
+            {
+                invalidateSkinState();
+            }
+        }
+
+
         // Redispatch the event that came from the RichEditableText.
         dispatchEvent(event);
     }
diff --git a/frameworks/projects/spark/src/spark/core/Version.as b/frameworks/projects/spark/src/spark/core/Version.as
index 3b6707f..3077bda 100644
--- a/frameworks/projects/spark/src/spark/core/Version.as
+++ b/frameworks/projects/spark/src/spark/core/Version.as
@@ -23,4 +23,4 @@
  *  @private
  *  Version string for this class.
  */
-mx_internal static const VERSION:String = "4.14.1.0";
+mx_internal static const VERSION:String = "4.16.0.0";
diff --git a/frameworks/projects/spark/src/spark/globalization/supportClasses/DateTimeFormatterEx.as b/frameworks/projects/spark/src/spark/globalization/supportClasses/DateTimeFormatterEx.as
index d3b16e3..62c4717 100644
--- a/frameworks/projects/spark/src/spark/globalization/supportClasses/DateTimeFormatterEx.as
+++ b/frameworks/projects/spark/src/spark/globalization/supportClasses/DateTimeFormatterEx.as
@@ -681,12 +681,12 @@
      *          because the current pattern does not contain either
      *          "H" or "h".
      */
-    public function getUse24HourFlag():Object
+    public function getUse24HourFlag():Boolean
     {
         const hourPattern:String = getHourPattern();
         
         if (!hourPattern)
-            return null;
+            return false;
         
         const use24Hour:Boolean = hourPattern.indexOf("H") >= 0;
         const use12Hour:Boolean = hourPattern.indexOf("h") >= 0;
@@ -694,8 +694,7 @@
             return true;
         else if (!use24Hour && use12Hour)
             return false;
-        
-        return null;
+        else return false;
     }
     
     [Bindable("change")]
diff --git a/frameworks/projects/spark/src/spark/validators/supportClasses/GlobalizationValidatorBase.as b/frameworks/projects/spark/src/spark/validators/supportClasses/GlobalizationValidatorBase.as
index 218338a..a76fe1a 100644
--- a/frameworks/projects/spark/src/spark/validators/supportClasses/GlobalizationValidatorBase.as
+++ b/frameworks/projects/spark/src/spark/validators/supportClasses/GlobalizationValidatorBase.as
@@ -27,22 +27,18 @@
 package spark.validators.supportClasses
 {
 
-import flash.events.Event;
-import flash.events.EventDispatcher;
-import flash.events.IEventDispatcher;
-import mx.binding.BindingManager;
-import mx.core.IMXMLObject;
-import mx.events.FlexEvent;
-import mx.validators.IValidatorListener;
-import mx.events.ValidationResultEvent;
-import mx.validators.ValidationResult;
-import mx.validators.IValidator;
-import mx.managers.ISystemManager;
-import mx.managers.SystemManager;
-import mx.resources.IResourceManager;
-import mx.resources.ResourceManager;
+    import flash.events.Event;
+    import flash.events.IEventDispatcher;
 
-import spark.globalization.supportClasses.GlobalizationBase;
+    import mx.events.FlexEvent;
+    import mx.events.ValidationResultEvent;
+    import mx.resources.IResourceManager;
+    import mx.resources.ResourceManager;
+    import mx.validators.IValidator;
+    import mx.validators.IValidatorListener;
+    import mx.validators.ValidationResult;
+
+    import spark.globalization.supportClasses.GlobalizationBase;
 
 //--------------------------------------
 //  Events
@@ -978,53 +974,6 @@
     /**
      *  @private
      */
-    private static function findObjectFromString(doc:Object,
-                                                 value:String):Object
-    {
-        var obj:Object = doc;
-        var parts:Array = value.split(".");
-
-        var n:int = parts.length;
-        for (var i:int = 0; i < n; i++)
-        {
-            try
-            {
-                obj = obj[parts[i]];
-
-                // There's no guarantee that the objects have
-                // already been created when this function fires;
-                // for example, in the deferred instantiation case,
-                // this function fires before the object for validation
-                // has been created.
-                if (!obj)
-                {
-                    //return true;
-                }
-            }
-            catch (error:Error)
-            {
-                if ((error is TypeError) &&
-                    (error.message.indexOf("null has no properties") != -1))
-                {
-                    var resourceManager:IResourceManager =
-                        ResourceManager.getInstance();
-                    var message:String = resourceManager.getString(
-                        "validators", "fieldNotFound", [ value ]);
-                    throw new Error(message);
-                }
-                else
-                {
-                    throw error;
-                }
-            }
-        }
-
-        return obj;
-    }
-
-    /**
-     *  @private
-     */
     private static function trimString(str:String):String
     {
         var startIndex:int = 0;
diff --git a/frameworks/projects/spark/tests/spark/collections/SortField_Tests.as b/frameworks/projects/spark/tests/spark/collections/SortField_Tests.as
new file mode 100644
index 0000000..2fffc3b
--- /dev/null
+++ b/frameworks/projects/spark/tests/spark/collections/SortField_Tests.as
@@ -0,0 +1,56 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 spark.collections {
+    import org.flexunit.asserts.assertEquals;
+    import org.flexunit.asserts.assertFalse;
+
+    import spark.collections.SortField;
+
+    public class SortField_Tests {
+        private var _sut:SortField;
+
+        [Test]
+        public function fix_mustella_failure_due_to_FLEX_34852():void
+        {
+            //given
+            _sut = new SortField("someField");
+
+            //when
+            const emptyObject:Object = {};
+            var emptyObjectHasASortField:Boolean = _sut.objectHasSortField(emptyObject);
+
+            //then
+            assertFalse(emptyObjectHasASortField);
+        }
+
+        [Test]
+        public function locale_setting_and_retrieving_work():void
+        {
+            //given
+            _sut = new SortField("someField");
+
+            //when
+            _sut.setStyle("locale", "ru-RU");
+
+            //then
+            assertEquals("ru-RU", _sut.getStyle("locale"));
+        }
+    }
+}
diff --git a/frameworks/projects/spark/tests/spark/components/DataGrid_FLEX_34837_Tests.as b/frameworks/projects/spark/tests/spark/components/DataGrid_FLEX_34837_Tests.as
new file mode 100644
index 0000000..5696429
--- /dev/null
+++ b/frameworks/projects/spark/tests/spark/components/DataGrid_FLEX_34837_Tests.as
@@ -0,0 +1,201 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 spark.components {
+    import mx.collections.ArrayCollection;
+    import mx.collections.ArrayList;
+    import mx.collections.IList;
+    import mx.collections.ListCollectionView;
+
+    import org.flexunit.asserts.assertEquals;
+    import org.flexunit.asserts.assertNotNull;
+    import org.fluint.uiImpersonation.UIImpersonator;
+
+    import spark.components.gridClasses.GridColumn;
+    import spark.formatters.DateTimeFormatter;
+
+    public class DataGrid_FLEX_34837_Tests {
+        private var _sut:DataGrid;
+
+        [Before]
+        public function setUp():void
+        {
+            _sut = new DataGrid();
+        }
+
+        [After]
+        public function tearDown():void
+        {
+            _sut = null;
+        }
+
+        [Test]
+        public function test_removing_selected_item_on_complex_field_sorted_grid_after_renaming_it():void
+        {
+            //given
+            var streetColumn:GridColumn = new GridColumn("address.street");
+            _sut.columns = new ArrayCollection([streetColumn]);
+
+            const tenObjects:IList = generateVOs(10);
+            const firstObject:FLEX_34837_VO = tenObjects.getItemAt(0) as FLEX_34837_VO;
+            const dataProvider:ListCollectionView = new ListCollectionView(tenObjects);
+
+            //when
+            UIImpersonator.addChild(_sut);
+            assertNotNull("UIImpersonator doesn't work correctly!", _sut.grid);
+            _sut.dataProvider = dataProvider;
+            _sut.sortByColumns(new <int>[0]); //sort by address.street
+            firstObject.address.street = "zzz"; //should move it at the end of the list
+
+            //then
+            assertEquals("The object should have moved to the end of the list!", dataProvider.length - 1, dataProvider.getItemIndex(firstObject));
+            dataProvider.removeItemAt(dataProvider.getItemIndex(firstObject)); //make sure there's no RTE
+            assertEquals("The item wasn't removed!", 9, dataProvider.length);
+        }
+
+        [Test]
+        public function test_removing_selected_item_on_complex_field_sorted_grid_with_formatter_after_renaming_it():void
+        {
+            //given
+            var dateColumn:GridColumn = new GridColumn("address.dateMovedIn");
+            var dateTimeFormatter:DateTimeFormatter = new DateTimeFormatter();
+            dateTimeFormatter.dateTimePattern = "MMMM"; //Full month name
+            dateColumn.formatter = dateTimeFormatter;
+
+            _sut.columns = new ArrayCollection([dateColumn]);
+
+            const tenObjects:IList = generateVOs(10);
+            const dataProvider:ListCollectionView = new ListCollectionView(tenObjects);
+
+            //when
+            UIImpersonator.addChild(_sut);
+            assertNotNull("UIImpersonator doesn't work correctly!", _sut.grid);
+            _sut.dataProvider = dataProvider;
+            _sut.sortByColumns(new <int>[0]); //sort by address.dateMovedIn, in effect by month name
+
+            //then
+            const aprilObject:FLEX_34837_VO = tenObjects.getItemAt(3) as FLEX_34837_VO;
+            assertEquals(0, dataProvider.getItemIndex(aprilObject));
+
+            //when
+            const septemberObject:FLEX_34837_VO = tenObjects.getItemAt(8) as FLEX_34837_VO;
+            septemberObject.address.dateMovedIn = new Date(2000, 3, 2); //"April"; should move it at the start of the list
+
+            const firstObject:FLEX_34837_VO = tenObjects.getItemAt(0) as FLEX_34837_VO;
+            firstObject.address.dateMovedIn = new Date(2000, 8, 2); //"September"; should move it at the end of the list
+
+            //then
+            assertEquals("The object should have moved to the end of the list!", dataProvider.length - 1, dataProvider.getItemIndex(firstObject));
+            dataProvider.removeItemAt(dataProvider.getItemIndex(firstObject)); //make sure there's no RTE
+            assertEquals("The item wasn't removed!", 9, dataProvider.length);
+        }
+
+        [Test]
+        public function test_removing_selected_item_on_multiple_field_sorted_grid_with_formatter_changed_after_first_sort_and_after_renaming():void
+        {
+            //given
+            var dateColumn:GridColumn = new GridColumn("address.dateMovedIn");
+            _sut.columns = new ArrayCollection([dateColumn]);
+
+            const tenObjects:IList = generateVOs(10);
+            const dataProvider:ListCollectionView = new ListCollectionView(tenObjects);
+
+            //when
+            UIImpersonator.addChild(_sut);
+            assertNotNull("UIImpersonator doesn't work correctly!", _sut.grid);
+            _sut.dataProvider = dataProvider;
+
+            var dateTimeFormatter:DateTimeFormatter = new DateTimeFormatter();
+            dateTimeFormatter.dateTimePattern = "MMMM"; //Full month name
+            dateColumn.formatter = dateTimeFormatter; //this should re-sort the items in the grid according to the month
+
+            _sut.sortByColumns(new <int>[0]); //sort by address.dateMovedIn
+
+            //then
+            const aprilObject:FLEX_34837_VO = tenObjects.getItemAt(3) as FLEX_34837_VO;
+            assertEquals(0, dataProvider.getItemIndex(aprilObject));
+
+            //when
+            const septemberObject:FLEX_34837_VO = tenObjects.getItemAt(8) as FLEX_34837_VO;
+            septemberObject.address.dateMovedIn = new Date(2000, 3, 2); //"April"; should move it at the start of the list
+
+            const firstObject:FLEX_34837_VO = tenObjects.getItemAt(0) as FLEX_34837_VO;
+            firstObject.address.dateMovedIn = new Date(2000, 8, 2); //"September"; should move it at the end of the list
+
+            //then
+            assertEquals("The object should have moved to the end of the list!", dataProvider.length - 1, dataProvider.getItemIndex(firstObject));
+            dataProvider.removeItemAt(dataProvider.getItemIndex(firstObject)); //make sure there's no RTE
+            assertEquals("The item wasn't removed!", 9, dataProvider.length);
+        }
+
+        private static function generateVOs(no:int, reverse:Boolean = false):IList
+        {
+            return generateObjects(no, reverse, generateOneObject);
+        }
+
+        private static function generateObjects(no:int, reverse:Boolean, generator:Function):IList
+        {
+            var result:Array = [];
+            for(var i:int = 0; i < no; i++)
+            {
+                result.push(generator(i));
+            }
+
+            if(reverse)
+                result.reverse();
+
+            return new ArrayList(result);
+        }
+
+        private static function generateOneObject(i:Number):FLEX_34837_VO
+        {
+            return new FLEX_34837_VO(i, "Object", "Street");
+        }
+    }
+}
+
+[Bindable]
+class FLEX_34837_VO
+{
+    public var name:String;
+    public var address:FLEX_34837_AddressVO;
+    public var index:Number;
+
+    public function FLEX_34837_VO(index:Number, namePrefix:String, streetPrefix:String)
+    {
+        this.index = index;
+        this.name = namePrefix + index;
+        this.address = new FLEX_34837_AddressVO(streetPrefix + index, Math.floor(index), new Date(2000 + Math.floor(index), Math.floor(index), 1, 0, 0, 0, 1));
+    }
+}
+
+[Bindable]
+class FLEX_34837_AddressVO
+{
+    public var street:String;
+    public var houseNumber:int;
+    public var dateMovedIn:Date;
+
+    public function FLEX_34837_AddressVO(street:String, houseNumber:int, dateMovedIn:Date)
+    {
+        this.street = street;
+        this.houseNumber = houseNumber;
+        this.dateMovedIn = dateMovedIn;
+    }
+}
\ No newline at end of file
diff --git a/frameworks/projects/spark/tests/spark/skins/spark/FLEX_34625_Tests.as b/frameworks/projects/spark/tests/spark/skins/spark/FLEX_34625_Tests.as
index 9009224..c040b38 100644
--- a/frameworks/projects/spark/tests/spark/skins/spark/FLEX_34625_Tests.as
+++ b/frameworks/projects/spark/tests/spark/skins/spark/FLEX_34625_Tests.as
@@ -18,67 +18,46 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 package spark.skins.spark {
-    import flash.display.Sprite;
     import flash.events.Event;
     import flash.events.EventDispatcher;
 
-    import mx.core.Container;
-
     import mx.managers.FocusManager;
     import mx.managers.IFocusManagerContainer;
 
-    import org.flexunit.asserts.assertNotNull;
-
     import org.flexunit.asserts.assertTrue;
     import org.flexunit.async.Async;
     import org.fluint.uiImpersonation.UIImpersonator;
 
-    import spark.components.Group;
-
     import spark.components.TextInput;
 
     public class FLEX_34625_Tests {
 
         private static const NO_ENTER_FRAMES_TO_ALLOW:int = 4;
+        private static const _finishNotifier:EventDispatcher = new EventDispatcher();
+        private static var _textInput:TextInput;
         private var noEnterFramesRemaining:int = NaN;
-        private var _finishNotifier:EventDispatcher;
-        private var _textInput:TextInput;
 
         [Before]
         public function setUp():void
         {
+            var _focusManager:FocusManager = new FocusManager(UIImpersonator.testDisplay as IFocusManagerContainer);
+            _focusManager.showFocusIndicator = true;
 
+            _textInput = new TextInput();
+            _textInput.width = 0;
+            _textInput.height = 0;
+            _textInput.focusManager = _focusManager;
         }
 
         [After]
         public function tearDown():void
         {
             _textInput = null;
-            _finishNotifier = null;
         }
 
         [Test(async, timeout=500)]
         public function test_focus_skin_with_zero_focus_thickness():void
         {
-            //from setUp(), for debugging
-            trace("UIImpersonator root:" + UIImpersonator.testDisplay);
-
-            assertNotNull("UIImpersonator is not available!", UIImpersonator.testDisplay);
-            assertTrue("It's not a Sprite!", UIImpersonator.testDisplay is Sprite);
-            assertTrue("It's not a Container!", UIImpersonator.testDisplay is Container);
-            assertTrue("It's not a Group!", UIImpersonator.testDisplay is Group);
-            assertTrue("It's not an IFocusManagerContainer!", UIImpersonator.testDisplay is IFocusManagerContainer);
-
-            var focusManager:FocusManager = new FocusManager(UIImpersonator.testDisplay as IFocusManagerContainer);
-            focusManager.showFocusIndicator = true;
-
-            _textInput = new TextInput();
-            _textInput.width = 0;
-            _textInput.height = 0;
-            _textInput.focusManager = focusManager;
-
-            _finishNotifier = new EventDispatcher();
-
             //given
             UIImpersonator.addChild(_textInput);
 
@@ -95,17 +74,6 @@
         [Test(async, timeout=500)]
         public function test_focus_skin_with_NaN_focus_thickness():void
         {
-            //from setUp(), for debugging
-            var focusManager:FocusManager = new FocusManager(UIImpersonator.testDisplay as IFocusManagerContainer);
-            focusManager.showFocusIndicator = true;
-
-            _textInput = new TextInput();
-            _textInput.width = 0;
-            _textInput.height = 0;
-            _textInput.focusManager = focusManager;
-
-            _finishNotifier = new EventDispatcher();
-
             //given
             UIImpersonator.addChild(_textInput);
 
@@ -124,7 +92,6 @@
             if(!--noEnterFramesRemaining)
             {
                 UIImpersonator.testDisplay.removeEventListener(Event.ENTER_FRAME, onEnterFrame);
-
                 _finishNotifier.dispatchEvent(new Event(Event.COMPLETE));
             }
         }
diff --git a/frameworks/projects/spark_dmv/src/spark/core/Version.as b/frameworks/projects/spark_dmv/src/spark/core/Version.as
index 3b6707f..3077bda 100644
--- a/frameworks/projects/spark_dmv/src/spark/core/Version.as
+++ b/frameworks/projects/spark_dmv/src/spark/core/Version.as
@@ -23,4 +23,4 @@
  *  @private
  *  Version string for this class.
  */
-mx_internal static const VERSION:String = "4.14.1.0";
+mx_internal static const VERSION:String = "4.16.0.0";
diff --git a/frameworks/projects/tool/src/mx/core/Version.as b/frameworks/projects/tool/src/mx/core/Version.as
index 3b6707f..3077bda 100644
--- a/frameworks/projects/tool/src/mx/core/Version.as
+++ b/frameworks/projects/tool/src/mx/core/Version.as
@@ -23,4 +23,4 @@
  *  @private
  *  Version string for this class.
  */
-mx_internal static const VERSION:String = "4.14.1.0";
+mx_internal static const VERSION:String = "4.16.0.0";
diff --git a/frameworks/projects/tool_air/src/mx/core/Version.as b/frameworks/projects/tool_air/src/mx/core/Version.as
index 3b6707f..3077bda 100644
--- a/frameworks/projects/tool_air/src/mx/core/Version.as
+++ b/frameworks/projects/tool_air/src/mx/core/Version.as
@@ -23,4 +23,4 @@
  *  @private
  *  Version string for this class.
  */
-mx_internal static const VERSION:String = "4.14.1.0";
+mx_internal static const VERSION:String = "4.16.0.0";
diff --git a/frameworks/spark-manifest.xml b/frameworks/spark-manifest.xml
index 5ae7f02..bf2eaa3 100644
--- a/frameworks/spark-manifest.xml
+++ b/frameworks/spark-manifest.xml
@@ -101,6 +101,8 @@
     <component id="GraphicElement" class="spark.primitives.supportClasses.GraphicElement"/>
     <component id="Grid" class="spark.components.Grid"/>
     <component id="GridColumn" class="spark.components.gridClasses.GridColumn"/>
+    <component id="GridSortFieldSimple" class="spark.components.gridClasses.GridSortFieldSimple"/>
+    <component id="GridSortFieldComplex" class="spark.components.gridClasses.GridSortFieldComplex"/>
     <component id="GridItemEditor" class="spark.components.gridClasses.GridItemEditor" />
     <component id="GridItemRenderer" class="spark.components.gridClasses.GridItemRenderer"/>
     <component id="GridLayer" class="spark.components.gridClasses.GridLayer"/>
@@ -179,6 +181,7 @@
     <component id="SliderBase" class="spark.components.supportClasses.SliderBase"/>
     <component id="Sort" class="spark.collections.Sort"/>
     <component id="SortField" class="spark.collections.SortField"/>
+    <component id="ComplexSortField" class="spark.collections.ComplexSortField"/>
     <component id="SortingCollator" class="spark.globalization.SortingCollator"/>
     <component id="Spacer" class="mx.controls.Spacer" lookupOnly="true"/>
     <component id="SparkButtonSkin" class="spark.skins.SparkButtonSkin"/>
diff --git a/ide/addAIRtoSDK.sh b/ide/addAIRtoSDK.sh
index 4519333..aeb7575 100755
--- a/ide/addAIRtoSDK.sh
+++ b/ide/addAIRtoSDK.sh
@@ -30,7 +30,7 @@
 AIR_VERSION="$1"
 OS=`uname`
 
-if [[ "${AIR_VERSION}" != "17.0b"
+if [[ "${AIR_VERSION}" != "20.0"  && "${AIR_VERSION}" != "19.0"  && "${AIR_VERSION}" != "18.0"
   && "${AIR_VERSION}" != "17.0" && "${AIR_VERSION}" != "16.0" && "${AIR_VERSION}" != "15.0" 
   && "${AIR_VERSION}" != "14.0" && "${AIR_VERSION}" != "13.0" && "${AIR_VERSION}" != "4.0" 
   && "${AIR_VERSION}" != "3.9" && "${AIR_VERSION}" != "3.8" && "${AIR_VERSION}" != "3.7" 
@@ -38,7 +38,7 @@
   && "${AIR_VERSION}" != "3.3" && "${AIR_VERSION}" != "3.2" && "${AIR_VERSION}" != "3.1" 
   && "${AIR_VERSION}" != "3.0" && "${AIR_VERSION}" != "2.7" && "${AIR_VERSION}" != "2.6" ]]
 then
-	echo Unknown version ${AIR_VERISON} of AIR. Versions 2.6, 2.7, 3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 13.0, 14.0, 15.0, 16.0 and 17.0 are supported.
+	echo Unknown version ${AIR_VERISON} of AIR. Versions 2.6, 2.7, 3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0 and 20.0 are supported.
 	exit 1;
 fi
 
@@ -161,12 +161,26 @@
 for configFile in "${configFiles[@]}"
 do
 	echo Updating ${configFile}
-
-	# 17.0 beta needs FP 17 and swf version 28
-	if [ ${AIR_VERSION} = "17.0b" ]
+	
+	# 20.0 needs FP 20 and swf version 31
+	if [ ${AIR_VERSION} = "20.0" ]
 	then
-		updatePlayerVersion 17.0 "${configFile}"
-		updateSWFVersion 28 "${configFile}"
+		updatePlayerVersion 20.0 "${configFile}"
+		updateSWFVersion 31 "${configFile}"
+	fi
+	
+	# 19.0 needs FP 19 and swf version 30
+	if [ ${AIR_VERSION} = "19.0" ]
+	then
+		updatePlayerVersion 19.0 "${configFile}"
+		updateSWFVersion 30 "${configFile}"
+	fi
+
+	# 18.0 needs FP 18 and swf version 29
+	if [ ${AIR_VERSION} = "18.0" ]
+	then
+		updatePlayerVersion 18.0 "${configFile}"
+		updateSWFVersion 29 "${configFile}"
 	fi	
 	
 	# 17.0 needs FP 17 and swf version 28
diff --git a/ide/checkAllPlayerGlobals.sh b/ide/checkAllPlayerGlobals.sh
index 0f2e36e..1b68aa9 100755
--- a/ide/checkAllPlayerGlobals.sh
+++ b/ide/checkAllPlayerGlobals.sh
@@ -126,4 +126,6 @@
 downloadPlayerGlobal 15.0 4d17b14ef74dd23377a71a3fdbfda8ad http://download.macromedia.com/get/flashplayer/updaters/15/playerglobal15_0.swc
 downloadPlayerGlobal 16.0 336be79e5b3ed665c98308241381aff3 http://download.macromedia.com/get/flashplayer/updaters/16/playerglobal16_0.swc
 downloadPlayerGlobal 17.0 1a5e68003b5ce6af08f3841bdb2b96ee http://download.macromedia.com/get/flashplayer/updaters/17/playerglobal17_0.swc
-downloadPlayerGlobal 17.0b 2bd048da880ab3b9516bdf1f263a3135 http://labsdownload.adobe.com/pub/labs/flashruntimes/flashplayer/flashplayer17_playerglobal.swc
+downloadPlayerGlobal 18.0 af3459e5beb554e58fe4d8582e5fae20 http://download.macromedia.com/get/flashplayer/updaters/17/playerglobal18_0.swc
+downloadPlayerGlobal 19.0 680a08d16f4b74de2648e956bde3c87b http://download.macromedia.com/get/flashplayer/updaters/17/playerglobal19_0.swc
+downloadPlayerGlobal 20.0 8f51be6cf9ed743bab90d5aaca37fb05 http://download.macromedia.com/get/flashplayer/updaters/17/playerglobal20_0.swc
diff --git a/ide/flashbuilder/config/air-config.xml b/ide/flashbuilder/config/air-config.xml
index d3b8963..4b48d04 100644
--- a/ide/flashbuilder/config/air-config.xml
+++ b/ide/flashbuilder/config/air-config.xml
@@ -353,7 +353,7 @@
       <!-- Framework SWC -->
 	<runtime-shared-library-path>
 		<path-element>libs/framework.swc</path-element>
-		<rsl-url>framework_4.14.1.0.swf</rsl-url>
+		<rsl-url>framework_4.15.0.0.swf</rsl-url>
 	</runtime-shared-library-path>
 	  
 	  <!-- TextLayout SWC -->
@@ -363,37 +363,37 @@
     -->
     <runtime-shared-library-path>
 		<path-element>libs/textLayout.swc</path-element>
-		<rsl-url>textLayout_4.14.1.0.swf</rsl-url>
+		<rsl-url>textLayout_4.15.0.0.swf</rsl-url>
 	</runtime-shared-library-path>
     
       <!-- Spark SWC-->
    	<runtime-shared-library-path>
 		<path-element>libs/spark.swc</path-element>
-		<rsl-url>spark_4.14.1.0.swf</rsl-url>
+		<rsl-url>spark_4.15.0.0.swf</rsl-url>
 	</runtime-shared-library-path>
 	
       <!-- Sparkskins SWC-->
    	<runtime-shared-library-path>
 		<path-element>libs/sparkskins.swc</path-element>
-		<rsl-url>sparkskins_4.14.1.0.swf</rsl-url>
+		<rsl-url>sparkskins_4.15.0.0.swf</rsl-url>
 	</runtime-shared-library-path>
 	 
 	  <!-- RPC SWC -->
 	<runtime-shared-library-path>
 		<path-element>libs/rpc.swc</path-element>
-		<rsl-url>rpc_4.14.1.0.swf</rsl-url>
+		<rsl-url>rpc_4.15.0.0.swf</rsl-url>
 	</runtime-shared-library-path>
     	
       <!-- Charts SWC -->
 	<runtime-shared-library-path>
 		<path-element>libs/charts.swc</path-element>
-		<rsl-url>charts_4.14.1.0.swf</rsl-url>
+		<rsl-url>charts_4.15.0.0.swf</rsl-url>
 	</runtime-shared-library-path>
 
       <!-- Spark_dmv SWC -->
 	<runtime-shared-library-path>
 		<path-element>libs/spark_dmv.swc</path-element>
-		<rsl-url>spark_dmv_4.14.1.0.swf</rsl-url>
+		<rsl-url>spark_dmv_4.15.0.0.swf</rsl-url>
 	</runtime-shared-library-path>
 
       <!-- OSMF SWC -->
@@ -403,19 +403,19 @@
     -->
     <runtime-shared-library-path>
 		<path-element>libs/osmf.swc</path-element>
-		<rsl-url>osmf_4.14.1.0.swf</rsl-url>
+		<rsl-url>osmf_4.15.0.0.swf</rsl-url>
 	</runtime-shared-library-path>
       
       <!-- MX SWC -->
 	<runtime-shared-library-path>
 		<path-element>libs/mx/mx.swc</path-element>
-		<rsl-url>mx_4.14.1.0.swf</rsl-url>
+		<rsl-url>mx_4.15.0.0.swf</rsl-url>
 	</runtime-shared-library-path>
    
       <!-- Advancedgrids SWC -->
 	<runtime-shared-library-path>
 		<path-element>libs/advancedgrids.swc</path-element>
-		<rsl-url>advancedgrids_4.14.1.0.swf</rsl-url>
+		<rsl-url>advancedgrids_4.15.0.0.swf</rsl-url>
 	</runtime-shared-library-path>
 	
     <!-- static-link-runtime-shared-libraries: statically link the libraries specified by the -runtime-shared-libraries-path option.-->
diff --git a/ide/flashbuilder/config/flex-config.xml b/ide/flashbuilder/config/flex-config.xml
index 3c56548..f9f830d 100644
--- a/ide/flashbuilder/config/flex-config.xml
+++ b/ide/flashbuilder/config/flex-config.xml
@@ -357,7 +357,7 @@
       <!-- Framework SWC -->
 	<runtime-shared-library-path>
 		<path-element>libs/framework.swc</path-element>
-		<rsl-url>framework_4.14.1.0.swf</rsl-url>
+		<rsl-url>framework_4.15.0.0.swf</rsl-url>
 	</runtime-shared-library-path>
 
 	  <!-- TextLayout SWC -->
@@ -367,37 +367,37 @@
     -->
     <runtime-shared-library-path>
 		<path-element>libs/textLayout.swc</path-element>
-		<rsl-url>textLayout_4.14.1.0.swf</rsl-url>
+		<rsl-url>textLayout_4.15.0.0.swf</rsl-url>
 	</runtime-shared-library-path>
 
       <!-- Spark SWC-->
    	<runtime-shared-library-path>
 		<path-element>libs/spark.swc</path-element>
-		<rsl-url>spark_4.14.1.0.swf</rsl-url>
+		<rsl-url>spark_4.15.0.0.swf</rsl-url>
 	</runtime-shared-library-path>
 
       <!-- Sparkskins SWC-->
    	<runtime-shared-library-path>
 		<path-element>libs/sparkskins.swc</path-element>
-		<rsl-url>sparkskins_4.14.1.0.swf</rsl-url>
+		<rsl-url>sparkskins_4.15.0.0.swf</rsl-url>
 	</runtime-shared-library-path>
 
 	  <!-- RPC SWC -->
 	<runtime-shared-library-path>
 		<path-element>libs/rpc.swc</path-element>
-		<rsl-url>rpc_4.14.1.0.swf</rsl-url>
+		<rsl-url>rpc_4.15.0.0.swf</rsl-url>
 	</runtime-shared-library-path>
 
       <!-- Charts SWC -->
 	<runtime-shared-library-path>
 		<path-element>libs/charts.swc</path-element>
-		<rsl-url>charts_4.14.1.0.swf</rsl-url>
+		<rsl-url>charts_4.15.0.0.swf</rsl-url>
 	</runtime-shared-library-path>
 
       <!-- Spark_dmv SWC -->
 	<runtime-shared-library-path>
 		<path-element>libs/spark_dmv.swc</path-element>
-		<rsl-url>spark_dmv_4.14.1.0.swf</rsl-url>
+		<rsl-url>spark_dmv_4.15.0.0.swf</rsl-url>
 	</runtime-shared-library-path>
 
       <!-- OSMF SWC -->
@@ -407,19 +407,19 @@
     -->
     <runtime-shared-library-path>
 		<path-element>libs/osmf.swc</path-element>
-		<rsl-url>osmf_4.14.1.0.swf</rsl-url>
+		<rsl-url>osmf_4.15.0.0.swf</rsl-url>
 	</runtime-shared-library-path>
 
       <!-- MX SWC -->
 	<runtime-shared-library-path>
 		<path-element>libs/mx/mx.swc</path-element>
-		<rsl-url>mx_4.14.1.0.swf</rsl-url>
+		<rsl-url>mx_4.15.0.0.swf</rsl-url>
 	</runtime-shared-library-path>
 
       <!-- Advancedgrids SWC -->
 	<runtime-shared-library-path>
 		<path-element>libs/advancedgrids.swc</path-element>
-		<rsl-url>advancedgrids_4.14.1.0.swf</rsl-url>
+		<rsl-url>advancedgrids_4.15.0.0.swf</rsl-url>
 	</runtime-shared-library-path>
 
 	<!-- static-link-runtime-shared-libraries: statically link the libraries specified by the -runtime-shared-libraries-path option.-->
diff --git a/ide/setFlashPlayerVersion.sh b/ide/setFlashPlayerVersion.sh
index 82aa92c..94de920 100755
--- a/ide/setFlashPlayerVersion.sh
+++ b/ide/setFlashPlayerVersion.sh
@@ -99,20 +99,15 @@
         then 
             FLASH_VERSION="11.1"
         else
-            FLASH_VERSION="17.0"
+            FLASH_VERSION="20.0"
         fi
     fi
     
     if [ ${latest} = "Y" ]
     then
-    	FLASH_VERSION="17.0"
+    	FLASH_VERSION="20.0"
     fi
-    
-    if [ ${useBeta} = "Y" ]
-    then
-    	FLASH_VERSION="17.0b"
-    fi
-    
+
     echo "Setting minimum Flash Player version to ${FLASH_VERSION}"
     echo
     echo
@@ -129,9 +124,10 @@
   && "${FLASH_VERSION}" != "11.7" && "${FLASH_VERSION}" != "11.8" && "${FLASH_VERSION}" != "11.9"
   && "${FLASH_VERSION}" != "12.0" && "${FLASH_VERSION}" != "13.0" && "${FLASH_VERSION}" != "14.0"
   && "${FLASH_VERSION}" != "15.0" && "${FLASH_VERSION}" != "16.0" && "${FLASH_VERSION}" != "17.0"
-  && "${FLASH_VERSION}" != "17.0b" ]]
+  && "${FLASH_VERSION}" != "17.0" && "${FLASH_VERSION}" != "18.0" && "${FLASH_VERSION}" != "19.0"
+  && "${FLASH_VERSION}" != "20.0" ]]
 then
-	echo Unknown version ${FLASH_VERSION} of Flash Player. Versions 10.2, 10.3, 11.0, 11.1, 11.2, 11.3, 11.4, 11.5, 11.6, 11.7, 11.8, 11.9, 12.0, 13.0, 14.0, 15.0, 16.0 and 17.0 are supported.
+	echo Unknown version ${FLASH_VERSION} of Flash Player. Versions 10.2, 10.3, 11.0, 11.1, 11.2, 11.3, 11.4, 11.5, 11.6, 11.7, 11.8, 11.9, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0 and 20.0 are supported.
 	exit 1;
 fi
 
diff --git a/jenkins.xml b/jenkins.xml
index 3e5c253..1a922a4 100644
--- a/jenkins.xml
+++ b/jenkins.xml
@@ -113,6 +113,15 @@
 		<condition property="target17.0">
 			<equals arg1="${playerglobal.version}" arg2="17.0" />
 		</condition>
+		<condition property="target18.0">
+			<equals arg1="${playerglobal.version}" arg2="18.0" />
+		</condition>
+		<condition property="target19.0">
+			<equals arg1="${playerglobal.version}" arg2="19.0" />
+		</condition>
+		<condition property="target20.0">
+			<equals arg1="${playerglobal.version}" arg2="20.0" />
+		</condition>
 	 </target>
 
     <target name="playerglobal10.2-download" if="target10.2">
@@ -241,6 +250,27 @@
             verbose="false"/>
     </target>
     	
+    <target name="playerglobal18.0-download" if="target18.0">
+    	<mkdir dir="${basedir}/lib/player/${playerglobal.version}"/>
+        <get src="http://download.macromedia.com/get/flashplayer/updaters/18/playerglobal18_0.swc" 
+            dest="${basedir}/lib/player/${playerglobal.version}/playerglobal.swc" 
+            verbose="false"/>
+    </target>
+    	
+    <target name="playerglobal19.0-download" if="target19.0">
+    	<mkdir dir="${basedir}/lib/player/${playerglobal.version}"/>
+        <get src="http://download.macromedia.com/get/flashplayer/updaters/19/playerglobal19_0.swc" 
+            dest="${basedir}/lib/player/${playerglobal.version}/playerglobal.swc" 
+            verbose="false"/>
+    </target>
+    	
+    <target name="playerglobal20.0-download" if="target20.0">
+    	<mkdir dir="${basedir}/lib/player/${playerglobal.version}"/>
+        <get src="http://download.macromedia.com/get/flashplayer/updaters/20/playerglobal20_0.swc" 
+            dest="${basedir}/lib/player/${playerglobal.version}/playerglobal.swc" 
+            verbose="false"/>
+    </target>
+    	
     <!-- target name="playerglobal16.0-download" if="target16.0">
     	<mkdir dir="${basedir}/lib/player/${playerglobal.version}"/>
         <get src="http://labsdownload.adobe.com/pub/labs/flashruntimes/flashplayer/flashplayer16_playerglobal.swc" 
diff --git a/LICENSE.base b/licenseParts/LICENSE.base
similarity index 100%
rename from LICENSE.base
rename to licenseParts/LICENSE.base
diff --git a/LICENSE.bin b/licenseParts/LICENSE.bin
similarity index 100%
rename from LICENSE.bin
rename to licenseParts/LICENSE.bin
diff --git a/LICENSE.pb b/licenseParts/LICENSE.pb
similarity index 100%
rename from LICENSE.pb
rename to licenseParts/LICENSE.pb
diff --git a/NOTICE.asc b/licenseParts/NOTICE.asc
similarity index 88%
rename from NOTICE.asc
rename to licenseParts/NOTICE.asc
index de97bec..1c55ec9 100644
--- a/NOTICE.asc
+++ b/licenseParts/NOTICE.asc
@@ -1,5 +1,5 @@
 Apache Flex
-Copyright 2012-2015 The Apache Software Foundation
+Copyright 2012-2016 The Apache Software Foundation
 
 This product includes software developed at
 The Apache Software Foundation (http://www.apache.org/).
diff --git a/NOTICE.base b/licenseParts/NOTICE.base
similarity index 85%
rename from NOTICE.base
rename to licenseParts/NOTICE.base
index 8b91f51..d89968c 100644
--- a/NOTICE.base
+++ b/licenseParts/NOTICE.base
@@ -1,5 +1,5 @@
 Apache Flex
-Copyright 2012-2015 The Apache Software Foundation
+Copyright 2012-2016 The Apache Software Foundation
 
 This product includes software developed at
 The Apache Software Foundation (http://www.apache.org/).
diff --git a/NOTICE.bin b/licenseParts/NOTICE.bin
similarity index 100%
rename from NOTICE.bin
rename to licenseParts/NOTICE.bin
diff --git a/NOTICE.pb b/licenseParts/NOTICE.pb
similarity index 85%
rename from NOTICE.pb
rename to licenseParts/NOTICE.pb
index 5aa2900..0ac5a3a 100644
--- a/NOTICE.pb
+++ b/licenseParts/NOTICE.pb
@@ -1,5 +1,5 @@
 Apache Flex
-Copyright 2012-2015 The Apache Software Foundation
+Copyright 2012-2016 The Apache Software Foundation
 
 This product includes software developed at
 The Apache Software Foundation (http://www.apache.org/).
diff --git a/modules/antTasks/build.xml b/modules/antTasks/build.xml
index 937ea57..f7e65af 100644
--- a/modules/antTasks/build.xml
+++ b/modules/antTasks/build.xml
@@ -45,8 +45,8 @@
     <target name="jar" depends="compile">
     <echo message="Building lib/flexTasks.jar"/>
         <mkdir dir="${module.classes}/META-INF"/>
-        <copy file="${FLEX_HOME}/LICENSE.base" tofile="${module.classes}/META-INF/LICENSE"/>
-        <copy file="${FLEX_HOME}/NOTICE.base" tofile="${module.classes}/META-INF/NOTICE"/>
+        <copy file="${FLEX_HOME}/licenseParts/LICENSE.base" tofile="${module.classes}/META-INF/LICENSE"/>
+        <copy file="${FLEX_HOME}/licenseParts/NOTICE.base" tofile="${module.classes}/META-INF/NOTICE"/>
         <jar destfile="${module.jar}">
             <fileset dir="${module.dir}"
                      includes="flexTasks.tasks" />
diff --git a/modules/asc/build/java/build.xml b/modules/asc/build/java/build.xml
index caa416f..dfc10c2 100644
--- a/modules/asc/build/java/build.xml
+++ b/modules/asc/build/java/build.xml
@@ -106,8 +106,8 @@
 	<target name="jar" depends="classes" >
 		<mkdir dir="${lib.dir}" />
 		<mkdir dir="${basedir}/classes/META-INF"/>
-        <copy file="${root.dir}/../../LICENSE.base" tofile="${basedir}/classes/META-INF/LICENSE"/>
-        <copy file="${root.dir}/../../NOTICE.asc" tofile="${basedir}/classes/META-INF/NOTICE"/>
+        <copy file="${root.dir}/../../licenseParts/LICENSE.base" tofile="${basedir}/classes/META-INF/LICENSE"/>
+        <copy file="${root.dir}/../../licenseParts/NOTICE.asc" tofile="${basedir}/classes/META-INF/NOTICE"/>
 
 		<jar file="${lib.dir}/asc.jar" basedir="${basedir}/classes" includes="macromedia/asc/**/*,macromedia/abc/**/*,adobe/abc/**/*">
 		    <include name="META-INF/LICENSE"/>
diff --git a/modules/asc/src/java/macromedia/asc/embedding/Main.java b/modules/asc/src/java/macromedia/asc/embedding/Main.java
index 344db03..0ea60ee 100644
--- a/modules/asc/src/java/macromedia/asc/embedding/Main.java
+++ b/modules/asc/src/java/macromedia/asc/embedding/Main.java
@@ -387,7 +387,7 @@
 		{
 			System.out.println("ActionScript 3.0 for AVM+");
 			System.out.println("version " + Version.getVersion() + " build "+ Version.getBuild());
-			System.out.println("Copyright 2015 The Apache Software Foundation");
+			System.out.println("Copyright 2016 The Apache Software Foundation");
 			System.out.println("All rights reserved\n");
 			System.out.println("Usage:");
 			System.out.println("  asc {-AS3|-ES|-d|-f|-h|-i|-import <filename>|-in <filename>|-m|-p}* filespec");
diff --git a/modules/asc/src/java/macromedia/asc/embedding/Shell.java b/modules/asc/src/java/macromedia/asc/embedding/Shell.java
index 5decf5c..0f6b73a 100644
--- a/modules/asc/src/java/macromedia/asc/embedding/Shell.java
+++ b/modules/asc/src/java/macromedia/asc/embedding/Shell.java
@@ -587,7 +587,7 @@
 	private static void intro()
 	{
 		System.out.println("Actionscript compiler SHell (ash)");
-		System.out.println("Copyright 2015 The Apache Software Foundation");
+		System.out.println("Copyright 2016 The Apache Software Foundation");
 		System.out.println("");
 	}
 
diff --git a/modules/build.xml b/modules/build.xml
index 73a8351..73117be 100644
--- a/modules/build.xml
+++ b/modules/build.xml
@@ -83,7 +83,6 @@
 		<ant dir="${basedir}/antTasks" target="clean"/>
         <ant dir="${basedir}/asc/build/java" target="clean"/>
         <ant dir="${basedir}/thirdparty/xerces-patch" target="clean"/>
-        <ant dir="${basedir}/flex-messaging-common" target="clean"/>
         <delete includeemptydirs="true" failonerror="false">
             <fileset dir="${FLEX_LIB}">
                 <include name="*" />
@@ -96,7 +95,7 @@
 		Build Java module JARs.
 	-->
 
-	<target name="modules" depends="thirdparty,asc,swfutils,fxgutils,compiler,debugger,antTasks,flex-messaging-common" description="Full build of all JARs"/>
+	<target name="modules" depends="thirdparty,asc,swfutils,fxgutils,compiler,debugger,antTasks" description="Full build of all JARs"/>
 
 	<!--
 	   dev does not do a clean first and the batik and velocity libraries are not rebuilt.
@@ -153,10 +152,6 @@
 		<ant dir="${basedir}/antTasks" target="dev"/>
 	</target>
 
-    <target name="flex-messaging-common" description="build BlazeDS flex-messaging-common.jar">
-        <ant dir="${basedir}/flex-messaging-common"/>
-    </target>
-
     <target name="thirdparty" depends="xerces-patch,batik,velocity" />
     
 	<target name="xerces-patch" description="Build xercesPatch.jar based on xerces 2.9.1" >
diff --git a/modules/compiler/build.xml b/modules/compiler/build.xml
index 5f42f25..dc0c3a9 100644
--- a/modules/compiler/build.xml
+++ b/modules/compiler/build.xml
@@ -164,12 +164,15 @@
 
     <target name="jar" depends="javacc,compile,set-build-num,templates,localization" description="compile and create compiler jars">
         <mkdir dir="${module.classes}/META-INF"/>
-        <copy file="${FLEX_HOME}/LICENSE.base" tofile="${module.classes}/META-INF/LICENSE"/>
-        <copy file="${FLEX_HOME}/NOTICE.base" tofile="${module.classes}/META-INF/NOTICE"/>
+        <copy file="${FLEX_HOME}/licenseParts/LICENSE.base" tofile="${module.classes}/META-INF/LICENSE"/>
+        <copy file="${FLEX_HOME}/licenseParts/NOTICE.base" tofile="${module.classes}/META-INF/NOTICE"/>
 
         <!-- Copy the flex-tool-api jar -->
         <copy file="${lib.in.dir}/flex-tool-api.jar" todir="${lib.dir}"/>
 
+        <!-- Copy the blazeds jar -->
+        <copy file="${lib.in.dir}/flex-messaging-common.jar" todir="${lib.dir}"/>
+
         <echo message="Building lib/mxmlc.jar"/>
         <jar file="${module.jar}" basedir="${module.classes}"
             includes="**/*.properties,flex2/compiler/**/*,flex2/license/**/*,flex2/linker/**/*,flex2/tools/*,flex2/tools/oem/Message.class,flex2/tools/oem/ProgressMeter.class,flex2/tools/oem/Component.class,flex2/tools/oem/Script.class,flash/**/*,flex/**/*"
diff --git a/modules/compiler/src/java/flex2/compiler/as3/binding/Info.java b/modules/compiler/src/java/flex2/compiler/as3/binding/Info.java
index 73ccbdd..f8b4fac 100644
--- a/modules/compiler/src/java/flex2/compiler/as3/binding/Info.java
+++ b/modules/compiler/src/java/flex2/compiler/as3/binding/Info.java
@@ -262,7 +262,16 @@
 
         if (lastIndex < 0)
         {
-            lastIndex = name.lastIndexOf(".");
+            // check for __AS3__.vec.Vector.<T>
+            int dotLessThanIndex = name.lastIndexOf(".<");
+            if (dotLessThanIndex != -1)
+            {
+                lastIndex = name.lastIndexOf(".", dotLessThanIndex - 1);
+            }
+            else
+            {
+                lastIndex = name.lastIndexOf(".");
+            }
         }
 
         if (lastIndex > 0)
diff --git a/modules/compiler/src/java/flex2/compiler/common/MxmlConfiguration.java b/modules/compiler/src/java/flex2/compiler/common/MxmlConfiguration.java
index a95e777..08a9c0c 100644
--- a/modules/compiler/src/java/flex2/compiler/common/MxmlConfiguration.java
+++ b/modules/compiler/src/java/flex2/compiler/common/MxmlConfiguration.java
@@ -46,6 +46,7 @@
     //
     // 'compiler.mxml.compatibility-version' option
     //
+    public static final int VERSION_4_15 = 0x040f0000;
     public static final int VERSION_4_14_1 = 0x040e0001;
 	public static final int VERSION_4_14 = 0x040e0000;
 	public static final int VERSION_4_13 = 0x040d0000;
@@ -62,10 +63,10 @@
     public static final int VERSION_3_0 = 0x03000000;
     public static final int VERSION_2_0_1 = 0x02000001;
     public static final int VERSION_2_0 = 0x02000000;
-    public static final int CURRENT_VERSION = VERSION_4_14_1;
+    public static final int CURRENT_VERSION = VERSION_4_15;
     public static final int EARLIEST_MAJOR_VERSION = 3;
     public static final int LATEST_MAJOR_VERSION = 4;
-    public static final int LATEST_MINOR_VERSION = 14;
+    public static final int LATEST_MINOR_VERSION = 15;
 
 	private int major = LATEST_MAJOR_VERSION;
 	private int minor = LATEST_MINOR_VERSION;
diff --git a/modules/compiler/src/java/flex2/compiler/mxml/InterfaceCompiler.java b/modules/compiler/src/java/flex2/compiler/mxml/InterfaceCompiler.java
index 1bf6536..b1dfddd 100644
--- a/modules/compiler/src/java/flex2/compiler/mxml/InterfaceCompiler.java
+++ b/modules/compiler/src/java/flex2/compiler/mxml/InterfaceCompiler.java
@@ -1796,6 +1796,11 @@
         {
             String className = (String) getLanguageAttributeValue(node, StandardDefs.PROP_TYPE);
             requestType(NameFormatter.toColon(className), node);
+
+            // the items in a Vector may be subclasses of the Vector's type, and
+            // those subclasses may not have been used anywhere else, so we
+            // can't assume that requesting the Vector's type is enough.
+            analyze((Node) node);
         }
 
         public void analyze(DefinitionNode node)
diff --git a/modules/compiler/src/java/flex2/tools/ASDoc_da.properties b/modules/compiler/src/java/flex2/tools/ASDoc_da.properties
index 9c6b87a..aa0fdf7 100644
--- a/modules/compiler/src/java/flex2/tools/ASDoc_da.properties
+++ b/modules/compiler/src/java/flex2/tools/ASDoc_da.properties
@@ -18,6 +18,6 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of ASDoc
-StartMessage=Apache Flex ASDoc \n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex ASDoc \n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 OutputMessage=Dokumentationen er oprettet i ${location}
 ValidationMessage=Der blev fundet tekst med forkert format. Der er flere oplysninger i ${file}.
diff --git a/modules/compiler/src/java/flex2/tools/ASDoc_de.properties b/modules/compiler/src/java/flex2/tools/ASDoc_de.properties
index c398aae..2cf7653 100644
--- a/modules/compiler/src/java/flex2/tools/ASDoc_de.properties
+++ b/modules/compiler/src/java/flex2/tools/ASDoc_de.properties
@@ -18,6 +18,6 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of ASDoc
-StartMessage=Apache Flex ASDoc \n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex ASDoc \n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 OutputMessage=Dokumentation wurde erstellt unter: ${location}
 ValidationMessage=Gefundener nicht wohlgeformter Text. Zu Details siehe ${file}.
diff --git a/modules/compiler/src/java/flex2/tools/ASDoc_en.properties b/modules/compiler/src/java/flex2/tools/ASDoc_en.properties
index b4fd444..fb1cf7f 100644
--- a/modules/compiler/src/java/flex2/tools/ASDoc_en.properties
+++ b/modules/compiler/src/java/flex2/tools/ASDoc_en.properties
@@ -18,6 +18,6 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of ASDoc
-StartMessage=Apache Flex ASDoc \n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex ASDoc \n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 OutputMessage=Documentation was created in ${location}
 ValidationMessage=Encountered not well-formed text. Please see ${file} for details.
diff --git a/modules/compiler/src/java/flex2/tools/ASDoc_es.properties b/modules/compiler/src/java/flex2/tools/ASDoc_es.properties
index f6ce6d1..65fa11a 100644
--- a/modules/compiler/src/java/flex2/tools/ASDoc_es.properties
+++ b/modules/compiler/src/java/flex2/tools/ASDoc_es.properties
@@ -18,6 +18,6 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of ASDoc
-StartMessage=Apache Flex ASDoc \n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex ASDoc \n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 OutputMessage=La documentaci\u00f3n se cre\u00f3 en ${location}
 ValidationMessage=Se ha encontrado texto con formato incorrecto. Consulte ${file} para ver los detalles.
diff --git a/modules/compiler/src/java/flex2/tools/ASDoc_fi.properties b/modules/compiler/src/java/flex2/tools/ASDoc_fi.properties
index 24b8b7e..b94bec0 100644
--- a/modules/compiler/src/java/flex2/tools/ASDoc_fi.properties
+++ b/modules/compiler/src/java/flex2/tools/ASDoc_fi.properties
@@ -18,6 +18,6 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of ASDoc
-StartMessage=Apache Flex ASDoc \n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex ASDoc \n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 OutputMessage=Dokumentaatio luotiin hakemistoon ${location}
 ValidationMessage=Kohdattiin teksti, jota ei ole muodostettu hyvin. Katso lis\u00e4tietoja tiedostosta ${file}.
diff --git a/modules/compiler/src/java/flex2/tools/ASDoc_fr.properties b/modules/compiler/src/java/flex2/tools/ASDoc_fr.properties
index 7929ae4..9933414 100644
--- a/modules/compiler/src/java/flex2/tools/ASDoc_fr.properties
+++ b/modules/compiler/src/java/flex2/tools/ASDoc_fr.properties
@@ -18,6 +18,6 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of ASDoc
-StartMessage=Apache Flex ASDoc \n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex ASDoc \n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 OutputMessage=La documentation a \u00e9t\u00e9 cr\u00e9\u00e9e sous ${location}.
 ValidationMessage=Texte incorrectement mis en forme rencontr\u00e9. Veuillez consulter ${file} pour plus de d\u00e9tails.
diff --git a/modules/compiler/src/java/flex2/tools/ASDoc_it.properties b/modules/compiler/src/java/flex2/tools/ASDoc_it.properties
index fe22e34..a6bb88e 100644
--- a/modules/compiler/src/java/flex2/tools/ASDoc_it.properties
+++ b/modules/compiler/src/java/flex2/tools/ASDoc_it.properties
@@ -18,6 +18,6 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of ASDoc
-StartMessage=Apache Flex ASDoc \n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex ASDoc \n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 OutputMessage=La documentazione \u00e8 stata creata in ${location}
 ValidationMessage=Rilevato testo non ben formato. Vedere ${file} per ulteriori dettagli.
diff --git a/modules/compiler/src/java/flex2/tools/ASDoc_ja.properties b/modules/compiler/src/java/flex2/tools/ASDoc_ja.properties
index bed8ce2..3a778c4 100644
--- a/modules/compiler/src/java/flex2/tools/ASDoc_ja.properties
+++ b/modules/compiler/src/java/flex2/tools/ASDoc_ja.properties
@@ -18,6 +18,6 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of ASDoc
-StartMessage=Apache Flex ASDoc \n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex ASDoc \n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 OutputMessage=\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306f ${location} \u306b\u4f5c\u6210\u3055\u308c\u307e\u3057\u305f
 ValidationMessage=\u9069\u683c\u306a\u5f62\u5f0f\u3067\u306a\u3044\u30c6\u30ad\u30b9\u30c8\u304c\u691c\u51fa\u3055\u308c\u307e\u3057\u305f\u3002\u8a73\u7d30\u306b\u3064\u3044\u3066\u306f\u3001${file} \u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002
diff --git a/modules/compiler/src/java/flex2/tools/ASDoc_ko.properties b/modules/compiler/src/java/flex2/tools/ASDoc_ko.properties
index c84c968..1f7dfab 100644
--- a/modules/compiler/src/java/flex2/tools/ASDoc_ko.properties
+++ b/modules/compiler/src/java/flex2/tools/ASDoc_ko.properties
@@ -18,6 +18,6 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of ASDoc
-StartMessage=Apache Flex ASDoc \n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex ASDoc \n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 OutputMessage=${location}\uc5d0\uc11c \uc791\uc131\ub41c \ubb38\uc11c
 ValidationMessage=\uc62c\ubc14\ub974\uc9c0 \uc54a\uc740 \ud615\uc2dd\uc758 \ud14d\uc2a4\ud2b8\uc785\ub2c8\ub2e4. \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 ${file}\uc744(\ub97c) \ucc38\uc870\ud558\uc2ed\uc2dc\uc624.
diff --git a/modules/compiler/src/java/flex2/tools/ASDoc_nb.properties b/modules/compiler/src/java/flex2/tools/ASDoc_nb.properties
index ddd9ad2..e149dd2 100644
--- a/modules/compiler/src/java/flex2/tools/ASDoc_nb.properties
+++ b/modules/compiler/src/java/flex2/tools/ASDoc_nb.properties
@@ -18,6 +18,6 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of ASDoc
-StartMessage=Apache Flex ASDoc \n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex ASDoc \n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 OutputMessage=Dokumentasjon ble opprettet i ${location}
 ValidationMessage=Fant tekst som ikke er godt utformet. Se i ${file} hvis du vil vite mer.
diff --git a/modules/compiler/src/java/flex2/tools/ASDoc_nl.properties b/modules/compiler/src/java/flex2/tools/ASDoc_nl.properties
index 05b593d..023c4e3 100644
--- a/modules/compiler/src/java/flex2/tools/ASDoc_nl.properties
+++ b/modules/compiler/src/java/flex2/tools/ASDoc_nl.properties
@@ -18,6 +18,6 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of ASDoc
-StartMessage=Apache Flex ASDoc \n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex ASDoc \n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 OutputMessage=Documentatie is gemaakt in ${location}
 ValidationMessage=Onjuist opgemaakte tekst aangetroffen. Zie ${file} voor details.
diff --git a/modules/compiler/src/java/flex2/tools/ASDoc_pt.properties b/modules/compiler/src/java/flex2/tools/ASDoc_pt.properties
index 7eac512..da6e452 100644
--- a/modules/compiler/src/java/flex2/tools/ASDoc_pt.properties
+++ b/modules/compiler/src/java/flex2/tools/ASDoc_pt.properties
@@ -18,6 +18,6 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of ASDoc
-StartMessage=Apache Flex ASDoc \n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex ASDoc \n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 OutputMessage=A documenta\u00e7\u00e3o foi criada em ${location}
 ValidationMessage=Foi encontrado um texto que n\u00e3o est\u00e1 bem-formado. Para obter detalhes, consulte ${file}.
diff --git a/modules/compiler/src/java/flex2/tools/ASDoc_ru.properties b/modules/compiler/src/java/flex2/tools/ASDoc_ru.properties
index b04172f..3088bdb 100644
--- a/modules/compiler/src/java/flex2/tools/ASDoc_ru.properties
+++ b/modules/compiler/src/java/flex2/tools/ASDoc_ru.properties
@@ -18,6 +18,6 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of ASDoc
-StartMessage=Apache Flex ASDoc \n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex ASDoc \n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 OutputMessage=\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u0432 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438 ${location}
 ValidationMessage=\u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442. \u0421\u043c. \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0432 \u0444\u0430\u0439\u043b\u0435 ${file}.
diff --git a/modules/compiler/src/java/flex2/tools/ASDoc_sv.properties b/modules/compiler/src/java/flex2/tools/ASDoc_sv.properties
index 96dd202..3482ce1 100644
--- a/modules/compiler/src/java/flex2/tools/ASDoc_sv.properties
+++ b/modules/compiler/src/java/flex2/tools/ASDoc_sv.properties
@@ -18,6 +18,6 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of ASDoc
-StartMessage=Apache Flex ASDoc \n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex ASDoc \n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 OutputMessage=Dokumentationen har skapats i ${location}
 ValidationMessage=Felaktigt formaterad text uppt\u00e4cktes. Mer information finns i ${file}.
diff --git a/modules/compiler/src/java/flex2/tools/ASDoc_zh_CN.properties b/modules/compiler/src/java/flex2/tools/ASDoc_zh_CN.properties
index 4fadae6..fde9b8a 100644
--- a/modules/compiler/src/java/flex2/tools/ASDoc_zh_CN.properties
+++ b/modules/compiler/src/java/flex2/tools/ASDoc_zh_CN.properties
@@ -18,6 +18,6 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of ASDoc
-StartMessage=Apache Flex ASDoc \n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex ASDoc \n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 OutputMessage=\u6587\u6863\u521b\u5efa\u5728\u201c${location}\u201d\u4e2d
 ValidationMessage=\u9047\u5230\u683c\u5f0f\u9519\u8bef\u7684\u6587\u672c\u3002\u6709\u5173\u8be6\u7ec6\u4fe1\u606f\uff0c\u8bf7\u53c2\u9605 ${file}\u3002
diff --git a/modules/compiler/src/java/flex2/tools/ASDoc_zh_TW.properties b/modules/compiler/src/java/flex2/tools/ASDoc_zh_TW.properties
index 781a89e..9ff24b4 100644
--- a/modules/compiler/src/java/flex2/tools/ASDoc_zh_TW.properties
+++ b/modules/compiler/src/java/flex2/tools/ASDoc_zh_TW.properties
@@ -18,6 +18,6 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of ASDoc
-StartMessage=Apache Flex ASDoc \n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex ASDoc \n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 OutputMessage=\u6587\u4ef6\u5efa\u7acb\u65bc\u201c${location}\u201d
 ValidationMessage=\u9047\u5230\u683c\u5f0f\u4e0d\u6b63\u78ba\u7684\u6587\u5b57\u3002\u8acb\u53c3\u95b1 ${file} \u4ee5\u7372\u53d6\u8a73\u7d30\u8cc7\u8a0a\u3002
diff --git a/modules/compiler/src/java/flex2/tools/Compc_da.properties b/modules/compiler/src/java/flex2/tools/Compc_da.properties
index d07ca06..592ca1c 100644
--- a/modules/compiler/src/java/flex2/tools/Compc_da.properties
+++ b/modules/compiler/src/java/flex2/tools/Compc_da.properties
@@ -18,5 +18,5 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of Compc
-StartMessage=Apache Flex compc (Component Compiler)\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex compc (Component Compiler)\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 NoUpdateMessage=${name} er opdateret og skal ikke bygges igen.
diff --git a/modules/compiler/src/java/flex2/tools/Compc_de.properties b/modules/compiler/src/java/flex2/tools/Compc_de.properties
index 795e719..426546f 100644
--- a/modules/compiler/src/java/flex2/tools/Compc_de.properties
+++ b/modules/compiler/src/java/flex2/tools/Compc_de.properties
@@ -18,5 +18,5 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of Compc
-StartMessage=Apache Flex compc (Component Compiler)\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex compc (Component Compiler)\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 NoUpdateMessage=${name} ist auf dem aktuellen Stand und muss nicht neu erstellt werden.
diff --git a/modules/compiler/src/java/flex2/tools/Compc_en.properties b/modules/compiler/src/java/flex2/tools/Compc_en.properties
index 50f31ce..db2111a 100644
--- a/modules/compiler/src/java/flex2/tools/Compc_en.properties
+++ b/modules/compiler/src/java/flex2/tools/Compc_en.properties
@@ -18,5 +18,5 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of Compc
-StartMessage=Apache Flex compc (Component Compiler)\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex compc (Component Compiler)\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 NoUpdateMessage=${name} is up-to-date and does not have to be rebuilt.
diff --git a/modules/compiler/src/java/flex2/tools/Compc_es.properties b/modules/compiler/src/java/flex2/tools/Compc_es.properties
index a27c578..b2d6e99 100644
--- a/modules/compiler/src/java/flex2/tools/Compc_es.properties
+++ b/modules/compiler/src/java/flex2/tools/Compc_es.properties
@@ -18,5 +18,5 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of Compc
-StartMessage=Apache Flex compc (Component Compiler)\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex compc (Component Compiler)\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 NoUpdateMessage=${name} est\u00e1 actualizado y no necesita ser reconstruido.
diff --git a/modules/compiler/src/java/flex2/tools/Compc_fi.properties b/modules/compiler/src/java/flex2/tools/Compc_fi.properties
index 0b817af..5c1864e 100644
--- a/modules/compiler/src/java/flex2/tools/Compc_fi.properties
+++ b/modules/compiler/src/java/flex2/tools/Compc_fi.properties
@@ -18,5 +18,5 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of Compc
-StartMessage=Apache Flex compc (Component Compiler)\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex compc (Component Compiler)\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 NoUpdateMessage=${name} on ajan tasalla, eik\u00e4 sit\u00e4 tarvitse muodostaa uudelleen.
diff --git a/modules/compiler/src/java/flex2/tools/Compc_fr.properties b/modules/compiler/src/java/flex2/tools/Compc_fr.properties
index 79c69eb..ae55317 100644
--- a/modules/compiler/src/java/flex2/tools/Compc_fr.properties
+++ b/modules/compiler/src/java/flex2/tools/Compc_fr.properties
@@ -18,5 +18,5 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of Compc
-StartMessage=Apache Flex compc (Component Compiler)\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex compc (Component Compiler)\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 NoUpdateMessage=${name} est \u00e0 jour et n'a pas besoin d'\u00eatre r\u00e9g\u00e9n\u00e9r\u00e9.
diff --git a/modules/compiler/src/java/flex2/tools/Compc_it.properties b/modules/compiler/src/java/flex2/tools/Compc_it.properties
index 8dda2b8..6218a1c 100644
--- a/modules/compiler/src/java/flex2/tools/Compc_it.properties
+++ b/modules/compiler/src/java/flex2/tools/Compc_it.properties
@@ -18,5 +18,5 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of Compc
-StartMessage=Apache Flex compc (Component Compiler)\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex compc (Component Compiler)\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 NoUpdateMessage=${name} \u00e8 aggiornato e non \u00e8 necessario rigenerarlo.
diff --git a/modules/compiler/src/java/flex2/tools/Compc_ja.properties b/modules/compiler/src/java/flex2/tools/Compc_ja.properties
index 520745c..9d541c1 100644
--- a/modules/compiler/src/java/flex2/tools/Compc_ja.properties
+++ b/modules/compiler/src/java/flex2/tools/Compc_ja.properties
@@ -18,5 +18,5 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of Compc
-StartMessage=Apache Flex compc (Component Compiler)\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex compc (Component Compiler)\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 NoUpdateMessage=${name} \u306f\u6700\u65b0\u3067\u3059\u3002\u30ea\u30d3\u30eb\u30c9\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3002
diff --git a/modules/compiler/src/java/flex2/tools/Compc_ko.properties b/modules/compiler/src/java/flex2/tools/Compc_ko.properties
index 7f61ef8..d4a5a8a 100644
--- a/modules/compiler/src/java/flex2/tools/Compc_ko.properties
+++ b/modules/compiler/src/java/flex2/tools/Compc_ko.properties
@@ -18,5 +18,5 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of Compc
-StartMessage=Apache Flex compc (Component Compiler)\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex compc (Component Compiler)\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 NoUpdateMessage=${name}\uc740(\ub294) \ucd5c\uc2e0 \ubc84\uc804\uc774\ubbc0\ub85c \ub2e4\uc2dc \ube4c\ub4dc\ud560 \ud544\uc694\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.
diff --git a/modules/compiler/src/java/flex2/tools/Compc_nb.properties b/modules/compiler/src/java/flex2/tools/Compc_nb.properties
index cea7b2e..3f99439 100644
--- a/modules/compiler/src/java/flex2/tools/Compc_nb.properties
+++ b/modules/compiler/src/java/flex2/tools/Compc_nb.properties
@@ -18,5 +18,5 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of Compc
-StartMessage=Apache Flex compc (Component Compiler)\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex compc (Component Compiler)\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 NoUpdateMessage=${name} er oppdatert og trenger ikke \u00e5 bygges p\u00e5 nytt.
diff --git a/modules/compiler/src/java/flex2/tools/Compc_nl.properties b/modules/compiler/src/java/flex2/tools/Compc_nl.properties
index 93c856a..b818bca 100644
--- a/modules/compiler/src/java/flex2/tools/Compc_nl.properties
+++ b/modules/compiler/src/java/flex2/tools/Compc_nl.properties
@@ -18,5 +18,5 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of Compc
-StartMessage=Apache Flex compc (Component Compiler)\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex compc (Component Compiler)\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 NoUpdateMessage=${name} is up-to-date en hoeft niet opnieuw te worden gemaakt.
diff --git a/modules/compiler/src/java/flex2/tools/Compc_pt.properties b/modules/compiler/src/java/flex2/tools/Compc_pt.properties
index 38e3321..211c748 100644
--- a/modules/compiler/src/java/flex2/tools/Compc_pt.properties
+++ b/modules/compiler/src/java/flex2/tools/Compc_pt.properties
@@ -18,5 +18,5 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of Compc
-StartMessage=Apache Flex compc (Component Compiler)\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex compc (Component Compiler)\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 NoUpdateMessage=${name} est\u00e1 atualizado e n\u00e3o \u00e9 preciso recri\u00e1-lo.
diff --git a/modules/compiler/src/java/flex2/tools/Compc_ru.properties b/modules/compiler/src/java/flex2/tools/Compc_ru.properties
index baed42d..c9b7873 100644
--- a/modules/compiler/src/java/flex2/tools/Compc_ru.properties
+++ b/modules/compiler/src/java/flex2/tools/Compc_ru.properties
@@ -18,5 +18,5 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of Compc
-StartMessage=Apache Flex compc (Component Compiler)\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex compc (Component Compiler)\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 NoUpdateMessage=${name} \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c \u0438 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438.
diff --git a/modules/compiler/src/java/flex2/tools/Compc_sv.properties b/modules/compiler/src/java/flex2/tools/Compc_sv.properties
index 563c358..eed5e34 100644
--- a/modules/compiler/src/java/flex2/tools/Compc_sv.properties
+++ b/modules/compiler/src/java/flex2/tools/Compc_sv.properties
@@ -18,5 +18,5 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of Compc
-StartMessage=Apache Flex compc (Component Compiler)\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex compc (Component Compiler)\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 NoUpdateMessage=${name} \u00e4r uppdaterat och beh\u00f6ver inte kompileras om.
diff --git a/modules/compiler/src/java/flex2/tools/Compc_zh_CN.properties b/modules/compiler/src/java/flex2/tools/Compc_zh_CN.properties
index 05af0e3..9371f52 100644
--- a/modules/compiler/src/java/flex2/tools/Compc_zh_CN.properties
+++ b/modules/compiler/src/java/flex2/tools/Compc_zh_CN.properties
@@ -18,5 +18,5 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of Compc
-StartMessage=Apache Flex compc (Component Compiler)\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex compc (Component Compiler)\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 NoUpdateMessage=${name} \u662f\u6700\u65b0\u7684\uff0c\u4e0d\u5fc5\u91cd\u5efa\u3002
diff --git a/modules/compiler/src/java/flex2/tools/Compc_zh_TW.properties b/modules/compiler/src/java/flex2/tools/Compc_zh_TW.properties
index 0fb01f8..4332ebc 100644
--- a/modules/compiler/src/java/flex2/tools/Compc_zh_TW.properties
+++ b/modules/compiler/src/java/flex2/tools/Compc_zh_TW.properties
@@ -18,5 +18,5 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of Compc
-StartMessage=Apache Flex compc (Component Compiler)\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex compc (Component Compiler)\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 NoUpdateMessage=${name} \u662f\u6700\u65b0\u7684\uff0c\u4e0d\u9700\u8981\u91cd\u5efa\u3002
diff --git a/modules/compiler/src/java/flex2/tools/DigestTool_da.properties b/modules/compiler/src/java/flex2/tools/DigestTool_da.properties
index 8d1dc4f..ace91ff 100644
--- a/modules/compiler/src/java/flex2/tools/DigestTool_da.properties
+++ b/modules/compiler/src/java/flex2/tools/DigestTool_da.properties
@@ -18,5 +18,5 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of DigestTool
-StartMessage=Apache Flex digest \n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex digest \n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 OutputMessage=Digestoplysninger er opdateret i ${location}
diff --git a/modules/compiler/src/java/flex2/tools/DigestTool_de.properties b/modules/compiler/src/java/flex2/tools/DigestTool_de.properties
index 20a9fbc..84fb743 100644
--- a/modules/compiler/src/java/flex2/tools/DigestTool_de.properties
+++ b/modules/compiler/src/java/flex2/tools/DigestTool_de.properties
@@ -18,5 +18,5 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of DigestTool
-StartMessage=Apache Flex digest \n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex digest \n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 OutputMessage=Digest-Informationen wurden aktualisiert unter ${location}.
diff --git a/modules/compiler/src/java/flex2/tools/DigestTool_en.properties b/modules/compiler/src/java/flex2/tools/DigestTool_en.properties
index 842db70..4eebd5c 100644
--- a/modules/compiler/src/java/flex2/tools/DigestTool_en.properties
+++ b/modules/compiler/src/java/flex2/tools/DigestTool_en.properties
@@ -18,5 +18,5 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of DigestTool
-StartMessage=Apache Flex digest \n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex digest \n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 OutputMessage=Digest information was updated in ${location}
diff --git a/modules/compiler/src/java/flex2/tools/DigestTool_es.properties b/modules/compiler/src/java/flex2/tools/DigestTool_es.properties
index e934de3..b763f44 100644
--- a/modules/compiler/src/java/flex2/tools/DigestTool_es.properties
+++ b/modules/compiler/src/java/flex2/tools/DigestTool_es.properties
@@ -18,5 +18,5 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of DigestTool
-StartMessage=Apache Flex digest \n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex digest \n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 OutputMessage=La informaci\u00f3n de compendio se actualiz\u00f3 en ${location}
diff --git a/modules/compiler/src/java/flex2/tools/DigestTool_fi.properties b/modules/compiler/src/java/flex2/tools/DigestTool_fi.properties
index 6e080ee..177c20d 100644
--- a/modules/compiler/src/java/flex2/tools/DigestTool_fi.properties
+++ b/modules/compiler/src/java/flex2/tools/DigestTool_fi.properties
@@ -18,5 +18,5 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of DigestTool
-StartMessage=Apache Flex digest \n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex digest \n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 OutputMessage=Yhteenvetotiedot p\u00e4ivitettiin hakemistoon ${location}
diff --git a/modules/compiler/src/java/flex2/tools/DigestTool_fr.properties b/modules/compiler/src/java/flex2/tools/DigestTool_fr.properties
index 8c5610d..2fca3a6 100644
--- a/modules/compiler/src/java/flex2/tools/DigestTool_fr.properties
+++ b/modules/compiler/src/java/flex2/tools/DigestTool_fr.properties
@@ -18,5 +18,5 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of DigestTool
-StartMessage=Apache Flex digest \n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex digest \n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 OutputMessage=Les informations de pr\u00e9traitement ont \u00e9t\u00e9 mises \u00e0 jour dans ${location}.
diff --git a/modules/compiler/src/java/flex2/tools/DigestTool_it.properties b/modules/compiler/src/java/flex2/tools/DigestTool_it.properties
index 46a4e15..3967ec0 100644
--- a/modules/compiler/src/java/flex2/tools/DigestTool_it.properties
+++ b/modules/compiler/src/java/flex2/tools/DigestTool_it.properties
@@ -18,5 +18,5 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of DigestTool
-StartMessage=Apache Flex digest \n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex digest \n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 OutputMessage=Le informazioni del digest sono state aggiornate in ${location}
diff --git a/modules/compiler/src/java/flex2/tools/DigestTool_ja.properties b/modules/compiler/src/java/flex2/tools/DigestTool_ja.properties
index d0d0f02..14ecedf 100644
--- a/modules/compiler/src/java/flex2/tools/DigestTool_ja.properties
+++ b/modules/compiler/src/java/flex2/tools/DigestTool_ja.properties
@@ -18,5 +18,5 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of DigestTool
-StartMessage=Apache Flex digest \n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex digest \n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 OutputMessage=\u30c0\u30a4\u30b8\u30a7\u30b9\u30c8\u60c5\u5831\u306f ${location} \u3067\u66f4\u65b0\u3055\u308c\u307e\u3057\u305f
diff --git a/modules/compiler/src/java/flex2/tools/DigestTool_ko.properties b/modules/compiler/src/java/flex2/tools/DigestTool_ko.properties
index da1a367..68087d6 100644
--- a/modules/compiler/src/java/flex2/tools/DigestTool_ko.properties
+++ b/modules/compiler/src/java/flex2/tools/DigestTool_ko.properties
@@ -18,5 +18,5 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of DigestTool
-StartMessage=Apache Flex digest \n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex digest \n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 OutputMessage=${location}\uc5d0\uc11c \ub2e4\uc774\uc81c\uc2a4\ud2b8 \uc815\ubcf4\uac00 \uc5c5\ub370\uc774\ud2b8\ub428
diff --git a/modules/compiler/src/java/flex2/tools/DigestTool_nb.properties b/modules/compiler/src/java/flex2/tools/DigestTool_nb.properties
index e9a97f3..835eebf 100644
--- a/modules/compiler/src/java/flex2/tools/DigestTool_nb.properties
+++ b/modules/compiler/src/java/flex2/tools/DigestTool_nb.properties
@@ -18,5 +18,5 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of DigestTool
-StartMessage=Apache Flex digest \n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex digest \n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 OutputMessage=Sammendragsinformasjon ble oppdatert i ${location}
diff --git a/modules/compiler/src/java/flex2/tools/DigestTool_nl.properties b/modules/compiler/src/java/flex2/tools/DigestTool_nl.properties
index 9810e97..63c6412 100644
--- a/modules/compiler/src/java/flex2/tools/DigestTool_nl.properties
+++ b/modules/compiler/src/java/flex2/tools/DigestTool_nl.properties
@@ -18,5 +18,5 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of DigestTool
-StartMessage=Apache Flex digest \n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex digest \n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 OutputMessage=Digestinformatie is bijgewerkt in ${location}
diff --git a/modules/compiler/src/java/flex2/tools/DigestTool_pt.properties b/modules/compiler/src/java/flex2/tools/DigestTool_pt.properties
index ef551f6..75a893b 100644
--- a/modules/compiler/src/java/flex2/tools/DigestTool_pt.properties
+++ b/modules/compiler/src/java/flex2/tools/DigestTool_pt.properties
@@ -18,5 +18,5 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of DigestTool
-StartMessage=Apache Flex digest \n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex digest \n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 OutputMessage=As informa\u00e7\u00f5es de compila\u00e7\u00e3o foram atualizadas em ${location}
diff --git a/modules/compiler/src/java/flex2/tools/DigestTool_ru.properties b/modules/compiler/src/java/flex2/tools/DigestTool_ru.properties
index 7f5b109..97886e0 100644
--- a/modules/compiler/src/java/flex2/tools/DigestTool_ru.properties
+++ b/modules/compiler/src/java/flex2/tools/DigestTool_ru.properties
@@ -18,5 +18,5 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of DigestTool
-StartMessage=Apache Flex digest \n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex digest \n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 OutputMessage=\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0434\u0430\u0439\u0434\u0436\u0435\u0441\u0442\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0430 \u0432 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438 ${location}
diff --git a/modules/compiler/src/java/flex2/tools/DigestTool_sv.properties b/modules/compiler/src/java/flex2/tools/DigestTool_sv.properties
index fcb2cf7..bf083fb 100644
--- a/modules/compiler/src/java/flex2/tools/DigestTool_sv.properties
+++ b/modules/compiler/src/java/flex2/tools/DigestTool_sv.properties
@@ -18,5 +18,5 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of DigestTool
-StartMessage=Apache Flex digest \n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex digest \n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 OutputMessage=Sammanfattningsinformationen uppdaterades i ${location}
diff --git a/modules/compiler/src/java/flex2/tools/DigestTool_zh_CN.properties b/modules/compiler/src/java/flex2/tools/DigestTool_zh_CN.properties
index 13a01af..243ab5f 100644
--- a/modules/compiler/src/java/flex2/tools/DigestTool_zh_CN.properties
+++ b/modules/compiler/src/java/flex2/tools/DigestTool_zh_CN.properties
@@ -18,5 +18,5 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of DigestTool
-StartMessage=Apache Flex digest \n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex digest \n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 OutputMessage=\u5728\u201c${location}\u201d\u4e2d\u66f4\u65b0\u4e86\u6458\u8981\u4fe1\u606f
diff --git a/modules/compiler/src/java/flex2/tools/DigestTool_zh_TW.properties b/modules/compiler/src/java/flex2/tools/DigestTool_zh_TW.properties
index 1badbac..c3c4738 100644
--- a/modules/compiler/src/java/flex2/tools/DigestTool_zh_TW.properties
+++ b/modules/compiler/src/java/flex2/tools/DigestTool_zh_TW.properties
@@ -18,5 +18,5 @@
 ################################################################################
 
 # localization strings for messages defined as inner classes of DigestTool
-StartMessage=Apache Flex digest \n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex digest \n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 OutputMessage=\u6458\u8981\u8cc7\u8a0a\u5df2\u5728\u201c${location}\u201d\u4e2d\u66f4\u65b0
diff --git a/modules/compiler/src/java/flex2/tools/Fcsh_da.properties b/modules/compiler/src/java/flex2/tools/Fcsh_da.properties
index a68a7f0..1ede1d2 100644
--- a/modules/compiler/src/java/flex2/tools/Fcsh_da.properties
+++ b/modules/compiler/src/java/flex2/tools/Fcsh_da.properties
@@ -22,5 +22,5 @@
 AssignTargetID=fcsh: ${counter} er tildelt som kompileringsprogrammets m\u00e5l-id
 DetectConfigurationChange=Der er fundet konfigurations\u00e6ndringer. Kompiler igen...
 NoChange=Intet er \u00e6ndret siden seneste kompilering. Ignorer...
-ShellMessage=Apache Flex Compiler SHell (${program})\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+ShellMessage=Apache Flex Compiler SHell (${program})\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 CommandList=Liste over fcsh-kommandoer:\nmxmlc arg1 arg2 ...      fuld kompilering og optimering, der returnerer et m\u00e5l-id\ncompc arg1 arg2 ...      fuld SWC-kompilering\ncompile id               trinvis kompilering\nclear [id]               ryd m\u00e5l\ninfo [id]                vis oplysninger om kompileringsm\u00e5l\nquit                     afslut
diff --git a/modules/compiler/src/java/flex2/tools/Fcsh_de.properties b/modules/compiler/src/java/flex2/tools/Fcsh_de.properties
index a4aa93d..0a1a8c2 100644
--- a/modules/compiler/src/java/flex2/tools/Fcsh_de.properties
+++ b/modules/compiler/src/java/flex2/tools/Fcsh_de.properties
@@ -22,5 +22,5 @@
 AssignTargetID=fcsh: ${counter} als Kompilierungsziel-ID zugewiesen
 DetectConfigurationChange=Konfigurations\u00e4nderungen wurden gefunden. Neukompilierung wird ausgef\u00fchrt...
 NoChange=Keine \u00c4nderungen seit der letzten Kompilierung. \u00dcberspringen...
-ShellMessage=Apache Flex Compiler SHell (${program})\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+ShellMessage=Apache Flex Compiler SHell (${program})\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 CommandList=Liste der fcsh-Befehle:\nmxmlc arg1 arg2 ...      vollst\u00e4ndige Kompilierung und Optimierung; R\u00fcckgabe einer Ziel-ID\ncompc arg1 arg2 ...      vollst\u00e4ndige SWC-Kompilierung\ncompile id               inkrementelle Kompilierung\nclear [id]               Ziel(e) l\u00f6schen\ninfo [id]                Anzeige von Informationen zum Kompilierungsziel\nquit                     Beenden
diff --git a/modules/compiler/src/java/flex2/tools/Fcsh_en.properties b/modules/compiler/src/java/flex2/tools/Fcsh_en.properties
index 8b08330..2efe5da 100644
--- a/modules/compiler/src/java/flex2/tools/Fcsh_en.properties
+++ b/modules/compiler/src/java/flex2/tools/Fcsh_en.properties
@@ -22,7 +22,7 @@
 AssignTargetID=fcsh: Assigned ${counter} as the compile target id
 DetectConfigurationChange=Detected configuration changes. Recompile...
 NoChange=Nothing has changed since the last compile. Skip...
-ShellMessage=Apache Flex Compiler SHell (${program})\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+ShellMessage=Apache Flex Compiler SHell (${program})\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 CommandList=List of fcsh commands:\n\
 mxmlc arg1 arg2 ...      full compilation and optimization; return a target id\n\
 compc arg1 arg2 ...      full SWC compilation\n\
diff --git a/modules/compiler/src/java/flex2/tools/Fcsh_es.properties b/modules/compiler/src/java/flex2/tools/Fcsh_es.properties
index 22f840f..d6f952d 100644
--- a/modules/compiler/src/java/flex2/tools/Fcsh_es.properties
+++ b/modules/compiler/src/java/flex2/tools/Fcsh_es.properties
@@ -22,5 +22,5 @@
 AssignTargetID=fcsh: Se asign\u00f3 ${counter} como el Id. de destino de compilaci\u00f3n
 DetectConfigurationChange=Se han detectado cambios de configuraci\u00f3n. Volver a compilar...
 NoChange=No se ha realizado ning\u00fan cambio desde la \u00faltima compilaci\u00f3n. Omitir...
-ShellMessage=Apache Flex Compiler SHell (${program})\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+ShellMessage=Apache Flex Compiler SHell (${program})\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 CommandList=Lista de comandos fcsh:\nmxmlc arg1 arg2 ...      full compilation and optimization; return a target id\ncompc arg1 arg2 ...      full SWC compilation\ncompile id               incremental compilation\nclear [id]               clear target(s)\ninfo [id]                display compile target info\nquit                     quit
diff --git a/modules/compiler/src/java/flex2/tools/Fcsh_fi.properties b/modules/compiler/src/java/flex2/tools/Fcsh_fi.properties
index 39e69c3..6e0e4ba 100644
--- a/modules/compiler/src/java/flex2/tools/Fcsh_fi.properties
+++ b/modules/compiler/src/java/flex2/tools/Fcsh_fi.properties
@@ -22,5 +22,5 @@
 AssignTargetID=fcsh:Kokoamisen kohdetunnukseksi m\u00e4\u00e4ritettiin ${counter}
 DetectConfigurationChange=M\u00e4\u00e4ritysmuutoksia havaittiin. Kokoa uudelleen...
 NoChange=Mit\u00e4\u00e4n ei ole muuttunut edellisen kokoamisen j\u00e4lkeen. Ohita...
-ShellMessage=Apache Flex Compiler SHell (${program})\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+ShellMessage=Apache Flex Compiler SHell (${program})\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 CommandList=fcsh-komentojen luettelo:\nmxmlc arg1 arg2 ...      t\u00e4ysi kokoaminen ja optimointi, palauta kohdetunnus\ncompc arg1 arg2 ...      t\u00e4ysi SWC-kokoaminen\ncompile id               asteittainen kokoaminen\nclear [id]               tyhjenn\u00e4 kohde/kohteet\ninfo [id]                n\u00e4yt\u00e4 kokoamisen kohdetiedot\nquit                     lopeta
diff --git a/modules/compiler/src/java/flex2/tools/Fcsh_fr.properties b/modules/compiler/src/java/flex2/tools/Fcsh_fr.properties
index 39a13e1..54db248 100644
--- a/modules/compiler/src/java/flex2/tools/Fcsh_fr.properties
+++ b/modules/compiler/src/java/flex2/tools/Fcsh_fr.properties
@@ -22,5 +22,5 @@
 AssignTargetID=fcsh : ${counter} attribu\u00e9 en tant qu'ID cible de compilation
 DetectConfigurationChange=Changements de configuration d\u00e9tect\u00e9s. Recompilation en cours...
 NoChange=Rien n'a chang\u00e9 depuis la derni\u00e8re compilation. Op\u00e9ration ignor\u00e9e...
-ShellMessage=Apache Flex Compiler SHell (${program})\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+ShellMessage=Apache Flex Compiler SHell (${program})\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 CommandList=Liste de commandes fcsh :\nmxmlc arg1 arg2 ...      compilation et optimisation compl\u00e8tes ; renvoi d'un ID cible\ncompc arg1 arg2 ...      compilation SWC compl\u00e8te\nID de compilation               compilation incr\u00e9mentielle\nclear [id]               suppression de cible(s)\ninfo [id]                affichage des infos cibles de compilation\nquit                     sortie
diff --git a/modules/compiler/src/java/flex2/tools/Fcsh_it.properties b/modules/compiler/src/java/flex2/tools/Fcsh_it.properties
index 3375e71..5d4d3ba 100644
--- a/modules/compiler/src/java/flex2/tools/Fcsh_it.properties
+++ b/modules/compiler/src/java/flex2/tools/Fcsh_it.properties
@@ -22,5 +22,5 @@
 AssignTargetID=fcsh: assegnato ${counter} come ID della destinazione di compilazione
 DetectConfigurationChange=Rilevate modifiche della configurazione. Ricompilazione in corso...
 NoChange=Dopo l'ultima compilazione non \u00e8 stata apportata alcuna modifica. L'operazione verr\u00e0 ignorata.
-ShellMessage=Apache Flex Compiler SHell (${program})\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+ShellMessage=Apache Flex Compiler SHell (${program})\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 CommandList=Elenco dei comandi fcsh:\nmxmlc arg1 arg2 ...      compilazione completa e ottimizzazione; restituzione di un ID di destinazione\ncompc arg1 arg2 ...      compilazione SWC completa\nID di compilazione               compilazione incrementale\ncancella [ID]               cancella destinazioni\ninformazioni [ID]                visualizza informazioni sulla destinazione della compilazione\nesci                     esci
diff --git a/modules/compiler/src/java/flex2/tools/Fcsh_ja.properties b/modules/compiler/src/java/flex2/tools/Fcsh_ja.properties
index 8a6241c..cd32933 100644
--- a/modules/compiler/src/java/flex2/tools/Fcsh_ja.properties
+++ b/modules/compiler/src/java/flex2/tools/Fcsh_ja.properties
@@ -22,5 +22,5 @@
 AssignTargetID=fcsh : \u30b3\u30f3\u30d1\u30a4\u30eb\u30bf\u30fc\u30b2\u30c3\u30c8 ID \u3068\u3057\u3066 ${counter} \u3092\u5272\u308a\u5f53\u3066\u307e\u3057\u305f
 DetectConfigurationChange=\u8a2d\u5b9a\u306e\u5909\u66f4\u3092\u691c\u51fa\u3057\u307e\u3057\u305f\u3002\u518d\u30b3\u30f3\u30d1\u30a4\u30eb\u3057\u307e\u3059...
 NoChange=\u6700\u5f8c\u306e\u30b3\u30f3\u30d1\u30a4\u30eb\u304b\u3089\u306f\u4f55\u3082\u5909\u66f4\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u30b9\u30ad\u30c3\u30d7\u3057\u307e\u3059...
-ShellMessage=Apache Flex Compiler SHell (${program})\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+ShellMessage=Apache Flex Compiler SHell (${program})\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 CommandList=fcsh \u30b3\u30de\u30f3\u30c9\u306e\u30ea\u30b9\u30c8 : \nmxmlc arg1 arg2 ...      \u5b8c\u5168\u30b3\u30f3\u30d1\u30a4\u30eb\u3068\u6700\u9069\u5316\u3002\u30bf\u30fc\u30b2\u30c3\u30c8 id \u3092\u8fd4\u3057\u307e\u3059\ncompc arg1 arg2 ...      \u5b8c\u5168 SWC \u30b3\u30f3\u30d1\u30a4\u30eb\ncompile id               \u30a4\u30f3\u30af\u30ea\u30e1\u30f3\u30bf\u30eb\u30b3\u30f3\u30d1\u30a4\u30eb\nclear [id]               \u30bf\u30fc\u30b2\u30c3\u30c8\u3092\u30af\u30ea\u30a2\ninfo [id]                \u30b3\u30f3\u30d1\u30a4\u30eb\u30bf\u30fc\u30b2\u30c3\u30c8\u306e\u60c5\u5831\u3092\u8868\u793a\nquit                     \u7d42\u4e86
diff --git a/modules/compiler/src/java/flex2/tools/Fcsh_ko.properties b/modules/compiler/src/java/flex2/tools/Fcsh_ko.properties
index ca87053..671063b 100644
--- a/modules/compiler/src/java/flex2/tools/Fcsh_ko.properties
+++ b/modules/compiler/src/java/flex2/tools/Fcsh_ko.properties
@@ -22,5 +22,5 @@
 AssignTargetID=fcsh: ${counter}\uc744(\ub97c) \ucef4\ud30c\uc77c \ub300\uc0c1 ID\ub85c \ud560\ub2f9\ud568
 DetectConfigurationChange=\uad6c\uc131 \ubcc0\uacbd \uc0ac\ud56d\uc774 \ubc1c\uacac\ub418\uc5c8\uc2b5\ub2c8\ub2e4.  \ub2e4\uc2dc \ucef4\ud30c\uc77c...
 NoChange=\ub9c8\uc9c0\ub9c9\uc73c\ub85c \ucef4\ud30c\uc77c\ud55c \ud6c4 \ubcc0\uacbd \uc0ac\ud56d\uc774 \uc5c6\uc2b5\ub2c8\ub2e4. \uac74\ub108\ub6f0\uae30...
-ShellMessage=Apache Flex Compiler SHell (${program})\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+ShellMessage=Apache Flex Compiler SHell (${program})\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 CommandList=fcsh \uba85\ub839 \ubaa9\ub85d:\nmxmlc arg1 arg2 ...      \uc804\uccb4 \ucef4\ud30c\uc77c \ubc0f \ucd5c\uc801\ud654, \ub300\uc0c1 ID \ubc18\ud658\ncompc arg1 arg2 ...      \uc804\uccb4 SWC \ucef4\ud30c\uc77c\n\ucef4\ud30c\uc77c ID               \uc99d\ubd84 \ucef4\ud30c\uc77c\n\uc9c0\uc6b0\uae30 [ID]               \ub300\uc0c1 \uc9c0\uc6b0\uae30\n\uc815\ubcf4 [ID]                \ucef4\ud30c\uc77c \ub300\uc0c1 \uc815\ubcf4 \ud45c\uc2dc\n\uc885\ub8cc                     \uc885\ub8cc
diff --git a/modules/compiler/src/java/flex2/tools/Fcsh_nb.properties b/modules/compiler/src/java/flex2/tools/Fcsh_nb.properties
index aad8f83..9a04f8f 100644
--- a/modules/compiler/src/java/flex2/tools/Fcsh_nb.properties
+++ b/modules/compiler/src/java/flex2/tools/Fcsh_nb.properties
@@ -22,5 +22,5 @@
 AssignTargetID=fcsh: Tilordnet ${counter} som kompileringsm\u00e5l-ID
 DetectConfigurationChange=Oppdaget konfigurasjonsendringer. Kompiler p\u00e5 nytt...
 NoChange=Ingenting er endret siden forrige kompilering. Hopp over...
-ShellMessage=Apache Flex Compiler SHell (${program})\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+ShellMessage=Apache Flex Compiler SHell (${program})\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 CommandList=Liste over fcsh-kommandoer:\nmxmlc arg1 arg2 ...      full kompilering og optimering; returner en m\u00e5l-ID\ncompc arg1 arg2 ...      full swc-kompilering\ncompile id               trinnvis kompilering\nclear [id]               fjern m\u00e5l\ninfo [id]                vis info om kompileringsm\u00e5l\nquit                     avslutt
diff --git a/modules/compiler/src/java/flex2/tools/Fcsh_nl.properties b/modules/compiler/src/java/flex2/tools/Fcsh_nl.properties
index 281f88d..495bd67 100644
--- a/modules/compiler/src/java/flex2/tools/Fcsh_nl.properties
+++ b/modules/compiler/src/java/flex2/tools/Fcsh_nl.properties
@@ -22,5 +22,5 @@
 AssignTargetID=fcsh: ${counter} toegewezen als de compileerdoel-ID
 DetectConfigurationChange=Configuratiewijzigingen gedetecteerd. Opnieuw compileren...
 NoChange=Er is niets gewijzigd sinds de laatste compileerbewerking. Overslaan...
-ShellMessage=Apache Flex Compiler SHell (${program})\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+ShellMessage=Apache Flex Compiler SHell (${program})\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 CommandList=Lijst met fcsh-opdrachten:\nmxmlc arg1 arg2 ...      volledige compilatie en optimalisatie; retourneert een doel-id\ncompc arg1 arg2 ...      volledige swc-compilatie\ncompile id               incrementele compilatie\nclear [id]               doel(en) wissen\ninfo [id]                compileerdoelinfo weergeven\nquit                     afsluiten
diff --git a/modules/compiler/src/java/flex2/tools/Fcsh_pt.properties b/modules/compiler/src/java/flex2/tools/Fcsh_pt.properties
index e92157d..2a2292f 100644
--- a/modules/compiler/src/java/flex2/tools/Fcsh_pt.properties
+++ b/modules/compiler/src/java/flex2/tools/Fcsh_pt.properties
@@ -22,5 +22,5 @@
 AssignTargetID=fcsh: ${counter} atribu\u00eddo como id de destino da compila\u00e7\u00e3o
 DetectConfigurationChange=Foram detectadas altera\u00e7\u00f5es na configura\u00e7\u00e3o. Recompilar...
 NoChange=Nada foi alterado desde a \u00faltima compila\u00e7\u00e3o. Ignorar...
-ShellMessage=Apache Flex Compiler SHell (${program})\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+ShellMessage=Apache Flex Compiler SHell (${program})\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 CommandList=Lista de comandos fcsh:\nmxmlc arg1 arg2 ...      compila\u00e7\u00e3o e otimiza\u00e7\u00e3o total; retornar uma id de destino\ncompc arg1 arg2 ...      compila\u00e7\u00e3o SWC total\ncompile id               compila\u00e7\u00e3o incremental\nclear [id]               limpar destino(s)\ninfo [id]                exibir informa\u00e7\u00f5es de destino de compila\u00e7\u00e3o\nquit                     sair
diff --git a/modules/compiler/src/java/flex2/tools/Fcsh_ru.properties b/modules/compiler/src/java/flex2/tools/Fcsh_ru.properties
index f875eed..8f049ab 100644
--- a/modules/compiler/src/java/flex2/tools/Fcsh_ru.properties
+++ b/modules/compiler/src/java/flex2/tools/Fcsh_ru.properties
@@ -22,5 +22,5 @@
 AssignTargetID=fcsh: ${counter} \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d \u043a\u0430\u043a \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0446\u0435\u043b\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438
 DetectConfigurationChange=\u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u044b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438. \u041f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c...
 NoChange=\u041f\u043e\u0441\u043b\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442. \u041f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c...
-ShellMessage=Apache Flex Compiler SHell (${program})\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+ShellMessage=Apache Flex Compiler SHell (${program})\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 CommandList=\u0421\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u043c\u0430\u043d\u0434 fcsh:\nmxmlc arg1 arg2 ...      \u043f\u043e\u043b\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f; \u0432\u043e\u0437\u0432\u0440\u0430\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u0446\u0435\u043b\u0438\ncompc arg1 arg2 ...      \u043f\u043e\u043b\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f SWC\ncompile id             \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f\nclear [id] \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0446\u0435\u043b\u0435\u0432\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430(\u043e\u0432)\ninfo [id]                \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0446\u0435\u043b\u0435\u0432\u043e\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438\nquit                     \u0432\u044b\u0445\u043e\u0434
diff --git a/modules/compiler/src/java/flex2/tools/Fcsh_sv.properties b/modules/compiler/src/java/flex2/tools/Fcsh_sv.properties
index ce297d2..ac7374c 100644
--- a/modules/compiler/src/java/flex2/tools/Fcsh_sv.properties
+++ b/modules/compiler/src/java/flex2/tools/Fcsh_sv.properties
@@ -22,5 +22,5 @@
 AssignTargetID=fcsh: Tilldelar ${counter} som kompileringsm\u00e5ls-ID
 DetectConfigurationChange=Konfigurations\u00e4ndringar har p\u00e5tr\u00e4ffats. Kompilera om ...
 NoChange=Ingenting har \u00e4ndrats sedan f\u00f6reg\u00e5ende kompilering. Hoppa \u00f6ver...
-ShellMessage=Apache Flex Compiler SHell (${program})\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+ShellMessage=Apache Flex Compiler SHell (${program})\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 CommandList=Lista \u00f6ver fcsh-kommandon:\nmxmlc arg1 arg2 ...      fullst\u00e4ndig kompilering och optimering; returnera ett m\u00e5l-id\ncompc arg1 arg2 ...      fullst\u00e4ndig SWC-kompilering\ncompile id               stegvis \u00f6kande kompilering\nclear [id]               rensa m\u00e5l\ninfo [id]                visa kompileringsm\u00e5lsinformation\nquit                     st\u00e4ng
diff --git a/modules/compiler/src/java/flex2/tools/Fcsh_zh_CN.properties b/modules/compiler/src/java/flex2/tools/Fcsh_zh_CN.properties
index 0139627..791f89d 100644
--- a/modules/compiler/src/java/flex2/tools/Fcsh_zh_CN.properties
+++ b/modules/compiler/src/java/flex2/tools/Fcsh_zh_CN.properties
@@ -22,5 +22,5 @@
 AssignTargetID=fcsh: \u5c06 ${counter} \u6307\u5b9a\u4e3a\u7f16\u8bd1\u76ee\u6807\u6807\u8bc6
 DetectConfigurationChange=\u68c0\u6d4b\u5230\u914d\u7f6e\u66f4\u6539\u3002\u91cd\u65b0\u7f16\u8bd1...
 NoChange=\u81ea\u4e0a\u6b21\u7f16\u8bd1\u4ee5\u6765\u6ca1\u6709\u4efb\u4f55\u66f4\u6539\u3002\u8df3\u8fc7...
-ShellMessage=Apache Flex Compiler SHell (${program})\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+ShellMessage=Apache Flex Compiler SHell (${program})\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 CommandList=fcsh \u547d\u4ee4\u5217\u8868: \nmxmlc arg1 arg2 ...      \u5b8c\u5168\u7f16\u8bd1\u548c\u4f18\u5316\uff1b\u8fd4\u56de\u4e00\u4e2a\u76ee\u6807\u6807\u8bc6\ncompc arg1 arg2 ...      \u5b8c\u5168 SWC \u7f16\u8bd1\ncompile id               \u589e\u91cf\u7f16\u8bd1\nclear [id]               \u6e05\u9664\u76ee\u6807\ninfo [id]                \u663e\u793a\u7f16\u8bd1\u76ee\u6807\u4fe1\u606f\nquit                     \u9000\u51fa
diff --git a/modules/compiler/src/java/flex2/tools/Fcsh_zh_TW.properties b/modules/compiler/src/java/flex2/tools/Fcsh_zh_TW.properties
index 7e17af7..8639793 100644
--- a/modules/compiler/src/java/flex2/tools/Fcsh_zh_TW.properties
+++ b/modules/compiler/src/java/flex2/tools/Fcsh_zh_TW.properties
@@ -22,5 +22,5 @@
 AssignTargetID=fcsh: \u5c07 ${counter} \u6307\u5b9a\u70ba\u7de8\u8b6f\u76ee\u6a19 ID
 DetectConfigurationChange=\u5075\u6e2c\u5230\u7d44\u614b\u8b8a\u66f4\u3002\u91cd\u65b0\u7de8\u8b6f...
 NoChange=\u81ea\u4e0a\u6b21\u7de8\u8b6f\u5f8c\u672a\u767c\u751f\u4efb\u4f55\u8b8a\u66f4\u3002\u7565\u904e...
-ShellMessage=Apache Flex Compiler SHell (${program})\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+ShellMessage=Apache Flex Compiler SHell (${program})\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 CommandList=fcsh \u6307\u4ee4\u6e05\u55ae:\nmxmlc arg1 arg2 ...      \u5b8c\u6574\u7de8\u8b6f\u8207\u6700\u4f73\u5316\uff1b\u50b3\u56de\u76ee\u6a19 ID\ncompc arg1 arg2 ...      \u5b8c\u6574 SWC \u7de8\u8b6f\ncompile id               \u589e\u91cf\u7de8\u8b6f\nclear [id]               \u6e05\u9664\u76ee\u6a19\ninfo [id]                \u986f\u793a\u7de8\u8b6f\u76ee\u6a19\u8cc7\u8a0a\nquit                     \u7d50\u675f
diff --git a/modules/compiler/src/java/flex2/tools/Mxmlc_da.properties b/modules/compiler/src/java/flex2/tools/Mxmlc_da.properties
index 43f74a4..e62f75f 100644
--- a/modules/compiler/src/java/flex2/tools/Mxmlc_da.properties
+++ b/modules/compiler/src/java/flex2/tools/Mxmlc_da.properties
@@ -22,5 +22,5 @@
 LoadedSWCs=${num} SWC'er er indl\u00e6st:
 CouldNotInstantiate=${config} kunne ikke oprettes
 DumpConfig=Skrivning af konfigurationsdump til ${filename}
-StartMessage=Apache Flex Compiler (${program})\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex Compiler (${program})\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 NoUpdateMessage=${name} er opdateret og skal ikke bygges igen.
diff --git a/modules/compiler/src/java/flex2/tools/Mxmlc_de.properties b/modules/compiler/src/java/flex2/tools/Mxmlc_de.properties
index ec7f00b..f2de342 100644
--- a/modules/compiler/src/java/flex2/tools/Mxmlc_de.properties
+++ b/modules/compiler/src/java/flex2/tools/Mxmlc_de.properties
@@ -22,5 +22,5 @@
 LoadedSWCs=${num} SWC geladen:
 CouldNotInstantiate=${config} konnte nicht instanziiert werden
 DumpConfig=Konfigurations-Dump wird in ${filename} geschrieben
-StartMessage=Apache Flex Compiler (${program})\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex Compiler (${program})\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 NoUpdateMessage=${name} ist auf dem aktuellen Stand und muss nicht neu erstellt werden.
diff --git a/modules/compiler/src/java/flex2/tools/Mxmlc_en.properties b/modules/compiler/src/java/flex2/tools/Mxmlc_en.properties
index a9dc1a1..c1fdf81 100644
--- a/modules/compiler/src/java/flex2/tools/Mxmlc_en.properties
+++ b/modules/compiler/src/java/flex2/tools/Mxmlc_en.properties
@@ -22,5 +22,5 @@
 LoadedSWCs=Loaded ${num} SWCs:
 CouldNotInstantiate=Could not instantiate ${config}
 DumpConfig=Writing configuration dump to ${filename}
-StartMessage=Apache Flex Compiler (${program})\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex Compiler (${program})\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 NoUpdateMessage=${name} is up-to-date and does not have to be rebuilt.
diff --git a/modules/compiler/src/java/flex2/tools/Mxmlc_es.properties b/modules/compiler/src/java/flex2/tools/Mxmlc_es.properties
index 0a1a8f7..39771b9 100644
--- a/modules/compiler/src/java/flex2/tools/Mxmlc_es.properties
+++ b/modules/compiler/src/java/flex2/tools/Mxmlc_es.properties
@@ -22,5 +22,5 @@
 LoadedSWCs=${num} SWC cargados:
 CouldNotInstantiate=No se pudo crear una instancia de ${config}
 DumpConfig=Escribiendo el volcado de configuraci\u00f3n en ${filename}
-StartMessage=Apache Flex Compiler (${program})\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex Compiler (${program})\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 NoUpdateMessage=${name} est\u00e1 actualizado y no necesita ser reconstruido.
diff --git a/modules/compiler/src/java/flex2/tools/Mxmlc_fi.properties b/modules/compiler/src/java/flex2/tools/Mxmlc_fi.properties
index 1acd7fd..47cd5e8 100644
--- a/modules/compiler/src/java/flex2/tools/Mxmlc_fi.properties
+++ b/modules/compiler/src/java/flex2/tools/Mxmlc_fi.properties
@@ -22,5 +22,5 @@
 LoadedSWCs=Ladattu ${num} SWC:t\u00e4:
 CouldNotInstantiate=Esiintym\u00e4n ${config} luominen ep\u00e4onnistui
 DumpConfig=M\u00e4\u00e4rityslokia kirjoitetaan tiedostoon ${filename}
-StartMessage=Apache Flex Compiler (${program})\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex Compiler (${program})\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 NoUpdateMessage=${name} on ajan tasalla, eik\u00e4 sit\u00e4 tarvitse muodostaa uudelleen.
diff --git a/modules/compiler/src/java/flex2/tools/Mxmlc_fr.properties b/modules/compiler/src/java/flex2/tools/Mxmlc_fr.properties
index 7bd2e47..ec917ce 100644
--- a/modules/compiler/src/java/flex2/tools/Mxmlc_fr.properties
+++ b/modules/compiler/src/java/flex2/tools/Mxmlc_fr.properties
@@ -22,5 +22,5 @@
 LoadedSWCs=${num} fichiers SWC charg\u00e9s :
 CouldNotInstantiate=Impossible d'instancier ${config}
 DumpConfig=Ecriture du vidage de configuration dans ${filename}
-StartMessage=Apache Flex Compiler (${program})\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex Compiler (${program})\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 NoUpdateMessage=${name} est \u00e0 jour et n'a pas besoin d'\u00eatre r\u00e9g\u00e9n\u00e9r\u00e9.
diff --git a/modules/compiler/src/java/flex2/tools/Mxmlc_it.properties b/modules/compiler/src/java/flex2/tools/Mxmlc_it.properties
index f236578..e5a088f 100644
--- a/modules/compiler/src/java/flex2/tools/Mxmlc_it.properties
+++ b/modules/compiler/src/java/flex2/tools/Mxmlc_it.properties
@@ -22,5 +22,5 @@
 LoadedSWCs=${num} SWC caricati:
 CouldNotInstantiate=Impossibile creare un\u2019istanza di ${config}
 DumpConfig=Scrittura del dump di configurazione in ${filename}
-StartMessage=Apache Flex Compiler (${program})\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex Compiler (${program})\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 NoUpdateMessage=${name} \u00e8 aggiornato e non \u00e8 necessario rigenerarlo.
diff --git a/modules/compiler/src/java/flex2/tools/Mxmlc_ja.properties b/modules/compiler/src/java/flex2/tools/Mxmlc_ja.properties
index 383c2a0..b8cbd1b 100644
--- a/modules/compiler/src/java/flex2/tools/Mxmlc_ja.properties
+++ b/modules/compiler/src/java/flex2/tools/Mxmlc_ja.properties
@@ -22,5 +22,5 @@
 LoadedSWCs=${num} \u500b\u306e SWC \u304c\u8aad\u307f\u8fbc\u307e\u308c\u307e\u3057\u305f :
 CouldNotInstantiate=${config} \u3092\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
 DumpConfig=\u8a2d\u5b9a\u30c0\u30f3\u30d7\u3092 "${filename}" \u306b\u66f8\u304d\u8fbc\u3093\u3067\u3044\u307e\u3059\u3002
-StartMessage=Apache Flex Compiler (${program})\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex Compiler (${program})\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 NoUpdateMessage=${name} \u306f\u6700\u65b0\u3067\u3059\u3002\u30ea\u30d3\u30eb\u30c9\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3002
diff --git a/modules/compiler/src/java/flex2/tools/Mxmlc_ko.properties b/modules/compiler/src/java/flex2/tools/Mxmlc_ko.properties
index 4e0dfed..303342e 100644
--- a/modules/compiler/src/java/flex2/tools/Mxmlc_ko.properties
+++ b/modules/compiler/src/java/flex2/tools/Mxmlc_ko.properties
@@ -22,5 +22,5 @@
 LoadedSWCs=${num}\uac1c\uc758 SWC \ub85c\ub4dc\ub428:
 CouldNotInstantiate=${config}\uc744(\ub97c) \uc778\uc2a4\ud134\uc2a4\ud654\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
 DumpConfig=${filename}\uc5d0 \uad6c\uc131 \ub364\ud504 \uc4f0\uae30
-StartMessage=Apache Flex Compiler (${program})\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex Compiler (${program})\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 NoUpdateMessage=${name}\uc740(\ub294) \ucd5c\uc2e0 \ubc84\uc804\uc774\ubbc0\ub85c \ub2e4\uc2dc \ube4c\ub4dc\ud560 \ud544\uc694\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.
diff --git a/modules/compiler/src/java/flex2/tools/Mxmlc_nb.properties b/modules/compiler/src/java/flex2/tools/Mxmlc_nb.properties
index ec912a6..9e0805c 100644
--- a/modules/compiler/src/java/flex2/tools/Mxmlc_nb.properties
+++ b/modules/compiler/src/java/flex2/tools/Mxmlc_nb.properties
@@ -22,5 +22,5 @@
 LoadedSWCs=Lastet inn ${num} swc-er:
 CouldNotInstantiate=Kan ikke representere ${config}
 DumpConfig=Skriver konfigurasjonsdump til ${filename}
-StartMessage=Apache Flex Compiler (${program})\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex Compiler (${program})\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 NoUpdateMessage=${name} er oppdatert og trenger ikke \u00e5 bygges p\u00e5 nytt..
diff --git a/modules/compiler/src/java/flex2/tools/Mxmlc_nl.properties b/modules/compiler/src/java/flex2/tools/Mxmlc_nl.properties
index a1e61b8..9c6ed5c 100644
--- a/modules/compiler/src/java/flex2/tools/Mxmlc_nl.properties
+++ b/modules/compiler/src/java/flex2/tools/Mxmlc_nl.properties
@@ -22,5 +22,5 @@
 LoadedSWCs=${num} SWC's geladen:
 CouldNotInstantiate=Kan geen exemplaar maken van ${config}
 DumpConfig=Configuratiedump wordt naar ${filename} geschreven
-StartMessage=Apache Flex Compiler (${program})\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex Compiler (${program})\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 NoUpdateMessage=${name} is up-to-date en hoeft niet opnieuw te worden gemaakt.
diff --git a/modules/compiler/src/java/flex2/tools/Mxmlc_pt.properties b/modules/compiler/src/java/flex2/tools/Mxmlc_pt.properties
index b512194..8c2a240 100644
--- a/modules/compiler/src/java/flex2/tools/Mxmlc_pt.properties
+++ b/modules/compiler/src/java/flex2/tools/Mxmlc_pt.properties
@@ -22,5 +22,5 @@
 LoadedSWCs=${num} SWCs carregados:
 CouldNotInstantiate=N\u00e3o foi poss\u00edvel criar a inst\u00e2ncia ${config}
 DumpConfig=Gravando despejo de configura\u00e7\u00e3o em ${filename}
-StartMessage=Apache Flex Compiler (${program})\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex Compiler (${program})\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 NoUpdateMessage=${name} est\u00e1 atualizado e n\u00e3o \u00e9 preciso recri\u00e1-lo.
diff --git a/modules/compiler/src/java/flex2/tools/Mxmlc_ru.properties b/modules/compiler/src/java/flex2/tools/Mxmlc_ru.properties
index 4353c7e..cdbf06b 100644
--- a/modules/compiler/src/java/flex2/tools/Mxmlc_ru.properties
+++ b/modules/compiler/src/java/flex2/tools/Mxmlc_ru.properties
@@ -22,5 +22,5 @@
 LoadedSWCs=\u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043e ${num} SWC:
 CouldNotInstantiate=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u0442\u044c ${config}
 DumpConfig=\u0417\u0430\u043f\u0438\u0441\u044c \u0434\u0430\u043c\u043f\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0432 ${filename}
-StartMessage=Apache Flex Compiler (${program})\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex Compiler (${program})\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 NoUpdateMessage=${name} \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c \u0438 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438.
diff --git a/modules/compiler/src/java/flex2/tools/Mxmlc_sv.properties b/modules/compiler/src/java/flex2/tools/Mxmlc_sv.properties
index db782d7..5e1ac66 100644
--- a/modules/compiler/src/java/flex2/tools/Mxmlc_sv.properties
+++ b/modules/compiler/src/java/flex2/tools/Mxmlc_sv.properties
@@ -22,5 +22,5 @@
 LoadedSWCs=Laddade ${num} SWC:er:
 CouldNotInstantiate=Det gick inte att skapa en instans av ${config}
 DumpConfig=Skriver konfigurationsdump till ${filename}
-StartMessage=Apache Flex Compiler (${program})\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex Compiler (${program})\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 NoUpdateMessage=${name} \u00e4r aktuell och beh\u00f6ver inte kompileras om.
diff --git a/modules/compiler/src/java/flex2/tools/Mxmlc_zh_CN.properties b/modules/compiler/src/java/flex2/tools/Mxmlc_zh_CN.properties
index ceeaf31..0e4066d 100644
--- a/modules/compiler/src/java/flex2/tools/Mxmlc_zh_CN.properties
+++ b/modules/compiler/src/java/flex2/tools/Mxmlc_zh_CN.properties
@@ -22,5 +22,5 @@
 LoadedSWCs=\u5df2\u52a0\u8f7d ${num} \u4e2a SWC:
 CouldNotInstantiate=\u65e0\u6cd5\u5b9e\u4f8b\u5316 ${config}
 DumpConfig=\u5c06\u914d\u7f6e\u8f6c\u50a8\u5199\u5165 ${filename}
-StartMessage=Apache Flex Compiler (${program})\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex Compiler (${program})\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 NoUpdateMessage=${name} \u662f\u6700\u65b0\u7684\uff0c\u4e0d\u5fc5\u91cd\u5efa\u3002
diff --git a/modules/compiler/src/java/flex2/tools/Mxmlc_zh_TW.properties b/modules/compiler/src/java/flex2/tools/Mxmlc_zh_TW.properties
index 5553a73..5a40d1a 100644
--- a/modules/compiler/src/java/flex2/tools/Mxmlc_zh_TW.properties
+++ b/modules/compiler/src/java/flex2/tools/Mxmlc_zh_TW.properties
@@ -22,5 +22,5 @@
 LoadedSWCs=\u5df2\u8f09\u5165 ${num} \u500b SWC:
 CouldNotInstantiate=\u7121\u6cd5\u5be6\u9ad4\u5316 ${config}
 DumpConfig=\u5c07\u7d44\u614b\u50be\u5370\u5beb\u5165 ${filename}
-StartMessage=Apache Flex Compiler (${program})\n${buildMessage}\nCopyright 2015 The Apache Software Foundation.\n
+StartMessage=Apache Flex Compiler (${program})\n${buildMessage}\nCopyright 2016 The Apache Software Foundation.\n
 NoUpdateMessage=${name} \u662f\u6700\u65b0\u7684\uff0c\u4e0d\u9700\u8981\u91cd\u5efa\u3002
diff --git a/modules/compiler/src/java/flex2/tools/VersionInfo.java b/modules/compiler/src/java/flex2/tools/VersionInfo.java
index 00275b7..6e740cc 100644
--- a/modules/compiler/src/java/flex2/tools/VersionInfo.java
+++ b/modules/compiler/src/java/flex2/tools/VersionInfo.java
@@ -32,8 +32,8 @@
 public class VersionInfo
 {
     public static String FLEX_MAJOR_VERSION = "4";
-    public static String FLEX_MINOR_VERSION = "14";
-    public static String FLEX_NANO_VERSION  = "1";
+    public static String FLEX_MINOR_VERSION = "16";
+    public static String FLEX_NANO_VERSION  = "0";
     
 	/**
 	 * Lib version is the "version" of the SWC format. Major number changes represent big (although not
diff --git a/modules/debugger/build.xml b/modules/debugger/build.xml
index 7c252a8..06930b5 100644
--- a/modules/debugger/build.xml
+++ b/modules/debugger/build.xml
@@ -78,8 +78,8 @@
     <target name="jar" depends="compile" description="compile and create fdb.jar">
         <mkdir dir="${lib.dir}" />
         <mkdir dir="${module.classes}/META-INF"/>
-        <copy file="${FLEX_HOME}/LICENSE.base" tofile="${module.classes}/META-INF/LICENSE"/>
-        <copy file="${FLEX_HOME}/NOTICE.base" tofile="${module.classes}/META-INF/NOTICE"/>
+        <copy file="${FLEX_HOME}/licenseParts/LICENSE.base" tofile="${module.classes}/META-INF/LICENSE"/>
+        <copy file="${FLEX_HOME}/licenseParts/NOTICE.base" tofile="${module.classes}/META-INF/NOTICE"/>
 		<echo message="Building lib/fdb.jar"/>
         <jar file="${lib.dir}/fdb.jar" basedir="${module.classes}" includes="**/*" excludes="dependencies.txt">
             <manifest>
diff --git a/modules/debugger/src/java/flex/tools/debugger/cli/DebugCLI.java b/modules/debugger/src/java/flex/tools/debugger/cli/DebugCLI.java
index 90d619c..5e9edf0 100644
--- a/modules/debugger/src/java/flex/tools/debugger/cli/DebugCLI.java
+++ b/modules/debugger/src/java/flex/tools/debugger/cli/DebugCLI.java
@@ -2952,8 +2952,6 @@
             args.put("filename", filename); //$NON-NLS-1$
             args.put("line", Integer.toString(line)); //$NON-NLS-1$
             err(getLocalizationManager().getLocalizedTextString("breakpointNotSetNoCode", args)); //$NON-NLS-1$
-
-            continueAndSwapActiveWorkerBack(savedIsolateId, wasAlreadySuspended);
         } catch (InProgressException e) {
             e.printStackTrace();
         } finally {
@@ -4283,6 +4281,9 @@
             /* If the first character is 0-9 or '-', arg is assumed to be a line number. */
             if (Character.isDigit(firstChar) || firstChar == '-') {
                 line = parseLineNumber(arg);
+
+				final FileLocation fileLocation = new FileLocation(m_activeIsolate, module, line, wasFunc);
+				fileLocations.add(fileLocation);
             }
             /* If the first character is a '#', what follows
                is assumed to be a file number. */
@@ -6925,4 +6926,4 @@
     }
 
     int wasFunc;
-}
\ No newline at end of file
+}
diff --git a/modules/debugger/src/java/flex/tools/debugger/cli/fdb_da.properties b/modules/debugger/src/java/flex/tools/debugger/cli/fdb_da.properties
index 305064c..0e2d506 100644
--- a/modules/debugger/src/java/flex/tools/debugger/cli/fdb_da.properties
+++ b/modules/debugger/src/java/flex/tools/debugger/cli/fdb_da.properties
@@ -25,7 +25,7 @@
 
 defaultBuildName=development
 about=Apache fdb (Flash Player Debugger) [build ${build}]
-copyright=Copyright 2013 The Apache Software Foundation. Alle rettigheder forbeholdes.
+copyright=Copyright 2016 The Apache Software Foundation. Alle rettigheder forbeholdes.
 noResponseException=Afspilleren reagerede ikke som forventet p\u00e5 kommandoen; kommandoen er afbrudt.
 notSuspendedException=Kommandoen kan ikke afgives mens afspilleren k\u00f8rer
 illegalStateException=Kommandoen fungerer ikke uden for en session.
diff --git a/modules/debugger/src/java/flex/tools/debugger/cli/fdb_de.properties b/modules/debugger/src/java/flex/tools/debugger/cli/fdb_de.properties
index 65107dd..ee9cdf1 100644
--- a/modules/debugger/src/java/flex/tools/debugger/cli/fdb_de.properties
+++ b/modules/debugger/src/java/flex/tools/debugger/cli/fdb_de.properties
@@ -25,7 +25,7 @@
 
 defaultBuildName=development
 about=Apache FDB (Flash Player Debugger) [Build ${build}]
-copyright=Copyright 2013 The Apache Software Foundation. All rights reserved.
+copyright=Copyright 2016 The Apache Software Foundation. All rights reserved.
 noResponseException=Der Player hat nicht wie erwartet auf den Befehl reagiert; der Befehl wird abgebrochen.
 notSuspendedException=Der Befehl kann nicht ausgestellt werden, w\u00e4hrend der Player ausgef\u00fchrt wird
 illegalStateException=Der Befehl ist ohne Sitzung nicht zul\u00e4ssig.
diff --git a/modules/debugger/src/java/flex/tools/debugger/cli/fdb_en.properties b/modules/debugger/src/java/flex/tools/debugger/cli/fdb_en.properties
index cecdc4e..4fadd11 100644
--- a/modules/debugger/src/java/flex/tools/debugger/cli/fdb_en.properties
+++ b/modules/debugger/src/java/flex/tools/debugger/cli/fdb_en.properties
@@ -25,7 +25,7 @@
 
 defaultBuildName=development
 about=Apache fdb (Flash Player Debugger) [build ${build}]
-copyright=Copyright 2013 The Apache Software Foundation. All rights reserved.
+copyright=Copyright 2016 The Apache Software Foundation. All rights reserved.
 noResponseException=Player did not respond to the command as expected; command aborted.
 notSuspendedException=Command cannot be issued while Player is running
 illegalStateException=Command not valid without a session.
diff --git a/modules/debugger/src/java/flex/tools/debugger/cli/fdb_es.properties b/modules/debugger/src/java/flex/tools/debugger/cli/fdb_es.properties
index 5e4d52f..b972575 100644
--- a/modules/debugger/src/java/flex/tools/debugger/cli/fdb_es.properties
+++ b/modules/debugger/src/java/flex/tools/debugger/cli/fdb_es.properties
@@ -25,7 +25,7 @@
 
 defaultBuildName=desarrollo
 about=Apache fdb (Flash Player Debugger) [build ${build}]
-copyright=Copyright 2013 The Apache Software Foundation. Reservados todos los derechos.
+copyright=Copyright 2016 The Apache Software Foundation. Reservados todos los derechos.
 noResponseException=El reproductor no respondi\u00f3 al comando como se esperaba; se cancel\u00f3 el comando.
 notSuspendedException=No puede emitirse el comando mientras el reproductor se est\u00e1 ejecutando.
 illegalStateException=El comando no es v\u00e1lido sin una sesi\u00f3n.
diff --git a/modules/debugger/src/java/flex/tools/debugger/cli/fdb_fi.properties b/modules/debugger/src/java/flex/tools/debugger/cli/fdb_fi.properties
index fa39036..9d3f6b9 100644
--- a/modules/debugger/src/java/flex/tools/debugger/cli/fdb_fi.properties
+++ b/modules/debugger/src/java/flex/tools/debugger/cli/fdb_fi.properties
@@ -25,7 +25,7 @@
 
 defaultBuildName=kehitys
 about=Apache fdb (Flash Player Debugger) [versio ${build}]
-copyright=Copyright 2013 The Apache Software Foundation. All rights reserved.
+copyright=Copyright 2016 The Apache Software Foundation. All rights reserved.
 noResponseException=Soitin ei vastannut komentoon odotetulla tavalla. Komento keskeytettiin.
 notSuspendedException=Komentoa ei voi antaa, kun soitin on k\u00e4ynniss\u00e4
 illegalStateException=Komento ei kelpaa ilman istuntoa.
diff --git a/modules/debugger/src/java/flex/tools/debugger/cli/fdb_fr.properties b/modules/debugger/src/java/flex/tools/debugger/cli/fdb_fr.properties
index 0c04985..343ff4c 100644
--- a/modules/debugger/src/java/flex/tools/debugger/cli/fdb_fr.properties
+++ b/modules/debugger/src/java/flex/tools/debugger/cli/fdb_fr.properties
@@ -25,7 +25,7 @@
 
 defaultBuildName=d\u00e9veloppement
 about=Apache fdb (Flash Player Debugger) [build ${build}]
-copyright=Copyright 2013 The Apache Software Foundation. Tous droits r\u00e9serv\u00e9s.
+copyright=Copyright 2016 The Apache Software Foundation. Tous droits r\u00e9serv\u00e9s.
 noResponseException=Le lecteur n'a pas r\u00e9pondu \u00e0 la commande comme pr\u00e9vu ; commande annul\u00e9e.
 notSuspendedException=Impossible d'\u00e9mettre la commande lorsque le lecteur est en cours d'ex\u00e9cution
 illegalStateException=Commande incorrecte sans session.
diff --git a/modules/debugger/src/java/flex/tools/debugger/cli/fdb_it.properties b/modules/debugger/src/java/flex/tools/debugger/cli/fdb_it.properties
index d0cd6a5..6ab6959 100644
--- a/modules/debugger/src/java/flex/tools/debugger/cli/fdb_it.properties
+++ b/modules/debugger/src/java/flex/tools/debugger/cli/fdb_it.properties
@@ -25,7 +25,7 @@
 
 defaultBuildName=sviluppo
 about=Apache fdb (Flash Player Debugger) [build ${build}]
-copyright=Copyright 2013 The Apache Software Foundation. All rights reserved.
+copyright=Copyright 2016 The Apache Software Foundation. All rights reserved.
 noResponseException=Player non ha risposto al comando come previsto. Comando terminato.
 notSuspendedException=Impossibile inviare il comando mentre Player \u00e8 in esecuzione
 illegalStateException=Comando non valido senza una sessione.
diff --git a/modules/debugger/src/java/flex/tools/debugger/cli/fdb_ja.properties b/modules/debugger/src/java/flex/tools/debugger/cli/fdb_ja.properties
index 7f68711..17424d6 100644
--- a/modules/debugger/src/java/flex/tools/debugger/cli/fdb_ja.properties
+++ b/modules/debugger/src/java/flex/tools/debugger/cli/fdb_ja.properties
@@ -25,7 +25,7 @@
 
 defaultBuildName=development
 about=Apache fdb (Flash Player Debugger) [\u30d3\u30eb\u30c9 ${build}]
-copyright=Copyright 2013 The Apache Software Foundation. All rights reserved.
+copyright=Copyright 2016 The Apache Software Foundation. All rights reserved.
 noResponseException=Player \u304c\u30b3\u30de\u30f3\u30c9\u306b\u5bfe\u3057\u3066\u4e88\u671f\u3055\u308c\u305f\u5fdc\u7b54\u3092\u3057\u306a\u304b\u3063\u305f\u305f\u3081\u3001\u30b3\u30de\u30f3\u30c9\u51e6\u7406\u306f\u4e2d\u6b62\u3055\u308c\u307e\u3057\u305f\u3002
 notSuspendedException=Player \u306e\u5b9f\u884c\u4e2d\u306b\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093
 illegalStateException=\u30bb\u30c3\u30b7\u30e7\u30f3\u304c\u78ba\u7acb\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u3001\u30b3\u30de\u30f3\u30c9\u306f\u7121\u52b9\u3067\u3059\u3002
diff --git a/modules/debugger/src/java/flex/tools/debugger/cli/fdb_ko.properties b/modules/debugger/src/java/flex/tools/debugger/cli/fdb_ko.properties
index c603203..f086cff 100644
--- a/modules/debugger/src/java/flex/tools/debugger/cli/fdb_ko.properties
+++ b/modules/debugger/src/java/flex/tools/debugger/cli/fdb_ko.properties
@@ -25,7 +25,7 @@
 
 defaultBuildName=\uac1c\ubc1c
 about=Apache fdb(Flash Player Debugger) [\ube4c\ub4dc ${build}]
-copyright=Copyright 2013 The Apache Software Foundation. All rights reserved.
+copyright=Copyright 2016 The Apache Software Foundation. All rights reserved.
 noResponseException=\ud50c\ub808\uc774\uc5b4\uac00 \uc608\uc0c1\ub300\ub85c \uba85\ub839\uc5d0 \uc751\ub2f5\ud558\uc9c0 \uc54a\uc544 \uba85\ub839\uc774 \uc911\ub2e8\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
 notSuspendedException=\ud50c\ub808\uc774\uc5b4 \uc2e4\ud589 \uc911\uc5d0 \uba85\ub839\uc744 \uc218\ud589\ud560 \uc218 \uc5c6\uc74c
 illegalStateException=\uc138\uc158\uc774 \uc5c6\uc73c\uba74 \uba85\ub839\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
diff --git a/modules/debugger/src/java/flex/tools/debugger/cli/fdb_nb.properties b/modules/debugger/src/java/flex/tools/debugger/cli/fdb_nb.properties
index 41c4fef..171a397 100644
--- a/modules/debugger/src/java/flex/tools/debugger/cli/fdb_nb.properties
+++ b/modules/debugger/src/java/flex/tools/debugger/cli/fdb_nb.properties
@@ -25,7 +25,7 @@
 
 defaultBuildName=utvikling
 about=Apache fdb (Flash Player Debugger) [build ${build}]
-copyright=Copyright 2013 The Apache Software Foundation. All rights reserved.
+copyright=Copyright 2016 The Apache Software Foundation. All rights reserved.
 noResponseException=Spilleren reagerte ikke som forventet p\u00e5 kommandoen. Kommando ble avbrutt.
 notSuspendedException=Kommandoen kan ikke gis mens spilleren kj\u00f8rer
 illegalStateException=Kommandoen er ikke gyldig uten en \u00f8kt.
diff --git a/modules/debugger/src/java/flex/tools/debugger/cli/fdb_nl.properties b/modules/debugger/src/java/flex/tools/debugger/cli/fdb_nl.properties
index c525f2a..e02d295 100644
--- a/modules/debugger/src/java/flex/tools/debugger/cli/fdb_nl.properties
+++ b/modules/debugger/src/java/flex/tools/debugger/cli/fdb_nl.properties
@@ -25,7 +25,7 @@
 
 defaultBuildName=ontwikkeling
 about=Apache fdb (Flash Player Debugger) [build ${build}]
-copyright=Copyright 2013 The Apache Software Foundation. All rights reserved.
+copyright=Copyright 2016 The Apache Software Foundation. All rights reserved.
 noResponseException=Player heeft op onverwachte wijze gereageerd op de opdracht; opdracht afgebroken.
 notSuspendedException=Kan opdracht niet uitvoeren terwijl Player wordt uitgevoerd
 illegalStateException=Opdracht niet geldig zonder sessie
diff --git a/modules/debugger/src/java/flex/tools/debugger/cli/fdb_pt.properties b/modules/debugger/src/java/flex/tools/debugger/cli/fdb_pt.properties
index ed11515..12e33ed 100644
--- a/modules/debugger/src/java/flex/tools/debugger/cli/fdb_pt.properties
+++ b/modules/debugger/src/java/flex/tools/debugger/cli/fdb_pt.properties
@@ -25,7 +25,7 @@
 
 defaultBuildName=desenvolvimento
 about=Apache fdb (Flash Player Debugger) [build ${build}]
-copyright=Copyright 2013 The Apache Software Foundation. Todos os direitos reservados.
+copyright=Copyright 2016 The Apache Software Foundation. Todos os direitos reservados.
 noResponseException=O Player n\u00e3o respondeu ao comando como esperado; comando anulado.
 notSuspendedException=N\u00e3o \u00e9 poss\u00edvel emitir o comando enquanto o Player est\u00e1 em execu\u00e7\u00e3o
 illegalStateException=Comando inv\u00e1lido sem uma sess\u00e3o.
diff --git a/modules/debugger/src/java/flex/tools/debugger/cli/fdb_ru.properties b/modules/debugger/src/java/flex/tools/debugger/cli/fdb_ru.properties
index 1dd90ae..cec27cc 100644
--- a/modules/debugger/src/java/flex/tools/debugger/cli/fdb_ru.properties
+++ b/modules/debugger/src/java/flex/tools/debugger/cli/fdb_ru.properties
@@ -25,7 +25,7 @@
 
 defaultBuildName=\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430
 about=Apache fdb (\u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a Flash Player) [\u0441\u0431\u043e\u0440\u043a\u0430 ${build}]
-copyright=Copyright 2013 The Apache Software Foundation. All rights reserved.
+copyright=Copyright 2016 The Apache Software Foundation. All rights reserved.
 noResponseException=\u041f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043e\u0442\u0432\u0435\u0442\u0438\u043b \u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c; \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u0440\u0435\u0440\u0432\u0430\u043d\u043e.
 notSuspendedException=\u041a\u043e\u043c\u0430\u043d\u0434\u0443 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u0435\u043b\u044f
 illegalStateException=\u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u0439 \u0431\u0435\u0437 \u0441\u0435\u0430\u043d\u0441\u0430.
diff --git a/modules/debugger/src/java/flex/tools/debugger/cli/fdb_sv.properties b/modules/debugger/src/java/flex/tools/debugger/cli/fdb_sv.properties
index 539a5e7..7109382 100644
--- a/modules/debugger/src/java/flex/tools/debugger/cli/fdb_sv.properties
+++ b/modules/debugger/src/java/flex/tools/debugger/cli/fdb_sv.properties
@@ -25,7 +25,7 @@
 
 defaultBuildName=utveckling
 about=Apache fdb (Flash Player Debugger) [build ${build}]
-copyright=Copyright 2013 The Apache Software Foundation. Med ensamr\u00e4tt.
+copyright=Copyright 2016 The Apache Software Foundation. Med ensamr\u00e4tt.
 noResponseException=Spelaren svarade inte p\u00e5 kommandot som f\u00f6rv\u00e4ntat. Kommandot har avbrutits.
 notSuspendedException=Du kan inte ange kommandon n\u00e4r spelaren k\u00f6rs.
 illegalStateException=Kommandot \u00e4r inte giltigt utan session.
diff --git a/modules/debugger/src/java/flex/tools/debugger/cli/fdb_zh_CN.properties b/modules/debugger/src/java/flex/tools/debugger/cli/fdb_zh_CN.properties
index 8e4658c..a15e848 100644
--- a/modules/debugger/src/java/flex/tools/debugger/cli/fdb_zh_CN.properties
+++ b/modules/debugger/src/java/flex/tools/debugger/cli/fdb_zh_CN.properties
@@ -25,7 +25,7 @@
 
 defaultBuildName=\u5f00\u53d1
 about=Apache fdb\uff08Flash Player \u8c03\u8bd5\u5668\uff09[\u5185\u90e8\u7248\u672c ${build}]
-copyright=Copyright 2013 The Apache Software Foundation. All rights reserved.
+copyright=Copyright 2016 The Apache Software Foundation. All rights reserved.
 noResponseException=Player \u672a\u6309\u9884\u671f\u65b9\u5f0f\u54cd\u5e94\u547d\u4ee4\uff1b\u547d\u4ee4\u5df2\u5f02\u5e38\u7ec8\u6b62\u3002
 notSuspendedException=Player \u5904\u4e8e\u8fd0\u884c\u72b6\u6001\u65f6\u65e0\u6cd5\u53d1\u51fa\u547d\u4ee4
 illegalStateException=\u5982\u679c\u6ca1\u6709\u4f1a\u8bdd\uff0c\u5219\u547d\u4ee4\u65e0\u6548\u3002
diff --git a/modules/debugger/src/java/flex/tools/debugger/cli/fdb_zh_TW.properties b/modules/debugger/src/java/flex/tools/debugger/cli/fdb_zh_TW.properties
index 452663f..eb89bdd 100644
--- a/modules/debugger/src/java/flex/tools/debugger/cli/fdb_zh_TW.properties
+++ b/modules/debugger/src/java/flex/tools/debugger/cli/fdb_zh_TW.properties
@@ -25,7 +25,7 @@
 
 defaultBuildName=\u958b\u767c
 about=Apache fdb (Flash Player \u9664\u932f\u7a0b\u5f0f) [\u7d44\u5efa ${build}]
-copyright=Copyright 2013 The Apache Software Foundation. All rights reserved.
+copyright=Copyright 2016 The Apache Software Foundation. All rights reserved.
 noResponseException=Player \u672a\u5982\u9810\u671f\u56de\u61c9\u6307\u4ee4\uff1b\u6307\u4ee4\u5df2\u4e2d\u6b62\u3002
 notSuspendedException=Player \u6b63\u5728\u57f7\u884c\u6642\u7121\u6cd5\u767c\u51fa\u6307\u4ee4
 illegalStateException=\u5982\u679c\u6c92\u6709\u5de5\u4f5c\u968e\u6bb5\uff0c\u6307\u4ee4\u5c31\u7121\u6548\u3002
diff --git a/modules/downloads.xml b/modules/downloads.xml
index 92cf276..068b960 100644
--- a/modules/downloads.xml
+++ b/modules/downloads.xml
@@ -46,7 +46,9 @@
     <property name="maven.search.url" value="https://search.maven.org/remotecontent?filepath="/>
     <property name="flexToolApi.name" value="flex-tool-api"/>
     <property name="flexToolApi.version" value="1.0.0"/>
-    
+    <property name="blazeds.name" value="flex-messaging-common"/>
+    <property name="blazeds.version" value="4.7.2"/>
+
 	<!--
 	   Notes:
 	       For Apache, the JARS must be removed from the repository.
@@ -86,7 +88,7 @@
         they are each downloaded only if they don't already exist. 
     -->
     
-	<target name="main" depends="batik-jars, commons-jars, javacc-jar, saxon9-jar, velocity-jars, xalan-jar, xerces-jars, flex-tool-api-jar"
+	<target name="main" depends="batik-jars, commons-jars, javacc-jar, saxon9-jar, velocity-jars, xalan-jar, xerces-jars, flex-tool-api-jar, blazeds-jar"
 		description="Downloads all the required thirdparty JARs"/>
 
     <!--
@@ -409,19 +411,11 @@
         unless="javacc.jar.exists" 
         description="Downloads and copies javacc.jar to the lib directory.">
 
-        <antcall target="download-zip">
-          <param name="srcUrl" value="https://java.net/downloads/javacc"/>
-          <param name="zipFile" value="javacc-5.0.tar.gz"/>
-          <param name="srcJarPath" value="javacc-5.0/bin/lib/javacc.jar"/>
+        <antcall target="download-jar">
+          <param name="srcUrl" value="http://search.maven.org/remotecontent?filepath=net/java/dev/javacc/javacc/5.0"/>
+          <param name="srcJarFile" value="javacc-5.0.jar"/>
           <param name="destJarFile" value="${lib.ext.dir}/javacc.jar"/>
         </antcall>
-        <copy todir="${lib.ext.dir}">
-            <fileset dir="${download.dir}/javacc-5.0">
-                <include name="LICENSE"/>
-            </fileset>            
-            <globmapper from="*" to="javacc-*"/>
-        </copy>
-        <delete dir="${download.dir}/javacc-5.0"/>
     </target>
 
 	<!--
@@ -608,4 +602,22 @@
         <copy file="${download.dir}/flex-tool-api.jar" toDir="${lib.ext.dir}" verbose="true"/>
     </target>
 
+    <!--
+        blazeds
+    -->
+
+    <target name="blazeds-jar-check" description="Checks if flex-messaging-common.jar is in lib directory.">
+        <available file="${lib.ext.dir}/flex-messaging-common.jar" property="blazeds.jar.exists"/>
+    </target>
+
+    <target name="blazeds-jar" depends="blazeds-jar-check" unless="blazeds.jar.exists"
+            description="Downloads and copies flex-messaging.jar to the lib directory.">
+
+        <get src="${maven.search.url}/org/apache/flex/blazeds/${blazeds.name}/${blazeds.version}/${blazeds.name}-${blazeds.version}.jar"
+             dest="${download.dir}/flex-messaging-common.jar"
+             verbose="false"/>
+
+        <copy file="${download.dir}/flex-messaging-common.jar" toDir="${lib.ext.dir}" verbose="true"/>
+    </target>
+
 </project>
diff --git a/modules/flex-messaging-common/build.xml b/modules/flex-messaging-common/build.xml
deleted file mode 100644
index d7d7a47..0000000
--- a/modules/flex-messaging-common/build.xml
+++ /dev/null
@@ -1,98 +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.
-
--->
-
-<project name="flex-messaging-common" default="main" basedir=".">
-	<property name="FLEX_HOME" location="${basedir}/../.."/>
-	
-    <property file="${FLEX_HOME}/env.properties"/>
-    <property environment="env"/>
-	<property file="${FLEX_HOME}/local.properties"/>
-	<property file="${FLEX_HOME}/build.properties"/>
-
-	<property name="output.file" value="${FLEX_HOME}/lib/flex-messaging-common.jar"/>
-	<property name="flexTasks.location" value="${FLEX_HOME}/lib/flexTasks.jar"/>
-	<property name="project.uri" value="library://ns.adobe.com/flashx/textLayout"/>
-
-    <available file="${FLEX_HOME}/../flex-blazeds/modules/remoting"
-            type="dir" 
-            property="BLAZEDS_HOME"
-            value="${FLEX_HOME}/../flex-blazeds" />
-
-    <available file="${FLEX_HOME}/../blazeds/modules/remoting"
-            type="dir" 
-            property="BLAZEDS_HOME"
-            value="${FLEX_HOME}/../blazeds" />
-
-    <available file="${basedir}/common/src"
-            type="dir" 
-            property="src.folder.exists"/>
-
-    <available file="${basedir}/common/src"
-            type="dir" 
-            property="BLAZEDS_HOME"
-            value="${basedir}/common" />
-				
-	<target name="main" depends="check-blazeds-home,clean,compile,compile.external" description="Clean build of flex-messaging-common.jar">
-	</target>
-
-    <target name="check-blazeds-home" unless="BLAZEDS_HOME"
-        description="Check BLAZEDS_HOME is a directory.">
-        
-        <echo message="BLAZEDS_HOME is ${env.BLAZEDS_HOME}"/>
-
-        <available file="${env.BLAZEDS_HOME}"
-            type="dir" 
-            property="BLAZEDS_HOME"
-            value="${env.BLAZEDS_HOME}"/>
-
-        <fail message="BLAZEDS_HOME must be set correctly for a release build"
-            unless="BLAZEDS_HOME"/>
-    	
-    </target>
-	
-	
-	<target name="clean" depends="check-blazeds-home,clean-external" description="Deletes the jar">
-		<delete failonerror="false">
-			<fileset dir="${FLEX_HOME}/lib">
-				<include name="flex-messaging-common.jar"/>
-			</fileset>
-		</delete>
-	</target>
-
-	<target name="compile" description="Compiles flex-messaging-common.jar" if="src.folder.exists">
-        <ant dir="${basedir}/common">
-            <property name="lib.dir" value="${FLEX_HOME}/lib" />
-            <property name="module.dir" value="${basedir}/common" />
-            <property name="license.file" value="${basedir}/LICENSE" />
-            <property name="notice.file" value="${basedir}/NOTICE" />
-        </ant>
-     </target>
-
-    <target name="compile.external" description="Compile flex-messaging-common.jar in flex-blazeds repo" unless="src.folder.exists">
-        <ant dir="${BLAZEDS_HOME}" target="common">
-            <property name="lib.dir" value="${FLEX_HOME}/lib" />
-        </ant>
-    </target>
-    
-    <target name="clean-external" description="clean in flex-blazeds repo" unless="src.folder.exists">
-        <echo message="cleaning ${BLAZEDS_HOME}" />
-        <ant dir="${BLAZEDS_HOME}" target="clean"/>
-    </target>
-
-</project>
diff --git a/modules/fxgutils/build.xml b/modules/fxgutils/build.xml
index 508d9df..15f9b3d 100644
--- a/modules/fxgutils/build.xml
+++ b/modules/fxgutils/build.xml
@@ -56,8 +56,8 @@
     <target name="jar" depends="compile" description="compile and create fxgutils.jar">
         <mkdir dir="${lib.dir}" />
 		<mkdir dir="${module.classes}/META-INF"/>
-        <copy file="${FLEX_HOME}/LICENSE.base" tofile="${module.classes}/META-INF/LICENSE"/>
-        <copy file="${FLEX_HOME}/NOTICE.base" tofile="${module.classes}/META-INF/NOTICE"/>
+        <copy file="${FLEX_HOME}/licenseParts/LICENSE.base" tofile="${module.classes}/META-INF/LICENSE"/>
+        <copy file="${FLEX_HOME}/licenseParts/NOTICE.base" tofile="${module.classes}/META-INF/NOTICE"/>
         
 		<echo message="Building lib/fxgutils.jar"/>
         <jar file="${lib.dir}/fxgutils.jar" basedir="${module.classes}" includes="**/*">
diff --git a/modules/swfutils/build.xml b/modules/swfutils/build.xml
index f8792ad..c1e3d0d 100644
--- a/modules/swfutils/build.xml
+++ b/modules/swfutils/build.xml
@@ -52,8 +52,8 @@
     <target name="jar" depends="compile" description="compile and create swfutils.jar">
         <mkdir dir="${lib.dir}" />
 		<mkdir dir="${basedir}/classes/META-INF"/>
-        <copy file="${FLEX_HOME}/LICENSE.base" tofile="${basedir}/classes/META-INF/LICENSE"/>
-        <copy file="${FLEX_HOME}/NOTICE.base" tofile="${basedir}/classes/META-INF/NOTICE"/>
+        <copy file="${FLEX_HOME}/licenseParts/LICENSE.base" tofile="${basedir}/classes/META-INF/LICENSE"/>
+        <copy file="${FLEX_HOME}/licenseParts/NOTICE.base" tofile="${basedir}/classes/META-INF/NOTICE"/>
         
 		<echo message="Building lib/swfutils.jar"/>
         <jar file="${lib.dir}/swfutils.jar" basedir="${module.classes}" includes="**/*">
diff --git a/modules/thirdparty/xerces-patch/build.xml b/modules/thirdparty/xerces-patch/build.xml
index 79b99d7..e856af6 100644
--- a/modules/thirdparty/xerces-patch/build.xml
+++ b/modules/thirdparty/xerces-patch/build.xml
@@ -62,7 +62,7 @@
 
     <target name="jar" depends="compile" description="compile and create xercesPatch.jar">
         <mkdir dir="${module.classes}/META-INF"/>
-        <copy file="../../../LICENSE.base" tofile="${module.classes}/META-INF/LICENSE"/>
+        <copy file="../../../licenseParts/LICENSE.base" tofile="${module.classes}/META-INF/LICENSE"/>
         <!--use copy of xerces NOTICE stored in our repo -->
         <!--<copy file="../../../NOTICE" todir="${module.classes}/META-INF"/>-->
 
diff --git a/mustella/as3/src/mustella/CompareBitmap.as b/mustella/as3/src/mustella/CompareBitmap.as
index d80841c..52c4df86 100644
--- a/mustella/as3/src/mustella/CompareBitmap.as
+++ b/mustella/as3/src/mustella/CompareBitmap.as
@@ -393,6 +393,13 @@
             width = target.width * target.root.scaleX;
             height = target.height * target.root.scaleY;
         }
+        trace("getTargetSize: height: ", target.height);
+        trace("getTargetSize: root.height: ", target.root.height);
+        trace("getTargetSize: stageHeight: ", target.stage.stageHeight);
+        try {
+        trace("getTargetSize: loaderInfo.height: ", target.loaderInfo.height);
+        } catch (e:Error) {};
+        
 		return new Point(width, height);
 	}
 
diff --git a/mustella/as3/src/mustella/ExcludeFileLocation.as b/mustella/as3/src/mustella/ExcludeFileLocation.as
index 7b5ee20..ee5ce6f 100644
--- a/mustella/as3/src/mustella/ExcludeFileLocation.as
+++ b/mustella/as3/src/mustella/ExcludeFileLocation.as
@@ -123,8 +123,6 @@
 
 		triedBrowser = true;
 
-		var currentOS:String = Capabilities.os;
-
 		var useFile:String = "http://localhost/" + excludeFile;
 
 		trace ("try excludes from here: " + useFile);
@@ -169,8 +167,6 @@
 
 		trace ("excludes loadTryFile " + new Date().toString());
 
-		var currentOS:String = Capabilities.os;
-
 		var useFile:String;
 
 		useFile = mustellaTestDir +"/" + excludeFile;
@@ -212,7 +208,7 @@
 		delimiter = new RegExp("\n", "g");
 		data = data.replace(delimiter, ",");
 
-		UnitTester.excludeList = new Object();
+		UnitTester.excludeList = {};
 		var items:Array = data.split(",");
 		var n:int = items.length;
 		for (var i:int = 0; i < n; i++)
@@ -220,7 +216,6 @@
 			var s:String = items[i];
 			if (s.length)
 				UnitTester.excludeList[s] = 1;
-
 		}
 		
 		UnitTester.waitForExcludes = false;
diff --git a/mustella/as3/src/mustella/IncludeFileLocation.as b/mustella/as3/src/mustella/IncludeFileLocation.as
index 4d41dfe..6517c27 100644
--- a/mustella/as3/src/mustella/IncludeFileLocation.as
+++ b/mustella/as3/src/mustella/IncludeFileLocation.as
@@ -83,7 +83,7 @@
 		delimiter = new RegExp("\n", "g");
 		data = data.replace(delimiter, ",");
 
-		UnitTester.includeList = new Object();
+		UnitTester.includeList = {};
 		var items:Array = data.split(",");
 		var n:int = items.length;
 		for (var i:int = 0; i < n; i++)
diff --git a/mustella/as3/src/mustella/IncludeListTextFile.as b/mustella/as3/src/mustella/IncludeListTextFile.as
index 44a120f..7be8649 100644
--- a/mustella/as3/src/mustella/IncludeListTextFile.as
+++ b/mustella/as3/src/mustella/IncludeListTextFile.as
@@ -56,7 +56,7 @@
 		delimiter = new RegExp("\n", "g");
 		data = data.replace(delimiter, ",");
 
-		UnitTester.includeList = new Object();
+		UnitTester.includeList = {};
 		var items:Array = data.split(",");
 		var n:int = items.length;
 		for (var i:int = 0; i < n; i++)
diff --git a/mustella/as3/src/mustella/TestCase.as b/mustella/as3/src/mustella/TestCase.as
index 44884e4..db6e937 100644
--- a/mustella/as3/src/mustella/TestCase.as
+++ b/mustella/as3/src/mustella/TestCase.as
@@ -181,7 +181,7 @@
 	 *
 	 *  @param root The SystemManager
 	 *  @param timer The shared Timer;
-	 *  @param the UnitTester that contains these tests
+	 *  @param context the UnitTester that contains these tests
 	 */
 	public function runTest(root:DisplayObject, timer:Timer, context:UnitTester):Boolean
 	{
diff --git a/mustella/as3/src/mustella/WaitForCondition.as b/mustella/as3/src/mustella/WaitForCondition.as
new file mode 100755
index 0000000..067d615
--- /dev/null
+++ b/mustella/as3/src/mustella/WaitForCondition.as
@@ -0,0 +1,150 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 {
+
+import flash.display.DisplayObject;
+import flash.events.EventDispatcher;
+import flash.utils.getTimer;
+
+import mx.core.mx_internal;
+use namespace mx_internal;
+
+/**
+ *  Instead of a property, we use an event so the MXML
+ *  compiler will wrap the code in a function for us
+ */
+[Event(name="condition", type="flash.events.Event")]
+
+/**
+ *  Vector of conditionalValue objects.
+ */
+[DefaultProperty("conditionalValues")]
+
+/**
+ *  WaitForCondition - waits for a condition to become true before continuing.
+ * 
+ *  MXML attributes:
+ *  target (not used)
+ *  condition
+ *  timeout (optional)
+ */
+public class WaitForCondition extends TestStep
+{
+    public var conditionalValues:Vector.<ConditionalValue> = null;
+
+    /**
+     *  The value the method should return
+     */
+    public var value:Boolean;
+    
+    private var dispatcher:EventDispatcher;
+    
+	/**
+	 *  Test the value of a property, log result if failure.
+	 */
+	override public function execute(root:DisplayObject, context:UnitTester, testCase:TestCase, testResult:TestResult):Boolean
+	{
+        super.execute(root, context, testCase, testResult);
+
+        var cv:ConditionalValue = null;
+        
+        context.resetValue();
+        dispatcher = this;
+        
+        // Use MultiResult to determine the proper value (or valueExpression, below).
+        if(conditionalValues){
+            cv = new MultiResult().chooseCV(conditionalValues);
+            if(cv){
+                value = cv.value;
+                dispatcher = cv;
+            }
+        }
+
+        if (checkCondition())
+		{
+			testCase.setExpirationTime(getTimer() + timeout);
+			return false;
+		} 
+		else 
+		{
+			testCase.setExpirationTime(0);
+			stepComplete();
+			return true;
+		}
+
+	}
+
+	/**
+	 *  customize string representation
+	 */
+	override public function toString():String
+	{
+		var s:String = "WaitForCondition (condition cannot be shown) ";
+		return s;
+	}
+
+    /**
+     *  Called by the test case if you time out
+     */
+    override public function timeoutCallback():void
+    {
+        testResult.doFail("Timeout waiting for condition: (condition cannot be shown) " );
+        stepComplete();
+    }
+
+    /**
+     *  Evaluate the condition.
+     *  
+     *  @return The value of the condition, true or false.
+     */
+    private function checkCondition():Boolean
+    {
+        // Execute the method.
+        try
+        {
+            dispatchEvent(new RunCodeEvent("condition", root["document"], context, testCase, testResult));
+        }
+        catch (e:Error)
+        {
+            TestOutput.logResult("Exception thrown executing method.");
+            testResult.doFail (e.getStackTrace());
+            return false;
+        }
+
+        if (!context.valueChanged)
+            TestOutput.logResult("WARNING: value was not set by method.  'value=' missing from expression?");
+
+        var methodValue:Object = context.value;
+        
+        if (!methodValue)
+        {
+            UnitTester.callback = checkCondition;
+            return true;
+        }
+        else
+        {
+            testCase.setExpirationTime(0);
+            stepComplete();                
+            return false;
+        }
+
+    }
+    
+}
+}
diff --git a/mustella/build.xml b/mustella/build.xml
index c6d9c99..58f317c 100644
--- a/mustella/build.xml
+++ b/mustella/build.xml
@@ -1855,6 +1855,7 @@
             <arg value="TypeInfo"/>
             <arg value="UnitTester"/>
             <arg value="VerboseMode"/>
+            <arg value="WaitForCondition"/>
             <arg value="WaitForEffectsToEnd"/>
             <arg value="WaitForEvent"/>
             <arg value="WaitForLayoutManager"/>
diff --git a/mustella/jenkins.sh b/mustella/jenkins.sh
index 209bef7..1b6cec7 100755
--- a/mustella/jenkins.sh
+++ b/mustella/jenkins.sh
@@ -50,8 +50,8 @@
 # Toggle between versions:
 # 11.1 is the default version
 # 11.7 is a much used version?
-# 13 is the current "long term support" version
-# 16 is the beta and/or current version
+# 18 is the current "long term support" version
+# 19 is the current "consumer" version
 # Note: the previous release and current beta versions of AIR are both '4',
 #       so to make the distinction, the beta version is '4.01' on the VM
 if [ "$FLASH_VERSION" == "11.1" ]
@@ -61,14 +61,14 @@
   AIR_SDK_DIR=3.7
 elif [ "$FLASH_VERSION" == "11.7" ]
 then
-  FLASH_VERSION=13.0
-  AIR_VERSION=4.0
-  AIR_SDK_DIR=4.0
-elif [ "$FLASH_VERSION" == "13.0" ]
+  FLASH_VERSION=18.0
+  AIR_VERSION=18.0
+  AIR_SDK_DIR=18.0
+elif [ "$FLASH_VERSION" == "18.0" ]
 then
-  FLASH_VERSION=16.0
-  AIR_VERSION=16
-  AIR_SDK_DIR=16
+  FLASH_VERSION=19.0
+  AIR_VERSION=19.0
+  AIR_SDK_DIR=19.0
 else
   FLASH_VERSION=11.1
   AIR_VERSION=3.7
@@ -90,11 +90,11 @@
   11.7)
     export FLASHPLAYER_DEBUGGER="C:\\ApacheFlex\\dependencies\\FlashPlayer_Debug\\flashplayer11_7r700_232_win_sa_debug.exe"
   ;;
-  13.0)
-    export FLASHPLAYER_DEBUGGER="C:\\ApacheFlex\\dependencies\\FlashPlayer_Debug\\flashplayer13_0r0_214_win_sa_debug.exe"
+  18.0)
+    export FLASHPLAYER_DEBUGGER="C:\\ApacheFlex\\dependencies\\FlashPlayer_Debug\\flashplayer_18_sa_debug.exe"
   ;;
-  16.0)
-    export FLASHPLAYER_DEBUGGER="C:\\ApacheFlex\\dependencies\\FlashPlayer_Debug\\flashplayer_16_sa_debug.exe"
+  19.0)
+    export FLASHPLAYER_DEBUGGER="C:\\ApacheFlex\\dependencies\\FlashPlayer_Debug\\flashplayer_19_sa_debug.exe"
   ;;
   *)
     echo "No valid Flash Player Debugger variable value could be parsed."
diff --git a/mustella/tests/LangPacks/Japanese/tests/runtimeErrorTests.mxml b/mustella/tests/LangPacks/Japanese/tests/runtimeErrorTests.mxml
index a168bf8..cde5798 100644
--- a/mustella/tests/LangPacks/Japanese/tests/runtimeErrorTests.mxml
+++ b/mustella/tests/LangPacks/Japanese/tests/runtimeErrorTests.mxml
@@ -59,7 +59,7 @@
 
     private function triggerMissingCardNumberRTE():void{
         var ccv:CreditCardValidator = new CreditCardValidator();
-        var obj:Object = new Object();
+        var obj:Object = {};
         obj.cardType=CreditCardValidatorCardType.MASTER_CARD;
         obj.cardNumber=null;
         CreditCardValidator.validateCreditCard(ccv, obj, "");
@@ -145,40 +145,45 @@
     	s.findItem(null, null, null);
     }
 
-    private function cmpFn(o1:Object, o2:Object):void{
+    private function cmpFn(o1:Object, o2:Object):void
+    {
     	
     }
 
     private function triggerFindConditionRTE():void{
-    	var a:Array = new Array();
-    	var s:Sort = new Sort();
-    	a.push("a");
+    	var a:Array = [];
+        a.push("a");
+
+        var s:Sort = new Sort();
     	s.compareFunction = cmpFn;
-    	var sfArray:Array = new Array();
+
+        var sfArray:Array = [];
     	sfArray.push(new SortField("0"));
     	sfArray.push(new SortField("field1"));
-    	var o:Object = new Object();
+
+    	var o:Object = {};
     	o["0"] = undefined;
     	o["field1"] = 2;
+
     	s.fields = sfArray;
     	s.findItem(a, o, null);
     }
 
     private function triggerFindRestrictionRTE():void{
-    	var a:Array = new Array();
+    	var a:Array = [];
     	var s:Sort = new Sort();
     	a.push("a");
     	s.compareFunction = cmpFn;
-    	var sfArray:Array = new Array();
+    	var sfArray:Array = [];
     	sfArray.push(new SortField("0"));
-    	var o:Object = new Object();
+    	var o:Object = {};
     	o["0"] = undefined;
     	s.fields = sfArray;
     	s.findItem(a, o, null);
     }
 
     private function triggerUnknownModeRTE():void{
-    	var a:Array = new Array();
+    	var a:Array = [];
     	var s:Sort = new Sort();
     	a.push(new Object());
     	s.compareFunction = cmpFn;
@@ -186,11 +191,11 @@
     }
 
     private function triggerNonUniqueRTE():void{
-    	var a:Array = new Array();
+    	var a:Array = [];
     	var s:Sort = new Sort();
     	a.push("a");
     	a.push("b");
-    	var sfArray:Array = new Array();
+    	var sfArray:Array = [];
     	sfArray.push(new SortField("0"));
     	s.fields = sfArray;
     	s.unique = true;
@@ -198,13 +203,13 @@
     }
 
     private function triggerNoComparatorSortFieldRTE():void{
-    	var a:Array = new Array();
+    	var a:Array = [];
     	var s:Sort = new Sort();
     	var o2:Object = new Object();
     	o2["0"] = new Bitmap();
     	a.push(null);
     	a.push(o2);
-    	var sfArray:Array = new Array();
+    	var sfArray:Array = [];
     	sfArray.push(new SortField("0"));
     	sfArray.push(new SortField("1"));
     	s.fields = sfArray;
@@ -214,7 +219,7 @@
 
     private function triggerInvalidTypeRTE():void{
     	var x:XMLListAdapter = new XMLListAdapter();
-    	x.addItemAt(new Object(), 0);
+    	x.addItemAt({}, 0);
     }
 
     private function triggerColumnNotFoundRTE():void{
diff --git a/mustella/tests/collections/IViewCursor/SWFs/IViewCursorMain.mxml b/mustella/tests/collections/IViewCursor/SWFs/IViewCursorMain.mxml
index c00c1c8..c1ce574 100644
--- a/mustella/tests/collections/IViewCursor/SWFs/IViewCursorMain.mxml
+++ b/mustella/tests/collections/IViewCursor/SWFs/IViewCursorMain.mxml
@@ -107,9 +107,7 @@
 	    public function initPlayers():void 
 	    {
  	                var sortArr:Sort = new Sort();
-	                var f:SortField = new SortField("jerseyNumber");
-	                f.descending = true;
-	                f.numeric = true;
+	                var f:SortField = new SortField("jerseyNumber", false, true, true);
 	                sortArr.fields = [f];
 	                colArr_AS.sort = sortArr;
 	                colArr_AS.refresh();
diff --git a/mustella/tests/components/DataGrid/DataGrid_HaloSkin/SWFs/DataGridApp_halo.mxml b/mustella/tests/components/DataGrid/DataGrid_HaloSkin/SWFs/DataGridApp_halo.mxml
index fd56d26..a93ad2f 100644
--- a/mustella/tests/components/DataGrid/DataGrid_HaloSkin/SWFs/DataGridApp_halo.mxml
+++ b/mustella/tests/components/DataGrid/DataGrid_HaloSkin/SWFs/DataGridApp_halo.mxml
@@ -749,20 +749,18 @@
 		var dg:DataGrid = DataGrid(event.target);
 		var dgc:DataGridColumn = dg.columns[event.columnIndex] as DataGridColumn;
 		var s:Sort = new Sort();
-		var sf:SortField = new SortField(dgc.dataField);
+
+        var numeric:Object = null;
+        if(dgc.headerText == "numeric")
+            numeric = true;
+        else if(dgc.headerText == "alpha")
+            numeric = false;
+
+		var sf:SortField = new SortField(dgc.dataField, false, !dgc.sortDescending, numeric);
 		var dp:ICollectionView = dg.dataProvider as ICollectionView;
 
 		event.preventDefault();
-		
-		sf.descending = !dgc.sortDescending;
 
-		if(dgc.headerText == "numeric")
-			sf.numeric = true;
-		else if(dgc.headerText == "alpha")
-			sf.numeric = false;
-		else
-			sf.numeric = null;
-			
 		dgc.sortDescending = sf.descending;
 		s.fields = [ sf ];
 		
diff --git a/mustella/tests/components/DataGrid/DataGrid_SparkSkin/SWFs/DataGridApp.mxml b/mustella/tests/components/DataGrid/DataGrid_SparkSkin/SWFs/DataGridApp.mxml
index 007b3df..15ac9e9 100644
--- a/mustella/tests/components/DataGrid/DataGrid_SparkSkin/SWFs/DataGridApp.mxml
+++ b/mustella/tests/components/DataGrid/DataGrid_SparkSkin/SWFs/DataGridApp.mxml
@@ -763,20 +763,18 @@
 		var dg:DataGrid = DataGrid(event.target);
 		var dgc:DataGridColumn = dg.columns[event.columnIndex] as DataGridColumn;
 		var s:Sort = new Sort();
-		var sf:SortField = new SortField(dgc.dataField);
+
+        var numeric:Object = null;
+        if(dgc.headerText == "numeric")
+            numeric = true;
+        else if(dgc.headerText == "alpha")
+            numeric = false;
+
+		var sf:SortField = new SortField(dgc.dataField, false, !dgc.sortDescending, numeric);
 		var dp:ICollectionView = dg.dataProvider as ICollectionView;
 
 		event.preventDefault();
 		
-		sf.descending = !dgc.sortDescending;
-
-		if(dgc.headerText == "numeric")
-			sf.numeric = true;
-		else if(dgc.headerText == "alpha")
-			sf.numeric = false;
-		else
-			sf.numeric = null;
-			
 		dgc.sortDescending = sf.descending;
 		s.fields = [ sf ];
 		
diff --git a/mustella/tests/mobile/components/ActionBar/styles/ActionBar_Styles.mxml b/mustella/tests/mobile/components/ActionBar/styles/ActionBar_Styles.mxml
index d1e7594..d590eda 100644
--- a/mustella/tests/mobile/components/ActionBar/styles/ActionBar_Styles.mxml
+++ b/mustella/tests/mobile/components/ActionBar/styles/ActionBar_Styles.mxml
@@ -198,7 +198,7 @@
 			</setup>
 			<body>
 				<AssertStyleValue target="actionBar.titleDisplay" styleName="textDecoration" value="underline" />
-				<CompareBitmap url="../styles/baselines" target="actionBar" numColorVariances="2" ignoreMaxColorVariance="true">
+				<CompareBitmap url="../styles/baselines" target="actionBar" numColorVariances="14" ignoreMaxColorVariance="true">
 					<ConditionalValue deviceDensity="160" os="win"/>
 					<ConditionalValue deviceDensity="240" os="android"/>
 					<ConditionalValue deviceDensity="320" os="win"/>
