changeset 2591:b2dfc3891302 8.0-b77

Automated merge with ssh://jfxsrc.us.oracle.com//javafx/8.0/MASTER/jfx/rt
author David Grieve<david.grieve@oracle.com>
date Wed, 13 Feb 2013 18:35:25 -0500
parents 91891157486b c97dc773b5a4
children 82735d8f445e 71f97b47e94d fdec9eafd1ca
files javafx-ui-common/src/com/sun/javafx/css/Styleable.java javafx-ui-common/src/javafx/scene/Node.java javafx-ui-common/src/javafx/scene/layout/Region.java javafx-ui-controls/src/com/sun/javafx/scene/control/skin/PaginationSkin.java javafx-ui-controls/src/com/sun/javafx/scene/control/skin/TextInputControlSkin.java javafx-ui-controls/src/javafx/scene/control/Pagination.java
diffstat 133 files changed, 5553 insertions(+), 1876 deletions(-) [+]
line wrap: on
line diff
--- a/apps/experiments/Modena/nbproject/build-impl.xml	Mon Feb 11 17:50:32 2013 -0800
+++ b/apps/experiments/Modena/nbproject/build-impl.xml	Wed Feb 13 18:35:25 2013 -0500
@@ -399,6 +399,11 @@
             </and>
         </condition>
     </target>
+    <target name="-init-test-properties">
+        <property name="test.binaryincludes" value="&lt;nothing&gt;"/>
+        <property name="test.binarytestincludes" value=""/>
+        <property name="test.binaryexcludes" value=""/>
+    </target>
     <target if="${nb.junit.single}" name="-init-macrodef-junit-single" unless="${nb.junit.batch}">
         <macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3">
             <attribute default="${includes}" name="includes"/>
@@ -422,7 +427,7 @@
             </sequential>
         </macrodef>
     </target>
-    <target if="${nb.junit.batch}" name="-init-macrodef-junit-batch" unless="${nb.junit.single}">
+    <target depends="-init-test-properties" if="${nb.junit.batch}" name="-init-macrodef-junit-batch" unless="${nb.junit.single}">
         <macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3">
             <attribute default="${includes}" name="includes"/>
             <attribute default="${excludes}" name="excludes"/>
@@ -436,6 +441,9 @@
                         <fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
                             <filename name="@{testincludes}"/>
                         </fileset>
+                        <fileset dir="${build.test.classes.dir}" excludes="@{excludes},${excludes},${test.binaryexcludes}" includes="${test.binaryincludes}">
+                            <filename name="${test.binarytestincludes}"/>
+                        </fileset>
                     </batchtest>
                     <syspropertyset>
                         <propertyref prefix="test-sys-prop."/>
@@ -563,7 +571,7 @@
             </sequential>
         </macrodef>
     </target>
-    <target if="${nb.junit.batch}" name="-init-macrodef-junit-debug-batch">
+    <target depends="-init-test-properties" if="${nb.junit.batch}" name="-init-macrodef-junit-debug-batch">
         <macrodef name="junit-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
             <attribute default="${includes}" name="includes"/>
             <attribute default="${excludes}" name="excludes"/>
@@ -577,6 +585,9 @@
                         <fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
                             <filename name="@{testincludes}"/>
                         </fileset>
+                        <fileset dir="${build.test.classes.dir}" excludes="@{excludes},${excludes},${test.binaryexcludes}" includes="${test.binaryincludes}">
+                            <filename name="${test.binarytestincludes}"/>
+                        </fileset>
                     </batchtest>
                     <syspropertyset>
                         <propertyref prefix="test-sys-prop."/>
@@ -954,7 +965,7 @@
     <target if="has.persistence.xml" name="-copy-persistence-xml">
         <mkdir dir="${build.classes.dir}/META-INF"/>
         <copy todir="${build.classes.dir}/META-INF">
-            <fileset dir="${meta.inf.dir}" includes="persistence.xml"/>
+            <fileset dir="${meta.inf.dir}" includes="persistence.xml orm.xml"/>
         </copy>
     </target>
     <target name="-post-compile">
--- a/apps/experiments/Modena/nbproject/configs/Run_as_WebStart.properties	Mon Feb 11 17:50:32 2013 -0800
+++ b/apps/experiments/Modena/nbproject/configs/Run_as_WebStart.properties	Wed Feb 13 18:35:25 2013 -0500
@@ -1,2 +0,0 @@
-# Do not modify this property in this configuration. It can be re-generated.
-$label=Run as WebStart
--- a/apps/experiments/Modena/nbproject/configs/Run_in_Browser.properties	Mon Feb 11 17:50:32 2013 -0800
+++ b/apps/experiments/Modena/nbproject/configs/Run_in_Browser.properties	Wed Feb 13 18:35:25 2013 -0500
@@ -1,2 +0,0 @@
-# Do not modify this property in this configuration. It can be re-generated.
-$label=Run in Browser
--- a/apps/experiments/Modena/nbproject/genfiles.properties	Mon Feb 11 17:50:32 2013 -0800
+++ b/apps/experiments/Modena/nbproject/genfiles.properties	Wed Feb 13 18:35:25 2013 -0500
@@ -4,5 +4,5 @@
 # This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
 # Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
 nbproject/build-impl.xml.data.CRC32=b9fefffb
-nbproject/build-impl.xml.script.CRC32=c6fcc04b
-nbproject/build-impl.xml.stylesheet.CRC32=6ddba6b6@1.53.1.46
+nbproject/build-impl.xml.script.CRC32=84e60407
+nbproject/build-impl.xml.stylesheet.CRC32=c6d2a60f@1.57.0.46
--- a/apps/experiments/Modena/nbproject/jfx-impl.xml	Mon Feb 11 17:50:32 2013 -0800
+++ b/apps/experiments/Modena/nbproject/jfx-impl.xml	Wed Feb 13 18:35:25 2013 -0500
@@ -27,16 +27,28 @@
         <!-- Called right after <fx:deploy> task. You can override this target in the ../build.xml file. -->
     </target>
     
+    <target name="-pre-jfx-native">
+        <!-- Called right before the call to native packager (just after -pre-jfx-deploy). You can override this target in the ../build.xml file. -->
+    </target>
+
+    <target name="-post-jfx-native">
+        <!-- Called right after the call to native packager (just after -post-jfx-deploy). You can override this target in the ../build.xml file. -->
+    </target>
+    
     
     <!-- Check system and JDK version -->
 
     <target name="-check-operating-system">
+        <condition property="running.on.mac">
+            <os family="mac"/>
+        </condition>
         <condition property="running.on.unix">
             <os family="unix"/>
         </condition>
         <condition property="running.on.windows">
             <os family="windows"/>
         </condition>
+        <echo message="running.on.mac = ${running.on.mac}" level="verbose"/>
         <echo message="running.on.unix = ${running.on.unix}" level="verbose"/>
         <echo message="running.on.windows = ${running.on.windows}" level="verbose"/>
     </target>
@@ -162,6 +174,7 @@
         </condition>
         <condition property="have-jdk-pre7u6">
             <or>
+                <isset property="have-jdk-older-than-1.6"/>
                 <contains string="${version-output}" substring="java version &quot;1.6"/>
                 <contains string="${version-output}" substring="java version &quot;1.7.0&quot;"/>
                 <contains string="${version-output}" substring="java version &quot;1.7.0_01"/>
@@ -171,11 +184,51 @@
                 <contains string="${version-output}" substring="java version &quot;1.7.0_05"/>
             </or>
         </condition>
+        <condition property="have-jdk7-css2bin-bug">
+            <or>
+                <contains string="${version-output}" substring="java version &quot;1.7.0_04"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0_05"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0_06"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0_07"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0_08"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0_09"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0_10"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0_11"/>
+            </or>
+        </condition>
         <property name="jdk-version-checked-in-jfximpl" value="true"/>
         <echo message="have-jdk-7u4or5-mac = ${have-jdk-7u4or5-mac}" level="verbose"/>
         <echo message="have-jdk-pre7u6 = ${have-jdk-pre7u6}" level="verbose"/>
+        <echo message="have-jdk7-css2bin-bug = ${have-jdk7-css2bin-bug}" level="verbose"/>
     </target>
         
+    <target name="-check-ant-jre-version" unless="ant-jre-version-checked-in-jfximpl">
+        <local name="version-output"/>
+        <exec executable="${java.home}${file.separator}bin${file.separator}java" outputproperty="version-output">
+            <arg value="-version"/>
+        </exec>
+        <echo message="version-output:${line.separator}${version-output}" level="verbose"/>
+        <condition property="have-ant-jre-pre7u6">
+            <or>
+                <contains string="${version-output}" substring="java version &quot;1.0"/>
+                <contains string="${version-output}" substring="java version &quot;1.1"/>
+                <contains string="${version-output}" substring="java version &quot;1.2"/>
+                <contains string="${version-output}" substring="java version &quot;1.3"/>
+                <contains string="${version-output}" substring="java version &quot;1.4"/>
+                <contains string="${version-output}" substring="java version &quot;1.5"/>
+                <contains string="${version-output}" substring="java version &quot;1.6"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0&quot;"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0_01"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0_02"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0_03"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0_04"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0_05"/>
+            </or>
+        </condition>
+        <property name="ant-jre-version-checked-in-jfximpl" value="true"/>
+        <echo message="have-ant-jre-pre7u6 = ${have-ant-jre-pre7u6}" level="verbose"/>
+    </target>
+
     <target name="-check-jdk-7u4or5-mac" depends="-check-jdk-version" if="have-jdk-7u4or5-mac">
         <fail message="Error:${line.separator}JDK 7u4 Mac and 7u5 Mac do not support WebStart and JavaFX 2.0+ browser plugin technologies.${line.separator}Please upgrade to JDK 7u6 or later."/>
     </target>
@@ -357,11 +410,17 @@
             <!-- new features from JavaFX 2.0.2 are available in API version 1.1 or later -->
             <matches pattern="1.[1-9]" string="${javafx.ant.version}"/>
         </condition>
+        <condition property="have-fx-ant-api-1.2">
+            <!-- new features from JavaFX 2.2 are available in API version 1.2 or later -->
+            <matches pattern="1.[2-9]" string="${javafx.ant.version}"/>
+        </condition>
     </target>
-    <target name="-check-jfx-sdk-version" depends="-check-jfx-sdk-version-old, -check-jfx-sdk-version-new">
+    <target name="-check-jfx-sdk-version" depends="-check-jfx-sdk-version-old, -check-jfx-sdk-version-new" unless="jfx.sdk.version.checked">
         <echo message="Detected JavaFX Ant API version ${javafx.ant.version}" level="info"/>
         <echo message="have-fx-ant-api-1.1 = ${have-fx-ant-api-1.1}" level="verbose"/>
+        <echo message="have-fx-ant-api-1.2 = ${have-fx-ant-api-1.2}" level="verbose"/>
         <echo message="javafx.ant.classpath = ${javafx.ant.classpath}" level="verbose"/>
+        <property name="jfx.sdk.version.checked" value="true"/>
     </target>
 
     <target name="-check-jfx-deployment" depends="-check-jdk-version,-check-jfx-sdk-version">
@@ -401,7 +460,7 @@
             </and>
         </condition>
         <fail message="Error:${line.separator}JavaFX deployment library not found in active JDK.${line.separator}Please check that the JDK is correctly installed and its version is at least 7u4 on Mac or 7u6 on other systems." if="jfx-deployment-missing+jdk7u6"/>
-        <fail message="Error:${line.separator}JavaFX deployment library not found.${line.separator}JavaFX SDK path undefined. Check the definition of ${platform.active} in Java Platform Manager${line.separator}(or directly the properties platform.active and javafx.sdk in project.properties file).${line.separator}Note: If missing, the default JavaFX-enabled platform gets created automatically when creating a new FX Project." if="jfx-deployment-missing+javafx.sdk.missing+default"/>
+        <fail message="Error:${line.separator}JavaFX deployment library not found.${line.separator}JavaFX SDK path undefined. Check the definition of ${platform.active} in Java Platform Manager${line.separator}(or directly the properties platform.active and javafx.sdk in project.properties file).${line.separator}Note: If missing, the default JavaFX-enabled platform gets created automatically when creating a new JavaFX Project." if="jfx-deployment-missing+javafx.sdk.missing+default"/>
         <fail message="Error:${line.separator}JavaFX deployment library not found.${line.separator}JavaFX SDK path undefined. Check the definition of ${platform.active} in Java Platform Manager${line.separator}(or directly the properties platform.active and javafx.sdk in project.properties file)." if="jfx-deployment-missing+javafx.sdk.missing-default"/>
         <fail message="Error:${line.separator}JavaFX deployment library not found." unless="jfx-deployment-available"/>
         <echo message="jfx-deployment-available = ${jfx-deployment-available}" level="verbose"/>
@@ -436,84 +495,154 @@
     </target>
 
     <target name="-check-jfxrt-in-fxrt" depends="-check-property-javafx.runtime" if="javafx.runtime.defined">
-        <condition property="do.set.jfxrt.in.fxrt">
+        <condition property="do.set.jfxrt.in.fxrt.old">
             <and>
                 <not><isset property="jfxrt.jar.location"/></not>
                 <available file="${javafx.runtime}${file.separator}lib${file.separator}jfxrt.jar"/>
             </and>
         </condition>
+        <condition property="do.set.jfxrt.in.fxrt.new">
+            <and>
+                <not><isset property="do.set.jfxrt.in.fxrt.old"/></not>
+                <not><isset property="jfxrt.jar.location"/></not>
+                <available file="${javafx.runtime}${file.separator}lib${file.separator}ext${file.separator}jfxrt.jar"/>
+            </and>
+        </condition>
     </target>
-    <target name="-set-jfxrt-in-fxrt" depends="-check-jfxrt-in-fxrt" if="do.set.jfxrt.in.fxrt">
+    <target name="-set-jfxrt-in-fxrt-old" depends="-check-jfxrt-in-fxrt" if="do.set.jfxrt.in.fxrt.old">
         <property name="jfxrt.jar.location" value="${javafx.runtime}${file.separator}lib${file.separator}jfxrt.jar"/>
     </target>
+    <target name="-set-jfxrt-in-fxrt-new" depends="-set-jfxrt-in-fxrt-old,-check-jfxrt-in-fxrt" if="do.set.jfxrt.in.fxrt.new">
+        <property name="jfxrt.jar.location" value="${javafx.runtime}${file.separator}lib${file.separator}ext${file.separator}jfxrt.jar"/>
+    </target>
     <target name="-check-jfxrt-in-fxsdk-jre" depends="-check-property-javafx.sdk" if="javafx.sdk.defined">
-        <condition property="do.set.jfxrt.in.fxsdk.jre">
+        <condition property="do.set.jfxrt.in.fxsdk.jre.old">
             <and>
                 <not><isset property="jfxrt.jar.location"/></not>
                 <available file="${javafx.sdk}${file.separator}jre${file.separator}lib${file.separator}jfxrt.jar"/>
             </and>
         </condition>
+        <condition property="do.set.jfxrt.in.fxsdk.jre.new">
+            <and>
+                <not><isset property="do.set.jfxrt.in.fxsdk.jre.old"/></not>
+                <not><isset property="jfxrt.jar.location"/></not>
+                <available file="${javafx.sdk}${file.separator}jre${file.separator}lib${file.separator}ext${file.separator}jfxrt.jar"/>
+            </and>
+        </condition>
     </target>
-    <target name="-set-jfxrt-in-fxsdk-jre" depends="-set-jfxrt-in-fxrt,-check-jfxrt-in-fxsdk-jre" if="do.set.jfxrt.in.fxsdk.jre">
+    <target name="-set-jfxrt-in-fxsdk-jre-old" depends="-set-jfxrt-in-fxrt-new,-check-jfxrt-in-fxsdk-jre" if="do.set.jfxrt.in.fxsdk.jre.old">
         <property name="jfxrt.jar.location" value="${javafx.sdk}${file.separator}jre${file.separator}lib${file.separator}jfxrt.jar"/>
     </target>
+    <target name="-set-jfxrt-in-fxsdk-jre-new" depends="-set-jfxrt-in-fxsdk-jre-old,-check-jfxrt-in-fxsdk-jre" if="do.set.jfxrt.in.fxsdk.jre.new">
+        <property name="jfxrt.jar.location" value="${javafx.sdk}${file.separator}jre${file.separator}lib${file.separator}ext${file.separator}jfxrt.jar"/>
+    </target>
     <target name="-check-jfxrt-in-fxsdk-rt" depends="-check-property-javafx.sdk" if="javafx.sdk.defined">
-        <condition property="do.set.jfxrt.in.fxsdk.rt">
+        <condition property="do.set.jfxrt.in.fxsdk.rt.old">
             <and>
                 <not><isset property="jfxrt.jar.location"/></not>
                 <available file="${javafx.sdk}${file.separator}rt${file.separator}lib${file.separator}jfxrt.jar"/>
             </and>
         </condition>
+        <condition property="do.set.jfxrt.in.fxsdk.rt.new">
+            <and>
+                <not><isset property="do.set.jfxrt.in.fxsdk.rt.old"/></not>
+                <not><isset property="jfxrt.jar.location"/></not>
+                <available file="${javafx.sdk}${file.separator}rt${file.separator}lib${file.separator}ext${file.separator}jfxrt.jar"/>
+            </and>
+        </condition>
     </target>
-    <target name="-set-jfxrt-in-fxsdk-rt" depends="-set-jfxrt-in-fxsdk-jre,-check-jfxrt-in-fxsdk-rt" if="do.set.jfxrt.in.fxsdk.rt">
+    <target name="-set-jfxrt-in-fxsdk-rt-old" depends="-set-jfxrt-in-fxsdk-jre-new,-check-jfxrt-in-fxsdk-rt" if="do.set.jfxrt.in.fxsdk.rt.old">
         <property name="jfxrt.jar.location" value="${javafx.sdk}${file.separator}rt${file.separator}lib${file.separator}jfxrt.jar"/>
     </target>
+    <target name="-set-jfxrt-in-fxsdk-rt-new" depends="-set-jfxrt-in-fxsdk-rt-old,-check-jfxrt-in-fxsdk-rt" if="do.set.jfxrt.in.fxsdk.rt.new">
+        <property name="jfxrt.jar.location" value="${javafx.sdk}${file.separator}rt${file.separator}lib${file.separator}ext${file.separator}jfxrt.jar"/>
+    </target>
     <target name="-check-jfxrt-in-platform-home-jre" if="platform.home">
-        <condition property="do.set.jfxrt.in.platform.home.jre">
+        <condition property="do.set.jfxrt.in.platform.home.jre.old">
             <and>
                 <not><isset property="jfxrt.jar.location"/></not>
                 <available file="${platform.home}${file.separator}jre${file.separator}lib${file.separator}jfxrt.jar"/>
             </and>
         </condition>
+        <condition property="do.set.jfxrt.in.platform.home.jre.new">
+            <and>
+                <not><isset property="do.set.jfxrt.in.platform.home.jre.old"/></not>
+                <not><isset property="jfxrt.jar.location"/></not>
+                <available file="${platform.home}${file.separator}jre${file.separator}lib${file.separator}ext${file.separator}jfxrt.jar"/>
+            </and>
+        </condition>
     </target>
-    <target name="-set-jfxrt-in-platform-home-jre" depends="-set-jfxrt-in-fxsdk-rt,-check-jfxrt-in-platform-home-jre" if="do.set.jfxrt.in.platform.home.jre">
+    <target name="-set-jfxrt-in-platform-home-jre-old" depends="-set-jfxrt-in-fxsdk-rt-new,-check-jfxrt-in-platform-home-jre" if="do.set.jfxrt.in.platform.home.jre.old">
         <property name="jfxrt.jar.location" value="${platform.home}${file.separator}jre${file.separator}lib${file.separator}jfxrt.jar"/>
     </target>
+    <target name="-set-jfxrt-in-platform-home-jre-new" depends="-set-jfxrt-in-platform-home-jre-old,-check-jfxrt-in-platform-home-jre" if="do.set.jfxrt.in.platform.home.jre.new">
+        <property name="jfxrt.jar.location" value="${platform.home}${file.separator}jre${file.separator}lib${file.separator}ext${file.separator}jfxrt.jar"/>
+    </target>
     <target name="-check-jfxrt-in-platform-home-rt" if="platform.home">
-        <condition property="do.set.jfxrt.in.platform.home.rt">
+        <condition property="do.set.jfxrt.in.platform.home.rt.old">
             <and>
                 <not><isset property="jfxrt.jar.location"/></not>
                 <available file="${platform.home}${file.separator}rt${file.separator}lib${file.separator}jfxrt.jar"/>
             </and>
         </condition>
+        <condition property="do.set.jfxrt.in.platform.home.rt.new">
+            <and>
+                <not><isset property="do.set.jfxrt.in.platform.home.rt.old"/></not>
+                <not><isset property="jfxrt.jar.location"/></not>
+                <available file="${platform.home}${file.separator}rt${file.separator}lib${file.separator}ext${file.separator}jfxrt.jar"/>
+            </and>
+        </condition>
     </target>
-    <target name="-set-jfxrt-in-platform-home-rt" depends="-set-jfxrt-in-platform-home-jre,-check-jfxrt-in-platform-home-rt" if="do.set.jfxrt.in.platform.home.rt">
+    <target name="-set-jfxrt-in-platform-home-rt-old" depends="-set-jfxrt-in-platform-home-jre-new,-check-jfxrt-in-platform-home-rt" if="do.set.jfxrt.in.platform.home.rt.old">
         <property name="jfxrt.jar.location" value="${platform.home}${file.separator}rt${file.separator}lib${file.separator}jfxrt.jar"/>
     </target>
+    <target name="-set-jfxrt-in-platform-home-rt-new" depends="-set-jfxrt-in-platform-home-rt-old,-check-jfxrt-in-platform-home-rt" if="do.set.jfxrt.in.platform.home.rt.new">
+        <property name="jfxrt.jar.location" value="${platform.home}${file.separator}rt${file.separator}lib${file.separator}ext${file.separator}jfxrt.jar"/>
+    </target>
     <target name="-check-jfxrt-in-jre" unless="jfxrt.jar.location">
-        <condition property="do.set.jfxrt.in.jre">
+        <condition property="do.set.jfxrt.in.jre.old">
             <and>
                 <not><isset property="jfxrt.jar.location"/></not>
                 <available file="${java.home}${file.separator}lib${file.separator}jfxrt.jar"/>
             </and>
         </condition>
+        <condition property="do.set.jfxrt.in.jre.new">
+            <and>
+                <not><isset property="do.set.jfxrt.in.jre.old"/></not>
+                <not><isset property="jfxrt.jar.location"/></not>
+                <available file="${java.home}${file.separator}lib${file.separator}ext${file.separator}jfxrt.jar"/>
+            </and>
+        </condition>
     </target>
-    <target name="-set-jfxrt-in-jre" depends="-set-jfxrt-in-platform-home-rt,-check-jfxrt-in-jre" if="do.set.jfxrt.in.jre">
+    <target name="-set-jfxrt-in-jre-old" depends="-set-jfxrt-in-platform-home-rt-new,-check-jfxrt-in-jre" if="do.set.jfxrt.in.jre.old">
         <property name="jfxrt.jar.location" value="${java.home}${file.separator}lib${file.separator}jfxrt.jar"/>
     </target>
+    <target name="-set-jfxrt-in-jre-new" depends="-set-jfxrt-in-jre-old,-check-jfxrt-in-jre" if="do.set.jfxrt.in.jre.new">
+        <property name="jfxrt.jar.location" value="${java.home}${file.separator}lib${file.separator}ext${file.separator}jfxrt.jar"/>
+    </target>
     <target name="-check-jfxrt-in-envjdk-jre" unless="jfxrt.jar.location">
         <property environment="env"/>
-        <condition property="do.set.jfxrt.in.envjdk.jre">
+        <condition property="do.set.jfxrt.in.envjdk.jre.old">
             <and>
-                <not><isset property="ant-javafx.jar.location"/></not>
+                <not><isset property="jfxrt.jar.location"/></not>
                 <available file="${env.JAVA_HOME}${file.separator}jre${file.separator}lib${file.separator}jfxrt.jar"/>
             </and>
         </condition>
+        <condition property="do.set.jfxrt.in.envjdk.jre.new">
+            <and>
+                <not><isset property="do.set.jfxrt.in.envjdk.jre.old"/></not>
+                <not><isset property="jfxrt.jar.location"/></not>
+                <available file="${env.JAVA_HOME}${file.separator}jre${file.separator}lib${file.separator}ext${file.separator}jfxrt.jar"/>
+            </and>
+        </condition>
     </target>
-    <target name="-set-jfxrt-in-envjdk-jre" depends="-set-jfxrt-in-jre,-check-jfxrt-in-envjdk-jre" if="do.set.jfxrt.in.envjdk.jre">
+    <target name="-set-jfxrt-in-envjdk-jre-old" depends="-set-jfxrt-in-jre-new,-check-jfxrt-in-envjdk-jre" if="do.set.jfxrt.in.envjdk.jre.old">
         <property name="jfxrt.jar.location" value="${env.JAVA_HOME}${file.separator}jre${file.separator}lib${file.separator}jfxrt.jar"/>
     </target>
-    <target name="-pre-check-jfx-runtime" depends="-set-jfxrt-in-envjdk-jre">
+    <target name="-set-jfxrt-in-envjdk-jre-new" depends="-set-jfxrt-in-envjdk-jre-old,-check-jfxrt-in-envjdk-jre" if="do.set.jfxrt.in.envjdk.jre.new">
+        <property name="jfxrt.jar.location" value="${env.JAVA_HOME}${file.separator}jre${file.separator}lib${file.separator}ext${file.separator}jfxrt.jar"/>
+    </target>
+    <target name="-pre-check-jfx-runtime" depends="-set-jfxrt-in-envjdk-jre-new">
         <echo message="jfxrt.jar.location = ${jfxrt.jar.location}" level="verbose"/>
     </target>
 
@@ -521,13 +650,20 @@
         <condition property="jfx-runtime-available">
             <and>
                 <or>
-                    <isset property="do.set.jfxrt.in.fxrt"/>
-                    <isset property="do.set.jfxrt.in.fxsdk.jre"/>
-                    <isset property="do.set.jfxrt.in.fxsdk.rt"/>
-                    <isset property="do.set.jfxrt.in.platform.home.jre"/>
-                    <isset property="do.set.jfxrt.in.platform.home.rt"/>
-                    <isset property="do.set.jfxrt.in.jre"/>
-                    <isset property="do.set.jfxrt.in.envjdk.jre"/>
+                    <isset property="do.set.jfxrt.in.fxrt.old"/>
+                    <isset property="do.set.jfxrt.in.fxrt.new"/>
+                    <isset property="do.set.jfxrt.in.fxsdk.jre.old"/>
+                    <isset property="do.set.jfxrt.in.fxsdk.jre.new"/>
+                    <isset property="do.set.jfxrt.in.fxsdk.rt.old"/>
+                    <isset property="do.set.jfxrt.in.fxsdk.rt.new"/>
+                    <isset property="do.set.jfxrt.in.platform.home.jre.old"/>
+                    <isset property="do.set.jfxrt.in.platform.home.jre.new"/>
+                    <isset property="do.set.jfxrt.in.platform.home.rt.old"/>
+                    <isset property="do.set.jfxrt.in.platform.home.rt.new"/>
+                    <isset property="do.set.jfxrt.in.jre.old"/>
+                    <isset property="do.set.jfxrt.in.jre.new"/>
+                    <isset property="do.set.jfxrt.in.envjdk.jre.old"/>
+                    <isset property="do.set.jfxrt.in.envjdk.jre.new"/>
                 </or>
                 <isset property="jfxrt.jar.location"/>
             </and>
@@ -724,7 +860,7 @@
             </and>
         </condition>
         <fail message="Error:${line.separator}WebStart executable could not be found in active JDK.${line.separator}Please check that the JDK is correctly installed and its version is at least 7u6." if="jfx-webstart-missing+jdk7u6"/>
-        <fail message="Error:${line.separator}WebStart executable could not be found.${line.separator}JavaFX RT path undefined. Check the definition of ${platform.active} in Java Platform Manager${line.separator}(or directly the properties platform.active and javafx.runtime in project.properties file).${line.separator}Note: If missing, the default JavaFX-enabled platform gets created automatically when creating a new FX Project." if="jfx-webstart-missing+javafx.runtime.missing+default"/>
+        <fail message="Error:${line.separator}WebStart executable could not be found.${line.separator}JavaFX RT path undefined. Check the definition of ${platform.active} in Java Platform Manager${line.separator}(or directly the properties platform.active and javafx.runtime in project.properties file).${line.separator}Note: If missing, the default JavaFX-enabled platform gets created automatically when creating a new JavaFX Project." if="jfx-webstart-missing+javafx.runtime.missing+default"/>
         <fail message="Error:${line.separator}WebStart executable could not be found.${line.separator}JavaFX RT path undefined. Check the definition of ${platform.active} in Java Platform Manager${line.separator}(or directly the properties platform.active and javafx.runtime in project.properties file)." if="jfx-webstart-missing+javafx.runtime.missing-default"/>
         <fail message="Error:${line.separator}WebStart executable could not be found." unless="jfx-webstart-available"/>
         <echo message="jfx-webstart-available = ${jfx-webstart-available}" level="verbose"/>
@@ -866,7 +1002,6 @@
                 <equals arg1="${javafx.rebase.libs}" arg2="true" trim="true"/>
             </and>
         </condition>
-
         <echo message="main-class-available = ${main-class-available}" level="verbose"/>
         <echo message="vmargs-available = ${vmargs-available}" level="verbose"/>
         <echo message="preloader-available = ${preloader-available}" level="verbose"/>
@@ -887,6 +1022,18 @@
         <echo message="rebase-lib-jars = ${rebase-lib-jars}" level="verbose"/>
     </target>
 
+    <target name="-swing-api-check" depends="-check-project,-check-jfx-deployment" if="fx-in-swing-app">
+        <condition property="fx-in-swing-app-workaround">
+            <and>
+                <isset property="fx-in-swing-app"/>
+                <not><isset property="have-fx-ant-api-1.2"/></not>
+            </and>
+        </condition>
+    </target>
+    <target name="-swing-api-warning" depends="-swing-api-check" if="fx-in-swing-app-workaround">
+        <echo message="Info: No support for FX-in-Swing deployment detected in current JavaFX SDK. Using workaround instead."/>
+    </target>
+
     <target name="-icon-deployment-check" depends="-check-project,-check-jfx-deployment" if="icon-available">
         <condition property="icon-deployment-may-not-be-supported">
             <and>
@@ -922,18 +1069,41 @@
         <property name="permissions.elevated" value="false"/>
     </target>
 
-    <target name="-set-binary-css" depends="-check-project" if="binary-encode-css">
+    <target name="-set-binary-css" depends="-check-project,-init-css-conversion" if="do.copy.binary.css">
         <property name="css-include-ext" value="bss"/>
         <property name="css-exclude-ext" value="css"/>
     </target>
-    <target name="-unset-binary-css" depends="-check-project" unless="binary-encode-css">
+    <target name="-unset-binary-css" depends="-check-project,-init-css-conversion" unless="do.copy.binary.css">
         <property name="css-include-ext" value="css"/>
         <property name="css-exclude-ext" value="bss"/>
     </target>
-    <target name="-copy-binary-css" depends="-check-project" if="binary-encode-css">
+    <target name="-copy-binary-css" depends="-init-css-conversion,-set-binary-css,-unset-binary-css,-copy-binary-css-bypass,-copy-binary-css-impl"/>
+    <target name="-init-css-conversion" depends="-check-project,-check-jdk-version">
         <fileset id="cssfiles" dir="${basedir}${file.separator}${build.classes.dir}">
             <include name="**${file.separator}*.css"/>
         </fileset>
+        <pathconvert refid="cssfiles" property="cssfileset.notempty" setonempty="false"/>
+        <condition property="do.copy.binary.css">
+            <and>
+                <isset property="binary-encode-css"/>
+                <isset property="cssfileset.notempty"/>
+                <not><isset property="have-jdk7-css2bin-bug"/></not>
+            </and>
+        </condition>
+        <condition property="do.bypass.binary.css">
+            <and>
+                <isset property="binary-encode-css"/>
+                <isset property="cssfileset.notempty"/>
+                <isset property="have-jdk7-css2bin-bug"/>
+            </and>
+        </condition>
+        <echo message="do.copy.binary.css = ${do.copy.binary.css}" level="verbose"/>
+        <echo message="do.bypass.binary.css = ${do.bypass.binary.css}" level="verbose"/>
+    </target>
+    <target name="-copy-binary-css-bypass" depends="-init-css-conversion" if="do.bypass.binary.css">
+        <echo message="Warning: Bypassing FX CSS to BSS conversion due to a bug in &lt;fx:csstobin&gt; task in current JDK platform" level="warning"/>
+    </target>
+    <target name="-copy-binary-css-impl" depends="-init-css-conversion" if="do.copy.binary.css">
         <property name="cssfileslist" refid="cssfiles"/>
         <echo message="css files to binary convert: " level="verbose">${cssfileslist}</echo>
         <fx:csstobin outdir="${basedir}${file.separator}${build.classes.dir}">
@@ -945,67 +1115,76 @@
     <!-- Copy dependent libraries -->
     
     <!-- Note: target "-jfx-copylibs" is referenced from NB 7.1 build-impl.xml -->
-    <target name="-jfx-copylibs" depends="init,compile,-pre-pre-jar,-pre-jar">
-        <local name="run.classpath.without.build.classes.and.dist.dir"/>
-        <pathconvert property="run.classpath.without.build.classes.and.dist.dir">
-            <path path="${run.classpath}"/>
-            <map from="${basedir}${file.separator}${build.classes.dir}" to=""/>
-            <map from="${basedir}${file.separator}${dist.jar}" to=""/>
-            <map from="${javafx.runtime}${file.separator}lib${file.separator}jfxrt.jar" to=""/>
-            <map from="${javafx.runtime}${file.separator}lib${file.separator}deploy.jar" to=""/>
-            <map from="${javafx.runtime}${file.separator}lib${file.separator}javaws.jar" to=""/>
-            <map from="${javafx.runtime}${file.separator}lib${file.separator}plugin.jar" to=""/>
-        </pathconvert>
-        <!-- add possibly missing dependencies at distance 2 (build system logic thus provides transitive closure) -->
-        <local name="run.and.lib.classpath"/>
-        <script language="javascript">
-            <![CDATA[
-                var pathConvert = project.createTask("pathconvert");
-                pathConvert.setProperty("run.and.lib.classpath");
-                var classPath = project.getProperty("run.classpath.without.build.classes.and.dist.dir");
-                var fileSeparator = project.getProperty("file.separator");
-                if(classPath != null) {
-                    var classPathCopy = pathConvert.createPath();
-                    classPathCopy.setPath(classPath);
-                    if(classPath.indexOf(";") != -1) {
-                        var pathArray = classPath.split(";");
-                    } else {
-                        var pathArray = classPath.split(":");
-                    }
-                    var added = "";
-                    for (var i=0; i<pathArray.length; i++) {
-                        var index = pathArray[i].lastIndexOf(fileSeparator);
-                        if (index >=0) {
-                            var onePath = pathArray[i].substr(0,index+1) + "lib";
-                            var oneDir = new java.io.File(onePath);
-                            if(oneDir.exists()) {
-                                var fs = project.createDataType("fileset");
-                                fs.setDir( oneDir );
-                                fs.setIncludes("*.jar");
-                                var ds = fs.getDirectoryScanner(project);
-                                var srcFiles = ds.getIncludedFiles();
-                                for (j=0; j<srcFiles.length; j++) {
-                                    if(classPath.indexOf(srcFiles[j]) == -1 && added.indexOf(srcFiles[j]) == -1) {
-                                        var path = pathConvert.createPath();
-                                        path.setPath(onePath + fileSeparator + srcFiles[j]);
-                                        added += srcFiles[j];
+    <target name="-jfx-copylibs" depends="init,compile,-pre-pre-jar,-pre-jar,-jfx-copylibs-warning" unless="fallback.no.javascript">
+        <jfx-copylibs-js-impl/>
+    </target>
+    <target name="-jfx-copylibs-warning" if="fallback.no.javascript">
+        <echo message="Warning: Dependent Libraries copy (-jfx-copylibs) skipped in fallback build mode due to JDK missing JavaScript support."/>
+    </target>
+    <macrodef name="jfx-copylibs-js-impl">
+        <sequential>
+            <local name="run.classpath.without.build.classes.and.dist.dir"/>
+            <pathconvert property="run.classpath.without.build.classes.and.dist.dir">
+                <path path="${run.classpath}"/>
+                <map from="${basedir}${file.separator}${build.classes.dir}" to=""/>
+                <map from="${basedir}${file.separator}${dist.jar}" to=""/>
+                <map from="${javafx.runtime}${file.separator}lib${file.separator}jfxrt.jar" to=""/>
+                <map from="${javafx.runtime}${file.separator}lib${file.separator}deploy.jar" to=""/>
+                <map from="${javafx.runtime}${file.separator}lib${file.separator}javaws.jar" to=""/>
+                <map from="${javafx.runtime}${file.separator}lib${file.separator}plugin.jar" to=""/>
+            </pathconvert>
+            <!-- add possibly missing dependencies at distance 2 (build system logic thus provides transitive closure) -->
+            <local name="run.and.lib.classpath"/>
+            <echo message="JavaScript: -jfx-copylibs" level="verbose"/>
+            <script language="javascript">
+                <![CDATA[
+                    var pathConvert = project.createTask("pathconvert");
+                    pathConvert.setProperty("run.and.lib.classpath");
+                    var classPath = project.getProperty("run.classpath.without.build.classes.and.dist.dir");
+                    var fileSeparator = project.getProperty("file.separator");
+                    if(classPath != null) {
+                        var classPathCopy = pathConvert.createPath();
+                        classPathCopy.setPath(classPath);
+                        if(classPath.indexOf(";") != -1) {
+                            var pathArray = classPath.split(";");
+                        } else {
+                            var pathArray = classPath.split(":");
+                        }
+                        var added = "";
+                        for (var i=0; i<pathArray.length; i++) {
+                            var index = pathArray[i].lastIndexOf(fileSeparator);
+                            if (index >=0) {
+                                var onePath = pathArray[i].substr(0,index+1) + "lib";
+                                var oneDir = new java.io.File(onePath);
+                                if(oneDir.exists()) {
+                                    var fs = project.createDataType("fileset");
+                                    fs.setDir( oneDir );
+                                    fs.setIncludes("*.jar");
+                                    var ds = fs.getDirectoryScanner(project);
+                                    var srcFiles = ds.getIncludedFiles();
+                                    for (j=0; j<srcFiles.length; j++) {
+                                        if(classPath.indexOf(srcFiles[j]) == -1 && added.indexOf(srcFiles[j]) == -1) {
+                                            var path = pathConvert.createPath();
+                                            path.setPath(onePath + fileSeparator + srcFiles[j]);
+                                            added += srcFiles[j];
+                                        }
                                     }
                                 }
                             }
                         }
                     }
-                }
-                pathConvert.perform();
-            ]]>
-        </script>
-        <echo message="run.and.lib.classpath = ${run.and.lib.classpath}" level="verbose"/>
-        <delete dir="${dist.dir}${file.separator}lib" includeEmptyDirs="true" quiet="true"/>
-        <copy todir="${dist.dir}${file.separator}lib" flatten="true" preservelastmodified="true" overwrite="true">
-            <path>
-                <pathelement path="${run.and.lib.classpath}"/>
-            </path>
-        </copy>
-    </target>
+                    pathConvert.perform();
+                ]]>
+            </script>
+            <echo message="run.and.lib.classpath = ${run.and.lib.classpath}" level="verbose"/>
+            <delete dir="${dist.dir}${file.separator}lib" includeEmptyDirs="true" quiet="true"/>
+            <copy todir="${dist.dir}${file.separator}lib" flatten="true" preservelastmodified="true" overwrite="true">
+                <path>
+                    <pathelement path="${run.and.lib.classpath}"/>
+                </path>
+            </copy>
+        </sequential>
+    </macrodef>
     
     <target name="-copy-external-preloader-jar" depends="-check-project" if="app-with-external-preloader-jar">
         <copy file="${javafx.preloader.jar.path}" todir="${dist.dir}${file.separator}lib"/>
@@ -1014,6 +1193,58 @@
 
     <!-- Optional classpath re-base of dependent JAR manifests after copy to lib/, required by GlassFish -->
 
+    <!-- Note: target "-rebase-libs" is referenced from NB 7.1 build-impl.xml -->
+    <target name="-rebase-libs" depends="-check-project, -jfx-copylibs, -check-rebase-libs, -rebase-libs-warning" if="do-rebase-lib-jars">
+        <rebase-libs-js-impl/>
+    </target>
+    <target name="-check-rebase-libs">
+        <condition property="do-rebase-lib-jars">
+            <and>
+                <isset property="rebase-lib-jars"/>
+                <not><isset property="fallback.no.javascript"/></not>
+            </and>
+        </condition>
+        <condition property="do-skip-rebase-libs">
+            <and>
+                <isset property="rebase-lib-jars"/>
+                <isset property="fallback.no.javascript"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-rebase-libs-warning" depends="-check-rebase-libs" if="do-skip-rebase-libs">
+        <echo message="Warning: Dependent Libraries JARs rebase (-rebase-libs) skipped in fallback build mode due to JDK missing JavaScript support."/>
+    </target>
+
+    <macrodef name="rebase-libs-js-impl">
+        <sequential>
+            <property name="pp_rebase_dir" value="${basedir}${file.separator}${dist.dir}${file.separator}lib"/>
+            <property name="pp_rebase_fs" value="*.jar"/>
+            <echo message="JavaScript: -rebase-libs-js-impl" level="verbose"/>
+            <script language="javascript">
+                <![CDATA[
+                    var dir = project.getProperty("pp_rebase_dir");
+                    var fDir = new java.io.File(dir);
+                    if( fDir.exists() ) {
+                        var callTask = project.createTask("antcall");
+                        callTask.setTarget("-rebase-libs-macro-call");
+                        var param = callTask.createParam();
+                        param.setName("jar.file.to.rebase");
+                        var includes = project.getProperty("pp_rebase_fs");
+                        var fs = project.createDataType("fileset");
+                        fs.setDir( fDir );
+                        fs.setIncludes(includes);
+                        var ds = fs.getDirectoryScanner(project);
+                        var srcFiles = ds.getIncludedFiles();
+                        for (i=0; i<srcFiles.length; i++) {
+                            param.setValue(dir + "${file.separator}" + srcFiles[i]);
+                            callTask.perform();
+                        }
+                    }
+                ]]>
+            </script>
+        </sequential>
+    </macrodef>
+
     <macrodef name="rebase-lib">
         <attribute name="jarfile"/>
         <sequential>
@@ -1034,6 +1265,7 @@
             <local name="manifest.file.temp.new"/>
             <property name="manifest.file.temp.new" value="${manifest.file.temp}_new" />
             <echo message="manifest.file.temp.new = ${manifest.file.temp.new}" level="verbose"/>
+            <echo message="JavaScript: rebase-lib" level="verbose"/>
             <script language="javascript">
                 <![CDATA[
                     var UTF_8 = "UTF-8";
@@ -1153,42 +1385,57 @@
         <rebase-lib jarfile="${jar.file.to.rebase}"/>
     </target>
     
-    <!-- Note: target "-rebase-libs" is referenced from NB 7.1 build-impl.xml -->
-    <target name="-rebase-libs" depends="-check-project, -jfx-copylibs" if="rebase-lib-jars">
-        <property name="pp_rebase_dir" value="${basedir}${file.separator}${dist.dir}${file.separator}lib"/>
-        <property name="pp_rebase_fs" value="*.jar"/>
-        <script language="javascript">
-            <![CDATA[
-                var dir = project.getProperty("pp_rebase_dir");
-                var fDir = new java.io.File(dir);
-                if( fDir.exists() ) {
-                    var callTask = project.createTask("antcall");
-                    callTask.setTarget("-rebase-libs-macro-call");
-                    var param = callTask.createParam();
-                    param.setName("jar.file.to.rebase");
-                    var includes = project.getProperty("pp_rebase_fs");
-                    var fs = project.createDataType("fileset");
-                    fs.setDir( fDir );
-                    fs.setIncludes(includes);
-                    var ds = fs.getDirectoryScanner(project);
-                    var srcFiles = ds.getIncludedFiles();
-                    for (i=0; i<srcFiles.length; i++) {
-                        param.setValue(dir + "${file.separator}" + srcFiles[i]);
-                        callTask.perform();
-                    }
-                }
-            ]]>
-        </script>
-    </target>
-
 
     <!-- Main Deployment Target -->
 
-    <!-- Note: target "jfx-deployment" is referenced from NB 7.1 build-impl.xml -->
-    <target name="jfx-deployment" depends="-check-jfx-deployment,-check-project,-icon-warning,
+    <!-- Note: target "jfx-deployment" is referenced from NB 7.1+ build-impl.xml -->
+    <target name="jfx-deployment" depends="-check-jfx-deployment-launch,-do-jfx-deployment-script,-do-jfx-deployment-noscript" if="jfx-deployment-available"/>
+
+    <target name="-check-dist-lib-exists">
+        <deploy-defines/>
+        <available file="${jfx.deployment.dir}${file.separator}lib" type="dir" property="dist.lib.exists"/>
+    </target>
+    <target name="-check-jfx-deployment-jar-current-nolib" depends="-check-dist-lib-exists" unless="dist.lib.exists">
+        <uptodate property="jfx-deployment-jar-current" targetfile="${jfx.deployment.dir}${file.separator}${jfx.deployment.jar}" >
+            <srcfiles dir="${basedir}${file.separator}${build.classes.dir}" includes="**${file.separator}*"/>
+            <srcfiles dir="${basedir}${file.separator}nbproject" includes="**${file.separator}*"/>
+        </uptodate>
+    </target>
+    <target name="-check-jfx-deployment-jar-current-lib" depends="-check-dist-lib-exists" if="dist.lib.exists">
+        <uptodate property="jfx-deployment-jar-current" targetfile="${jfx.deployment.dir}${file.separator}${jfx.deployment.jar}" >
+            <srcfiles dir="${basedir}${file.separator}${build.classes.dir}" includes="**${file.separator}*"/>
+            <srcfiles dir="${jfx.deployment.dir}${file.separator}lib" includes="**${file.separator}*"/>
+            <srcfiles dir="${basedir}${file.separator}nbproject" includes="**${file.separator}*"/>
+        </uptodate>
+    </target>
+    <target name="-check-jfx-deployment-launch" depends="-check-jfx-deployment,-check-jfx-deployment-jar-current-nolib,-check-jfx-deployment-jar-current-lib">
+        <condition property="do-jfx-deployment-script">
+            <and>
+                <isset property="jfx-deployment-available"/>
+                <not><isset property="fallback.no.javascript"/></not>
+                <not><isset property="jfx-deployment-jar-current"/></not>
+            </and>
+        </condition>
+        <condition property="do-jfx-deployment-noscript">
+            <and>
+                <isset property="jfx-deployment-available"/>
+                <isset property="fallback.no.javascript"/>
+                <not><isset property="jfx-deployment-jar-current"/></not>
+            </and>
+        </condition>
+    </target>
+    <target name="-do-jfx-deployment-script" depends="-check-jfx-deployment-launch" if="do-jfx-deployment-script">
+        <antcall target="jfx-deployment-script"/>
+    </target>
+    <target name="-do-jfx-deployment-noscript" depends="-check-jfx-deployment-launch" if="do-jfx-deployment-noscript">
+        <antcall target="jfx-deployment-noscript"/>
+    </target>
+
+    <target name="jfx-deployment-script" depends="-check-jfx-deployment,-check-project,
+        -swing-api-warning,-icon-warning,
         -set-dimensions,-reset-dimensions,-set-update-mode-background,-set-update-mode-eager,
         -set-permissions-elevated,-reset-permissions-elevated,
-        -copy-external-preloader-jar,-set-binary-css,-unset-binary-css,-copy-binary-css,
+        -copy-external-preloader-jar,-copy-binary-css,
         -deploy-app-sign-nopreloader-notemplate,
         -deploy-app-sign-preloader-notemplate,
         -deploy-app-sign-nopreloader-template,
@@ -1204,6 +1451,26 @@
         if="jfx-deployment-available">
     </target>
 
+    <target name="jfx-deployment-noscript" depends="-check-jfx-deployment,-check-project,
+        -swing-api-warning,-icon-warning,
+        -set-dimensions,-reset-dimensions,-set-update-mode-background,-set-update-mode-eager,
+        -set-permissions-elevated,-reset-permissions-elevated,
+        -copy-external-preloader-jar,-copy-binary-css,
+        -fallback-deploy-app-sign-nopreloader-notemplate,
+        -fallback-deploy-app-sign-preloader-notemplate,
+        -fallback-deploy-app-sign-nopreloader-template,
+        -fallback-deploy-app-sign-preloader-template,
+        -fallback-deploy-app-sign-nopreloader-notemplate-swing,
+        -fallback-deploy-app-sign-nopreloader-template-swing,
+        -fallback-deploy-app-nosign-nopreloader-notemplate,
+        -fallback-deploy-app-nosign-preloader-notemplate,
+        -fallback-deploy-app-nosign-nopreloader-template,
+        -fallback-deploy-app-nosign-preloader-template,
+        -fallback-deploy-app-nosign-nopreloader-notemplate-swing,
+        -fallback-deploy-app-nosign-nopreloader-template-swing"
+        if="jfx-deployment-available">
+    </target>
+
 
     <!-- Security / Signing -->
     
@@ -1297,6 +1564,7 @@
             <echo message="deploy_jar: pp_jar_dir = ${pp_jar_dir}" level="verbose"/>
             <echo message="deploy_jar: pp_jar_fs1 = ${pp_jar_fs1}" level="verbose"/>
             <echo message="deploy_jar: pp_jar_fs2 = ${pp_jar_fs2}" level="verbose"/>
+            <echo message="JavaScript: deploy-jar" level="verbose"/>
             <script language="javascript">
                 <![CDATA[
                     var S = java.io.File.separator;
@@ -1306,6 +1574,8 @@
                     var JFXLAZY = "download.mode.lazy.jar";
                     var withpreloader = project.getProperty("app-with-preloader");
                     var fx_ant_api_1_1 = project.getProperty("have-fx-ant-api-1.1");
+                    var fx_ant_api_1_2 = project.getProperty("have-fx-ant-api-1.2");
+                    var fx_in_swing_app = project.getProperty("fx-in-swing-app");
 
                     // get jars with lazy download mode property set
                     function getLazyJars() {
@@ -1338,7 +1608,12 @@
                     var app = jar.createApplication();
                     app.setProject(project);
                     var title = project.getProperty("application.title");
-                    var mainclass = project.getProperty("javafx.main.class");
+                    if(fx_in_swing_app == "true" && fx_ant_api_1_2 == "true") {
+                        var mainclass = project.getProperty("main.class");
+                        app.setToolkit("swing");
+                    } else {
+                        var mainclass = project.getProperty("javafx.main.class");
+                    }
                     var fallback = project.getProperty("javafx.fallback.class");
                     app.setName(title);
                     app.setMainClass(mainclass);
@@ -1515,6 +1790,7 @@
     <macrodef name="deploy-deploy">
         <sequential>
             <antcall target="-pre-jfx-deploy"/>
+            <antcall target="-call-pre-jfx-native"/>
             <echo message="javafx.ant.classpath = ${javafx.ant.classpath}" level="verbose"/>
             <typedef name="fx_deploy" classname="com.sun.javafx.tools.ant.DeployFXTask" classpath="${javafx.ant.classpath}"/>
             <echo message="Launching &lt;fx:deploy&gt; task from ${ant-javafx.jar.location}" level="info"/>
@@ -1524,6 +1800,7 @@
             <echo message="deploy_deploy: pp_deploy_dir = ${pp_deploy_dir}" level="verbose"/>
             <echo message="deploy_deploy: pp_deploy_fs1 = ${pp_deploy_fs1}" level="verbose"/>
             <echo message="deploy_deploy: pp_deploy_fs2 = ${pp_deploy_fs2}" level="verbose"/>
+            <echo message="JavaScript: deploy-deploy" level="verbose"/>
             <script language="javascript">
                 <![CDATA[
                     function isTrue(prop) {
@@ -1538,6 +1815,8 @@
                     var JFXLAZY = "download.mode.lazy.jar";
                     var withpreloader = project.getProperty("app-with-preloader");
                     var fx_ant_api_1_1 = project.getProperty("have-fx-ant-api-1.1");
+                    var fx_ant_api_1_2 = project.getProperty("have-fx-ant-api-1.2");
+                    var fx_in_swing_app = project.getProperty("fx-in-swing-app");
 
                     // get jars with lazy download mode property set
                     function getLazyJars() {
@@ -1585,12 +1864,35 @@
                             println("Warning: offlineAllowed not supported by this version of JavaFX SDK deployment Ant task. Please upgrade JavaFX to 2.0.2 or higher.");
                         }
                     }
+                    // native packaging (time consuming, thus applied in explicit build only)
+                    var nativeEnabled = project.getProperty("do.build.native.package");
+                    var nativeType = project.getProperty("javafx.native.bundling.type");
+                    var projStateRun = project.getProperty("project.state.running");
+                    var projStateDbg = project.getProperty("project.state.debugging");
+                    var projStatePrf = project.getProperty("project.state.profiling");
+                    if(isTrue(nativeEnabled) && nativeType != null && nativeType != "none") {
+                        if(!isTrue(projStateRun) && !isTrue(projStateDbg) && !isTrue(projStatePrf)) {
+                            if(fx_ant_api_1_2 == "true") {
+                                deploy.setNativeBundles(nativeType);
+                                println("Note: To create native bundles the <fx:deploy> task may require external tools. See JavaFX 2.2+ documentation for details.");
+                                println("");
+                                println("Launching <fx:deploy> in native packager mode...");
+                            } else {
+                                println("Warning: Native packaging is not supported by this version of JavaFX SDK deployment Ant task. Please upgrade to JDK 7u6 or higher.");
+                            }
+                        }
+                    }
 
                     // fx:application
                     var app = deploy.createApplication();
                     app.setProject(project);
                     var title = project.getProperty("application.title");
-                    var mainclass = project.getProperty("javafx.main.class");
+                    if(fx_in_swing_app == "true" && fx_ant_api_1_2 == "true") {
+                        var mainclass = project.getProperty("main.class");
+                        app.setToolkit("swing");
+                    } else {
+                        var mainclass = project.getProperty("javafx.main.class");
+                    }
                     var fallback = project.getProperty("javafx.fallback.class");
                     app.setName(title);
                     app.setMainClass(mainclass);
@@ -1676,8 +1978,10 @@
                     var info = deploy.createInfo();
                     info.setProject(project);
                     var vendor = project.getProperty("application.vendor");
+                    var description = project.getProperty("application.desc");
                     info.setTitle(title); // title known from before
                     info.setVendor(vendor);
+                    info.setDescription(description);
                     var icon = project.getProperty("javafx.deploy.icon");
                     if(icon != null) {
                         if(fx_ant_api_1_1 == "true") {
@@ -1750,10 +2054,11 @@
                 ]]>
             </script>
             <antcall target="-post-jfx-deploy"/>
+            <antcall target="-call-post-jfx-native"/>
         </sequential>
     </macrodef>
 
-    <!-- JavaFX 2.0+ deploy task as yet can not generate pre-FX jnlp which is needed for FX-in-Swing projects-->
+    <!-- JavaFX SDK 2.0.x and 2.1.x deploy task can not generate pre-FX jnlp which is needed for FX-in-Swing projects-->
     <macrodef name="deploy-deploy-swing">
         <sequential>
             <antcall target="-pre-jfx-deploy"/>
@@ -1805,6 +2110,7 @@
             </condition>
             <local name="applet-params-token"/>
             <local name="application-args-token"/>
+            <echo message="JavaScript: deploy-deploy-swing 1" level="verbose"/>
             <script language="javascript">
                 <![CDATA[
                     var JFXPAR = "javafx.param";
@@ -1835,6 +2141,10 @@
                     project.setProperty("application-args-token", args);
                 ]]>
             </script>
+            <local name="application.desc.processed"/>
+            <condition property="application.desc.processed" value="${application.desc}" else="Swing applet embedding JavaFX components.">
+                <isset property="application.desc"/>
+            </condition>
             <filterchain id="jnlp.template.filter">
                 <replacetokens>
                     <token key="NAME" value="${dist.filename}"/>
@@ -1842,6 +2152,7 @@
                     <token key="FILESIZE" value="${dist.jar.size}"/>
                     <token key="VENDOR" value="${application.vendor}"/>
                     <token key="TITLE" value="${application.title}"/>
+                    <token key="DESCRIPTION" value="${application.desc.processed}"/>
                     <token key="WIDTH" value="${javafx.run.width}"/>
                     <token key="HEIGHT" value="${javafx.run.height}"/>
                     <token key="PERMISSIONS" value="${permissions-elevated-token}"/>
@@ -1865,6 +2176,7 @@
                     tofile="${dist.dir}${file.separator}${dist.filename}.html" >
                     <filterchain refid="jnlp.template.filter"/>
             </copy>
+            <echo message="JavaScript: deploy-deploy-swing 2" level="verbose"/>
             <script language="javascript">
                 <![CDATA[
                     var PREF = "file:";
@@ -1921,6 +2233,134 @@
     </macrodef>
 
 
+    <!-- Fallback Project Deployment Macros To Support At Least Partially JDKs Without JavaScript Support -->
+    
+    <macrodef name="fallback-deploy-application-def">
+        <sequential>
+            <echo message="Warning: Parameters (if any) not passed to &lt;fx:application&gt; in fallback build mode due to JDK missing JavaScript support."/>
+            <fx:application id="fxApp"
+                name="${application.title}"
+                mainClass="${javafx.main.class}"
+                fallbackClass="${javafx.fallback.class}">
+                <!-- PARAMETERS NOT PASSED IN FALLBACK -->
+            </fx:application>
+        </sequential>
+    </macrodef>
+
+    <macrodef name="fallback-deploy-application-def-preloader">
+        <sequential>
+            <echo message="Warning: Parameters (if any) not passed to &lt;fx:application&gt; in fallback build mode due to JDK missing JavaScript support."/>
+            <fx:application id="fxApp"
+                name="${application.title}"
+                mainClass="${javafx.main.class}"
+                preloaderClass="${javafx.preloader.class}"
+                fallbackClass="${javafx.fallback.class}">
+                <!-- PARAMETERS NOT PASSED IN FALLBACK -->
+            </fx:application>
+        </sequential>
+    </macrodef>
+
+    <macrodef name="fallback-deploy-application-def-swing">
+        <sequential>
+            <echo message="Warning: Parameters (if any) not passed to &lt;fx:application&gt; in fallback build mode due to JDK missing JavaScript support."/>
+            <fx:application id="fxApp"
+                name="${application.title}"
+                mainClass="${main.class}"
+                fallbackClass="${javafx.fallback.class}"
+                toolkit="swing">
+                <!-- PARAMETERS NOT PASSED IN FALLBACK -->
+            </fx:application>
+        </sequential>
+    </macrodef>
+
+    <macrodef name="fallback-deploy-resources">
+        <sequential>
+            <fx:resources id="appRes">
+                <fx:fileset requiredFor="startup" dir="${jfx.deployment.dir}">
+                    <include name="${jfx.deployment.jar}"/>
+                    <include name="lib${file.separator}*.jar"/>
+                    <exclude name="lib${file.separator}${jfx.deployment.jar}"/>
+                </fx:fileset>
+            </fx:resources>
+        </sequential>
+    </macrodef>
+
+    <macrodef name="fallback-deploy-resources-preloader">
+        <sequential>
+            <fx:resources id="appRes">
+                <fx:fileset requiredFor="preloader" dir="${jfx.deployment.dir}">
+                    <include name="lib${file.separator}${javafx.preloader.jar.filename}"/>
+                </fx:fileset>
+                <fx:fileset requiredFor="startup" dir="${jfx.deployment.dir}">
+                    <include name="${jfx.deployment.jar}"/>
+                    <include name="lib${file.separator}*.jar"/>
+                    <exclude name="lib${file.separator}${javafx.preloader.jar.filename}"/>
+                    <exclude name="lib${file.separator}${jfx.deployment.jar}"/>
+                </fx:fileset>
+            </fx:resources>
+        </sequential>
+    </macrodef>
+
+    <macrodef name="fallback-deploy-jar">
+        <sequential>
+            <antcall target="-pre-jfx-jar"/>
+            <fx:jar destfile="${jfx.deployment.dir}${file.separator}${jfx.deployment.jar}">
+                <fx:application refid="fxApp"/>
+                <fx:resources refid="appRes"/>
+                <fileset dir="${build.classes.dir}">
+                    <exclude name="**${file.separator}*.${css-exclude-ext}"/>
+                </fileset>
+                <manifest>
+                    <attribute name="Implementation-Vendor" value="${application.vendor}"/>
+                    <attribute name="Implementation-Title" value="${application.title}"/>
+                    <attribute name="Implementation-Version" value="1.0"/>
+                </manifest>
+            </fx:jar>
+            <antcall target="-post-jfx-jar"/>
+        </sequential>
+    </macrodef>
+
+    <macrodef name="fallback-deploy-deploy">
+        <sequential>
+            <antcall target="-pre-jfx-deploy"/>
+            <echo message="Warning: JVM Arguments and Callbacks (if any) not passed to &lt;fx:deploy&gt; in fallback build mode due to JDK missing JavaScript support."/>
+            <fx:deploy width="${javafx.width}" height="${javafx.height}"
+                      outdir="${jfx.deployment.dir}" embedjnlp="true" updatemode="${update-mode}"
+                      outfile="${application.title}" includeDT="${javafx.deploy.includeDT}">
+                <fx:application refid="fxApp"/>
+                <fx:resources refid="appRes"/>
+                <fx:info title="${application.title}" vendor="${application.vendor}"/>
+                <fx:permissions elevated="${permissions.elevated}"/>
+                <fx:preferences shortcut="${javafx.deploy.adddesktopshortcut}" install="${javafx.deploy.installpermanently}" menu="${javafx.deploy.addstartmenushortcut}"/>
+                <!-- PLATFORM NOT PASSED IN FALLBACK -->
+                <!-- CALLBACKS NOT PASSED IN FALLBACK -->
+            </fx:deploy>
+            <antcall target="-post-jfx-deploy"/>
+        </sequential>
+    </macrodef>
+
+    <macrodef name="fallback-deploy-deploy-template">
+        <sequential>
+            <antcall target="-pre-jfx-deploy"/>
+            <echo message="Warning: JVM Arguments and Callbacks (if any) not passed to &lt;fx:deploy&gt; in fallback build mode due to JDK missing JavaScript support."/>
+            <deploy-process-template/>
+            <fx:deploy width="${javafx.width}" height="${javafx.height}"
+                      outdir="${jfx.deployment.dir}" embedjnlp="true" updatemode="${update-mode}"
+                      outfile="${application.title}" includeDT="${javafx.deploy.includeDT}">
+                <fx:application refid="fxApp"/>
+                <fx:resources refid="appRes"/>
+                <fx:info title="${application.title}" vendor="${application.vendor}"/>
+                <fx:permissions elevated="${permissions.elevated}"/>
+                <fx:preferences shortcut="${javafx.deploy.adddesktopshortcut}" install="${javafx.deploy.installpermanently}" menu="${javafx.deploy.addstartmenushortcut}"/>
+                <fx:template file="${javafx.run.htmltemplate}" tofile="${javafx.run.htmltemplate.processed}"/>
+                <!-- PLATFORM NOT PASSED IN FALLBACK -->
+                <!-- CALLBACKS NOT PASSED IN FALLBACK -->
+            </fx:deploy>
+            <antcall target="-post-jfx-deploy"/>
+        </sequential>
+    </macrodef>
+
+
     <!-- Project Deployment Targets -->
 
     <target name="-check-sign" depends="-check-project,-javafx-init-keystore" if="javafx.signed.true+signjars.task.available">
@@ -1928,42 +2368,42 @@
             <and>
                 <isset property="app-without-preloader"/>
                 <not><isset property="html-template-available"/></not>
-                <not><isset property="fx-in-swing-app"/></not>
+                <not><isset property="fx-in-swing-app-workaround"/></not>
             </and>
         </condition>
         <condition property="sign-preloader-notemplate">
             <and>
                 <isset property="app-with-preloader"/>
                 <not><isset property="html-template-available"/></not>
-                <not><isset property="fx-in-swing-app"/></not>
+                <not><isset property="fx-in-swing-app-workaround"/></not>
             </and>
         </condition>
         <condition property="sign-nopreloader-template">
             <and>
                 <isset property="app-without-preloader"/>
                 <isset property="html-template-available"/>
-                <not><isset property="fx-in-swing-app"/></not>
+                <not><isset property="fx-in-swing-app-workaround"/></not>
             </and>
         </condition>
         <condition property="sign-preloader-template">
             <and>
                 <isset property="app-with-preloader"/>
                 <isset property="html-template-available"/>
-                <not><isset property="fx-in-swing-app"/></not>
+                <not><isset property="fx-in-swing-app-workaround"/></not>
             </and>
         </condition>
         <condition property="sign-nopreloader-notemplate-swing">
             <and>
                 <isset property="app-without-preloader"/>
                 <not><isset property="html-template-available"/></not>
-                <isset property="fx-in-swing-app"/>
+                <isset property="fx-in-swing-app-workaround"/>
             </and>
         </condition>
         <condition property="sign-nopreloader-template-swing">
             <and>
                 <isset property="app-without-preloader"/>
                 <isset property="html-template-available"/>
-                <isset property="fx-in-swing-app"/>
+                <isset property="fx-in-swing-app-workaround"/>
             </and>
         </condition>
     </target>
@@ -1973,7 +2413,7 @@
                 <isset property="app-without-preloader"/>
                 <not><isset property="html-template-available"/></not>
                 <not><isset property="javafx.signed.true"/></not>
-                <not><isset property="fx-in-swing-app"/></not>
+                <not><isset property="fx-in-swing-app-workaround"/></not>
             </and>
         </condition>
         <condition property="nosign-preloader-notemplate">
@@ -1981,7 +2421,7 @@
                 <isset property="app-with-preloader"/>
                 <not><isset property="html-template-available"/></not>
                 <not><isset property="javafx.signed.true"/></not>
-                <not><isset property="fx-in-swing-app"/></not>
+                <not><isset property="fx-in-swing-app-workaround"/></not>
             </and>
         </condition>
         <condition property="nosign-nopreloader-template">
@@ -1989,7 +2429,7 @@
                 <isset property="app-without-preloader"/>
                 <isset property="html-template-available"/>
                 <not><isset property="javafx.signed.true"/></not>
-                <not><isset property="fx-in-swing-app"/></not>
+                <not><isset property="fx-in-swing-app-workaround"/></not>
             </and>
         </condition>
         <condition property="nosign-preloader-template">
@@ -1997,7 +2437,7 @@
                 <isset property="app-with-preloader"/>
                 <isset property="html-template-available"/>
                 <not><isset property="javafx.signed.true"/></not>
-                <not><isset property="fx-in-swing-app"/></not>
+                <not><isset property="fx-in-swing-app-workaround"/></not>
             </and>
         </condition>
         <condition property="nosign-nopreloader-notemplate-swing">
@@ -2005,7 +2445,7 @@
                 <isset property="app-without-preloader"/>
                 <not><isset property="html-template-available"/></not>
                 <not><isset property="javafx.signed.true"/></not>
-                <isset property="fx-in-swing-app"/>
+                <isset property="fx-in-swing-app-workaround"/>
             </and>
         </condition>
         <condition property="nosign-nopreloader-template-swing">
@@ -2013,7 +2453,7 @@
                 <isset property="app-without-preloader"/>
                 <isset property="html-template-available"/>
                 <not><isset property="javafx.signed.true"/></not>
-                <isset property="fx-in-swing-app"/>
+                <isset property="fx-in-swing-app-workaround"/>
             </and>
         </condition>
     </target>
@@ -2161,20 +2601,431 @@
     </target>
 
 
-    <!-- Project Run Targets -->
+    <!-- FALLBACK (NO JAVASCRIPT) TARGETS WITH SIGNING -->
+
+    <target name="-check-fallback-sign-deploy-swing-possible" depends="-check-sign">
+        <local name="fail-deploy-swing-possible"/>
+        <condition property="fail-deploy-swing-possible">
+            <and>
+                <or>
+                    <isset property="sign-nopreloader-notemplate-swing"/>
+                    <isset property="sign-nopreloader-template-swing"/>
+                </or>
+                <not><isset property="have-fx-ant-api-1.2"/></not>
+            </and>
+        </condition>
+        <fail message="Error: JavaFX SDK version 2.2 or newer is needed to deploy FX-in-Swing on JDK without JavaScript support." 
+              if="fail-deploy-swing-possible"/>
+    </target>
+    
+    <!-- FALLBACK project without preloader -->
+    <!-- FALLBACK no html template -->
+    <target name="-fallback-deploy-app-sign-nopreloader-notemplate" depends="-check-sign" if="sign-nopreloader-notemplate" unless="preloader-app">
+        <echo message="-fallback-deploy-app-sign-nopreloader-notemplate" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <fallback-deploy-application-def/>
+        <fallback-deploy-resources/>
+        <fallback-deploy-jar/>
+        <deploy-sign/>
+        <fallback-deploy-deploy/>
+    </target>
+
+    <!-- FALLBACK project with preloader -->
+    <!-- FALLBACK no html template -->
+    <target name="-fallback-deploy-app-sign-preloader-notemplate" depends="-check-sign" if="sign-preloader-notemplate" unless="preloader-app">
+        <echo message="-fallback-deploy-app-sign-preloader-notemplate" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <fallback-deploy-application-def-preloader/>
+        <fallback-deploy-resources-preloader/>
+        <fallback-deploy-jar/>
+        <deploy-sign-preloader/>
+        <fallback-deploy-deploy/>
+    </target>
+
+    <!-- FALLBACK project without preloader -->
+    <!-- FALLBACK html template -->
+    <target name="-fallback-deploy-app-sign-nopreloader-template" depends="-check-sign" if="sign-nopreloader-template" unless="preloader-app">
+        <echo message="-fallback-deploy-app-sign-nopreloader-template" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <fallback-deploy-application-def/>
+        <fallback-deploy-resources/>
+        <fallback-deploy-jar/>
+        <deploy-sign/>
+        <fallback-deploy-deploy-template/>
+    </target>
+
+    <!-- FALLBACK project with preloader -->
+    <!-- FALLBACK html template -->
+    <target name="-fallback-deploy-app-sign-preloader-template" depends="-check-sign" if="sign-preloader-template" unless="preloader-app">
+        <echo message="-fallback-deploy-app-sign-preloader-template" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <fallback-deploy-application-def-preloader/>
+        <fallback-deploy-resources-preloader/>
+        <fallback-deploy-jar/>
+        <deploy-sign-preloader/>
+        <fallback-deploy-deploy-template/>
+    </target>
+
+    <!-- FALLBACK project without preloader -->
+    <!-- FALLBACK no html template -->
+    <!-- FALLBACK FX in Swing app -->
+    <target name="-fallback-deploy-app-sign-nopreloader-notemplate-swing" depends="-check-fallback-sign-deploy-swing-possible" if="sign-nopreloader-notemplate-swing" unless="preloader-app-no-workaround">
+        <echo message="-fallback-deploy-app-sign-nopreloader-notemplate-swing" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <fallback-deploy-application-def-swing/>
+        <fallback-deploy-resources/>
+        <fallback-deploy-jar/>
+        <deploy-sign/>
+        <fallback-deploy-deploy/>
+    </target>
+
+    <!-- FALLBACK project without preloader -->
+    <!-- FALLBACK html template -->
+    <!-- FALLBACK FX in Swing app -->
+    <target name="-fallback-deploy-app-sign-nopreloader-template-swing" depends="-check-fallback-sign-deploy-swing-possible" if="sign-nopreloader-template-swing" unless="preloader-app-no-workaround">
+        <echo message="-fallback-deploy-app-sign-nopreloader-template-swing" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <fallback-deploy-application-def-swing/>
+        <fallback-deploy-resources/>
+        <fallback-deploy-jar/>
+        <deploy-sign/>
+        <fallback-deploy-deploy-template/>
+    </target>
+
+
+    <!-- FALLBACK (NO JAVASCRIPT) TARGETS NO SIGNING -->
+
+    <target name="-check-fallback-nosign-deploy-swing-possible" depends="-check-nosign">
+        <local name="fail-deploy-swing-possible"/>
+        <condition property="fail-deploy-swing-possible">
+            <and>
+                <or>
+                    <isset property="nosign-nopreloader-notemplate-swing"/>
+                    <isset property="nosign-nopreloader-template-swing"/>
+                </or>
+                <not><isset property="have-fx-ant-api-1.2"/></not>
+            </and>
+        </condition>
+        <fail message="Error: JavaFX SDK version 2.2 or newer is needed to deploy FX-in-Swing on JDK without JavaScript support." 
+              if="fail-deploy-swing-possible"/>
+    </target>
+
+    <!-- FALLBACK project without preloader -->
+    <!-- FALLBACK no html template -->
+    <target name="-fallback-deploy-app-nosign-nopreloader-notemplate" depends="-check-nosign" if="nosign-nopreloader-notemplate" unless="preloader-app">
+        <echo message="-fallback-deploy-app-nosign-nopreloader-notemplate" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <fallback-deploy-application-def/>
+        <fallback-deploy-resources/>
+        <fallback-deploy-jar/>
+        <fallback-deploy-deploy/>
+    </target>
+
+    <!-- FALLBACK project with preloader -->
+    <!-- FALLBACK no html template -->
+    <target name="-fallback-deploy-app-nosign-preloader-notemplate" depends="-check-nosign" if="nosign-preloader-notemplate" unless="preloader-app">
+        <echo message="-fallback-deploy-app-nosign-preloader-notemplate" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <fallback-deploy-application-def-preloader/>
+        <fallback-deploy-resources-preloader/>
+        <fallback-deploy-jar/>
+        <fallback-deploy-deploy/>
+    </target>
+
+    <!-- FALLBACK project without preloader -->
+    <!-- FALLBACK html template -->
+    <target name="-fallback-deploy-app-nosign-nopreloader-template" depends="-check-nosign" if="nosign-nopreloader-template" unless="preloader-app">
+        <echo message="-fallback-deploy-app-nosign-nopreloader-template" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <fallback-deploy-application-def/>
+        <fallback-deploy-resources/>
+        <fallback-deploy-jar/>
+        <fallback-deploy-deploy-template/>
+    </target>
+
+    <!-- FALLBACK project with preloader -->
+    <!-- FALLBACK html template -->
+    <target name="-fallback-deploy-app-nosign-preloader-template" depends="-check-nosign" if="nosign-preloader-template" unless="preloader-app">
+        <echo message="-fallback-deploy-app-nosign-preloader-template" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <fallback-deploy-application-def-preloader/>
+        <fallback-deploy-resources-preloader/>
+        <fallback-deploy-jar/>
+        <fallback-deploy-deploy-template/>
+    </target>
+
+    <!-- FALLBACK project without preloader -->
+    <!-- FALLBACK no html template -->
+    <!-- FALLBACK FX in Swing app -->
+    <target name="-fallback-deploy-app-nosign-nopreloader-notemplate-swing" depends="-check-fallback-nosign-deploy-swing-possible" if="nosign-nopreloader-notemplate-swing" unless="preloader-app-no-workaround">
+        <echo message="-fallback-deploy-app-nosign-nopreloader-notemplate-swing" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <fallback-deploy-application-def-swing/>
+        <fallback-deploy-resources/>
+        <fallback-deploy-jar/>
+        <fallback-deploy-deploy/>
+    </target>
+
+    <!-- FALLBACK project without preloader -->
+    <!-- FALLBACK html template -->
+    <!-- FALLBACK FX in Swing app -->
+    <target name="-fallback-deploy-app-nosign-nopreloader-template-swing" depends="-check-fallback-nosign-deploy-swing-possible" if="nosign-nopreloader-template-swing" unless="preloader-app-no-workaround">
+        <echo message="-fallback-deploy-app-nosign-nopreloader-template-swing" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <fallback-deploy-application-def-swing/>
+        <fallback-deploy-resources/>
+        <fallback-deploy-jar/>
+        <fallback-deploy-deploy-template/>
+    </target>
+
+
+    <!-- Project Build Targets -->
+
+    <target name="jfx-build" depends="-jfx-do-compile, -jfx-do-jar, -jfx-do-post-jar"/>
+    <target name="jfx-build-noscript" depends="-set-fallback-no-javascript, -jfx-do-compile, -jfx-do-jar, -jfx-do-post-jar"/>
+    
+    <target name="jfx-rebuild" depends="clean, -jfx-do-compile, -jfx-do-jar, -jfx-do-post-jar"/>
+    <target name="jfx-rebuild-noscript" depends="-set-fallback-no-javascript, clean, -jfx-do-compile, -jfx-do-jar, -jfx-do-post-jar"/>
+
+    <target name="jfx-build-native" depends="-set-do-build-native-package, -check-ant-jre-supports-native-packaging, -check-native-packager-external-tools, jfx-rebuild"/>
+    <target name="jfx-build-native-noscript" depends="-set-do-build-native-package, -check-ant-jre-supports-native-packaging, -check-native-packager-external-tools, jfx-rebuild-noscript"/>
+
+    <target name="-check-do-jar">
+        <condition property="do-jar-false">
+            <and>
+                <isset property="do.jar"/>
+                <equals arg1="${do.jar}" arg2="false"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-fallback-no-javascript">
+        <property name="fallback.no.javascript" value="true"/>
+        <echo message="Warning: Using fallback build infrastructure due to default JDK missing JavaScript support."/>
+    </target>
+    <target name="-jfx-do-compile" depends="-check-do-jar" if="do-jar-false">
+        <antcall target="compile"/>
+    </target>
+    <target name="-jfx-do-jar" depends="-check-do-jar" unless="do-jar-false">
+        <antcall target="jar"/>
+    </target>
+    <target name="-jfx-do-post-jar" depends="-init-check,-check-project" if="preloader-app">
+        <!-- Preloaders are created using SE copylibs task that creates readme file relevant for SE only -->
+        <delete file="${basedir}${file.separator}${dist.dir}${file.separator}README.TXT"/>
+    </target>
+    
+    <target name="-set-do-build-native-package">
+        <property name="do.build.native.package" value="true"/>
+        <echo message="do.build.native.package = ${do.build.native.package}" level="verbose"/>
+    </target>
+    <target name="-check-ant-jre-supports-native-packaging" depends="-check-ant-jre-version">
+        <fail message="Error:${line.separator}JavaFX native packager requires NetBeans to run on JDK 1.7u6 or later !" if="have-ant-jre-pre7u6"/>
+    </target>
+    
+    <target name="-call-pre-jfx-native" if="do.build.native.package">
+        <antcall target="-pre-jfx-native"/>
+    </target>
+    <target name="-call-post-jfx-native" if="do.build.native.package">
+        <antcall target="-post-jfx-native"/>
+    </target>
+
+    <target name="-check-native-bundling-type" depends="-check-operating-system" if="do.build.native.package">
+        <condition property="need.Inno.presence">
+            <and>
+                <isset property="running.on.windows"/>
+                <isset property="javafx.native.bundling.type"/>
+                <or>
+                    <equals arg1="${javafx.native.bundling.type}" arg2="all" casesensitive="false"/>
+                    <equals arg1="${javafx.native.bundling.type}" arg2="installer" casesensitive="false"/>
+                </or>
+            </and>
+        </condition>
+        <condition property="need.WiX.presence">
+            <and>
+                <isset property="running.on.windows"/>
+                <isset property="javafx.native.bundling.type"/>
+                <or>
+                    <equals arg1="${javafx.native.bundling.type}" arg2="all" casesensitive="false"/>
+                    <equals arg1="${javafx.native.bundling.type}" arg2="installer" casesensitive="false"/>
+                </or>
+            </and>
+        </condition>
+        <echo message="need.Inno.presence:${need.Inno.presence}" level="verbose"/>
+        <echo message="need.WiX.presence:${need.WiX.presence}" level="verbose"/>
+    </target>
+    <target name="-check-Inno-presence" depends="-check-native-bundling-type" if="need.Inno.presence">
+        <local name="exec-output"/>
+        <local name="exec-error"/>
+        <local name="exec-result"/>
+        <exec executable="iscc" outputproperty="exec-output" failifexecutionfails="false" errorproperty="exec-error" resultproperty="exec-result"/>
+        <echo message="exec-output:${exec-output}" level="verbose"/>
+        <echo message="exec-error:${exec-error}" level="verbose"/>
+        <echo message="exec-result:${exec-result}" level="verbose"/>
+        <condition property="missing.Inno">
+            <not><and>
+                <contains string="${exec-output}" substring="Inno Setup"/>
+                <not><contains string="${exec-output}" substring="Inno Setup 1"/></not>
+                <not><contains string="${exec-output}" substring="Inno Setup 2"/></not>
+                <not><contains string="${exec-output}" substring="Inno Setup 3"/></not>
+                <not><contains string="${exec-output}" substring="Inno Setup 4"/></not>
+            </and></not>
+        </condition>
+    </target>
+    <target name="-check-WiX-presence" depends="-check-native-bundling-type" if="need.WiX.presence">
+        <local name="exec-output"/>
+        <local name="exec-error"/>
+        <local name="exec-result"/>
+        <exec executable="candle" outputproperty="exec-output" failifexecutionfails="false" errorproperty="exec-error" resultproperty="exec-result">
+            <arg value="-?"/>
+        </exec>
+        <echo message="exec-output:${exec-output}" level="verbose"/>
+        <echo message="exec-error:${exec-error}" level="verbose"/>
+        <echo message="exec-result:${exec-result}" level="verbose"/>
+        <condition property="missing.WiX">
+            <not><and>
+                <contains string="${exec-output}" substring="Windows Installer Xml Compiler version"/>
+                <not><contains string="${exec-output}" substring="Windows Installer Xml Compiler version 1"/></not>
+                <not><contains string="${exec-output}" substring="Windows Installer Xml Compiler version 2"/></not>
+            </and></not>
+        </condition>
+    </target>
+    <target name="-check-native-packager-external-tools" depends="-check-Inno-presence, -check-WiX-presence">
+        <property name="missing.Inno.message" value="JavaFX native packager requires external Inno Setup 5+ tools installed and included on PATH. See http://www.jrsoftware.org/"/>
+        <property name="missing.WiX.message" value="JavaFX native packager requires external WiX 3.0+ tools installed and included on PATH. See http://wix.sourceforge.net/"/>
+        <condition property="missing.Inno.WiX">
+            <and>
+                <isset property="missing.Inno"/>
+                <isset property="missing.WiX"/>
+            </and>
+        </condition>
+        <fail message="Error:${line.separator}${missing.Inno.message}${line.separator}${missing.WiX.message}" if="missing.Inno.WiX"/>
+        <fail message="Error:${line.separator}${missing.Inno.message}" if="missing.Inno"/>
+        <fail message="Error:${line.separator}${missing.WiX.message}" if="missing.WiX"/>
+    </target>
+
+    <!-- Project Run Support -->
 
     <target name="-warn-of-preloader" depends="-check-project" if="preloader-app-no-workaround">
         <fail message="Error:${line.separator}JavaFX 2 Preloader Project can not be executed directly.${line.separator}Please execute instead a JavaFX Application that uses the Preloader."/>
     </target>
     
+    <target name="-mark-project-state-running">
+        <property name="project.state.running" value="true"/>
+        <echo message="project.state.running = ${project.state.running}" level="verbose"/>
+    </target>
+    <target name="-mark-project-state-debugging">
+        <property name="project.state.debugging" value="true"/>
+        <echo message="project.state.debugging = ${project.state.debugging}" level="verbose"/>
+    </target>
+    <target name="-mark-project-state-profiling">
+        <property name="project.state.profiling" value="true"/>
+        <echo message="project.state.profiling = ${project.state.profiling}" level="verbose"/>
+    </target>
+    <target name="-mark-project-needs-jnlp">
+        <property name="project.needs.jnlp" value="true"/>
+        <echo message="project.needs.jnlp = ${project.needs.jnlp}" level="verbose"/>
+    </target>
+    
+    <!-- set property javafx.disable.concurrent.runs=true to disable runs from temporary directory -->
+    <target name="-check-concurrent-runs">
+        <condition property="disable-concurrent-runs">
+            <and>
+                <isset property="javafx.disable.concurrent.runs"/>
+                <equals arg1="${javafx.disable.concurrent.runs}" arg2="true" trim="true"/>
+            </and>
+        </condition>
+        <condition property="temp.run.jar" value="${jfx.deployment.dir}${file.separator}${jfx.deployment.jar}">
+            <isset property="disable-concurrent-runs"/>
+        </condition>
+        <condition property="temp.run.jnlp" value="${jfx.deployment.jnlp}">
+            <isset property="disable-concurrent-runs"/>
+        </condition>
+        <condition property="temp.run.html" value="${jfx.deployment.html}">
+            <isset property="disable-concurrent-runs"/>
+        </condition>
+    </target>
+    <target name="-create-temp-run-dir" depends="-check-concurrent-runs" unless="disable-concurrent-runs">
+        <echo message="Creating temp run dir" level="verbose"/>
+        <tempfile property="temp.run.dir" destDir="${basedir}${file.separator}${dist.dir}${file.separator}" prefix="run"/>
+        <echo message="temp.run.dir = ${temp.run.dir}" level="verbose"/>
+        <copy todir="${temp.run.dir}" includeemptydirs="true" overwrite="true">
+            <fileset dir="${basedir}${file.separator}${dist.dir}">
+                <exclude name="**${file.separator}bundles${file.separator}**"/>
+                <exclude name="**${file.separator}run*${file.separator}**"/>
+            </fileset>
+        </copy>        
+        <property name="temp.run.jar" value="${temp.run.dir}${file.separator}${jfx.deployment.jar}"/>
+        <basename property="jfx.deployment.base" file="${jfx.deployment.jar}" suffix=".jar"/>
+        <property name="temp.run.jnlp" value="${temp.run.dir}${file.separator}${jfx.deployment.base}.jnlp"/>
+        <property name="temp.run.html" value="${temp.run.dir}${file.separator}${jfx.deployment.base}.html"/>
+    </target>
+    <target name="-remove-temp-run-dir" if="temp.run.dir">
+        <echo message="Removing temp run dir" level="verbose"/>
+        <delete dir="${temp.run.dir}" quiet="true" failonerror="false"/>
+    </target>
+    <target depends="init,compile,jar,-create-temp-run-dir" description="Run JavaFX project standalone." name="jfx-project-run">
+        <echo message="Executing ${main.class} from ${temp.run.jar} using platform ${platform.java}"/>
+        <property name="run.jvmargs" value=""/>
+        <property name="run.jvmargs.ide" value=""/>        
+        <java classname="${main.class}" dir="${work.dir}" fork="true" jvm="${platform.java}">
+            <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+            <jvmarg value="-Dfile.encoding=${runtime.encoding}"/>
+            <redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/>
+            <jvmarg line="${run.jvmargs}"/>
+            <jvmarg line="${run.jvmargs.ide}"/>
+            <classpath>
+                <path path="${temp.run.jar}:${javac.classpath}"/>
+            </classpath>
+            <arg line="${application.args}"/>
+            <syspropertyset>
+                <propertyref prefix="run-sys-prop."/>
+                <mapper from="run-sys-prop.*" to="*" type="glob"/>
+            </syspropertyset>
+        </java>
+        <antcall target="-remove-temp-run-dir"/>
+    </target>
+
 
     <!-- Running/Debugging/Profiling Standalone -->
 
-    <target name="jfxsa-run" depends="-check-jfx-runtime,-warn-of-preloader,run"/>
+    <target name="jfxsa-run" depends="-mark-project-state-running,-clean-if-config-changed,-check-jfx-runtime,-warn-of-preloader,jfx-project-run"/>
+    <target name="jfxsa-run-noscript" depends="-set-fallback-no-javascript, jfxsa-run"/>
 
-    <target name="jfxsa-debug" depends="jar,-check-jfx-runtime,-warn-of-preloader,debug"/>
+    <target name="jfxsa-debug" depends="-mark-project-state-debugging,-clean-if-config-changed,jar,-check-jfx-runtime,-warn-of-preloader,debug"/>
+    <target name="jfxsa-debug-noscript" depends="-set-fallback-no-javascript, jfxsa-debug"/>
     
-    <target name="jfxsa-profile" depends="-check-jfx-runtime,-warn-of-preloader,profile"/>
+    <target name="jfxsa-profile" depends="-mark-project-state-profiling,-check-jfx-runtime,-warn-of-preloader,profile"/>
+    <target name="jfxsa-profile-noscript" depends="-set-fallback-no-javascript, jfxsa-profile"/>
+
+    <target name="-check-clean-if-config-changed" depends="-init-project">
+        <deploy-defines/>
+        <uptodate property="jfx.deployment.jar.newer.than.nbproject" targetfile="${jfx.deployment.dir}${file.separator}${jfx.deployment.jar}" >
+            <srcfiles dir="${basedir}${file.separator}nbproject" includes="**${file.separator}*"/>
+        </uptodate>
+        <echo message="jfx.deployment.jar.newer.than.nbproject = ${jfx.deployment.jar.newer.than.nbproject}" level="verbose"/>
+        <available file="${jfx.deployment.dir}${file.separator}${jfx.deployment.jar}" type="file" property="jfx.deployment.jar.exists"/>
+        <condition property="request.clean.due.to.config.change">
+            <and>
+                <isset property="jfx.deployment.jar.exists"/>
+                <not><isset property="jfx.deployment.jar.newer.than.nbproject"/></not>
+            </and>
+        </condition>
+    </target>
+    <target name="-clean-if-config-changed" depends="-check-clean-if-config-changed" if="request.clean.due.to.config.change">
+        <echo message="Config change detected. Invoking clean." level="verbose"/>
+        <antcall target="clean"/>
+    </target>
 
 
     <!-- Shared Debugging init -->
@@ -2203,11 +3054,11 @@
 
     <!-- Running/Debugging/Profiling as WebStart -->
     
-    <target name="-check-jnlp-file-fx" depends="-check-project" unless="fx-in-swing-app">
+    <target name="-check-jnlp-file-fx" depends="-swing-api-check" unless="fx-in-swing-app-workaround">
         <basename property="jfx.deployment.base" file="${jfx.deployment.jar}" suffix=".jar"/>
         <property name="jfx.deployment.jnlp" location="${jfx.deployment.dir}${file.separator}${jfx.deployment.base}.jnlp"/>
     </target>
-    <target name="-check-jnlp-file-swing" depends="-check-project" if="fx-in-swing-app">
+    <target name="-check-jnlp-file-swing" depends="-swing-api-check" if="fx-in-swing-app-workaround">
         <basename property="jfx.deployment.base" file="${jfx.deployment.jar}" suffix=".jar"/>
         <property name="jfx.deployment.jnlp" location="${jfx.deployment.dir}${file.separator}${jfx.deployment.base}_application.jnlp"/>
     </target>
@@ -2228,15 +3079,37 @@
         <antcall target="-check-jnlp-file"/>
     </target>
 
-    <target name="jfxws-run" if="jnlp-file-exists" depends="-check-jdk-7u4or5-mac,jar,-check-jfx-webstart,-resolve-jnlp-file,-check-jfx-runtime" description="Start fx javaws execution">
-        <echo message="Executing ${jfx.deployment.jnlp} using ${active.webstart.executable}"/>
+    <!-- set property javafx.enable.concurrent.external.runs=true to enable multiple runs of the same WebStart or Run-in-Browser project -->
+    <target name="-check-concurrent-jnlp-runs" depends="-resolve-jnlp-file">
+        <condition property="disable-concurrent-runs">
+            <not>
+                <and>
+                    <isset property="javafx.enable.concurrent.external.runs"/>
+                    <equals arg1="${javafx.enable.concurrent.external.runs}" arg2="true" trim="true"/>
+                </and>
+            </not>
+        </condition>
+        <condition property="temp.run.jnlp" value="${jfx.deployment.jnlp}">
+            <isset property="disable-concurrent-runs"/>
+        </condition>
+    </target>
+    <target name="-warn-concurrent-jnlp-runs" unless="disable-concurrent-runs">
+        <echo message="Note: Concurrent Run as WebStart enabled.${line.separator}Temporary directory ${temp.run.dir}${line.separator}will remain unused when WebStart execution has finished. Use project Clean to delete unused directories."/>
+    </target>
+
+    <target name="jfxws-run" if="jnlp-file-exists" depends="-mark-project-state-running,-clean-if-config-changed,-mark-project-needs-jnlp,-check-jdk-7u4or5-mac,jar,
+            -check-jfx-webstart,-resolve-jnlp-file,-check-jfx-runtime,-check-concurrent-jnlp-runs,-create-temp-run-dir" 
+            description="Start JavaFX javaws execution">
+        <echo message="Executing ${temp.run.jnlp} using ${active.webstart.executable}"/>
         <exec executable="${active.webstart.executable}">
-            <arg file="${jfx.deployment.jnlp}"/>
+            <arg file="${temp.run.jnlp}"/>
         </exec>
+        <antcall target="-warn-concurrent-jnlp-runs"/>
     </target>
     
-    <target name="jfxws-debug" if="jnlp-file-exists+netbeans.home" depends="-check-jdk-7u4or5-mac,jar,-check-jfx-webstart,-resolve-jnlp-file,-check-jfx-runtime,-debug-start-debugger,-debug-javaws-debuggee" 
-        description="Debug fx javaws project in IDE"/>
+    <target name="jfxws-debug" if="jnlp-file-exists+netbeans.home" depends="-mark-project-state-debugging,-clean-if-config-changed,-mark-project-needs-jnlp,
+            -check-jdk-7u4or5-mac,jar,-check-jfx-webstart,-resolve-jnlp-file,-check-jfx-runtime,
+            -debug-start-debugger,-debug-javaws-debuggee" description="Debug JavaFX javaws project in IDE"/>
         
     <target name="-debug-javaws-debuggee" depends="-init-debug-args">
         <echo message="Executing ${jfx.deployment.jnlp} in debug mode using ${active.webstart.executable}"/>
@@ -2248,6 +3121,7 @@
     </target>
     
     <target name="-profile-check-1">
+        <property name="run.jvmargs.ide" value=""/>        
         <condition property="profiler.configured">
             <or>
                 <contains casesensitive="true" string="${run.jvmargs.ide}" substring="-agentpath:"/>
@@ -2260,8 +3134,10 @@
         <antcall target="-profile-check-1"/>
     </target>
     
-    <target name="-do-jfxws-profile" depends="-check-jdk-7u4or5-mac,jar,-check-jfx-webstart,-resolve-jnlp-file,-check-jfx-runtime">
+    <target name="-do-jfxws-profile" depends="-mark-project-state-profiling,-mark-project-needs-jnlp,
+            -check-jdk-7u4or5-mac,jar,-check-jfx-webstart,-resolve-jnlp-file,-check-jfx-runtime">
         <echo message="Executing ${jfx.deployment.jnlp} in profile mode using ${active.webstart.executable}"/>
+        <property name="run.jvmargs.ide" value=""/>        
         <exec executable="${active.webstart.executable}">
             <env key="JAVAWS_VM_ARGS" value="${run.jvmargs.ide}"/>
             <arg value="-wait"/>
@@ -2271,12 +3147,17 @@
     
     <target name="jfxws-profile" if="profiler.configured" 
         depends="-profile-check-1"
-        description="Profile fx javaws project in IDE">
+        description="Profile JavaFX javaws project in IDE">
         <startprofiler/>
-        
         <antcall target="-do-jfxws-profile"/>
     </target>
     
+    <target name="jfxws-run-noscript" depends="-set-fallback-no-javascript, jfxws-run"/>
+
+    <target name="jfxws-debug-noscript" depends="-set-fallback-no-javascript, jfxws-debug"/>
+
+    <target name="jfxws-profile-noscript" depends="-set-fallback-no-javascript, jfxws-profile"/>
+
 
     <!-- Running/Debugging/Profiling in Browser -->
 
@@ -2301,10 +3182,13 @@
         </condition>
         <fail message="Error:${line.separator}Browser selection not recognizable from ${config} run configuration.${line.separator}Please go to Project Properties dialog, category Run, to select a valid browser." unless="javafx.run.inbrowser.path"/>
         <fail message="Error:${line.separator}No browser defined in ${config} run configuration.${line.separator}Please verify in Tools->Options dialog that NetBeans recognizes a valid browser, then go to Project Properties dialog, category Run, to select a valid browser." if="javafx.run.inbrowser.undefined"/>
-        <fail message="Error:${line.separator}Browser ${javafx.run.inbrowser.path} referred from ${config} run configuration can not be found.${line.separator}(This can happen, e.g, when the FX Project is transferred to another system.)${line.separator}Please go to Project Properties dialog, category Run, to select a valid browser." unless="javafx.run.inbrowser.path-exists"/>
+        <fail message="Error:${line.separator}Browser ${javafx.run.inbrowser.path} referred from ${config} run configuration can not be found.${line.separator}(This can happen, e.g, when the JavaFX Project is transferred to another system.)${line.separator}Please go to Project Properties dialog, category Run, to select a valid browser." unless="javafx.run.inbrowser.path-exists"/>
     </target>
 
-    <target name="-check-template-processed-html-file">
+    <target name="-substitute-template-processed-html-file" depends="-check-project" if="html-template-available">
+        <deploy-process-template/>
+    </target>
+    <target name="-check-template-processed-html-file" depends="-substitute-template-processed-html-file">
         <condition property="html-file-exists">
             <and>
                 <isset property="html-template-available"/>
@@ -2331,16 +3215,44 @@
         </condition>
     </target>
 
-    <target name="jfxbe-run" if="html-file-exists" depends="-check-jdk-7u4or5-mac,jar,-check-selected-browser-path,-set-html-file,-check-jfx-runtime" description="Start JavaFX execution in browser">
-        <echo message="Executing ${jfx.deployment.html} using ${javafx.run.inbrowser}"/>
+    <!-- set property javafx.enable.concurrent.external.runs=true to enable multiple runs of the same WebStart or Run-in-Browser project -->
+    <target name="-check-concurrent-html-runs" depends="-set-html-file">
+        <condition property="disable-concurrent-runs">
+            <or>
+                <not>
+                    <and>
+                        <isset property="javafx.enable.concurrent.external.runs"/>
+                        <equals arg1="${javafx.enable.concurrent.external.runs}" arg2="true" trim="true"/>
+                    </and>
+                </not>
+                <and>
+                    <isset property="html-template-available"/>
+                    <available file="${javafx.run.htmltemplate.processed}"/>
+                </and>
+            </or>
+        </condition>
+        <condition property="temp.run.html" value="${jfx.deployment.html}">
+            <isset property="disable-concurrent-runs"/>
+        </condition>
+    </target>
+    <target name="-warn-concurrent-html-runs" unless="disable-concurrent-runs">
+        <echo message="Note: Concurrent Run in Browser enabled.${line.separator}Temporary directory ${temp.run.dir}${line.separator}will remain unused when execution in browser has finished. Use project Clean to delete unused directories."/>
+    </target>
+
+    <target name="jfxbe-run" if="html-file-exists" depends="-mark-project-state-running,-clean-if-config-changed,-mark-project-needs-jnlp,-check-jdk-7u4or5-mac,jar,
+            -check-selected-browser-path,-set-html-file,-check-jfx-runtime,-check-concurrent-html-runs,-create-temp-run-dir"
+            description="Start JavaFX execution in browser">
+        <echo message="Executing ${temp.run.html} using ${javafx.run.inbrowser}"/>
         <echo message="(${javafx.run.inbrowser.path})"/>
         <exec executable="${javafx.run.inbrowser.path}">
-            <arg file="${jfx.deployment.html}"/>
+            <arg file="${temp.run.html}"/>
         </exec>
+        <antcall target="-warn-concurrent-html-runs"/>
     </target>
     
-    <target name="jfxbe-debug" if="html-file-exists+netbeans.home" depends="-check-jdk-7u4or5-mac,jar,-check-selected-browser-path,-set-html-file,-check-jfx-runtime,-debug-start-debugger,-debug-jfxbe-debuggee" 
-        description="Debug JavaFX project in browser"/>
+    <target name="jfxbe-debug" if="html-file-exists+netbeans.home" depends="-mark-project-state-debugging,-clean-if-config-changed,-mark-project-needs-jnlp,
+            -check-jdk-7u4or5-mac,jar,-check-selected-browser-path,-set-html-file,-check-jfx-runtime,
+            -debug-start-debugger,-debug-jfxbe-debuggee" description="Debug JavaFX project in browser"/>
         
     <target name="-debug-jfxbe-debuggee" depends="-init-debug-args">
         <echo message="Executing ${jfx.deployment.html} in debug mode using ${javafx.run.inbrowser}"/>
@@ -2355,9 +3267,11 @@
         <antcall target="-profile-check-1"/>
     </target>
 
-    <target name="-do-jfxbe-profile" depends="-check-jdk-7u4or5-mac,jar,-check-selected-browser-path,-set-html-file,-check-jfx-runtime">
+    <target name="-do-jfxbe-profile" depends="-mark-project-state-profiling,-mark-project-needs-jnlp,
+            -check-jdk-7u4or5-mac,jar,-check-selected-browser-path,-set-html-file,-check-jfx-runtime">
         <echo message="Executing ${jfx.deployment.html} in profile mode using ${javafx.run.inbrowser}"/>
         <echo message="(${javafx.run.inbrowser.path})"/>
+        <property name="run.jvmargs.ide" value=""/>        
         <exec executable="${javafx.run.inbrowser.path}">
             <env key="_JPI_VM_OPTIONS" value="${run.jvmargs.ide}"/>
             <arg file="${jfx.deployment.html}"/>
@@ -2368,7 +3282,14 @@
         depends="-profile-check-html"
         description="Profile JavaFX project in browser">
         <startprofiler/>
-        
         <antcall target="-do-jfxbe-profile"/>
     </target>
+
+    <target name="jfxbe-run-noscript" depends="-set-fallback-no-javascript, jfxbe-run"/>
+
+    <target name="jfxbe-debug-noscript" depends="-set-fallback-no-javascript, jfxbe-debug"/>
+
+    <target name="jfxbe-profile-noscript" depends="-set-fallback-no-javascript, jfxbe-profile"/>
+
+
 </project>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/experiments/Modena/nbproject/jfx-impl_backup_1.xml	Wed Feb 13 18:35:25 2013 -0500
@@ -0,0 +1,2374 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+*** GENERATED FROM TEMPLATE - DO NOT EDIT ***
+***       EDIT ../build.xml INSTEAD       ***
+-->
+
+<project name="jfx-impl" default="jfx-deployment" basedir=".." xmlns:j2seproject1="http://www.netbeans.org/ns/j2se-project/1" 
+         xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3" xmlns:fx="javafx:com.sun.javafx.tools.ant">
+    <description>JavaFX-specific Ant calls</description>
+
+
+    <!-- Empty placeholders for easier customization in ../build.xml -->
+    
+    <target name="-pre-jfx-jar">
+        <!-- Called right before <fx:jar> task. You can override this target in the ../build.xml file. -->
+    </target>
+
+    <target name="-post-jfx-jar">
+        <!-- Called right after <fx:jar> task. You can override this target in the ../build.xml file. -->
+    </target>
+
+    <target name="-pre-jfx-deploy">
+        <!-- Called right before <fx:deploy> task. You can override this target in the ../build.xml file. -->
+    </target>
+
+    <target name="-post-jfx-deploy">
+        <!-- Called right after <fx:deploy> task. You can override this target in the ../build.xml file. -->
+    </target>
+    
+    
+    <!-- Check system and JDK version -->
+
+    <target name="-check-operating-system">
+        <condition property="running.on.unix">
+            <os family="unix"/>
+        </condition>
+        <condition property="running.on.windows">
+            <os family="windows"/>
+        </condition>
+        <echo message="running.on.unix = ${running.on.unix}" level="verbose"/>
+        <echo message="running.on.windows = ${running.on.windows}" level="verbose"/>
+    </target>
+
+    <target name="-check-platform-home-fxsdk-java" depends="-check-property-javafx.sdk" if="javafx.sdk.defined">
+        <condition property="do.set.platform.home.fxsdk.java">
+            <and>
+                <not><isset property="active.platform.home.java.executable"/></not>
+                <or>
+                    <available file="${javafx.sdk}${file.separator}bin${file.separator}java"/>
+                    <available file="${javafx.sdk}${file.separator}bin${file.separator}java.exe"/>
+                </or>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-platform-home-fxsdk-java" depends="-check-platform-home-fxsdk-java" if="do.set.platform.home.fxsdk.java">
+        <property name="active.platform.home.java.executable" value="${javafx.sdk}${file.separator}bin${file.separator}java"/>
+    </target>
+    <target name="-check-platform-home-java" if="platform.home">
+        <condition property="do.set.platform.home.java">
+            <and>
+                <not><isset property="active.platform.home.java.executable"/></not>
+                <or>
+                    <available file="${platform.home}${file.separator}bin${file.separator}java"/>
+                    <available file="${platform.home}${file.separator}bin${file.separator}java.exe"/>
+                </or>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-platform-home-java" depends="-set-platform-home-fxsdk-java,-check-platform-home-java" if="do.set.platform.home.java">
+        <property name="active.platform.home.java.executable" value="${platform.home}${file.separator}bin${file.separator}java"/>
+    </target>
+    <target name="-check-platform-home-probjdk-java" unless="active.platform.home.java.executable">
+        <condition property="do.set.platform.home.probjdk.java">
+            <and>
+                <not><isset property="active.platform.home.java.executable"/></not>
+                <or>
+                    <available file="${java.home}${file.separator}..${file.separator}bin${file.separator}java"/>
+                    <available file="${java.home}${file.separator}..${file.separator}bin${file.separator}java.exe"/>
+                </or>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-platform-home-probjdk-java" depends="-set-platform-home-java,-check-platform-home-probjdk-java" if="do.set.platform.home.probjdk.java">
+        <property name="active.platform.home.java.executable" value="${java.home}${file.separator}..${file.separator}bin${file.separator}java"/>
+    </target>
+    <target name="-check-platform-home-envjdk-java" unless="active.platform.home.java.executable">
+        <property environment="env"/>
+        <condition property="do.set.platform.home.envjdk.java">
+            <and>
+                <not><isset property="active.platform.home.java.executable"/></not>
+                <or>
+                    <available file="${env.JAVA_HOME}${file.separator}bin${file.separator}java"/>
+                    <available file="${env.JAVA_HOME}${file.separator}bin${file.separator}java.exe"/>
+                </or>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-platform-home-envjdk-java" depends="-set-platform-home-probjdk-java,-check-platform-home-envjdk-java" if="do.set.platform.home.envjdk.java">
+        <property environment="env"/>
+        <property name="active.platform.home.java.executable" value="${env.JAVA_HOME}${file.separator}bin${file.separator}java"/>
+    </target>
+    <target name="-check-platform-home-fxrt-java" depends="-check-property-javafx.runtime" if="javafx.runtime.defined">
+        <condition property="do.set.platform.home.fxrt.java">
+            <and>
+                <not><isset property="active.platform.home.java.executable"/></not>
+                <or>
+                    <available file="${javafx.runtime}${file.separator}bin${file.separator}java"/>
+                    <available file="${javafx.runtime}${file.separator}bin${file.separator}java.exe"/>
+                </or>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-platform-home-fxrt-java" depends="-set-platform-home-envjdk-java,-check-platform-home-fxrt-java" if="do.set.platform.home.fxrt.java">
+        <property name="active.platform.home.java.executable" value="${javafx.runtime}${file.separator}bin${file.separator}java"/>
+        <echo message="Warning: java executable not found in JDK, evaluating java executable in RT instead." level="info"/>
+    </target>
+    <target name="-check-platform-home-jre-java" unless="active.platform.home.java.executable">
+        <condition property="do.set.platform.home.jre.java">
+            <and>
+                <not><isset property="active.platform.home.java.executable"/></not>
+                <or>
+                    <available file="${java.home}${file.separator}bin${file.separator}java"/>
+                    <available file="${java.home}${file.separator}bin${file.separator}java.exe"/>
+                </or>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-platform-home-jre-java" depends="-set-platform-home-fxrt-java,-check-platform-home-jre-java" if="do.set.platform.home.jre.java">
+        <property name="active.platform.home.java.executable" value="${java.home}${file.separator}bin${file.separator}java"/>
+        <echo message="Warning: java executable not found in JDK, evaluating java executable in RT instead." level="info"/>
+    </target>
+    <target name="-check-platform-home" depends="-set-platform-home-jre-java">
+        <echo message="active.platform.home.java.executable = ${active.platform.home.java.executable}" level="verbose"/>
+        <fail message="Error:${line.separator}java executable not found !" unless="active.platform.home.java.executable"/>
+    </target>
+        
+    <target name="-check-jdk-version" depends="-do-init,-check-platform-home" unless="jdk-version-checked-in-jfximpl">
+        <local name="version-output"/>
+        <exec executable="${active.platform.home.java.executable}" outputproperty="version-output">
+            <arg value="-version"/>
+        </exec>
+        <echo message="version-output:${line.separator}${version-output}" level="verbose"/>
+        <condition property="have-jdk-older-than-1.6">
+            <or>
+                <contains string="${version-output}" substring="java version &quot;1.0"/>
+                <contains string="${version-output}" substring="java version &quot;1.1"/>
+                <contains string="${version-output}" substring="java version &quot;1.2"/>
+                <contains string="${version-output}" substring="java version &quot;1.3"/>
+                <contains string="${version-output}" substring="java version &quot;1.4"/>
+                <contains string="${version-output}" substring="java version &quot;1.5"/>
+            </or>
+        </condition>
+        <fail message="Error:${line.separator}JavaFX 2.0+ projects require JDK version 1.6+ !" if="have-jdk-older-than-1.6"/>
+        <condition property="have-jdk-7u4or5-mac">
+            <and>
+                <or>
+                    <contains string="${version-output}" substring="java version &quot;1.7.0_04"/>
+                    <contains string="${version-output}" substring="java version &quot;1.7.0_05"/>
+                </or>
+                <os family="mac"/>
+            </and>
+        </condition>
+        <condition property="have-jdk-pre7u6">
+            <or>
+                <contains string="${version-output}" substring="java version &quot;1.6"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0&quot;"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0_01"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0_02"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0_03"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0_04"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0_05"/>
+            </or>
+        </condition>
+        <property name="jdk-version-checked-in-jfximpl" value="true"/>
+        <echo message="have-jdk-7u4or5-mac = ${have-jdk-7u4or5-mac}" level="verbose"/>
+        <echo message="have-jdk-pre7u6 = ${have-jdk-pre7u6}" level="verbose"/>
+    </target>
+        
+    <target name="-check-jdk-7u4or5-mac" depends="-check-jdk-version" if="have-jdk-7u4or5-mac">
+        <fail message="Error:${line.separator}JDK 7u4 Mac and 7u5 Mac do not support WebStart and JavaFX 2.0+ browser plugin technologies.${line.separator}Please upgrade to JDK 7u6 or later."/>
+    </target>
+
+    
+    <!-- Check availability of JavaFX SDK deployment support (ant-javafx.jar) -->
+
+    <target name="-check-endorsed-javafx-ant-classpath">
+        <condition property="endorsed-javafx-ant-classpath-available">
+            <and>
+                <isset property="endorsed.javafx.ant.classpath"/>
+                <not>
+                    <equals arg1="${endorsed.javafx.ant.classpath}" arg2=""/>
+                </not>
+            </and>
+        </condition>
+        <echo message="endorsed-javafx-ant-classpath-available = ${endorsed-javafx-ant-classpath-available}" level="verbose"/>
+    </target>
+
+    <target name="-check-property-javafx.sdk">
+        <echo message="javafx.sdk = ${javafx.sdk}" level="verbose"/>
+        <condition property="javafx.sdk.defined">
+            <and>
+                <isset property="javafx.sdk"/>
+                <not><contains string="${javafx.sdk}" substring="$${platform" casesensitive="false"/></not>
+            </and>
+        </condition>
+        <condition property="javafx.sdk.missing+default">
+            <and>
+                <equals arg1="${platform.active}" arg2="Default_JavaFX_Platform" trim="true"/>
+                <not><isset property="javafx.sdk.defined"/></not>
+            </and>
+        </condition>
+        <condition property="javafx.sdk.missing-default">
+            <and>
+                <not><equals arg1="${platform.active}" arg2="Default_JavaFX_Platform" trim="true"/></not>
+                <not><isset property="javafx.sdk.defined"/></not>
+            </and>
+        </condition>
+        <echo message="javafx.sdk.defined = ${javafx.sdk.defined}" level="verbose"/>
+        <echo message="javafx.sdk.missing+default = ${javafx.sdk.missing+default}" level="verbose"/>
+        <echo message="javafx.sdk.missing-default = ${javafx.sdk.missing-default}" level="verbose"/>
+    </target>
+
+    <target name="-check-ant-javafx-in-fxsdk-lib" depends="-check-property-javafx.sdk" if="javafx.sdk.defined">
+        <condition property="do.set.ant-javafx.in.fxsdk.lib">
+            <and>
+                <not><isset property="ant-javafx.jar.location"/></not>
+                <available file="${javafx.sdk}${file.separator}lib${file.separator}ant-javafx.jar"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-ant-javafx-in-fxsdk-lib" depends="-check-ant-javafx-in-fxsdk-lib" if="do.set.ant-javafx.in.fxsdk.lib">
+        <property name="ant-javafx.jar.location" value="${javafx.sdk}${file.separator}lib${file.separator}ant-javafx.jar"/>
+    </target>
+    <target name="-check-ant-javafx-in-fxsdk-tools" depends="-check-property-javafx.sdk" if="javafx.sdk.defined">
+        <condition property="do.set.ant-javafx.in.fxsdk.tools">
+            <and>
+                <not><isset property="ant-javafx.jar.location"/></not>
+                <available file="${javafx.sdk}${file.separator}tools${file.separator}ant-javafx.jar"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-ant-javafx-in-fxsdk-tools" depends="-set-ant-javafx-in-fxsdk-lib,-check-ant-javafx-in-fxsdk-tools" if="do.set.ant-javafx.in.fxsdk.tools">
+        <property name="ant-javafx.jar.location" value="${javafx.sdk}${file.separator}tools${file.separator}ant-javafx.jar"/>
+    </target>
+    <target name="-check-ant-javafx-in-platform-home-lib" if="platform.home">
+        <condition property="do.set.ant-javafx.in.platform.home.lib">
+            <and>
+                <not><isset property="ant-javafx.jar.location"/></not>
+                <available file="${platform.home}${file.separator}lib${file.separator}ant-javafx.jar"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-ant-javafx-in-platform-home-lib" depends="-set-ant-javafx-in-fxsdk-tools,-check-ant-javafx-in-platform-home-lib" if="do.set.ant-javafx.in.platform.home.lib">
+        <property name="ant-javafx.jar.location" value="${platform.home}${file.separator}lib${file.separator}ant-javafx.jar"/>
+    </target>
+    <target name="-check-ant-javafx-in-platform-home-tools" if="platform.home">
+        <condition property="do.set.ant-javafx.in.platform.home.tools">
+            <and>
+                <not><isset property="ant-javafx.jar.location"/></not>
+                <available file="${platform.home}${file.separator}tools${file.separator}ant-javafx.jar"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-ant-javafx-in-platform-home-tools" depends="-set-ant-javafx-in-platform-home-lib,-check-ant-javafx-in-platform-home-tools" if="do.set.ant-javafx.in.platform.home.tools">
+        <property name="ant-javafx.jar.location" value="${platform.home}${file.separator}tools${file.separator}ant-javafx.jar"/>
+    </target>
+    <target name="-check-ant-javafx-in-probjdk-lib" unless="ant-javafx.jar.location">
+        <condition property="do.set.ant-javafx.in.probjdk.lib">
+            <and>
+                <not><isset property="ant-javafx.jar.location"/></not>
+                <available file="${java.home}${file.separator}..${file.separator}lib${file.separator}ant-javafx.jar"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-ant-javafx-in-probjdk-lib" depends="-set-ant-javafx-in-platform-home-tools,-check-ant-javafx-in-probjdk-lib" if="do.set.ant-javafx.in.probjdk.lib">
+        <property name="ant-javafx.jar.location" value="${java.home}${file.separator}..${file.separator}lib${file.separator}ant-javafx.jar"/>
+    </target>
+    <target name="-check-ant-javafx-in-probjdk-tools" unless="ant-javafx.jar.location">
+        <condition property="do.set.ant-javafx.in.probjdk.tools">
+            <and>
+                <not><isset property="ant-javafx.jar.location"/></not>
+                <available file="${java.home}${file.separator}..${file.separator}tools${file.separator}ant-javafx.jar"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-ant-javafx-in-probjdk-tools" depends="-set-ant-javafx-in-probjdk-lib,-check-ant-javafx-in-probjdk-tools" if="do.set.ant-javafx.in.probjdk.tools">
+        <property name="ant-javafx.jar.location" value="${java.home}${file.separator}..${file.separator}tools${file.separator}ant-javafx.jar"/>
+    </target>
+    <target name="-check-ant-javafx-in-macjdk-lib" unless="ant-javafx.jar.location">
+        <condition property="do.set.ant-javafx.in.macjdk.lib">
+            <and>
+                <not><isset property="ant-javafx.jar.location"/></not>
+                <available file="${java.home}${file.separator}lib${file.separator}ant-javafx.jar"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-ant-javafx-in-macjdk-lib" depends="-set-ant-javafx-in-probjdk-tools,-check-ant-javafx-in-macjdk-lib" if="do.set.ant-javafx.in.macjdk.lib">
+        <property name="ant-javafx.jar.location" value="${java.home}${file.separator}lib${file.separator}ant-javafx.jar"/>
+    </target>
+    <target name="-check-ant-javafx-in-envjdk-lib" unless="ant-javafx.jar.location">
+        <property environment="env"/>
+        <condition property="do.set.ant-javafx.in.envjdk.lib">
+            <and>
+                <not><isset property="ant-javafx.jar.location"/></not>
+                <available file="${env.JAVA_HOME}${file.separator}lib${file.separator}ant-javafx.jar"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-ant-javafx-in-envjdk-lib" depends="-set-ant-javafx-in-macjdk-lib,-check-ant-javafx-in-envjdk-lib" if="do.set.ant-javafx.in.envjdk.lib">
+        <property name="ant-javafx.jar.location" value="${env.JAVA_HOME}${file.separator}lib${file.separator}ant-javafx.jar"/>
+    </target>
+    <target name="-check-ant-javafx-in-envjdk-tools" unless="ant-javafx.jar.location">
+        <property environment="env"/>
+        <condition property="do.set.ant-javafx.in.envjdk.tools">
+            <and>
+                <not><isset property="ant-javafx.jar.location"/></not>
+                <available file="${env.JAVA_HOME}${file.separator}tools${file.separator}ant-javafx.jar"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-ant-javafx-in-envjdk-tools" depends="-set-ant-javafx-in-envjdk-lib,-check-ant-javafx-in-envjdk-tools" if="do.set.ant-javafx.in.envjdk.tools">
+        <property name="ant-javafx.jar.location" value="${env.JAVA_HOME}${file.separator}tools${file.separator}ant-javafx.jar"/>
+    </target>
+    <target name="-pre-check-ant-javafx-version" depends="-set-ant-javafx-in-envjdk-tools" unless="ant-javafx-version-already-checked-in-jfximpl">
+        <condition property="do.check.ant-javafx.version">
+            <and>
+                <isset property="ant-javafx.jar.location"/>
+                <not><isset property="ant-javafx-version-already-checked-in-jfximpl"/></not>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-endorsed-javafx-ant-classpath" depends="-check-endorsed-javafx-ant-classpath,-pre-check-ant-javafx-version" if="endorsed-javafx-ant-classpath-available">
+        <property name="javafx.ant.classpath" value="${endorsed.javafx.ant.classpath}:${ant-javafx.jar.location}"/>
+    </target>
+    <target name="-set-javafx-ant-classpath" depends="-check-endorsed-javafx-ant-classpath,-pre-check-ant-javafx-version" unless="endorsed-javafx-ant-classpath-available">
+        <property name="javafx.ant.classpath" value="${ant-javafx.jar.location}"/>
+    </target>
+    <target name="-check-ant-javafx-version" depends="-pre-check-ant-javafx-version,
+            -set-endorsed-javafx-ant-classpath,-set-javafx-ant-classpath" if="do.check.ant-javafx.version">
+        <echo message="ant-javafx.jar.location = ${ant-javafx.jar.location}" level="verbose"/>
+        <echo message="javafx.ant.classpath = ${javafx.ant.classpath}" level="verbose"/>
+        <taskdef resource="com/sun/javafx/tools/ant/antlib.xml"
+            uri="javafx:com.sun.javafx.tools.ant"
+            classpath="${javafx.ant.classpath}"/>
+        <condition property="have-fx-ant-init">
+            <typefound name="javafx:com.sun.javafx.tools.ant:init-ant"/>
+        </condition>
+        <property name="ant-javafx-version-already-checked-in-jfximpl" value="true"/>
+        <echo message="have-fx-ant-init = ${have-fx-ant-init}" level="verbose"/>
+    </target>
+    <target name="-check-jfx-sdk-version-old" depends="-check-ant-javafx-version" unless="have-fx-ant-init">
+        <property name="javafx.ant.version" value="1.0"/>
+    </target>
+    <target name="-check-jfx-sdk-version-new" depends="-check-ant-javafx-version" if="have-fx-ant-init">
+        <fx:init-ant/>
+        <condition property="have-fx-ant-api-1.1">
+            <!-- new features from JavaFX 2.0.2 are available in API version 1.1 or later -->
+            <matches pattern="1.[1-9]" string="${javafx.ant.version}"/>
+        </condition>
+    </target>
+    <target name="-check-jfx-sdk-version" depends="-check-jfx-sdk-version-old, -check-jfx-sdk-version-new">
+        <echo message="Detected JavaFX Ant API version ${javafx.ant.version}" level="info"/>
+        <echo message="have-fx-ant-api-1.1 = ${have-fx-ant-api-1.1}" level="verbose"/>
+        <echo message="javafx.ant.classpath = ${javafx.ant.classpath}" level="verbose"/>
+    </target>
+
+    <target name="-check-jfx-deployment" depends="-check-jdk-version,-check-jfx-sdk-version">
+        <condition property="jfx-deployment-available">
+            <and>
+                <or>
+                    <isset property="do.set.ant-javafx.in.fxsdk.lib"/>
+                    <isset property="do.set.ant-javafx.in.fxsdk.tools"/>
+                    <isset property="do.set.ant-javafx.in.platform.home.lib"/>
+                    <isset property="do.set.ant-javafx.in.platform.home.tools"/>
+                    <isset property="do.set.ant-javafx.in.probjdk.lib"/>
+                    <isset property="do.set.ant-javafx.in.probjdk.tools"/>
+                    <isset property="do.set.ant-javafx.in.envjdk.lib"/>
+                    <isset property="do.set.ant-javafx.in.envjdk.tools"/>
+                </or>
+                <isset property="ant-javafx.jar.location"/>
+            </and>
+        </condition>
+        <condition property="jfx-deployment-missing+jdk7u6">
+            <and>
+                <not><isset property="jfx-deployment-available"/></not>
+                <not><isset property="have-jdk-pre7u6"/></not>
+            </and>
+        </condition>
+        <condition property="jfx-deployment-missing+javafx.sdk.missing+default">
+            <and>
+                <not><isset property="jfx-deployment-available"/></not>
+                <isset property="have-jdk-pre7u6"/>
+                <isset property="javafx.sdk.missing+default"/>
+            </and>
+        </condition>
+        <condition property="jfx-deployment-missing+javafx.sdk.missing-default">
+            <and>
+                <not><isset property="jfx-deployment-available"/></not>
+                <isset property="have-jdk-pre7u6"/>
+                <isset property="javafx.sdk.missing-default"/>
+            </and>
+        </condition>
+        <fail message="Error:${line.separator}JavaFX deployment library not found in active JDK.${line.separator}Please check that the JDK is correctly installed and its version is at least 7u4 on Mac or 7u6 on other systems." if="jfx-deployment-missing+jdk7u6"/>
+        <fail message="Error:${line.separator}JavaFX deployment library not found.${line.separator}JavaFX SDK path undefined. Check the definition of ${platform.active} in Java Platform Manager${line.separator}(or directly the properties platform.active and javafx.sdk in project.properties file).${line.separator}Note: If missing, the default JavaFX-enabled platform gets created automatically when creating a new FX Project." if="jfx-deployment-missing+javafx.sdk.missing+default"/>
+        <fail message="Error:${line.separator}JavaFX deployment library not found.${line.separator}JavaFX SDK path undefined. Check the definition of ${platform.active} in Java Platform Manager${line.separator}(or directly the properties platform.active and javafx.sdk in project.properties file)." if="jfx-deployment-missing+javafx.sdk.missing-default"/>
+        <fail message="Error:${line.separator}JavaFX deployment library not found." unless="jfx-deployment-available"/>
+        <echo message="jfx-deployment-available = ${jfx-deployment-available}" level="verbose"/>
+    </target>
+    
+    
+    <!-- Check availability of main JavaFX runtime jar (jfxrt.jar) -->
+
+    <target name="-check-property-javafx.runtime">
+        <echo message="javafx.runtime = ${javafx.runtime}" level="verbose"/>
+        <condition property="javafx.runtime.defined">
+            <and>
+                <isset property="javafx.runtime"/>
+                <not><contains string="${javafx.runtime}" substring="$${platform" casesensitive="false"/></not>
+            </and>
+        </condition>
+        <condition property="javafx.runtime.missing+default">
+            <and>
+                <equals arg1="${platform.active}" arg2="Default_JavaFX_Platform" trim="true"/>
+                <not><isset property="javafx.runtime.defined"/></not>
+            </and>
+        </condition>
+        <condition property="javafx.runtime.missing-default">
+            <and>
+                <not><equals arg1="${platform.active}" arg2="Default_JavaFX_Platform" trim="true"/></not>
+                <not><isset property="javafx.runtime.defined"/></not>
+            </and>
+        </condition>
+        <echo message="javafx.runtime.defined = ${javafx.runtime.defined}" level="verbose"/>
+        <echo message="javafx.runtime.missing+default = ${javafx.runtime.missing+default}" level="verbose"/>
+        <echo message="javafx.runtime.missing-default = ${javafx.runtime.missing-default}" level="verbose"/>
+    </target>
+
+    <target name="-check-jfxrt-in-fxrt" depends="-check-property-javafx.runtime" if="javafx.runtime.defined">
+        <condition property="do.set.jfxrt.in.fxrt">
+            <and>
+                <not><isset property="jfxrt.jar.location"/></not>
+                <available file="${javafx.runtime}${file.separator}lib${file.separator}jfxrt.jar"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-jfxrt-in-fxrt" depends="-check-jfxrt-in-fxrt" if="do.set.jfxrt.in.fxrt">
+        <property name="jfxrt.jar.location" value="${javafx.runtime}${file.separator}lib${file.separator}jfxrt.jar"/>
+    </target>
+    <target name="-check-jfxrt-in-fxsdk-jre" depends="-check-property-javafx.sdk" if="javafx.sdk.defined">
+        <condition property="do.set.jfxrt.in.fxsdk.jre">
+            <and>
+                <not><isset property="jfxrt.jar.location"/></not>
+                <available file="${javafx.sdk}${file.separator}jre${file.separator}lib${file.separator}jfxrt.jar"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-jfxrt-in-fxsdk-jre" depends="-set-jfxrt-in-fxrt,-check-jfxrt-in-fxsdk-jre" if="do.set.jfxrt.in.fxsdk.jre">
+        <property name="jfxrt.jar.location" value="${javafx.sdk}${file.separator}jre${file.separator}lib${file.separator}jfxrt.jar"/>
+    </target>
+    <target name="-check-jfxrt-in-fxsdk-rt" depends="-check-property-javafx.sdk" if="javafx.sdk.defined">
+        <condition property="do.set.jfxrt.in.fxsdk.rt">
+            <and>
+                <not><isset property="jfxrt.jar.location"/></not>
+                <available file="${javafx.sdk}${file.separator}rt${file.separator}lib${file.separator}jfxrt.jar"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-jfxrt-in-fxsdk-rt" depends="-set-jfxrt-in-fxsdk-jre,-check-jfxrt-in-fxsdk-rt" if="do.set.jfxrt.in.fxsdk.rt">
+        <property name="jfxrt.jar.location" value="${javafx.sdk}${file.separator}rt${file.separator}lib${file.separator}jfxrt.jar"/>
+    </target>
+    <target name="-check-jfxrt-in-platform-home-jre" if="platform.home">
+        <condition property="do.set.jfxrt.in.platform.home.jre">
+            <and>
+                <not><isset property="jfxrt.jar.location"/></not>
+                <available file="${platform.home}${file.separator}jre${file.separator}lib${file.separator}jfxrt.jar"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-jfxrt-in-platform-home-jre" depends="-set-jfxrt-in-fxsdk-rt,-check-jfxrt-in-platform-home-jre" if="do.set.jfxrt.in.platform.home.jre">
+        <property name="jfxrt.jar.location" value="${platform.home}${file.separator}jre${file.separator}lib${file.separator}jfxrt.jar"/>
+    </target>
+    <target name="-check-jfxrt-in-platform-home-rt" if="platform.home">
+        <condition property="do.set.jfxrt.in.platform.home.rt">
+            <and>
+                <not><isset property="jfxrt.jar.location"/></not>
+                <available file="${platform.home}${file.separator}rt${file.separator}lib${file.separator}jfxrt.jar"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-jfxrt-in-platform-home-rt" depends="-set-jfxrt-in-platform-home-jre,-check-jfxrt-in-platform-home-rt" if="do.set.jfxrt.in.platform.home.rt">
+        <property name="jfxrt.jar.location" value="${platform.home}${file.separator}rt${file.separator}lib${file.separator}jfxrt.jar"/>
+    </target>
+    <target name="-check-jfxrt-in-jre" unless="jfxrt.jar.location">
+        <condition property="do.set.jfxrt.in.jre">
+            <and>
+                <not><isset property="jfxrt.jar.location"/></not>
+                <available file="${java.home}${file.separator}lib${file.separator}jfxrt.jar"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-jfxrt-in-jre" depends="-set-jfxrt-in-platform-home-rt,-check-jfxrt-in-jre" if="do.set.jfxrt.in.jre">
+        <property name="jfxrt.jar.location" value="${java.home}${file.separator}lib${file.separator}jfxrt.jar"/>
+    </target>
+    <target name="-check-jfxrt-in-envjdk-jre" unless="jfxrt.jar.location">
+        <property environment="env"/>
+        <condition property="do.set.jfxrt.in.envjdk.jre">
+            <and>
+                <not><isset property="ant-javafx.jar.location"/></not>
+                <available file="${env.JAVA_HOME}${file.separator}jre${file.separator}lib${file.separator}jfxrt.jar"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-jfxrt-in-envjdk-jre" depends="-set-jfxrt-in-jre,-check-jfxrt-in-envjdk-jre" if="do.set.jfxrt.in.envjdk.jre">
+        <property name="jfxrt.jar.location" value="${env.JAVA_HOME}${file.separator}jre${file.separator}lib${file.separator}jfxrt.jar"/>
+    </target>
+    <target name="-pre-check-jfx-runtime" depends="-set-jfxrt-in-envjdk-jre">
+        <echo message="jfxrt.jar.location = ${jfxrt.jar.location}" level="verbose"/>
+    </target>
+
+    <target name="-check-jfx-runtime" depends="-check-jdk-version, -pre-check-jfx-runtime">
+        <condition property="jfx-runtime-available">
+            <and>
+                <or>
+                    <isset property="do.set.jfxrt.in.fxrt"/>
+                    <isset property="do.set.jfxrt.in.fxsdk.jre"/>
+                    <isset property="do.set.jfxrt.in.fxsdk.rt"/>
+                    <isset property="do.set.jfxrt.in.platform.home.jre"/>
+                    <isset property="do.set.jfxrt.in.platform.home.rt"/>
+                    <isset property="do.set.jfxrt.in.jre"/>
+                    <isset property="do.set.jfxrt.in.envjdk.jre"/>
+                </or>
+                <isset property="jfxrt.jar.location"/>
+            </and>
+        </condition>
+        <fail message="Error:${line.separator}JavaFX runtime JAR not found." unless="jfx-runtime-available"/>
+        <echo message="jfx-runtime-available = ${jfx-runtime-available}" level="verbose"/>
+    </target>
+
+
+    <!-- Check availability of WebStart executable -->
+
+    <target name="-check-webstart-in-fxrt" depends="-check-property-javafx.runtime" if="javafx.runtime.defined">
+        <condition property="do.set.webstart.in.fxrt">
+            <and>
+                <not><isset property="active.webstart.executable"/></not>
+                <isset property="javafx.runtime.defined"/>
+                <or>
+                    <available file="${javafx.runtime}${file.separator}bin${file.separator}javaws.exe"/>
+                    <available file="${javafx.runtime}${file.separator}bin${file.separator}javaws"/>
+                </or>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-webstart-in-fxrt" depends="-check-webstart-in-fxrt" if="do.set.webstart.in.fxrt">
+        <property name="active.webstart.executable" value="${javafx.runtime}${file.separator}bin${file.separator}javaws"/>
+    </target>
+    <target name="-check-webstart-in-fxsdk-jre" depends="-check-property-javafx.sdk" if="javafx.sdk.defined">
+        <condition property="do.set.webstart.in.fxsdk.jre">
+            <and>
+                <not><isset property="active.webstart.executable"/></not>
+                <isset property="javafx.sdk.defined"/>
+                <or>
+                    <available file="${javafx.sdk}${file.separator}jre${file.separator}bin${file.separator}javaws.exe"/>
+                    <available file="${javafx.sdk}${file.separator}jre${file.separator}bin${file.separator}javaws"/>
+                </or>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-webstart-in-fxsdk-jre" depends="-set-webstart-in-fxrt,-check-webstart-in-fxsdk-jre" if="do.set.webstart.in.fxsdk.jre">
+        <property name="active.webstart.executable" value="${javafx.sdk}${file.separator}jre${file.separator}bin${file.separator}javaws"/>
+    </target>
+    <target name="-check-webstart-in-fxsdk" depends="-check-property-javafx.sdk" if="javafx.sdk.defined">
+        <condition property="do.set.webstart.in.fxsdk">
+            <and>
+                <not><isset property="active.webstart.executable"/></not>
+                <isset property="javafx.sdk.defined"/>
+                <or>
+                    <available file="${javafx.sdk}${file.separator}bin${file.separator}javaws.exe"/>
+                    <available file="${javafx.sdk}${file.separator}bin${file.separator}javaws"/>
+                </or>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-webstart-in-fxsdk" depends="-set-webstart-in-fxsdk-jre,-check-webstart-in-fxsdk" if="do.set.webstart.in.fxsdk">
+        <property name="active.webstart.executable" value="${javafx.sdk}${file.separator}bin${file.separator}javaws"/>
+    </target>
+    <target name="-check-webstart-in-platform-home-jre" if="platform.home">
+        <condition property="do.set.webstart.in.platform.home.jre">
+            <and>
+                <not><isset property="active.webstart.executable"/></not>
+                <or>
+                    <available file="${platform.home}${file.separator}jre${file.separator}bin${file.separator}javaws.exe"/>
+                    <available file="${platform.home}${file.separator}jre${file.separator}bin${file.separator}javaws"/>
+                </or>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-webstart-in-platform-home-jre" depends="-set-webstart-in-fxsdk,-check-webstart-in-platform-home-jre" if="do.set.webstart.in.platform.home.jre">
+        <property name="active.webstart.executable" value="${platform.home}${file.separator}jre${file.separator}bin${file.separator}javaws"/>
+    </target>
+    <target name="-check-webstart-in-platform-home" if="platform.home">
+        <condition property="do.set.webstart.in.platform.home">
+            <and>
+                <not><isset property="active.webstart.executable"/></not>
+                <or>
+                    <available file="${platform.home}${file.separator}bin${file.separator}javaws.exe"/>
+                    <available file="${platform.home}${file.separator}bin${file.separator}javaws"/>
+                </or>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-webstart-in-platform-home" depends="-set-webstart-in-platform-home-jre,-check-webstart-in-platform-home" if="do.set.webstart.in.platform.home">
+        <property name="active.webstart.executable" value="${platform.home}${file.separator}bin${file.separator}javaws"/>
+    </target>
+    <target name="-check-webstart-in-jre" unless="active.webstart.executable">
+        <condition property="do.set.webstart.in.jre">
+            <and>
+                <not><isset property="active.webstart.executable"/></not>
+                <or>
+                    <available file="${java.home}${file.separator}bin${file.separator}javaws.exe"/>
+                    <available file="${java.home}${file.separator}bin${file.separator}javaws"/>
+                </or>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-webstart-in-jre" depends="-set-webstart-in-platform-home,-check-webstart-in-jre" if="do.set.webstart.in.jre">
+        <property name="active.webstart.executable" value="${java.home}${file.separator}bin${file.separator}javaws"/>
+    </target>
+    <target name="-check-webstart-in-probjdk" unless="active.webstart.executable">
+        <condition property="do.set.webstart.in.probjdk">
+            <and>
+                <not><isset property="active.webstart.executable"/></not>
+                <or>
+                    <available file="${java.home}${file.separator}..${file.separator}bin${file.separator}javaws.exe"/>
+                    <available file="${java.home}${file.separator}..${file.separator}bin${file.separator}javaws"/>
+                </or>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-webstart-in-probjdk" depends="-set-webstart-in-jre,-check-webstart-in-probjdk" if="do.set.webstart.in.probjdk">
+        <property name="active.webstart.executable" value="${java.home}${file.separator}..${file.separator}bin${file.separator}javaws"/>
+    </target>
+    <target name="-check-webstart-in-envjdk" unless="active.webstart.executable">
+        <property environment="env"/>
+        <condition property="do.set.webstart.in.envjdk">
+            <and>
+                <not><isset property="active.webstart.executable"/></not>
+                <or>
+                    <available file="${env.JAVA_HOME}${file.separator}bin${file.separator}javaws.exe"/>
+                    <available file="${env.JAVA_HOME}${file.separator}bin${file.separator}javaws"/>
+                </or>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-webstart-in-envjdk" depends="-set-webstart-in-probjdk,-check-webstart-in-envjdk" if="do.set.webstart.in.envjdk">
+        <property name="active.webstart.executable" value="${env.JAVA_HOME}${file.separator}bin${file.separator}javaws"/>
+    </target>
+    <target name="-pre-check-webstart-in-unix" depends="-check-operating-system,-set-webstart-in-envjdk" unless="active.webstart.executable">
+        <condition property="running.on.unix-active.webstart.executable">
+            <and>
+                <not><isset property="active.webstart.executable"/></not>
+                <isset property="running.on.unix"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-check-webstart-in-unix" depends="-pre-check-webstart-in-unix" if="running.on.unix-active.webstart.executable">
+        <local name="exec.which.javaws.result"/>
+        <exec executable="which" failifexecutionfails="false" failonerror="false" resultproperty="exec.which.javaws.result" outputproperty="exec.which.javaws.output">
+            <arg value="javaws"/>
+        </exec>
+        <condition property="do.set.webstart.in.unix">
+            <and>
+                <not><isset property="active.webstart.executable"/></not>
+                <isset property="exec.which.javaws.result"/>
+                <equals arg1="${exec.which.javaws.result}" arg2="0"/>
+                <isset property="exec.which.javaws.output"/>
+                <not><equals arg1="${exec.which.javaws.output}" arg2=""/></not>
+            </and>
+        </condition>
+        <echo message="do.set.webstart.in.unix = ${do.set.webstart.in.unix}" level="verbose"/>
+    </target>
+    <target name="-set-webstart-in-unix" depends="-set-webstart-in-envjdk,-check-webstart-in-unix" if="do.set.webstart.in.unix">
+        <property name="active.webstart.executable" value="${exec.which.javaws.output}"/>
+    </target>
+    <target name="-pre-check-jfx-webstart" depends="-set-webstart-in-unix">
+        <echo message="active.webstart.executable = ${active.webstart.executable}" level="verbose"/>
+    </target>
+
+    <target name="-check-jfx-webstart" depends="-pre-check-jfx-webstart">
+        <condition property="jfx-webstart-available">
+            <and>
+                <or>
+                    <isset property="do.set.webstart.in.fxrt"/>
+                    <isset property="do.set.webstart.in.fxsdk.jre"/>
+                    <isset property="do.set.webstart.in.fxsdk"/>
+                    <isset property="do.set.webstart.in.platform.home.jre"/>
+                    <isset property="do.set.webstart.in.platform.home"/>
+                    <isset property="do.set.webstart.in.jre"/>
+                    <isset property="do.set.webstart.in.probjdk"/>
+                    <isset property="do.set.webstart.in.envjdk"/>
+                    <isset property="do.set.webstart.in.unix"/>
+                </or>
+                <isset property="active.webstart.executable"/>
+            </and>
+        </condition>
+        <condition property="jfx-webstart-missing+jdk7u6">
+            <and>
+                <not><isset property="jfx-webstart-available"/></not>
+                <not><isset property="have-jdk-pre7u6"/></not>
+            </and>
+        </condition>
+        <condition property="jfx-webstart-missing+javafx.runtime.missing+default">
+            <and>
+                <not><isset property="jfx-webstart-available"/></not>
+                <isset property="have-jdk-pre7u6"/>
+                <isset property="javafx.runtime.missing+default"/>
+            </and>
+        </condition>
+        <condition property="jfx-webstart-missing+javafx.runtime.missing-default">
+            <and>
+                <not><isset property="jfx-webstart-available"/></not>
+                <isset property="have-jdk-pre7u6"/>
+                <isset property="javafx.runtime.missing-default"/>
+            </and>
+        </condition>
+        <fail message="Error:${line.separator}WebStart executable could not be found in active JDK.${line.separator}Please check that the JDK is correctly installed and its version is at least 7u6." if="jfx-webstart-missing+jdk7u6"/>
+        <fail message="Error:${line.separator}WebStart executable could not be found.${line.separator}JavaFX RT path undefined. Check the definition of ${platform.active} in Java Platform Manager${line.separator}(or directly the properties platform.active and javafx.runtime in project.properties file).${line.separator}Note: If missing, the default JavaFX-enabled platform gets created automatically when creating a new FX Project." if="jfx-webstart-missing+javafx.runtime.missing+default"/>
+        <fail message="Error:${line.separator}WebStart executable could not be found.${line.separator}JavaFX RT path undefined. Check the definition of ${platform.active} in Java Platform Manager${line.separator}(or directly the properties platform.active and javafx.runtime in project.properties file)." if="jfx-webstart-missing+javafx.runtime.missing-default"/>
+        <fail message="Error:${line.separator}WebStart executable could not be found." unless="jfx-webstart-available"/>
+        <echo message="jfx-webstart-available = ${jfx-webstart-available}" level="verbose"/>
+    </target>
+
+    
+    <!-- Legacy targets kept for compatibility with older build-impl.xml scripts -->
+
+    <!-- Note: target "-check-javafx" is not necessary any more but is referenced from NB 7.1 build-impl.xml -->
+    <target name="-check-javafx"/>
+    <!-- Note: target "-javafx-check-error" is not necessary any more but is referenced from NB 7.1 build-impl.xml -->
+    <target name="-javafx-check-error"/>    
+    <!-- Note: target "-init-javafx" is not necessary any more but is referenced from NB 7.1 build-impl.xml -->
+    <target name="-init-javafx"/>
+
+    
+    <!-- Check project properties -->
+    
+    <target name="-check-default-run-config" unless="config">
+        <property name="config" value="&lt;default config&gt;"/>
+    </target>
+    
+    <target name="-check-project">
+        <condition property="main-class-available">
+            <isset property="javafx.main.class"/>
+        </condition>
+        <condition property="vmargs-available">
+            <and>
+                <isset property="run.jvmargs"/>
+                <not><equals arg1="${run.jvmargs}" arg2=""/></not>
+            </and>
+        </condition>
+        <condition property="preloader-available">
+            <and>
+                <isset property="javafx.preloader.enabled"/>
+                <equals arg1="${javafx.preloader.enabled}" arg2="true"/>
+                <isset property="javafx.preloader.class"/>
+                <not><equals arg1="${javafx.preloader.class}" arg2=""/></not>
+                <isset property="javafx.preloader.jar.filename"/>
+                <not><equals arg1="${javafx.preloader.jar.filename}" arg2=""/></not>
+            </and>
+        </condition>
+        <condition property="app-with-preloader">
+            <and>
+                <istrue value="${preloader-available}"/>
+                <istrue value="${main-class-available}"/>
+            </and>
+        </condition>
+        <condition property="app-with-external-preloader-jar">
+            <and>
+                <isset property="app-with-preloader"/>
+                <isset property="javafx.preloader.type"/>
+                <equals arg1="${javafx.preloader.type}" arg2="jar" trim="true"/>
+            </and>
+        </condition>
+        <condition property="app-without-preloader">
+            <and>
+                <not>
+                    <istrue value="${preloader-available}"/>
+                </not>
+                <istrue value="${main-class-available}"/>
+            </and>
+        </condition>
+        <condition property="preloader-app">
+            <and>
+                <isset property="javafx.preloader"/>
+                <equals arg1="${javafx.preloader}" arg2="true"/>
+            </and>
+        </condition>
+        <condition property="fx-in-swing-app">
+            <and>
+                <isset property="javafx.swing"/>
+                <equals arg1="${javafx.swing}" arg2="true"/>
+            </and>
+        </condition>
+        <condition property="fx-in-swing-workaround-app">
+            <and>
+                <istrue value="${fx-in-swing-app}"/>
+                <istrue value="${preloader-app}"/>
+            </and>
+        </condition>
+        <condition property="preloader-app-no-workaround">
+            <and>
+                <istrue value="${preloader-app}"/>
+                <not><istrue value="${fx-in-swing-app}"/></not>
+            </and>
+        </condition>
+        <condition property="html-template-available">
+            <and>
+                <isset property="javafx.run.htmltemplate"/>
+                <not>
+                    <equals arg1="${javafx.run.htmltemplate}" arg2=""/>
+                </not>
+            </and>
+        </condition>
+        <condition property="icon-available">
+            <and>
+                <isset property="javafx.deploy.icon"/>
+                <not>
+                    <equals arg1="${javafx.deploy.icon}" arg2=""/>
+                </not>
+            </and>
+        </condition>
+        <condition property="dimensions-available">
+            <and>
+                <isset property="javafx.run.width"/>
+                <isset property="javafx.run.height"/>
+                <not><equals arg1="${javafx.run.width}" arg2=""/></not>
+                <not><equals arg1="${javafx.run.height}" arg2=""/></not>
+            </and>
+        </condition>
+        <condition property="update-mode-background">
+            <and>
+                <isset property="javafx.deploy.backgroundupdate"/>
+                <equals arg1="${javafx.deploy.backgroundupdate}" arg2="true" trim="true"/>
+            </and>
+        </condition>
+        <condition property="offline-allowed">
+            <and>
+                <isset property="javafx.deploy.allowoffline"/>
+                <equals arg1="${javafx.deploy.allowoffline}" arg2="true" trim="true"/>
+            </and>
+        </condition>
+        <condition property="permissions-elevated">
+            <and>
+                <isset property="javafx.deploy.permissionselevated"/>
+                <equals arg1="${javafx.deploy.permissionselevated}" arg2="true" trim="true"/>
+            </and>
+        </condition>
+        <condition property="binary-encode-css">
+            <and>
+                <isset property="javafx.binarycss"/>
+                <equals arg1="${javafx.binarycss}" arg2="true" trim="true"/>
+            </and>
+        </condition>
+        <condition property="rebase-lib-jars">
+            <and>
+                <isset property="javafx.rebase.libs"/>
+                <equals arg1="${javafx.rebase.libs}" arg2="true" trim="true"/>
+            </and>
+        </condition>
+
+        <echo message="main-class-available = ${main-class-available}" level="verbose"/>
+        <echo message="vmargs-available = ${vmargs-available}" level="verbose"/>
+        <echo message="preloader-available = ${preloader-available}" level="verbose"/>
+        <echo message="app-with-preloader = ${app-with-preloader}" level="verbose"/>
+        <echo message="app-with-preloader-without-project = ${app-with-preloader-without-project}" level="verbose"/>
+        <echo message="app-without-preloader = ${app-without-preloader}" level="verbose"/>
+        <echo message="preloader-app = ${preloader-app}" level="verbose"/>
+        <echo message="fx-in-swing-app = ${fx-in-swing-app}" level="verbose"/>
+        <echo message="fx-in-swing-workaround-app = ${fx-in-swing-workaround-app}" level="verbose"/>
+        <echo message="preloader-app-no-workaround = ${preloader-app-no-workaround}" level="verbose"/>
+        <echo message="html-template-available = ${html-template-available}" level="verbose"/>
+        <echo message="icon-available = ${icon-available}" level="verbose"/>
+        <echo message="dimensions-available = ${dimensions-available}" level="verbose"/>
+        <echo message="update-mode-background = ${update-mode-background}" level="verbose"/>
+        <echo message="offline-allowed = ${offline-allowed}" level="verbose"/>
+        <echo message="permissions-elevated = ${permissions-elevated}" level="verbose"/>
+        <echo message="binary-encode-css = ${binary-encode-css}" level="verbose"/>
+        <echo message="rebase-lib-jars = ${rebase-lib-jars}" level="verbose"/>
+    </target>
+
+    <target name="-icon-deployment-check" depends="-check-project,-check-jfx-deployment" if="icon-available">
+        <condition property="icon-deployment-may-not-be-supported">
+            <and>
+                <isset property="icon-available"/>
+                <not><isset property="have-fx-ant-api-1.1"/></not>
+            </and>
+        </condition>
+    </target>
+    <target name="-icon-warning" depends="-icon-deployment-check" if="icon-deployment-may-not-be-supported">
+        <echo message="Warning: Note that due to a bug in early JavaFX 2.0 SDK distributions the icon may not be properly set in deployment files."/>
+    </target>
+
+    <target name="-set-dimensions" depends="-check-project" if="dimensions-available">
+        <property name="javafx.width" value="${javafx.run.width}"/>
+        <property name="javafx.height" value="${javafx.run.height}"/>
+    </target>
+    <target name="-reset-dimensions" depends="-check-project" unless="dimensions-available">
+        <property name="javafx.width" value="800"/>
+        <property name="javafx.height" value="600"/>
+    </target>
+
+    <target name="-set-update-mode-background" depends="-check-project" if="update-mode-background">
+        <property name="update-mode" value="background"/>
+    </target>
+    <target name="-set-update-mode-eager" depends="-check-project" unless="update-mode-background">
+        <property name="update-mode" value="eager"/>
+    </target>
+
+    <target name="-set-permissions-elevated" depends="-check-project" if="permissions-elevated">
+        <property name="permissions.elevated" value="true"/>
+    </target>
+    <target name="-reset-permissions-elevated" depends="-check-project" unless="permissions-elevated">
+        <property name="permissions.elevated" value="false"/>
+    </target>
+
+    <target name="-set-binary-css" depends="-check-project" if="binary-encode-css">
+        <property name="css-include-ext" value="bss"/>
+        <property name="css-exclude-ext" value="css"/>
+    </target>
+    <target name="-unset-binary-css" depends="-check-project" unless="binary-encode-css">
+        <property name="css-include-ext" value="css"/>
+        <property name="css-exclude-ext" value="bss"/>
+    </target>
+    <target name="-copy-binary-css" depends="-check-project" if="binary-encode-css">
+        <fileset id="cssfiles" dir="${basedir}${file.separator}${build.classes.dir}">
+            <include name="**${file.separator}*.css"/>
+        </fileset>
+        <property name="cssfileslist" refid="cssfiles"/>
+        <echo message="css files to binary convert: " level="verbose">${cssfileslist}</echo>
+        <fx:csstobin outdir="${basedir}${file.separator}${build.classes.dir}">
+            <fileset refid="cssfiles"/>
+        </fx:csstobin>
+    </target>
+
+
+    <!-- Copy dependent libraries -->
+    
+    <!-- Note: target "-jfx-copylibs" is referenced from NB 7.1 build-impl.xml -->
+    <target name="-jfx-copylibs" depends="init,compile,-pre-pre-jar,-pre-jar">
+        <local name="run.classpath.without.build.classes.and.dist.dir"/>
+        <pathconvert property="run.classpath.without.build.classes.and.dist.dir">
+            <path path="${run.classpath}"/>
+            <map from="${basedir}${file.separator}${build.classes.dir}" to=""/>
+            <map from="${basedir}${file.separator}${dist.jar}" to=""/>
+            <map from="${javafx.runtime}${file.separator}lib${file.separator}jfxrt.jar" to=""/>
+            <map from="${javafx.runtime}${file.separator}lib${file.separator}deploy.jar" to=""/>
+            <map from="${javafx.runtime}${file.separator}lib${file.separator}javaws.jar" to=""/>
+            <map from="${javafx.runtime}${file.separator}lib${file.separator}plugin.jar" to=""/>
+        </pathconvert>
+        <!-- add possibly missing dependencies at distance 2 (build system logic thus provides transitive closure) -->
+        <local name="run.and.lib.classpath"/>
+        <script language="javascript">
+            <![CDATA[
+                var pathConvert = project.createTask("pathconvert");
+                pathConvert.setProperty("run.and.lib.classpath");
+                var classPath = project.getProperty("run.classpath.without.build.classes.and.dist.dir");
+                var fileSeparator = project.getProperty("file.separator");
+                if(classPath != null) {
+                    var classPathCopy = pathConvert.createPath();
+                    classPathCopy.setPath(classPath);
+                    if(classPath.indexOf(";") != -1) {
+                        var pathArray = classPath.split(";");
+                    } else {
+                        var pathArray = classPath.split(":");
+                    }
+                    var added = "";
+                    for (var i=0; i<pathArray.length; i++) {
+                        var index = pathArray[i].lastIndexOf(fileSeparator);
+                        if (index >=0) {
+                            var onePath = pathArray[i].substr(0,index+1) + "lib";
+                            var oneDir = new java.io.File(onePath);
+                            if(oneDir.exists()) {
+                                var fs = project.createDataType("fileset");
+                                fs.setDir( oneDir );
+                                fs.setIncludes("*.jar");
+                                var ds = fs.getDirectoryScanner(project);
+                                var srcFiles = ds.getIncludedFiles();
+                                for (j=0; j<srcFiles.length; j++) {
+                                    if(classPath.indexOf(srcFiles[j]) == -1 && added.indexOf(srcFiles[j]) == -1) {
+                                        var path = pathConvert.createPath();
+                                        path.setPath(onePath + fileSeparator + srcFiles[j]);
+                                        added += srcFiles[j];
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+                pathConvert.perform();
+            ]]>
+        </script>
+        <echo message="run.and.lib.classpath = ${run.and.lib.classpath}" level="verbose"/>
+        <delete dir="${dist.dir}${file.separator}lib" includeEmptyDirs="true" quiet="true"/>
+        <copy todir="${dist.dir}${file.separator}lib" flatten="true" preservelastmodified="true" overwrite="true">
+            <path>
+                <pathelement path="${run.and.lib.classpath}"/>
+            </path>
+        </copy>
+    </target>
+    
+    <target name="-copy-external-preloader-jar" depends="-check-project" if="app-with-external-preloader-jar">
+        <copy file="${javafx.preloader.jar.path}" todir="${dist.dir}${file.separator}lib"/>
+    </target>
+
+
+    <!-- Optional classpath re-base of dependent JAR manifests after copy to lib/, required by GlassFish -->
+
+    <macrodef name="rebase-lib">
+        <attribute name="jarfile"/>
+        <sequential>
+            <local name="tmpdir"/>
+            <property name="tmpdir" value="${java.io.tmpdir}${file.separator}${user.name}_${ant.project.name}_rebase" />
+            <echo message="tmpdir = ${tmpdir}" level="verbose"/>
+            <delete dir="${tmpdir}" quiet="true"/>
+            <mkdir dir="${tmpdir}"/>
+            <unzip src="@{jarfile}" dest="${tmpdir}">
+                <patternset>
+                    <include name="META-INF${file.separator}MANIFEST.MF"/>
+                </patternset>
+            </unzip>
+            <local name="manifest.file.temp"/>
+            <property name="manifest.file.temp" value="${tmpdir}${file.separator}META-INF${file.separator}MANIFEST.MF" />
+            <echo message="manifest.file.temp = ${manifest.file.temp}" level="verbose"/>
+            <!-- edited manifest file -->
+            <local name="manifest.file.temp.new"/>
+            <property name="manifest.file.temp.new" value="${manifest.file.temp}_new" />
+            <echo message="manifest.file.temp.new = ${manifest.file.temp.new}" level="verbose"/>
+            <script language="javascript">
+                <![CDATA[
+                    var UTF_8 = "UTF-8";
+                    var ATTR_CLASS_PATH = "Class-Path";
+                    var ATTR_CLASS_PATH_FX = "JavaFX-Class-Path";
+                    function isSigned(manifest) {        
+                        var sections = manifest.getSectionNames();
+                        while(sections.hasMoreElements()) {
+                            var sectionname = sections.nextElement();
+                            var section = manifest.getSection(sectionname);
+                            if(section != null) {
+                                var sectionKeys = section.getAttributeKeys();
+                                while (sectionKeys.hasMoreElements()) {
+                                    var element = sectionKeys.nextElement();
+                                    if (element.endsWith("-Digest") || element.endsWith("-digest")) {
+                                        return true;
+                                    }
+                                }
+                            }
+                        }
+                        return false;
+                    }
+                    var src = project.getProperty("manifest.file.temp");
+                    var srf = new java.io.File(src);
+                    try {
+                        var fis = new java.io.FileInputStream(srf);
+                        try {
+                            var isr = new java.io.InputStreamReader(fis, UTF_8);
+                            try {
+                                var manifest = new org.apache.tools.ant.taskdefs.Manifest(isr);
+                            } finally {
+                                isr.close();
+                            }
+                        } finally {
+                            fis.close();
+                        }
+                    } catch(e) {
+                        var manifest = null;
+                    }
+                    if(manifest != null) {
+                        if(isSigned(manifest)) {
+                            println("Warning: Signed JAR can not be rebased.");
+                        } else {
+                            var mainSection = manifest.getMainSection();
+                            var classPath = mainSection.getAttributeValue(ATTR_CLASS_PATH);
+                            if (classPath != null) {
+                                var classPathAttr = ATTR_CLASS_PATH;
+                            } else {
+                                classPath = mainSection.getAttributeValue(ATTR_CLASS_PATH_FX);
+                                if(classPath != null) {
+                                    var classPathAttr = ATTR_CLASS_PATH_FX;
+                                }
+                            }
+                            if(classPath != null) {
+                                var result = new java.lang.StringBuilder();
+                                var changed = false;
+                                var pathArray = classPath.split(" ");
+                                for (var i=0; i<pathArray.length; i++) {
+                                    if (result.length() > 0) {
+                                        result.append(' ');
+                                    }
+                                    var index = pathArray[i].lastIndexOf('/');
+                                    if (index >=0 && index < pathArray[i].length()-1) {
+                                        pathArray[i] = pathArray[i].substring(index+1);
+                                        changed = true;
+                                    }
+                                    result.append(pathArray[i]);
+                                }
+                                mainSection.removeAttribute(classPathAttr);
+                                mainSection.addAttributeAndCheck(new org.apache.tools.ant.taskdefs.Manifest.Attribute(classPathAttr, result.toString()));
+                                var tgt = project.getProperty("manifest.file.temp.new");
+                                var tgf = new java.io.File(tgt);
+                                try {
+                                    var fos = new java.io.FileOutputStream(tgf);
+                                    try {
+                                        var osw = new java.io.OutputStreamWriter(fos, UTF_8);
+                                        try {
+                                            var manifestOut = new java.io.PrintWriter(osw);
+                                            manifest.write(manifestOut);
+                                            manifestOut.close();
+                                        } finally {
+                                            osw.close();
+                                        }
+                                    } finally {
+                                        fos.close();
+                                    }
+                                } catch(e) {
+                                    println("Warning: problem storing rebased manifest file.");
+                                }
+                            }
+                        }
+                    }
+                ]]>
+            </script>
+            <antcall target="-move-new-manifest-if-exists">
+                <param name="move.file.from" value="${manifest.file.temp.new}"/>
+                <param name="move.file.to" value="${manifest.file.temp}"/>
+            </antcall>
+            <zip destfile="@{jarfile}" basedir="${tmpdir}" update="true"/>
+            <delete dir="${tmpdir}" quiet="true"/>
+        </sequential>
+    </macrodef>
+    
+    <target name="-new-temp-mainfest-existence">
+        <condition property="new-temp-manifest-exists">
+            <available file="${move.file.from}"/>
+        </condition>
+        <echo message="new-temp-manifest-exists = ${new-temp-manifest-exists}" level="verbose"/>
+    </target>
+    
+    <target name="-move-new-manifest-if-exists" depends="-new-temp-mainfest-existence" if="new-temp-manifest-exists">
+        <move file="${move.file.from}" tofile="${move.file.to}" failonerror="false"/>
+    </target>
+    
+    <target name="-rebase-libs-macro-call">
+        <echo message="Rebase jarfile = ${jar.file.to.rebase}" level="verbose"/>
+        <rebase-lib jarfile="${jar.file.to.rebase}"/>
+    </target>
+    
+    <!-- Note: target "-rebase-libs" is referenced from NB 7.1 build-impl.xml -->
+    <target name="-rebase-libs" depends="-check-project, -jfx-copylibs" if="rebase-lib-jars">
+        <property name="pp_rebase_dir" value="${basedir}${file.separator}${dist.dir}${file.separator}lib"/>
+        <property name="pp_rebase_fs" value="*.jar"/>
+        <script language="javascript">
+            <![CDATA[
+                var dir = project.getProperty("pp_rebase_dir");
+                var fDir = new java.io.File(dir);
+                if( fDir.exists() ) {
+                    var callTask = project.createTask("antcall");
+                    callTask.setTarget("-rebase-libs-macro-call");
+                    var param = callTask.createParam();
+                    param.setName("jar.file.to.rebase");
+                    var includes = project.getProperty("pp_rebase_fs");
+                    var fs = project.createDataType("fileset");
+                    fs.setDir( fDir );
+                    fs.setIncludes(includes);
+                    var ds = fs.getDirectoryScanner(project);
+                    var srcFiles = ds.getIncludedFiles();
+                    for (i=0; i<srcFiles.length; i++) {
+                        param.setValue(dir + "${file.separator}" + srcFiles[i]);
+                        callTask.perform();
+                    }
+                }
+            ]]>
+        </script>
+    </target>
+
+
+    <!-- Main Deployment Target -->
+
+    <!-- Note: target "jfx-deployment" is referenced from NB 7.1 build-impl.xml -->
+    <target name="jfx-deployment" depends="-check-jfx-deployment,-check-project,-icon-warning,
+        -set-dimensions,-reset-dimensions,-set-update-mode-background,-set-update-mode-eager,
+        -set-permissions-elevated,-reset-permissions-elevated,
+        -copy-external-preloader-jar,-set-binary-css,-unset-binary-css,-copy-binary-css,
+        -deploy-app-sign-nopreloader-notemplate,
+        -deploy-app-sign-preloader-notemplate,
+        -deploy-app-sign-nopreloader-template,
+        -deploy-app-sign-preloader-template,
+        -deploy-app-sign-nopreloader-notemplate-swing,
+        -deploy-app-sign-nopreloader-template-swing,
+        -deploy-app-nosign-nopreloader-notemplate,
+        -deploy-app-nosign-preloader-notemplate,
+        -deploy-app-nosign-nopreloader-template,
+        -deploy-app-nosign-preloader-template,
+        -deploy-app-nosign-nopreloader-notemplate-swing,
+        -deploy-app-nosign-nopreloader-template-swing"
+        if="jfx-deployment-available">
+    </target>
+
+
+    <!-- Security / Signing -->
+    
+    <target name="-unavailable-signjars-task" depends="-check-jfx-deployment" unless="jfx-deployment-available">
+        <echo message="Warning: Task required to sign JAR file is missing, check the availability of JavaFX 2.0 deployment tasks. JAR files will not be signed."/>
+    </target>
+
+    <target name="-security-props-check">
+        <condition property="javafx.signed.true">
+            <istrue value="${javafx.signing.enabled}"/>
+        </condition>
+    </target>
+
+    <target name="-check-signing-possible" depends="-security-props-check,-check-jfx-deployment,-unavailable-signjars-task">
+        <condition property="javafx.signed.true+signjars.task.available">
+            <and>
+                <isset property="javafx.signed.true"/>
+                <isset property="jfx-deployment-available"/>
+            </and>
+        </condition>
+    </target>
+    
+    <target name="-javafx-init-keystore" depends="-check-signing-possible,-javafx-init-signing,-javafx-init-keystore1,-javafx-init-keystore2,-check-keystore-exists" 
+            if="javafx.signed.true+signjars.task.available" unless="javafx.signjar.keystore.exists">
+        <property name="javafx.signjar.vendor" value="CN=${application.vendor}"/>
+        <echo message="Going to create default keystore in ${javafx.signjar.keystore}"/>
+        <genkey dname="${javafx.signjar.vendor}" alias="${javafx.signjar.alias}" keystore="${javafx.signjar.keystore}"
+            storepass="${javafx.signjar.storepass}" keypass="${javafx.signjar.keypass}"/>
+    </target>
+    
+    <target name="-check-keystore-exists">
+        <available property="javafx.signjar.keystore.exists" file="${javafx.signjar.keystore}"/>
+    </target>
+
+    <target name="-javafx-init-signing">
+        <condition property="generated.key.signing">
+            <equals arg1="${javafx.signing.type}" arg2="self" trim="true"/>
+        </condition>
+    </target>
+
+    <target name="-javafx-init-keystore1" depends="-javafx-init-signing" if="generated.key.signing">
+        <property name="javafx.signjar.keystore" value="${basedir}${file.separator}build${file.separator}nb-jfx.jks" />
+        <property name="javafx.signjar.storepass" value="storepass"/>
+        <property name="javafx.signjar.keypass" value="keypass"/>
+        <property name="javafx.signjar.alias" value="nb-jfx"/>
+    </target>
+
+    <target name="-javafx-init-keystore2" depends="-javafx-init-signing" unless="generated.key.signing">
+        <property name="javafx.signjar.keystore" value="${javafx.signing.keystore}" />
+        <property name="javafx.signjar.storepass" value="${javafx.signing.keystore.password}"/>
+        <property name="javafx.signjar.keypass" value="${javafx.signing.keyalias.password}"/>
+        <property name="javafx.signjar.alias" value="${javafx.signing.keyalias}"/>
+    </target>
+
+    
+    <!-- Project Deployment Macros -->
+
+    <macrodef name="deploy-defines">
+        <sequential>
+            <basename property="jfx.deployment.jar" file="${dist.jar}"/>
+            <property name="jfx.deployment.dir" location="${dist.dir}"/>
+        </sequential>
+    </macrodef>
+
+    <macrodef name="deploy-preprocess">
+        <sequential>
+            <delete includeEmptyDirs="true" quiet="true">
+                <fileset dir="${jfx.deployment.dir}${file.separator}lib">
+                    <exclude name="**${file.separator}*.jar"/>
+                </fileset>
+            </delete>
+        </sequential>
+    </macrodef>
+
+    <!-- fx:jar scripted call enables passing of arbitrarily long list of params and fx-version dependent behavior -->
+    <macrodef name="deploy-jar">
+        <sequential>
+            <antcall target="-pre-jfx-jar"/>
+            <echo message="javafx.ant.classpath = ${javafx.ant.classpath}" level="verbose"/>
+            <typedef name="fx_jar" classname="com.sun.javafx.tools.ant.FXJar" classpath="${javafx.ant.classpath}"/>
+            <echo message="Launching &lt;fx:jar&gt; task from ${ant-javafx.jar.location}" level="info"/>
+            <property name="pp_jar_destfile" value="${jfx.deployment.dir}${file.separator}${jfx.deployment.jar}"/>
+            <property name="pp_jar_buildclasses" value="${basedir}${file.separator}${build.classes.dir}"/>
+            <property name="pp_jar_cssbss" value="**${file.separator}*.${css-exclude-ext}"/>
+            <property name="pp_jar_dir" value="${jfx.deployment.dir}"/>
+            <property name="pp_jar_fs1" value="lib${file.separator}${javafx.preloader.jar.filename}"/>
+            <property name="pp_jar_fs2" value="lib${file.separator}*.jar"/>
+            <echo message="deploy_jar: pp_jar_destfile = ${pp_jar_destfile}" level="verbose"/>
+            <echo message="deploy_jar: pp_jar_buildclasses = ${pp_jar_buildclasses}" level="verbose"/>
+            <echo message="deploy_jar: pp_jar_cssbss = ${pp_jar_cssbss}" level="verbose"/>
+            <echo message="deploy_jar: pp_jar_dir = ${pp_jar_dir}" level="verbose"/>
+            <echo message="deploy_jar: pp_jar_fs1 = ${pp_jar_fs1}" level="verbose"/>
+            <echo message="deploy_jar: pp_jar_fs2 = ${pp_jar_fs2}" level="verbose"/>
+            <script language="javascript">
+                <![CDATA[
+                    var S = java.io.File.separator;
+                    var JFXPAR = "javafx.param";
+                    var JFXPARN = "name";
+                    var JFXPARV = "value";
+                    var JFXLAZY = "download.mode.lazy.jar";
+                    var withpreloader = project.getProperty("app-with-preloader");
+                    var fx_ant_api_1_1 = project.getProperty("have-fx-ant-api-1.1");
+
+                    // get jars with lazy download mode property set
+                    function getLazyJars() {
+                        var jars = new Array();
+                        var keys = project.getProperties().keys();
+                        while(keys.hasMoreElements()) {
+                            var pn = keys.nextElement();
+                            if(pn.substr(0,JFXLAZY.length) == JFXLAZY) {
+                                var fname = pn.substring(JFXLAZY.length+1);
+                                jars.push(fname);
+                            }
+                        }
+                        return jars.length > 0 ? jars : null;
+                    }
+                    // set download mode of dependent libraries
+                    function setDownloadMode(fsEager, fsLazy, jars) {
+                        for(i = 0; i < jars.length; i++) {
+                            fsEager.setExcludes("lib" + S + jars[i]);
+                            fsLazy.setIncludes("lib" + S + jars[i]);
+                        }
+                    }
+                    
+                    // fx:jar
+                    var jar = project.createTask("fx_jar");
+                    jar.setProject(project);
+                    var destfile = project.getProperty("pp_jar_destfile");
+                    jar.setDestfile(destfile);
+
+                    // fx:application
+                    var app = jar.createApplication();
+                    app.setProject(project);
+                    var title = project.getProperty("application.title");
+                    var mainclass = project.getProperty("javafx.main.class");
+                    var fallback = project.getProperty("javafx.fallback.class");
+                    app.setName(title);
+                    app.setMainClass(mainclass);
+                    app.setFallbackClass(fallback);
+                    if(withpreloader == "true") {
+                        preloaderclass = project.getProperty("javafx.preloader.class");
+                        app.setPreloaderClass(preloaderclass);
+                    }
+                    // fx:param, fx:argument
+                    var keys = project.getProperties().keys();
+                    while(keys.hasMoreElements()) {
+                        var pn = keys.nextElement();
+                        if(pn.substr(0,JFXPAR.length) == JFXPAR && pn.indexOf(JFXPARN) == (pn.length()-JFXPARN.length)) {
+                            var propn = project.getProperty(pn);
+                            if(propn != null && propn.length() > 0) {
+                                var pv = pn.substr(0,pn.indexOf(JFXPARN)) + JFXPARV;
+                                var propv = project.getProperty(pv);
+                                if(propv != null && propv.length() > 0) {
+                                    var par = app.createParam();
+                                    par.setName(propn);
+                                    par.setValue(propv);
+                                } else {
+                                    if(fx_ant_api_1_1 == "true") {
+                                        var arg = app.createArgument();
+                                        arg.addText(propn);
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    
+                    // fx:resources
+                    var res = jar.createResources();
+                    res.setProject(project);
+                    var pdir = project.getProperty("pp_jar_dir");
+                    if(withpreloader == "true") {
+                        var f1 = res.createFileSet();
+                        f1.setProject(project);
+                        f1.setDir(new java.io.File(pdir));
+                        var i1 = project.getProperty("pp_jar_fs1");
+                        f1.setIncludes(i1);
+                        f1.setRequiredFor("preloader");
+                        var f2 = res.createFileSet();
+                        f2.setProject(project);
+                        f2.setDir(new java.io.File(pdir));
+                        var i2a = project.getProperty("jfx.deployment.jar");
+                        var i2b = project.getProperty("pp_jar_fs2");
+                        var e2c = project.getProperty("pp_jar_fs1");
+                        f2.setIncludes(i2a);
+                        f2.setIncludes(i2b);
+                        f2.setExcludes(e2c);
+                        f2.setRequiredFor("startup");
+                        var lazyjars = getLazyJars();
+                        if(lazyjars != null) {
+                            var f3 = res.createFileSet();
+                            f3.setProject(project);
+                            f3.setDir(new java.io.File(pdir));
+                            f3.setRequiredFor("runtime");
+                            setDownloadMode(f2,f3,lazyjars);
+                        }
+                    } else {
+                        var fn = res.createFileSet();
+                        fn.setProject(project);
+                        fn.setDir(new java.io.File(pdir));
+                        var ia = project.getProperty("jfx.deployment.jar");
+                        var ib = project.getProperty("pp_jar_fs2");
+                        fn.setIncludes(ia);
+                        fn.setIncludes(ib);
+                        fn.setRequiredFor("startup");
+                        var lazyjars = getLazyJars();
+                        if(lazyjars != null) {
+                            var fn2 = res.createFileSet();
+                            fn2.setProject(project);
+                            fn2.setDir(new java.io.File(pdir));
+                            fn2.setRequiredFor("runtime");
+                            setDownloadMode(fn,fn2,lazyjars);
+                        }
+                    }
+                    
+                    // fileset to exclude *.css or *.bss
+                    var fs = jar.createFileSet();
+                    fs.setProject(project);
+                    var buildcls = project.getProperty("pp_jar_buildclasses");
+                    var exc = project.getProperty("pp_jar_cssbss");
+                    fs.setDir(new java.io.File(buildcls));
+                    fs.setExcludes(exc);
+                    
+                    // manifest
+                    var man = jar.createManifest();
+                    var a1val = project.getProperty("application.vendor");
+                    var a1 = new org.apache.tools.ant.taskdefs.Manifest.Attribute();
+                    a1.setName("Implementation-Vendor");
+                    a1.setValue(a1val);
+                    man.addConfiguredAttribute(a1);
+                    var a2val = project.getProperty("application.title");
+                    var a2 = new org.apache.tools.ant.taskdefs.Manifest.Attribute();
+                    a2.setName("Implementation-Title");
+                    a2.setValue(a2val);
+                    man.addConfiguredAttribute(a2);
+                    var a3 = new org.apache.tools.ant.taskdefs.Manifest.Attribute();
+                    a3.setName("Implementation-Version");
+                    a3.setValue("1.0");
+                    man.addConfiguredAttribute(a3);
+                    
+                    jar.perform();
+                ]]>
+            </script>
+            <antcall target="-post-jfx-jar"/>
+        </sequential>
+    </macrodef>
+
+    <macrodef name="deploy-sign">
+        <sequential>
+            <echo message="keystore=${javafx.signjar.keystore}" level="verbose"/>
+            <echo message="storepass=${javafx.signjar.storepass}" level="verbose"/>
+            <echo message="alias=${javafx.signjar.alias}" level="verbose"/>
+            <echo message="keypass=${javafx.signjar.keypass}" level="verbose"/>
+            <signjar keystore="${javafx.signjar.keystore}"
+                storepass="${javafx.signjar.storepass}"
+                alias="${javafx.signjar.alias}"
+                keypass="${javafx.signjar.keypass}">
+                <fileset dir="${jfx.deployment.dir}">
+                    <include name="${jfx.deployment.jar}"/>
+                    <include name="lib${file.separator}*.jar"/>
+                </fileset>
+            </signjar>
+        </sequential>
+    </macrodef>
+
+    <macrodef name="deploy-sign-preloader">
+        <sequential>
+            <echo message="keystore=${javafx.signjar.keystore}" level="verbose"/>
+            <echo message="storepass=${javafx.signjar.storepass}" level="verbose"/>
+            <echo message="alias=${javafx.signjar.alias}" level="verbose"/>
+            <echo message="keypass=${javafx.signjar.keypass}" level="verbose"/>
+            <signjar keystore="${javafx.signjar.keystore}"
+                storepass="${javafx.signjar.storepass}"
+                alias="${javafx.signjar.alias}"
+                keypass="${javafx.signjar.keypass}">
+                <fileset dir="${jfx.deployment.dir}">
+                    <include name="lib${file.separator}${javafx.preloader.jar.filename}"/>
+                </fileset>
+            </signjar>
+            <signjar keystore="${javafx.signjar.keystore}"
+                storepass="${javafx.signjar.storepass}"
+                alias="${javafx.signjar.alias}"
+                keypass="${javafx.signjar.keypass}">
+                <fileset dir="${jfx.deployment.dir}">
+                    <include name="${jfx.deployment.jar}"/>
+                    <include name="lib${file.separator}*.jar"/>
+                    <exclude name="lib${file.separator}${javafx.preloader.jar.filename}"/>
+                </fileset>
+            </signjar>
+        </sequential>
+    </macrodef>
+
+    <macrodef name="deploy-process-template">
+        <sequential>
+            <echo message="javafx.run.htmltemplate = ${javafx.run.htmltemplate}" level="verbose"/>
+            <pathconvert property="javafx.run.htmltemplate.processed">
+                <path path="${javafx.run.htmltemplate}"/>
+                <mapper>
+                     <chainedmapper>
+                          <flattenmapper/>
+                          <globmapper from="*" to="${jfx.deployment.dir}${file.separator}*" casesensitive="no"/>
+                     </chainedmapper>
+                </mapper>
+            </pathconvert>
+            <echo message="javafx.run.htmltemplate.processed = ${javafx.run.htmltemplate.processed}" level="verbose"/>
+        </sequential>
+    </macrodef>
+
+    <!-- fx:deploy scripted call enables passing of arbitrarily long lists of params, vmoptions and callbacks and fx-version dependent behavior -->
+    <macrodef name="deploy-deploy">
+        <sequential>
+            <antcall target="-pre-jfx-deploy"/>
+            <echo message="javafx.ant.classpath = ${javafx.ant.classpath}" level="verbose"/>
+            <typedef name="fx_deploy" classname="com.sun.javafx.tools.ant.DeployFXTask" classpath="${javafx.ant.classpath}"/>
+            <echo message="Launching &lt;fx:deploy&gt; task from ${ant-javafx.jar.location}" level="info"/>
+            <property name="pp_deploy_dir" value="${jfx.deployment.dir}"/>
+            <property name="pp_deploy_fs1" value="lib${file.separator}${javafx.preloader.jar.filename}"/>
+            <property name="pp_deploy_fs2" value="lib${file.separator}*.jar"/>
+            <echo message="deploy_deploy: pp_deploy_dir = ${pp_deploy_dir}" level="verbose"/>
+            <echo message="deploy_deploy: pp_deploy_fs1 = ${pp_deploy_fs1}" level="verbose"/>
+            <echo message="deploy_deploy: pp_deploy_fs2 = ${pp_deploy_fs2}" level="verbose"/>
+            <script language="javascript">
+                <![CDATA[
+                    function isTrue(prop) {
+                        return prop != null && 
+                           (prop.toLowerCase()=="true" || prop.toLowerCase()=="yes" || prop.toLowerCase()=="on");
+                    }                    
+                    var S = java.io.File.separator;
+                    var JFXPAR = "javafx.param";
+                    var JFXPARN = "name";
+                    var JFXPARV = "value";
+                    var JFXCALLB = "javafx.jscallback";
+                    var JFXLAZY = "download.mode.lazy.jar";
+                    var withpreloader = project.getProperty("app-with-preloader");
+                    var fx_ant_api_1_1 = project.getProperty("have-fx-ant-api-1.1");
+
+                    // get jars with lazy download mode property set
+                    function getLazyJars() {
+                        var jars = new Array();
+                        var keys = project.getProperties().keys();
+                        while(keys.hasMoreElements()) {
+                            var pn = keys.nextElement();
+                            if(pn.substr(0,JFXLAZY.length) == JFXLAZY) {
+                                var fname = pn.substring(JFXLAZY.length+1);
+                                jars.push(fname);
+                            }
+                        }
+                        return jars.length > 0 ? jars : null;
+                    }
+                    // set download mode of dependent libraries
+                    function setDownloadMode(fsEager, fsLazy, jars) {
+                        for(i = 0; i < jars.length; i++) {
+                            fsEager.setExcludes("lib" + S + jars[i]);
+                            fsLazy.setIncludes("lib" + S + jars[i]);
+                        }
+                    }
+                    
+                    // fx:deploy
+                    var deploy = project.createTask("fx_deploy");
+                    deploy.setProject(project);
+                    var width = project.getProperty("javafx.width");
+                    var height = project.getProperty("javafx.height");
+                    var outdir = project.getProperty("jfx.deployment.dir");
+                    var embedJNLP = project.getProperty("javafx.deploy.embedJNLP");
+                    var updatemode = project.getProperty("update-mode");
+                    var outfile = project.getProperty("application.title");
+                    var includeDT = project.getProperty("javafx.deploy.includeDT");
+                    var offline = project.getProperty("javafx.deploy.allowoffline");
+                    deploy.setWidth(width);
+                    deploy.setHeight(height);
+                    deploy.setOutdir(outdir);
+                    deploy.setEmbedJNLP(isTrue(embedJNLP));
+                    deploy.setUpdateMode(updatemode);
+                    deploy.setOutfile(outfile);
+                    deploy.setIncludeDT(isTrue(includeDT));
+                    if(offline != null) {
+                        if(fx_ant_api_1_1 == "true") {
+                            deploy.setOfflineAllowed(isTrue(offline));
+                        } else {
+                            println("Warning: offlineAllowed not supported by this version of JavaFX SDK deployment Ant task. Please upgrade JavaFX to 2.0.2 or higher.");
+                        }
+                    }
+
+                    // fx:application
+                    var app = deploy.createApplication();
+                    app.setProject(project);
+                    var title = project.getProperty("application.title");
+                    var mainclass = project.getProperty("javafx.main.class");
+                    var fallback = project.getProperty("javafx.fallback.class");
+                    app.setName(title);
+                    app.setMainClass(mainclass);
+                    app.setFallbackClass(fallback);
+                    if(withpreloader == "true") {
+                        preloaderclass = project.getProperty("javafx.preloader.class");
+                        app.setPreloaderClass(preloaderclass);
+                    }
+                    // fx:param, fx:argument
+                    var keys = project.getProperties().keys();
+                    while(keys.hasMoreElements()) {
+                        var pn = keys.nextElement();
+                        if(pn.substr(0,JFXPAR.length) == JFXPAR && pn.indexOf(JFXPARN) == (pn.length()-JFXPARN.length)) {
+                            var propn = project.getProperty(pn);
+                            if(propn != null && propn.length() > 0) {
+                                var pv = pn.substr(0,pn.indexOf(JFXPARN)) + JFXPARV;
+                                var propv = project.getProperty(pv);
+                                if(propv != null && propv.length() > 0) {
+                                    var par = app.createParam();
+                                    par.setName(propn);
+                                    par.setValue(propv);
+                                } else {
+                                    if(fx_ant_api_1_1 == "true") {
+                                        var arg = app.createArgument();
+                                        arg.addText(propn);
+                                    } else {
+                                        println("Warning: Unnamed parameters not supported by this version of JavaFX SDK deployment Ant tasks. Upgrade JavaFX to 2.0.2 or higher.");
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    
+                    // fx:resources
+                    var res = deploy.createResources();
+                    res.setProject(project);
+                    var deploydir = project.getProperty("pp_deploy_dir");
+                    if(withpreloader == "true") {
+                        var f1 = res.createFileSet();
+                        f1.setProject(project);
+                        f1.setDir(new java.io.File(deploydir));
+                        var i1 = project.getProperty("pp_deploy_fs1");
+                        f1.setIncludes(i1);
+                        f1.setRequiredFor("preloader");
+                        var f2 = res.createFileSet();
+                        f2.setProject(project);
+                        f2.setDir(new java.io.File(deploydir));
+                        var i2a = project.getProperty("jfx.deployment.jar");
+                        var i2b = project.getProperty("pp_deploy_fs2");
+                        var e2c = project.getProperty("pp_deploy_fs1");
+                        f2.setIncludes(i2a);
+                        f2.setIncludes(i2b);
+                        f2.setExcludes(e2c);
+                        f2.setRequiredFor("startup");
+                        var lazyjars = getLazyJars();
+                        if(lazyjars != null) {
+                            var f3 = res.createFileSet();
+                            f3.setProject(project);
+                            f3.setDir(new java.io.File(deploydir));
+                            f3.setRequiredFor("runtime");
+                            setDownloadMode(f2,f3,lazyjars);
+                        }
+                    } else {
+                        var fn = res.createFileSet();
+                        fn.setProject(project);
+                        fn.setDir(new java.io.File(deploydir));
+                        var ia = project.getProperty("jfx.deployment.jar");
+                        var ib = project.getProperty("pp_deploy_fs2");
+                        fn.setIncludes(ia);
+                        fn.setIncludes(ib);
+                        fn.setRequiredFor("startup");
+                        var lazyjars = getLazyJars();
+                        if(lazyjars != null) {
+                            var fn2 = res.createFileSet();
+                            fn2.setProject(project);
+                            fn2.setDir(new java.io.File(deploydir));
+                            fn2.setRequiredFor("runtime");
+                            setDownloadMode(fn,fn2,lazyjars);
+                        }
+                    }
+                    
+                    // fx:info
+                    var info = deploy.createInfo();
+                    info.setProject(project);
+                    var vendor = project.getProperty("application.vendor");
+                    info.setTitle(title); // title known from before
+                    info.setVendor(vendor);
+                    var icon = project.getProperty("javafx.deploy.icon");
+                    if(icon != null) {
+                        if(fx_ant_api_1_1 == "true") {
+                            var iicon = info.createIcon();
+                            iicon.setHref(icon);
+                        } else {
+                            println("Warning: Icon not supported by this version of JavaFX SDK deployment Ant task. Please upgrade JavaFX to 2.0.2 or higher.");
+                        }
+                    }
+                    
+                    // fx:permissions
+                    var perm = deploy.createPermissions();
+                    perm.setProject(project);
+                    var elev = project.getProperty("permissions.elevated");
+                    perm.setElevated(isTrue(elev));
+                    
+                    // fx:preferences
+                    var pref = deploy.createPreferences();
+                    pref.setProject(project);
+                    var scut = project.getProperty("javafx.deploy.adddesktopshortcut");
+                    var instp = project.getProperty("javafx.deploy.installpermanently");
+                    var smenu = project.getProperty("javafx.deploy.addstartmenushortcut");
+                    pref.setShortcut(isTrue(scut));
+                    pref.setInstall(isTrue(instp));
+                    pref.setMenu(isTrue(smenu));
+
+                    // fx:template
+                    var templ = project.getProperty("javafx.run.htmltemplate");
+                    var templp = project.getProperty("javafx.run.htmltemplate.processed");
+                    if(templ != null && templp != null && templ.length() > 0 && templp.length() > 0) {
+                        var temp = deploy.createTemplate();
+                        temp.setProject(project);
+                        temp.setFile(new java.io.File(templ));
+                        temp.setTofile(new java.io.File(templp));
+                    }
+
+                    // fx:platform
+                    var plat = deploy.createPlatform();
+                    plat.setProject(project);
+                    var jvmargs = project.getProperty("run.jvmargs");
+                    if(jvmargs != null && jvmargs.length() > 0) {
+                        var jvmargss = jvmargs.split(" ");
+                        for(i = 0; i < jvmargss.length; i++) {
+                            if(jvmargss[i] != null && jvmargss[i].length() > 0) {
+                                var vmarg = plat.createJvmarg();
+                                vmarg.setValue(jvmargss[i]);
+                            }
+                        }
+                    }
+                    
+                    // fx:callbacks
+                    var callbs = deploy.createCallbacks();
+                    callbs.setProject(project);
+                    var keys = project.getProperties().keys();
+                    while(keys.hasMoreElements()) {
+                        var pn = keys.nextElement();
+                        if(pn.substr(0,JFXCALLB.length) == JFXCALLB) {
+                            var prop = project.getProperty(pn);
+                            if(prop != null && prop.length() > 0) {
+                                var cname = pn.substring(JFXCALLB.length+1);
+                                var cb = callbs.createCallback();
+                                cb.setProject(project);
+                                cb.setName(cname);
+                                cb.addText(prop);
+                            }
+                        }
+                    }
+                    
+                    deploy.perform();
+                ]]>
+            </script>
+            <antcall target="-post-jfx-deploy"/>
+        </sequential>
+    </macrodef>
+
+    <!-- JavaFX 2.0+ deploy task as yet can not generate pre-FX jnlp which is needed for FX-in-Swing projects-->
+    <macrodef name="deploy-deploy-swing">
+        <sequential>
+            <antcall target="-pre-jfx-deploy"/>
+            <local name="permissions-elevated-token"/>
+            <condition property="permissions-elevated-token" value="${line.separator}    &lt;security&gt;${line.separator}        &lt;all-permissions/&gt;${line.separator}    &lt;/security&gt;" else="">
+                <isset property="permissions-elevated"/>
+            </condition>
+            <local name="offline-allowed-token"/>
+            <condition property="offline-allowed-token" value="${line.separator}        &lt;offline-allowed/&gt;" else="">
+                <isset property="offline-allowed"/>
+            </condition>
+            <local name="update-mode-background-token"/>
+            <condition property="update-mode-background-token" value="background" else="always">
+                <isset property="update-mode-background"/>
+            </condition>
+            <local name="html-template-processed-available"/>
+            <condition property="html-template-processed-available">
+                <and>
+                    <isset property="javafx.run.htmltemplate.processed"/>
+                    <not>
+                        <equals arg1="${javafx.run.htmltemplate.processed}" arg2=""/>
+                    </not>
+                </and>
+            </condition>
+            <local name="javafx.deploy.icon.basename"/>
+            <basename property="javafx.deploy.icon.basename" file="${javafx.deploy.icon}"/>
+            <local name="local-icon-filename-available"/>
+            <condition property="local-icon-filename-available">
+                <and>
+                    <isset property="icon-available"/>
+                    <isset property="javafx.deploy.icon.basename"/>
+                    <not><equals arg1="${javafx.deploy.icon.basename}" arg2=""/></not>
+                    <not><contains string="${javafx.deploy.icon.basename}" substring="$${javafx" casesensitive="false"/></not>
+                    <not><contains string="${javafx.deploy.icon}" substring="http:" casesensitive="false"/></not>
+                </and>
+            </condition>
+            <local name="icon-token"/>
+            <condition property="icon-token" value="${line.separator}        &lt;icon href=&quot;${javafx.deploy.icon.basename}&quot; kind=&quot;default&quot;/&gt;">
+                <isset property="local-icon-filename-available"/>
+            </condition>
+            <condition property="icon-token" value="${line.separator}        &lt;icon href=&quot;${javafx.deploy.icon}&quot; kind=&quot;default&quot;/&gt;" else="">
+                <isset property="icon-available"/>
+            </condition>
+            <basename property="dist.filename" file="${dist.jar}" suffix=".jar"/>
+            <length file="${dist.jar}" property="dist.jar.size" />
+            <local name="vmargs-token"/>
+            <condition property="vmargs-token" value="java-vm-args=&quot;${run.jvmargs}&quot; " else="">
+                <isset property="vmargs-available"/>
+            </condition>
+            <local name="applet-params-token"/>
+            <local name="application-args-token"/>
+            <script language="javascript">
+                <![CDATA[
+                    var JFXPAR = "javafx.param";
+                    var JFXPARN = "name";
+                    var JFXPARV = "value";
+
+                    var params = "";
+                    var args = "";
+                    var keys = project.getProperties().keys();
+                    while(keys.hasMoreElements()) {
+                        var pn = keys.nextElement();
+                        if(pn.substr(0,JFXPAR.length) == JFXPAR && pn.indexOf(JFXPARN) == (pn.length()-JFXPARN.length)) {
+                            var propn = project.getProperty(pn);
+                            if(propn != null && propn.length() > 0) {
+                                var pv = pn.substr(0,pn.indexOf(JFXPARN)) + JFXPARV;
+                                var propv = project.getProperty(pv);
+                                if(propv != null && propv.length() > 0) {
+                                    params += "\n        <param name=\"" + propn + "\" value=\"" + propv + "\"/>";
+                                    args += "\n        <argument>" + propn + "=" + propv + "</argument>";
+                                } else {
+                                    params += "\n        <param name=\"" + propn + "\" value=\"\"/>";
+                                    args += "\n        <argument>" + propn + "</argument>";
+                                }
+                            }
+                        }
+                    }
+                    project.setProperty("applet-params-token", params);
+                    project.setProperty("application-args-token", args);
+                ]]>
+            </script>
+            <filterchain id="jnlp.template.filter">
+                <replacetokens>
+                    <token key="NAME" value="${dist.filename}"/>
+                    <token key="MAINCLASS" value="${main.class}"/>
+                    <token key="FILESIZE" value="${dist.jar.size}"/>
+                    <token key="VENDOR" value="${application.vendor}"/>
+                    <token key="TITLE" value="${application.title}"/>
+                    <token key="WIDTH" value="${javafx.run.width}"/>
+                    <token key="HEIGHT" value="${javafx.run.height}"/>
+                    <token key="PERMISSIONS" value="${permissions-elevated-token}"/>
+                    <token key="OFFLINE" value="${offline-allowed-token}"/>
+                    <token key="UPDATEMODE" value="${update-mode-background-token}"/>
+                    <token key="ICON" value="${icon-token}"/>
+                    <token key="VMARGS" value="${vmargs-token}"/>
+                    <token key="PARAMETERS" value="${applet-params-token}"/>
+                    <token key="ARGUMENTS" value="${application-args-token}"/>
+                </replacetokens>
+            </filterchain>
+            <copy file="${basedir}${file.separator}nbproject${file.separator}templates${file.separator}FXSwingTemplateApplication.jnlp" 
+                    tofile="${dist.dir}${file.separator}${dist.filename}_application.jnlp" >
+                    <filterchain refid="jnlp.template.filter"/>
+            </copy>        
+            <copy file="${basedir}${file.separator}nbproject${file.separator}templates${file.separator}FXSwingTemplateApplet.jnlp" 
+                    tofile="${dist.dir}${file.separator}${dist.filename}_applet.jnlp" >
+                    <filterchain refid="jnlp.template.filter"/>
+            </copy>        
+            <copy file="${basedir}${file.separator}nbproject${file.separator}templates${file.separator}FXSwingTemplate.html" 
+                    tofile="${dist.dir}${file.separator}${dist.filename}.html" >
+                    <filterchain refid="jnlp.template.filter"/>
+            </copy>
+            <script language="javascript">
+                <![CDATA[
+                    var PREF = "file:";
+                    var doCopyIcon = project.getProperty("local-icon-filename-available");
+                    if(doCopyIcon != null) {
+                        var iconProp = project.getProperty("javafx.deploy.icon");
+                        if(iconProp.indexOf(PREF) == 0) {
+                            iconProp = iconProp.slice(PREF.length);
+                        }
+                        while(iconProp.charAt(0) == "/") {
+                            iconProp = iconProp.slice(1);
+                        }
+                        var S = java.io.File.separator;
+                        var baseDir = project.getProperty("basedir");
+                        var distDir = project.getProperty("dist.dir");
+                        var copyTask = project.createTask("copy");
+                        var source = new java.io.File(iconProp);
+                        var target = new java.io.File(baseDir + S + distDir);
+                        copyTask.setFile(source);
+                        copyTask.setTodir(target);
+                        copyTask.setFlatten(true);
+                        copyTask.setFailOnError(false);
+                        copyTask.perform();
+                    }
+                    var doCopyHTMLFrom = project.getProperty("html-template-available");
+                    var doCopyHTMLTo = project.getProperty("html-template-processed-available");
+                    if(doCopyHTMLFrom != null && doCopyHTMLTo != null) {
+                        var htmlFrom = project.getProperty("javafx.run.htmltemplate");
+                        if(htmlFrom.indexOf(PREF) == 0) {
+                            htmlFrom = htmlFrom.slice(PREF.length);
+                        }
+                        while(htmlFrom.charAt(0) == "/") {
+                            htmlFrom = htmlFrom.slice(1);
+                        }
+                        var htmlTo = project.getProperty("javafx.run.htmltemplate.processed");
+                        if(htmlTo.indexOf(PREF) == 0) {
+                            htmlTo = htmlTo.slice(PREF.length);
+                        }
+                        while(htmlTo.charAt(0) == "/") {
+                            htmlTo = htmlTo.slice(1);
+                        }
+                        var copyTask = project.createTask("copy");
+                        var source = new java.io.File(htmlFrom);
+                        var target = new java.io.File(htmlTo);
+                        copyTask.setFile(source);
+                        copyTask.setTofile(target);
+                        copyTask.setFailOnError(false);
+                        copyTask.perform();
+                    }
+                ]]>
+            </script>
+            <antcall target="-post-jfx-deploy"/>
+        </sequential>
+    </macrodef>
+
+
+    <!-- Project Deployment Targets -->
+
+    <target name="-check-sign" depends="-check-project,-javafx-init-keystore" if="javafx.signed.true+signjars.task.available">
+        <condition property="sign-nopreloader-notemplate">
+            <and>
+                <isset property="app-without-preloader"/>
+                <not><isset property="html-template-available"/></not>
+                <not><isset property="fx-in-swing-app"/></not>
+            </and>
+        </condition>
+        <condition property="sign-preloader-notemplate">
+            <and>
+                <isset property="app-with-preloader"/>
+                <not><isset property="html-template-available"/></not>
+                <not><isset property="fx-in-swing-app"/></not>
+            </and>
+        </condition>
+        <condition property="sign-nopreloader-template">
+            <and>
+                <isset property="app-without-preloader"/>
+                <isset property="html-template-available"/>
+                <not><isset property="fx-in-swing-app"/></not>
+            </and>
+        </condition>
+        <condition property="sign-preloader-template">
+            <and>
+                <isset property="app-with-preloader"/>
+                <isset property="html-template-available"/>
+                <not><isset property="fx-in-swing-app"/></not>
+            </and>
+        </condition>
+        <condition property="sign-nopreloader-notemplate-swing">
+            <and>
+                <isset property="app-without-preloader"/>
+                <not><isset property="html-template-available"/></not>
+                <isset property="fx-in-swing-app"/>
+            </and>
+        </condition>
+        <condition property="sign-nopreloader-template-swing">
+            <and>
+                <isset property="app-without-preloader"/>
+                <isset property="html-template-available"/>
+                <isset property="fx-in-swing-app"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-check-nosign" depends="-check-project">
+        <condition property="nosign-nopreloader-notemplate">
+            <and>
+                <isset property="app-without-preloader"/>
+                <not><isset property="html-template-available"/></not>
+                <not><isset property="javafx.signed.true"/></not>
+                <not><isset property="fx-in-swing-app"/></not>
+            </and>
+        </condition>
+        <condition property="nosign-preloader-notemplate">
+            <and>
+                <isset property="app-with-preloader"/>
+                <not><isset property="html-template-available"/></not>
+                <not><isset property="javafx.signed.true"/></not>
+                <not><isset property="fx-in-swing-app"/></not>
+            </and>
+        </condition>
+        <condition property="nosign-nopreloader-template">
+            <and>
+                <isset property="app-without-preloader"/>
+                <isset property="html-template-available"/>
+                <not><isset property="javafx.signed.true"/></not>
+                <not><isset property="fx-in-swing-app"/></not>
+            </and>
+        </condition>
+        <condition property="nosign-preloader-template">
+            <and>
+                <isset property="app-with-preloader"/>
+                <isset property="html-template-available"/>
+                <not><isset property="javafx.signed.true"/></not>
+                <not><isset property="fx-in-swing-app"/></not>
+            </and>
+        </condition>
+        <condition property="nosign-nopreloader-notemplate-swing">
+            <and>
+                <isset property="app-without-preloader"/>
+                <not><isset property="html-template-available"/></not>
+                <not><isset property="javafx.signed.true"/></not>
+                <isset property="fx-in-swing-app"/>
+            </and>
+        </condition>
+        <condition property="nosign-nopreloader-template-swing">
+            <and>
+                <isset property="app-without-preloader"/>
+                <isset property="html-template-available"/>
+                <not><isset property="javafx.signed.true"/></not>
+                <isset property="fx-in-swing-app"/>
+            </and>
+        </condition>
+    </target>
+
+
+    <!-- WITH SIGNING -->
+
+    <!-- project without preloader -->
+    <!-- no html template -->
+    <target name="-deploy-app-sign-nopreloader-notemplate" depends="-check-sign" if="sign-nopreloader-notemplate" unless="preloader-app">
+        <echo message="-deploy-app-sign-nopreloader-notemplate" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <deploy-jar/>
+        <deploy-sign/>
+        <deploy-deploy/>
+    </target>
+
+    <!-- project with preloader -->
+    <!-- no html template -->
+    <target name="-deploy-app-sign-preloader-notemplate" depends="-check-sign" if="sign-preloader-notemplate" unless="preloader-app">
+        <echo message="-deploy-app-sign-preloader-notemplate" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <deploy-jar/>
+        <deploy-sign-preloader/>
+        <deploy-deploy/>
+    </target>
+
+    <!-- project without preloader -->
+    <!-- html template -->
+    <target name="-deploy-app-sign-nopreloader-template" depends="-check-sign" if="sign-nopreloader-template" unless="preloader-app">
+        <echo message="-deploy-app-sign-nopreloader-template" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <deploy-jar/>
+        <deploy-sign/>
+        <deploy-process-template/>
+        <deploy-deploy/>
+    </target>
+
+    <!-- project with preloader -->
+    <!-- html template -->
+    <target name="-deploy-app-sign-preloader-template" depends="-check-sign" if="sign-preloader-template" unless="preloader-app">
+        <echo message="-deploy-app-sign-preloader-template" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <deploy-jar/>
+        <deploy-sign-preloader/>
+        <deploy-process-template/>
+        <deploy-deploy/>
+    </target>
+
+    <!-- project without preloader -->
+    <!-- no html template -->
+    <!-- FX in Swing app -->
+    <target name="-deploy-app-sign-nopreloader-notemplate-swing" depends="-check-sign" if="sign-nopreloader-notemplate-swing" unless="preloader-app-no-workaround">
+        <echo message="-deploy-app-sign-nopreloader-notemplate-swing" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <deploy-jar/>
+        <deploy-sign/>
+        <deploy-deploy-swing/>
+    </target>
+
+    <!-- project without preloader -->
+    <!-- html template -->
+    <!-- FX in Swing app -->
+    <target name="-deploy-app-sign-nopreloader-template-swing" depends="-check-sign" if="sign-nopreloader-template-swing" unless="preloader-app-no-workaround">
+        <echo message="-deploy-app-sign-nopreloader-template-swing" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <deploy-jar/>
+        <deploy-sign/>
+        <deploy-process-template/>
+        <deploy-deploy-swing/>
+    </target>
+
+
+    <!-- NO SIGNING -->
+
+    <!-- project without preloader -->
+    <!-- no html template -->
+    <target name="-deploy-app-nosign-nopreloader-notemplate" depends="-check-nosign" if="nosign-nopreloader-notemplate" unless="preloader-app">
+        <echo message="-deploy-app-nosign-nopreloader-notemplate" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <deploy-jar/>
+        <deploy-deploy/>
+    </target>
+
+    <!-- project with preloader -->
+    <!-- no html template -->
+    <target name="-deploy-app-nosign-preloader-notemplate" depends="-check-nosign" if="nosign-preloader-notemplate" unless="preloader-app">
+        <echo message="-deploy-app-nosign-preloader-notemplate" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <deploy-jar/>
+        <deploy-deploy/>
+    </target>
+
+    <!-- project without preloader -->
+    <!-- html template -->
+    <target name="-deploy-app-nosign-nopreloader-template" depends="-check-nosign" if="nosign-nopreloader-template" unless="preloader-app">
+        <echo message="-deploy-app-nosign-nopreloader-template" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <deploy-jar/>
+        <deploy-process-template/>
+        <deploy-deploy/>
+    </target>
+
+    <!-- project with preloader -->
+    <!-- html template -->
+    <target name="-deploy-app-nosign-preloader-template" depends="-check-nosign" if="nosign-preloader-template" unless="preloader-app">
+        <echo message="-deploy-app-nosign-preloader-template" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <deploy-jar/>
+        <deploy-process-template/>
+        <deploy-deploy/>
+    </target>
+
+    <!-- project without preloader -->
+    <!-- no html template -->
+    <!-- FX in Swing app -->
+    <target name="-deploy-app-nosign-nopreloader-notemplate-swing" depends="-check-nosign" if="nosign-nopreloader-notemplate-swing" unless="preloader-app-no-workaround">
+        <echo message="-deploy-app-nosign-nopreloader-notemplate-swing" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <deploy-jar/>
+        <deploy-deploy-swing/>
+    </target>
+
+    <!-- project without preloader -->
+    <!-- html template -->
+    <!-- FX in Swing app -->
+    <target name="-deploy-app-nosign-nopreloader-template-swing" depends="-check-nosign" if="nosign-nopreloader-template-swing" unless="preloader-app-no-workaround">
+        <echo message="-deploy-app-nosign-nopreloader-template-swing" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <deploy-jar/>
+        <deploy-process-template/>
+        <deploy-deploy-swing/>
+    </target>
+
+
+    <!-- Project Run Targets -->
+
+    <target name="-warn-of-preloader" depends="-check-project" if="preloader-app-no-workaround">
+        <fail message="Error:${line.separator}JavaFX 2 Preloader Project can not be executed directly.${line.separator}Please execute instead a JavaFX Application that uses the Preloader."/>
+    </target>
+    
+
+    <!-- Running/Debugging/Profiling Standalone -->
+
+    <target name="jfxsa-run" depends="-check-jfx-runtime,-warn-of-preloader,run"/>
+
+    <target name="jfxsa-debug" depends="jar,-check-jfx-runtime,-warn-of-preloader,debug"/>
+    
+    <target name="jfxsa-profile" depends="-check-jfx-runtime,-warn-of-preloader,profile"/>
+
+
+    <!-- Shared Debugging init -->
+
+    <target name="-init-debug-args">
+        <property name="version-output" value="java version &quot;${ant.java.version}"/>
+        <condition property="have-jdk-older-than-1.4">
+            <or>
+                <contains string="${version-output}" substring="java version &quot;1.0"/>
+                <contains string="${version-output}" substring="java version &quot;1.1"/>
+                <contains string="${version-output}" substring="java version &quot;1.2"/>
+                <contains string="${version-output}" substring="java version &quot;1.3"/>
+            </or>
+        </condition>
+        <condition else="-Xdebug" property="debug-args-line" value="-Xdebug -Xnoagent -Djava.compiler=none">
+            <istrue value="${have-jdk-older-than-1.4}"/>
+        </condition>
+        <condition else="dt_socket" property="debug-transport-by-os" value="dt_shmem">
+            <os family="windows"/>
+        </condition>
+        <condition else="${debug-transport-by-os}" property="debug-transport" value="${debug.transport}">
+            <isset property="debug.transport"/>
+        </condition>
+    </target>
+
+
+    <!-- Running/Debugging/Profiling as WebStart -->
+    
+    <target name="-check-jnlp-file-fx" depends="-check-project" unless="fx-in-swing-app">
+        <basename property="jfx.deployment.base" file="${jfx.deployment.jar}" suffix=".jar"/>
+        <property name="jfx.deployment.jnlp" location="${jfx.deployment.dir}${file.separator}${jfx.deployment.base}.jnlp"/>
+    </target>
+    <target name="-check-jnlp-file-swing" depends="-check-project" if="fx-in-swing-app">
+        <basename property="jfx.deployment.base" file="${jfx.deployment.jar}" suffix=".jar"/>
+        <property name="jfx.deployment.jnlp" location="${jfx.deployment.dir}${file.separator}${jfx.deployment.base}_application.jnlp"/>
+    </target>
+    <target name="-check-jnlp-file" depends="-check-jnlp-file-fx,-check-jnlp-file-swing">
+        <condition property="jnlp-file-exists">
+            <available file="${jfx.deployment.jnlp}"/>
+        </condition>
+        <condition property="jnlp-file-exists+netbeans.home">
+            <and>
+                <isset property="jnlp-file-exists"/>
+                <isset property="netbeans.home"/>
+            </and>
+        </condition>
+    </target>
+
+    <target name="-resolve-jnlp-file" depends="-check-jnlp-file" unless="jnlp-file-exists">
+        <antcall target="jfx-deployment"/>
+        <antcall target="-check-jnlp-file"/>
+    </target>
+
+    <target name="jfxws-run" if="jnlp-file-exists" depends="-check-jdk-7u4or5-mac,jar,-check-jfx-webstart,-resolve-jnlp-file,-check-jfx-runtime" description="Start fx javaws execution">
+        <echo message="Executing ${jfx.deployment.jnlp} using ${active.webstart.executable}"/>
+        <exec executable="${active.webstart.executable}">
+            <arg file="${jfx.deployment.jnlp}"/>
+        </exec>
+    </target>
+    
+    <target name="jfxws-debug" if="jnlp-file-exists+netbeans.home" depends="-check-jdk-7u4or5-mac,jar,-check-jfx-webstart,-resolve-jnlp-file,-check-jfx-runtime,-debug-start-debugger,-debug-javaws-debuggee" 
+        description="Debug fx javaws project in IDE"/>
+        
+    <target name="-debug-javaws-debuggee" depends="-init-debug-args">
+        <echo message="Executing ${jfx.deployment.jnlp} in debug mode using ${active.webstart.executable}"/>
+        <exec executable="${active.webstart.executable}">
+            <env key="JAVAWS_VM_ARGS" value="${debug-args-line} -Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>
+            <arg value="-wait"/>
+            <arg file="${jfx.deployment.jnlp}"/>
+        </exec>
+    </target>
+    
+    <target name="-profile-check-1">
+        <condition property="profiler.configured">
+            <or>
+                <contains casesensitive="true" string="${run.jvmargs.ide}" substring="-agentpath:"/>
+                <contains casesensitive="true" string="${run.jvmargs.ide}" substring="-javaagent:"/>
+            </or>
+        </condition>
+    </target>
+    
+    <target if="jnlp-file-exists+netbeans.home" name="-profile-check-jnlp">
+        <antcall target="-profile-check-1"/>
+    </target>
+    
+    <target name="-do-jfxws-profile" depends="-check-jdk-7u4or5-mac,jar,-check-jfx-webstart,-resolve-jnlp-file,-check-jfx-runtime">
+        <echo message="Executing ${jfx.deployment.jnlp} in profile mode using ${active.webstart.executable}"/>
+        <exec executable="${active.webstart.executable}">
+            <env key="JAVAWS_VM_ARGS" value="${run.jvmargs.ide}"/>
+            <arg value="-wait"/>
+            <arg file="${jfx.deployment.jnlp}"/>
+        </exec>
+    </target>
+    
+    <target name="jfxws-profile" if="profiler.configured" 
+        depends="-profile-check-1"
+        description="Profile fx javaws project in IDE">
+        <startprofiler/>
+        
+        <antcall target="-do-jfxws-profile"/>
+    </target>
+    
+
+    <!-- Running/Debugging/Profiling in Browser -->
+
+    <target name="-check-selected-browser-path" depends="-check-default-run-config">
+        <condition property="javafx.run.inbrowser.undefined">
+            <or>
+                <and>
+                    <isset property="javafx.run.inbrowser"/>
+                    <equals arg1="${javafx.run.inbrowser}" arg2="undefined"/>
+                </and>
+                <and>
+                    <isset property="javafx.run.inbrowser.path"/>
+                    <equals arg1="${javafx.run.inbrowser.path}" arg2="undefined"/>
+                </and>
+            </or>
+        </condition>
+        <condition property="javafx.run.inbrowser.path-exists">
+            <and>
+                <isset property="javafx.run.inbrowser.path"/>
+                <available file="${javafx.run.inbrowser.path}"/>
+            </and>
+        </condition>
+        <fail message="Error:${line.separator}Browser selection not recognizable from ${config} run configuration.${line.separator}Please go to Project Properties dialog, category Run, to select a valid browser." unless="javafx.run.inbrowser.path"/>
+        <fail message="Error:${line.separator}No browser defined in ${config} run configuration.${line.separator}Please verify in Tools->Options dialog that NetBeans recognizes a valid browser, then go to Project Properties dialog, category Run, to select a valid browser." if="javafx.run.inbrowser.undefined"/>
+        <fail message="Error:${line.separator}Browser ${javafx.run.inbrowser.path} referred from ${config} run configuration can not be found.${line.separator}(This can happen, e.g, when the FX Project is transferred to another system.)${line.separator}Please go to Project Properties dialog, category Run, to select a valid browser." unless="javafx.run.inbrowser.path-exists"/>
+    </target>
+
+    <target name="-check-template-processed-html-file">
+        <condition property="html-file-exists">
+            <and>
+                <isset property="html-template-available"/>
+                <available file="${javafx.run.htmltemplate.processed}"/>
+            </and>
+        </condition>
+    </target>
+    
+    <target name="-set-template-processed-html-file" depends="-check-template-processed-html-file" if="html-file-exists">
+        <property name="jfx.deployment.html" location="${javafx.run.htmltemplate.processed}"/>
+    </target>
+    
+    <target name="-set-html-file" depends="-set-template-processed-html-file" unless="html-file-exists">
+        <basename property="jfx.deployment.base" file="${jfx.deployment.jar}" suffix=".jar"/>
+        <property name="jfx.deployment.html" location="${jfx.deployment.dir}${file.separator}${jfx.deployment.base}.html"/>
+        <condition property="html-file-exists">
+            <available file="${jfx.deployment.html}"/>
+        </condition>
+        <condition property="html-file-exists+netbeans.home">
+            <and>
+                <isset property="html-file-exists"/>
+                <isset property="netbeans.home"/>
+            </and>
+        </condition>
+    </target>
+
+    <target name="jfxbe-run" if="html-file-exists" depends="-check-jdk-7u4or5-mac,jar,-check-selected-browser-path,-set-html-file,-check-jfx-runtime" description="Start JavaFX execution in browser">
+        <echo message="Executing ${jfx.deployment.html} using ${javafx.run.inbrowser}"/>
+        <echo message="(${javafx.run.inbrowser.path})"/>
+        <exec executable="${javafx.run.inbrowser.path}">
+            <arg file="${jfx.deployment.html}"/>
+        </exec>
+    </target>
+    
+    <target name="jfxbe-debug" if="html-file-exists+netbeans.home" depends="-check-jdk-7u4or5-mac,jar,-check-selected-browser-path,-set-html-file,-check-jfx-runtime,-debug-start-debugger,-debug-jfxbe-debuggee" 
+        description="Debug JavaFX project in browser"/>
+        
+    <target name="-debug-jfxbe-debuggee" depends="-init-debug-args">
+        <echo message="Executing ${jfx.deployment.html} in debug mode using ${javafx.run.inbrowser}"/>
+        <echo message="(${javafx.run.inbrowser.path})"/>
+        <exec executable="${javafx.run.inbrowser.path}">
+            <env key="_JPI_VM_OPTIONS" value="${debug-args-line} -Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>
+            <arg file="${jfx.deployment.html}"/>
+        </exec>
+    </target>
+
+    <target if="html-file-exists+netbeans.home" name="-profile-check-html">
+        <antcall target="-profile-check-1"/>
+    </target>
+
+    <target name="-do-jfxbe-profile" depends="-check-jdk-7u4or5-mac,jar,-check-selected-browser-path,-set-html-file,-check-jfx-runtime">
+        <echo message="Executing ${jfx.deployment.html} in profile mode using ${javafx.run.inbrowser}"/>
+        <echo message="(${javafx.run.inbrowser.path})"/>
+        <exec executable="${javafx.run.inbrowser.path}">
+            <env key="_JPI_VM_OPTIONS" value="${run.jvmargs.ide}"/>
+            <arg file="${jfx.deployment.html}"/>
+        </exec>
+    </target>
+
+    <target name="jfxbe-profile" if="profiler.configured"
+        depends="-profile-check-html"
+        description="Profile JavaFX project in browser">
+        <startprofiler/>
+        
+        <antcall target="-do-jfxbe-profile"/>
+    </target>
+</project>
--- a/apps/experiments/Modena/nbproject/project.properties	Mon Feb 11 17:50:32 2013 -0800
+++ b/apps/experiments/Modena/nbproject/project.properties	Wed Feb 13 18:35:25 2013 -0500
@@ -77,6 +77,8 @@
 javafx.fallback.class=com.javafx.main.NoJavaFXFallback
 # Main class for JavaFX
 javafx.main.class=modena.Modena
+javafx.native.bundling.enabled=false
+javafx.native.bundling.type=none
 javafx.preloader.class=
 # This project does not use Preloader
 javafx.preloader.enabled=false
@@ -88,8 +90,8 @@
 javafx.rebase.libs=false
 javafx.run.height=600
 javafx.run.width=800
-javafx.runtime=${platforms.JDK_1.7_controls_8.0_repo.javafx.runtime.home}
-javafx.sdk=${platforms.JDK_1.7_controls_8.0_repo.javafx.sdk.home}
+javafx.runtime=${platforms.JDK_1.7_controls_8.0.javafx.runtime.home}
+javafx.sdk=${platforms.JDK_1.7_controls_8.0.javafx.sdk.home}
 javafx.signing.enabled=true
 javafx.signing.type=self
 jnlp.codebase.type=no.codebase
@@ -107,7 +109,7 @@
 manifest.file=manifest.mf
 meta.inf.dir=${src.dir}/META-INF
 mkdist.disabled=false
-platform.active=JDK_1.7_controls_8.0_repo
+platform.active=JDK_1.7_controls_8.0
 run.classpath=\
     ${dist.jar}:\
     ${javac.classpath}:\
--- a/apps/experiments/Modena/src/modena/SameHeightTest.fxml	Mon Feb 11 17:50:32 2013 -0800
+++ b/apps/experiments/Modena/src/modena/SameHeightTest.fxml	Wed Feb 13 18:35:25 2013 -0500
@@ -18,60 +18,13 @@
             <Font name="System Bold" size="13.0" fx:id="x2" />
           </font>
         </Label>
-        <HBox maxHeight="-Infinity" prefHeight="-1.0" prefWidth="-1.0" spacing="3.0" style="-fx-border-color: black transparent black transparent;&#10;-fx-border-width: 10 0 10 0;">
+        <HBox maxHeight="-Infinity" prefHeight="-1.0" prefWidth="-1.0" spacing="3.0" style="">
           <children>
-            <Button mnemonicParsing="false" text="Button" />
-            <ToggleButton mnemonicParsing="false" prefWidth="90.0" selected="true" text="Toggle">
-              <toggleGroup>
-                <ToggleGroup fx:id="toggle1" />
-              </toggleGroup>
-            </ToggleButton>
-            <MenuButton mnemonicParsing="false" prefWidth="100.0" text="MenuButton">
-              <items>
-                <MenuItem mnemonicParsing="false" text="Action 1" />
-                <MenuItem mnemonicParsing="false" text="Action 2" />
-              </items>
-            </MenuButton>
-            <SplitMenuButton mnemonicParsing="false" prefWidth="100.0" text="SplitMenuButton">
-              <items>
-                <MenuItem mnemonicParsing="false" text="Action 1" />
-                <MenuItem mnemonicParsing="false" text="Action 2" />
-              </items>
-            </SplitMenuButton>
-            <ChoiceBox prefWidth="60.0">
-              <items>
-                <FXCollections fx:factory="observableArrayList">
-                  <String fx:value="Item 1" />
-                  <String fx:value="Item 2" />
-                  <String fx:value="Item 3" />
-                </FXCollections>
-              </items>
-            </ChoiceBox>
-            <ComboBox prefWidth="60.0">
-              <items>
-                <FXCollections fx:factory="observableArrayList">
-                  <String fx:value="Item 1" />
-                  <String fx:value="Item 2" />
-                  <String fx:value="Item 3" />
-                </FXCollections>
-              </items>
-            </ComboBox>
-            <ComboBox editable="true" prefWidth="60.0" promptText="Choose">
-              <items>
-                <FXCollections fx:factory="observableArrayList">
-                  <String fx:value="Item 1" />
-                  <String fx:value="Item 2" />
-                  <String fx:value="Item 3" />
-                </FXCollections>
-              </items>
-            </ComboBox>
-            <ColorPicker />
-            <TextField prefWidth="100.0" promptText="Textfield" text="TextField" />
-            <PasswordField prefWidth="100.0" promptText="Password" text="password" />
-          </children>
-        </HBox>
-        <HBox maxHeight="-Infinity" prefHeight="-1.0" prefWidth="-1.0" spacing="3.0" style="-fx-border-color: red transparent red transparent;">
-          <children>
+            <TitledPane animated="false" expanded="false" prefWidth="80.0" text="TitledPane">
+              <content>
+                <AnchorPane id="Content" minHeight="0.0" minWidth="0.0" prefHeight="40.0" prefWidth="80.0" />
+              </content>
+            </TitledPane>
             <Button mnemonicParsing="false" text="Button" />
             <ToggleButton mnemonicParsing="false" prefWidth="90.0" selected="true" text="Toggle">
               <toggleGroup>
@@ -125,8 +78,13 @@
             <Insets top="20.0" fx:id="x1" />
           </VBox.margin>
         </HBox>
-        <HBox maxHeight="-Infinity" prefHeight="-1.0" prefWidth="-1.0" spacing="3.0" style="" VBox.margin="$x1">
+        <HBox maxHeight="-Infinity" prefHeight="-1.0" prefWidth="-1.0" spacing="3.0" style="-fx-border-color: #f09f9b transparent #f09f9b transparent;" VBox.margin="$x1">
           <children>
+            <TitledPane animated="false" expanded="false" prefWidth="80.0" text="TitledPane">
+              <content>
+                <AnchorPane id="Content" minHeight="0.0" minWidth="0.0" prefHeight="40.0" prefWidth="80.0" />
+              </content>
+            </TitledPane>
             <Button mnemonicParsing="false" text="Button" />
             <ToggleButton mnemonicParsing="false" prefWidth="90.0" selected="true" text="Toggle">
               <toggleGroup>
@@ -176,6 +134,9 @@
             <TextField prefWidth="100.0" promptText="Textfield" text="TextField" />
             <PasswordField prefWidth="100.0" promptText="Password" text="password" />
           </children>
+          <padding>
+            <Insets bottom="1.0" top="1.0" />
+          </padding>
         </HBox>
         <Label font="$x2" text="All of these controls should be text aligned" VBox.margin="$x1" />
         <HBox id="HBox" alignment="TOP_LEFT" spacing="5.0" VBox.margin="$x1">
@@ -303,12 +264,12 @@
                     </ListView>
                   </children>
                 </VBox>
-                <Region maxHeight="1.0" maxWidth="-1.0" prefHeight="-1.0" prefWidth="-1.0" style="-fx-background-color: red;" visible="true">
+                <Region maxHeight="1.0" maxWidth="-1.0" opacity="0.4" prefHeight="-1.0" prefWidth="-1.0" style="-fx-background-color: red;" visible="true">
                   <StackPane.margin>
                     <Insets top="18.0" />
                   </StackPane.margin>
                 </Region>
-                <Region maxHeight="-1.0" maxWidth="1.0" opacity="0.25" prefHeight="-1.0" prefWidth="-1.0" style="-fx-background-color: red;" visible="true">
+                <Region maxHeight="-1.0" maxWidth="1.0" opacity="0.4" prefHeight="-1.0" prefWidth="-1.0" style="-fx-background-color: red;" visible="true">
                   <StackPane.margin>
                     <Insets left="9.0" />
                   </StackPane.margin>
@@ -322,5 +283,85 @@
         </HBox>
       </children>
     </VBox>
+    <AnchorPane layoutX="284.0" layoutY="337.0" prefHeight="250.0" prefWidth="322.0" style="-fx-border-color: #cccccc;">
+      <children>
+        <VBox alignment="TOP_RIGHT" minHeight="-1.0" prefHeight="-1.0" prefWidth="216.0" spacing="10.0" AnchorPane.bottomAnchor="10.0" AnchorPane.leftAnchor="10.0" AnchorPane.rightAnchor="10.0" AnchorPane.topAnchor="10.0">
+          <children>
+            <HBox id="HBox" alignment="CENTER_RIGHT" spacing="10.0">
+              <children>
+                <Label text="MenuButton:" />
+                <MenuButton mnemonicParsing="false" prefWidth="150.0" text="Sample">
+                  <items>
+                    <MenuItem mnemonicParsing="false" text="Action 1" />
+                    <MenuItem mnemonicParsing="false" text="Action 2" />
+                  </items>
+                </MenuButton>
+              </children>
+            </HBox>
+            <HBox id="HBox" alignment="CENTER_RIGHT" spacing="10.0">
+              <children>
+                <Label text="SplitMenuButton" />
+                <SplitMenuButton mnemonicParsing="false" prefWidth="150.0" text="Sample">
+                  <items>
+                    <MenuItem mnemonicParsing="false" text="Action 1" />
+                    <MenuItem mnemonicParsing="false" text="Action 2" />
+                  </items>
+                </SplitMenuButton>
+              </children>
+            </HBox>
+            <HBox id="HBox" alignment="CENTER_RIGHT" spacing="10.0">
+              <children>
+                <Label text="ChoiceBox" />
+                <ChoiceBox prefWidth="150.0">
+                  <items>
+                    <FXCollections fx:factory="observableArrayList">
+                      <String fx:value="Item 1" />
+                      <String fx:value="Item 2" />
+                      <String fx:value="Item 3" />
+                    </FXCollections>
+                  </items>
+                </ChoiceBox>
+              </children>
+            </HBox>
+            <HBox id="HBox" alignment="CENTER_RIGHT" spacing="10.0">
+              <children>
+                <Label text="ComboBox" />
+                <ComboBox prefWidth="150.0">
+                  <items>
+                    <FXCollections fx:factory="observableArrayList">
+                      <String fx:value="Item 1" />
+                      <String fx:value="Item 2" />
+                      <String fx:value="Item 3" />
+                    </FXCollections>
+                  </items>
+                </ComboBox>
+              </children>
+            </HBox>
+            <HBox id="HBox" alignment="CENTER_RIGHT" spacing="10.0">
+              <children>
+                <Label text="ComboBox (editable)" />
+                <ComboBox editable="true" prefWidth="150.0" promptText="Sample">
+                  <items>
+                    <FXCollections fx:factory="observableArrayList">
+                      <String fx:value="Item 1" />
+                      <String fx:value="Item 2" />
+                      <String fx:value="Item 3" />
+                    </FXCollections>
+                  </items>
+                </ComboBox>
+              </children>
+            </HBox>
+            <HBox id="HBox" alignment="CENTER_RIGHT" spacing="10.0">
+              <children>
+                <Label text="Label" />
+                <ColorPicker prefWidth="150.0" />
+              </children>
+            </HBox>
+          </children>
+        </VBox>
+        <Region layoutX="284.0" layoutY="0.0" maxHeight="-1.0" maxWidth="1.0" opacity="0.4" prefHeight="250.0" prefWidth="1.0" style="-fx-background-color: red;" visible="true" />
+        <Region layoutX="303.0" layoutY="0.0" maxHeight="-1.0" maxWidth="1.0" opacity="0.4" prefHeight="250.0" prefWidth="1.0" style="-fx-background-color: red;" visible="true" />
+      </children>
+    </AnchorPane>
   </children>
 </AnchorPane>
--- a/apps/experiments/Modena/src/modena/SamplePage.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/apps/experiments/Modena/src/modena/SamplePage.java	Wed Feb 13 18:35:25 2013 -0500
@@ -34,6 +34,7 @@
 import java.util.HashMap;
 import java.util.Map;
 import javafx.application.Platform;
+import javafx.css.PseudoClass;
 import javafx.geometry.Insets;
 import javafx.geometry.Orientation;
 import javafx.geometry.Pos;
@@ -83,11 +84,11 @@
 import javafx.scene.layout.VBoxBuilder;
 import javafx.scene.paint.Color;
 import javafx.scene.web.HTMLEditorBuilder;
+import static modena.SamplePageChartHelper.*;
 import static modena.SamplePageHelpers.*;
 import static modena.SamplePageTableHelper.*;
 import static modena.SamplePageTreeHelper.*;
 import static modena.SamplePageTreeTableHelper.*;
-import static modena.SamplePageChartHelper.*;
 
 /**
  * Page showing every control in every state
@@ -98,19 +99,27 @@
     private Map<String, Node> content = new HashMap<>();
     
     private Node withState(Node node, String state) {
-        node.getProperties().put("javafx.scene.Node.pseudoClassOverride", state);
+        if (node != null && state != null) {
+            // stop user from being able to change state
+            node.setMouseTransparent(true);
+            node.setFocusTraversable(false);
+            // set state to chosen state
+            final String[] pseudoClasses = (state).split("[\\s,]+");
+            for (String pseudoClass : pseudoClasses) {
+                node.pseudoClassStateChanged(PseudoClass.getPseudoClass(pseudoClass), true);
+            }
+        }
         return node;
     }
     
     private Node withState(final Node node, final String state, final String subNodeStyleClass, final String subNodeState) {
-        if (state!=null) node.getProperties().put("javafx.scene.Node.pseudoClassOverride", state);
+        withState(node, state);
         Platform.runLater(new Runnable() {
             @Override public void run() {
-                // TODO: node.lookup(subNodeStyleClass) is null if stage is not shown
                 if (node != null) {
                     Node subNode = node.lookup(subNodeStyleClass);
                     if (subNode != null) {
-                        node.lookup(subNodeStyleClass).getProperties().put("javafx.scene.Node.pseudoClassOverride", subNodeState);
+                        withState(node.lookup(subNodeStyleClass), subNodeState);
                     } else {
                         System.err.println("node = " + node+" node.lookup("+subNodeStyleClass+") = " + subNode);
                     }
@@ -343,24 +352,24 @@
                 "MenuButton:", 
                 MenuButtonBuilder.create().items(createMenuItems(20)).text("right").popupSide(Side.RIGHT).build(),
                 MenuButtonBuilder.create().items(createMenuItems(20)).text("normal").build(),
-                withState(MenuButtonBuilder.create().items(createMenuItems(20)).text("hover").build(), "hover"),
-                withState(MenuButtonBuilder.create().items(createMenuItems(20)).text("armed").build(), "armed"),
-                withState(MenuButtonBuilder.create().items(createMenuItems(20)).text("focused").build(), "focused"),
-                withState(MenuButtonBuilder.create().items(createMenuItems(20)).text("disabled").build(), "disabled")
+                withState(MenuButtonBuilder.create().items(createMenuItems(20)).text("hover").build(), "openvertically,hover"),
+                withState(MenuButtonBuilder.create().items(createMenuItems(20)).text("armed").build(), "openvertically,armed"),
+                withState(MenuButtonBuilder.create().items(createMenuItems(20)).text("focused").build(), "openvertically,focused"),
+                withState(MenuButtonBuilder.create().items(createMenuItems(20)).text("disabled").build(), "openvertically,disabled")
                 );
         newSection(      
                 "SplitMenuButton:", 
                 SplitMenuButtonBuilder.create().items(createMenuItems(20)).text("right").popupSide(Side.RIGHT).build(),
                 SplitMenuButtonBuilder.create().items(createMenuItems(20)).text("normal").build(),
-                withState(SplitMenuButtonBuilder.create().items(createMenuItems(20)).text("hover").build(),null,".label", "hover"),
-                withState(SplitMenuButtonBuilder.create().items(createMenuItems(20)).text("armed").build(),"armed",".label", "armed")
+                withState(SplitMenuButtonBuilder.create().items(createMenuItems(20)).text("hover").build(),"openvertically",".label", "hover"),
+                withState(SplitMenuButtonBuilder.create().items(createMenuItems(20)).text("armed").build(),"armed,openvertically",".label", "armed")
                 );
         newSection(      
                 "SplitMenuButton\nMore:", 
-                withState(SplitMenuButtonBuilder.create().items(createMenuItems(20)).text("arrow hover").build(),null,".arrow-button", "hover"),
-                withState(SplitMenuButtonBuilder.create().items(createMenuItems(20)).text("showing").build(), "showing"),
-                withState(SplitMenuButtonBuilder.create().items(createMenuItems(20)).text("focused").build(), "focused"),
-                withState(SplitMenuButtonBuilder.create().items(createMenuItems(20)).text("disabled").build(), "disabled")
+                withState(SplitMenuButtonBuilder.create().items(createMenuItems(20)).text("arrow hover").build(),"openvertically",".arrow-button", "hover"),
+                withState(SplitMenuButtonBuilder.create().items(createMenuItems(20)).text("showing").build(), "openvertically,showing"),
+                withState(SplitMenuButtonBuilder.create().items(createMenuItems(20)).text("focused").build(), "openvertically,focused"),
+                withState(SplitMenuButtonBuilder.create().items(createMenuItems(20)).text("disabled").build(), "openvertically,disabled")
                 );
         newDetailedSection(
                 new String[]{"Slider (H):", "normal", "hover", "pressed", "disabled", "tickmarks"},
--- a/apps/experiments/Modena/src/modena/TestApp.css	Mon Feb 11 17:50:32 2013 -0800
+++ b/apps/experiments/Modena/src/modena/TestApp.css	Wed Feb 13 18:35:25 2013 -0500
@@ -72,4 +72,4 @@
     -fx-border-image-repeat: stretch;
     /*-fx-font: 15px "Ubuntu";*/
     -fx-font: 13px "Lucida Sans";
-}
\ No newline at end of file
+}
--- a/javafx-ui-charts/src/javafx/scene/chart/BarChart.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-charts/src/javafx/scene/chart/BarChart.java	Wed Feb 13 18:35:25 2013 -0500
@@ -54,6 +54,7 @@
 import javafx.css.CssMetaData;
 import javafx.css.PseudoClass;
 import com.sun.javafx.css.converters.SizeConverter;
+import javafx.css.Styleable;
 import javafx.css.StyleableProperty;
 
 /**
@@ -92,7 +93,7 @@
             return "barGap";
         }
 
-        public CssMetaData getCssMetaData() {
+        public CssMetaData<BarChart<?,?>,Number> getCssMetaData() {
             return StyleableProperties.BAR_GAP;
         }
     };
@@ -117,7 +118,7 @@
             return "categoryGap";
         }
 
-        public CssMetaData getCssMetaData() {
+        public CssMetaData<BarChart<?,?>,Number> getCssMetaData() {
             return StyleableProperties.CATEGORY_GAP;
         }
     };
@@ -531,11 +532,11 @@
             }
         };
 
-         private static final List<CssMetaData<? extends Node, ?>> STYLEABLES;
+         private static final List<CssMetaData<? extends Styleable, ?>> STYLEABLES;
          static {
 
-            final List<CssMetaData<? extends Node, ?>> styleables =
-                new ArrayList<CssMetaData<? extends Node, ?>>(XYChart.getClassCssMetaData());
+            final List<CssMetaData<? extends Styleable, ?>> styleables =
+                new ArrayList<CssMetaData<? extends Styleable, ?>>(XYChart.getClassCssMetaData());
             styleables.add(BAR_GAP);
             styleables.add(CATEGORY_GAP);
             STYLEABLES = Collections.unmodifiableList(styleables);
@@ -546,7 +547,7 @@
      * @return The CssMetaData associated with this class, which may include the
      * CssMetaData of its super classes.
      */
-    public static List<CssMetaData<? extends Node, ?>> getClassCssMetaData() {
+    public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
         return StyleableProperties.STYLEABLES;
     }
 
@@ -554,7 +555,7 @@
      * {@inheritDoc}
      */
     @Override
-    public List<CssMetaData<? extends Node, ?>> getCssMetaData() {
+    public List<CssMetaData<? extends Styleable, ?>> getCssMetaData() {
         return getClassCssMetaData();
     }
 
--- a/javafx-ui-charts/src/javafx/scene/chart/Chart.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-charts/src/javafx/scene/chart/Chart.java	Wed Feb 13 18:35:25 2013 -0500
@@ -51,8 +51,8 @@
 import javafx.css.CssMetaData;
 import com.sun.javafx.css.converters.BooleanConverter;
 import com.sun.javafx.css.converters.EnumConverter;
+import javafx.css.Styleable;
 import javafx.css.StyleableProperty;
-import javafx.geometry.NodeOrientation;
 
 /**
  * Base class for all charts. It has 3 parts the title, legend and chartContent. The chart content is populated by the
@@ -126,7 +126,7 @@
         }
         
         @Override
-        public CssMetaData getCssMetaData() {
+        public CssMetaData<Chart,Side> getCssMetaData() {
             return StyleableProperties.TITLE_SIDE;
         }
 
@@ -183,7 +183,7 @@
         }
             
         @Override
-        public CssMetaData getCssMetaData() {
+        public CssMetaData<Chart,Boolean> getCssMetaData() {
             return StyleableProperties.LEGEND_VISIBLE;
         }
 
@@ -215,7 +215,7 @@
         }
         
         @Override
-        public CssMetaData getCssMetaData() {
+        public CssMetaData<Chart,Side> getCssMetaData() {
             return StyleableProperties.LEGEND_SIDE;
         }
 
@@ -466,10 +466,10 @@
             }
         };
 
-        private static final List<CssMetaData<? extends Node, ?>> STYLEABLES;
+        private static final List<CssMetaData<? extends Styleable, ?>> STYLEABLES;
         static {
-            final List<CssMetaData<? extends Node, ?>> styleables = 
-                new ArrayList<CssMetaData<? extends Node, ?>>(Region.getClassCssMetaData());
+            final List<CssMetaData<? extends Styleable, ?>> styleables = 
+                new ArrayList<CssMetaData<? extends Styleable, ?>>(Region.getClassCssMetaData());
             styleables.add(TITLE_SIDE);
             styleables.add(LEGEND_VISIBLE);
             styleables.add(LEGEND_SIDE);
@@ -481,7 +481,7 @@
      * @return The CssMetaData associated with this class, which may include the
      * CssMetaData of its super classes.
      */
-    public static List<CssMetaData<? extends Node, ?>> getClassCssMetaData() {
+    public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
         return StyleableProperties.STYLEABLES;
     }
 
@@ -489,7 +489,7 @@
      * {@inheritDoc}
      */
     @Override
-    public List<CssMetaData<? extends Node, ?>> getCssMetaData() {
+    public List<CssMetaData<? extends Styleable, ?>> getCssMetaData() {
         return getClassCssMetaData();
     }
 
--- a/javafx-ui-charts/src/javafx/scene/chart/LineChart.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-charts/src/javafx/scene/chart/LineChart.java	Wed Feb 13 18:35:25 2013 -0500
@@ -57,6 +57,7 @@
 import javafx.css.CssMetaData;
 import com.sun.javafx.css.converters.BooleanConverter;
 import java.util.*;
+import javafx.css.Styleable;
 import javafx.css.StyleableProperty;
 
 /**
@@ -106,7 +107,7 @@
             return "createSymbols";
         }
 
-        public CssMetaData getCssMetaData() {
+        public CssMetaData<LineChart<?,?>,Boolean> getCssMetaData() {
             return StyleableProperties.CREATE_SYMBOLS;
         }
     };
@@ -511,10 +512,10 @@
             }
         };
 
-        private static final List<CssMetaData<? extends Node, ?>> STYLEABLES;
+        private static final List<CssMetaData<? extends Styleable, ?>> STYLEABLES;
         static {
-            final List<CssMetaData<? extends Node, ?>> styleables =
-                new ArrayList<CssMetaData<? extends Node, ?>>(XYChart.getClassCssMetaData());
+            final List<CssMetaData<? extends Styleable, ?>> styleables =
+                new ArrayList<CssMetaData<? extends Styleable, ?>>(XYChart.getClassCssMetaData());
             styleables.add(CREATE_SYMBOLS);
             STYLEABLES = Collections.unmodifiableList(styleables);
         }
@@ -524,7 +525,7 @@
      * @return The CssMetaData associated with this class, which may include the
      * CssMetaData of its super classes.
      */
-    public static List<CssMetaData<? extends Node, ?>> getClassCssMetaData() {
+    public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
         return StyleableProperties.STYLEABLES;
     }
 
@@ -532,7 +533,7 @@
      * {@inheritDoc}
      */
     @Override
-    public List<CssMetaData<? extends Node, ?>> getCssMetaData() {
+    public List<CssMetaData<? extends Styleable, ?>> getCssMetaData() {
         return getClassCssMetaData();
     }
 
--- a/javafx-ui-charts/src/javafx/scene/chart/PieChart.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-charts/src/javafx/scene/chart/PieChart.java	Wed Feb 13 18:35:25 2013 -0500
@@ -70,6 +70,7 @@
 import javafx.css.CssMetaData;
 import com.sun.javafx.css.converters.BooleanConverter;
 import com.sun.javafx.css.converters.SizeConverter;
+import javafx.css.Styleable;
 import javafx.css.StyleableProperty;
 
 /**
@@ -218,7 +219,7 @@
             return "startAngle";
         }
 
-        public CssMetaData getCssMetaData() {
+        public CssMetaData<PieChart,Number> getCssMetaData() {
             return StyleableProperties.START_ANGLE;
         }
     };
@@ -243,7 +244,7 @@
             return "clockwise";
         }
 
-        public CssMetaData getCssMetaData() {
+        public CssMetaData<PieChart,Boolean> getCssMetaData() {
             return StyleableProperties.CLOCKWISE;
         }
     };
@@ -269,7 +270,7 @@
             return "labelLineLength";
         }
 
-        public CssMetaData getCssMetaData() {
+        public CssMetaData<PieChart,Number> getCssMetaData() {
             return StyleableProperties.LABEL_LINE_LENGTH;
         }
     };
@@ -294,7 +295,7 @@
             return "labelsVisible";
         }
 
-        public CssMetaData getCssMetaData() {
+        public CssMetaData<PieChart,Boolean> getCssMetaData() {
             return StyleableProperties.LABELS_VISIBLE;
         }
     };
@@ -955,11 +956,11 @@
             }
         };
 
-         private static final List<CssMetaData<? extends Node, ?>> STYLEABLES;
+         private static final List<CssMetaData<? extends Styleable, ?>> STYLEABLES;
          static {
 
-            final List<CssMetaData<? extends Node, ?>> styleables =
-                new ArrayList<CssMetaData<? extends Node, ?>>(Chart.getClassCssMetaData());
+            final List<CssMetaData<? extends Styleable, ?>> styleables =
+                new ArrayList<CssMetaData<? extends Styleable, ?>>(Chart.getClassCssMetaData());
             styleables.add(CLOCKWISE);
             styleables.add(LABELS_VISIBLE);
             styleables.add(LABEL_LINE_LENGTH);
@@ -972,7 +973,7 @@
      * @return The CssMetaData associated with this class, which may include the
      * CssMetaData of its super classes.
      */
-    public static List<CssMetaData<? extends Node, ?>> getClassCssMetaData() {
+    public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
         return StyleableProperties.STYLEABLES;
     }
 
@@ -980,7 +981,7 @@
      * {@inheritDoc}
      */
     @Override
-    public List<CssMetaData<? extends Node, ?>> getCssMetaData() {
+    public List<CssMetaData<? extends Styleable, ?>> getCssMetaData() {
         return getClassCssMetaData();
     }
 
--- a/javafx-ui-charts/src/javafx/scene/chart/StackedAreaChart.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-charts/src/javafx/scene/chart/StackedAreaChart.java	Wed Feb 13 18:35:25 2013 -0500
@@ -42,7 +42,7 @@
 import com.sun.javafx.charts.Legend;
 import com.sun.javafx.charts.Legend.LegendItem;
 import javafx.css.CssMetaData;
-import javafx.scene.paint.Color;
+import javafx.css.Styleable;
 
 /**
  * StackedAreaChart is a variation of {@link AreaChart} that displays trends of the 
@@ -744,11 +744,11 @@
     
     private static class StyleableProperties {
 
-        private static final List<CssMetaData<? extends Node, ?>> STYLEABLES;
+        private static final List<CssMetaData<? extends Styleable, ?>> STYLEABLES;
         
         static {
-            final List<CssMetaData<? extends Node, ?>> styleables =
-                new ArrayList<CssMetaData<? extends Node, ?>>(XYChart.getClassCssMetaData());
+            final List<CssMetaData<? extends Styleable, ?>> styleables =
+                new ArrayList<CssMetaData<? extends Styleable, ?>>(XYChart.getClassCssMetaData());
 
             STYLEABLES = Collections.unmodifiableList(styleables);
 
@@ -759,14 +759,14 @@
      * @return The CssMetaData associated with this class, which may include the
      * CssMetaData of its super classes.
      */
-     public static List<CssMetaData<? extends Node, ?>> getClassCssMetaData() {
+     public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
          return StyleableProperties.STYLEABLES;
      }
     /**
      * {@inheritDoc}
      */
     @Override
-    public List<CssMetaData<? extends Node, ?>> getCssMetaData() {
+    public List<CssMetaData<? extends Styleable, ?>> getCssMetaData() {
         return getClassCssMetaData();
     }
 
--- a/javafx-ui-charts/src/javafx/scene/chart/StackedBarChart.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-charts/src/javafx/scene/chart/StackedBarChart.java	Wed Feb 13 18:35:25 2013 -0500
@@ -28,7 +28,6 @@
 import java.util.*;
 import javafx.animation.*;
 import javafx.beans.property.DoubleProperty;
-import javafx.beans.property.SimpleDoubleProperty;
 import javafx.collections.FXCollections;
 import javafx.collections.ObservableList;
 import javafx.event.ActionEvent;
@@ -42,8 +41,7 @@
 import javafx.css.CssMetaData;
 import javafx.css.PseudoClass;
 import com.sun.javafx.css.converters.SizeConverter;
-import javafx.beans.value.ChangeListener;
-import javafx.beans.value.ObservableValue;
+import javafx.css.Styleable;
 import javafx.css.StyleableProperty;
 
 
@@ -82,7 +80,7 @@
             return "categoryGap";
         }
 
-        public CssMetaData getCssMetaData() {
+        public CssMetaData<StackedBarChart<?,?>,Number> getCssMetaData() {
             return StackedBarChart.StyleableProperties.CATEGORY_GAP;
         }
     };
@@ -538,11 +536,11 @@
             }
         };
 
-        private static final List<CssMetaData<? extends Node, ?>> STYLEABLES;
+        private static final List<CssMetaData<? extends Styleable, ?>> STYLEABLES;
         static {
 
-            final List<CssMetaData<? extends Node, ?>> styleables =
-                new ArrayList<CssMetaData<? extends Node, ?>>(XYChart.getClassCssMetaData());
+            final List<CssMetaData<? extends Styleable, ?>> styleables =
+                new ArrayList<CssMetaData<? extends Styleable, ?>>(XYChart.getClassCssMetaData());
             styleables.add(CATEGORY_GAP);
             STYLEABLES = Collections.unmodifiableList(styleables);
         }
@@ -552,7 +550,7 @@
      * @return The CssMetaData associated with this class, which may include the
      * CssMetaData of its super classes.
      */
-    public static List<CssMetaData<? extends Node, ?>> getClassCssMetaData() {
+    public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
         return StyleableProperties.STYLEABLES;
     }
 
@@ -560,7 +558,7 @@
      * {@inheritDoc}
      */
     @Override
-    public List<CssMetaData<? extends Node, ?>> getCssMetaData() {
+    public List<CssMetaData<? extends Styleable, ?>> getCssMetaData() {
         return getClassCssMetaData();
     }
 
--- a/javafx-ui-charts/src/javafx/scene/chart/XYChart.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-charts/src/javafx/scene/chart/XYChart.java	Wed Feb 13 18:35:25 2013 -0500
@@ -64,12 +64,22 @@
 import com.sun.javafx.css.converters.BooleanConverter;
 import java.util.HashMap;
 import java.util.Map;
+import javafx.css.Styleable;
 import javafx.css.StyleableProperty;
 
 /**
  * Chart base class for all 2 axis charts. It is responsible for drawing the two
  * axes and the plot content. It contains a list of all content in the plot and
  * implementations of XYChart can add nodes to this list that need to be rendered.
+ * 
+ * <p>It is possible to install Tooltips on data items / symbols. 
+ * For example the following code snippet installs Tooltip on the 1st data item.
+ * 
+ * <pre><code>
+ *  XYChart.Data item = ( XYChart.Data)series.getData().get(0);
+ *  Tooltip.install(item.getNode(), new Tooltip("Symbol-0"));
+ * </code></pre>
+ *
  */
 public abstract class XYChart<X,Y> extends Chart {
 
@@ -242,7 +252,7 @@
         }
 
         @Override
-        public CssMetaData getCssMetaData() {
+        public CssMetaData<XYChart<?,?>,Boolean> getCssMetaData() {
             return StyleableProperties.VERTICAL_GRID_LINE_VISIBLE;
         }
     };
@@ -273,7 +283,7 @@
         }
         
         @Override
-        public CssMetaData getCssMetaData() {
+        public CssMetaData<XYChart<?,?>,Boolean> getCssMetaData() {
             return StyleableProperties.HORIZONTAL_GRID_LINE_VISIBLE;
         }        
     };
@@ -298,7 +308,7 @@
         }
 
         @Override
-        public CssMetaData getCssMetaData() {
+        public CssMetaData<XYChart<?,?>,Boolean> getCssMetaData() {
             return StyleableProperties.ALTERNATIVE_COLUMN_FILL_VISIBLE;
         }        
     };
@@ -323,7 +333,7 @@
         }
 
         @Override
-        public CssMetaData getCssMetaData() {
+        public CssMetaData<XYChart<?,?>,Boolean> getCssMetaData() {
             return StyleableProperties.ALTERNATIVE_ROW_FILL_VISIBLE;
         }                
     };
@@ -353,7 +363,7 @@
         }
 
         @Override
-        public CssMetaData getCssMetaData() {
+        public CssMetaData<XYChart<?,?>,Boolean> getCssMetaData() {
             return StyleableProperties.VERTICAL_ZERO_LINE_VISIBLE;
         }                
     };
@@ -383,7 +393,7 @@
         }
 
         @Override
-        public CssMetaData getCssMetaData() {
+        public CssMetaData<XYChart<?,?>,Boolean> getCssMetaData() {
             return StyleableProperties.HORIZONTAL_ZERO_LINE_VISIBLE;
         }                
     };
@@ -1161,10 +1171,10 @@
             }
         };
 
-        private static final List<CssMetaData<? extends Node, ?>> STYLEABLES;
+        private static final List<CssMetaData<? extends Styleable, ?>> STYLEABLES;
         static {
-            final List<CssMetaData<? extends Node, ?>> styleables = 
-                new ArrayList<CssMetaData<? extends Node, ?>>(Chart.getClassCssMetaData());
+            final List<CssMetaData<? extends Styleable, ?>> styleables = 
+                new ArrayList<CssMetaData<? extends Styleable, ?>>(Chart.getClassCssMetaData());
             styleables.add(HORIZONTAL_GRID_LINE_VISIBLE);
             styleables.add(HORIZONTAL_ZERO_LINE_VISIBLE);
             styleables.add(ALTERNATIVE_ROW_FILL_VISIBLE);
@@ -1179,7 +1189,7 @@
      * @return The CssMetaData associated with this class, which may include the
      * CssMetaData of its super classes.
      */
-    public static List<CssMetaData<? extends Node, ?>> getClassCssMetaData() {
+    public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
         return StyleableProperties.STYLEABLES;
     }
 
@@ -1187,7 +1197,7 @@
      * {@inheritDoc}
      */
     @Override
-    public List<CssMetaData<? extends Node, ?>> getCssMetaData() {
+    public List<CssMetaData<? extends Styleable, ?>> getCssMetaData() {
         return getClassCssMetaData();
     }
 
--- a/javafx-ui-charts/test/javafx/scene/chart/StackedAreaChartTest.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-charts/test/javafx/scene/chart/StackedAreaChartTest.java	Wed Feb 13 18:35:25 2013 -0500
@@ -78,7 +78,7 @@
         return sb;
     }
     
-    @Test
+    @Test 
     public void testSeriesAdd() {
         startApp();
         ac.getData().addAll(series1);
--- a/javafx-ui-common/src/com/sun/javafx/css/CssError.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/src/com/sun/javafx/css/CssError.java	Wed Feb 13 18:35:25 2013 -0500
@@ -25,6 +25,7 @@
 
 package com.sun.javafx.css;
 
+import javafx.css.Styleable;
 import java.lang.ref.Reference;
 import java.lang.ref.WeakReference;
 import java.net.URL;
--- a/javafx-ui-common/src/com/sun/javafx/css/StyleConverterImpl.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/src/com/sun/javafx/css/StyleConverterImpl.java	Wed Feb 13 18:35:25 2013 -0500
@@ -34,6 +34,7 @@
 import java.util.Map;
 import javafx.css.CssMetaData;
 import javafx.css.StyleConverter;
+import javafx.css.Styleable;
 import javafx.scene.Node;
 
 /**
@@ -51,7 +52,7 @@
      * Convert from the constituent values to the target property type.
      * Implemented by Types that have Keys with subKeys.
      */
-    public T convert(Map<CssMetaData<? extends Node, ?>,Object> convertedValues) {
+    public T convert(Map<CssMetaData<? extends Styleable, ?>,Object> convertedValues) {
         return null;
     }
 
--- a/javafx-ui-common/src/com/sun/javafx/css/StyleHelper.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/src/com/sun/javafx/css/StyleHelper.java	Wed Feb 13 18:35:25 2013 -0500
@@ -24,6 +24,7 @@
  */
 package com.sun.javafx.css;
 
+import javafx.css.Styleable;
 import java.lang.ref.Reference;
 import java.lang.ref.WeakReference;
 import java.util.ArrayList;
@@ -49,6 +50,7 @@
 import com.sun.javafx.css.parser.CSSParser;
 import java.util.Collection;
 import java.util.Set;
+import javafx.collections.ObservableMap;
 import javafx.css.FontCssMetaData;
 import javafx.css.PseudoClass;
 import javafx.css.StyleConverter;
@@ -99,7 +101,7 @@
         CssMetaData styleableFontProperty = null;
         CssMetaData styleableThatInherits = null;
         
-        final List<CssMetaData<? extends Node, ?>> props = node.getCssMetaData();
+        final List<CssMetaData<? extends Styleable, ?>> props = node.getCssMetaData();
         final int pMax = props != null ? props.size() : 0;
         for (int p=0; p<pMax; p++) {
             final CssMetaData prop = props.get(p);
@@ -787,14 +789,6 @@
     /**
      * Get the mapping of property to style from Node.style for this node.
      */
-    private static Map<String,CascadingStyle> getInlineStyleMap(Node node) {
-
-        return getInlineStyleMap(node.impl_getStyleable());
-    }
-
-    /**
-     * Get the mapping of property to style from Node.style for this node.
-     */
     private static Map<String,CascadingStyle> getInlineStyleMap(Styleable styleable) {
         
         final String inlineStyles = styleable.getStyle();
@@ -918,7 +912,23 @@
         }
         
     }
-        
+
+    ObservableMap<StyleableProperty<?>, List<Style>> observableStyleMap;
+     /**
+      * RT-17293
+      */
+     public final ObservableMap<StyleableProperty<?>, List<Style>> getObservableStyleMap() {
+         return observableStyleMap;
+     }
+
+     /**
+      * RT-17293
+      */
+     public final void setObservableStyleMap(ObservableMap<StyleableProperty<?>, List<Style>> observableStyleMap) {
+         this.observableStyleMap = observableStyleMap;
+     }
+          
+    
     /**
      * Called by the Node whenever it has transitioned from one set of
      * pseudoclass states to another. This function will then lookup the
@@ -972,14 +982,9 @@
         final Map<String,CascadingStyle> inlineStyles = StyleHelper.getInlineStyleMap(node);
         
         //
-        // if this node has a style map, then we'll populate it.
-        // 
-        final Map<StyleableProperty<?>, List<Style>> styleMap = node.impl_getStyleMap();
-
-        //
         // If someone is watching the styles, then we have to take the slow path.
         //
-        boolean fastpath = styleMap == null && inlineStyles == null;
+        boolean fastpath = observableStyleMap == null && inlineStyles == null;
         
         if (cacheEntry.font == null) {
             final CalculatedValue font = 
@@ -1001,7 +1006,7 @@
 //                inlineStyles == null;
         } 
         
-        final List<CssMetaData<? extends Node, ?>> styleables = node.getCssMetaData();
+        final List<CssMetaData<? extends Styleable, ?>> styleables = node.getCssMetaData();
         
         // Used in the for loop below, and a convenient place to stop when debugging.
         final int max = styleables.size();
@@ -1015,10 +1020,10 @@
 
             final CssMetaData cssMetaData = styleables.get(n);
             
-            if (styleMap != null) {
+            if (observableStyleMap != null) {
                 StyleableProperty styleableProperty = cssMetaData.getStyleableProperty(node);
-                if (styleableProperty != null && styleMap.containsKey(styleableProperty)) {
-                    styleMap.remove(styleableProperty);
+                if (styleableProperty != null && observableStyleMap.containsKey(styleableProperty)) {
+                    observableStyleMap.remove(styleableProperty);
                 }
             }
             
@@ -1031,7 +1036,7 @@
             
             // Create a List to hold the Styles if the node has 
             // a Map<WritableValue, List<Style>>
-            final List<Style> styleList = (styleMap != null) 
+            final List<Style> styleList = (observableStyleMap != null) 
                     ? new ArrayList<Style>() 
                     : null;
 
@@ -1104,9 +1109,9 @@
                 try {
                     cssMetaData.set(node, value, calculatedValue.origin);
                     
-                    if (styleMap != null) {
+                    if (observableStyleMap != null) {
                         StyleableProperty styleableProperty = cssMetaData.getStyleableProperty(node);                            
-                        styleMap.put(styleableProperty, styleList);
+                        observableStyleMap.put(styleableProperty, styleList);
                     }
                     
                 } catch (Exception e) {
@@ -1222,7 +1227,7 @@
         // are no matching styles for this property. We will then either SKIP
         // or we will INHERIT. We will inspect the default value for the styleable,
         // and if it is INHERIT then we will inherit otherwise we just skip it.
-        final List<CssMetaData<? extends Node, ?>> subProperties = styleable.getSubProperties();
+        final List<CssMetaData<? extends Styleable, ?>> subProperties = styleable.getSubProperties();
         final int numSubProperties = (subProperties != null) ? subProperties.size() : 0;
         if (style == null) {
             
@@ -1769,7 +1774,7 @@
                     LOGGER.warning(msg);
                     LOGGER.fine("node = " + node.toString());
                     LOGGER.fine("cssMetaData = " + cssMetaData);
-                    LOGGER.fine("styles = " + getMatchingStyles(node.impl_getStyleable(), cssMetaData));
+                    LOGGER.fine("styles = " + getMatchingStyles(node, cssMetaData));
                 }
                 return SKIP;
             } catch (IllegalArgumentException iae) {
@@ -2395,7 +2400,7 @@
 
         getMatchingStyles(node, styleableProperty, styleList);
 
-        List<CssMetaData<? extends Node, ?>> subProperties = styleableProperty.getSubProperties();
+        List<CssMetaData<? extends Styleable, ?>> subProperties = styleableProperty.getSubProperties();
         if (subProperties != null) {
             for (int n=0,nMax=subProperties.size(); n<nMax; n++) {
                 final CssMetaData subProperty = subProperties.get(n);
@@ -2424,8 +2429,8 @@
             Styleable parent = node;
             while (parent != null) {
                 
-                StyleHelper parentHelper = parent.getNode() != null
-                        ? parent.getNode().impl_getStyleHelper()
+                StyleHelper parentHelper = (parent instanceof Node) ?
+                        ((Parent)parent).impl_getStyleHelper()
                         : null;
                 
                 if (parentHelper != null) {
@@ -2479,8 +2484,8 @@
             if (styleableProperty.isInherits()) {
                 parent = node.getStyleableParent();
                 while (parent != null) {
-                    StyleHelper parentHelper = parent.getNode() != null 
-                            ? parent.getNode().impl_getStyleHelper()
+                    StyleHelper parentHelper = parent instanceof Node 
+                            ? ((Node)parent).impl_getStyleHelper()
                             : null;
                     if (parentHelper != null) {
                         parentHelper.getMatchingStyles(parent, styleableProperty, styleList); 
@@ -2506,8 +2511,8 @@
                 // gather up any and all styles that contain this value as a property
                 Styleable parent = node;
                 do {
-                    final StyleHelper helper = parent.getNode() != null 
-                            ? parent.getNode().impl_getStyleHelper()
+                    final StyleHelper helper = parent instanceof Node 
+                            ? ((Node)parent).impl_getStyleHelper()
                             : null;
                     if (helper != null) {
                                              
--- a/javafx-ui-common/src/com/sun/javafx/css/StyleManager.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/src/com/sun/javafx/css/StyleManager.java	Wed Feb 13 18:35:25 2013 -0500
@@ -25,6 +25,7 @@
 
 package com.sun.javafx.css;
 
+import javafx.css.Styleable;
 import java.io.FileNotFoundException;
 import java.io.FilePermission;
 import java.io.IOException;
@@ -133,7 +134,7 @@
      */
     public static List<Style> getMatchingStyles(CssMetaData cssMetaData, Node node) {
         if (node != null && cssMetaData != null) {
-            return getMatchingStyles(cssMetaData, node.impl_getStyleable());
+            return getMatchingStyles(cssMetaData, node);
         }
         return Collections.<Style>emptyList();
     }
@@ -144,8 +145,8 @@
      */
     public static List<Style> getMatchingStyles(CssMetaData cssMetaData, Styleable styleable) {
         if (styleable != null && cssMetaData != null) {
-            StyleHelper helper = styleable.getNode() != null 
-                    ? styleable.getNode().impl_getStyleHelper()
+            StyleHelper helper = styleable instanceof Node 
+                    ? ((Node)styleable).impl_getStyleHelper()
                     : null;
             return (helper != null) 
                 ? helper.getMatchingStyles(styleable, cssMetaData) 
@@ -160,11 +161,11 @@
      * @return 
      */
     // TODO: is this used anywhere?
-    public static List<CssMetaData<? extends Node, ?>> getStyleables(final Styleable styleable) {
+    public static List<CssMetaData<? extends Styleable, ?>> getStyleables(final Styleable styleable) {
         
         return styleable != null 
             ? styleable.getCssMetaData() 
-            : Collections.<CssMetaData<? extends Node, ?>>emptyList();
+            : Collections.<CssMetaData<? extends Styleable, ?>>emptyList();
     }
 
     /**
@@ -173,11 +174,11 @@
      * @return 
      */
     // TODO: is this used anywhere?
-    public static List<CssMetaData<? extends Node, ?>> getStyleables(final Node node) {
+    public static List<CssMetaData<? extends Styleable, ?>> getStyleables(final Node node) {
         
         return node != null 
             ? node.getCssMetaData() 
-            : Collections.<CssMetaData<? extends Node, ?>>emptyList();
+            : Collections.<CssMetaData<? extends Styleable, ?>>emptyList();
     }
          
     private StyleManager() {                
--- a/javafx-ui-common/src/com/sun/javafx/css/Styleable.java	Mon Feb 11 17:50:32 2013 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,117 +0,0 @@
-/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.sun.javafx.css;
-
-import java.util.List;
-import javafx.collections.ObservableMap;
-import javafx.css.CssMetaData;
-import javafx.css.StyleableProperty;
-import javafx.scene.Node;
-
-/**
- * 
- * @author dgrieve
- */
-public abstract class Styleable {
-    
-    /**
-     * The id of this {@code Styleable}. This simple string identifier is useful for
-     * finding a specific Node within the scene graph. While the id of a Node
-     * should be unique within the scene graph, this uniqueness is not enforced.
-     * This is analogous to the "id" attribute on an HTML element 
-     * (<a href="http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier">CSS ID Specification</a>).
-     * <p>
-     *     For example, if a Node is given the id of "myId", then the lookup method can
-     *     be used to find this node as follows: <code>scene.lookup("#myId");</code>.
-     * </p>
-     */    
-    public abstract String getId();
-
-    /**
-     * A list of String identifiers which can be used to logically group
-     * Nodes, specifically for an external style engine. This variable is
-     * analogous to the "class" attribute on an HTML element and, as such,
-     * each element of the list is a style class to which this Node belongs.
-     *
-     * @see <a href="http://www.w3.org/TR/css3-selectors/#class-html">CSS3 class selectors</a>
-     */    
-    public abstract List<String> getStyleClass(); 
-
-    /**
-     * A string representation of the CSS style associated with this
-     * specific {@code Node}. This is analogous to the "style" attribute of an
-     * HTML element. Note that, like the HTML style attribute, this
-     * variable contains style properties and values and not the
-     * selector portion of a style rule.
-     * @param value The inline CSS style to use for this {@code Node}.
-     *         {@code null} is implicitly converted to an empty String. 
-     * @profile common
-     * @defaultvalue empty string
-     */    
-    public abstract String getStyle();
-    
-    /**
-     * Return the parent of the wrapped Object as a Styleable, or null if
-     * there is no parent. 
-     */
-    public abstract Styleable getStyleableParent();
-    
-    /**
-     * The CssMetaData's of this Styleable
-     * @return 
-     */
-    public abstract List<CssMetaData<? extends Node, ?>> getCssMetaData(); 
-        
-    /**
-     * A Styleable typically wraps a Node that is going to be styled by CSS.
-     */
-    public abstract Node getNode();
-    
-     /**
-      * RT-17293
-      * @treatAsPrivate implementation detail
-      * @deprecated This is an experimental API that is not intended for use
-      */
-     private ObservableMap<StyleableProperty<?>, List<Style>> styleMap;
-     
-     /**
-      * RT-17293
-      * @treatAsPrivate implementation detail
-      * @deprecated This is an experimental API that is not intended for general use and is subject to change in future versions
-      */
-     public ObservableMap<StyleableProperty<?>, List<Style>> getStyleMap() {
-         return styleMap;
-     }
-
-     /**
-      * RT-17293
-      * @treatAsPrivate implementation detail
-      * @deprecated This is an experimental API that is not intended for general use and is subject to change in future versions
-      */
-     public void setStyleMap(ObservableMap<StyleableProperty<?>, List<Style>> styleMap) {
-         this.styleMap = styleMap;
-     }
-    
-}
--- a/javafx-ui-common/src/com/sun/javafx/css/converters/FontConverter.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/src/com/sun/javafx/css/converters/FontConverter.java	Wed Feb 13 18:35:25 2013 -0500
@@ -33,6 +33,7 @@
 import javafx.css.CssMetaData;
 import javafx.css.ParsedValue;
 import javafx.css.StyleConverter;
+import javafx.css.Styleable;
 import javafx.scene.Node;
 import javafx.scene.text.Font;
 import javafx.scene.text.FontPosture;
@@ -73,14 +74,14 @@
     }
 
     @Override
-    public Font convert(Map<CssMetaData<? extends Node, ?>, Object> convertedValues) {
+    public Font convert(Map<CssMetaData<? extends Styleable, ?>, Object> convertedValues) {
         Font font = Font.getDefault();
         double size = font.getSize();
         String family = font.getFamily();
         FontWeight weight = FontWeight.NORMAL;
         FontPosture style = FontPosture.REGULAR;
         
-        for (Entry<CssMetaData<? extends Node, ?>, Object> entry : convertedValues.entrySet()) {
+        for (Entry<CssMetaData<? extends Styleable, ?>, Object> entry : convertedValues.entrySet()) {
 
             Object value = entry.getValue();
             if (value == null) {
--- a/javafx-ui-common/src/com/sun/javafx/css/parser/CSSParser.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/src/com/sun/javafx/css/parser/CSSParser.java	Wed Feb 13 18:35:25 2013 -0500
@@ -69,7 +69,7 @@
 import com.sun.javafx.css.Size;
 import com.sun.javafx.css.SizeUnits;
 import com.sun.javafx.css.StyleManager;
-import com.sun.javafx.css.Styleable;
+import javafx.css.Styleable;
 import com.sun.javafx.css.Stylesheet;
 import com.sun.javafx.css.converters.BooleanConverter;
 import com.sun.javafx.css.converters.EffectConverter;
--- a/javafx-ui-common/src/javafx/css/CssMetaData.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/src/javafx/css/CssMetaData.java	Wed Feb 13 18:35:25 2013 -0500
@@ -106,16 +106,16 @@
  * @param <V> The type into which the parsed value is converted. 
  */
 @com.sun.javafx.beans.annotations.NoBuilder
-public abstract class CssMetaData<N extends Node, V> {
+public abstract class CssMetaData<S extends Styleable, V> {
     
     /**
      * Set the value of the corresponding property on the given Node.
-     * @param node The node on which the property value is being set
+     * @param styleable The Styleable on which the property value is being set
      * @param value The value to which the property is set
      */
-    public void set(N node, V value, StyleOrigin origin) {
+    public void set(S styleable, V value, StyleOrigin origin) {
         
-        final StyleableProperty<V> styleableProperty = getStyleableProperty(node);
+        final StyleableProperty<V> styleableProperty = getStyleableProperty(styleable);
         final StyleOrigin currentOrigin = styleableProperty.getStyleOrigin();  
         final V currentValue = styleableProperty.getValue();
         
@@ -137,18 +137,19 @@
      * is settable without expanding the property. Generally, the property is 
      * settable if it is not null or is not bound. 
      * 
-     * @param node The node on which the property value is being set
+     * @param styleable The Styleable on which the property value is being set
      * @return true if the property can be set.
      */
-    public abstract boolean isSettable(N node);
+    public abstract boolean isSettable(S styleable);
 
     /**
      * Return the corresponding {@link StyleableProperty} for the given Node. 
      * Note that calling this method will cause the property to be expanded. 
-     * @param node
-     * @return 
+     * @param styleable The Styleable for which the property is returned
+     * @return The StyleableProperty corresponding to this CssMetaData for the
+     * given Styleable
      */
-    public abstract StyleableProperty<V> getStyleableProperty(N node);
+    public abstract StyleableProperty<V> getStyleableProperty(S styleable);
             
     private final String property;
     /**
@@ -181,16 +182,16 @@
      * applied.
      * @return The initial value of the property, possibly null
      */
-    public V getInitialValue(N node) {
+    public V getInitialValue(S styleable) {
         return initialValue;
     }
     
-    private final List<CssMetaData<? extends Node, ?>> subProperties;
+    private final List<CssMetaData<? extends Styleable, ?>> subProperties;
     /**
      * The sub-properties refers to the constituent properties of this property,
      * if any. For example, "-fx-font-weight" is sub-property of "-fx-font".
      */
-    public final List<CssMetaData<? extends Node, ?>> getSubProperties() {
+    public final List<CssMetaData<? extends Styleable, ?>> getSubProperties() {
         return subProperties;
     }
 
@@ -220,7 +221,7 @@
             final StyleConverter<?,V> converter, 
             final V initialValue, 
             boolean inherits, 
-            final List<CssMetaData<? extends Node, ?>> subProperties) {        
+            final List<CssMetaData<? extends Styleable, ?>> subProperties) {        
         
         this.property = property;
         this.converter = converter;
@@ -283,7 +284,7 @@
         if (getClass() != obj.getClass()) {
             return false;
         }
-        final CssMetaData<? extends Node, ?> other = (CssMetaData<? extends Node, ?>) obj;
+        final CssMetaData<? extends Styleable, ?> other = (CssMetaData<? extends Styleable, ?>) obj;
         if ((this.property == null) ? (other.property != null) : !this.property.equals(other.property)) {
             return false;
         }
--- a/javafx-ui-common/src/javafx/css/FontCssMetaData.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/src/javafx/css/FontCssMetaData.java	Wed Feb 13 18:35:25 2013 -0500
@@ -42,7 +42,7 @@
  * @param N The type of Node
  */
 @com.sun.javafx.beans.annotations.NoBuilder
-public abstract class FontCssMetaData<N extends Node> extends CssMetaData<N, Font> {
+public abstract class FontCssMetaData<S extends Styleable> extends CssMetaData<S, Font> {
 
     /**
      * The property name is concatenated with &quot;-weight&quot;,
@@ -72,74 +72,74 @@
         super(property, FontConverter.getInstance(), initial, true, createSubProperties(property, initial));
     }
 
-    private static <N extends Node> List<CssMetaData<? extends Node, ?>> createSubProperties(String property, Font initial) {
+    private static <S extends Styleable> List<CssMetaData<? extends Styleable, ?>> createSubProperties(String property, Font initial) {
         
-        final List<CssMetaData<N, ?>> subProperties = 
-                new ArrayList<CssMetaData<N, ?>>();
+        final List<CssMetaData<S, ?>> subProperties = 
+                new ArrayList<CssMetaData<S, ?>>();
         
         final Font defaultFont = initial != null ? initial : Font.getDefault();
         
-        final CssMetaData<N, String> FAMILY = 
-                new CssMetaData<N, String>(property.concat("-family"), 
+        final CssMetaData<S, String> FAMILY = 
+                new CssMetaData<S, String>(property.concat("-family"), 
                 StringConverter.getInstance(), defaultFont.getFamily(), true) {
             @Override
-            public boolean isSettable(N node) {
+            public boolean isSettable(S styleable) {
                 return false;
             }
 
             @Override
-            public StyleableProperty<String> getStyleableProperty(N node) {
+            public StyleableProperty<String> getStyleableProperty(S styleable) {
                 return null;
             }
         };
         subProperties.add(FAMILY);
         
-        final CssMetaData<N, Number> SIZE = 
-                new CssMetaData<N, Number>(property.concat("-size"), 
+        final CssMetaData<S, Number> SIZE = 
+                new CssMetaData<S, Number>(property.concat("-size"), 
                 SizeConverter.getInstance(), defaultFont.getSize(), true) {
             @Override
-            public boolean isSettable(N node) {
+            public boolean isSettable(S styleable) {
                 return false;
             }
 
             @Override
-            public StyleableProperty<Number> getStyleableProperty(N node) {
+            public StyleableProperty<Number> getStyleableProperty(S styleable) {
                 return null;
             }
         };
         subProperties.add(SIZE);
         
-        final CssMetaData<N, FontPosture> STYLE = 
-                new CssMetaData<N, FontPosture>(property.concat("-style"), 
+        final CssMetaData<S, FontPosture> STYLE = 
+                new CssMetaData<S, FontPosture>(property.concat("-style"), 
                 FontConverter.FontStyleConverter.getInstance(), FontPosture.REGULAR, true) {
             @Override
-            public boolean isSettable(N node) {
+            public boolean isSettable(S styleable) {
                 return false;
             }
 
             @Override
-            public StyleableProperty<FontPosture> getStyleableProperty(N node) {
+            public StyleableProperty<FontPosture> getStyleableProperty(S styleable) {
                 return null;
             }
         };
         subProperties.add(STYLE);
         
-        final CssMetaData<N, FontWeight> WEIGHT = 
-                new CssMetaData<N, FontWeight>(property.concat("-weight"), 
+        final CssMetaData<S, FontWeight> WEIGHT = 
+                new CssMetaData<S, FontWeight>(property.concat("-weight"), 
                 FontConverter.FontWeightConverter.getInstance(), FontWeight.NORMAL, true) {
             @Override
-            public boolean isSettable(N node) {
+            public boolean isSettable(S styleable) {
                 return false;
             }
 
             @Override
-            public StyleableProperty<FontWeight> getStyleableProperty(N node) {
+            public StyleableProperty<FontWeight> getStyleableProperty(S styleable) {
                 return null;
             }
         };
         subProperties.add(WEIGHT);
         
-        return Collections.<CssMetaData<? extends Node, ?>>unmodifiableList(subProperties);
+        return Collections.<CssMetaData<? extends Styleable, ?>>unmodifiableList(subProperties);
     }
     
 }
--- a/javafx-ui-common/src/javafx/css/SimpleStyleableBooleanProperty.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/src/javafx/css/SimpleStyleableBooleanProperty.java	Wed Feb 13 18:35:25 2013 -0500
@@ -50,7 +50,7 @@
      * @param cssMetaData
      *            the CssMetaData associated with this {@code StyleableProperty}
      */
-    public SimpleStyleableBooleanProperty(CssMetaData<? extends Node, Boolean> cssMetaData) {
+    public SimpleStyleableBooleanProperty(CssMetaData<? extends Styleable, Boolean> cssMetaData) {
         super();
         this.cssMetaData = cssMetaData;
     }
@@ -63,7 +63,7 @@
      * @param initialValue
      *            the initial value of the wrapped {@code Object}
      */
-    public SimpleStyleableBooleanProperty(CssMetaData<? extends Node, Boolean> cssMetaData, boolean initialValue) {
+    public SimpleStyleableBooleanProperty(CssMetaData<? extends Styleable, Boolean> cssMetaData, boolean initialValue) {
         super(initialValue);
         this.cssMetaData = cssMetaData;
     }
@@ -78,7 +78,7 @@
      * @param name
      *            the name of this {@code BooleanProperty}
      */
-    public SimpleStyleableBooleanProperty(CssMetaData<? extends Node, Boolean> cssMetaData, Object bean, String name) {
+    public SimpleStyleableBooleanProperty(CssMetaData<? extends Styleable, Boolean> cssMetaData, Object bean, String name) {
         super(bean, name);
         this.cssMetaData = cssMetaData;
     }
@@ -95,7 +95,7 @@
      * @param initialValue
      *            the initial value of the wrapped {@code Object}
      */
-    public SimpleStyleableBooleanProperty(CssMetaData<? extends Node, Boolean> cssMetaData, Object bean, String name, boolean initialValue) {
+    public SimpleStyleableBooleanProperty(CssMetaData<? extends Styleable, Boolean> cssMetaData, Object bean, String name, boolean initialValue) {
         super(bean, name, initialValue);
         this.cssMetaData = cssMetaData;
     }
@@ -128,11 +128,11 @@
 
     /** {@inheritDoc} */
     @Override
-    public final CssMetaData<? extends Node, Boolean> getCssMetaData() {
+    public final CssMetaData<? extends Styleable, Boolean> getCssMetaData() {
         return cssMetaData;
     }
 
     private StyleOrigin origin = null;
-    private final CssMetaData<? extends Node, Boolean> cssMetaData;
+    private final CssMetaData<? extends Styleable, Boolean> cssMetaData;
 
 }
--- a/javafx-ui-common/src/javafx/css/SimpleStyleableDoubleProperty.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/src/javafx/css/SimpleStyleableDoubleProperty.java	Wed Feb 13 18:35:25 2013 -0500
@@ -50,7 +50,7 @@
      * @param cssMetaData
      *            the CssMetaData associated with this {@code StyleableProperty}
      */
-    public SimpleStyleableDoubleProperty(CssMetaData<? extends Node, Number> cssMetaData) {
+    public SimpleStyleableDoubleProperty(CssMetaData<? extends Styleable, Number> cssMetaData) {
         super();
         this.cssMetaData = cssMetaData;
     }
@@ -63,7 +63,7 @@
      * @param initialValue
      *            the initial value of the wrapped {@code Object}
      */
-    public SimpleStyleableDoubleProperty(CssMetaData<? extends Node, Number> cssMetaData, double initialValue) {
+    public SimpleStyleableDoubleProperty(CssMetaData<? extends Styleable, Number> cssMetaData, double initialValue) {
         super(initialValue);
         this.cssMetaData = cssMetaData;
     }
@@ -78,7 +78,7 @@
      * @param name
      *            the name of this {@code DoubleProperty}
      */
-    public SimpleStyleableDoubleProperty(CssMetaData<? extends Node, Number> cssMetaData, Object bean, String name) {
+    public SimpleStyleableDoubleProperty(CssMetaData<? extends Styleable, Number> cssMetaData, Object bean, String name) {
         super(bean, name);
         this.cssMetaData = cssMetaData;
     }
@@ -95,7 +95,7 @@
      * @param initialValue
      *            the initial value of the wrapped {@code Object}
      */
-    public SimpleStyleableDoubleProperty(CssMetaData<? extends Node, Number> cssMetaData, Object bean, String name, double initialValue) {
+    public SimpleStyleableDoubleProperty(CssMetaData<? extends Styleable, Number> cssMetaData, Object bean, String name, double initialValue) {
         super(bean, name, initialValue);
         this.cssMetaData = cssMetaData;
     }
@@ -128,10 +128,10 @@
 
     /** {@inheritDoc} */
     @Override
-    public final CssMetaData<? extends Node, Number> getCssMetaData() {
+    public final CssMetaData<? extends Styleable, Number> getCssMetaData() {
         return cssMetaData;
     }
 
     private StyleOrigin origin = null;
-    private final CssMetaData<? extends Node, Number> cssMetaData;
+    private final CssMetaData<? extends Styleable, Number> cssMetaData;
 }
--- a/javafx-ui-common/src/javafx/css/SimpleStyleableFloatProperty.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/src/javafx/css/SimpleStyleableFloatProperty.java	Wed Feb 13 18:35:25 2013 -0500
@@ -50,7 +50,7 @@
      * @param cssMetaData
      *            the CssMetaData associated with this {@code StyleableProperty}
      */
-    public SimpleStyleableFloatProperty(CssMetaData<? extends Node, Number> cssMetaData) {
+    public SimpleStyleableFloatProperty(CssMetaData<? extends Styleable, Number> cssMetaData) {
         super();
         this.cssMetaData = cssMetaData;
     }
@@ -63,7 +63,7 @@
      * @param initialValue
      *            the initial value of the wrapped {@code Object}
      */
-    public SimpleStyleableFloatProperty(CssMetaData<? extends Node, Number> cssMetaData, float initialValue) {
+    public SimpleStyleableFloatProperty(CssMetaData<? extends Styleable, Number> cssMetaData, float initialValue) {
         super(initialValue);
         this.cssMetaData = cssMetaData;
     }
@@ -78,7 +78,7 @@
      * @param name
      *            the name of this {@code FloatProperty}
      */
-    public SimpleStyleableFloatProperty(CssMetaData<? extends Node, Number> cssMetaData, Object bean, String name) {
+    public SimpleStyleableFloatProperty(CssMetaData<? extends Styleable, Number> cssMetaData, Object bean, String name) {
         super(bean, name);
         this.cssMetaData = cssMetaData;
     }
@@ -95,7 +95,7 @@
      * @param initialValue
      *            the initial value of the wrapped {@code Object}
      */
-    public SimpleStyleableFloatProperty(CssMetaData<? extends Node, Number> cssMetaData, Object bean, String name, float initialValue) {
+    public SimpleStyleableFloatProperty(CssMetaData<? extends Styleable, Number> cssMetaData, Object bean, String name, float initialValue) {
         super(bean, name, initialValue);
         this.cssMetaData = cssMetaData;
     }
@@ -127,11 +127,11 @@
 
     /** {@inheritDoc} */
     @Override
-    public final CssMetaData<? extends Node, Number> getCssMetaData() {
+    public final CssMetaData<? extends Styleable, Number> getCssMetaData() {
         return cssMetaData;
     }
 
     private StyleOrigin origin = null;
-    private final CssMetaData<? extends Node, Number> cssMetaData;
+    private final CssMetaData<? extends Styleable, Number> cssMetaData;
 
 }
--- a/javafx-ui-common/src/javafx/css/SimpleStyleableIntegerProperty.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/src/javafx/css/SimpleStyleableIntegerProperty.java	Wed Feb 13 18:35:25 2013 -0500
@@ -50,7 +50,7 @@
      * @param cssMetaData
      *            the CssMetaData associated with this {@code StyleableProperty}
      */
-    public SimpleStyleableIntegerProperty(CssMetaData<? extends Node, Number> cssMetaData) {
+    public SimpleStyleableIntegerProperty(CssMetaData<? extends Styleable, Number> cssMetaData) {
         super();
         this.cssMetaData = cssMetaData;
     }
@@ -63,7 +63,7 @@
      * @param initialValue
      *            the initial value of the wrapped {@code Object}
      */
-    public SimpleStyleableIntegerProperty(CssMetaData<? extends Node, Number> cssMetaData, int initialValue) {
+    public SimpleStyleableIntegerProperty(CssMetaData<? extends Styleable, Number> cssMetaData, int initialValue) {
         super(initialValue);
         this.cssMetaData = cssMetaData;
     }
@@ -78,7 +78,7 @@
      * @param name
      *            the name of this {@code IntegerProperty}
      */
-    public SimpleStyleableIntegerProperty(CssMetaData<? extends Node, Number> cssMetaData, Object bean, String name) {
+    public SimpleStyleableIntegerProperty(CssMetaData<? extends Styleable, Number> cssMetaData, Object bean, String name) {
         super(bean, name);
         this.cssMetaData = cssMetaData;
     }
@@ -95,7 +95,7 @@
      * @param initialValue
      *            the initial value of the wrapped {@code Object}
      */
-    public SimpleStyleableIntegerProperty(CssMetaData<? extends Node, Number> cssMetaData, Object bean, String name, int initialValue) {
+    public SimpleStyleableIntegerProperty(CssMetaData<? extends Styleable, Number> cssMetaData, Object bean, String name, int initialValue) {
         super(bean, name, initialValue);
         this.cssMetaData = cssMetaData;
     }
@@ -127,11 +127,11 @@
 
     /** {@inheritDoc} */
     @Override
-    public final CssMetaData<? extends Node, Number> getCssMetaData() {
+    public final CssMetaData<? extends Styleable, Number> getCssMetaData() {
         return cssMetaData;
     }
 
     private StyleOrigin origin = null;
-    private final CssMetaData<? extends Node, Number> cssMetaData;
+    private final CssMetaData<? extends Styleable, Number> cssMetaData;
 
 }
--- a/javafx-ui-common/src/javafx/css/SimpleStyleableLongProperty.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/src/javafx/css/SimpleStyleableLongProperty.java	Wed Feb 13 18:35:25 2013 -0500
@@ -50,7 +50,7 @@
      * @param cssMetaData
      *            the CssMetaData associated with this {@code StyleableProperty}
      */
-    public SimpleStyleableLongProperty(CssMetaData<? extends Node, Number> cssMetaData) {
+    public SimpleStyleableLongProperty(CssMetaData<? extends Styleable, Number> cssMetaData) {
         super();
         this.cssMetaData = cssMetaData;
     }
@@ -63,7 +63,7 @@
      * @param initialValue
      *            the initial value of the wrapped {@code Object}
      */
-    public SimpleStyleableLongProperty(CssMetaData<? extends Node, Number> cssMetaData, long initialValue) {
+    public SimpleStyleableLongProperty(CssMetaData<? extends Styleable, Number> cssMetaData, long initialValue) {
         super(initialValue);
         this.cssMetaData = cssMetaData;
     }
@@ -78,7 +78,7 @@
      * @param name
      *            the name of this {@code LongProperty}
      */
-    public SimpleStyleableLongProperty(CssMetaData<? extends Node, Number> cssMetaData, Object bean, String name) {
+    public SimpleStyleableLongProperty(CssMetaData<? extends Styleable, Number> cssMetaData, Object bean, String name) {
         super(bean, name);
         this.cssMetaData = cssMetaData;
     }
@@ -95,7 +95,7 @@
      * @param initialValue
      *            the initial value of the wrapped {@code Object}
      */
-    public SimpleStyleableLongProperty(CssMetaData<? extends Node, Number> cssMetaData, Object bean, String name, long initialValue) {
+    public SimpleStyleableLongProperty(CssMetaData<? extends Styleable, Number> cssMetaData, Object bean, String name, long initialValue) {
         super(bean, name, initialValue);
         this.cssMetaData = cssMetaData;
     }
@@ -127,11 +127,11 @@
 
     /** {@inheritDoc} */
     @Override
-    public final CssMetaData<? extends Node, Number> getCssMetaData() {
+    public final CssMetaData<? extends Styleable, Number> getCssMetaData() {
         return cssMetaData;
     }
 
     private StyleOrigin origin = null;
-    private final CssMetaData<? extends Node, Number> cssMetaData;
+    private final CssMetaData<? extends Styleable, Number> cssMetaData;
 
 }
--- a/javafx-ui-common/src/javafx/css/SimpleStyleableObjectProperty.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/src/javafx/css/SimpleStyleableObjectProperty.java	Wed Feb 13 18:35:25 2013 -0500
@@ -50,7 +50,7 @@
      * @param cssMetaData
      *            the CssMetaData associated with this {@code StyleableProperty}
      */
-    public SimpleStyleableObjectProperty(CssMetaData<? extends Node, T> cssMetaData) {
+    public SimpleStyleableObjectProperty(CssMetaData<? extends Styleable, T> cssMetaData) {
         super();
         this.cssMetaData = cssMetaData;
     }
@@ -63,7 +63,7 @@
      * @param initialValue
      *            the initial value of the wrapped {@code Object}
      */
-    public SimpleStyleableObjectProperty(CssMetaData<? extends Node, T> cssMetaData, T initialValue) {
+    public SimpleStyleableObjectProperty(CssMetaData<? extends Styleable, T> cssMetaData, T initialValue) {
         super(initialValue);
         this.cssMetaData = cssMetaData;
     }
@@ -78,7 +78,7 @@
      * @param name
      *            the name of this {@code ObjectProperty}
      */
-    public SimpleStyleableObjectProperty(CssMetaData<? extends Node, T> cssMetaData, Object bean, String name) {
+    public SimpleStyleableObjectProperty(CssMetaData<? extends Styleable, T> cssMetaData, Object bean, String name) {
         super(bean, name);
         this.cssMetaData = cssMetaData;
     }
@@ -110,10 +110,10 @@
 
     /** {@inheritDoc} */
     @Override
-    public final CssMetaData<? extends Node, T> getCssMetaData() {
+    public final CssMetaData<? extends Styleable, T> getCssMetaData() {
         return cssMetaData;
     }
 
     private StyleOrigin origin = null;
-    private final CssMetaData<? extends Node, T> cssMetaData;
+    private final CssMetaData<? extends Styleable, T> cssMetaData;
 }
--- a/javafx-ui-common/src/javafx/css/SimpleStyleableStringProperty.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/src/javafx/css/SimpleStyleableStringProperty.java	Wed Feb 13 18:35:25 2013 -0500
@@ -50,7 +50,7 @@
      * @param cssMetaData
      *            the CssMetaData associated with this {@code StyleableProperty}
      */
-    public SimpleStyleableStringProperty(CssMetaData<? extends Node, String> cssMetaData) {
+    public SimpleStyleableStringProperty(CssMetaData<? extends Styleable, String> cssMetaData) {
         super();
         this.cssMetaData = cssMetaData;
     }
@@ -63,7 +63,7 @@
      * @param initialValue
      *            the initial value of the wrapped {@code Object}
      */
-    public SimpleStyleableStringProperty(CssMetaData<? extends Node, String> cssMetaData, String initialValue) {
+    public SimpleStyleableStringProperty(CssMetaData<? extends Styleable, String> cssMetaData, String initialValue) {
         super(initialValue);
         this.cssMetaData = cssMetaData;
     }
@@ -78,7 +78,7 @@
      * @param name
      *            the name of this {@code StringProperty}
      */
-    public SimpleStyleableStringProperty(CssMetaData<? extends Node, String> cssMetaData, Object bean, String name) {
+    public SimpleStyleableStringProperty(CssMetaData<? extends Styleable, String> cssMetaData, Object bean, String name) {
         super(bean, name);
         this.cssMetaData = cssMetaData;
     }
@@ -111,11 +111,11 @@
 
     /** {@inheritDoc} */
     @Override
-    public final CssMetaData<? extends Node, String> getCssMetaData() {
+    public final CssMetaData<? extends Styleable, String> getCssMetaData() {
         return cssMetaData;
     }
 
     private StyleOrigin origin = null;
-    private final CssMetaData<? extends Node, String> cssMetaData;
+    private final CssMetaData<? extends Styleable, String> cssMetaData;
 
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/src/javafx/css/Styleable.java	Wed Feb 13 18:35:25 2013 -0500
@@ -0,0 +1,87 @@
+/*
+ *  Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ *  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ * 
+ *  This code is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License version 2 only, as
+ *  published by the Free Software Foundation.  Oracle designates this
+ *  particular file as subject to the "Classpath" exception as provided
+ *  by Oracle in the LICENSE file that accompanied this code.
+ * 
+ *  This code is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ *  version 2 for more details (a copy is included in the LICENSE file that
+ *  accompanied this code).
+ * 
+ *  You should have received a copy of the GNU General Public License version
+ *  2 along with this work; if not, write to the Free Software Foundation,
+ *  Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ * 
+ *  Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ *  or visit www.oracle.com if you need additional information or have any
+ *  questions.
+ */
+package javafx.css;
+
+import java.util.List;
+
+/** 
+ * Styleable comprises the minimal interface required for an object to be 
+ * styled by CSS.
+ */
+public interface Styleable { 
+
+    /** 
+     * The type of this {@code Styleable} that is to be used in selector matching. 
+     * This is analogous to an "element" in HTML. 
+     * (<a href="http://www.w3.org/TR/CSS2/selector.html#type-selectors">CSS Type Selector</a>). 
+     */ 
+    String getTypeSelector(); 
+
+    /** 
+     * The id of this {@code Styleable}. This simple string identifier is useful for 
+     * finding a specific Node within the scene graph. While the id of a Node 
+     * should be unique within the scene graph, this uniqueness is not enforced. 
+     * This is analogous to the "id" attribute on an HTML element 
+     * (<a href="http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier">CSS ID Specification</a>). 
+     * <p> 
+     * For example, if a Node is given the id of "myId", then the lookup method can 
+     * be used to find this node as follows: <code>scene.lookup("#myId");</code>. 
+     * </p> 
+     */ 
+    String getId(); 
+
+    /** 
+     * A list of String identifiers which can be used to logically group 
+     * Nodes, specifically for an external style engine. This variable is 
+     * analogous to the "class" attribute on an HTML element and, as such, 
+     * each element of the list is a style class to which this Node belongs. 
+     * 
+     * @see <a href="http://www.w3.org/TR/css3-selectors/#class-html">CSS3 class selectors</a> 
+     */ 
+   List<String> getStyleClass(); 
+
+    /** 
+     * A string representation of the CSS style associated with this 
+     * specific {@code Node}. This is analogous to the "style" attribute of an 
+     * HTML element. Note that, like the HTML style attribute, this 
+     * variable contains style properties and values and not the 
+     * selector portion of a style rule. 
+     */ 
+   String getStyle(); 
+     
+    /**
+     * The CssMetaData of this Styleable. This may be returned as
+     * an unmodifiable list.
+     *
+     */
+     
+    List<CssMetaData<? extends Styleable, ?>> getCssMetaData(); 
+            
+    /** 
+     * Return the parent of this Styleable, or null if there is no parent. 
+     */ 
+    Styleable getStyleableParent(); 
+     
+}
--- a/javafx-ui-common/src/javafx/css/StyleableProperty.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/src/javafx/css/StyleableProperty.java	Wed Feb 13 18:35:25 2013 -0500
@@ -60,6 +60,6 @@
      * Reflect back the CssMetaData that corresponds to this 
      * <code>javafx.beans.property.StyleableProperty</code>
      */
-    CssMetaData<? extends Node, T> getCssMetaData();
+    CssMetaData<? extends Styleable, T> getCssMetaData();
        
 }
--- a/javafx-ui-common/src/javafx/css/package.html	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/src/javafx/css/package.html	Wed Feb 13 18:35:25 2013 -0500
@@ -26,7 +26,7 @@
 <dd>Defines the CSS property and provides a link back to the 
     {@link javafx.css.StyleableProperty StyleableProperty}.
     By convention, classes that have CssMetaData implement a 
-    {@code public static List<CssMetaData<? extends Node, ?>> getClassCssMetaData()} method that 
+    {@code public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData()} method that 
     allows other classes to include CssMetaData from an inherited class. The
     method {@link javafx.scene.Node#getCssMetaData() getCssMetaData()} should 
     be overridden to return {@code getClassCssMetaData()}. The CSS implementation
--- a/javafx-ui-common/src/javafx/scene/Node.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/src/javafx/scene/Node.java	Wed Feb 13 18:35:25 2013 -0500
@@ -109,7 +109,7 @@
 import javafx.css.StyleConverter;
 import com.sun.javafx.css.StyleHelper;
 import com.sun.javafx.css.StyleManager;
-import com.sun.javafx.css.Styleable;
+import javafx.css.Styleable;
 import javafx.css.StyleableBooleanProperty;
 import javafx.css.StyleableDoubleProperty;
 import javafx.css.StyleableObjectProperty;
@@ -362,7 +362,7 @@
  * Guide</a>.
  */
 @IDProperty("id")
-public abstract class Node implements EventTarget {
+public abstract class Node implements EventTarget, Styleable {
 
      static {
           PerformanceTracker.logEvent("Node class loaded");
@@ -598,16 +598,6 @@
      public final ObservableMap<Object, Object> getProperties() {
         if (properties == null) {
             properties = FXCollections.observableMap(new HashMap<Object, Object>());
-            if (PSEUDO_CLASS_OVERRIDE_ENABLED) {
-                // listen for when the user sets the PSEUDO_CLASS_OVERRIDE_KEY to new value
-                properties.addListener(new MapChangeListener<Object,Object>(){
-                    @Override public void onChanged(Change<? extends Object, ? extends Object> change) {
-                        if (PSEUDO_CLASS_OVERRIDE_KEY.equals(change.getKey()) && getScene() != null) {
-                            updatePseudoClassOverride();
-                        }
-                    }
-                });
-            }
         }
         return properties;
     }
@@ -780,11 +770,6 @@
             }
 
             oldScene = _scene;
-            // we need to check if a override has been set, if so we need to apply it to the node now
-            // that it may have a valid scene
-            if (PSEUDO_CLASS_OVERRIDE_ENABLED) {
-                updatePseudoClassOverride();
-            }
         }
 
         @Override
@@ -7662,58 +7647,38 @@
      *                                                                         *
      **************************************************************************/
 
-    private Styleable styleable; 
-    /**
-     * RT-19263
-     * @treatAsPrivate implementation detail
-     * @deprecated This is an experimental API that is not intended for general use and is subject to change in future versions
-     */    
-    @Deprecated // SB-dependency: RT-21094 has been filed to track this
-    public final Styleable impl_getStyleable() {
+
+    /** 
+     * {@inheritDoc} 
+     * @return {@code getClass().getName()} without the package name
+     */
+    @Override
+    public String getTypeSelector() {
         
-        if (styleable == null) {
-            styleable = new Styleable() {
-
-                Styleable styleableParent = null;
-
-                @Override
-                public String getId() {
-                    return Node.this.getId();
-                }
-
-                @Override
-                public List<String> getStyleClass() {
-                    return Node.this.getStyleClass();
-                }
-
-                @Override
-                public String getStyle() {
-                    return Node.this.getStyle();
-                }
-
-                @Override
-                public Styleable getStyleableParent() {
-                    Parent parent = null;
-                    if (styleableParent == null && (parent = Node.this.getParent()) != null) {
-                        styleableParent = parent.impl_getStyleable();
-                    };
-                    return styleableParent;
-                }
-
-                @Override
-                public List<CssMetaData<? extends Node, ?>> getCssMetaData() {
-                    return Node.this.getCssMetaData();
-                }                
+        final Class<?> clazz = getClass();
+        final Package pkg = clazz.getPackage();
+        
+        // package could be null. not likely, but could be.
+        int plen = 0;
+        if (pkg != null) {
+            plen = pkg.getName().length();
+        }
                 
-                @Override
-                public Node getNode() {
-                    return Node.this;
-                }
-
-           };
-        }
-        return styleable;
-    }
+        final int clen = clazz.getName().length();
+        final int pos = (0 < plen && plen < clen) ? plen + 1 : 0;
+        
+        return clazz.getName().substring(pos);
+    }
+
+    /** 
+     * {@inheritDoc} 
+     * @return {@code getParent()}
+     */
+    @Override
+    public Styleable getStyleableParent() {
+        return getParent();
+    }
+
          
      /**
       * Not everything uses the default value of false for focusTraversable. 
@@ -7961,12 +7926,12 @@
                 }
             };
 
-         private static final List<CssMetaData<? extends Node, ?>> STYLEABLES;
+         private static final List<CssMetaData<? extends Styleable, ?>> STYLEABLES;
 
          static {
 
-             final List<CssMetaData<? extends Node, ?>> styleables = 
-                     new ArrayList<CssMetaData<? extends Node, ?>>();
+             final List<CssMetaData<? extends Styleable, ?>> styleables = 
+                     new ArrayList<CssMetaData<? extends Styleable, ?>>();
              styleables.add(CURSOR); 
              styleables.add(EFFECT);
              styleables.add(FOCUS_TRAVERSABLE);
@@ -7989,7 +7954,7 @@
      * @return The CssMetaData associated with this class, which may include the
      * CssMetaData of its super classes.
      */
-    public static List<CssMetaData<? extends Node, ?>> getClassCssMetaData() {
+    public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
         //
         // Super-lazy instantiation pattern from Bill Pugh. StyleableProperties 
         // is referenced no earlier (and therefore loaded no earlier by the 
@@ -8008,7 +7973,8 @@
      * CssMetaData of its super classes.
      */
     
-    public List<CssMetaData<? extends Node, ?>> getCssMetaData() {
+    @Override
+    public List<CssMetaData<? extends Styleable, ?>> getCssMetaData() {
         return getClassCssMetaData();
     }
      
@@ -8019,7 +7985,7 @@
       */
      @Deprecated // SB-dependency: RT-21096 has been filed to track this
      public final ObservableMap<StyleableProperty<?>, List<Style>> impl_getStyleMap() {
-         return impl_getStyleable().getStyleMap();
+         return styleHelper.getObservableStyleMap();
      }
 
      /**
@@ -8029,7 +7995,7 @@
       */
      @Deprecated // SB-dependency: RT-21096 has been filed to track this
      public final void impl_setStyleMap(ObservableMap<StyleableProperty<?>, List<Style>> styleMap) {
-         impl_getStyleable().setStyleMap(styleMap);
+         styleHelper.setObservableStyleMap(styleMap);
      }
           
     /**
@@ -8088,12 +8054,6 @@
      * @param active whether or not the state is active
      */
     public final void pseudoClassStateChanged(PseudoClass pseudoClass, boolean active) {
-        // check if a override has been set, if so ignore all calls
-        if (PSEUDO_CLASS_OVERRIDE_ENABLED && hasProperties()) {
-            final Object pseudoClassOverride = getProperties().get(PSEUDO_CLASS_OVERRIDE_KEY);
-            if (pseudoClassOverride instanceof String) return;
-        }
-
         final Set<PseudoClass> pseudoClassState = styleHelper.getPseudoClassSet();
         
         if (active) {
@@ -8151,7 +8111,7 @@
         // a parent or from the scene. This has to be done before calling 
         // impl_reapplyCSS.
         //
-        final List<CssMetaData<? extends Node, ?>> metaDataList = getCssMetaData();
+        final List<CssMetaData<? extends Styleable, ?>> metaDataList = getCssMetaData();
         final int nStyleables = metaDataList != null ? metaDataList.size() : 0;
         for (int n=0; n<nStyleables; n++) {
             final CssMetaData metaData = metaDataList.get(n);
@@ -8310,31 +8270,6 @@
     private static final PseudoClass FOCUSED_PSEUDOCLASS_STATE = PseudoClass.getPseudoClass("focused");
     private static final PseudoClass SHOW_MNEMONICS_PSEUDOCLASS_STATE = PseudoClass.getPseudoClass("show-mnemonics");
 
-    private static final boolean PSEUDO_CLASS_OVERRIDE_ENABLED = AccessController.doPrivileged(
-            new PrivilegedAction<Boolean>() {
-                public Boolean run() {
-                    return Boolean.getBoolean("javafx.pseudoClassOverrideEnabled");
-                }
-            });
-    private static final String PSEUDO_CLASS_OVERRIDE_KEY = "javafx.scene.Node.pseudoClassOverride";
-
-    /**
-     * Called to get current pseudo class override and apply it to this node
-     */
-    private void updatePseudoClassOverride() {
-        if (PSEUDO_CLASS_OVERRIDE_ENABLED && properties != null) {
-            final Object pseudoClassOverride = getProperties().get(PSEUDO_CLASS_OVERRIDE_KEY);
-            if (pseudoClassOverride instanceof String) {
-                final Set<PseudoClass> pseudoClassState = styleHelper.getPseudoClassSet();
-                pseudoClassState.clear();
-                final String[] pseudoClasses = ((String)pseudoClassOverride).split("[\\s,]+");
-                for(String pc: pseudoClasses) {
-                    pseudoClassState.add(PseudoClass.getPseudoClass(pc));
-                }
-            }
-        }
-    }
-
     private static abstract class LazyTransformProperty
             extends ReadOnlyObjectProperty<Transform> {
 
--- a/javafx-ui-common/src/javafx/scene/image/ImageView.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/src/javafx/scene/image/ImageView.java	Wed Feb 13 18:35:25 2013 -0500
@@ -30,7 +30,6 @@
 import java.util.List;
 
 import javafx.beans.Observable;
-import javafx.beans.value.WritableValue;
 import javafx.geometry.Rectangle2D;
 import javafx.scene.Node;
 
@@ -50,6 +49,7 @@
 import java.net.URL;
 import javafx.beans.DefaultProperty;
 import javafx.beans.property.*;
+import javafx.css.Styleable;
 import javafx.css.StyleableProperty;
 import javafx.geometry.NodeOrientation;
 
@@ -279,7 +279,7 @@
                 }
 
                 @Override
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<ImageView,String> getCssMetaData() {
                     return StyleableProperties.IMAGE;
                 }
                 
@@ -814,10 +814,10 @@
             }
         };
             
-         private static final List<CssMetaData<? extends Node, ?>> STYLEABLES;
+         private static final List<CssMetaData<? extends Styleable, ?>> STYLEABLES;
          static {
-            final List<CssMetaData<? extends Node, ?>> styleables = 
-		new ArrayList<CssMetaData<? extends Node, ?>>(Node.getClassCssMetaData());
+            final List<CssMetaData<? extends Styleable, ?>> styleables = 
+		new ArrayList<CssMetaData<? extends Styleable, ?>>(Node.getClassCssMetaData());
             styleables.add(IMAGE);
             STYLEABLES = Collections.unmodifiableList(styleables);
          }
@@ -827,7 +827,7 @@
      * @return The CssMetaData associated with this class, which may include the
      * CssMetaData of its super classes.
      */
-    public static List<CssMetaData<? extends Node, ?>> getClassCssMetaData() {
+    public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
         return StyleableProperties.STYLEABLES;
     }
 
@@ -836,8 +836,9 @@
      *
      */
     
+    
     @Override
-    public List<CssMetaData<? extends Node, ?>> getCssMetaData() {
+    public List<CssMetaData<? extends Styleable, ?>> getCssMetaData() {
         return getClassCssMetaData();
     }
 
--- a/javafx-ui-common/src/javafx/scene/layout/Background.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/src/javafx/scene/layout/Background.java	Wed Feb 13 18:35:25 2013 -0500
@@ -43,6 +43,7 @@
 import com.sun.javafx.scene.layout.region.LayeredBackgroundSizeConverter;
 import com.sun.javafx.scene.layout.region.RepeatStruct;
 import com.sun.javafx.scene.layout.region.RepeatStructConverter;
+import javafx.css.Styleable;
 
 /**
  * The Background of a {@link Region}. A Background is an immutable object which
@@ -102,8 +103,8 @@
                     LayeredBackgroundSizeConverter.getInstance(),
                     new BackgroundSize[] { BackgroundSize.DEFAULT } );
 
-    private static final List<CssMetaData<? extends Node, ?>> STYLEABLES =
-            (List<CssMetaData<? extends Node, ?>>) (List) Collections.unmodifiableList(
+    private static final List<CssMetaData<? extends Styleable, ?>> STYLEABLES =
+            (List<CssMetaData<? extends Styleable, ?>>) (List) Collections.unmodifiableList(
                     // Unchecked!
                     Arrays.asList(BACKGROUND_COLOR,
                             BACKGROUND_INSETS,
@@ -117,7 +118,7 @@
      * @return The CssMetaData associated with this class, which may include the
      * CssMetaData of its super classes.
      */
-    public static List<CssMetaData<? extends Node, ?>> getClassCssMetaData() {
+    public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
         return STYLEABLES;
     }
 
--- a/javafx-ui-common/src/javafx/scene/layout/BackgroundConverter.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/src/javafx/scene/layout/BackgroundConverter.java	Wed Feb 13 18:35:25 2013 -0500
@@ -24,16 +24,16 @@
 
 package javafx.scene.layout;
 
+import com.sun.javafx.css.StyleConverterImpl;
+import com.sun.javafx.scene.layout.region.RepeatStruct;
 import java.util.Map;
+import javafx.css.CssMetaData;
+import javafx.css.ParsedValue;
+import javafx.css.StyleConverter;
+import javafx.css.Styleable;
 import javafx.geometry.Insets;
 import javafx.scene.image.Image;
 import javafx.scene.paint.Paint;
-import javafx.css.ParsedValue;
-import javafx.css.CssMetaData;
-import com.sun.javafx.css.StyleConverterImpl;
-import com.sun.javafx.scene.layout.region.RepeatStruct;
-import javafx.css.StyleConverter;
-import javafx.scene.Node;
 
 /**
  * Converts the CSS for -fx-background items into a Background.
@@ -42,7 +42,7 @@
 
     static final StyleConverter<ParsedValue[], Background> INSTANCE = new BackgroundConverter();
 
-    @Override public Background convert(Map<CssMetaData<? extends Node, ?>,Object> convertedValues) {
+    @Override public Background convert(Map<CssMetaData<? extends Styleable, ?>,Object> convertedValues) {
         final Paint[] fills = (Paint[]) convertedValues.get(Background.BACKGROUND_COLOR);
         final String[] imageUrls = (String[]) convertedValues.get(Background.BACKGROUND_IMAGE);
         final boolean hasFills = fills != null && fills.length > 0;
--- a/javafx-ui-common/src/javafx/scene/layout/Border.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/src/javafx/scene/layout/Border.java	Wed Feb 13 18:35:25 2013 -0500
@@ -43,6 +43,7 @@
 import com.sun.javafx.scene.layout.region.RepeatStruct;
 import com.sun.javafx.scene.layout.region.RepeatStructConverter;
 import com.sun.javafx.scene.layout.region.SliceSequenceConverter;
+import javafx.css.Styleable;
 
 /**
  * The Border of a {@link Region}. A Border is an immutable object which
@@ -126,8 +127,8 @@
                     InsetsConverter.SequenceConverter.getInstance(),
                     new Insets[] {Insets.EMPTY});
 
-    private static final List<CssMetaData<? extends Node, ?>> STYLEABLES =
-            (List<CssMetaData<? extends Node, ?>>) (List) Collections.unmodifiableList(
+    private static final List<CssMetaData<? extends Styleable, ?>> STYLEABLES =
+            (List<CssMetaData<? extends Styleable, ?>>) (List) Collections.unmodifiableList(
                     // Unchecked!
                     Arrays.asList(BORDER_COLOR,
                             BORDER_STYLE,
@@ -144,7 +145,7 @@
      * @return The CssMetaData associated with this class, which may include the
      * CssMetaData of its super classes.
      */
-    public static List<CssMetaData<? extends Node, ?>> getClassCssMetaData() {
+    public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
         return STYLEABLES;
     }
 
--- a/javafx-ui-common/src/javafx/scene/layout/BorderConverter.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/src/javafx/scene/layout/BorderConverter.java	Wed Feb 13 18:35:25 2013 -0500
@@ -24,17 +24,17 @@
 
 package javafx.scene.layout;
 
+import com.sun.javafx.css.StyleConverterImpl;
+import com.sun.javafx.scene.layout.region.BorderImageSlices;
+import com.sun.javafx.scene.layout.region.Margins;
+import com.sun.javafx.scene.layout.region.RepeatStruct;
 import java.util.Map;
+import javafx.css.CssMetaData;
+import javafx.css.ParsedValue;
+import javafx.css.Styleable;
 import javafx.geometry.Insets;
 import javafx.scene.image.Image;
 import javafx.scene.paint.Paint;
-import javafx.css.ParsedValue;
-import com.sun.javafx.css.StyleConverterImpl;
-import javafx.css.CssMetaData;
-import com.sun.javafx.scene.layout.region.BorderImageSlices;
-import com.sun.javafx.scene.layout.region.Margins;
-import com.sun.javafx.scene.layout.region.RepeatStruct;
-import javafx.scene.Node;
 
 /**
  */
@@ -51,7 +51,7 @@
     private BorderConverter() { }
 
     @Override
-    public Border convert(Map<CssMetaData<? extends Node, ?>, Object> convertedValues) {
+    public Border convert(Map<CssMetaData<? extends Styleable, ?>, Object> convertedValues) {
         final Paint[][] strokeFills = (Paint[][])convertedValues.get(Border.BORDER_COLOR);
         final String[] imageUrls = (String[]) convertedValues.get(Border.BORDER_IMAGE_SOURCE);
         final boolean hasStrokes = strokeFills != null && strokeFills.length > 0;
--- a/javafx-ui-common/src/javafx/scene/layout/FlowPane.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/src/javafx/scene/layout/FlowPane.java	Wed Feb 13 18:35:25 2013 -0500
@@ -44,6 +44,7 @@
 import javafx.scene.Node;
 import com.sun.javafx.css.converters.EnumConverter;
 import com.sun.javafx.css.converters.SizeConverter;
+import javafx.css.Styleable;
 
 import static javafx.geometry.Orientation.*;
 
@@ -287,7 +288,7 @@
                 }
                 
                 @Override
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<FlowPane, Orientation> getCssMetaData() {
                     return StyleableProperties.ORIENTATION;
                 }
 
@@ -323,7 +324,7 @@
                 }
                 
                 @Override
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<FlowPane, Number> getCssMetaData() {
                     return StyleableProperties.HGAP;
                 }
 
@@ -358,7 +359,7 @@
                 }
 
                 @Override
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<FlowPane, Number> getCssMetaData() {
                     return StyleableProperties.VGAP;
                 }
 
@@ -438,7 +439,7 @@
                 }
                 
                 @Override
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<FlowPane, Pos> getCssMetaData() {
                     return StyleableProperties.ALIGNMENT;
                 }
 
@@ -474,7 +475,7 @@
                 }
                 
                 @Override
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<FlowPane, HPos> getCssMetaData() {
                     return StyleableProperties.COLUMN_HALIGNMENT;
                 }
 
@@ -512,7 +513,7 @@
                 }
 
                 @Override 
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<FlowPane, VPos> getCssMetaData() {
                     return StyleableProperties.ROW_VALIGNMENT;
                 }
                 
@@ -888,11 +889,11 @@
                      
          }; 
 
-         private static final List<CssMetaData<? extends Node, ?>> STYLEABLES;
+         private static final List<CssMetaData<? extends Styleable, ?>> STYLEABLES;
          static {
 
-            final List<CssMetaData<? extends Node, ?>> styleables =
-                new ArrayList<CssMetaData<? extends Node, ?>>(Region.getClassCssMetaData());
+            final List<CssMetaData<? extends Styleable, ?>> styleables =
+                new ArrayList<CssMetaData<? extends Styleable, ?>>(Region.getClassCssMetaData());
             styleables.add(ALIGNMENT);
             styleables.add(COLUMN_HALIGNMENT);
             styleables.add(HGAP);
@@ -909,7 +910,7 @@
      * @return The CssMetaData associated with this class, which may include the
      * CssMetaData of its super classes.
      */
-    public static List<CssMetaData<? extends Node, ?>> getClassCssMetaData() {
+    public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
         return StyleableProperties.STYLEABLES;
     }
 
@@ -918,8 +919,9 @@
      *
      */
     
+    
     @Override
-    public List<CssMetaData<? extends Node, ?>> getCssMetaData() {
+    public List<CssMetaData<? extends Styleable, ?>> getCssMetaData() {
         return getClassCssMetaData();
     }
 
--- a/javafx-ui-common/src/javafx/scene/layout/GridPane.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/src/javafx/scene/layout/GridPane.java	Wed Feb 13 18:35:25 2013 -0500
@@ -32,7 +32,6 @@
 import javafx.beans.property.BooleanProperty;
 import javafx.beans.property.DoubleProperty;
 import javafx.beans.property.ObjectProperty;
-import javafx.beans.value.WritableValue;
 import javafx.collections.ListChangeListener;
 import javafx.collections.ListChangeListener.Change;
 import javafx.collections.ObservableList;
@@ -53,6 +52,7 @@
 import com.sun.javafx.css.converters.BooleanConverter;
 import com.sun.javafx.css.converters.EnumConverter;
 import com.sun.javafx.css.converters.SizeConverter;
+import javafx.css.Styleable;
 import javafx.css.StyleableProperty;
 
 
@@ -678,7 +678,7 @@
                 }
 
                 @Override
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<GridPane, Number> getCssMetaData() {
                     return StyleableProperties.HGAP;
                 }
 
@@ -712,7 +712,7 @@
                 }
 
                 @Override
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<GridPane, Number> getCssMetaData() {
                     return StyleableProperties.VGAP;
                 }
 
@@ -746,7 +746,7 @@
                 }
 
                 @Override
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<GridPane, Pos> getCssMetaData() {
                     return StyleableProperties.ALIGNMENT;
                 }
 
@@ -793,7 +793,7 @@
                 }
 
                 @Override
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<GridPane, Boolean> getCssMetaData() {
                     return StyleableProperties.GRID_LINES_VISIBLE;
                 }
 
@@ -1902,11 +1902,11 @@
 
          };
 
-         private static final List<CssMetaData<? extends Node, ?>> STYLEABLES;
+         private static final List<CssMetaData<? extends Styleable, ?>> STYLEABLES;
          static {
 
-            final List<CssMetaData<? extends Node, ?>> styleables =
-                    new ArrayList<CssMetaData<? extends Node, ?>>(Region.getClassCssMetaData());
+            final List<CssMetaData<? extends Styleable, ?>> styleables =
+                    new ArrayList<CssMetaData<? extends Styleable, ?>>(Region.getClassCssMetaData());
             styleables.add(GRID_LINES_VISIBLE);
             styleables.add(HGAP);
             styleables.add(ALIGNMENT);
@@ -1920,7 +1920,7 @@
      * @return The CssMetaData associated with this class, which may include the
      * CssMetaData of its super classes.
      */
-    public static List<CssMetaData<? extends Node, ?>> getClassCssMetaData() {
+    public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
         return StyleableProperties.STYLEABLES;
     }
 
@@ -1929,8 +1929,9 @@
      *
      */
     
+    
     @Override
-    public List<CssMetaData<? extends Node, ?>> getCssMetaData() {
+    public List<CssMetaData<? extends Styleable, ?>> getCssMetaData() {
         return getClassCssMetaData();
     }
 
--- a/javafx-ui-common/src/javafx/scene/layout/HBox.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/src/javafx/scene/layout/HBox.java	Wed Feb 13 18:35:25 2013 -0500
@@ -44,6 +44,7 @@
 import com.sun.javafx.css.converters.BooleanConverter;
 import com.sun.javafx.css.converters.EnumConverter;
 import com.sun.javafx.css.converters.SizeConverter;
+import javafx.css.Styleable;
 
 
 
@@ -293,7 +294,7 @@
                 }
                 
                 @Override 
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<HBox, Pos> getCssMetaData() {
                     return StyleableProperties.ALIGNMENT;
                 }
 
@@ -330,7 +331,7 @@
                 }
                                 
                 @Override
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<HBox, Boolean> getCssMetaData() {
                     return StyleableProperties.FILL_HEIGHT;
                 }
 
@@ -618,10 +619,10 @@
                      
          };
 
-         private static final List<CssMetaData<? extends Node, ?>> STYLEABLES;
+         private static final List<CssMetaData<? extends Styleable, ?>> STYLEABLES;
          static {
-            final List<CssMetaData<? extends Node, ?>> styleables =
-                new ArrayList<CssMetaData<? extends Node, ?>>(Pane.getClassCssMetaData());
+            final List<CssMetaData<? extends Styleable, ?>> styleables =
+                new ArrayList<CssMetaData<? extends Styleable, ?>>(Pane.getClassCssMetaData());
             styleables.add(FILL_HEIGHT);
             styleables.add(ALIGNMENT);
             styleables.add(SPACING);
@@ -633,7 +634,7 @@
      * @return The CssMetaData associated with this class, which may include the
      * CssMetaData of its super classes.
      */
-    public static List<CssMetaData<? extends Node, ?>> getClassCssMetaData() {
+    public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
         return StyleableProperties.STYLEABLES;
     }
 
@@ -642,8 +643,9 @@
      *
      */
     
+    
     @Override
-    public List<CssMetaData<? extends Node, ?>> getCssMetaData() {
+    public List<CssMetaData<? extends Styleable, ?>> getCssMetaData() {
         return getClassCssMetaData();
     }
 
--- a/javafx-ui-common/src/javafx/scene/layout/Region.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/src/javafx/scene/layout/Region.java	Wed Feb 13 18:35:25 2013 -0500
@@ -66,6 +66,7 @@
 import com.sun.javafx.sg.PGNode;
 import com.sun.javafx.sg.PGRegion;
 import com.sun.javafx.tk.Toolkit;
+import javafx.css.Styleable;
 import sun.util.logging.PlatformLogger;
 
 /**
@@ -2435,11 +2436,11 @@
             }
         };
 
-         private static final List<CssMetaData<? extends Node, ?>> STYLEABLES;
+         private static final List<CssMetaData<? extends Styleable, ?>> STYLEABLES;
          static {
 
-            final List<CssMetaData<? extends Node, ?>> styleables =
-                new ArrayList<CssMetaData<? extends Node, ?>>(Parent.getClassCssMetaData());
+            final List<CssMetaData<? extends Styleable, ?>> styleables =
+                new ArrayList<CssMetaData<? extends Styleable, ?>>(Parent.getClassCssMetaData());
             styleables.add(PADDING);
             styleables.add(BACKGROUND);
             styleables.add(BORDER);
@@ -2456,7 +2457,7 @@
      * @return The CssMetaData associated with this class, which may include the
      * CssMetaData of its super classes.
      */
-    public static List<CssMetaData<? extends Node, ?>> getClassCssMetaData() {
+    public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
         return StyleableProperties.STYLEABLES;
     }
 
@@ -2465,8 +2466,9 @@
      *
      */
     
+    
     @Override
-    public List<CssMetaData<? extends Node, ?>> getCssMetaData() {
+    public List<CssMetaData<? extends Styleable, ?>> getCssMetaData() {
         return getClassCssMetaData();
     }
 
--- a/javafx-ui-common/src/javafx/scene/layout/StackPane.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/src/javafx/scene/layout/StackPane.java	Wed Feb 13 18:35:25 2013 -0500
@@ -38,6 +38,7 @@
 import javafx.geometry.VPos;
 import javafx.scene.Node;
 import com.sun.javafx.css.converters.EnumConverter;
+import javafx.css.Styleable;
 
 /**
  *
@@ -215,7 +216,7 @@
                 }
 
                 @Override
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<StackPane, Pos> getCssMetaData() {
                     return StyleableProperties.ALIGNMENT;
                 }
 
@@ -370,10 +371,10 @@
             }
         };
 
-         private static final List<CssMetaData<? extends Node, ?>> STYLEABLES;
+         private static final List<CssMetaData<? extends Styleable, ?>> STYLEABLES;
          static {
-            final List<CssMetaData<? extends Node, ?>> styleables =
-                new ArrayList<CssMetaData<? extends Node, ?>>(Region.getClassCssMetaData());
+            final List<CssMetaData<? extends Styleable, ?>> styleables =
+                new ArrayList<CssMetaData<? extends Styleable, ?>>(Region.getClassCssMetaData());
             styleables.add(ALIGNMENT);
             STYLEABLES = Collections.unmodifiableList(styleables);
          }
@@ -383,7 +384,7 @@
      * @return The CssMetaData associated with this class, which may include the
      * CssMetaData of its super classes.
      */
-    public static List<CssMetaData<? extends Node, ?>> getClassCssMetaData() {
+    public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
         return StyleableProperties.STYLEABLES;
     }
 
@@ -392,8 +393,9 @@
      *
      */
     
+    
     @Override
-    public List<CssMetaData<? extends Node, ?>> getCssMetaData() {
+    public List<CssMetaData<? extends Styleable, ?>> getCssMetaData() {
         return getClassCssMetaData();
     }
 
--- a/javafx-ui-common/src/javafx/scene/layout/TilePane.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/src/javafx/scene/layout/TilePane.java	Wed Feb 13 18:35:25 2013 -0500
@@ -48,6 +48,7 @@
 import javafx.scene.Node;
 import com.sun.javafx.css.converters.EnumConverter;
 import com.sun.javafx.css.converters.SizeConverter;
+import javafx.css.Styleable;
 
 import static javafx.geometry.Orientation.*;
 
@@ -351,7 +352,7 @@
                 }
                 
                 @Override 
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<TilePane, Orientation> getCssMetaData() {
                     return StyleableProperties.ORIENTATION;
                 }
 
@@ -393,7 +394,7 @@
                 }
                 
                 @Override
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<TilePane, Number> getCssMetaData() {
                     return StyleableProperties.PREF_ROWS;
                 }
 
@@ -434,7 +435,7 @@
                 }
                 
                 @Override
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<TilePane, Number> getCssMetaData() {
                     return StyleableProperties.PREF_COLUMNS;
                 }
 
@@ -474,7 +475,7 @@
                 }
                 
                 @Override
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<TilePane, Number> getCssMetaData() {
                     return StyleableProperties.PREF_TILE_WIDTH;
                 }
 
@@ -515,7 +516,7 @@
                 }
                 
                 @Override 
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<TilePane, Number> getCssMetaData() {
                     return StyleableProperties.PREF_TILE_HEIGHT;
                 }
 
@@ -582,7 +583,7 @@
                 }
                 
                 @Override 
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<TilePane, Number> getCssMetaData() {
                     return StyleableProperties.HGAP;
                 }
 
@@ -616,7 +617,7 @@
                 }
                 
                 @Override 
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<TilePane, Number> getCssMetaData() {
                     return StyleableProperties.VGAP;
                 }
 
@@ -657,7 +658,7 @@
                 }
                 
                 @Override 
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<TilePane, Pos> getCssMetaData() {
                     return StyleableProperties.ALIGNMENT;
                 }
 
@@ -693,7 +694,7 @@
                 }
                 
                 @Override
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<TilePane, Pos> getCssMetaData() {
                     return StyleableProperties.TILE_ALIGNMENT;
                 }
 
@@ -1117,10 +1118,10 @@
             }
         };
 
-         private static final List<CssMetaData<? extends Node, ?>> STYLEABLES;
+         private static final List<CssMetaData<? extends Styleable, ?>> STYLEABLES;
          static {
-            final List<CssMetaData<? extends Node, ?>> styleables = 
-                new ArrayList<CssMetaData<? extends Node, ?>>(Region.getClassCssMetaData());
+            final List<CssMetaData<? extends Styleable, ?>> styleables = 
+                new ArrayList<CssMetaData<? extends Styleable, ?>>(Region.getClassCssMetaData());
             styleables.add(ALIGNMENT);
             styleables.add(HGAP);
             styleables.add(ORIENTATION);
@@ -1138,7 +1139,7 @@
      * @return The CssMetaData associated with this class, which may include the
      * CssMetaData of its super classes.
      */
-    public static List<CssMetaData<? extends Node, ?>> getClassCssMetaData() {
+    public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
         return StyleableProperties.STYLEABLES;
     }
 
@@ -1147,8 +1148,9 @@
      *
      */
     
+    
     @Override
-    public List<CssMetaData<? extends Node, ?>> getCssMetaData() {
+    public List<CssMetaData<? extends Styleable, ?>> getCssMetaData() {
         return getClassCssMetaData();
     }
 
--- a/javafx-ui-common/src/javafx/scene/layout/VBox.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/src/javafx/scene/layout/VBox.java	Wed Feb 13 18:35:25 2013 -0500
@@ -46,6 +46,7 @@
 import com.sun.javafx.css.converters.BooleanConverter;
 import com.sun.javafx.css.converters.EnumConverter;
 import com.sun.javafx.css.converters.SizeConverter;
+import javafx.css.Styleable;
 
 /**
  * VBox lays out its children in a single vertical column.
@@ -257,7 +258,7 @@
                 }
 
                 @Override
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<VBox, Number> getCssMetaData() {
                     return StyleableProperties.SPACING;
                 }
             };
@@ -291,7 +292,7 @@
                 }
 
                 @Override
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<VBox, Pos> getCssMetaData() {
                     return StyleableProperties.ALIGNMENT;
                 }
             };
@@ -327,7 +328,7 @@
                 }
 
                 @Override
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<VBox, Boolean> getCssMetaData() {
                     return StyleableProperties.FILL_WIDTH;
                 }
             };
@@ -583,10 +584,10 @@
             }
         };
 
-         private static final List<CssMetaData<? extends Node, ?>> STYLEABLES;
+         private static final List<CssMetaData<? extends Styleable, ?>> STYLEABLES;
          static {
-            final List<CssMetaData<? extends Node, ?>> styleables = 
-                new ArrayList<CssMetaData<? extends Node, ?>>(Region.getClassCssMetaData());
+            final List<CssMetaData<? extends Styleable, ?>> styleables = 
+                new ArrayList<CssMetaData<? extends Styleable, ?>>(Region.getClassCssMetaData());
             styleables.add(ALIGNMENT);
             styleables.add(FILL_WIDTH);
             styleables.add(SPACING);
@@ -598,7 +599,7 @@
      * @return The CssMetaData associated with this class, which may include the
      * CssMetaData of its super classes.
      */
-    public static List<CssMetaData<? extends Node, ?>> getClassCssMetaData() {
+    public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
         return StyleableProperties.STYLEABLES;
     }
 
@@ -607,8 +608,9 @@
      *
      */
     
+    
     @Override
-    public List<CssMetaData<? extends Node, ?>> getCssMetaData() {
+    public List<CssMetaData<? extends Styleable, ?>> getCssMetaData() {
         return getClassCssMetaData();
     }
 
--- a/javafx-ui-common/src/javafx/scene/shape/Rectangle.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/src/javafx/scene/shape/Rectangle.java	Wed Feb 13 18:35:25 2013 -0500
@@ -33,7 +33,6 @@
 
 import javafx.beans.property.DoubleProperty;
 import javafx.beans.property.DoublePropertyBase;
-import javafx.beans.value.WritableValue;
 import javafx.scene.paint.Paint;
 
 import javafx.css.StyleableDoubleProperty;
@@ -47,9 +46,8 @@
 import com.sun.javafx.sg.PGRectangle;
 import com.sun.javafx.sg.PGShape.Mode;
 import com.sun.javafx.tk.Toolkit;
-import javafx.beans.property.Property;
+import javafx.css.Styleable;
 import javafx.css.StyleableProperty;
-import javafx.scene.Node;
 
 
 /**
@@ -309,7 +307,7 @@
                 }
                 
                 @Override 
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<Rectangle, Number> getCssMetaData() {
                     return StyleableProperties.ARC_WIDTH;
                 }
 
@@ -356,7 +354,7 @@
                 }
 
                 @Override 
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<Rectangle, Number> getCssMetaData() {
                     return StyleableProperties.ARC_HEIGHT;
                 }
                 
@@ -410,7 +408,7 @@
 
             @Override
             public StyleableProperty<Number> getStyleableProperty(Rectangle node) {
-                return (StyleableProperty)node.arcHeightProperty();
+                return (StyleableProperty<Number>)node.arcHeightProperty();
             }
 
         };         
@@ -425,15 +423,15 @@
 
             @Override
             public StyleableProperty<Number> getStyleableProperty(Rectangle node) {
-                return (StyleableProperty)node.arcWidthProperty();
+                return (StyleableProperty<Number>)node.arcWidthProperty();
             }
 
         };
          
-         private static final List<CssMetaData<? extends Node, ?>> STYLEABLES;
+         private static final List<CssMetaData<? extends Styleable, ?>> STYLEABLES;
          static {
-            final List<CssMetaData<? extends Node, ?>> styleables =
-                new ArrayList<CssMetaData<? extends Node, ?>>(Shape.getClassCssMetaData());
+            final List<CssMetaData<? extends Styleable, ?>> styleables =
+                new ArrayList<CssMetaData<? extends Styleable, ?>>(Shape.getClassCssMetaData());
             styleables.add(ARC_HEIGHT);
             styleables.add(ARC_WIDTH);
             STYLEABLES = Collections.unmodifiableList(styleables);
@@ -445,7 +443,7 @@
      * @return The CssMetaData associated with this class, which may include the
      * CssMetaData of its super classes.
      */
-    public static List<CssMetaData<? extends Node, ?>> getClassCssMetaData() {
+    public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
         return StyleableProperties.STYLEABLES;
     }
 
@@ -454,8 +452,9 @@
      *
      */
     
+    
     @Override
-    public List<CssMetaData<? extends Node, ?>> getCssMetaData() {
+    public List<CssMetaData<? extends Styleable, ?>> getCssMetaData() {
         return getClassCssMetaData();
     }
 
--- a/javafx-ui-common/src/javafx/scene/shape/Shape.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/src/javafx/scene/shape/Shape.java	Wed Feb 13 18:35:25 2013 -0500
@@ -63,6 +63,7 @@
 import javafx.beans.Observable;
 import javafx.beans.property.Property;
 import javafx.collections.ListChangeListener.Change;
+import javafx.css.Styleable;
 import javafx.css.StyleableProperty;
 
 
@@ -425,7 +426,7 @@
                 }
                 
                 @Override
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<Shape,Paint> getCssMetaData() {
                     return StyleableProperties.FILL;
                 }
 
@@ -501,7 +502,7 @@
                 }
                 
                 @Override
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<Shape,Paint> getCssMetaData() {
                     return StyleableProperties.STROKE;
                 }
 
@@ -546,7 +547,7 @@
                 }
                 
                 @Override
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<Shape,Boolean> getCssMetaData() {
                     return StyleableProperties.SMOOTH;
                 }
 
@@ -836,11 +837,11 @@
             }
 
         };         
-         private static final List<CssMetaData<? extends Node, ?>> STYLEABLES;
+         private static final List<CssMetaData<? extends Styleable, ?>> STYLEABLES;
          static {
 
-            final List<CssMetaData<? extends Node, ?>> styleables =
-                new ArrayList<CssMetaData<? extends Node, ?>>(Node.getClassCssMetaData());
+            final List<CssMetaData<? extends Styleable, ?>> styleables =
+                new ArrayList<CssMetaData<? extends Styleable, ?>>(Node.getClassCssMetaData());
             styleables.add(FILL);
             styleables.add(SMOOTH);
             styleables.add(STROKE);
@@ -859,7 +860,7 @@
      * @return The CssMetaData associated with this class, which may include the
      * CssMetaData of its super classes.
      */
-    public static List<CssMetaData<? extends Node, ?>> getClassCssMetaData() {
+    public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
         return StyleableProperties.STYLEABLES;
     }
 
@@ -868,8 +869,9 @@
      *
      */
     
+    
     @Override
-    public List<CssMetaData<? extends Node, ?>> getCssMetaData() {
+    public List<CssMetaData<? extends Styleable, ?>> getCssMetaData() {
         return getClassCssMetaData();
     }
 
@@ -1229,7 +1231,7 @@
                     }
                 
                     @Override
-                    public CssMetaData getCssMetaData() {
+                    public CssMetaData<Shape,StrokeType> getCssMetaData() {
                         return StyleableProperties.STROKE_TYPE;
                     }
 
@@ -1262,7 +1264,7 @@
                     }
                 
                     @Override
-                    public CssMetaData getCssMetaData() {
+                    public CssMetaData<Shape,Number> getCssMetaData() {
                         return StyleableProperties.STROKE_WIDTH;
                     }
 
@@ -1297,7 +1299,7 @@
                     }
                 
                     @Override
-                    public CssMetaData getCssMetaData() {
+                    public CssMetaData<Shape,StrokeLineJoin> getCssMetaData() {
                         return StyleableProperties.STROKE_LINE_JOIN;
                     }
 
@@ -1332,7 +1334,7 @@
                     }
                 
                     @Override
-                    public CssMetaData getCssMetaData() {
+                    public CssMetaData<Shape,StrokeLineCap> getCssMetaData() {
                         return StyleableProperties.STROKE_LINE_CAP;
                     }
 
@@ -1367,7 +1369,7 @@
                     }
                 
                     @Override
-                    public CssMetaData getCssMetaData() {
+                    public CssMetaData<Shape,Number> getCssMetaData() {
                         return StyleableProperties.STROKE_MITER_LIMIT;
                     }
 
@@ -1403,7 +1405,7 @@
                     }
                 
                     @Override
-                    public CssMetaData getCssMetaData() {
+                    public CssMetaData<Shape,Number> getCssMetaData() {
                         return StyleableProperties.STROKE_DASH_OFFSET;
                     }
 
@@ -1473,7 +1475,7 @@
                     }
 
                     @Override
-                    public CssMetaData getCssMetaData() {
+                    public CssMetaData<Shape,Number[]> getCssMetaData() {
                         return StyleableProperties.STROKE_DASH_ARRAY;
                     }
                 };
--- a/javafx-ui-common/src/javafx/scene/text/Text.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/src/javafx/scene/text/Text.java	Wed Feb 13 18:35:25 2013 -0500
@@ -86,8 +86,8 @@
 import com.sun.javafx.accessible.providers.AccessibleProvider;
 import com.sun.javafx.accessible.AccessibleNode;
 import javafx.css.FontCssMetaData;
+import javafx.css.Styleable;
 import javafx.css.StyleableProperty;
-import javafx.scene.Node;
 
 /**
  * The {@code Text} class defines a node that displays a text.
@@ -522,7 +522,7 @@
             font = new StyleableObjectProperty<Font>(Font.getDefault()) {
                 @Override public Object getBean() { return Text.this; }
                 @Override public String getName() { return "font"; }
-                @Override public CssMetaData getCssMetaData() {
+                @Override public CssMetaData<Text,Font> getCssMetaData() {
                     return StyleableProperties.FONT;
                 }
                 @Override public void invalidated() {
@@ -751,7 +751,7 @@
                                                (FontSmoothingType.GRAY) {
                 @Override public Object getBean() { return Text.this; }
                 @Override public String getName() { return "fontSmoothingType"; }
-                @Override public CssMetaData getCssMetaData() {
+                @Override public CssMetaData<Text,FontSmoothingType> getCssMetaData() {
                     return StyleableProperties.FONT_SMOOTHING_TYPE;
                 }
                 @Override public void invalidated() {
@@ -1391,10 +1391,10 @@
             }
          };
 
-	 private final static List<CssMetaData<? extends Node, ?>> STYLEABLES;
+	 private final static List<CssMetaData<? extends Styleable, ?>> STYLEABLES;
          static {
-            final List<CssMetaData<? extends Node, ?>> styleables =
-                new ArrayList<CssMetaData<? extends Node, ?>>(Shape.getClassCssMetaData());
+            final List<CssMetaData<? extends Styleable, ?>> styleables =
+                new ArrayList<CssMetaData<? extends Styleable, ?>>(Shape.getClassCssMetaData());
             styleables.add(FONT);
             styleables.add(UNDERLINE);
             styleables.add(STRIKETHROUGH);
@@ -1410,7 +1410,7 @@
      * @return The CssMetaData associated with this class, which may include the
      * CssMetaData of its super classes.
      */
-    public static List<CssMetaData<? extends Node, ?>> getClassCssMetaData() {
+    public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
         return StyleableProperties.STYLEABLES;
     }
 
@@ -1419,8 +1419,9 @@
      *
      */
     
+    
     @Override
-    public List<CssMetaData<? extends Node, ?>> getCssMetaData() {
+    public List<CssMetaData<? extends Styleable, ?>> getCssMetaData() {
         return getClassCssMetaData();
     }
 
--- a/javafx-ui-common/src/javafx/scene/text/TextFlow.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/src/javafx/scene/text/TextFlow.java	Wed Feb 13 18:35:25 2013 -0500
@@ -31,7 +31,6 @@
 
 import javafx.beans.property.DoubleProperty;
 import javafx.beans.property.ObjectProperty;
-import javafx.beans.value.WritableValue;
 import javafx.geometry.HPos;
 import javafx.geometry.Insets;
 import javafx.geometry.Orientation;
@@ -52,6 +51,7 @@
 import com.sun.javafx.scene.text.TextLayoutFactory;
 import com.sun.javafx.scene.text.TextSpan;
 import com.sun.javafx.tk.Toolkit;
+import javafx.css.Styleable;
 import javafx.css.StyleableProperty;
 
 /**
@@ -354,7 +354,7 @@
                 new StyleableObjectProperty<TextAlignment>(TextAlignment.LEFT) {
                 @Override public Object getBean() { return TextFlow.this; }
                 @Override public String getName() { return "textAlignment"; }
-                @Override public CssMetaData getCssMetaData() {
+                @Override public CssMetaData<TextFlow, TextAlignment> getCssMetaData() {
                     return StyleableProperties.TEXT_ALIGNMENT;
                 }
                 @Override public void invalidated() {
@@ -392,7 +392,7 @@
                 new StyleableDoubleProperty(0) {
                 @Override public Object getBean() { return TextFlow.this; }
                 @Override public String getName() { return "lineSpacing"; }
-                @Override public CssMetaData getCssMetaData() {
+                @Override public CssMetaData<TextFlow, Number> getCssMetaData() {
                     return StyleableProperties.LINE_SPACING;
                 }
                 @Override public void invalidated() {
@@ -453,10 +453,10 @@
             }
          };
 
-	 private static final List<CssMetaData<? extends Node, ?>> STYLEABLES;
+	 private static final List<CssMetaData<? extends Styleable, ?>> STYLEABLES;
          static {
-            final List<CssMetaData<? extends Node, ?>> styleables =
-                new ArrayList<CssMetaData<? extends Node, ?>>(Pane.getClassCssMetaData());
+            final List<CssMetaData<? extends Styleable, ?>> styleables =
+                new ArrayList<CssMetaData<? extends Styleable, ?>>(Pane.getClassCssMetaData());
             styleables.add(TEXT_ALIGNMENT); 
             styleables.add(LINE_SPACING);
             STYLEABLES = Collections.unmodifiableList(styleables);
@@ -467,7 +467,7 @@
      * @return The CssMetaData associated with this class, which may include the
      * CssMetaData of its super classes.
      */
-    public static List<CssMetaData<? extends Node, ?>> getClassCssMetaData() {
+    public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
         return StyleableProperties.STYLEABLES;
     }
 
@@ -476,8 +476,9 @@
      *
      */
     
+    
     @Override
-    public List<CssMetaData<? extends Node, ?>> getCssMetaData() {
+    public List<CssMetaData<? extends Styleable, ?>> getCssMetaData() {
         return getClassCssMetaData();
     }
 
--- a/javafx-ui-common/test/unit/com/sun/javafx/css/CssMetaDataTest.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/test/unit/com/sun/javafx/css/CssMetaDataTest.java	Wed Feb 13 18:35:25 2013 -0500
@@ -25,6 +25,7 @@
 
 package com.sun.javafx.css;
 
+import javafx.css.Styleable;
 import java.io.File;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
@@ -65,7 +66,7 @@
     public CssMetaDataTest() {
     }
     
-    private static CssMetaData get(List<CssMetaData<? extends Node, ?>> list, String prop) {
+    private static CssMetaData get(List<CssMetaData<? extends Styleable, ?>> list, String prop) {
         for (CssMetaData styleable : list) {
             if (prop.equals(styleable.getProperty())) return styleable;
         }
@@ -77,8 +78,8 @@
     @Test
     public void testGetStyleables_Node() {
         Node node = new TestNode();
-        List<CssMetaData<? extends Node, ?>> expResult = TestNode.getClassCssMetaData();
-        List<CssMetaData<? extends Node, ?>> result = node.getCssMetaData();
+        List<CssMetaData<? extends Styleable, ?>> expResult = TestNode.getClassCssMetaData();
+        List<CssMetaData<? extends Styleable, ?>> result = node.getCssMetaData();
         assertEquals(expResult, result);
     }
 
@@ -88,9 +89,9 @@
     @Test
     public void testGetStyleables_Styleable() {
         Node node = new TestNode();
-        Styleable styleable = node.impl_getStyleable();
+        Styleable styleable = node;
         assertNotNull(styleable);
-        List<CssMetaData<? extends Node, ?>> expResult = TestNode.getClassCssMetaData();
+        List<CssMetaData<? extends Styleable, ?>> expResult = TestNode.getClassCssMetaData();
         List result = styleable.getCssMetaData();
         assertEquals(expResult, result);
     }
@@ -159,7 +160,7 @@
             }
         };
         
-        List<CssMetaData<? extends Node, ?>> list = fontProp.getSubProperties();
+        List<CssMetaData<? extends Styleable, ?>> list = fontProp.getSubProperties();
         assertNotNull(list);
 
     }
@@ -1188,7 +1189,7 @@
                 Method m = someClass.getMethod("getClassCssMetaData", (Class[]) null);
 //                Node node = (Node)ctor.newInstance((Object[])null);
                 Node node = (Node)someClass.newInstance();
-                for (CssMetaData styleable : (List<CssMetaData<? extends Node, ?>>) m.invoke(null)) {
+                for (CssMetaData styleable : (List<CssMetaData<? extends Styleable, ?>>) m.invoke(null)) {
                     
                     what = someClass.getName() + " " + styleable.getProperty();
                     WritableValue writable = styleable.getStyleableProperty(node);
--- a/javafx-ui-common/test/unit/com/sun/javafx/css/TestNode.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/test/unit/com/sun/javafx/css/TestNode.java	Wed Feb 13 18:35:25 2013 -0500
@@ -30,6 +30,7 @@
 import java.util.List;
 import javafx.beans.property.DoubleProperty;
 import javafx.css.CssMetaData;
+import javafx.css.Styleable;
 import javafx.css.StyleableDoubleProperty;
 import javafx.css.StyleableProperty;
 import javafx.scene.Node;
@@ -93,10 +94,10 @@
                      
          };
             
-         private static final List<CssMetaData<? extends Node, ?>> STYLEABLES;
+         private static final List<CssMetaData<? extends Styleable, ?>> STYLEABLES;
          static {
-            final List<CssMetaData<? extends Node, ?>> styleables = 
-		new ArrayList<CssMetaData<? extends Node, ?>>(TestNodeBase.getClassCssMetaData());
+            final List<CssMetaData<? extends Styleable, ?>> styleables = 
+		new ArrayList<CssMetaData<? extends Styleable, ?>>(TestNodeBase.getClassCssMetaData());
             styleables.add(XYZZY);
             STYLEABLES = Collections.unmodifiableList(styleables);
          }
@@ -106,7 +107,7 @@
      * @return The CssMetaData associated with this class, which may include the
      * CssMetaData of its super classes.
      */
-    public static List<CssMetaData<? extends Node, ?>> getClassCssMetaData() {
+    public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
         return StyleableProperties.STYLEABLES;
     }
 
@@ -115,8 +116,9 @@
      *
      */
     
+    
     @Override
-    public List<CssMetaData<? extends Node, ?>> getCssMetaData() {
+    public List<CssMetaData<? extends Styleable, ?>> getCssMetaData() {
         return getClassCssMetaData();
     }
 
--- a/javafx-ui-common/test/unit/com/sun/javafx/css/TestNodeBase.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/test/unit/com/sun/javafx/css/TestNodeBase.java	Wed Feb 13 18:35:25 2013 -0500
@@ -46,6 +46,7 @@
 import com.sun.javafx.jmx.MXNodeAlgorithmContext;
 import com.sun.javafx.sg.PGNode;
 import javafx.beans.value.WritableValue;
+import javafx.css.Styleable;
 import javafx.css.StyleableProperty;
 
 /** Test Node with styleable properties and an getClassCssMetaData method */
@@ -215,10 +216,10 @@
             }
         };
         
-        static final List<CssMetaData<? extends Node, ?>> STYLEABLES;
+        static final List<CssMetaData<? extends Styleable, ?>> STYLEABLES;
         static {
-            List<CssMetaData<? extends Node, ?>> list = 
-                new ArrayList<CssMetaData<? extends Node, ?>>(Node.getClassCssMetaData());
+            List<CssMetaData<? extends Styleable, ?>> list = 
+                new ArrayList<CssMetaData<? extends Styleable, ?>>(Node.getClassCssMetaData());
             Collections.addAll(list,                
                 TEST,
                 STRING,
@@ -231,7 +232,7 @@
     /**
      * {@inheritDoc}
      */
-    public static List<CssMetaData<? extends Node, ?>> getClassCssMetaData() {
+    public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
         return StyleableProperties.STYLEABLES;
     }
 
@@ -240,8 +241,9 @@
      *
      */
     
+    
     @Override
-    public List<CssMetaData<? extends Node, ?>> getCssMetaData() {
+    public List<CssMetaData<? extends Styleable, ?>> getCssMetaData() {
         return getClassCssMetaData();
     }
 
--- a/javafx-ui-common/test/unit/com/sun/javafx/test/CssMethodsTestBase.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/test/unit/com/sun/javafx/test/CssMethodsTestBase.java	Wed Feb 13 18:35:25 2013 -0500
@@ -36,6 +36,7 @@
 import javafx.css.StyleConverter;
 import javafx.css.CssMetaData;
 import java.util.List;
+import javafx.css.Styleable;
 import javafx.css.StyleableProperty;
 
 public abstract class CssMethodsTestBase {
@@ -113,10 +114,10 @@
         return new Object[] { configuration };
     }
     
-    private static CssMetaData<? extends Node, ?> getCssMetaData(Node node, String cssProperty) {
+    private static CssMetaData<? extends Styleable, ?> getCssMetaData(Node node, String cssProperty) {
         
-        List<CssMetaData<? extends Node, ?>> styleables = node.getCssMetaData();
-        for(CssMetaData<? extends Node, ?> styleable : styleables) {
+        List<CssMetaData<? extends Styleable, ?>> styleables = node.getCssMetaData();
+        for(CssMetaData<? extends Styleable, ?> styleable : styleables) {
             if (styleable.getProperty().equals(cssProperty)) {
                 return styleable;
             }
--- a/javafx-ui-common/test/unit/javafx/scene/CSSNode.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/test/unit/javafx/scene/CSSNode.java	Wed Feb 13 18:35:25 2013 -0500
@@ -49,6 +49,7 @@
 import com.sun.javafx.jmx.MXNodeAlgorithmContext;
 import com.sun.javafx.sg.PGNode;
 import com.sun.javafx.tk.Toolkit;
+import javafx.css.Styleable;
 import javafx.css.StyleableProperty;
 
 public  class CSSNode extends Node {
@@ -295,10 +296,10 @@
             }
         };
         
-        private static List<CssMetaData<? extends Node, ?>> STYLEABLES;
+        private static List<CssMetaData<? extends Styleable, ?>> STYLEABLES;
         static {
-            final List<CssMetaData<? extends Node, ?>> styleables =
-                new ArrayList<CssMetaData<? extends Node, ?>>(Node.getClassCssMetaData());
+            final List<CssMetaData<? extends Styleable, ?>> styleables =
+                new ArrayList<CssMetaData<? extends Styleable, ?>>(Node.getClassCssMetaData());
             styleables.add(FILL);
             styleables.add(STROKE);
             styleables.add(PADDING);
@@ -311,7 +312,7 @@
      * @return The CssMetaData associated with this class, which may include the
      * CssMetaData of its super classes.
      */
-    public static List<CssMetaData<? extends Node, ?>> getClassCssMetaData() {
+    public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
         return StyleableProperties.STYLEABLES;
     }
 
@@ -320,8 +321,9 @@
      *
      */
     
+    
     @Override
-    public List<CssMetaData<? extends Node, ?>> getCssMetaData() {
+    public List<CssMetaData<? extends Styleable, ?>> getCssMetaData() {
         return getClassCssMetaData();
     }
 
--- a/javafx-ui-common/test/unit/javafx/scene/Node_onInvalidate_Test.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/test/unit/javafx/scene/Node_onInvalidate_Test.java	Wed Feb 13 18:35:25 2013 -0500
@@ -41,6 +41,7 @@
 import javafx.css.CssMetaData;
 import com.sun.javafx.scene.DirtyBits;
 import com.sun.javafx.test.OnInvalidateMethodsTestBase;
+import javafx.css.Styleable;
 
 @RunWith(Parameterized.class)
 public class Node_onInvalidate_Test extends OnInvalidateMethodsTestBase {
@@ -84,7 +85,7 @@
 
 
     public static CssMetaData findCssCSSProperty(String propertyName) {
-        final List<CssMetaData<? extends Node, ?>> keys = Node.getClassCssMetaData();
+        final List<CssMetaData<? extends Styleable, ?>> keys = Node.getClassCssMetaData();
         for(CssMetaData styleable : keys) {
             if (styleable.getProperty().equals(propertyName)) return styleable;
         }
--- a/javafx-ui-common/test/unit/javafx/scene/shape/ShapeTest.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-common/test/unit/javafx/scene/shape/ShapeTest.java	Wed Feb 13 18:35:25 2013 -0500
@@ -34,6 +34,7 @@
 import javafx.collections.ListChangeListener;
 import javafx.collections.ListChangeListener.Change;
 import javafx.collections.ObservableList;
+import javafx.css.Styleable;
 import javafx.scene.Group;
 import javafx.scene.Node;
 import javafx.scene.NodeTest;
@@ -133,7 +134,7 @@
     @Test public void testGetStrokeDashArrayViaCSSPropertyIsNotNull() {
         Rectangle rect = new Rectangle();
         Double[] actual = null;
-        List<CssMetaData<? extends Node, ?>> styleables = rect.getCssMetaData();
+        List<CssMetaData<? extends Styleable, ?>> styleables = rect.getCssMetaData();
         for (CssMetaData styleable : styleables) {
             if ("-fx-stroke-dash-array".equals(styleable.getProperty())) {
                 WritableValue writable = styleable.getStyleableProperty(rect);
@@ -149,7 +150,7 @@
         Rectangle rect = new Rectangle();
         rect.getStrokeDashArray().addAll(5d, 7d, 1d, 3d);
         Double[] actuals = null;
-        List<CssMetaData<? extends Node, ?>> styleables = rect.getCssMetaData();
+        List<CssMetaData<? extends Styleable, ?>> styleables = rect.getCssMetaData();
         
         for (CssMetaData styleable : styleables) {
             if ("-fx-stroke-dash-array".equals(styleable.getProperty())) {
@@ -166,7 +167,7 @@
         
         Rectangle rect = new Rectangle();
         List<Double> actual = null;
-        List<CssMetaData<? extends Node, ?>> styleables = rect.getCssMetaData();
+        List<CssMetaData<? extends Styleable, ?>> styleables = rect.getCssMetaData();
         
         for (CssMetaData styleable : styleables) {
             if ("-fx-stroke-dash-array".equals(styleable.getProperty())) {
--- a/javafx-ui-controls/build-common.xml	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-controls/build-common.xml	Wed Feb 13 18:35:25 2013 -0500
@@ -12,18 +12,24 @@
 
     <!-- .css -> .bss -->
     <target name="check-binary-css">
-      <uptodate property="binaryCssUpToDate" targetfile="${basedir}/${build.dir}/classes/com/sun/javafx/scene/control/skin/caspian/caspian.bss">
-        <srcfiles dir="${basedir}/${src.dir}/com/sun/javafx/scene/control/skin/caspian" includes="*.css"/>
+      <uptodate property="binaryCssUpToDate">
+        <srcfiles dir="${basedir}/${src.dir}" includes="**/*.css"/>
+        <mapper type="regexp" from="(.*)/(.*)\.css$$" to="${basedir}/${build.dir}/classes/\1/\2.bss"/>
       </uptodate>
     </target>
 
-
     <target name="-pre-init" depends="check-binary-css" unless="binaryCssUpToDate">
       <mkdir dir="${basedir}/${build.dir}/classes/com/sun/javafx/scene/control/skin/caspian"/>
+      <mkdir dir="${basedir}/${build.dir}/classes/com/sun/javafx/scene/control/skin/modena"/>
 
       <!-- compile all .css files in the build dir to .bss files, for faster startup -->
       <java classname="com.sun.javafx.css.parser.Css2Bin" fork="true" failonerror="true" classpathref="class-path-ref">
         <jvmarg value="-Djavafx.toolkit=com.sun.javafx.tk.DummyToolkit"/>
+        <arg value="${basedir}/${src.dir}/com/sun/javafx/scene/control/skin/modena/modena.css"/>
+        <arg value="${basedir}/${build.dir}/classes/com/sun/javafx/scene/control/skin/modena/modena.bss"/>
+      </java>
+      <java classname="com.sun.javafx.css.parser.Css2Bin" fork="true" failonerror="true" classpathref="class-path-ref">
+        <jvmarg value="-Djavafx.toolkit=com.sun.javafx.tk.DummyToolkit"/>
         <arg value="${basedir}/${src.dir}/com/sun/javafx/scene/control/skin/caspian/caspian.css"/>
         <arg value="${basedir}/${build.dir}/classes/com/sun/javafx/scene/control/skin/caspian/caspian.bss"/>
       </java>
--- a/javafx-ui-controls/src/com/sun/javafx/scene/control/behavior/TableCellBehaviorBase.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-controls/src/com/sun/javafx/scene/control/behavior/TableCellBehaviorBase.java	Wed Feb 13 18:35:25 2013 -0500
@@ -268,8 +268,7 @@
         }
     }
 
-    private void simpleSelect(MouseEvent e) {
-//        TreeTableView tv = getControl().getTreeTableView();
+    protected void simpleSelect(MouseEvent e) {
         TableSelectionModel sm = getSelectionModel();
         int row = getControl().getIndex();
         TableColumnBase column = getTableColumn();
--- a/javafx-ui-controls/src/com/sun/javafx/scene/control/behavior/TreeTableCellBehavior.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-controls/src/com/sun/javafx/scene/control/behavior/TreeTableCellBehavior.java	Wed Feb 13 18:35:25 2013 -0500
@@ -24,11 +24,17 @@
  */
 package com.sun.javafx.scene.control.behavior;
 
+import javafx.scene.control.MultipleSelectionModel;
 import javafx.scene.control.TableColumnBase;
 import javafx.scene.control.TablePositionBase;
+import javafx.scene.control.TableSelectionModel;
+import javafx.scene.control.TreeItem;
 import javafx.scene.control.TreeTableCell;
 import javafx.scene.control.TreeTableColumn;
 import javafx.scene.control.TreeTableView;
+import javafx.scene.control.TreeView;
+import javafx.scene.input.MouseButton;
+import javafx.scene.input.MouseEvent;
 
 /**
  */
@@ -106,4 +112,35 @@
     @Override void edit(int row, TableColumnBase tc) {
         getTableControl().edit(row, (TreeTableColumn)tc);
     }
+    
+    @Override protected void simpleSelect(MouseEvent e) {
+        TreeTableView tv = getControl().getTreeTableView();
+        TreeItem treeItem = getControl().getTreeTableRow().getTreeItem();
+        int index = getControl().getIndex();
+        TreeTableColumn column = getTableColumn();
+        TableSelectionModel sm = tv.getSelectionModel();
+        
+        if (! sm.isCellSelectionEnabled()) return;
+        
+        boolean isAlreadySelected = sm.isSelected(index, column);
+
+        sm.clearAndSelect(index, column);
+
+        // handle editing, which only occurs with the primary mouse button
+        if (e.getButton() == MouseButton.PRIMARY) {
+            if (e.getClickCount() == 1 && isAlreadySelected) {
+                tv.edit(index, column);
+            } else if (e.getClickCount() == 1) {
+                // cancel editing
+                tv.edit(-1, null);
+            } else if (e.getClickCount() == 2 && treeItem.isLeaf()) {
+                // attempt to edit
+                tv.edit(index, column);
+            } else if (e.getClickCount() % 2 == 0) {
+                // try to expand/collapse branch tree item
+                System.out.println("is expanded: " + treeItem.isExpanded() + " -> " + ! treeItem.isExpanded());
+                treeItem.setExpanded(! treeItem.isExpanded());
+            }
+        }
+    }
 }
--- a/javafx-ui-controls/src/com/sun/javafx/scene/control/behavior/TreeTableRowBehavior.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-controls/src/com/sun/javafx/scene/control/behavior/TreeTableRowBehavior.java	Wed Feb 13 18:35:25 2013 -0500
@@ -60,6 +60,11 @@
                 return;
             }
         }
+
+        TreeTableView table = treeTableRow.getTreeTableView();
+        if (table == null) return;
+        final TableSelectionModel sm = table.getSelectionModel();
+        if (sm == null || sm.isCellSelectionEnabled()) return;
         
         // handle editing, which only occurs with the primary mouse button
         int clickCount = e.getClickCount();
@@ -67,10 +72,7 @@
             // In the case of clicking to the right of the rightmost
             // TreeTableCell, we should still support selection, so that
             // is what we are doing here.
-            TreeTableView table = treeTableRow.getTreeTableView();
-            if (table == null) return;
-            TableSelectionModel sm = table.getSelectionModel();
-            if (sm != null) sm.select(treeItem);
+            sm.select(treeItem);
         } else if (clickCount % 2 == 0) {
             // try to expand/collapse branch tree item
             treeItem.setExpanded(! treeItem.isExpanded());
--- a/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/CellSkinBase.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/CellSkinBase.java	Wed Feb 13 18:35:25 2013 -0500
@@ -38,6 +38,7 @@
 import com.sun.javafx.scene.control.behavior.CellBehaviorBase;
 import javafx.beans.property.DoubleProperty;
 import javafx.beans.property.ReadOnlyDoubleProperty;
+import javafx.css.Styleable;
 import javafx.css.StyleableProperty;
 import javafx.scene.Node;
 import javafx.scene.control.SkinBase;
@@ -146,11 +147,11 @@
             }
         };
 
-         private static final List<CssMetaData<? extends Node, ?>> STYLEABLES;
+         private static final List<CssMetaData<? extends Styleable, ?>> STYLEABLES;
          static {
 
-            final List<CssMetaData<? extends Node, ?>> styleables = 
-                new ArrayList<CssMetaData<? extends Node, ?>>(SkinBase.getClassCssMetaData());
+            final List<CssMetaData<? extends Styleable, ?>> styleables = 
+                new ArrayList<CssMetaData<? extends Styleable, ?>>(SkinBase.getClassCssMetaData());
             styleables.add(CELL_SIZE);
             STYLEABLES = Collections.unmodifiableList(styleables);
 
@@ -161,7 +162,7 @@
      * @return The CssMetaData associated with this class, which may include the
      * CssMetaData of its super classes.
      */
-    public static List<CssMetaData<? extends Node, ?>> getClassCssMetaData() {
+    public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
         return StyleableProperties.STYLEABLES;
     }
 
@@ -169,7 +170,7 @@
      * {@inheritDoc}
      */
     @Override
-    public List<CssMetaData<? extends Node, ?>> getCssMetaData() {
+    public List<CssMetaData<? extends Styleable, ?>> getCssMetaData() {
         return getClassCssMetaData();
     }
 
--- a/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/ColorPickerSkin.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/ColorPickerSkin.java	Wed Feb 13 18:35:25 2013 -0500
@@ -52,6 +52,7 @@
 import com.sun.javafx.scene.control.behavior.ColorPickerBehavior;
 import javafx.scene.control.ColorPicker;
 import javafx.beans.property.BooleanProperty;
+import javafx.css.Styleable;
 import javafx.css.StyleableProperty;
 import javafx.event.ActionEvent;
 import javafx.scene.paint.Color;
@@ -82,7 +83,7 @@
         @Override public String getName() {
             return "colorLabelVisible";
         }
-        @Override public CssMetaData getCssMetaData() {
+        @Override public CssMetaData<ColorPicker,Boolean> getCssMetaData() {
             return StyleableProperties.COLOR_LABEL_VISIBLE;
         }
     };
@@ -108,7 +109,7 @@
         @Override public String getName() {
             return "imageUrl";
         }
-        @Override public CssMetaData getCssMetaData() {
+        @Override public CssMetaData<ColorPicker,String> getCssMetaData() {
             return StyleableProperties.GRAPHIC;
         }
     };
@@ -116,7 +117,7 @@
         @Override protected void invalidated() {
             if(pickerColorBox!=null) pickerColorBox.requestLayout();
         }
-        @Override public CssMetaData getCssMetaData() {
+        @Override public CssMetaData<ColorPicker,Number> getCssMetaData() {
             return StyleableProperties.COLOR_RECT_WIDTH;
         }
         @Override public Object getBean() {
@@ -130,7 +131,7 @@
         @Override protected void invalidated() {
             if(pickerColorBox!=null) pickerColorBox.requestLayout();
         }
-        @Override public CssMetaData getCssMetaData() {
+        @Override public CssMetaData<ColorPicker,Number> getCssMetaData() {
             return StyleableProperties.COLOR_RECT_HEIGHT;
         }
         @Override public Object getBean() {
@@ -144,7 +145,7 @@
         @Override protected void invalidated() {
             if(pickerColorBox!=null) pickerColorBox.requestLayout();
         }
-        @Override public CssMetaData getCssMetaData() {
+        @Override public CssMetaData<ColorPicker,Number> getCssMetaData() {
             return StyleableProperties.COLOR_RECT_X;
         }
         @Override public Object getBean() {
@@ -158,7 +159,7 @@
         @Override protected void invalidated() {
             if(pickerColorBox!=null) pickerColorBox.requestLayout();
         }
-        @Override public CssMetaData getCssMetaData() {
+        @Override public CssMetaData<ColorPicker,Number> getCssMetaData() {
             return StyleableProperties.COLOR_RECT_Y;
         }
         @Override public Object getBean() {
@@ -409,7 +410,7 @@
             
             @Override public StyleableProperty<Boolean> getStyleableProperty(ColorPicker n) {
                 final ColorPickerSkin skin = (ColorPickerSkin) n.getSkin();
-                return (StyleableProperty)skin.colorLabelVisible;
+                return (StyleableProperty<Boolean>)skin.colorLabelVisible;
             }
         };
         private static final CssMetaData<ColorPicker,Number> COLOR_RECT_WIDTH =
@@ -467,18 +468,16 @@
                     return skin.imageUrl;
                 }
             };
-        private static final List<CssMetaData<? extends Node, ?>> STYLEABLES;
+        private static final List<CssMetaData<? extends Styleable, ?>> STYLEABLES;
         static {
-            final List<CssMetaData<? extends Node, ?>> styleables =
-                new ArrayList<CssMetaData<? extends Node, ?>>(ComboBoxBaseSkin.getClassCssMetaData());
-            Collections.addAll(styleables,
-                COLOR_LABEL_VISIBLE,
-                COLOR_RECT_WIDTH,
-                COLOR_RECT_HEIGHT,
-                COLOR_RECT_X,
-                COLOR_RECT_Y,
-                GRAPHIC
-            );
+            final List<CssMetaData<? extends Styleable, ?>> styleables =
+                new ArrayList<CssMetaData<? extends Styleable, ?>>(ComboBoxBaseSkin.getClassCssMetaData());
+            styleables.add(COLOR_LABEL_VISIBLE);
+            styleables.add(COLOR_RECT_WIDTH);
+            styleables.add(COLOR_RECT_HEIGHT);
+            styleables.add(COLOR_RECT_X);
+            styleables.add(COLOR_RECT_Y);
+            styleables.add(GRAPHIC);
             STYLEABLES = Collections.unmodifiableList(styleables);
         }
     }
@@ -487,7 +486,7 @@
      * @return The CssMetaData associated with this class, which may include the
      * CssMetaData of its super classes.
      */
-    public static List<CssMetaData<? extends Node, ?>> getClassCssMetaData() {
+    public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
         return StyleableProperties.STYLEABLES;
     }
 
@@ -495,7 +494,7 @@
      * {@inheritDoc}
      */
     @Override
-    public List<CssMetaData<? extends Node, ?>> getCssMetaData() {
+    public List<CssMetaData<? extends Styleable, ?>> getCssMetaData() {
         return getClassCssMetaData();
     }
 
--- a/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/ComboBoxBaseSkin.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/ComboBoxBaseSkin.java	Wed Feb 13 18:35:25 2013 -0500
@@ -41,7 +41,7 @@
     private Node displayNode; // this is normally either label or textField
     
     protected StackPane arrowButton;
-    protected StackPane arrow;
+    protected Region arrow;
     
     /** The mode in which this control will be represented. */
     private ComboBoxMode mode = ComboBoxMode.COMBOBOX;
@@ -54,7 +54,7 @@
         super(comboBox, behavior);
         
         // open button / arrow
-        arrow = new StackPane();
+        arrow = new Region();
         arrow.setFocusTraversable(false);
         arrow.getStyleClass().setAll("arrow");
         arrow.setMaxWidth(Region.USE_PREF_SIZE);
--- a/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/ComboBoxListViewSkin.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/ComboBoxListViewSkin.java	Wed Feb 13 18:35:25 2013 -0500
@@ -117,7 +117,7 @@
         updateComboBoxItems();
         
         this.listView = createListView();
-        this.textField = getEditableInputNode();
+        this.textField = comboBox.isEditable() ? getEditableInputNode() : null;
         
         // Fix for RT-21207. Additional code related to this bug is further below.
         this.listView.setManaged(false);
@@ -187,7 +187,6 @@
         registerChangeListener(comboBox.cellFactoryProperty(), "CELL_FACTORY");
         registerChangeListener(comboBox.visibleRowCountProperty(), "VISIBLE_ROW_COUNT");
         registerChangeListener(comboBox.converterProperty(), "CONVERTER");
-        registerChangeListener(comboBox.editorProperty(), "EDITOR");
         registerChangeListener(comboBox.buttonCellProperty(), "BUTTON_CELL");
         registerChangeListener(comboBox.valueProperty(), "VALUE");
     }
@@ -239,7 +238,7 @@
     @Override public Node getDisplayNode() {
         Node displayNode;
         if (comboBox.isEditable()) {
-            displayNode = textField;
+            displayNode = getEditableInputNode();
         } else {
             displayNode = buttonCell;
         }
@@ -497,7 +496,7 @@
     }
     
     private ListView<T> createListView() {
-        final ListView<T> listView = new ListView<T>() {
+        final ListView<T> _listView = new ListView<T>() {
             private boolean isFirstSizeCalculation = true;
 
             @Override protected double computeMinHeight(double width) {
@@ -535,22 +534,21 @@
             }
             
             private void doCSSCheck() {
-                Parent parent = getPopup().getScene().getRoot();
-                if ((isFirstSizeCalculation || getSkin() == null) && parent.getScene() != null) {
+                if (listView != null && listView.getScene() != null && (isFirstSizeCalculation || getSkin() == null)) {
                     // if the skin is null, it means that the css related to the
                     // listview skin hasn't been loaded yet, so we force it here.
                     // This ensures the combobox button is the correct width
                     // when it is first displayed, before the listview is shown.
-                    parent.impl_processCSS(true);
+                    listView.impl_processCSS(true);
                     isFirstSizeCalculation = false;
                 }
             }
         };
 
-        listView.setId("list-view");
-        listView.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
+        _listView.setId("list-view");
+        _listView.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
 
-        listView.getSelectionModel().selectedIndexProperty().addListener(new InvalidationListener() {
+        _listView.getSelectionModel().selectedIndexProperty().addListener(new InvalidationListener() {
              @Override public void invalidated(Observable o) {
                  if (listSelectionLock) return;
                  int index = listView.getSelectionModel().getSelectedIndex();
@@ -565,7 +563,7 @@
             }
         });
         
-        listView.addEventFilter(MouseEvent.MOUSE_RELEASED, new EventHandler<MouseEvent>() {
+        _listView.addEventFilter(MouseEvent.MOUSE_RELEASED, new EventHandler<MouseEvent>() {
             @Override public void handle(MouseEvent t) {
                 // RT-18672: Without checking if the user is clicking in the 
                 // scrollbar area of the ListView, the comboBox will hide. Therefore,
@@ -585,7 +583,7 @@
             }
         });
 
-        listView.setOnKeyPressed(new EventHandler<KeyEvent>() {
+        _listView.setOnKeyPressed(new EventHandler<KeyEvent>() {
             @Override public void handle(KeyEvent t) {
                 // TODO move to behavior, when (or if) this class becomes a SkinBase
                 if (t.getCode() == KeyCode.ENTER || 
@@ -596,7 +594,7 @@
             }
         });
         
-        return listView;
+        return _listView;
     }
     
     private double getListViewPrefHeight() {
--- a/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/ContextMenuContent.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/ContextMenuContent.java	Wed Feb 13 18:35:25 2013 -0500
@@ -76,6 +76,7 @@
 
 import com.sun.javafx.scene.control.behavior.TwoLevelFocusPopupBehavior;
 import javafx.beans.property.ReadOnlyBooleanProperty;
+import javafx.css.Styleable;
 
 /**
  * This is a the SkinBase for PopupMenu based controls so that the CSS parts
@@ -883,19 +884,19 @@
      /** @treatAsPrivate */
     private static class StyleableProperties {
 
-        private static final List<CssMetaData<? extends Node, ?>> STYLEABLES;
+        private static final List<CssMetaData<? extends Styleable, ?>> STYLEABLES;
         static {
 
-            final List<CssMetaData<? extends Node, ?>> styleables =
-                new ArrayList<CssMetaData<? extends Node, ?>>(Region.getClassCssMetaData());
+            final List<CssMetaData<? extends Styleable, ?>> styleables =
+                new ArrayList<CssMetaData<? extends Styleable, ?>>(Region.getClassCssMetaData());
 
             //
             // SkinBase only has Region's unique StlyleableProperty's, none of Nodes
             // So, we need to add effect back in. The effect property is in a
             // private inner class, so get the property from Node the hard way.
-            final List<CssMetaData<? extends Node, ?>> nodeStyleables = Node.getClassCssMetaData();
+            final List<CssMetaData<? extends Styleable, ?>> nodeStyleables = Node.getClassCssMetaData();
             for(int n=0, max=nodeStyleables.size(); n<max; n++) {
-                CssMetaData styleable = nodeStyleables.get(n);
+                CssMetaData<? extends Styleable, ?> styleable = nodeStyleables.get(n);
                 if ("effect".equals(styleable.getProperty())) {
                     styleables.add(styleable);
                     break;
@@ -909,7 +910,7 @@
      * @return The CssMetaData associated with this class, which may include the
      * CssMetaData of its super classes.
      */
-    public static List<CssMetaData<? extends Node, ?>> getClassCssMetaData() {
+    public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
         return StyleableProperties.STYLEABLES;
     }
 
@@ -917,7 +918,7 @@
      * {@inheritDoc}
      */
     @Override
-    public List<CssMetaData<? extends Node, ?>> getCssMetaData() {
+    public List<CssMetaData<? extends Styleable, ?>> getCssMetaData() {
         return getClassCssMetaData();
     }
     
--- a/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/CustomColorDialog.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/CustomColorDialog.java	Wed Feb 13 18:35:25 2013 -0500
@@ -250,18 +250,20 @@
         };
          
         private void updateRGBColor() {
-            setColor(Color.rgb(red.get(), green.get(), blue.get(), clamp(alpha.get() / 100)));
-            hue.set(getColor().getHue());
-            sat.set(getColor().getSaturation() * 100);
-            bright.set(getColor().getBrightness() * 100);
+            Color newColor = Color.rgb(red.get(), green.get(), blue.get(), clamp(alpha.get() / 100));
+            hue.set(newColor.getHue());
+            sat.set(newColor.getSaturation() * 100);
+            bright.set(newColor.getBrightness() * 100);
+            setColor(newColor);
         }
         
         private void updateHSBColor() {
-            setColor(Color.hsb(hue.get(), clamp(sat.get() / 100), 
-                            clamp(bright.get() / 100), clamp(alpha.get() / 100)));
-            red.set(doubleToInt(getColor().getRed()));
-            green.set(doubleToInt(getColor().getGreen()));
-            blue.set(doubleToInt(getColor().getBlue()));
+            Color newColor = Color.hsb(hue.get(), clamp(sat.get() / 100), 
+                            clamp(bright.get() / 100), clamp(alpha.get() / 100));
+            red.set(doubleToInt(newColor.getRed()));
+            green.set(doubleToInt(newColor.getGreen()));
+            blue.set(doubleToInt(newColor.getBlue()));
+            setColor(newColor);
         }
        
         private void colorChanged() {
--- a/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/LabeledImpl.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/LabeledImpl.java	Wed Feb 13 18:35:25 2013 -0500
@@ -39,36 +39,38 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import javafx.css.Styleable;
 import javafx.css.StyleableProperty;
-import javafx.scene.Node;
 import javafx.scene.layout.Region;
 
 
 public class LabeledImpl extends Label {
 
     public LabeledImpl(final Labeled labeled) {
-        new Shuttler(this, labeled);
+        shuttler = new Shuttler(this, labeled);
     }
-        
+    private final Shuttler shuttler;
+    
     private static void initialize(Shuttler shuttler, LabeledImpl labeledImpl, Labeled labeled) {
-        
+    
         labeledImpl.setText(labeled.getText());
         labeled.textProperty().addListener(shuttler);
         
         labeledImpl.setGraphic(labeled.getGraphic());
         labeled.graphicProperty().addListener(shuttler);
         
-        final List<CssMetaData<? extends Node, ?>> styleables = StyleableProperties.STYLEABLES_TO_MIRROR;
+        final List<CssMetaData<? extends Styleable, ?>> styleables = StyleableProperties.STYLEABLES_TO_MIRROR;
         
         for(int n=0, nMax=styleables.size(); n<nMax; n++) {
-            final CssMetaData styleable = styleables.get(n);
+            @SuppressWarnings("unchecked")
+            final CssMetaData<Styleable,Object> styleable = (CssMetaData<Styleable,Object>)styleables.get(n);
             
             // the Labeled isn't necessarily a Label, so skip the skin or
             // we'll get an argument type mismatch on the invocation of the
             // skin constructor. 
             if ("-fx-skin".equals(styleable.getProperty())) continue;
             
-            final StyleableProperty fromVal = styleable.getStyleableProperty(labeled);
+            final StyleableProperty<?> fromVal = styleable.getStyleableProperty(labeled);
             if (fromVal instanceof Observable) {
                 // listen for changes to this property
                 ((Observable)fromVal).addListener(shuttler);
@@ -105,8 +107,9 @@
                 }
                 
             } else if (valueModel instanceof StyleableProperty) { 
-                StyleableProperty styleableProperty = (StyleableProperty)valueModel;
-                CssMetaData cssMetaData = styleableProperty.getCssMetaData();
+                StyleableProperty<?> styleableProperty = (StyleableProperty)valueModel;
+                @SuppressWarnings("unchecked")
+                CssMetaData<Styleable,Object> cssMetaData = (CssMetaData<Styleable,Object>)styleableProperty.getCssMetaData();
                 if (cssMetaData != null) {
                     StyleOrigin origin = styleableProperty.getStyleOrigin();
                     cssMetaData.set(labeledImpl, styleableProperty.getValue(), origin);
@@ -118,7 +121,7 @@
     /** Protected for unit test purposes */
     static final class StyleableProperties {
 
-        static final List<CssMetaData<? extends Node, ?>> STYLEABLES_TO_MIRROR;
+        static final List<CssMetaData<? extends Styleable, ?>> STYLEABLES_TO_MIRROR;
         static {
             //
             // We do this as we only want to mirror the Labeled's keys,
@@ -134,10 +137,10 @@
             // If just this subset were returned (by impl_CSS_STYLEABLE) then
             // -fx-opacity (for example) would be meaningless to the Labeled. 
             // 
-            final List<CssMetaData<? extends Node, ?>> labeledStyleables = Labeled.getClassCssMetaData();
-            final List<CssMetaData<? extends Node, ?>> parentStyleables = Region.getClassCssMetaData();
-            final List<CssMetaData<? extends Node, ?>> styleables = 
-                new ArrayList<CssMetaData<? extends Node, ?>>(labeledStyleables);
+            final List<CssMetaData<? extends Styleable, ?>> labeledStyleables = Labeled.getClassCssMetaData();
+            final List<CssMetaData<? extends Styleable, ?>> parentStyleables = Region.getClassCssMetaData();
+            final List<CssMetaData<? extends Styleable, ?>> styleables = 
+                new ArrayList<CssMetaData<? extends Styleable, ?>>(labeledStyleables);
             styleables.removeAll(parentStyleables);
             STYLEABLES_TO_MIRROR = Collections.unmodifiableList(styleables);
         }
--- a/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/LabeledText.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/LabeledText.java	Wed Feb 13 18:35:25 2013 -0500
@@ -11,8 +11,8 @@
 import javafx.css.CssMetaData;
 import javafx.css.FontCssMetaData;
 import javafx.css.StyleOrigin;
+import javafx.css.Styleable;
 import javafx.css.StyleableProperty;
-import javafx.scene.Node;
 import javafx.scene.control.Labeled;
 import javafx.scene.paint.Color;
 import javafx.scene.paint.Paint;
@@ -66,7 +66,7 @@
      * @return The CssMetaData associated with this class, which may include the
      * CssMetaData of its super classes.
      */
-    public static List<CssMetaData<? extends Node, ?>> getClassCssMetaData() {
+    public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
         return StyleableProperties.STYLEABLES;
     }
 
@@ -74,7 +74,7 @@
      * {@inheritDoc}
      */
     @Override
-    public List<CssMetaData<? extends Node, ?>> getCssMetaData() {
+    public List<CssMetaData<? extends Styleable, ?>> getCssMetaData() {
         return getClassCssMetaData();
     }
 
@@ -282,11 +282,11 @@
             }
         };
 
-       private static final List<CssMetaData<? extends Node, ?>> STYLEABLES;
+       private static final List<CssMetaData<? extends Styleable, ?>> STYLEABLES;
        static {
 
-           final List<CssMetaData<? extends Node, ?>> styleables =
-               new ArrayList<CssMetaData<? extends Node, ?>>(Text.getClassCssMetaData());
+           final List<CssMetaData<? extends Styleable, ?>> styleables =
+               new ArrayList<CssMetaData<? extends Styleable, ?>>(Text.getClassCssMetaData());
 
            for (int n=0,nMax=styleables.size(); n<nMax; n++) {
                final String prop = styleables.get(n).getProperty();
--- a/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/PaginationSkin.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/PaginationSkin.java	Wed Feb 13 18:35:25 2013 -0500
@@ -43,6 +43,7 @@
 import javafx.beans.value.ChangeListener;
 import javafx.beans.value.ObservableValue;
 import javafx.collections.ListChangeListener;
+import javafx.css.Styleable;
 import javafx.css.StyleableProperty;
 import javafx.event.ActionEvent;
 import javafx.event.EventHandler;
@@ -519,7 +520,7 @@
                 }
 
                 @Override
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<Pagination,Boolean> getCssMetaData() {
                     return StyleableProperties.ARROWS_VISIBLE;
                 }
 
@@ -549,7 +550,7 @@
                 }
 
                 @Override
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<Pagination,Boolean> getCssMetaData() {
                     return StyleableProperties.PAGE_INFORMATION_VISIBLE;
                 }
 
@@ -579,7 +580,7 @@
                 }
 
                 @Override
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<Pagination,Side> getCssMetaData() {
                     return StyleableProperties.PAGE_INFORMATION_ALIGNMENT;
                 }
 
@@ -609,7 +610,7 @@
                 }
 
                 @Override
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<Pagination,Boolean> getCssMetaData() {
                     return StyleableProperties.TOOLTIP_VISIBLE;
                 }
 
@@ -1239,7 +1240,7 @@
             @Override
             public StyleableProperty<Boolean> getStyleableProperty(Pagination n) {
                 final PaginationSkin skin = (PaginationSkin) n.getSkin();
-                return (StyleableProperty)skin.arrowsVisibleProperty();
+                return (StyleableProperty<Boolean>)skin.arrowsVisibleProperty();
             }
         };
 
@@ -1256,7 +1257,7 @@
             @Override
             public StyleableProperty<Boolean> getStyleableProperty(Pagination n) {
                 final PaginationSkin skin = (PaginationSkin) n.getSkin();
-                return (StyleableProperty)skin.pageInformationVisibleProperty();
+                return (StyleableProperty<Boolean>)skin.pageInformationVisibleProperty();
             }
         };
 
@@ -1273,7 +1274,7 @@
             @Override
             public StyleableProperty<Side> getStyleableProperty(Pagination n) {
                 final PaginationSkin skin = (PaginationSkin) n.getSkin();
-                return (StyleableProperty)skin.pageInformationAlignmentProperty();
+                return (StyleableProperty<Side>)skin.pageInformationAlignmentProperty();
             }
         };
 
@@ -1290,20 +1291,18 @@
             @Override
             public StyleableProperty<Boolean> getStyleableProperty(Pagination n) {
                 final PaginationSkin skin = (PaginationSkin) n.getSkin();
-                return (StyleableProperty)skin.tooltipVisibleProperty();
+                return (StyleableProperty<Boolean>)skin.tooltipVisibleProperty();
             }
         };
 
-        private static final List<CssMetaData<? extends Node, ?>> STYLEABLES;
+        private static final List<CssMetaData<? extends Styleable, ?>> STYLEABLES;
         static {
-            final List<CssMetaData<? extends Node, ?>> styleables =
-                new ArrayList<CssMetaData<? extends Node, ?>>(SkinBase.getClassCssMetaData());
-            Collections.addAll(styleables,
-                ARROWS_VISIBLE,
-                PAGE_INFORMATION_VISIBLE,
-                PAGE_INFORMATION_ALIGNMENT,
-                TOOLTIP_VISIBLE
-            );
+            final List<CssMetaData<? extends Styleable, ?>> styleables =
+                new ArrayList<CssMetaData<? extends Styleable, ?>>(SkinBase.getClassCssMetaData());
+            styleables.add(ARROWS_VISIBLE);
+            styleables.add(PAGE_INFORMATION_VISIBLE);
+            styleables.add(PAGE_INFORMATION_ALIGNMENT);
+            styleables.add(TOOLTIP_VISIBLE);
             STYLEABLES = Collections.unmodifiableList(styleables);
         }
     }
@@ -1312,7 +1311,7 @@
      * @return The CssMetaData associated with this class, which may include the
      * CssMetaData of its super classes.
      */
-    public static List<CssMetaData<? extends Node, ?>> getClassCssMetaData() {
+    public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
         return StyleableProperties.STYLEABLES;
     }
 
@@ -1320,7 +1319,7 @@
      * {@inheritDoc}
      */
     @Override
-    public List<CssMetaData<? extends Node, ?>> getCssMetaData() {
+    public List<CssMetaData<? extends Styleable, ?>> getCssMetaData() {
         return getClassCssMetaData();
     }
 
--- a/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/ProgressBarSkin.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/ProgressBarSkin.java	Wed Feb 13 18:35:25 2013 -0500
@@ -54,7 +54,7 @@
 import com.sun.javafx.css.converters.BooleanConverter;
 import com.sun.javafx.css.converters.SizeConverter;
 import com.sun.javafx.scene.control.behavior.ProgressBarBehavior;
-import javafx.scene.Node;
+import javafx.css.Styleable;
 
 
 public class ProgressBarSkin extends BehaviorSkinBase<ProgressBar, ProgressBarBehavior<ProgressBar>> {
@@ -89,7 +89,7 @@
                 }
 
                 @Override
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<ProgressBar,Number> getCssMetaData() {
                     return StyleableProperties.INDETERMINATE_BAR_LENGTH;
                 }
             
@@ -119,7 +119,7 @@
                 }
 
                 @Override
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<ProgressBar,Boolean> getCssMetaData() {
                     return StyleableProperties.INDETERMINATE_BAR_ESCAPE;
                 }
             
@@ -150,7 +150,7 @@
                 }
 
                 @Override
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<ProgressBar,Boolean> getCssMetaData() {
                     return StyleableProperties.INDETERMINATE_BAR_FLIP;
                 }
                         
@@ -183,7 +183,7 @@
                 }
 
                 @Override
-                public CssMetaData getCssMetaData() {
+                public CssMetaData<ProgressBar,Number> getCssMetaData() {
                     return StyleableProperties.INDETERMINATE_BAR_ANIMATION_TIME;
                 }
             
@@ -565,11 +565,11 @@
             }
         };
 
-         private static final List<CssMetaData<? extends Node, ?>> STYLEABLES;
+         private static final List<CssMetaData<? extends Styleable, ?>> STYLEABLES;
          static {
 
-            final List<CssMetaData<? extends Node, ?>> styleables = 
-                new ArrayList<CssMetaData<? extends Node, ?>>(SkinBase.getClassCssMetaData());
+            final List<CssMetaData<? extends Styleable, ?>> styleables = 
+                new ArrayList<CssMetaData<? extends Styleable, ?>>(SkinBase.getClassCssMetaData());
             styleables.add(INDETERMINATE_BAR_LENGTH);
             styleables.add(INDETERMINATE_BAR_ESCAPE);
             styleables.add(INDETERMINATE_BAR_FLIP);
@@ -583,7 +583,7 @@
      * @return The CssMetaData associated with this class, which may include the
      * CssMetaData of its super classes.
      */
-    public static List<CssMetaData<? extends Node, ?>> getClassCssMetaData() {
+    public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
         return StyleableProperties.STYLEABLES;
     }
 
@@ -591,7 +591,7 @@
      * {@inheritDoc}
      */
     @Override
-    public List<CssMetaData<? extends Node, ?>> getCssMetaData() {
+    public List<CssMetaData<? extends Styleable, ?>> getCssMetaData() {
         return getClassCssMetaData();
     }
 
--- a/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/ProgressIndicatorSkin.java	Mon Feb 11 17:50:32 2013 -0800
+++ b/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/ProgressIndicatorSkin.java	Wed Feb 13 18:35:25 2013 -0500
@@ -66,6 +66,7 @@
 import com.sun.javafx.css.converters.SizeConverter;
 import com.sun.javafx.scene.control.behavior.ProgressIndicatorBehavior;
 import com.sun.javafx.scene.control.skin.resources.ControlResources;
+import javafx.css.Styleable;
 import javafx.geometry.Insets;
 
 public class ProgressIndicatorSkin extends BehaviorSkinBase<ProgressIndicator, ProgressIndicatorBehavior<ProgressIndicator>> {
@@ -599,7 +600,7 @@
                     return "progressColorProperty";
                 }
 
-                @Override public CssMetaData getCssMetaData() {
+                @Override public CssMetaData<ProgressIndicator,Paint> getCssMetaData() {
                     return StyleableProperties.PROGRESS_COLOR;
                 }
             };
@@ -622,8