Merge branch 'develop' into release4.16.0
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 4701df2..c6ac5da 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -3,6 +3,9 @@
 
 Apache Flex SDK 4.16.0
 ----------------------
+Alex Harui, Andy Dufilie, Aron Nopanen, Dany Dhondt, Harbs, Judah Frangipane,
+Justin Mclean, Mark Kessler, Maxime Cowez, Mihai Chira, Olaf Krüger, OmPrakash Muppirala,
+Peter Marcoen, Stephan Plath, Sugan Naicker, Tamás Nepusz
 
 Apache Flex SDK 4.15.0
 ----------------------
diff --git a/README b/README
index 9e65b3b..5fef11d 100644
--- a/README
+++ b/README
@@ -21,7 +21,7 @@
 
     http://flex.apache.org/
 
-The Apache Flex SDK 4.15 is a follow up release to version 4.14.1. It is
+The Apache Flex SDK 4.16 is a follow up release to version 4.15. It is
 compatible with most code written for the original Adobe Flex 4.6 SDK.
 
 
diff --git a/RELEASE_NOTES b/RELEASE_NOTES
index 12ecd42..86545a7 100644
--- a/RELEASE_NOTES
+++ b/RELEASE_NOTES
@@ -3,23 +3,97 @@
 
 New Features
 ____________
-None yet
+FLEX-35122  Update to Font Awesome 4.7
+
+AIR and Flash Player Support
+----------------------------
+- Support Flash Player 21.0, 22.0 and 23.0
+- Support for AIR 21.0, 22.0 and 23.0
 
 Bug Fixes
 ---------
-None yet
+FLEX-35165  Remove bundling of Apache 1.0 licensed software
+FLEX-35126  DropDownController inside a pop up still listens to MOUSE_DOWN and
+		MOUSE_DOWN_SOMEWHERE after the popup has closed
+FLEX-35125  DropDownList inside a PopUpAnchor doesn't close when another DropDownList
+		is selected
+FLEX-35124  RTE 1009 in DropDownController.systemManager_mouseDownHandler() when inside
+		a PopUpAnchor and other item is removed on click
+FLEX-35123  DOM XSS vulnerability in history.js
+FLEX-35109  falcon compiler's build.xml error
+FLEX-35106  Incorrect date in datefield popup for fr_FR locale
+FLEX-35100  TextFlowLine.recreateTextLine() throws a null object reference error
+FLEX-35099  BusyIndicator has the wrong wrong rotation centre for iOS
+FLEX-35097  How to compile AIR beta 22 with Flex SDK?
+FLEX-35082  moveIndexFindRow doesn't accept integer values
+FLEX-35078  Fatal when SelectionManager tries to reapply selection onto changed textFlow
+FLEX-35056  Pressing escape on s:Alert causes a RangeError when Alert.CANCEL is passed
+		as defaultButtonFlag
+FLEX-35046  Broken icon using FlatSpark ButtonIcon on mobile apps
+FLEX-35045  Flatspark ButtonIcon - icon does not display
+FLEX-35043  Unexpected behaviour of ListCollectionView.itemUpdated() when only one
+		parameter supplied
+FLEX-35042  Mistake in example for Pattern 'O' in ASDoc for DateFormatter.formatString
+FLEX-35039  ListCollectionView.setItemAt places the item in the wrong position if there
+		are duplicate items in the collection
+FLEX-35037  Add ArrayCollection unit tests donated by Justin
+FLEX-35031  HierarchicalCollectionViewCursor cannot find sealed class instance
+FLEX-35028  Error in DataGrid getHeaderRendererAt(-1)
+FLEX-35025  Validator results cannot be intercepted if the value is null
+FLEX-34935  Copy From Word Document And Pasting Into TextRegion Not Working Properly
+FLEX-34926  Misplaced [PercentProxy] metatag in GridColumn
+FLEX-34738  Not delete BusyIndicator
+FLEX-34811  Email validator show allow apostrophe in email address
+FLEX-34698  Flatspark ButtonIcon: Introduce 'iconFontPlacement' style
+FLEX-34391  ScrollableStageText with large y value crashes app
+FLEX-34088  CalloutButton closes when selecting an item in a spark Dropdown
+FLEX-33646  The "required" property on Validator should be a getter/setter
+FLEX-33311  Null pointer fatal in ConstraintLayout when executing Transition on
+		DropDownList
+FLEX-33058  RTE in HierarchicalCollectionViewCursor when a refresh occurs and old cursor
+		had an enumerable property that new cursor item doesn't
+FLEX-31948  When all the columns are invisible, pressing any character Key throws RTE
+FLEX-26808  s:DataGrid Drag and Drop of multiple items doesn't work
+FLEX-20313  SelectItem on AdvancedDataGrid use weird code
+
+
+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.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
+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
+FLEX-34941    Allow custom validators to use the triggerEvent
+FLEX-34945    Validators now able to validate nested properties
 
 AIR and Flash Player Support
 ----------------------------
diff --git a/frameworks/build.xml b/frameworks/build.xml
index c902ec5..e06a349 100644
--- a/frameworks/build.xml
+++ b/frameworks/build.xml
@@ -232,6 +232,15 @@
 		<condition property="playerglobal.swfversion" value="31">
 			<equals arg1="${playerglobal.version}" arg2="20.0" />
 		</condition>
+		<condition property="playerglobal.swfversion" value="32">
+			<equals arg1="${playerglobal.version}" arg2="21.0" />
+		</condition>
+		<condition property="playerglobal.swfversion" value="33">
+			<equals arg1="${playerglobal.version}" arg2="22.0" />
+		</condition>
+		<condition property="playerglobal.swfversion" value="34">
+			<equals arg1="${playerglobal.version}" arg2="23.0" />
+		</condition>
 	</target>	
 
     <!--
diff --git a/frameworks/downloads.xml b/frameworks/downloads.xml
index 86536f1..82d12a4 100644
--- a/frameworks/downloads.xml
+++ b/frameworks/downloads.xml
@@ -312,7 +312,7 @@
 
     <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"
+        <get src="https://sourceforge.net/adobe/flexsdk/code/HEAD/tree/trunk/lib/afe.jar?format=raw"
             dest="${download.dir}/${adobe.afe.file}" ignoreerrors="true"/>
         <antcall target="get-from-cache-if-needed" >
             <param name="filename" value="${adobe.afe.file}" />
@@ -324,7 +324,7 @@
 
     <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"
+        <get src="https://sourceforge.net/adobe/flexsdk/code/HEAD/tree/trunk/lib/aglj40.jar?format=raw"
              dest="${download.dir}/${adobe.aglj40.file}" ignoreerrors="true"/>
          <antcall target="get-from-cache-if-needed" >
              <param name="filename" value="${adobe.aglj40.file}" />
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 3ed7f8b..401ec0f 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 87cfc06..2218cc5 100644
--- a/frameworks/projects/flatspark/src/flatspark/utils/AwesomeUtils.as
+++ b/frameworks/projects/flatspark/src/flatspark/utils/AwesomeUtils.as
@@ -1,19 +1,17 @@
 /**	
- 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.	
- */
+The MIT License (MIT)
+Copyright (c) 2016 by Dave Gandy
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, 
+and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
+INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR 
+THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
 
 package flatspark.utils
 {
@@ -26,6 +24,10 @@
 		}
 		
 		public static const fa_500px:String = "\uf26e";
+		public static const fa_address_book:String = "\uf2b9";
+		public static const fa_address_book_o:String = "\uf2ba";
+		public static const fa_address_card:String = "\uf2bb";
+		public static const fa_address_card_o:String = "\uf2bc";
 		public static const fa_adjust:String = "\uf042";
 		public static const fa_adn:String = "\uf170";
 		public static const fa_align_center:String = "\uf037";
@@ -34,6 +36,7 @@
 		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_american_sign_language_interpreting:String = "\uf2a3";
 		public static const fa_anchor:String = "\uf13d";
 		public static const fa_android:String = "\uf17b";
 		public static const fa_angellist:String = "\uf209";
@@ -64,17 +67,24 @@
 		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_asl_interpreting:String = "\uf2a3";
+		public static const fa_assistive_listening_systems:String = "\uf2a2";
 		public static const fa_asterisk:String = "\uf069";
 		public static const fa_at:String = "\uf1fa";
+		public static const fa_audio_description:String = "\uf29e";
 		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_bandcamp:String = "\uf2d5";
 		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_bath:String = "\uf2cd";
+		public static const fa_bathtub:String = "\uf2cd";
+		public static const fa_battery:String = "\uf240";
 		public static const fa_battery_0:String = "\uf244";
 		public static const fa_battery_1:String = "\uf243";
 		public static const fa_battery_2:String = "\uf242";
@@ -100,6 +110,7 @@
 		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_blind:String = "\uf29d";
 		public static const fa_bluetooth:String = "\uf293";
 		public static const fa_bluetooth_b:String = "\uf294";
 		public static const fa_bold:String = "\uf032";
@@ -108,6 +119,7 @@
 		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_braille:String = "\uf2a1";
 		public static const fa_briefcase:String = "\uf0b1";
 		public static const fa_btc:String = "\uf15a";
 		public static const fa_bug:String = "\uf188";
@@ -210,6 +222,8 @@
 		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_deaf:String = "\uf2a4";
+		public static const fa_deafness:String = "\uf2a4";
 		public static const fa_dedent:String = "\uf03b";
 		public static const fa_delicious:String = "\uf1a5";
 		public static const fa_desktop:String = "\uf108";
@@ -220,18 +234,25 @@
 		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_drivers_license:String = "\uf2c2";
+		public static const fa_drivers_license_o:String = "\uf2c3";
 		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_eercast:String = "\uf2da";
 		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_open:String = "\uf2b6";
+		public static const fa_envelope_open_o:String = "\uf2b7";
 		public static const fa_envelope_square:String = "\uf199";
+		public static const fa_envira:String = "\uf299";
 		public static const fa_eraser:String = "\uf12d";
+		public static const fa_etsy:String = "\uf2d7";
 		public static const fa_eur:String = "\uf153";
 		public static const fa_euro:String = "\uf153";
 		public static const fa_exchange:String = "\uf0ec";
@@ -245,6 +266,7 @@
 		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_fa:String = "\uf2b4";
 		public static const fa_facebook:String = "\uf09a";
 		public static const fa_facebook_f:String = "\uf09a";
 		public static const fa_facebook_official:String = "\uf230";
@@ -279,6 +301,7 @@
 		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_first_order:String = "\uf2b0";
 		public static const fa_flag:String = "\uf024";
 		public static const fa_flag_checkered:String = "\uf11e";
 		public static const fa_flag_o:String = "\uf11d";
@@ -291,11 +314,13 @@
 		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_font_awesome:String = "\uf2b4";
 		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_free_code_camp:String = "\uf2c5";
 		public static const fa_frown_o:String = "\uf119";
 		public static const fa_futbol_o:String = "\uf1e3";
 		public static const fa_gamepad:String = "\uf11b";
@@ -314,15 +339,21 @@
 		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_gitlab:String = "\uf296";
 		public static const fa_gittip:String = "\uf184";
 		public static const fa_glass:String = "\uf000";
+		public static const fa_glide:String = "\uf2a5";
+		public static const fa_glide_g:String = "\uf2a6";
 		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_circle:String = "\uf2b3";
+		public static const fa_google_plus_official:String = "\uf2b3";
 		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_grav:String = "\uf2d6";
 		public static const fa_group:String = "\uf0c0";
 		public static const fa_h_square:String = "\uf0fd";
 		public static const fa_hacker_news:String = "\uf1d4";
@@ -339,6 +370,8 @@
 		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_handshake_o:String = "\uf2b5";
+		public static const fa_hard_of_hearing:String = "\uf2a4";
 		public static const fa_hashtag:String = "\uf292";
 		public static const fa_hdd_o:String = "\uf0a0";
 		public static const fa_header:String = "\uf1dc";
@@ -361,8 +394,12 @@
 		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_id_badge:String = "\uf2c1";
+		public static const fa_id_card:String = "\uf2c2";
+		public static const fa_id_card_o:String = "\uf2c3";
 		public static const fa_ils:String = "\uf20b";
 		public static const fa_image:String = "\uf03e";
+		public static const fa_imdb:String = "\uf2d8";
 		public static const fa_inbox:String = "\uf01c";
 		public static const fa_indent:String = "\uf03c";
 		public static const fa_industry:String = "\uf275";
@@ -400,6 +437,7 @@
 		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_linode:String = "\uf2b8";
 		public static const fa_linux:String = "\uf17c";
 		public static const fa_list:String = "\uf03a";
 		public static const fa_list_alt:String = "\uf022";
@@ -411,6 +449,7 @@
 		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_low_vision:String = "\uf2a8";
 		public static const fa_magic:String = "\uf0d0";
 		public static const fa_magnet:String = "\uf076";
 		public static const fa_mail_forward:String = "\uf064";
@@ -431,8 +470,10 @@
 		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_meetup:String = "\uf2e0";
 		public static const fa_meh_o:String = "\uf11a";
 		public static const fa_mercury:String = "\uf223";
+		public static const fa_microchip:String = "\uf2db";
 		public static const fa_microphone:String = "\uf130";
 		public static const fa_microphone_slash:String = "\uf131";
 		public static const fa_minus:String = "\uf068";
@@ -482,8 +523,9 @@
 		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:String = "\uf2ae";
 		public static const fa_pied_piper_alt:String = "\uf1a8";
+		public static const fa_pied_piper_pp:String = "\uf1a7";
 		public static const fa_pinterest:String = "\uf0d2";
 		public static const fa_pinterest_p:String = "\uf231";
 		public static const fa_pinterest_square:String = "\uf0d3";
@@ -496,6 +538,7 @@
 		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_podcast:String = "\uf2ce";
 		public static const fa_power_off:String = "\uf011";
 		public static const fa_print:String = "\uf02f";
 		public static const fa_product_hunt:String = "\uf288";
@@ -504,10 +547,13 @@
 		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_question_circle_o:String = "\uf29c";
+		public static const fa_quora:String = "\uf2c4";
 		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_ravelry:String = "\uf2d9";
 		public static const fa_rebel:String = "\uf1d0";
 		public static const fa_recycle:String = "\uf1b8";
 		public static const fa_reddit:String = "\uf1a1";
@@ -521,6 +567,7 @@
 		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_resistance:String = "\uf1d0";
 		public static const fa_retweet:String = "\uf079";
 		public static const fa_rmb:String = "\uf157";
 		public static const fa_road:String = "\uf018";
@@ -533,6 +580,7 @@
 		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_s15:String = "\uf2cd";
 		public static const fa_safari:String = "\uf267";
 		public static const fa_save:String = "\uf0c7";
 		public static const fa_scissors:String = "\uf0c4";
@@ -557,9 +605,12 @@
 		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_shower:String = "\uf2cc";
 		public static const fa_sign_in:String = "\uf090";
+		public static const fa_sign_language:String = "\uf2a7";
 		public static const fa_sign_out:String = "\uf08b";
 		public static const fa_signal:String = "\uf012";
+		public static const fa_signing:String = "\uf2a7";
 		public static const fa_simplybuilt:String = "\uf215";
 		public static const fa_sitemap:String = "\uf0e8";
 		public static const fa_skyatlas:String = "\uf216";
@@ -568,6 +619,10 @@
 		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_snapchat:String = "\uf2ab";
+		public static const fa_snapchat_ghost:String = "\uf2ac";
+		public static const fa_snapchat_square:String = "\uf2ad";
+		public static const fa_snowflake_o:String = "\uf2dc";
 		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";
@@ -613,6 +668,7 @@
 		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_superpowers:String = "\uf2dd";
 		public static const fa_superscript:String = "\uf12b";
 		public static const fa_support:String = "\uf1cd";
 		public static const fa_table:String = "\uf0ce";
@@ -622,6 +678,7 @@
 		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_telegram:String = "\uf2c6";
 		public static const fa_television:String = "\uf26c";
 		public static const fa_tencent_weibo:String = "\uf1d5";
 		public static const fa_terminal:String = "\uf120";
@@ -630,6 +687,18 @@
 		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_themeisle:String = "\uf2b2";
+		public static const fa_thermometer:String = "\uf2c7";
+		public static const fa_thermometer_0:String = "\uf2cb";
+		public static const fa_thermometer_1:String = "\uf2ca";
+		public static const fa_thermometer_2:String = "\uf2c9";
+		public static const fa_thermometer_3:String = "\uf2c8";
+		public static const fa_thermometer_4:String = "\uf2c7";
+		public static const fa_thermometer_empty:String = "\uf2cb";
+		public static const fa_thermometer_full:String = "\uf2c7";
+		public static const fa_thermometer_half:String = "\uf2c9";
+		public static const fa_thermometer_quarter:String = "\uf2ca";
+		public static const fa_thermometer_three_quarters:String = "\uf2c8";
 		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";
@@ -639,6 +708,8 @@
 		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_times_rectangle:String = "\uf2d3";
+		public static const fa_times_rectangle_o:String = "\uf2d4";
 		public static const fa_tint:String = "\uf043";
 		public static const fa_toggle_down:String = "\uf150";
 		public static const fa_toggle_left:String = "\uf191";
@@ -669,6 +740,7 @@
 		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_universal_access:String = "\uf29a";
 		public static const fa_university:String = "\uf19c";
 		public static const fa_unlink:String = "\uf127";
 		public static const fa_unlock:String = "\uf09c";
@@ -678,20 +750,28 @@
 		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_circle:String = "\uf2bd";
+		public static const fa_user_circle_o:String = "\uf2be";
 		public static const fa_user_md:String = "\uf0f0";
+		public static const fa_user_o:String = "\uf2c0";
 		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_vcard:String = "\uf2bb";
+		public static const fa_vcard_o:String = "\uf2bc";
 		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_viadeo:String = "\uf2a9";
+		public static const fa_viadeo_square:String = "\uf2aa";
 		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_control_phone:String = "\uf2a0";
 		public static const fa_volume_down:String = "\uf027";
 		public static const fa_volume_off:String = "\uf026";
 		public static const fa_volume_up:String = "\uf028";
@@ -701,11 +781,20 @@
 		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_wheelchair_alt:String = "\uf29b";
 		public static const fa_wifi:String = "\uf1eb";
 		public static const fa_wikipedia_w:String = "\uf266";
+		public static const fa_window_close:String = "\uf2d3";
+		public static const fa_window_close_o:String = "\uf2d4";
+		public static const fa_window_maximize:String = "\uf2d0";
+		public static const fa_window_minimize:String = "\uf2d1";
+		public static const fa_window_restore:String = "\uf2d2";
 		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_wpbeginner:String = "\uf297";
+		public static const fa_wpexplorer:String = "\uf2de";
+		public static const fa_wpforms:String = "\uf298";
 		public static const fa_wrench:String = "\uf0ad";
 		public static const fa_xing:String = "\uf168";
 		public static const fa_xing_square:String = "\uf169";
@@ -716,6 +805,7 @@
 		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_yoast:String = "\uf2b1";
 		public static const fa_youtube:String = "\uf167";
 		public static const fa_youtube_play:String = "\uf16a";
 		public static const fa_youtube_square:String = "\uf166";
diff --git a/frameworks/projects/framework/src/mx/utils/ObjectUtil.as b/frameworks/projects/framework/src/mx/utils/ObjectUtil.as
index 74aa9d6..260d372 100644
--- a/frameworks/projects/framework/src/mx/utils/ObjectUtil.as
+++ b/frameworks/projects/framework/src/mx/utils/ObjectUtil.as
@@ -1228,7 +1228,7 @@
     /**
      *  Verifies if the first object is dynamic and is a subset of the second object.
      *
-     *  @param values The values which need to be shared by <code>object</object>
+     *  @param values The values which need to be shared by <code>object</code>
      *  @param object The object to verify against.
      *
      *  @return true if and only if the objects are the same, or if <code>values</code>
diff --git a/frameworks/projects/framework/src/mx/validators/EmailValidator.as b/frameworks/projects/framework/src/mx/validators/EmailValidator.as
index 9776db3..69fd688 100644
--- a/frameworks/projects/framework/src/mx/validators/EmailValidator.as
+++ b/frameworks/projects/framework/src/mx/validators/EmailValidator.as
@@ -74,7 +74,7 @@
 	 *  @private
 	 */
 	private static const DISALLOWED_LOCALNAME_CHARS:String =
-								"()<>,;:\\\"[] `~!#$%^&*={}|/?'\t\n\r";
+								"()<>,;:\\\"[] `~!#$%^&*={}|/?\t\n\r";
 	/**
 	 *  @private
 	 */							
diff --git a/frameworks/projects/mobiletheme/src/spark/skins/ios7/BusyIndicatorSkin.as b/frameworks/projects/mobiletheme/src/spark/skins/ios7/BusyIndicatorSkin.as
index 805887b..a4fe64f 100644
--- a/frameworks/projects/mobiletheme/src/spark/skins/ios7/BusyIndicatorSkin.as
+++ b/frameworks/projects/mobiletheme/src/spark/skins/ios7/BusyIndicatorSkin.as
@@ -153,6 +153,16 @@
 				symbolColorChanged = true;
 				invalidateDisplayList();
 			}
+			if (styleProp == "styleName") {
+				var value:String = getStyle("styleName");
+				
+				// We're being removed from the stage
+				if (value == null) {
+					stopRotation();
+					busyIndicatorBackground = null;
+					busyIndicator = null;
+				}
+			}
 			super.styleChanged(styleProp);
 		}
 		
@@ -206,15 +216,15 @@
 			event.updateAfterEvent();
 		}
 		
-		private var rotationMatrix:Matrix; 
 		private function rotate(obj:DisplayObject, angle:Number, aroundX:Number, aroundY:Number):void
 		{
-			rotationMatrix = new Matrix();
-			rotationMatrix.translate(-aroundX,-aroundY);
+			var center:Number = Math.min(aroundX, aroundY); // stop wobbling if not square
+			var rotationMatrix:Matrix = new Matrix();
+			rotationMatrix.translate(-center,-center);
 			rotationMatrix.rotate(Math.PI*angle/180);
-			rotationMatrix.translate(aroundX,aroundY);
+			rotationMatrix.translate(center,center);
 			obj.transform.matrix = rotationMatrix;
 		}
 		
 	}
-}
\ No newline at end of file
+}
diff --git a/frameworks/projects/spark/src/spark/skins/spark/BusyIndicatorSkin.as b/frameworks/projects/spark/src/spark/skins/spark/BusyIndicatorSkin.as
index c1c98e5..b0feef0 100644
--- a/frameworks/projects/spark/src/spark/skins/spark/BusyIndicatorSkin.as
+++ b/frameworks/projects/spark/src/spark/skins/spark/BusyIndicatorSkin.as
@@ -239,6 +239,18 @@
 				symbolColorChanged = true;
 				invalidateDisplayList();
 			}
+			
+			if (styleProp == "styleName") {
+				var value:String = getStyle("styleName");
+				
+				// We're being removed from the stage
+				if (value == null) {
+					stopRotation();
+					busyIndicatorBackground = null;
+					busyIndicator = null;
+				}
+			}
+			
 			super.styleChanged(styleProp);
 		}
 		
@@ -326,16 +338,17 @@
 			event.updateAfterEvent();
 		}
 		
-		private var rotationMatrix:Matrix; 
 		private function rotate(obj:DisplayObject, angle:Number, aroundX:Number, aroundY:Number):void
 		{
-			rotationMatrix = new Matrix();
-			rotationMatrix.translate(-aroundX,-aroundY);
+			var center:Number = Math.min(aroundX, aroundY); // stop wobbling if not square
+			var rotationMatrix:Matrix = new Matrix();
+			rotationMatrix.translate(-center,-center);
 			rotationMatrix.rotate(Math.PI*angle/180);
-			rotationMatrix.translate(aroundX,aroundY);
+			rotationMatrix.translate(center,center);
 			obj.transform.matrix = rotationMatrix;
 		}
 		
 	}
 }
 
+
diff --git a/ide/addAIRtoSDK.sh b/ide/addAIRtoSDK.sh
index aeb7575..23b3a31 100755
--- a/ide/addAIRtoSDK.sh
+++ b/ide/addAIRtoSDK.sh
@@ -30,7 +30,8 @@
 AIR_VERSION="$1"
 OS=`uname`
 
-if [[ "${AIR_VERSION}" != "20.0"  && "${AIR_VERSION}" != "19.0"  && "${AIR_VERSION}" != "18.0"
+if [[ "${AIR_VERSION}" != "23.0"  && "${AIR_VERSION}" != "22.0"  && "${AIR_VERSION}" != "21.0"
+  &&  "${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 +39,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, 17.0, 18.0, 19.0 and 20.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, 20.0, 21.0, 22.0 and 23.0 are supported.
 	exit 1;
 fi
 
@@ -101,16 +102,10 @@
 
     if [[ "${OS}" == "Darwin" ]]
     then
-        airDownload="http://airdownload.adobe.com/air/mac/download/${version}/AdobeAIRSDK.tbz2"
+        airDownload="https://airdownload.adobe.com/air/mac/download/${version}/AdobeAIRSDK.tbz2"
     else
-        airDownload="http://airdownload.adobe.com/air/lin/download/${version}/AdobeAIRSDK.tbz2"
+        airDownload="https://airdownload.adobe.com/air/lin/download/${version}/AdobeAIRSDK.tbz2"
     fi
-    
-    if [ ${AIR_VERSION} = "17.0b" ]
-	then
-		airDownload="http://labsdownload.adobe.com/pub/labs/flashruntimes/air/air17_sdk_sa_mac.tbz2"
-	fi	
-	
 	echo Downloading AIR ${version}
 	curl ${airDownload} > "${airTempDir}/air.tbz2"
 	
@@ -162,6 +157,27 @@
 do
 	echo Updating ${configFile}
 	
+	# 23.0 needs FP 23 and swf version 34
+	if [ ${AIR_VERSION} = "23.0" ]
+	then
+		updatePlayerVersion 23.0 "${configFile}"
+		updateSWFVersion 34 "${configFile}"
+	fi
+
+	# 22.0 needs FP 22 and swf version 33
+	if [ ${AIR_VERSION} = "22.0" ]
+	then
+		updatePlayerVersion 22.0 "${configFile}"
+		updateSWFVersion 33 "${configFile}"
+	fi
+
+	# 21.0 needs FP 21 and swf version 32
+	if [ ${AIR_VERSION} = "21.0" ]
+	then
+		updatePlayerVersion 21.0 "${configFile}"
+		updateSWFVersion 32 "${configFile}"
+	fi
+
 	# 20.0 needs FP 20 and swf version 31
 	if [ ${AIR_VERSION} = "20.0" ]
 	then
diff --git a/ide/checkAllPlayerGlobals.sh b/ide/checkAllPlayerGlobals.sh
index 9c0590f..a1c7a95 100755
--- a/ide/checkAllPlayerGlobals.sh
+++ b/ide/checkAllPlayerGlobals.sh
@@ -81,8 +81,8 @@
     playerGlobalDir="${IDE_SDK_DIR}/frameworks/libs/player/${version}"
     playerGlobalSWC="${playerGlobalDir}/playerglobal.swc"
     MD5check=$2
-    AdobeURL=$3
-    
+    AdobeURL="https://fpdownload.macromedia.com/get/flashplayer/installers/archive/playerglobal/$3"
+   echo ${AdobeURL} 
 	mkdir -p "${playerGlobalDir}"
 	if [ ! -f "${playerGlobalSWC}" ]
 	then
@@ -108,24 +108,27 @@
 
 # Note Adobe releases new versions of playerglobal.swf so if your checksum is wrong it may mean you just don't have the latest
 
-downloadPlayerGlobal 10.2 aa7d785dd5715626201f5e30fc1deb51 http://fpdownload.macromedia.com/get/flashplayer/installers/archive/playerglobal/playerglobal10_2.swc
-downloadPlayerGlobal 10.3 6092b3d4e2784212d174ca10904412bd http://fpdownload.macromedia.com/get/flashplayer/installers/archive/playerglobal/playerglobal10_3.swc
-downloadPlayerGlobal 11.0 5f5a291f02105cd83fb582b76646e603 http://fpdownload.macromedia.com/get/flashplayer/updaters/11/playerglobal11_0.swc
-downloadPlayerGlobal 11.1 e3a0e0e8c703ae5b1847b8ac25bbdc5f http://fpdownload.macromedia.com/get/flashplayer/updaters/11/playerglobal11_1.swc
-downloadPlayerGlobal 11.2 c544a069518897880e0d732457b6fdeb http://fpdownload.macromedia.com/get/flashplayer/updaters/11/playerglobal11_2.swc
-downloadPlayerGlobal 11.3 e2a9ee439d9660feaf756aa05e7e6412 http://fpdownload.macromedia.com/get/flashplayer/updaters/11/playerglobal11_3.swc
-downloadPlayerGlobal 11.4 e15587856cdb5e21fa1acb6b0610a032 http://fpdownload.macromedia.com/get/flashplayer/updaters/11/playerglobal11_4.swc
-downloadPlayerGlobal 11.5 00384b24157442c59ca5d625ecfd11a2 http://fpdownload.macromedia.com/get/flashplayer/updaters/11/playerglobal11_5.swc
-downloadPlayerGlobal 11.6 1b841a0a26ada3e5da26eb70c32ab263 http://fpdownload.macromedia.com/get/flashplayer/updaters/11/playerglobal11_6.swc
-downloadPlayerGlobal 11.7 12656571c57b2ad641838e5695a00e27 http://fpdownload.macromedia.com/get/flashplayer/updaters/11/playerglobal11_7.swc
-downloadPlayerGlobal 11.8 35bc69eec5091f70e221b4e63b66b60f http://fpdownload.macromedia.com/get/flashplayer/updaters/11/playerglobal11_8.swc
-downloadPlayerGlobal 11.9 d18244c3c00c61a41f2d4d791d09fedb http://fpdownload.macromedia.com/get/flashplayer/updaters/11/playerglobal11_9.swc
-downloadPlayerGlobal 12.0 4db4e934f39f774ba68fcd9a79654971 http://fpdownload.macromedia.com/get/flashplayer/updaters/12/playerglobal12_0.swc
-downloadPlayerGlobal 13.0 b824fb3db644d065bc27cae2382eb361 http://fpdownload.macromedia.com/get/flashplayer/updaters/13/playerglobal13_0.swc
-downloadPlayerGlobal 14.0 0d7aa820d62ba76fa7bc353ee552bd49 http://fpdownload.macromedia.com/get/flashplayer/updaters/14/playerglobal14_0.swc
-downloadPlayerGlobal 15.0 8bb52e65abb4e0c6a357f2ccde1ec626 http://fpdownload.macromedia.com/get/flashplayer/updaters/15/playerglobal15_0.swc
-downloadPlayerGlobal 16.0 5bf5a05a4065a247bf65e7342a4c770f http://fpdownload.macromedia.com/get/flashplayer/updaters/16/playerglobal16_0.swc
-downloadPlayerGlobal 17.0 e86a0fd5131fe3c2fd1e052314237ca9 http://fpdownload.macromedia.com/get/flashplayer/updaters/17/playerglobal17_0.swc
-downloadPlayerGlobal 18.0 7451e9a7e6296c6a09022f42adcf57a5 http://fpdownload.macromedia.com/get/flashplayer/updaters/17/playerglobal18_0.swc
-downloadPlayerGlobal 19.0 e2e67b0851afaa512c2e2f31c43d5fba http://fpdownload.macromedia.com/get/flashplayer/updaters/17/playerglobal19_0.swc
-downloadPlayerGlobal 20.0 d308cdf324f086e7b2f0c1317f698c0c http://fpdownload.macromedia.com/get/flashplayer/updaters/17/playerglobal20_0.swc
+downloadPlayerGlobal 10.2 aa7d785dd5715626201f5e30fc1deb51 playerglobal10_2.swc
+downloadPlayerGlobal 10.3 6092b3d4e2784212d174ca10904412bd playerglobal10_3.swc
+downloadPlayerGlobal 11.0 5f5a291f02105cd83fb582b76646e603 playerglobal11_0.swc
+downloadPlayerGlobal 11.1 e3a0e0e8c703ae5b1847b8ac25bbdc5f playerglobal11_1.swc
+downloadPlayerGlobal 11.2 c544a069518897880e0d732457b6fdeb playerglobal11_2.swc
+downloadPlayerGlobal 11.3 e791741422bcda27d47489a2db39da14 playerglobal11_3.swc
+downloadPlayerGlobal 11.4 a8cb5fc008ee88ac2d32bd425ad49d78 playerglobal11_4.swc
+downloadPlayerGlobal 11.5 00384b24157442c59ca5d625ecfd11a2 playerglobal11_5.swc
+downloadPlayerGlobal 11.6 1b841a0a26ada3e5da26eb70c32ab263 playerglobal11_6.swc
+downloadPlayerGlobal 11.7 12656571c57b2ad641838e5695a00e27 playerglobal11_7.swc
+downloadPlayerGlobal 11.8 35bc69eec5091f70e221b4e63b66b60f playerglobal11_8.swc
+downloadPlayerGlobal 11.9 d18244c3c00c61a41f2d4d791d09fedb playerglobal11_9.swc
+downloadPlayerGlobal 12.0 4db4e934f39f774ba68fcd9a79654971 playerglobal12_0.swc
+downloadPlayerGlobal 13.0 b824fb3db644d065bc27cae2382eb361 playerglobal13_0.swc
+downloadPlayerGlobal 14.0 0d7aa820d62ba76fa7bc353ee552bd49 playerglobal14_0.swc
+downloadPlayerGlobal 15.0 8bb52e65abb4e0c6a357f2ccde1ec626 playerglobal15_0.swc
+downloadPlayerGlobal 16.0 5bf5a05a4065a247bf65e7342a4c770f playerglobal16_0.swc
+downloadPlayerGlobal 17.0 e86a0fd5131fe3c2fd1e052314237ca9 playerglobal17_0.swc
+downloadPlayerGlobal 18.0 371310a916950a7956507bf9cdf1bb63 playerglobal18_0.swc
+downloadPlayerGlobal 19.0 3f2473dd35a55427886abfc1807eaa98 playerglobal19_0.swc
+downloadPlayerGlobal 20.0 444ea8e8f2cddec22ed8b77e0d61bfe2 playerglobal20_0.swc
+downloadPlayerGlobal 21.0 1dd14e80b962327ccd17ce1321dc2135 playerglobal21_0.swc
+downloadPlayerGlobal 22.0 177e7f8cb98bc874b73296791b747128 playerglobal22_0.swc
+downloadPlayerGlobal 23.0 460477059d7a23e045a75d7e85c48bab playerglobal23_0.swc
diff --git a/ide/setFlashPlayerVersion.sh b/ide/setFlashPlayerVersion.sh
index 94de920..fbde916 100755
--- a/ide/setFlashPlayerVersion.sh
+++ b/ide/setFlashPlayerVersion.sh
@@ -99,13 +99,13 @@
         then 
             FLASH_VERSION="11.1"
         else
-            FLASH_VERSION="20.0"
+            FLASH_VERSION="23.0"
         fi
     fi
     
     if [ ${latest} = "Y" ]
     then
-    	FLASH_VERSION="20.0"
+    	FLASH_VERSION="23.0"
     fi
 
     echo "Setting minimum Flash Player version to ${FLASH_VERSION}"
@@ -125,9 +125,10 @@
   && "${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.0" && "${FLASH_VERSION}" != "18.0" && "${FLASH_VERSION}" != "19.0"
-  && "${FLASH_VERSION}" != "20.0" ]]
+  && "${FLASH_VERSION}" != "20.0" && "${FLASH_VERSION}" != "21.0" && "${FLASH_VERSION}" != "22.0"
+  && "${FLASH_VERSION}" != "23.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, 17.0, 18.0, 19.0 and 20.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, 20.0, 21.0, 22.0 and 23.0 are supported.
 	exit 1;
 fi
 
@@ -148,11 +149,36 @@
 	echo Installing AIR
 	echo
 
-	if [[ $FLASH_VERSION = "17.0b" ]]
+	if [[ $FLASH_VERSION = "23.0" ]]
     then
-        ./addAIRtoSDK.sh 17.0b "$IDE_SDK_DIR"
+        ./addAIRtoSDK.sh 23.0 "$IDE_SDK_DIR"
     fi
-    
+
+	if [[ $FLASH_VERSION = "22.0" ]]
+    then
+        ./addAIRtoSDK.sh 22.0 "$IDE_SDK_DIR"
+    fi
+
+	if [[ $FLASH_VERSION = "21.0" ]]
+    then
+        ./addAIRtoSDK.sh 21.0 "$IDE_SDK_DIR"
+    fi
+
+	if [[ $FLASH_VERSION = "20.0" ]]
+    then
+        ./addAIRtoSDK.sh 20.0 "$IDE_SDK_DIR"
+    fi
+
+	if [[ $FLASH_VERSION = "19.0" ]]
+    then
+        ./addAIRtoSDK.sh 19.0 "$IDE_SDK_DIR"
+    fi
+
+	if [[ $FLASH_VERSION = "18.0" ]]
+    then
+$        ./addAIRtoSDK.sh 18.0 "$IDE_SDK_DIR"
+    fi
+
 	if [[ $FLASH_VERSION = "17.0" ]]
     then
         ./addAIRtoSDK.sh 17.0 "$IDE_SDK_DIR"
@@ -241,11 +267,36 @@
 	
 	updatePlayerVersion "${FLASH_VERSION}" "${configFile}"
 
-	if [ ${FLASH_VERSION} = "17.0b	" ]
+	if [ ${FLASH_VERSION} = "23.0" ]
 	then
-		updateSWFVersion 28 "${configFile}"
+		updateSWFVersion 34 "${configFile}"
+	fi
+
+	if [ ${FLASH_VERSION} = "22.0" ]
+	then
+		updateSWFVersion 33 "${configFile}"
+	fi
+
+	if [ ${FLASH_VERSION} = "21.0" ]
+	then
+		updateSWFVersion 32 "${configFile}"
 	fi
 	
+	if [ ${FLASH_VERSION} = "20.0" ]
+	then
+		updateSWFVersion 31 "${configFile}"
+	fi
+
+	if [ ${FLASH_VERSION} = "19.0" ]
+	then
+		updateSWFVersion 30 "${configFile}"
+	fi
+
+	if [ ${FLASH_VERSION} = "18.0" ]
+	then
+		updateSWFVersion 29 "${configFile}"
+	fi
+
 	if [ ${FLASH_VERSION} = "17.0" ]
 	then
 		updateSWFVersion 28 "${configFile}"
diff --git a/modules/compiler/src/java/flex2/tools/oem/Application.java b/modules/compiler/src/java/flex2/tools/oem/Application.java
index 880e767..d4597fe 100644
--- a/modules/compiler/src/java/flex2/tools/oem/Application.java
+++ b/modules/compiler/src/java/flex2/tools/oem/Application.java
@@ -1734,7 +1734,7 @@
      * Application object the cache may be reused to build another Application
      * object that uses the same library path.
      *
-     * @param swcCache A reference to an allocated swc cache.
+     * @param libraryCache A reference to an allocated swc cache.
      *
      * @since 3.0
      */
diff --git a/modules/compiler/src/java/flex2/tools/oem/Configuration.java b/modules/compiler/src/java/flex2/tools/oem/Configuration.java
index 7aff4a3..e25f8c6 100644
--- a/modules/compiler/src/java/flex2/tools/oem/Configuration.java
+++ b/modules/compiler/src/java/flex2/tools/oem/Configuration.java
@@ -141,7 +141,7 @@
     
     /**
      * Sets the location of the default CSS file.
-     * This is equivalent to using the <code>compiler.defaults-css-url</code> option of the mxmlc or compc compilers</code>.
+     * This is equivalent to using the <code>compiler.defaults-css-url</code> option of the mxmlc or compc compilers.
      * 
      * @param url An instance of <code>java.io.File</code>.
      */
@@ -973,12 +973,12 @@
      * the file format:
      * 
      * <pre>
-     * &lt;script>
-     *     &lt;!-- use 'dep', 'pre' or 'dep' to specify a definition to be omitted from linking. -->
-     *     &lt;def id="mx.skins:ProgrammaticSkin"/>
-     *     &lt;pre id="mx.core:IFlexDisplayObject"/>
-     *     &lt;dep id="String"/>
-     * &lt;/script>
+     * &lt;script&gt;
+     *     &lt;!-- use 'dep', 'pre' or 'dep' to specify a definition to be omitted from linking. --&gt;
+     *     &lt;def id="mx.skins:ProgrammaticSkin"/&gt;
+     *     &lt;pre id="mx.core:IFlexDisplayObject"/&gt;
+     *     &lt;dep id="String"/&gt;
+     * &lt;/script&gt;
      * </pre>
      * 
      * @see #setExterns(String[])
@@ -1087,8 +1087,8 @@
      * CONTRIBUTOR      java.lang.String
      * CREATOR          java.lang.String
      * DATE             java.util.Date
-     * DESCRIPTION      java.util.Map<String, String>
-     * TITLE            java.util.Map<String, String>
+     * DESCRIPTION      java.util.Map&lt;String, String&gt;
+     * TITLE            java.util.Map&lt;String, String&gt;
      * LANGUAGE         java.lang.String
      * PUBLISHER        java.lang.String
      * </pre>
@@ -1331,7 +1331,7 @@
     
     
     /**
-     * @param libraries
+     * @param extensions
      */
     public void setExtensionLibraries(Map<File, List<String>> extensions);
     
@@ -1382,7 +1382,7 @@
      * instance should represent a SWC file. May not be null.
      *    
      * @since 4.5
-     * @see #setForcedRuntimeSharedLibraryPaths(File[])
+     * @see #setForceRuntimeSharedLibraryPaths(File[])
      * @throws NullPointerException if path is null.
      */
     void addForceRuntimeSharedLibraryPaths(File[] paths);
diff --git a/modules/compiler/src/java/flex2/tools/oem/Library.java b/modules/compiler/src/java/flex2/tools/oem/Library.java
index bd72e5d..3092a78 100644
--- a/modules/compiler/src/java/flex2/tools/oem/Library.java
+++ b/modules/compiler/src/java/flex2/tools/oem/Library.java
@@ -2155,7 +2155,7 @@
      * Library object, the cache may be reused to build another
      * Library or Application object that uses the same library path.
      *
-     * @param swcCache A reference to an allocated swc cache.
+     * @param libraryCache A reference to an allocated swc cache.
      *
      * @since 3.0
      */
diff --git a/modules/compiler/src/java/flex2/tools/oem/Toolkit.java b/modules/compiler/src/java/flex2/tools/oem/Toolkit.java
index f074cb9..04bfada 100644
--- a/modules/compiler/src/java/flex2/tools/oem/Toolkit.java
+++ b/modules/compiler/src/java/flex2/tools/oem/Toolkit.java
@@ -303,7 +303,7 @@
 	 * This operation returns an optimized version of the library SWF. The SWF in the library
 	 * remains unchanged.
 	 * 
-	 * @param in a SWF input stream
+	 * @param lib a SWF input stream
 	 * @param out a SWF output stream
 	 * @return the number of bytes written to the output stream; <code>0</code> if the optimization fails.
 	 */
@@ -496,7 +496,7 @@
      * @param minimizeDependencySet If false, all of the libraries dependencies are returned. If true, the external script
      * classes are reviewed. If the set of script classes resolved in a libraryA is a subset of the script
      * classes resolved in libraryB, then libraryA will be removed as a dependency of targetLibrary.
-     * @param dependencyTypes The types of dependencies to consider when 
+     * @param dependencySet The types of dependencies to consider when 
      * determining the library's dependencies. If this parameter is null or an empty set, then all
      * dependencies will be considered. 
      * @return A set of Strings; where each String is the location of a library in the file system. 
diff --git a/modules/thirdparty/velocity/test/texen/additional.props b/modules/thirdparty/velocity/test/texen/additional.props
deleted file mode 100644
index db25562..0000000
--- a/modules/thirdparty/velocity/test/texen/additional.props
+++ /dev/null
@@ -1 +0,0 @@
-occupation=somnambulist
diff --git a/modules/thirdparty/velocity/test/texen/compare/Test.txt b/modules/thirdparty/velocity/test/texen/compare/Test.txt
deleted file mode 100644
index f2bb18d..0000000
--- a/modules/thirdparty/velocity/test/texen/compare/Test.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-# These should all evaluate to true
-
-true
-true
-true
-
-# These should all evaluate to false
-
-false
-false
-false
diff --git a/modules/thirdparty/velocity/test/texen/compare/TurbineWeather.java b/modules/thirdparty/velocity/test/texen/compare/TurbineWeather.java
deleted file mode 100644
index db2bd31..0000000
--- a/modules/thirdparty/velocity/test/texen/compare/TurbineWeather.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package org.apache.turbine.services.weather;
-
-/*
- * Copyright (c) 1997-2000 The Java Apache Project.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. All advertising materials mentioning features or use of this
- *    software must display the following acknowledgment:
- *    "This product includes software developed by the Java Apache
- *    Project for use in the Apache JServ servlet engine project
- *    <http://java.apache.org/>."
- *
- * 4. The names "Apache JServ", "Apache JServ Servlet Engine", "Turbine",
- *    "Apache Turbine", "Turbine Project", "Apache Turbine Project" and
- *    "Java Apache Project" must not be used to endorse or promote products
- *    derived from this software without prior written permission.
- *
- * 5. Products derived from this software may not be called "Apache JServ"
- *    nor may "Apache" nor "Apache JServ" appear in their names without
- *    prior written permission of the Java Apache Project.
- *
- * 6. Redistributions of any form whatsoever must retain the following
- *    acknowledgment:
- *    "This product includes software developed by the Java Apache
- *    Project for use in the Apache JServ servlet engine project
- *    <http://java.apache.org/>."
- *
- * THIS SOFTWARE IS PROVIDED BY THE JAVA APACHE PROJECT "AS IS" AND ANY
- * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE JAVA APACHE PROJECT OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- * OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Java Apache Group. For more information
- * on the Java Apache Project and the Apache JServ Servlet Engine project,
- * please see <http://java.apache.org/>.
- *
- */
-
-
-import org.apache.turbine.services.TurbineServices;
-
-/**
- *
- *
- * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
- * @occupation somnambulist
- */
-public class TurbineWeather
-{
-    /**
-     * Utility method for accessing the service 
-     * implementation
-     *
-     * @return a WeatherService implementation instance
-     */
-    protected static WeatherService getService()
-    {
-        return (WeatherService)TurbineServices
-            .getInstance().getService(WeatherService.SERVICE_NAME);
-    }
-}
diff --git a/modules/thirdparty/velocity/test/texen/compare/TurbineWeatherService.java b/modules/thirdparty/velocity/test/texen/compare/TurbineWeatherService.java
deleted file mode 100644
index 1cc8d7a..0000000
--- a/modules/thirdparty/velocity/test/texen/compare/TurbineWeatherService.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package org.apache.turbine.services.weather;
-
-/*
- * Copyright (c) 1997-2000 The Java Apache Project.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. All advertising materials mentioning features or use of this
- *    software must display the following acknowledgment:
- *    "This product includes software developed by the Java Apache
- *    Project for use in the Apache JServ servlet engine project
- *    <http://java.apache.org/>."
- *
- * 4. The names "Apache JServ", "Apache JServ Servlet Engine", "Turbine",
- *    "Apache Turbine", "Turbine Project", "Apache Turbine Project" and
- *    "Java Apache Project" must not be used to endorse or promote products
- *    derived from this software without prior written permission.
- *
- * 5. Products derived from this software may not be called "Apache JServ"
- *    nor may "Apache" nor "Apache JServ" appear in their names without
- *    prior written permission of the Java Apache Project.
- *
- * 6. Redistributions of any form whatsoever must retain the following
- *    acknowledgment:
- *    "This product includes software developed by the Java Apache
- *    Project for use in the Apache JServ servlet engine project
- *    <http://java.apache.org/>."
- *
- * THIS SOFTWARE IS PROVIDED BY THE JAVA APACHE PROJECT "AS IS" AND ANY
- * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE JAVA APACHE PROJECT OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- * OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Java Apache Group. For more information
- * on the Java Apache Project and the Apache JServ Servlet Engine project,
- * please see <http://java.apache.org/>.
- *
- */
-
-
-import org.apache.turbine.services.TurbineBaseService;
-
-/**
- *
- * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
- * @occupation somnambulist
- */
-public class TurbineWeatherService extends TurbineBaseService
-    implements WeatherService
-
-{
-    /**
-     * Initialize the TurbineWeather Service.
-     */
-    public void init()
-    {
-        setInit(true);
-    }
-}
diff --git a/modules/thirdparty/velocity/test/texen/compare/WeatherService.java b/modules/thirdparty/velocity/test/texen/compare/WeatherService.java
deleted file mode 100644
index 9373f44..0000000
--- a/modules/thirdparty/velocity/test/texen/compare/WeatherService.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package org.apache.turbine.services.weather;
-
-/*
- * Copyright (c) 1997-2000 The Java Apache Project.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. All advertising materials mentioning features or use of this
- *    software must display the following acknowledgment:
- *    "This product includes software developed by the Java Apache
- *    Project for use in the Apache JServ servlet engine project
- *    <http://java.apache.org/>."
- *
- * 4. The names "Apache JServ", "Apache JServ Servlet Engine", "Turbine",
- *    "Apache Turbine", "Turbine Project", "Apache Turbine Project" and
- *    "Java Apache Project" must not be used to endorse or promote products
- *    derived from this software without prior written permission.
- *
- * 5. Products derived from this software may not be called "Apache JServ"
- *    nor may "Apache" nor "Apache JServ" appear in their names without
- *    prior written permission of the Java Apache Project.
- *
- * 6. Redistributions of any form whatsoever must retain the following
- *    acknowledgment:
- *    "This product includes software developed by the Java Apache
- *    Project for use in the Apache JServ servlet engine project
- *    <http://java.apache.org/>."
- *
- * THIS SOFTWARE IS PROVIDED BY THE JAVA APACHE PROJECT "AS IS" AND ANY
- * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE JAVA APACHE PROJECT OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- * OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Java Apache Group. For more information
- * on the Java Apache Project and the Apache JServ Servlet Engine project,
- * please see <http://java.apache.org/>.
- *
- */
-
-
-import org.apache.turbine.services.Service;
-
-/**
- *
- * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
- * @occupation somnambulist
- */
-public interface WeatherService extends Service
-{
-    public static final String SERVICE_NAME = "TurbineWeatherService";
-}
diff --git a/modules/thirdparty/velocity/test/texen/compare/book.txt b/modules/thirdparty/velocity/test/texen/compare/book.txt
deleted file mode 100644
index 9c55b7a..0000000
--- a/modules/thirdparty/velocity/test/texen/compare/book.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-This is the book of the week:
-
-Props retrieved using new method:
-
-Title: Consilience: The Unity of Knowledge
-Author: Edward O. Wilson
-Publisher: Knopf
-ISBN: 0965058305
-
-Props retrieved using old method:
-
-Title: Consilience: The Unity of Knowledge
-Author: Edward O. Wilson
-Publisher: Knopf
-ISBN: 0965058305
diff --git a/modules/thirdparty/velocity/test/texen/license.txt b/modules/thirdparty/velocity/test/texen/license.txt
deleted file mode 100644
index a5c1c2c..0000000
--- a/modules/thirdparty/velocity/test/texen/license.txt
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 1997-2000 The Java Apache Project.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. All advertising materials mentioning features or use of this
- *    software must display the following acknowledgment:
- *    "This product includes software developed by the Java Apache
- *    Project for use in the Apache JServ servlet engine project
- *    <http://java.apache.org/>."
- *
- * 4. The names "Apache JServ", "Apache JServ Servlet Engine", "Turbine",
- *    "Apache Turbine", "Turbine Project", "Apache Turbine Project" and
- *    "Java Apache Project" must not be used to endorse or promote products
- *    derived from this software without prior written permission.
- *
- * 5. Products derived from this software may not be called "Apache JServ"
- *    nor may "Apache" nor "Apache JServ" appear in their names without
- *    prior written permission of the Java Apache Project.
- *
- * 6. Redistributions of any form whatsoever must retain the following
- *    acknowledgment:
- *    "This product includes software developed by the Java Apache
- *    Project for use in the Apache JServ servlet engine project
- *    <http://java.apache.org/>."
- *
- * THIS SOFTWARE IS PROVIDED BY THE JAVA APACHE PROJECT "AS IS" AND ANY
- * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE JAVA APACHE PROJECT OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- * OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Java Apache Group. For more information
- * on the Java Apache Project and the Apache JServ Servlet Engine project,
- * please see <http://java.apache.org/>.
- *
- */
diff --git a/modules/thirdparty/velocity/test/texen/service.props b/modules/thirdparty/velocity/test/texen/service.props
deleted file mode 100644
index fe7dff2..0000000
--- a/modules/thirdparty/velocity/test/texen/service.props
+++ /dev/null
@@ -1,21 +0,0 @@
-baseName=Weather
-package=org.apache.turbine.services.weather
-name=Jason van Zyl
-email=jvanzyl@apache.org
-
-## The contents of the file license.txt
-## will be available in the context
-## as $license.
-
-license.file.contents = ../test/texen/license.txt
-
-# Test some properties that have be give some boolean
-# values.
-
-one = true
-two = yes
-three = on
-
-four = false
-five = no
-six = off
diff --git a/modules/thirdparty/velocity/test/texen/templates/Control.vm b/modules/thirdparty/velocity/test/texen/templates/Control.vm
deleted file mode 100644
index 3a8a4ee..0000000
--- a/modules/thirdparty/velocity/test/texen/templates/Control.vm
+++ /dev/null
@@ -1,41 +0,0 @@
-#set ( $sourceFile = "Turbine${baseName}Service.java" )
-#*
-  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.
-*#
-$generator.parse("ServiceImplementation.vm",$sourceFile)
-
-#set ( $sourceFile = "${baseName}Service.java" )
-$generator.parse("ServiceInterface.vm",$sourceFile)
-
-#set ( $sourceFile = "Turbine${baseName}.java" )
-$generator.parse("ServiceStaticHelper.vm",$sourceFile)
-
-#set ( $sourceFile = "Test.txt" )
-$generator.parse("Test.vm",$sourceFile)
-
-#set ( $props = $properties.load("test.props") )
-
-## This is to test a properties file that was once taken from
-## the file system but is now taken from a JAR. We have to
-## deprecate the use of $generator.TemplatePath if we want
-## templates to work the same way from JARs and the file
-## system. I have a hack in PropsUtil right now to deal
-## with it.
-
-#set ( $props2 = $properties.load("$generator.TemplatePath/test.props") )
-$generator.TemplatePath/test.props
-#set ( $sourceFile = "book.txt" )
-$generator.parse("book.vm",$sourceFile)
diff --git a/modules/thirdparty/velocity/test/texen/templates/ServiceImplementation.vm b/modules/thirdparty/velocity/test/texen/templates/ServiceImplementation.vm
deleted file mode 100644
index fa2c9e0..0000000
--- a/modules/thirdparty/velocity/test/texen/templates/ServiceImplementation.vm
+++ /dev/null
@@ -1,39 +0,0 @@
-package $package;
-#*
-  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.
-*#
-
-$license
-
-import org.apache.turbine.services.TurbineBaseService;
-
-/**
- *
- * @author <a href="mailto:$email">$name</a>
- * @occupation $occupation
- */
-public class Turbine${baseName}Service extends TurbineBaseService
-    implements ${baseName}Service
-
-{
-    /**
-     * Initialize the Turbine${baseName} Service.
-     */
-    public void init()
-    {
-        setInit(true);
-    }
-}
diff --git a/modules/thirdparty/velocity/test/texen/templates/ServiceInterface.vm b/modules/thirdparty/velocity/test/texen/templates/ServiceInterface.vm
deleted file mode 100644
index 5d21e8a..0000000
--- a/modules/thirdparty/velocity/test/texen/templates/ServiceInterface.vm
+++ /dev/null
@@ -1,31 +0,0 @@
-package $package;
-#*
-  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.
-*#
-
-$license
-
-import org.apache.turbine.services.Service;
-
-/**
- *
- * @author <a href="mailto:$email">$name</a>
- * @occupation $occupation
- */
-public interface ${baseName}Service extends Service
-{
-    public static final String SERVICE_NAME = "Turbine${baseName}Service";
-}
diff --git a/modules/thirdparty/velocity/test/texen/templates/ServiceStaticHelper.vm b/modules/thirdparty/velocity/test/texen/templates/ServiceStaticHelper.vm
deleted file mode 100644
index 81ad3c7..0000000
--- a/modules/thirdparty/velocity/test/texen/templates/ServiceStaticHelper.vm
+++ /dev/null
@@ -1,42 +0,0 @@
-package $package;
-#*
-  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.
-*#
-
-$license
-
-import org.apache.turbine.services.TurbineServices;
-
-/**
- *
- *
- * @author <a href="mailto:$email">$name</a>
- * @occupation $occupation
- */
-public class Turbine$baseName
-{
-    /**
-     * Utility method for accessing the service 
-     * implementation
-     *
-     * @return a ${baseName}Service implementation instance
-     */
-    protected static ${baseName}Service getService()
-    {
-        return (${baseName}Service)TurbineServices
-            .getInstance().getService(${baseName}Service.SERVICE_NAME);
-    }
-}
diff --git a/modules/thirdparty/velocity/test/texen/templates/Test.vm b/modules/thirdparty/velocity/test/texen/templates/Test.vm
deleted file mode 100644
index 51aa610..0000000
--- a/modules/thirdparty/velocity/test/texen/templates/Test.vm
+++ /dev/null
@@ -1,27 +0,0 @@
-# These should all evaluate to true
-#*
-  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.
-*#
-
-$one
-$two
-$three
-
-# These should all evaluate to false
-
-$four
-$five
-$six
diff --git a/modules/thirdparty/velocity/test/texen/templates/book.vm b/modules/thirdparty/velocity/test/texen/templates/book.vm
deleted file mode 100644
index c64f4df..0000000
--- a/modules/thirdparty/velocity/test/texen/templates/book.vm
+++ /dev/null
@@ -1,31 +0,0 @@
-This is the book of the week:
-#*
-  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.
-*#
-
-Props retrieved using new method:
-
-Title: $props.get("title")
-Author: $props.get("author")
-Publisher: $props.get("publisher")
-ISBN: $props.get("isbn")
-
-Props retrieved using old method:
-
-Title: $props2.get("title")
-Author: $props2.get("author")
-Publisher: $props2.get("publisher")
-ISBN: $props2.get("isbn")
diff --git a/modules/thirdparty/velocity/test/texen/templates/test.props b/modules/thirdparty/velocity/test/texen/templates/test.props
deleted file mode 100644
index 7803869..0000000
--- a/modules/thirdparty/velocity/test/texen/templates/test.props
+++ /dev/null
@@ -1,4 +0,0 @@
-author = Edward O. Wilson
-title = Consilience: The Unity of Knowledge
-publisher = Knopf
-isbn = 0965058305
diff --git a/templates/swfobject/history/history.js b/templates/swfobject/history/history.js
index 4db119c..e0c3183 100644
--- a/templates/swfobject/history/history.js
+++ b/templates/swfobject/history/history.js
@@ -262,27 +262,8 @@
             }
 
             if (browser.safari && !browserHasHashChange) {
-                // for Safari, submit a form whose action points to the desired URL
-                if (browser.version <= 419.3) {
-                    var file = window.location.pathname.toString();
-                    file = file.substring(file.lastIndexOf("/")+1);
-                    getFormElement().innerHTML = '<form name="historyForm" action="'+file+'#' + flexAppUrl + '" method="GET"></form>';
-                    //get the current elements and add them to the form
-                    var qs = window.location.search.substring(1);
-                    var qs_arr = qs.split("&");
-                    for (var i = 0; i < qs_arr.length; i++) {
-                        var tmp = qs_arr[i].split("=");
-                        var elem = document.createElement("input");
-                        elem.type = "hidden";
-                        elem.name = tmp[0];
-                        elem.value = tmp[1];
-                        document.forms.historyForm.appendChild(elem);
-                    }
-                    document.forms.historyForm.submit();
-                } else {
-                    top.location.hash = flexAppUrl;
-                }
-                // We also have to maintain the history by hand for Safari
+                top.location.hash = flexAppUrl;
+                // We have to maintain the history by hand for Safari
                 historyHash[history.length] = flexAppUrl;
                 _storeStates();
             } else {