changeset 3814:ea108dc8da59

Automated merge with ssh://jfxsrc.us.oracle.com//javafx/8.0/MASTER/jfx/rt
author jgodinez
date Tue, 04 Jun 2013 09:43:48 -0700
parents b8fefd02229f e096b075097d
children 40836a4b4d85 eb4b66ebb62c 39089954dc77
files javafx-builders/test/unit/com/sun/javafx/test/PropertiesTestBase.java javafx-builders/test/unit/com/sun/javafx/test/PropertyReference.java javafx-builders/test/unit/com/sun/javafx/test/binding/ReflectionHelper.java javafx-builders/test/unit/javafx/scene/Node_properties_Test.java javafx-builders/test/unit/javafx/scene/Scene_properties_Test.java javafx-builders/test/unit/javafx/scene/effect/Blend_properties_Test.java javafx-builders/test/unit/javafx/scene/effect/Bloom_properties_Test.java javafx-builders/test/unit/javafx/scene/effect/BoxBlur_properties_Test.java javafx-builders/test/unit/javafx/scene/effect/ColorAdjust_properties_Test.java javafx-builders/test/unit/javafx/scene/effect/ColorInput_properties_Test.java javafx-builders/test/unit/javafx/scene/effect/DisplacementMap_properties_Test.java javafx-builders/test/unit/javafx/scene/effect/DistantLight_properties_Test.java javafx-builders/test/unit/javafx/scene/effect/DropShadow_properties_Test.java javafx-builders/test/unit/javafx/scene/effect/FloatMap_properties_Test.java javafx-builders/test/unit/javafx/scene/effect/GaussianBlur_properties_Test.java javafx-builders/test/unit/javafx/scene/effect/Glow_properties_Test.java javafx-builders/test/unit/javafx/scene/effect/ImageInput_properties_Test.java javafx-builders/test/unit/javafx/scene/effect/InnerShadow_properties_Test.java javafx-builders/test/unit/javafx/scene/effect/Lighting_properties_Test.java javafx-builders/test/unit/javafx/scene/effect/MotionBlur_properties_Test.java javafx-builders/test/unit/javafx/scene/effect/PerspectiveTransform_properties_Test.java javafx-builders/test/unit/javafx/scene/effect/PointLight_properties_Test.java javafx-builders/test/unit/javafx/scene/effect/Reflection_properties_Test.java javafx-builders/test/unit/javafx/scene/effect/SepiaTone_properties_Test.java javafx-builders/test/unit/javafx/scene/effect/Shadow_properties_Test.java javafx-builders/test/unit/javafx/scene/effect/SpotLight_properties_Test.java javafx-builders/test/unit/javafx/scene/shape/ArcTo_properties_Test.java javafx-builders/test/unit/javafx/scene/shape/Arc_properties_Test.java javafx-builders/test/unit/javafx/scene/shape/Circle_properties_Test.java javafx-builders/test/unit/javafx/scene/shape/CubicCurveTo_properties_Test.java javafx-builders/test/unit/javafx/scene/shape/CubicCurve_properties_Test.java javafx-builders/test/unit/javafx/scene/shape/Ellipse_properties_Test.java javafx-builders/test/unit/javafx/scene/shape/HLineTo_properties_Test.java javafx-builders/test/unit/javafx/scene/shape/LineTo_properties_Test.java javafx-builders/test/unit/javafx/scene/shape/Line_properties_Test.java javafx-builders/test/unit/javafx/scene/shape/MoveTo_properties_Test.java javafx-builders/test/unit/javafx/scene/shape/Path_properties_Test.java javafx-builders/test/unit/javafx/scene/shape/QuadCurveTo_properties_Test.java javafx-builders/test/unit/javafx/scene/shape/QuadCurve_properties_Test.java javafx-builders/test/unit/javafx/scene/shape/Rectangle_properties_Test.java javafx-builders/test/unit/javafx/scene/shape/SVGPath_properties_Test.java javafx-builders/test/unit/javafx/scene/shape/Shape_properties_Test.java javafx-builders/test/unit/javafx/scene/shape/VLineTo_properties_Test.java javafx-builders/test/unit/javafx/scene/transform/Transform_properties_Test.java
diffstat 926 files changed, 4971 insertions(+), 6161 deletions(-) [+]
line wrap: on
line diff
--- a/.classpath	Mon Jun 03 10:53:52 2013 -0700
+++ b/.classpath	Tue Jun 04 09:43:48 2013 -0700
@@ -1,188 +1,198 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-    <classpathentry kind="src" path="apps/experiments/3DViewer/src/main/java"/>
-    <classpathentry kind="src" path="apps/experiments/3DViewer/src/test/java"/>
-    <classpathentry kind="src" path="apps/experiments/3DViewer/src/test/resources"/>
-    <!--
-    <classpathentry kind="src" path="apps/experiments/ConferenceScheduleApp/src"/>
-    <classpathentry kind="src" path="apps/experiments/ModenaTest/test"/>
-    <classpathentry kind="src" path="apps/experiments/Modena/src"/>
-    -->
-    <classpathentry kind="src" path="apps/samples/Ensemble8/src/app"/>
-    <classpathentry kind="src" path="apps/samples/Ensemble8/src/compiletime"/>
-    <classpathentry kind="src" path="apps/samples/Ensemble8/src/generated"/>
-    <classpathentry kind="src" path="apps/samples/Ensemble8/src/samples"/>
-    <classpathentry kind="lib" path="apps/samples/Ensemble8/lib/lucene-core-3.2.0.jar"/>
-    <classpathentry kind="lib" path="apps/samples/Ensemble8/lib/lucene-grouping-3.2.0.jar"/>
-
-    <classpathentry kind="src" path="decora-compiler/build/gensrc"/>
-    <classpathentry kind="src" path="decora-compiler/src"/>
-    <classpathentry kind="src" path="decora-d3d/src"/>
-    <classpathentry kind="src" path="decora-d3d/build/gensrc"/>
-    <classpathentry kind="src" path="decora-es2/src"/>
-    <classpathentry kind="src" path="decora-es2/build/gensrc"/>
-    <classpathentry kind="src" path="decora-jsw/build/gensrc"/>
-    <classpathentry kind="src" path="decora-jsw/src"/>
-    <classpathentry kind="src" path="decora-prism-ps/build/gensrc"/>
-    <classpathentry kind="src" path="decora-prism-ps/src"/>
-    <classpathentry kind="src" path="decora-prism-sw/src"/>
-    <classpathentry kind="src" path="decora-prism/src"/>
-    <classpathentry kind="src" path="decora-runtime/src"/>
-    <classpathentry kind="src" path="decora-runtime/generator"/>
-    <classpathentry kind="src" path="decora-runtime/test"/>
-    <classpathentry kind="src" path="decora-sse/src"/>
-    <classpathentry kind="src" path="decora-sse/build/gensrc"/>
-
-    <classpathentry kind="src" path="deploy/javafx-deploy/src"/>
-    <classpathentry kind="src" path="deploy/javafx-launcher/src"/>
-    <classpathentry kind="src" path="deploy/packager/src"/>
-    <classpathentry kind="src" path="deploy/packager/test"/>
-
-    <classpathentry kind="src" path="glass/glass/src"/>
-
-    <classpathentry kind="src" path="javafx-anim/src"/>
-    <classpathentry kind="src" path="javafx-anim/test/unit"/>
-    <!--
-    <classpathentry kind="src" path="javafx-annotation-processor/src"/>
-    -->
-    <classpathentry kind="src" path="javafx-beans/src"/>
-    <classpathentry kind="src" path="javafx-beans/test"/>
-    <classpathentry kind="src" path="javafx-beans-dt/src"/>
-    <classpathentry kind="src" path="javafx-beans-dt/test"/>
-
-    <!--
-    <classpathentry kind="src" path="javafx-builders/test/unit"/>
-    <classpathentry kind="src" path="javafx-builders/src"/>
-    -->
-    <classpathentry kind="lib" exported="true" path="javafx-builders/dist/javafx-builders.jar">
-        <attributes>
-            <attribute name="optional" value="true"/>
-        </attributes>
-    </classpathentry>
-    
-    <classpathentry kind="src" path="javafx-concurrent/src"/>
-    <classpathentry kind="src" path="javafx-concurrent/test"/>
-    <classpathentry kind="src" path="javafx-common/test/unit"/>
-    <classpathentry kind="src" path="javafx-common/build/gensrc/classes"/>
-    <classpathentry kind="src" path="javafx-common/src"/>
-    <classpathentry kind="src" path="javafx-designtime/src"/>
-    <!--
-    <classpathentry kind="src" path="javafx-designtime/test"/>
-    -->
-    <!-- Temporarily excluding SwingNode as it requires Java 8 -->
-    <!--
-    <classpathentry kind="src" excluding="javafx/embed/swing/SwingNode.java" path="javafx-embed-swing/src"/>
-    -->
-    <classpathentry kind="src" path="javafx-embed-swing/src"/>
-    <classpathentry kind="src" path="javafx-embed-swt/src"/>
-    <classpathentry kind="src" path="javafx-fxml/src"/>
-    <classpathentry kind="src" path="javafx-fxml/test"/>
-    <classpathentry kind="src" path="javafx-geom/src"/>
-    <classpathentry kind="src" path="javafx-geom/test"/>	
-    <classpathentry kind="src" path="javafx-iio/src"/>
-    <classpathentry kind="src" path="javafx-iio/test"/>
-    <classpathentry kind="src" path="javafx-logging/src"/>
-    <classpathentry kind="src" path="javafx-sg-common/src"/>
-    <classpathentry kind="src" path="javafx-sg-common/test"/>
-    <classpathentry kind="src" path="javafx-sg-prism/src"/>
-    <classpathentry kind="src" path="javafx-sg-prism/test"/>
-    <classpathentry kind="src" path="javafx-ui-charts/src"/>
-    <classpathentry kind="src" path="javafx-ui-charts/test"/>
-    <classpathentry kind="src" path="javafx-ui-common/src"/>
-    <!--
-    <classpathentry kind="src" path="javafx-ui-common/test/unit"/>
-    -->
-    <classpathentry kind="src" path="javafx-ui-controls/src"/>
-    <classpathentry kind="src" path="javafx-ui-controls/test"/>
-    <classpathentry kind="src" path="javafx-ui-quantum/src"/>
-    <classpathentry kind="src" path="javafx-util-converter/src"/>
-    <classpathentry kind="src" path="javafx-util-converter/test"/>
-
-    <classpathentry kind="src" path="pisces/src"/>
-
-    <classpathentry kind="src" path="prism-common/src"/>
-    <classpathentry kind="src" path="prism-common/test"/>
-	<classpathentry kind="src" path="prism-d3d/src"/>
-	<classpathentry kind="src" path="prism-d3d/build/gensrc">
-		<attributes>
-			<attribute name="optional" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="src" path="prism-es2/src"/>
-	<classpathentry kind="src" path="prism-es2-eglfb/src"/>
-	<classpathentry kind="src" path="prism-es2-eglx11/src"/>
-	<!--
-	<classpathentry kind="src" path="prism-es2-ios/src"/>
-	-->
-	<classpathentry kind="src" path="prism-es2-mac/src"/>
-	<classpathentry kind="src" path="prism-es2-win/src"/>
-	<classpathentry kind="src" path="prism-es2-x11/src"/>
-	<classpathentry kind="src" path="prism-es2/build/gensrc">
-		<attributes>
-			<attribute name="optional" value="true"/>
-		</attributes>
-	</classpathentry>
-    <classpathentry kind="src" path="prism-j2d/src"/>
-    <classpathentry kind="src" path="prism-sw/src"/>
-    <classpathentry kind="src" path="prism-null/src"/>
-    <classpathentry kind="src" path="prism-ps/src"/>
-    <classpathentry kind="src" path="prism-ps/build/gensrc"/>
-	<classpathentry kind="src" path="prism-ps/test"/>
-	<!--
-	<classpathentry kind="src" path="prism-ps/shadergen"/>
-	-->
-    <classpathentry kind="src" path="prism-util/src"/>
-
-    <classpathentry kind="src" path="test-stub-toolkit/src"/>
-	<classpathentry kind="src" path="tests/app-lifecycle/ClassLoaderApp/src"/>
-	<classpathentry kind="src" path="tests/app-lifecycle/ClassLoaderTest/test"/>
-	<classpathentry kind="src" path="tests/app-lifecycle/LauncherTests/test"/>
-	<classpathentry kind="src" path="tests/app-lifecycle/LifeCycleTests/test"/>
-	<classpathentry kind="src" path="tests/glass/ExceptionHandler/test"/>
-	<classpathentry kind="src" path="tests/graphics/MaterialTests/test"/>
-	<classpathentry kind="src" path="tests/graphics/SnapshotTests/test"/>
-	<classpathentry kind="src" path="tests/graphics/SwingInterop/test"/>
-	<classpathentry kind="src" path="tests/manual/printing"/>
-	<classpathentry kind="src" path="tests/quantum/CloseWindow/test"/>
-	<classpathentry kind="src" path="tests/quantum/WindowSceneInitDispose/test"/>
-
-	<classpathentry kind="src" path="webview/src"/>
-	<!--
-	<classpathentry kind="src" path="webview/test"/>
-	-->
-	<classpathentry combineaccessrules="false" kind="src" path="webview/native/WebKitBuild/Release/WebCore/generated/java">
-        <attributes>
-            <attribute name="optional" value="true"/>
-        </attributes>
-    </classpathentry>
-    <classpathentry kind="lib" path="../caches/sdk/build/lib/desktop/webview.jar">
-        <attributes>
-            <attribute name="optional" value="true"/>
-        </attributes>
-    </classpathentry>
-
-    <classpathentry kind="src" path="/rt-closed"/>
-	<classpathentry combineaccessrules="false" kind="src" path="/media">
-		<attributes>
-			<attribute name="optional" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="lib" path="../caches/sdk/build/lib/desktop/jfxmedia.jar">
-		<attributes>
-			<attribute name="optional" value="true"/>
-		</attributes>
-	</classpathentry>
-
-    <classpathentry kind="src" path="/org.eclipse.swt">
-        <attributes>
-            <attribute name="optional" value="true"/>
-        </attributes>
-    </classpathentry>
-    <classpathentry kind="lib" path="../import/swt-3.7.1/swt-debug.jar"/>
-    <classpathentry kind="output" path="bin"/>
-    
-    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-    <classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
-    <classpathentry kind="lib" path="../import/antlr-3.1.3/antlr-3.1.3/lib/antlr-3.1.3.jar"/>
-    <classpathentry kind="lib" path="../import/findbugs-2.0.1/findbugs-2.0.1/lib/ant.jar"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="apps/experiments/3DViewer/src/main/java"/>
+	<classpathentry kind="src" path="apps/experiments/3DViewer/src/test/java"/>
+	<classpathentry kind="src" path="apps/experiments/3DViewer/src/test/resources"/>
+	<!--
+	<classpathentry kind="src" path="apps/experiments/ConferenceScheduleApp/src"/>
+	<classpathentry kind="src" path="apps/experiments/ModenaTest/test"/>
+	<classpathentry kind="src" path="apps/experiments/Modena/src"/>
+	-->
+	<classpathentry kind="src" path="apps/samples/Ensemble8/src/app"/>
+	<classpathentry kind="src" path="apps/samples/Ensemble8/src/compiletime"/>
+	<classpathentry kind="src" path="apps/samples/Ensemble8/src/generated"/>
+	<classpathentry kind="src" path="apps/samples/Ensemble8/src/samples"/>
+	<classpathentry kind="lib" path="apps/samples/Ensemble8/lib/lucene-core-3.2.0.jar"/>
+	<classpathentry kind="lib" path="apps/samples/Ensemble8/lib/lucene-grouping-3.2.0.jar"/>
+
+	<classpathentry kind="src" path="decora-compiler/build/gensrc"/>
+	<classpathentry kind="src" path="decora-compiler/src"/>
+	<classpathentry kind="src" path="decora-d3d/src"/>
+	<classpathentry kind="src" path="decora-d3d/build/gensrc"/>
+	<classpathentry kind="src" path="decora-es2/src"/>
+	<classpathentry kind="src" path="decora-es2/build/gensrc"/>
+	<classpathentry kind="src" path="decora-jsw/build/gensrc"/>
+	<classpathentry kind="src" path="decora-jsw/src"/>
+	<classpathentry kind="src" path="decora-prism-ps/build/gensrc"/>
+	<classpathentry kind="src" path="decora-prism-ps/src"/>
+	<classpathentry kind="src" path="decora-prism-sw/src"/>
+	<classpathentry kind="src" path="decora-prism/src"/>
+	<classpathentry kind="src" path="decora-runtime/src"/>
+	<classpathentry kind="src" path="decora-runtime/generator"/>
+	<classpathentry kind="src" path="decora-runtime/test"/>
+	<classpathentry kind="src" path="decora-sse/src"/>
+	<classpathentry kind="src" path="decora-sse/build/gensrc"/>
+
+	<classpathentry kind="src" path="deploy/javafx-deploy/src"/>
+	<classpathentry kind="src" path="deploy/javafx-launcher/src"/>
+	<classpathentry kind="src" path="deploy/packager/src"/>
+	<classpathentry kind="src" path="deploy/packager/test"/>
+
+	<classpathentry kind="src" path="glass/glass/src"/>
+
+	<classpathentry kind="src" path="javafx-anim/src"/>
+	<classpathentry kind="src" path="javafx-anim/test/unit"/>
+	<!--
+	<classpathentry kind="src" path="javafx-annotation-processor/src"/>
+	-->
+	<classpathentry kind="src" path="javafx-beans/src"/>
+	<classpathentry kind="src" path="javafx-beans/test"/>
+	<classpathentry kind="src" path="javafx-beans-dt/src"/>
+	<classpathentry kind="src" path="javafx-beans-dt/test"/>
+
+	<!-- 
+	Builders are deprecated and do notbuild clean on new versions of JDK.
+	Using the library instead of the source. 
+	-->
+	<!--
+	<classpathentry kind="src" path="javafx-builders/test/unit"/>
+	<classpathentry kind="src" path="javafx-builders/src"/>
+	-->
+	<classpathentry kind="lib" exported="true" path="javafx-builders/dist/javafx-builders.jar" sourcepath="javafx-builders/src">
+		<attributes>
+			<attribute name="optional" value="true"/>
+		</attributes>
+	</classpathentry>
+
+	<classpathentry kind="src" path="javafx-concurrent/src"/>
+	<classpathentry kind="src" path="javafx-concurrent/test"/>
+	<classpathentry kind="src" path="javafx-common/test/unit"/>
+	<classpathentry kind="src" path="javafx-common/build/gensrc/classes"/>
+	<classpathentry kind="src" path="javafx-common/src"/>
+	<classpathentry kind="src" path="javafx-designtime/src"/>
+	<!--
+	<classpathentry kind="src" path="javafx-designtime/test"/>
+	-->
+	<!-- Temporarily excluding SwingNode as it requires Java 8 -->
+	<!--
+	<classpathentry kind="src" excluding="javafx/embed/swing/SwingNode.java" path="javafx-embed-swing/src"/>
+	-->
+	<classpathentry kind="src" path="javafx-embed-swing/src"/>
+	<classpathentry kind="src" path="javafx-embed-swt/src"/>
+	<classpathentry kind="src" path="javafx-fxml/src"/>
+	<classpathentry kind="src" path="javafx-fxml/test"/>
+	<classpathentry kind="src" path="javafx-geom/src"/>
+	<classpathentry kind="src" path="javafx-geom/test"/>	
+	<classpathentry kind="src" path="javafx-iio/src"/>
+	<classpathentry kind="src" path="javafx-iio/test"/>
+	<classpathentry kind="src" path="javafx-logging/src"/>
+	<classpathentry kind="src" path="javafx-sg-common/src"/>
+	<classpathentry kind="src" path="javafx-sg-common/test"/>
+	<classpathentry kind="src" path="javafx-sg-prism/src"/>
+	<classpathentry kind="src" path="javafx-sg-prism/test"/>
+	<classpathentry kind="src" path="javafx-ui-charts/src"/>
+	<classpathentry kind="src" path="javafx-ui-charts/test"/>
+	<classpathentry kind="src" path="javafx-ui-common/src"/>
+	<!--
+	<classpathentry kind="src" path="javafx-ui-common/test/unit"/>
+	-->
+	<classpathentry kind="src" path="javafx-ui-controls/src"/>
+	<classpathentry kind="src" path="javafx-ui-controls/test"/>
+	<classpathentry kind="src" path="javafx-ui-quantum/src"/>
+	<classpathentry kind="src" path="javafx-util-converter/src"/>
+	<classpathentry kind="src" path="javafx-util-converter/test"/>
+
+	<classpathentry kind="src" path="pisces/src"/>
+
+	<classpathentry kind="src" path="prism-common/src"/>
+	<classpathentry kind="src" path="prism-common/test"/>
+	<classpathentry kind="src" path="prism-d3d/src"/>
+	<classpathentry kind="src" path="prism-d3d/build/gensrc">
+		<attributes>
+			<attribute name="optional" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" path="prism-es2/src"/>
+	<classpathentry kind="src" path="prism-es2-eglfb/src"/>
+	<classpathentry kind="src" path="prism-es2-eglx11/src"/>
+	<!--
+	<classpathentry kind="src" path="prism-es2-ios/src"/>
+	-->
+	<classpathentry kind="src" path="prism-es2-mac/src"/>
+	<classpathentry kind="src" path="prism-es2-win/src"/>
+	<classpathentry kind="src" path="prism-es2-x11/src"/>
+	<classpathentry kind="src" path="prism-es2/build/gensrc">
+		<attributes>
+			<attribute name="optional" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" path="prism-j2d/src"/>
+	<classpathentry kind="src" path="prism-sw/src"/>
+	<classpathentry kind="src" path="prism-null/src"/>
+	<classpathentry kind="src" path="prism-ps/src"/>
+	<classpathentry kind="src" path="prism-ps/build/gensrc"/>
+	<classpathentry kind="src" path="prism-ps/test"/>
+	<!--
+	<classpathentry kind="src" path="prism-ps/shadergen"/>
+	-->
+	<classpathentry kind="src" path="prism-util/src"/>
+
+	<classpathentry kind="src" path="test-stub-toolkit/src"/>
+	<classpathentry kind="src" path="tests/app-lifecycle/ClassLoaderApp/src"/>
+	<classpathentry kind="src" path="tests/app-lifecycle/ClassLoaderTest/test"/>
+	<classpathentry kind="src" path="tests/app-lifecycle/LauncherTests/test"/>
+	<classpathentry kind="src" path="tests/app-lifecycle/LifeCycleTests/test"/>
+	<classpathentry kind="src" path="tests/glass/ExceptionHandler/test"/>
+	<classpathentry kind="src" path="tests/graphics/MaterialTests/test"/>
+	<classpathentry kind="src" path="tests/graphics/SnapshotTests/test"/>
+	<classpathentry kind="src" path="tests/graphics/SwingInterop/test"/>
+	<classpathentry kind="src" path="tests/manual/printing"/>
+	<classpathentry kind="src" path="tests/quantum/CloseWindow/test"/>
+	<classpathentry kind="src" path="tests/quantum/WindowSceneInitDispose/test"/>
+
+	<!-- Use webview/src (instead of ../caches/sdk/build/lib/desktop/jfxwebview.jar) -->
+	<classpathentry kind="src" path="webview/src"/>
+	<!--
+	<classpathentry kind="src" path="webview/test"/>
+	-->
+	<!-- 
+	The "webview/native/WebKitBuild/Release/WebCore/generated/java" folder is only
+	available when webkit is built. Instead of forcing webkit to be build we 
+	include "../caches/sdk/build/lib/desktop/jfxwebkit.jar" as fallback.
+	-->
+	<classpathentry combineaccessrules="false" kind="src" path="webview/native/WebKitBuild/Release/WebCore/generated/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="lib" path="../caches/sdk/build/lib/desktop/jfxwebkit.jar">
+		<attributes>
+			<attribute name="optional" value="true"/>
+		</attributes>
+	</classpathentry>
+
+	<classpathentry kind="src" path="/rt-closed"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/media">
+		<attributes>
+			<attribute name="optional" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="lib" path="../caches/sdk/build/lib/desktop/jfxmedia.jar">
+		<attributes>
+			<attribute name="optional" value="true"/>
+		</attributes>
+	</classpathentry>
+
+	<classpathentry kind="src" path="/org.eclipse.swt">
+		<attributes>
+			<attribute name="optional" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="lib" path="../import/swt-3.7.1/swt-debug.jar"/>
+	<classpathentry kind="output" path="bin"/>
+
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
+	<classpathentry kind="lib" path="../import/antlr-3.1.3/antlr-3.1.3/lib/antlr-3.1.3.jar"/>
+	<classpathentry kind="lib" path="../import/findbugs-2.0.1/findbugs-2.0.1/lib/ant.jar"/>
+</classpath>
--- a/apps/experiments/3DViewer/3D Viewer.iml	Mon Jun 03 10:53:52 2013 -0700
+++ b/apps/experiments/3DViewer/3D Viewer.iml	Tue Jun 04 09:43:48 2013 -0700
@@ -58,7 +58,9 @@
     <orderEntry type="module" module-name="prism-sw" />
     <orderEntry type="module" module-name="prism-util" />
     <orderEntry type="module" module-name="test-stub-toolkit" />
-    <orderEntry type="module" module-name="webkit" />
+    <orderEntry type="module" module-name="webview" />
+    <orderEntry type="module" module-name="javafx-builders" />
+    <orderEntry type="module" module-name="javafx-font-t2k" />
   </component>
 </module>
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/experiments/3DViewer/src/main/java/com/javafx/experiments/exporters/javasource/JavaSourceExporter.java	Tue Jun 04 09:43:48 2013 -0700
@@ -0,0 +1,423 @@
+/*
+ * Copyright (c) 2010, 2013 Oracle and/or its affiliates.
+ * All rights reserved. Use is subject to license terms.
+ *
+ * This file is available and licensed under the following license:
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *  - Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Oracle Corporation nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package com.javafx.experiments.exporters.javasource;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javafx.animation.Interpolator;
+import javafx.animation.KeyFrame;
+import javafx.animation.KeyValue;
+import javafx.animation.Timeline;
+import javafx.beans.value.WritableValue;
+import javafx.scene.Group;
+import javafx.scene.Node;
+import javafx.scene.image.Image;
+import javafx.scene.paint.Color;
+import javafx.scene.paint.PhongMaterial;
+import javafx.scene.shape.MeshView;
+import javafx.scene.shape.TriangleMesh;
+import javafx.scene.transform.Rotate;
+import javafx.scene.transform.Scale;
+import javafx.scene.transform.Transform;
+import javafx.scene.transform.Translate;
+import javafx.util.Duration;
+import com.javafx.experiments.importers.Optimizer;
+import com.javafx.experiments.importers.maya.MayaImporter;
+import com.sun.javafx.animation.TickCalculation;
+import com.sun.scenario.animation.NumberTangentInterpolator;
+import com.sun.scenario.animation.SplineInterpolator;
+
+/**
+ * A exporter for 3D Models and animations that creates a Java Source file.
+ */
+public class JavaSourceExporter {
+    private int nodeCount = 0;
+    private int materialCount = 0;
+    private int meshCount = 0;
+    private int meshViewCount = 0;
+    private int methodCount = 1;
+    private int translateCount = 0;
+    private int rotateCount = 0;
+    private int scaleCount = 0;
+    private Map<WritableValue,String> writableVarMap = new HashMap<>();
+    private StringBuilder nodeCode = new StringBuilder();
+    private StringBuilder timelineCode = new StringBuilder();
+    private final boolean hasTimeline;
+    private final String baseUrl;
+    private final String className;
+    private final String packageName;
+    private final File outputFile;
+
+    public JavaSourceExporter(String baseUrl, Node rootNode, Timeline timeline, String packageName, File outputFile) {
+        this.baseUrl =
+                (baseUrl.charAt(baseUrl.length()-1) == '/') ?
+                        baseUrl.replaceAll("/+","/") :
+                        baseUrl.replaceAll("/+","/") + '/';
+        this.hasTimeline = timeline != null;
+        this.className = outputFile.getName().substring(0,outputFile.getName().lastIndexOf('.'));
+        this.packageName = packageName;
+        this.outputFile = outputFile;
+        process("        ",rootNode);
+        if (hasTimeline) process("        ",timeline);
+    }
+
+    public void export() {
+        try {
+            BufferedWriter out = new BufferedWriter(new FileWriter(outputFile));
+//            BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
+            StringBuilder nodeVars = new StringBuilder();
+            nodeVars.append("    private static Node ");
+            for (int i=0; i<nodeCount; i++) {
+                if (i!=0) nodeVars.append(',');
+                nodeVars.append("NODE_"+i);
+            }
+            nodeVars.append(";\n");
+            nodeVars.append("    private static TriangleMesh ");
+            for (int i=0; i<meshCount; i++) {
+                if (i!=0) nodeVars.append(',');
+                nodeVars.append("MESH_"+i);
+            }
+            nodeVars.append(";\n");
+            if (translateCount > 0) {
+                nodeVars.append("    private static Translate ");
+                for (int i=0; i<translateCount; i++) {
+                    if (i!=0) nodeVars.append(',');
+                    nodeVars.append("TRANS_"+i);
+                }
+                nodeVars.append(";\n");
+            }
+            if (rotateCount > 0) {
+                nodeVars.append("    private static Rotate ");
+                for (int i=0; i<rotateCount; i++) {
+                    if (i!=0) nodeVars.append(',');
+                    nodeVars.append("ROT_"+i);
+                }
+                nodeVars.append(";\n");
+            }
+            if (scaleCount > 0) {
+                nodeVars.append("    private static Scale ");
+                for (int i=0; i<scaleCount; i++) {
+                    if (i!=0) nodeVars.append(',');
+                    nodeVars.append("SCALE_"+i);
+                }
+                nodeVars.append(";\n");
+            }
+
+            nodeVars.append("    public static final Node ROOT;\n");
+            if (hasTimeline) {
+                nodeVars.append("    public static final Timeline TIMELINE = new Timeline();\n");
+            }
+            StringBuilder methodCode = new StringBuilder();
+            for (int m=0; m< methodCount;m++) {
+                methodCode.append("        method"+m+"();\n");
+            }
+
+            out.write(
+                    "package "+packageName+";\n\n" +
+                    "import javafx.util.Duration;\n" +
+                    "import javafx.animation.*;\n" +
+                    "import javafx.scene.*;\n" +
+                    "import javafx.scene.paint.*;\n" +
+                    "import javafx.scene.image.*;\n" +
+                    "import javafx.scene.shape.*;\n" +
+                    "import javafx.scene.transform.*;\n\n" +
+                    "public class "+className+" {\n" +
+                    nodeVars +
+                    "    // ======== NODE CODE ===============\n" +
+                    "    private static void method0(){\n" +
+                    nodeCode +
+                    "    }\n" +
+                    "    static {\n" +
+                    methodCode +
+                    "        // ======== TIMELINE CODE ===============\n" +
+                    timelineCode +
+                    "        // ======== SET PUBLIC VARS ===============\n" +
+                    "        ROOT = NODE_0;\n" +
+                    "    }\n" +
+                    "}\n");
+
+            out.flush();
+            out.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    private int process(String indent, Node node) {
+        if (node instanceof MeshView) {
+            return process(indent,(MeshView)node);
+        } else if (node instanceof Group) {
+            return process(indent,(Group)node);
+        } else {
+            throw new UnsupportedOperationException("Found unknown node type: "+node.getClass().getName());
+        }
+    }
+
+    private int process(String indent, MeshView node) {
+        final int index = nodeCount ++;
+        final String varName = "NODE_"+index;
+        final int meshViewIndex = meshViewCount ++;
+        final String meshViewVarName = "MESHVIEW_"+meshViewIndex;
+        nodeCode.append(indent+"MeshView "+meshViewVarName+" = new MeshView();\n");
+        nodeCode.append(indent+varName+" = "+meshViewVarName+";\n");
+        processNodeTransforms(indent,meshViewVarName,node);
+        process(indent,meshViewVarName,(PhongMaterial)node.getMaterial());
+        process(indent,meshViewVarName,(TriangleMesh)node.getMesh());
+        return index;
+    }
+
+    private void processNodeTransforms(String indent, String varName, Node node) {
+        if (node.getTranslateX() != 0) nodeCode.append(indent+varName+".setTranslateX("+node.getTranslateX()+");\n");
+        if (node.getTranslateY() != 0) nodeCode.append(indent+varName+".setTranslateY("+node.getTranslateY()+");\n");
+        if (node.getTranslateZ() != 0) nodeCode.append(indent+varName+".setTranslateZ("+node.getTranslateZ()+");\n");
+        if (node.getRotate() != 0) nodeCode.append(indent+varName+".setRotate("+node.getRotate()+");\n");
+        if (!node.getTransforms().isEmpty()) {
+            nodeCode.append(indent+varName+".getTransforms().addAll(\n");
+            for (int i=0; i< node.getTransforms().size(); i++) {
+                if (i!=0) nodeCode.append(",\n");
+                Transform transform = node.getTransforms().get(i);
+                if (transform instanceof Translate) {
+                    Translate t = (Translate)transform;
+                    nodeCode.append(indent+"    "+storeTransform(t)+" = new Translate("+t.getX()+","+t.getY()+","+t.getZ()+")");
+                } else if (transform instanceof Scale) {
+                    Scale s = (Scale)transform;
+                    nodeCode.append(indent+"    "+storeTransform(s)+" = new Scale("+s.getX()+","+s.getY()+","+s.getZ()+","+s.getPivotX()+","+s.getPivotY()+","+s.getPivotZ()+")");
+                } else if (transform instanceof Rotate) {
+                    Rotate r = (Rotate)transform;
+                    nodeCode.append(indent+"    "+storeTransform(r)+" = new Rotate("+r.getAngle()+","+r.getPivotX()+","+r.getPivotY()+","+r.getPivotZ()+",");
+                    if (r.getAxis() == Rotate.X_AXIS) {
+                        nodeCode.append("Rotate.X_AXIS");
+                    } else if (r.getAxis() == Rotate.Y_AXIS) {
+                        nodeCode.append("Rotate.Y_AXIS");
+                    } else if (r.getAxis() == Rotate.Z_AXIS) {
+                        nodeCode.append("Rotate.Z_AXIS");
+                    }
+                    nodeCode.append(")");
+                } else {
+                    throw new UnsupportedOperationException("Unknown Transform Type: "+transform.getClass());
+                }
+
+            }
+            nodeCode.append("\n"+indent+");\n");
+        }
+    }
+
+    private String storeTransform(Transform transform) {
+        String varName;
+        if (transform instanceof Translate) {
+            final int index = translateCount ++;
+            varName = "TRANS_"+index;
+            Translate t = (Translate)transform;
+            writableVarMap.put(t.xProperty(),varName+".xProperty()");
+            writableVarMap.put(t.yProperty(),varName+".yProperty()");
+            writableVarMap.put(t.zProperty(),varName+".zProperty()");
+        } else if (transform instanceof Scale) {
+            final int index = scaleCount ++;
+            varName = "SCALE_"+index;
+            Scale s = (Scale)transform;
+            writableVarMap.put(s.xProperty(),varName+".xProperty()");
+            writableVarMap.put(s.yProperty(),varName+".yProperty()");
+            writableVarMap.put(s.zProperty(),varName+".zProperty()");
+            writableVarMap.put(s.pivotXProperty(),varName+".pivotXProperty()");
+            writableVarMap.put(s.pivotYProperty(),varName+".pivotYProperty()");
+            writableVarMap.put(s.pivotZProperty(),varName+".pivotZProperty()");
+        } else if (transform instanceof Rotate) {
+            final int index = rotateCount ++;
+            varName = "ROT_"+index;
+            Rotate r = (Rotate)transform;
+            writableVarMap.put(r.angleProperty(),varName+".angleProperty()");
+        } else {
+            throw new UnsupportedOperationException("Unknown Transform Type: "+transform.getClass());
+        }
+        return varName;
+    }
+
+    private int process(String indent, Group node) {
+        final int index = nodeCount ++;
+        final String varName = "NODE_"+index;
+        List<Integer> childIndex = new ArrayList<>();
+        for (int i = 0; i < node.getChildren().size(); i++) {
+            Node child = node.getChildren().get(i);
+            childIndex.add(
+                    process(indent,child));
+        }
+        nodeCode.append(indent+varName+" = new Group(");
+        for (int i = 0; i < childIndex.size(); i++) {
+            if (i!=0) nodeCode.append(',');
+            nodeCode.append("NODE_"+childIndex.get(i));
+        }
+        nodeCode.append(");\n");
+        processNodeTransforms(indent, varName, node);
+        nodeCode.append("    }\n    private static void method" + (methodCount++) + "(){\n");
+        return index;
+    }
+
+    private void process(String indent, String varName, TriangleMesh mesh) {
+        final int index = meshCount ++;
+        final String meshName = "MESH_"+index;
+
+        nodeCode.append(indent+meshName+" = new TriangleMesh();\n");
+        nodeCode.append(indent+varName+".setMesh("+meshName+");\n");
+
+        nodeCode.append(indent+meshName+".getPoints().ensureCapacity("+mesh.getPoints().size()+");\n");
+        nodeCode.append(indent + meshName + ".getPoints().addAll(");
+        for (int i = 0; i < mesh.getPoints().size(); i++) {
+            if (i!=0) nodeCode.append(',');
+            nodeCode.append(mesh.getPoints().get(i)+"f");
+        }
+        nodeCode.append(");\n");
+        nodeCode.append("    }\n    private static void method" + (methodCount++) + "(){\n");
+        nodeCode.append(indent+meshName+".getTexCoords().ensureCapacity("+mesh.getTexCoords().size()+");\n");
+        nodeCode.append(indent + meshName + ".getTexCoords().addAll(");
+        for (int i = 0; i < mesh.getTexCoords().size(); i++) {
+            if (i!=0) nodeCode.append(',');
+            nodeCode.append(mesh.getTexCoords().get(i)+"f");
+        }
+        nodeCode.append(");\n");
+        nodeCode.append("    }\n    private static void method" + (methodCount++) + "(){\n");
+        nodeCode.append(indent+meshName+".getFaces().ensureCapacity("+mesh.getFaces().size()+");\n");
+        nodeCode.append(indent + meshName + ".getFaces().addAll(");
+        for (int i = 0; i < mesh.getFaces().size(); i++) {
+            if ((i%5000) == 0 && i > 0) {
+                nodeCode.append(");\n");
+                nodeCode.append("    }\n    private static void method" + (methodCount++) + "(){\n");
+                nodeCode.append(indent+meshName+".getFaces().addAll(");
+            } else if (i!=0) {
+                nodeCode.append(',');
+            }
+            nodeCode.append(mesh.getFaces().get(i));
+        }
+        nodeCode.append(");\n");
+        nodeCode.append("    }\n    private static void method" + (methodCount++) + "(){\n");
+        nodeCode.append(indent+meshName+".getFaceSmoothingGroups().ensureCapacity("+mesh.getFaceSmoothingGroups().size()+");\n");
+        nodeCode.append(indent+meshName+".getFaceSmoothingGroups().addAll(");
+        for (int i = 0; i < mesh.getFaceSmoothingGroups().size(); i++) {
+            if (i!=0) nodeCode.append(',');
+            nodeCode.append(mesh.getFaceSmoothingGroups().get(i));
+        }
+        nodeCode.append(");\n");
+
+//        nodeCode.append(indent+varName+".setMesh("+process((TriangleMesh)node.getMesh())+");\n");
+    }
+
+    private void process(String indent, String varName, PhongMaterial material) {
+        final int index = materialCount ++;
+        final String materialName = "MATERIAL_"+index;
+
+        nodeCode.append(indent + "PhongMaterial " + materialName + " = new PhongMaterial();\n");
+        nodeCode.append(indent + materialName + ".setDiffuseColor(" + toCode(material.getDiffuseColor()) + ");\n");
+        nodeCode.append(indent + materialName + ".setSpecularColor(" + toCode(material.getSpecularColor()) + ");\n");
+        nodeCode.append(indent + materialName + ".setSpecularPower("+material.getSpecularPower()+");\n");
+        if (material.getDiffuseMap() != null) {
+            nodeCode.append(indent + materialName + ".setDiffuseMap("+toString(material.getDiffuseMap())+");\n");
+        }
+        if (material.getBumpMap() != null) {
+            nodeCode.append(indent + materialName + ".setBumpMap("+toString(material.getBumpMap())+");\n");
+        }
+        if (material.getSpecularMap() != null) {
+            nodeCode.append(indent + materialName + ".setSpecularMap()("+toString(material.getSpecularMap())+");\n");
+        }
+        if (material.getSelfIlluminationMap() != null) {
+            nodeCode.append(indent + materialName + ".setSelfIlluminationMap()("+toString(material.getSelfIlluminationMap())+");\n");
+        }
+        nodeCode.append(indent+varName+".setMaterial("+materialName+");\n");
+    }
+
+    private String toString(Image image) {
+        String url = image.impl_getUrl();
+        if (url.startsWith(baseUrl)) {
+            return  "new Image("+className+".class.getResource(\""+url.substring(baseUrl.length())+"\").toExternalForm())";
+        } else {
+            return "new Image(\""+url+"\")";
+        }
+    }
+
+    private void process(String indent, Timeline timeline) {
+        int count = 0;
+        for (KeyFrame keyFrame: timeline.getKeyFrames()) {
+            if (keyFrame.getValues().isEmpty()) continue;
+            nodeCode.append(indent+"TIMELINE.getKeyFrames().add(new KeyFrame(Duration.millis("+keyFrame.getTime().toMillis()+"d),\n");
+            boolean firstKeyValue = true;
+            for (KeyValue keyValue: keyFrame.getValues()) {
+                if (firstKeyValue) {
+                    firstKeyValue = false;
+                } else {
+                    nodeCode.append(",\n");
+                }
+                String var = writableVarMap.get(keyValue.getTarget());
+                if (var == null) System.err.println("Failed to find writable value in map for : "+keyValue.getTarget());
+                nodeCode.append(indent+"    new KeyValue("+var+","+keyValue.getEndValue()+","+toString(keyValue.getInterpolator())+")");
+            }
+            nodeCode.append("\n"+indent+"));\n");
+
+            if (count > 0 && ((count % 10) == 0)) {
+                nodeCode.append("    }\n    private static void method" + (methodCount++) + "(){\n");
+            }
+            count ++;
+        }
+    }
+
+    private String toString(Interpolator interpolator) {
+//        if (interpolator == Interpolator.DISCRETE || true) {
+        if (interpolator == Interpolator.DISCRETE) {
+            return "Interpolator.DISCRETE";
+        } else if (interpolator == Interpolator.EASE_BOTH) {
+            return "Interpolator.EASE_BOTH";
+        } else if (interpolator == Interpolator.EASE_IN) {
+            return "Interpolator.EASE_IN";
+        } else if (interpolator == Interpolator.EASE_OUT) {
+            return "Interpolator.EASE_OUT";
+        } else if (interpolator == Interpolator.LINEAR) {
+            return "Interpolator.LINEAR";
+        } else if (interpolator instanceof SplineInterpolator) {
+            SplineInterpolator si = (SplineInterpolator)interpolator;
+            return "Interpolator.SPLINE("+si.getX1()+"d,"+si.getY1()+"d,"+si.getX2()+"d,"+si.getY2()+"d)";
+        } else if (interpolator instanceof NumberTangentInterpolator) {
+            NumberTangentInterpolator ti = (NumberTangentInterpolator)interpolator;
+            return "Interpolator.TANGENT(Duration.millis("+ TickCalculation.toMillis((long)ti.getInTicks())+"d),"+ti.getInValue()
+                    +"d,Duration.millis("+TickCalculation.toMillis((long)ti.getInTicks())+"d),"+ti.getOutValue()+"d)";
+        } else {
+            throw new UnsupportedOperationException("Unknown Interpolator type: "+interpolator.getClass());
+        }
+    }
+
+    private String toCode(Color color) {
+        return "new Color("+color.getRed()+","+color.getGreen()+","+color.getBlue()+","+color.getOpacity()+")";
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/experiments/3DViewer/src/main/java/com/javafx/experiments/height2normal/Height2NormalApp.java	Tue Jun 04 09:43:48 2013 -0700
@@ -0,0 +1,222 @@
+/*
+ * Copyright (c) 2010, 2013 Oracle and/or its affiliates.
+ * All rights reserved. Use is subject to license terms.
+ *
+ * This file is available and licensed under the following license:
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *  - Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Oracle Corporation nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package com.javafx.experiments.height2normal;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import javax.imageio.ImageIO;
+import javafx.animation.KeyFrame;
+import javafx.animation.KeyValue;
+import javafx.animation.Timeline;
+import javafx.application.Application;
+import javafx.beans.binding.ObjectBinding;
+import javafx.beans.property.SimpleObjectProperty;
+import javafx.embed.swing.SwingFXUtils;
+import javafx.event.ActionEvent;
+import javafx.event.EventHandler;
+import javafx.scene.Group;
+import javafx.scene.PerspectiveCamera;
+import javafx.scene.Scene;
+import javafx.scene.SubScene;
+import javafx.scene.control.Button;
+import javafx.scene.control.CheckBox;
+import javafx.scene.control.Label;
+import javafx.scene.control.Separator;
+import javafx.scene.control.Slider;
+import javafx.scene.control.ToolBar;
+import javafx.scene.image.Image;
+import javafx.scene.image.ImageView;
+import javafx.scene.layout.HBox;
+import javafx.scene.layout.Priority;
+import javafx.scene.layout.VBox;
+import javafx.scene.paint.Color;
+import javafx.scene.paint.PhongMaterial;
+import javafx.scene.shape.Box;
+import javafx.scene.transform.Rotate;
+import javafx.scene.transform.Translate;
+import javafx.stage.FileChooser;
+import javafx.stage.Stage;
+import javafx.util.Duration;
+import com.javafx.experiments.jfx3dviewer.AutoScalingGroup;
+
+/**
+ * Gui Util App for converting Heights 2 Normals
+ */
+public class Height2NormalApp  extends Application {
+    private Image testImage;
+    private SimpleObjectProperty<Image> heightImage = new SimpleObjectProperty<>();
+    private SimpleObjectProperty<Image> normalImage = new SimpleObjectProperty<>();
+    private File heightFile;
+    private Stage stage;
+
+    @Override public void start(Stage stage) throws Exception {
+        this.stage = stage;
+
+        // load test image
+        testImage = new Image(Height2NormalApp.class.getResource("javafx-heightmap.jpg").toExternalForm());
+        heightImage.set(testImage);
+
+        // create toolbar
+        ToolBar toolBar = new ToolBar();
+        Button openButton = new Button("Open...");
+        openButton.setOnAction(new EventHandler<ActionEvent>() {
+            @Override public void handle(ActionEvent event) {
+                open();
+            }
+        });
+        Button saveButton = new Button("Save...");
+        saveButton.setOnAction(new EventHandler<ActionEvent>() {
+            @Override public void handle(ActionEvent event) {
+                save();
+            }
+        });
+        final CheckBox invertCheckBox = new CheckBox("invert");
+        final Slider scaleSlider = new Slider(1,50,2);
+        toolBar.getItems().addAll(openButton,saveButton,
+                                  new Separator(),
+                                  invertCheckBox,
+                                  new Separator(),
+                                  new Label("Scale:"),scaleSlider);
+
+        // bind creation of normal image
+        normalImage.bind(
+                new ObjectBinding<Image>() {
+                    { bind(heightImage, invertCheckBox.selectedProperty(), scaleSlider.valueProperty()); }
+                    @Override protected Image computeValue() {
+                        return Height2NormalConverter.convertToNormals(heightImage.get(), invertCheckBox.isSelected(), scaleSlider.getValue());
+                    }
+                });
+
+        // build stage
+        VBox root = new VBox();
+        HBox views = new HBox();
+        VBox.setVgrow(views, Priority.ALWAYS);
+        root.getChildren().addAll(toolBar, views);
+
+        ImageView srcImageView = new ImageView();
+        srcImageView.setFitWidth(512);
+        srcImageView.setFitHeight(512);
+        srcImageView.imageProperty().bind(heightImage);
+        ImageView dstImageView = new ImageView();
+        dstImageView.setFitWidth(512);
+        dstImageView.setFitHeight(512);
+        dstImageView.imageProperty().bind(normalImage);
+        views.getChildren().addAll(srcImageView,dstImageView,new View3D().create());
+
+        Scene scene = new Scene(root);
+        stage.setScene(scene);
+        stage.show();
+    }
+
+    public void open() {
+        FileChooser fileChooser = new FileChooser();
+        heightFile = fileChooser.showOpenDialog(stage);
+        if (heightFile != null) {
+            try {
+                heightImage.set(new Image(heightFile.toURI().toURL().toExternalForm()));
+            } catch (MalformedURLException e) {
+                e.printStackTrace();
+            }
+        } else {
+            heightImage.set(testImage);
+        }
+    }
+
+    public void save() {
+        FileChooser fileChooser = new FileChooser();
+        if (heightFile != null) {
+            String filePath = heightFile.getName();
+            fileChooser.setInitialFileName(filePath.substring(0,filePath.lastIndexOf('.'))+"-normal-map.png");
+        } else {
+            fileChooser.setInitialFileName("normal-map.png");
+        }
+        File normalFile = fileChooser.showSaveDialog(stage);
+        if (normalFile != null) {
+            try {
+                ImageIO.write(SwingFXUtils.fromFXImage(normalImage.get(),null),"png",normalFile);
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    public static void main(String[] args) {
+        launch(args);
+    }
+
+    private class View3D {
+        private final Group root3D = new Group();
+        private final PerspectiveCamera camera = new PerspectiveCamera(true);
+        private final Rotate cameraXRotate = new Rotate(-40,0,0,0,Rotate.X_AXIS);
+        private final Rotate cameraYRotate = new Rotate(-20,0,0,0,Rotate.Y_AXIS);
+        private final Rotate cameraLookXRotate = new Rotate(0,0,0,0,Rotate.X_AXIS);
+        private final Rotate cameraLookZRotate = new Rotate(0,0,0,0,Rotate.Z_AXIS);
+        private final Translate cameraPosition = new Translate(0,0,-7);
+        private AutoScalingGroup autoScalingGroup = new AutoScalingGroup(2);
+
+        public SubScene create() {
+            SubScene scene = new SubScene(root3D,512,512,true,false);
+            scene.setFill(Color.ALICEBLUE);
+
+            // CAMERA
+            camera.getTransforms().addAll(
+                    cameraXRotate,
+                    cameraYRotate,
+                    cameraPosition,
+                    cameraLookXRotate,
+                    cameraLookZRotate);
+            camera.setNearClip(0.1);
+            camera.setFarClip(100);
+            scene.setCamera(camera);
+            root3D.getChildren().addAll(camera, autoScalingGroup);
+
+            Box box = new Box(10,0.11,10);
+
+            PhongMaterial material = new PhongMaterial(Color.DODGERBLUE);
+            material.bumpMapProperty().bind(normalImage);
+            box.setMaterial(material);
+
+            autoScalingGroup.getChildren().add(box);
+
+            Timeline timeline = new Timeline(
+                    new KeyFrame(Duration.ZERO, new KeyValue(cameraYRotate.angleProperty(),0)),
+                    new KeyFrame(Duration.seconds(10), new KeyValue(cameraYRotate.angleProperty(),360))
+            );
+            timeline.setCycleCount(Timeline.INDEFINITE);
+            timeline.play();
+
+            return scene;
+        }
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/experiments/3DViewer/src/main/java/com/javafx/experiments/height2normal/Height2NormalConverter.java	Tue Jun 04 09:43:48 2013 -0700
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2010, 2013 Oracle and/or its affiliates.
+ * All rights reserved. Use is subject to license terms.
+ *
+ * This file is available and licensed under the following license:
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *  - Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Oracle Corporation nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package com.javafx.experiments.height2normal;
+
+import javafx.geometry.Point3D;
+import javafx.scene.image.Image;
+import javafx.scene.image.PixelFormat;
+import javafx.scene.image.PixelReader;
+import javafx.scene.image.WritableImage;
+
+/**
+ * Util class to convert height maps into normal maps
+ */
+public class Height2NormalConverter {
+    public static Image convertToNormals(Image heightMap, boolean invert, double scale) {
+        final int w = (int)heightMap.getWidth();
+        final int h = (int)heightMap.getHeight();
+        final byte[] heightPixels = new byte[w*h*4];
+        final byte[] normalPixels = new byte[w*h*4];
+        // get pixels
+        final PixelReader reader = heightMap.getPixelReader();
+        reader.getPixels(0, 0, w, h, PixelFormat.getByteBgraInstance(),heightPixels,0,w*4);
+        if (invert) {
+            for (int y=0; y<h; y++) {
+                for (int x=0; x<w; x++) {
+                    final int pixelIndex = (y*w*4) + (x*4);
+                    heightPixels[pixelIndex] = (byte)(255-Byte.toUnsignedInt(heightPixels[pixelIndex]));
+                    heightPixels[pixelIndex+1] = (byte)(255-Byte.toUnsignedInt(heightPixels[pixelIndex+1]));
+                    heightPixels[pixelIndex+2] = (byte)(255-Byte.toUnsignedInt(heightPixels[pixelIndex+2]));
+                    heightPixels[pixelIndex+3] = heightPixels[pixelIndex+3];
+                }
+            }
+        }
+        // generate normal map
+        for (int y=0; y<h; y++) {
+            for (int x=0; x<w; x++) {
+                final int yAbove = Math.max(0,y-1);
+                final int yBelow = Math.min(h - 1, y + 1);
+                final int xLeft = Math.max(0, x - 1);
+                final int xRight = Math.min(w - 1, x + 1);
+                final int pixelIndex = (y*w*4) + (x*4);
+                final int pixelAboveIndex = (yAbove*w*4) + (x*4);
+                final int pixelBelowIndex = (yBelow*w*4) + (x*4);
+                final int pixelLeftIndex = (y*w*4) + (xLeft*4);
+                final int pixelRightIndex = (y*w*4) + (xRight*4);
+                final int pixelAboveHeight = Byte.toUnsignedInt(heightPixels[pixelAboveIndex]);
+                final int pixelBelowHeight = Byte.toUnsignedInt(heightPixels[pixelBelowIndex]);
+                final int pixelLeftHeight = Byte.toUnsignedInt(heightPixels[pixelLeftIndex]);
+                final int pixelRightHeight = Byte.toUnsignedInt(heightPixels[pixelRightIndex]);
+
+                Point3D pixelAbove = new Point3D(x,yAbove,pixelAboveHeight);
+                Point3D pixelBelow = new Point3D(x,yBelow,pixelBelowHeight);
+                Point3D pixelLeft = new Point3D(xLeft,y,pixelLeftHeight);
+                Point3D pixelRight = new Point3D(xRight,y,pixelRightHeight);
+                Point3D H = pixelLeft.subtract(pixelRight);
+                Point3D V = pixelAbove.subtract(pixelBelow);
+                Point3D normal = H.crossProduct(V);
+                // normalize normal
+                normal = new Point3D(
+                        normal.getX()/w,
+                        normal.getY()/h,
+                        normal.getZ()
+                );
+                // it seems there is lots of ways to calculate the Z element of normal map, 3 options here
+//                normalPixels[pixelIndex] = (byte)((normal.getZ()*128)+128); // Option 1
+                normalPixels[pixelIndex] = (byte)(255-(normal.getZ() * scale)); // Option 2
+//                normalPixels[pixelIndex] = (byte)255; // Option 3
+                normalPixels[pixelIndex+1] = (byte)((normal.getY()*128)+128);
+                normalPixels[pixelIndex+2] = (byte)((normal.getX()*128)+128);
+                normalPixels[pixelIndex+3] = (byte)255;
+            }
+        }
+        // create output image
+        final WritableImage outImage = new WritableImage(w,h);
+        outImage.getPixelWriter().setPixels(0,0,w,h,PixelFormat.getByteBgraInstance(),normalPixels,0,w*4);
+        return outImage;
+    }
+}
--- a/apps/experiments/3DViewer/src/main/java/com/javafx/experiments/importers/Importer3D.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/apps/experiments/3DViewer/src/main/java/com/javafx/experiments/importers/Importer3D.java	Tue Jun 04 09:43:48 2013 -0700
@@ -30,13 +30,25 @@
     }
 
     /**
-     * Load a 3D file.
+     * Load a 3D file, always loaded as TriangleMesh.
      *
      * @param fileUrl The url of the 3D file to load
      * @return The loaded Node which could be a MeshView or a Group
      * @throws IOException if issue loading file
      */
     public static Node load(String fileUrl) throws IOException {
+        return load(fileUrl,false);
+    }
+
+    /**
+     * Load a 3D file.
+     *
+     * @param fileUrl The url of the 3D file to load
+     * @param asPolygonMesh When true load as a PolygonMesh if the loader supports
+     * @return The loaded Node which could be a MeshView or a Group
+     * @throws IOException if issue loading file
+     */
+    public static Node load(String fileUrl, boolean asPolygonMesh) throws IOException {
         // get extension
         final int dot = fileUrl.lastIndexOf('.');
         if (dot <= 0) {
@@ -49,7 +61,7 @@
             case "ase":
                 return loadMaxFile(fileUrl);
             case "obj":
-                return loadObjFile(fileUrl);
+                return loadObjFile(fileUrl, asPolygonMesh);
             case "fxml":
                 Object fxmlRoot = FXMLLoader.load(new URL(fileUrl));
                 if (fxmlRoot instanceof Node) {
@@ -78,12 +90,18 @@
         return new MaxLoader().loadMaxUrl(fileUrl);
     }
 
-    private static Node loadObjFile(String fileUrl) throws IOException {
-//        ObjImporter reader = new ObjImporter(fileUrl);
-        PolyObjImporter reader = new PolyObjImporter(fileUrl);
+    private static Node loadObjFile(String fileUrl, boolean asPolygonMesh) throws IOException {
         Group res = new Group();
-        for (String key : reader.getMeshes()) {
-            res.getChildren().add(reader.buildPolygonMeshView(key));
+        if (asPolygonMesh) {
+            PolyObjImporter reader = new PolyObjImporter(fileUrl);
+            for (String key : reader.getMeshes()) {
+                res.getChildren().add(reader.buildPolygonMeshView(key));
+            }
+        } else {
+            ObjImporter reader = new ObjImporter(fileUrl);
+            for (String key : reader.getMeshes()) {
+                res.getChildren().add(reader.buildMeshView(key));
+            }
         }
         return res;
     }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/experiments/3DViewer/src/main/java/com/javafx/experiments/importers/Optimizer.java	Tue Jun 04 09:43:48 2013 -0700
@@ -0,0 +1,204 @@
+/*
+ * Copyright (c) 2013, 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.javafx.experiments.importers;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import javafx.animation.KeyFrame;
+import javafx.animation.KeyValue;
+import javafx.animation.Timeline;
+import javafx.beans.property.Property;
+import javafx.beans.value.WritableValue;
+import javafx.collections.ObservableList;
+import javafx.collections.transformation.SortedList;
+import javafx.scene.Group;
+import javafx.scene.Node;
+import javafx.scene.Parent;
+import javafx.scene.transform.Transform;
+
+/**
+ * Optimizer to take 3D model and timeline loaded by one of the importers and do as much optimization on
+ * the scene graph that was create as we can while still being able to play the given animation.
+ */
+public class Optimizer {
+
+    private Timeline timeline;
+    private Parent root;
+    private Set<Transform> bound = new HashSet<>();
+    private List<Parent> emptyParents = new ArrayList<>();
+
+    public Optimizer(Timeline timeline, Parent root) {
+        this.timeline = timeline;
+        this.root = root;
+    }
+
+    private int removed, total, groupsTotal, candidate, emptyTransforms;
+
+    public void optimize() {
+        removed = 0;
+        total = 0;
+        candidate = 0;
+        emptyTransforms = 0;
+        groupsTotal = 0;
+        emptyParents.clear();
+
+        parseTimeline();
+        optimize(root);
+        removeEmptyGroups();
+
+        System.out.printf("removed %d (%.2f%%) out of total %d transforms\n", removed, 100d * removed / total, total);
+        System.out.printf("there are %d more multiplications that can be done of matrices that never change\n", candidate);
+        System.out.printf("there are %d (%.2f%%) out of total %d groups with no transforms in them\n", emptyTransforms, 100d * emptyTransforms / groupsTotal, groupsTotal);
+    }
+
+    private void optimize(Node node) {
+        ObservableList<Transform> transforms = node.getTransforms();
+        Iterator<Transform> iterator = transforms.iterator();
+        boolean prevIsStatic = false;
+        while (iterator.hasNext()) {
+            Transform transform = iterator.next();
+            total++;
+            if (transform.isIdentity()) {
+                if (timeline == null || !bound.contains(transform)) {
+                    iterator.remove();
+                    removed++;
+                }
+            } else {
+                if (timeline == null || !bound.contains(transform)) {
+                    if (prevIsStatic) {
+                        candidate++;
+                    }
+                    prevIsStatic = true;
+                } else {
+                    prevIsStatic = false;
+                }
+            }
+        }
+        if (node instanceof Parent) {
+            groupsTotal++;
+            Parent p = (Parent) node;
+            for (Node n : p.getChildrenUnmodifiable()) {
+                optimize(n);
+            }
+            if (transforms.isEmpty()) {
+                Parent parent = p.getParent();
+                if (parent instanceof Group) {
+                    emptyTransforms++;
+                    System.out.println("Empty group = " + node.getId());
+                    emptyParents.add(p);
+                } else {
+                    System.err.println("parent is not group = " + parent);
+                }
+            }
+        }
+    }
+
+    private void parseTimeline() {
+        bound.clear();
+        if (timeline == null) {
+            return;
+        }
+        SortedList<KeyFrame> sortedKeyFrames = timeline.getKeyFrames().sorted(new Comparator<KeyFrame>() {
+            @Override public int compare(KeyFrame o1, KeyFrame o2) {
+                return o1.getTime().compareTo(o2.getTime());
+            }
+        });
+        List<KeyValue> newKeyValues = new ArrayList<>();
+        Map<WritableValue, KeyValue> prevValues = new HashMap<>();
+        Map<KeyFrame, KeyFrame> replacements = new HashMap<>();
+        int kvRemoved = 0, kvTotal = 0;
+        for (KeyFrame keyFrame : sortedKeyFrames) {
+            newKeyValues.clear();
+            for (KeyValue keyValue : keyFrame.getValues()) {
+                WritableValue<?> target = keyValue.getTarget();
+                if (target instanceof Property) {
+                    Property p = (Property) target;
+                    Object bean = p.getBean();
+                    if (bean instanceof Transform) {
+                        bound.add((Transform) bean);
+                    } else {
+                        throw new UnsupportedOperationException("Bean is not transform, bean = " + bean);
+                    }
+//                    if (Translate.class.equals(bean.getClass())) {
+//                        Translate t = (Translate) bean;
+//                    } else if (Rotate.class.equals(bean.getClass())) {
+//                        Rotate r = (Rotate) bean;
+//                    } else if (Scale.class.equals(bean.getClass())) {
+//                        Scale s = (Scale) bean;
+//                    }
+                } else {
+                    throw new UnsupportedOperationException("WritableValue is not property, can't identify what it changes, target = " + target);
+                }
+                KeyValue prevValue = prevValues.get(target);
+                kvTotal++;
+                if (prevValue != null) {
+                    if (prevValue.getEndValue().equals(keyValue.getEndValue())
+                        /*&& prevValue.getInterpolator().equals(keyValue.getInterpolator())*/) {
+                        // we can remove this KeyValue
+                        kvRemoved ++;
+                    } else {
+                        if (prevValue.getEndValue().equals(keyValue.getEndValue())) {
+                            System.err.println("prevValue = " + prevValue + " != keyValue = " + keyValue);
+                        }
+                        newKeyValues.add(keyValue);
+                    }
+                } else {
+                    newKeyValues.add(keyValue);
+                }
+                prevValues.put(target, keyValue);
+//                bound.add(keyValue.getTarget());
+            }
+            if (newKeyValues.size() < keyFrame.getValues().size()) {
+                replacements.put(keyFrame, new KeyFrame(keyFrame.getTime(), keyFrame.getName(), keyFrame.getOnFinished(), newKeyValues));
+            }
+        }
+        for (KeyFrame key : replacements.keySet()) {
+            timeline.getKeyFrames().set(timeline.getKeyFrames().indexOf(key), replacements.get(key));
+        }
+        System.out.println("bound.size() = " + bound.size());
+        System.out.printf("We've removed %d (%.2f%%) repeating KeyValues out of total %d.\n", kvRemoved, 100d * kvRemoved / kvTotal, kvTotal);
+        int check = 0;
+        for (KeyFrame keyFrame : timeline.getKeyFrames()) {
+            check += keyFrame.getValues().size();
+        }
+        System.out.printf("Now we have %d KeyValues.\n", check);
+    }
+
+    private void removeEmptyGroups() {
+        for (Parent p : emptyParents) {
+            Parent parent = p.getParent();
+            Group g = (Group) parent;
+            g.getChildren().addAll(p.getChildrenUnmodifiable());
+            g.getChildren().remove(p);
+        }
+    }
+
+}
--- a/apps/experiments/3DViewer/src/main/java/com/javafx/experiments/importers/dae/DaeImporter.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/apps/experiments/3DViewer/src/main/java/com/javafx/experiments/importers/dae/DaeImporter.java	Tue Jun 04 09:43:48 2013 -0700
@@ -1,3 +1,34 @@
+/*
+ * Copyright (c) 2010, 2013 Oracle and/or its affiliates.
+ * All rights reserved. Use is subject to license terms.
+ *
+ * This file is available and licensed under the following license:
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *  - Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Oracle Corporation nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
 package com.javafx.experiments.importers.dae;
 
 import javafx.geometry.Point3D;
--- a/apps/experiments/3DViewer/src/main/java/com/javafx/experiments/jfx3dviewer/MainController.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/apps/experiments/3DViewer/src/main/java/com/javafx/experiments/jfx3dviewer/MainController.java	Tue Jun 04 09:43:48 2013 -0700
@@ -49,6 +49,7 @@
 import javafx.scene.Parent;
 import javafx.scene.control.Accordion;
 import javafx.scene.control.Button;
+import javafx.scene.control.CheckBox;
 import javafx.scene.control.Label;
 import javafx.scene.control.SplitPane;
 import javafx.scene.control.ToggleButton;
@@ -72,6 +73,7 @@
     public Label status;
     public SplitPane splitPane;
     public ToggleButton settingsBtn;
+    public CheckBox loadAsPolygonsCheckBox;
     private Accordion settingsPanel;
     private double settingsLastWidth = -1;
     private int nodeCount = 0;
@@ -169,7 +171,7 @@
     private void load(File file) {
         loadedPath = file;
         try {
-            Node content = Importer3D.load(file.toURI().toURL().toString());
+            Node content = Importer3D.load(file.toURI().toURL().toString(),loadAsPolygonsCheckBox.isSelected());
             contentModel.set3dContent(content);
         } catch (IOException e) {
             e.printStackTrace();
--- a/apps/experiments/3DViewer/src/main/java/com/javafx/experiments/jfx3dviewer/SimpleViewerApp.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/apps/experiments/3DViewer/src/main/java/com/javafx/experiments/jfx3dviewer/SimpleViewerApp.java	Tue Jun 04 09:43:48 2013 -0700
@@ -48,6 +48,7 @@
 import javafx.scene.transform.Rotate;
 import javafx.scene.transform.Translate;
 import javafx.stage.Stage;
+import javafx.stage.StageStyle;
 import javafx.util.Duration;
 import com.javafx.experiments.importers.Importer3D;
 import com.sun.javafx.perf.PerformanceTracker;
@@ -67,8 +68,9 @@
 
     @Override public void start(Stage stage) throws Exception {
         List<String> args = getParameters().getRaw();
-        Scene scene = new Scene(root3D,1920,1080,true,false);
-        scene.setFill(Color.ALICEBLUE);
+        final Scene scene = new Scene(root3D,1920,1080,true,false);
+        scene.setFill(Color.TRANSPARENT);
+        stage.initStyle(StageStyle.TRANSPARENT);
 
         // CAMERA
         camera.getTransforms().addAll(
--- a/apps/experiments/3DViewer/src/main/java/com/javafx/experiments/jfx3dviewer/main.fxml	Mon Jun 03 10:53:52 2013 -0700
+++ b/apps/experiments/3DViewer/src/main/java/com/javafx/experiments/jfx3dviewer/main.fxml	Tue Jun 04 09:43:48 2013 -0700
@@ -44,8 +44,10 @@
   <ToolBar>
     <items>
       <Button fx:id="openBtn" mnemonicParsing="false" onAction="#open" text="Open..." />
-      <Button mnemonicParsing="false" text="Export..."  onAction="#export" />
-      <Pane maxWidth="1.7976931348623157E308" HBox.hgrow="ALWAYS" prefHeight="-1.0" prefWidth="-1.0" />
+      <Button mnemonicParsing="false" onAction="#export" text="Export..." />
+      <Separator orientation="VERTICAL" prefHeight="-1.0" />
+      <CheckBox fx:id="loadAsPolygonsCheckBox" mnemonicParsing="false" text="Load as Polygons" />
+      <Pane maxWidth="1.7976931348623157E308" prefHeight="-1.0" prefWidth="-1.0" HBox.hgrow="ALWAYS"/>
       <ToggleButton fx:id="settingsBtn" mnemonicParsing="false" onAction="#toggleSettings" text="Settings" />
     </items>
   </ToolBar>
--- a/apps/experiments/Modena/Modena.iml	Mon Jun 03 10:53:52 2013 -0700
+++ b/apps/experiments/Modena/Modena.iml	Tue Jun 04 09:43:48 2013 -0700
@@ -53,9 +53,12 @@
     <orderEntry type="module" module-name="prism-ps" />
     <orderEntry type="module" module-name="prism-util" />
     <orderEntry type="module" module-name="test-stub-toolkit" />
-    <orderEntry type="module" module-name="webkit" />
+    <orderEntry type="module" module-name="webview" />
     <orderEntry type="inheritedJdk" />
     <orderEntry type="library" name="webkit-impl" level="project" />
+    <orderEntry type="module" module-name="javafx-builders" />
+    <orderEntry type="module" module-name="javafx-font-t2k" />
+    <orderEntry type="module" module-name="prism-sw" />
   </component>
 </module>
 
--- a/apps/experiments/Modena/src/modena/SamplePage.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/apps/experiments/Modena/src/modena/SamplePage.java	Tue Jun 04 09:43:48 2013 -0700
@@ -79,7 +79,7 @@
 import javafx.scene.control.ToggleGroup;
 import javafx.scene.control.Tooltip;
 import javafx.scene.control.TooltipBuilder;
-import javafx.scene.control.TreeTableViewBuilder;
+import javafx.scene.control.TreeTableView;
 import javafx.scene.control.TreeViewBuilder;
 import javafx.scene.layout.GridPane;
 import javafx.scene.layout.HBox;
@@ -88,13 +88,13 @@
 import javafx.scene.layout.VBox;
 import javafx.scene.layout.VBoxBuilder;
 import javafx.scene.paint.Color;
-import javafx.scene.web.HTMLEditorBuilder;
+import javafx.scene.web.HTMLEditor;
 
 import static modena.SamplePageChartHelper.*;
 import static modena.SamplePageHelpers.*;
 import static modena.SamplePageTableHelper.*;
-import static modena.SamplePageTreeHelper.*;
-import static modena.SamplePageTreeTableHelper.*;
+import static modena.SamplePageTreeHelper.createTreeView;
+import static modena.SamplePageTreeTableHelper.createTreeTableView;
 
 /**
  * Page showing every control in every state.
@@ -302,32 +302,32 @@
         choiceBoxLongList.add(100, "Long List");
         newSection(
                 "ChoiceBox:",
-                ChoiceBoxBuilder.create(String.class).items(sampleItems()).value("Item A").build(),
-                ChoiceBoxBuilder.create(String.class).items(choiceBoxLongList).value("Long List").build(),
-                withState(ChoiceBoxBuilder.create(String.class).items(sampleItems()).value("Item B").build(), "hover"),
-                withState(ChoiceBoxBuilder.create(String.class).items(sampleItems()).value("Item B").build(), "showing"),
-                withState(ChoiceBoxBuilder.create(String.class).items(sampleItems()).value("Item B").build(), "focused"),
-                ChoiceBoxBuilder.create(String.class).items(sampleItems()).value("Item C").disable(true).build()
+                ChoiceBoxBuilder.<String>create().items(sampleItems()).value("Item A").build(),
+                ChoiceBoxBuilder.<String>create().items(choiceBoxLongList).value("Long List").build(),
+                withState(ChoiceBoxBuilder.<String>create().items(sampleItems()).value("Item B").build(), "hover"),
+                withState(ChoiceBoxBuilder.<String>create().items(sampleItems()).value("Item B").build(), "showing"),
+                withState(ChoiceBoxBuilder.<String>create().items(sampleItems()).value("Item B").build(), "focused"),
+                ChoiceBoxBuilder.<String>create().items(sampleItems()).value("Item C").disable(true).build()
         );
         newSection(
                 "ComboBox:",
-                ComboBoxBuilder.create(String.class).items(sampleItems()).value("Item A").build(),
-                ComboBoxBuilder.create(String.class).items(choiceBoxLongList).value("Long List").build(),
-                withState(ComboBoxBuilder.create(String.class).items(sampleItems()).value("Item B").build(), "hover"),
-                withState(ComboBoxBuilder.create(String.class).items(sampleItems()).value("Item B").build(), "showing"),
-                withState(ComboBoxBuilder.create(String.class).items(sampleItems()).value("Item B").build(), "focused"),
-                ComboBoxBuilder.create(String.class).items(sampleItems()).value("Item C").disable(true).build()
+                ComboBoxBuilder.<String>create().items(sampleItems()).value("Item A").build(),
+                ComboBoxBuilder.<String>create().items(choiceBoxLongList).value("Long List").build(),
+                withState(ComboBoxBuilder.<String>create().items(sampleItems()).value("Item B").build(), "hover"),
+                withState(ComboBoxBuilder.<String>create().items(sampleItems()).value("Item B").build(), "showing"),
+                withState(ComboBoxBuilder.<String>create().items(sampleItems()).value("Item B").build(), "focused"),
+                ComboBoxBuilder.<String>create().items(sampleItems()).value("Item C").disable(true).build()
                 );
         newSection(
                 "ComboBox\nEditable:",
-                ComboBoxBuilder.create(String.class).items(sampleItems()).value("Item A").editable(true).build(),
-                withState(ComboBoxBuilder.create(String.class).items(sampleItems()).value("Item B").editable(true).build(), "editable", ".arrow-button", "hover"),
-                withState(ComboBoxBuilder.create(String.class).items(sampleItems()).value("Item B").editable(true).build(), "editable", ".arrow-button", "pressed")
+                ComboBoxBuilder.<String>create().items(sampleItems()).value("Item A").editable(true).build(),
+                withState(ComboBoxBuilder.<String>create().items(sampleItems()).value("Item B").editable(true).build(), "editable", ".arrow-button", "hover"),
+                withState(ComboBoxBuilder.<String>create().items(sampleItems()).value("Item B").editable(true).build(), "editable", ".arrow-button", "pressed")
                 );
         newSection(
                 "ComboBox\nEditable\n(More):",
-                withState(ComboBoxBuilder.create(String.class).items(sampleItems()).value("Item B").editable(true).build(), "editable,contains-focus", ".text-field", "focused"),
-                ComboBoxBuilder.create(String.class).items(sampleItems()).value("Item C").editable(true).disable(true).build()
+                withState(ComboBoxBuilder.<String>create().items(sampleItems()).value("Item B").editable(true).build(), "editable,contains-focus", ".text-field", "focused"),
+                ComboBoxBuilder.<String>create().items(sampleItems()).value("Item C").editable(true).disable(true).build()
                 );
         newSection(
                 "Color Picker:",
@@ -465,11 +465,16 @@
         );
         newSection(
                 "HTMLEditor:",
-                HTMLEditorBuilder.create().htmlText("Hello <b>Bold</b> Text").prefWidth(650).prefHeight(120).build()
-                );
+                new HTMLEditor() {{
+                    setHtmlText("Hello <b>Bold</b> Text");
+                    setPrefSize(650, 120);
+                }});
         newSection(
                 "HTMLEditor\nFocused:",
-                withState(HTMLEditorBuilder.create().htmlText("<i>Focused</i>").prefWidth(650).prefHeight(120).build(), "focused")
+                withState(new HTMLEditor() {{
+                    setHtmlText("<i>Focused</i>");
+                    setPrefSize(650, 120);
+                }}, "focused")
                 );
         newDetailedSection(
                 new String[] { "ToolBar (H|TOP):", "normal", "overflow", "disabled" },
@@ -640,10 +645,12 @@
                 );
         newDetailedSection(
                 new String[] {"Empty:", "ListView", "TableView", "TreeView", "TreeTableView"},
-                ListViewBuilder.create(String.class).prefWidth(150).prefHeight(100).build(),
-                TableViewBuilder.create(Object.class).prefWidth(150).prefHeight(100).build(),
-                TreeViewBuilder.create(Object.class).prefWidth(150).prefHeight(100).build(),
-                TreeTableViewBuilder.create(Object.class).prefWidth(150).prefHeight(100).build()
+                ListViewBuilder.<String>create().prefWidth(150).prefHeight(100).build(),
+                TableViewBuilder.create().prefWidth(150).prefHeight(100).build(),
+                TreeViewBuilder.create().prefWidth(150).prefHeight(100).build(),
+                new TreeTableView() {{
+                    setPrefSize(150, 100);
+                }}
                 );
         newDetailedSection(
                 new String[] {"ToolTip:","inline","inline + graphic", "popup"},
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/performance/Animations/src/animations/TranslatedRectangle.java	Tue Jun 04 09:43:48 2013 -0700
@@ -0,0 +1,36 @@
+package animations;
+
+import javafx.animation.Interpolator;
+import javafx.animation.TranslateTransition;
+import javafx.application.Application;
+import javafx.scene.Group;
+import javafx.scene.Scene;
+import javafx.scene.shape.Rectangle;
+import javafx.stage.Stage;
+import javafx.util.Duration;
+
+/** User: rbair Date: 5/31/13 Time: 2:06 PM */
+public class TranslatedRectangle extends Application {
+
+    @Override public void start(Stage primaryStage) throws Exception {
+        Rectangle r = new Rectangle(100, 100);
+        Group root = new Group(r);
+        Scene scene = new Scene(root, 800, 600);
+        primaryStage.setScene(scene);
+        primaryStage.show();
+
+        TranslateTransition tx = new TranslateTransition(Duration.seconds(5), r);
+        tx.setInterpolator(Interpolator.LINEAR); // So as to make any Jitter obvious
+        tx.setFromX(0);
+        tx.setFromY(250);
+        tx.setToX(700);
+        tx.setToY(250);
+        tx.setCycleCount(TranslateTransition.INDEFINITE);
+        tx.setAutoReverse(true);
+        tx.play();
+    }
+
+    public static void main(String[] args) {
+        launch(args);
+    }
+}
--- a/apps/samples/Ensemble8/Ensemble8.iml	Mon Jun 03 10:53:52 2013 -0700
+++ b/apps/samples/Ensemble8/Ensemble8.iml	Tue Jun 04 09:43:48 2013 -0700
@@ -58,8 +58,11 @@
     <orderEntry type="module" module-name="prism-ps" />
     <orderEntry type="module" module-name="prism-util" />
     <orderEntry type="module" module-name="test-stub-toolkit" />
-    <orderEntry type="module" module-name="webkit" />
+    <orderEntry type="module" module-name="webview" />
     <orderEntry type="library" name="webkit-impl" level="project" />
+    <orderEntry type="module" module-name="javafx-builders" />
+    <orderEntry type="module" module-name="javafx-font-t2k" />
+    <orderEntry type="module" module-name="prism-sw" />
   </component>
 </module>
 
--- a/build.gradle	Mon Jun 03 10:53:52 2013 -0700
+++ b/build.gradle	Tue Jun 04 09:43:48 2013 -0700
@@ -217,30 +217,24 @@
  *                                                                            *
  *****************************************************************************/
 
-// BUILD_CLOSED is a short-hand to specify that a "closed" build should be done.
+// BUILD_CLOSED is used to specify that a "closed" build should be done.
 // It is false by default and is set by a command line property. If true then
-// SUPPLEMENTAL_BUILD_FILE and SUPPLEMENTAL_PROPERTY_FILE will be set to
+// the closed build and property files will be read from
 // ../rt-closed/closed-build.gradle and ../rt-closed/closed-properties.gradle
 // respectively
 
-defineProperty("BUILD_CLOSED", "false");
 def buildClosed = false;
-if (BUILD_CLOSED instanceof String) buildClosed = Boolean.parseBoolean(BUILD_CLOSED);
+if (hasProperty("BUILD_CLOSED")) {
+    buildClosed = Boolean.parseBoolean(BUILD_CLOSED);
+}
+ext.BUILD_CLOSED = buildClosed
 
-if (buildClosed) {
-    def closedDir = file("../rt-closed");
-    defineProperty("SUPPLEMENTAL_BUILD_FILE", "$closedDir/closed-build.gradle");
-}
+def closedDir = file("../rt-closed");
+def supplementalPropertyFile = file("$closedDir/closed-properties.gradle");
+def supplementalBuildFile = file("$closedDir/closed-build.gradle");
 
-// The IS_CLOSED property should be used for logic that needs to do something
-// conditionally based on whether or not we are doing a closed build.
-ext.IS_CLOSED = hasProperty("SUPPLEMENTAL_BUILD_FILE");
-
-if (IS_CLOSED) {
-    def closedDir = file("$SUPPLEMENTAL_BUILD_FILE").getParentFile();
-    defineProperty("SUPPLEMENTAL_PROPERTY_FILE", "$closedDir/closed-properties.gradle");
-
-    apply from: SUPPLEMENTAL_PROPERTY_FILE
+if (BUILD_CLOSED) {
+    apply from: supplementalPropertyFile
 }
 
 // These variables indicate what platform is running the build. Is
@@ -1047,6 +1041,22 @@
     }
 }
 
+project(":builders") {
+    sourceCompatibility = 1.7
+
+    dependencies {
+        compile BUILD_SRC, project(":base"), project(":graphics"),
+                project(":controls"), project(":swt"), project(":swing")
+        testCompile project(":graphics").sourceSets.stub.output
+    }
+    test {
+        // StubToolkit is not *really* needed here, but because some code inadvertently invokes performance
+        // tracker and this attempts to fire up the toolkit and this looks for native libraries and fails,
+        // we have to use the stub toolkit for now.
+        jvmArgs "-Djavafx.toolkit=com.sun.javafx.pgstub.StubToolkit"
+    }
+}
+
 project(":designTime") {
     tasks.all {
         if (!COMPILE_DESIGN_TIME) it.enabled = false
@@ -1357,7 +1367,7 @@
 
     // TODO: implement this
     doLast {
-        if (!IS_CLOSED) {
+        if (!BUILD_CLOSED) {
             println "findbugs task is not implemented"
         }
     }
@@ -1369,7 +1379,7 @@
 task publicExports() {
     dependsOn(sdk)
     doLast {
-        if (!IS_CLOSED) {
+        if (!BUILD_CLOSED) {
             println "publicExports task is only run for a closed build"
         }
     }
@@ -1378,7 +1388,7 @@
 task perf() {
     dependsOn(sdk,apps)
     doLast {
-        if (!IS_CLOSED) {
+        if (!BUILD_CLOSED) {
             println "perf task is only run for a closed build"
         }
     }
@@ -1387,7 +1397,7 @@
 task zips() {
     dependsOn(sdk,publicExports,apps,perf)
     doLast {
-        if (!IS_CLOSED) {
+        if (!BUILD_CLOSED) {
             println "zips task is only run for a closed build"
         }
     }
@@ -1417,6 +1427,7 @@
         includeEmptyDirs = false
         from("modules/base/build/classes/main",
              "modules/base/build/resources/main",
+             "modules/builders/build/classes/main",
              "modules/graphics/build/classes/main",
              "modules/graphics/build/resources/main",
              "modules/controls/build/classes/main",
@@ -1560,7 +1571,7 @@
         <name must-exist="no">build</name>
       </task-names>
       <task-args>
-        <arg>-PSUPPLEMENTAL_BUILD_FILE=../rt-closed/closed-build.gradle</arg>
+        <arg>-PBUILD_CLOSED=true</arg>
       </task-args>
       <task-jvm-args/>
     </task>
@@ -1573,7 +1584,7 @@
         <name must-exist="yes">tasks</name>
       </task-names>
       <task-args>
-        <arg>-PSUPPLEMENTAL_BUILD_FILE=../rt-closed/closed-build.gradle</arg>
+        <arg>-PBUILD_CLOSED=true</arg>
       </task-args>
       <task-jvm-args/>
     </task>
@@ -1868,7 +1879,7 @@
 
 /******************************************************************************
  *                                                                            *
- *                         SUPPLEMENTAL_BUILD_FILE                            *
+ *                              BUILD_CLOSED                                  *
  *                                                                            *
  * This next section should remain at the end of the build script. It allows  *
  * for a "supplemental" gradle file to be used to extend the normal build     *
@@ -1877,6 +1888,6 @@
  *                                                                            *
  *****************************************************************************/
 
-if (IS_CLOSED) {
-    apply from: SUPPLEMENTAL_BUILD_FILE
+if (BUILD_CLOSED) {
+    apply from: supplementalBuildFile
 }
--- a/generator.gradle	Mon Jun 03 10:53:52 2013 -0700
+++ b/generator.gradle	Tue Jun 04 09:43:48 2013 -0700
@@ -376,8 +376,6 @@
         exclude excludeFromResources
     }
 
-    // Create the web module
-
     // Create the swing module
     copy {
         from "${RTDir}/javafx-embed-swing/src"
@@ -541,7 +539,19 @@
         from "${RTDir}/webview/native"
         into "${FXDir}/modules/web/src/main/native"
     }
-    
+
+    // Create the builders module
+    copy {
+        from "${RTDir}/javafx-builders/src"
+        into "${FXDir}/modules/builders/src/main/java"
+        exclude excludeFromSource
+    }
+    copy {
+        from "${RTDir}/javafx-builders/test/unit"
+        into "${FXDir}/modules/builders/src/test/java"
+        exclude excludeFromSource
+    }
+
     // Find every empty directory and nuke it
     def empty = []
     fileTree("$FXDir").visit {
--- a/glass/glass-lib-gtk/src/GlassApplication.cpp	Mon Jun 03 10:53:52 2013 -0700
+++ b/glass/glass-lib-gtk/src/GlassApplication.cpp	Tue Jun 04 09:43:48 2013 -0700
@@ -57,7 +57,6 @@
 
     mainEnv->CallVoidMethod(context->runnable, jRunnableRun, NULL);
     LOG_EXCEPTION(mainEnv);
-    mainEnv->ExceptionClear();
     mainEnv->DeleteGlobalRef(context->runnable);
     free(context);
     return FALSE;
@@ -188,7 +187,6 @@
 static void screen_settings_changed(GdkScreen* screen, gpointer user_data) {
     mainEnv->CallStaticVoidMethod(jScreenCls, jScreenNotifySettingsChanged);
     LOG_EXCEPTION(mainEnv);
-    mainEnv->ExceptionClear(); //This is callback, so clear
 }
 
 extern "C" {
@@ -530,8 +528,6 @@
                     break;
             }
         } catch (jni_exception&) {
-            LOG_EXCEPTION(mainEnv);
-            mainEnv->ExceptionClear();
         }
     } else {
 
--- a/glass/glass-lib-gtk/src/GlassCommonDialogs.cpp	Mon Jun 03 10:53:52 2013 -0700
+++ b/glass/glass-lib-gtk/src/GlassCommonDialogs.cpp	Tue Jun 04 09:43:48 2013 -0700
@@ -153,6 +153,7 @@
     
     jobject result =
             env->CallStaticObjectMethod(jCommonDialogs, jCreateFileChooserResult, jFileNames, jFilters, index);
+    LOG_EXCEPTION(env)
     
     g_slist_free(filters);
     gtk_widget_destroy(chooser);
--- a/glass/glass-lib-gtk/src/GlassCursor.cpp	Mon Jun 03 10:53:52 2013 -0700
+++ b/glass/glass-lib-gtk/src/GlassCursor.cpp	Tue Jun 04 09:43:48 2013 -0700
@@ -181,10 +181,12 @@
 JNIEXPORT jlong JNICALL Java_com_sun_glass_ui_gtk_GtkCursor__1createCursor
   (JNIEnv * env, jobject obj, jint x, jint y, jobject pixels)
 {
-    GdkPixbuf *pixbuf;
+    GdkPixbuf *pixbuf = NULL;
+    GdkCursor *cursor = NULL;
     env->CallVoidMethod(pixels, jPixelsAttachData, PTR_TO_JLONG(&pixbuf));
-    
-    GdkCursor *cursor = gdk_cursor_new_from_pixbuf(gdk_display_get_default(), pixbuf, x, y);
+    if (!EXCEPTION_OCCURED(env)) {
+        cursor = gdk_cursor_new_from_pixbuf(gdk_display_get_default(), pixbuf, x, y);
+    }
     g_object_unref(pixbuf);
 
     return PTR_TO_JLONG(cursor);
--- a/glass/glass-lib-gtk/src/GlassSystemClipboard.cpp	Mon Jun 03 10:53:52 2013 -0700
+++ b/glass/glass-lib-gtk/src/GlassSystemClipboard.cpp	Tue Jun 04 09:43:48 2013 -0700
@@ -128,6 +128,7 @@
 static void set_bytebuffer_data(GtkSelectionData *selection_data, GdkAtom target, jobject data)
 {
     jbyteArray byteArray = (jbyteArray) mainEnv->CallObjectMethod(data, jByteBufferArray);
+    CHECK_JNI_EXCEPTION(mainEnv)
     jbyte* raw = mainEnv->GetByteArrayElements(byteArray, NULL);
     jsize nraw = mainEnv->GetArrayLength(byteArray);
 
@@ -182,11 +183,12 @@
 
 static void set_image_data(GtkSelectionData *selection_data, jobject pixels)
 {
-    GdkPixbuf *pixbuf;
+    GdkPixbuf *pixbuf = NULL;
 
     mainEnv->CallVoidMethod(pixels, jPixelsAttachData, PTR_TO_JLONG(&pixbuf));
-    CHECK_JNI_EXCEPTION(mainEnv);
-    gtk_selection_data_set_pixbuf(selection_data, pixbuf);
+    if (!EXCEPTION_OCCURED(mainEnv)) {
+        gtk_selection_data_set_pixbuf(selection_data, pixbuf);
+    }
 
     g_object_unref(pixbuf);
 }
@@ -200,31 +202,33 @@
     if (gtk_targets_include_text(&target, 1)) {
         typeString = mainEnv->NewStringUTF("text/plain");
         result = mainEnv->CallObjectMethod(data, jMapGet, typeString, NULL);
-        if (result != NULL)
+        if (!EXCEPTION_OCCURED(mainEnv) && result != NULL) {
             set_text_data(selection_data, (jstring)result);
+        }
     } else if (gtk_targets_include_image(&target, 1, TRUE)) {
         typeString = mainEnv->NewStringUTF("application/x-java-rawimage");
         result = mainEnv->CallObjectMethod(data, jMapGet, typeString, NULL);
-        if (result != NULL) {
+        if (!EXCEPTION_OCCURED(mainEnv) && result != NULL) {
             set_image_data(selection_data, result);
-            CHECK_JNI_EXCEPTION(mainEnv);
         }
     } else if (target == MIME_TEXT_URI_LIST_TARGET) {
         typeString = mainEnv->NewStringUTF(name);
         if (mainEnv->CallBooleanMethod(data, jMapContainsKey, typeString, NULL)) {
             result = mainEnv->CallObjectMethod(data, jMapGet, typeString, NULL);
-            if (result != NULL)
+            if (!EXCEPTION_OCCURED(mainEnv) && result != NULL) {
                 set_jstring_data(selection_data, target, (jstring)result);
+            }
         } else {
             typeString = mainEnv->NewStringUTF("application/x-java-file-list");
             result = mainEnv->CallObjectMethod(data, jMapGet, typeString, NULL);
-            if (result != NULL)
+            if (!EXCEPTION_OCCURED(mainEnv) && result != NULL) {
                 set_file_uri_data(selection_data, (jobjectArray) result);
+            }
         }
     } else {
         typeString = mainEnv->NewStringUTF(name);
         result = mainEnv->CallObjectMethod(data, jMapGet, typeString, NULL);
-        if (result != NULL) {
+        if (!EXCEPTION_OCCURED(mainEnv) && result != NULL) {
             if (mainEnv->IsInstanceOf(result, jStringCls)) {
                 set_jstring_data(selection_data, target, (jstring)result);
             } else if (mainEnv->IsInstanceOf(result, jByteBufferCls)) {
@@ -244,8 +248,7 @@
     target = gtk_selection_data_get_target(selection_data);
 
     set_data(target, selection_data, data);
-    LOG_EXCEPTION(mainEnv);
-    mainEnv->ExceptionClear();
+    CHECK_JNI_EXCEPTION(mainEnv);
 }
 
 static void clear_data_func(GtkClipboard *clipboard, gpointer user_data)
@@ -360,6 +363,7 @@
 static void clipboard_owner_changed_callback(GtkClipboard *clipboard, GdkEventOwnerChange *event, jobject obj)
 {
     mainEnv->CallVoidMethod(obj, jClipboardContentChanged);
+    CHECK_JNI_EXCEPTION(mainEnv)
 }
 
 extern "C" {
@@ -470,7 +474,7 @@
     } else {
         result = get_data_raw(env, cmime, FALSE);
     }
-
+    LOG_EXCEPTION(env)
     env->ReleaseStringUTFChars(mime, cmime);
 
     return result;
@@ -511,7 +515,7 @@
 
     convertible = (GdkAtom*) glass_try_malloc_n(ntargets * 2, sizeof(GdkAtom)); //theoretically, the number can double
     if (!convertible) {
-        if (ntargets) {
+        if (ntargets > 0) {
             glass_throw_oom(env, "Failed to allocate mimes");
         }
         g_free(targets);
--- a/glass/glass-lib-gtk/src/GlassTimer.cpp	Mon Jun 03 10:53:52 2013 -0700
+++ b/glass/glass-lib-gtk/src/GlassTimer.cpp	Tue Jun 04 09:43:48 2013 -0700
@@ -77,7 +77,6 @@
     else if (context->runnable) {
         mainEnv->CallVoidMethod(context->runnable, jRunnableRun, NULL);
         LOG_EXCEPTION(mainEnv);
-        mainEnv->ExceptionClear();
     }
     return TRUE;
 }
--- a/glass/glass-lib-gtk/src/GlassView.cpp	Mon Jun 03 10:53:52 2013 -0700
+++ b/glass/glass-lib-gtk/src/GlassView.cpp	Tue Jun 04 09:43:48 2013 -0700
@@ -240,6 +240,7 @@
     if (view->current_window) {
         view->current_window->enter_fullscreen();
         env->CallVoidMethod(obj, jViewNotifyView, com_sun_glass_events_ViewEvent_FULLSCREEN_ENTER);
+        CHECK_JNI_EXCEPTION_RET(env, JNI_FALSE)
     }
     return JNI_TRUE;
 }
@@ -260,6 +261,7 @@
             view->current_window->exit_fullscreen();
         }
         env->CallVoidMethod(obj, jViewNotifyView, com_sun_glass_events_ViewEvent_FULLSCREEN_EXIT);
+        CHECK_JNI_EXCEPTION(env)
     }
 
 }
--- a/glass/glass-lib-gtk/src/GlassWindow.cpp	Mon Jun 03 10:53:52 2013 -0700
+++ b/glass/glass-lib-gtk/src/GlassWindow.cpp	Tue Jun 04 09:43:48 2013 -0700
@@ -136,12 +136,7 @@
   (JNIEnv * env, jobject obj, jlong ptr, jobject view)
 {
     WindowContext* ctx = JLONG_TO_WINDOW_CTX(ptr);
-    try {
-        ctx->set_view(view);
-    } catch (jni_exception&) {
-        return JNI_FALSE;
-    }
-    return JNI_TRUE;
+    return (ctx->set_view(view)) ? JNI_TRUE : JNI_FALSE;
 }
 /*
  * Class:     com_sun_glass_ui_gtk_GtkWindow
@@ -370,11 +365,11 @@
   (JNIEnv * env, jobject obj, jlong ptr, jobject pixels)
 {
     WindowContext* ctx = JLONG_TO_WINDOW_CTX(ptr);
-    GdkPixbuf *pixbuf;
+    GdkPixbuf *pixbuf = NULL;
     env->CallVoidMethod(pixels, jPixelsAttachData, PTR_TO_JLONG(&pixbuf));
-    CHECK_JNI_EXCEPTION(env)
-
-    ctx->set_icon(pixbuf);
+    if (!EXCEPTION_OCCURED(env)) {
+        ctx->set_icon(pixbuf);
+    }
     g_object_unref(pixbuf);
 }
 
--- a/glass/glass-lib-gtk/src/glass_dnd.cpp	Mon Jun 03 10:53:52 2013 -0700
+++ b/glass/glass-lib-gtk/src/glass_dnd.cpp	Tue Jun 04 09:43:48 2013 -0700
@@ -160,6 +160,7 @@
             (jint)event->x_root - enter_ctx.dx, (jint)event->y_root - enter_ctx.dy,
             (jint)event->x_root, (jint)event->y_root,
             translate_gdk_action_to_glass(suggested)));
+    CHECK_JNI_EXCEPTION(mainEnv)
     if (result != suggested && result != GDK_ACTION_COPY) {
         result = static_cast<GdkDragAction>(0);
     }
@@ -172,6 +173,7 @@
 static void process_dnd_target_drag_leave(WindowContext *ctx, GdkEventDND *event)
 {
     mainEnv->CallVoidMethod(ctx->get_jview(), jViewNotifyDragLeave, NULL);
+    CHECK_JNI_EXCEPTION(mainEnv)
 }
 
 static void process_dnd_target_drop_start(WindowContext *ctx, GdkEventDND *event)
@@ -187,6 +189,7 @@
             (jint)event->x_root - enter_ctx.dx, (jint)event->y_root - enter_ctx.dy,
             (jint)event->x_root, (jint)event->y_root,
             translate_gdk_action_to_glass(selected));
+    LOG_EXCEPTION(mainEnv)
 
     gdk_drop_finish(event->context, TRUE, GDK_CURRENT_TIME);
     gdk_drop_reply(event->context, TRUE, GDK_CURRENT_TIME);
@@ -466,7 +469,7 @@
     } else {
         ret = dnd_target_get_raw(env, gdk_atom_intern(cmime, FALSE), FALSE);
     }
-
+    LOG_EXCEPTION(env)
     env->ReleaseStringUTFChars(mime, cmime);
 
     return ret;
@@ -573,9 +576,9 @@
 {
     jobject data = (jobject)g_object_get_data(G_OBJECT(dnd_window), SOURCE_DND_DATA);
     jstring string = mainEnv->NewStringUTF(key);
-    
-    return mainEnv->CallObjectMethod(data, jMapGet, string, NULL);
-    
+    jobject result = mainEnv->CallObjectMethod(data, jMapGet, string, NULL);
+
+    return (EXCEPTION_OCCURED(mainEnv)) ? NULL : result;
 }
 
 static gboolean dnd_source_set_utf8_string(GdkWindow *requestor, GdkAtom property)
@@ -627,7 +630,8 @@
     gchar *buffer;
     gsize size;
     const char * type;
-    GdkPixbuf *pixbuf;
+    GdkPixbuf *pixbuf = NULL;
+    gboolean result = FALSE;
 
     if (target == TARGET_MIME_PNG_ATOM) {
         type = "png";
@@ -642,14 +646,15 @@
     }
 
     mainEnv->CallVoidMethod(pixels, jPixelsAttachData, PTR_TO_JLONG(&pixbuf));
-    
-    if (gdk_pixbuf_save_to_buffer(pixbuf, &buffer, &size, type, NULL, NULL)) {
+
+    if (!EXCEPTION_OCCURED(mainEnv)
+            && gdk_pixbuf_save_to_buffer(pixbuf, &buffer, &size, type, NULL, NULL)) {
         gdk_property_change(requestor, property, target,
                 8, GDK_PROP_MODE_REPLACE, (guchar *)buffer, size);
-    } else {
-        return FALSE;
+        result = TRUE;
     }
-    return TRUE;
+    g_object_unref(pixbuf);
+    return result;
 }
 
 #define FILE_PREFIX "file://"
@@ -727,14 +732,16 @@
             is_data_set = TRUE;
         } else if (mainEnv->IsInstanceOf(data, jByteBufferCls)) {
             jbyteArray byteArray = (jbyteArray)mainEnv->CallObjectMethod(data, jByteBufferArray);
-            jbyte* raw = mainEnv->GetByteArrayElements(byteArray, NULL);
-            jsize nraw = mainEnv->GetArrayLength(byteArray);
-    
-            gdk_property_change(requestor, property, target,
-                    8, GDK_PROP_MODE_REPLACE, (guchar *) raw, nraw);
-            
-            mainEnv->ReleaseByteArrayElements(byteArray, raw, JNI_ABORT);
-            is_data_set = TRUE;
+            if (!EXCEPTION_OCCURED(mainEnv)) {
+                jbyte* raw = mainEnv->GetByteArrayElements(byteArray, NULL);
+                jsize nraw = mainEnv->GetArrayLength(byteArray);
+
+                gdk_property_change(requestor, property, target,
+                        8, GDK_PROP_MODE_REPLACE, (guchar *) raw, nraw);
+
+                mainEnv->ReleaseByteArrayElements(byteArray, raw, JNI_ABORT);
+                is_data_set = TRUE;
+            }
         }
     }
     
--- a/glass/glass-lib-gtk/src/glass_general.cpp	Mon Jun 03 10:53:52 2013 -0700
+++ b/glass/glass-lib-gtk/src/glass_general.cpp	Tue Jun 04 09:43:48 2013 -0700
@@ -268,12 +268,14 @@
     }
 }
 
-void log_exception(JNIEnv *env) {
+gboolean check_and_clear_exception(JNIEnv *env) {
     jthrowable t = env->ExceptionOccurred();
     if (t) {
         env->ExceptionClear();
         env->CallStaticVoidMethod(jApplicationCls, jApplicationReportException, t);
+        return TRUE;
     }
+    return FALSE;
 }
 
 gpointer glass_try_malloc_n(gsize m, gsize n, 
--- a/glass/glass-lib-gtk/src/glass_general.h	Mon Jun 03 10:53:52 2013 -0700
+++ b/glass/glass-lib-gtk/src/glass_general.h	Tue Jun 04 09:43:48 2013 -0700
@@ -60,18 +60,23 @@
     jstring jmessage;
 };
 
+#define EXCEPTION_OCCURED(env) (check_and_clear_exception(env))
+
 #define CHECK_JNI_EXCEPTION(env) \
         if (env->ExceptionCheck()) {\
+            check_and_clear_exception(env);\
             return;\
         }
 
 #define CHECK_JNI_EXCEPTION_RET(env, ret) \
         if (env->ExceptionCheck()) {\
-                return ret;\
+            check_and_clear_exception(env);\
+            return ret;\
         }
 
 #define JNI_EXCEPTION_TO_CPP(env) \
         if (env->ExceptionCheck()) {\
+            check_and_clear_exception(env);\
             throw jni_exception(env->ExceptionOccurred());\
         }
 
@@ -204,7 +209,7 @@
 #define ERROR4(msg, param1, param2, param3, param4)
 #endif
 
-#define LOG_EXCEPTION(env) log_exception(env);
+#define LOG_EXCEPTION(env) check_and_clear_exception(env);
 
     void glass_throw_exception(JNIEnv * env,
             const char * exceptionClass,
@@ -214,7 +219,7 @@
 
     guint8* convert_BGRA_to_RGBA(const int* pixels, int stride, int height);
 
-    void log_exception(JNIEnv *env);
+    gboolean check_and_clear_exception(JNIEnv *env);
 
 #endif        /* GLASS_GENERAL_H */
 
--- a/glass/glass-lib-gtk/src/glass_window.cpp	Mon Jun 03 10:53:52 2013 -0700
+++ b/glass/glass-lib-gtk/src/glass_window.cpp	Tue Jun 04 09:43:48 2013 -0700
@@ -61,7 +61,9 @@
 
 bool WindowContextBase::isEnabled() {
     if (jwindow) {
-        return (JNI_TRUE == mainEnv->CallBooleanMethod(jwindow, jWindowIsEnabled));
+        bool result = (JNI_TRUE == mainEnv->CallBooleanMethod(jwindow, jWindowIsEnabled));
+        LOG_EXCEPTION(mainEnv)
+        return result;
     } else {
         return false;
     }
@@ -75,8 +77,10 @@
         if (!event->in || isEnabled()) {
             mainEnv->CallVoidMethod(jwindow, jWindowNotifyFocus,
                     event->in ? com_sun_glass_events_WindowEvent_FOCUS_GAINED : com_sun_glass_events_WindowEvent_FOCUS_LOST);
+            CHECK_JNI_EXCEPTION(mainEnv)
         } else {
             mainEnv->CallVoidMethod(jwindow, jWindowNotifyFocusDisabled);
+            CHECK_JNI_EXCEPTION(mainEnv)
         }
     }
 }
@@ -102,18 +106,21 @@
 
     if (jwindow) {
         mainEnv->CallVoidMethod(jwindow, jWindowNotifyDestroy);
+        CHECK_JNI_EXCEPTION(mainEnv)
     }
 }
 
 void WindowContextBase::process_delete() {
     if (jwindow && isEnabled()) {
         mainEnv->CallVoidMethod(jwindow, jWindowNotifyClose);
+        CHECK_JNI_EXCEPTION(mainEnv)
     }
 }
 
 void WindowContextBase::process_expose(GdkEventExpose* event) {
     if (jview) {
         mainEnv->CallVoidMethod(jview, jViewNotifyRepaint, event->area.x, event->area.y, event->area.width, event->area.height);
+        CHECK_JNI_EXCEPTION(mainEnv)
     }
 }
 
@@ -179,12 +186,14 @@
                 gdk_modifier_mask_to_glass(state),
                 (event->button == 3 && press) ? JNI_TRUE : JNI_FALSE,
                 JNI_FALSE);
+        CHECK_JNI_EXCEPTION(mainEnv)
 
-        if (event->button == 3 && press) {
+        if (jview && event->button == 3 && press) {
             mainEnv->CallVoidMethod(jview, jViewNotifyMenu,
                     (jint)event->x, (jint)event->y,
                     (jint)event->x_root, (jint)event->y_root,
                     JNI_FALSE);
+            CHECK_JNI_EXCEPTION(mainEnv)
         }
     }
 
@@ -215,6 +224,7 @@
                 glass_modifier,
                 JNI_FALSE,
                 JNI_FALSE);
+        CHECK_JNI_EXCEPTION(mainEnv)
     }
 }
 
@@ -247,6 +257,7 @@
                 (jint) 0, (jint) 0,
                 (jint) 0, (jint) 0,
                 (jdouble) 40.0, (jdouble) 40.0);
+        CHECK_JNI_EXCEPTION(mainEnv)
     }
 
 }
@@ -267,6 +278,7 @@
                 gdk_modifier_mask_to_glass(state),
                 JNI_FALSE,
                 JNI_FALSE);
+        CHECK_JNI_EXCEPTION(mainEnv)
     }
 }
 
@@ -396,7 +408,7 @@
     return gtk_widget_get_visible(gtk_widget);
 }
 
-void WindowContextBase::set_view(jobject view) {
+bool WindowContextBase::set_view(jobject view) {
 
     if (jview) {
         mainEnv->DeleteGlobalRef(jview);
@@ -407,10 +419,11 @@
         jview = mainEnv->NewGlobalRef(view);
         gtk_window_get_size(GTK_WINDOW(gtk_widget), &width, &height);
         mainEnv->CallVoidMethod(view, jViewNotifyResize, width, height);
+        CHECK_JNI_EXCEPTION_RET(mainEnv, FALSE)
     } else {
         jview = NULL;
     }
-
+    return TRUE;
 }
 
 bool WindowContextBase::grab_focus() {
@@ -428,6 +441,7 @@
 
     if (jwindow) {
         mainEnv->CallVoidMethod(jwindow, jWindowNotifyFocusUngrab);
+        CHECK_JNI_EXCEPTION(mainEnv)
     }
 }
 
@@ -715,6 +729,7 @@
 
             if (jview) {
                 mainEnv->CallVoidMethod(jview, jViewNotifyView, com_sun_glass_events_ViewEvent_MOVE);
+                CHECK_JNI_EXCEPTION(mainEnv)
             }
         }
     }
@@ -1233,20 +1248,19 @@
         mainEnv->CallVoidMethod(jview, jViewNotifyResize,
                 event->width,
                 event->height);
+        CHECK_JNI_EXCEPTION(mainEnv)
     }
 
     mainEnv->CallVoidMethod(jwindow, jWindowNotifyResize,
             com_sun_glass_events_WindowEvent_RESIZE,
             event->width,
             event->height);
+    CHECK_JNI_EXCEPTION(mainEnv)
 
     if (!embedded_children.empty()) {
         WindowContextChild* child = embedded_children.back();
         child->process_configure(event);
     }
-
-    mainEnv->ExceptionClear();
-
 }
 
 void WindowContextPlug::process_state(GdkEventWindowState *event) {
@@ -1267,8 +1281,8 @@
                 mainEnv->CallVoidMethod(jview,
                         jViewNotifyRepaint,
                         0, 0, w, h);
+                CHECK_JNI_EXCEPTION(mainEnv)
             }
-            CHECK_JNI_EXCEPTION(mainEnv);
         }
 
         mainEnv->CallVoidMethod(jwindow,
@@ -1278,7 +1292,7 @@
     }
 }
 
-void WindowContextPlug::set_view(jobject view) {
+bool WindowContextPlug::set_view(jobject view) {
     // probably never called for applet window
     if (jview) {
         mainEnv->DeleteGlobalRef(jview);
@@ -1289,9 +1303,11 @@
         jview = mainEnv->NewGlobalRef(view);
         gtk_window_get_size(GTK_WINDOW(gtk_widget), &width, &height);
         mainEnv->CallVoidMethod(view, jViewNotifyResize, width, height);
+        CHECK_JNI_EXCEPTION_RET(mainEnv, FALSE)
     } else {
         jview = NULL;
     }
+    return TRUE;
 }
 
 void WindowContextPlug::window_configure(XWindowChanges *windowChanges,
@@ -1429,6 +1445,7 @@
         mainEnv->CallVoidMethod(jview, jViewNotifyResize,
                 event->width,
                 event->height);
+        CHECK_JNI_EXCEPTION(mainEnv)
     }
 
     gtk_widget_set_size_request(gtk_widget, event->width, event->height);
@@ -1437,7 +1454,7 @@
             com_sun_glass_events_WindowEvent_RESIZE,
             event->width,
             event->height);
-
+    CHECK_JNI_EXCEPTION(mainEnv)
 }
 
 void WindowContextChild::process_state(GdkEventWindowState *event) {
@@ -1469,7 +1486,7 @@
     }
 }
 
-void WindowContextChild::set_view(jobject view) {
+bool WindowContextChild::set_view(jobject view) {
     if (jview) {
         mainEnv->DeleteGlobalRef(jview);
     }
@@ -1480,10 +1497,11 @@
         width = gtk_widget->allocation.width;
         height = gtk_widget->allocation.height;
         mainEnv->CallVoidMethod(view, jViewNotifyResize, width, height);
-        JNI_EXCEPTION_TO_CPP(mainEnv);
+        CHECK_JNI_EXCEPTION_RET(mainEnv, FALSE)
     } else {
         jview = NULL;
     }
+    return TRUE;
 }
 
 void WindowContextChild::set_bounds(int x, int y, bool xSet, bool ySet, int w, int h, int cw, int ch) {
@@ -1494,6 +1512,7 @@
         mainEnv->CallVoidMethod(jwindow,
                 jWindowNotifyMove,
                 newX, newY);
+        CHECK_JNI_EXCEPTION(mainEnv)
     }
 
     // As we have no frames, there's no difference between the calls
@@ -1518,6 +1537,7 @@
             mainEnv->CallVoidMethod(jview,
                     jViewNotifyResize,
                     newWidth, newHeight);
+            CHECK_JNI_EXCEPTION(mainEnv)
         }
     }
 }
@@ -1573,6 +1593,7 @@
     full_screen_window->enter_fullscreen();
 
     mainEnv->CallVoidMethod(jwindow, jWindowNotifyDelegatePtr, (jlong)full_screen_window);
+    CHECK_JNI_EXCEPTION(mainEnv)
 
     if (jview) {
         this->view = (GlassView*)mainEnv->GetLongField(jview, jViewPtr);
@@ -1596,6 +1617,7 @@
     full_screen_window->reparent_children(this);
 
     mainEnv->CallVoidMethod(jwindow, jWindowNotifyDelegatePtr, (jlong)NULL);
+    CHECK_JNI_EXCEPTION(mainEnv)
 
     if (this->view) {
         this->view->current_window = this;
--- a/glass/glass-lib-gtk/src/glass_window.h	Mon Jun 03 10:53:52 2013 -0700
+++ b/glass/glass-lib-gtk/src/glass_window.h	Tue Jun 04 09:43:48 2013 -0700
@@ -151,7 +151,7 @@
 
     virtual void add_child(WindowContextTop* child) = 0;
     virtual void remove_child(WindowContextTop* child) = 0;
-    virtual void set_view(jobject) = 0;
+    virtual bool set_view(jobject) = 0;
 
     virtual GdkWindow *get_gdk_window() = 0;
     virtual GtkWindow *get_gtk_window() = 0;
@@ -197,7 +197,7 @@
     void reparent_children(WindowContext* parent);
     void set_visible(bool);
     bool is_visible();
-    void set_view(jobject);
+    bool set_view(jobject);
     bool grab_focus();
     void ungrab_focus();
     void set_cursor(GdkCursor*);
@@ -228,7 +228,7 @@
 class WindowContextPlug: public WindowContextBase {
     WindowContext* parent;
 public:
-    void set_view(jobject);
+    bool set_view(jobject);
     void set_bounds(int, int, bool, bool, int, int, int, int);
     //WindowFrameExtents get_frame_extents() { return WindowFrameExtents{0, 0, 0, 0}; };
     WindowFrameExtents get_frame_extents() { WindowFrameExtents ext = {0, 0, 0, 0}; return ext;}
@@ -273,7 +273,7 @@
     GlassView* view; // not null while in Full Screen
 public:
     void process_mouse_button(GdkEventButton*);
-    void set_view(jobject);
+    bool set_view(jobject);
     void set_bounds(int, int, bool, bool, int, int, int, int);
     //WindowFrameExtents get_frame_extents() { return WindowFrameExtents{0, 0, 0, 0}; };
     WindowFrameExtents get_frame_extents() { WindowFrameExtents ext = {0, 0, 0, 0}; return ext;}
--- a/glass/glass-lib-gtk/src/glass_window_ime.cpp	Mon Jun 03 10:53:52 2013 -0700
+++ b/glass/glass-lib-gtk/src/glass_window_ime.cpp	Tue Jun 04 09:43:48 2013 -0700
@@ -97,6 +97,7 @@
                     slen,
                     slen,
                     0);
+            LOG_EXCEPTION(mainEnv)
 
             break;
     }
@@ -144,12 +145,14 @@
 
     mainEnv->CallVoidMethod((jobject)client, jViewNotifyInputMethodDraw,
             text, data->chg_first, data->chg_length, data->caret);
+    CHECK_JNI_EXCEPTION(mainEnv)
 }
 
 static void im_preedit_caret(XIM im_xim, XPointer client, XPointer call) {
     XIMPreeditCaretCallbackStruct *data = (XIMPreeditCaretCallbackStruct*) call;
     mainEnv->CallVoidMethod((jobject)client, jViewNotifyInputMethodCaret,
             data->position, data->direction, data->style);
+    CHECK_JNI_EXCEPTION(mainEnv)
 }
 
 static XIMStyle get_best_supported_style(XIM im_xim)
--- a/glass/glass-lib-ios/src/GlassApplication.m	Mon Jun 03 10:53:52 2013 -0700
+++ b/glass/glass-lib-ios/src/GlassApplication.m	Tue Jun 04 09:43:48 2013 -0700
@@ -109,6 +109,21 @@
 static int postEventPipe[2];
 static int haveIDs = 0;
 
+//Library entrypoint
+JNIEXPORT jint JNICALL
+JNI_OnLoad_glass(JavaVM *vm, void *reserved)
+{
+#ifdef JNI_VERSION_1_8
+    //min. returned JNI_VERSION required by JDK8 for builtin libraries
+    JNIEnv *env;
+    if ((*vm)->GetEnv(vm, (void **)&env, JNI_VERSION_1_8) != JNI_OK) {
+        return JNI_VERSION_1_4;
+    }
+    return JNI_VERSION_1_8;
+#else
+    return JNI_VERSION_1_4;
+#endif
+}
 
 /*
  * Function to set the context class loader for the main glass event thread.
--- a/glass/glass-lib-lens/src/wm/screen/x11ContainerScreen.c	Mon Jun 03 10:53:52 2013 -0700
+++ b/glass/glass-lib-lens/src/wm/screen/x11ContainerScreen.c	Tue Jun 04 09:43:48 2013 -0700
@@ -174,3 +174,16 @@
     GLASS_LOG_SEVERE("attachIntBuffer not implemented for X11 Container");
 }
 
+LensResult lens_platform_windowMinimize(JNIEnv *env,
+                                        NativeWindow window,
+                                        jboolean toMinimize) {
+    //noop for X11 container
+    return LENS_OK;
+}
+
+LensResult lens_platform_windowSetVisible(JNIEnv *env,
+                                          NativeWindow window,
+                                          jboolean visible) {
+    //noop for X11 container
+    return LENS_OK;
+}
--- a/glass/glass-lib-windows/src/ViewContainer.cpp	Mon Jun 03 10:53:52 2013 -0700
+++ b/glass/glass-lib-windows/src/ViewContainer.cpp	Tue Jun 04 09:43:48 2013 -0700
@@ -57,13 +57,13 @@
 
 namespace {
 
-bool IsPenEvent()
+bool IsTouchEvent()
 {
     // http://msdn.microsoft.com/en-us/library/windows/desktop/ms703320(v=vs.85).aspx
 
     enum {
-        SIGNATURE = 0xFF515700,
-        MASK = 0xFFFFFF00
+        SIGNATURE = 0xFF515780,
+        MASK = 0xFFFFFF80
     };
 
     const LPARAM v = GetMessageExtraInfo();
@@ -517,7 +517,7 @@
 
     jint jModifiers = GetModifiers();
     
-    const jboolean isSynthesized = jboolean(IsPenEvent());
+    const jboolean isSynthesized = jboolean(IsTouchEvent());
 
     JNIEnv *env = GetEnv();
 
--- a/glass/glass/src/com/sun/glass/ui/Window.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/glass/glass/src/com/sun/glass/ui/Window.java	Tue Jun 04 09:43:48 2013 -0700
@@ -1000,11 +1000,30 @@
     public void toFront() {
         Application.checkEventThread();
         checkNotClosed();
+        toFrontImpl(this, null);
+    }
+
+    private void toFrontImpl(Window w, List<Window> list) {
         // for z-order stacking, pop the window
         // and push it on the end (closest Z)
-        visibleWindows.remove(this);
-        visibleWindows.add(this);
-        _toFront(this.ptr);
+        visibleWindows.remove(w);
+        visibleWindows.add(w);
+        _toFront(w.ptr);
+        raiseOurOwnedWindows(w, list);
+    }
+
+    private void raiseOurOwnedWindows(Window window, List<Window> list) {
+        // owned windows should be maintained in front of the owner.
+        if (list == null) {
+            // get a single copy of the window list
+            // copy is needed to avoid concurence issues with the iterator
+            list = (List<Window>) Window.visibleWindows.clone();
+        }
+        for(Window w: list) {
+            if (window.equals(w.getOwner())) {
+                toFrontImpl(w, list);
+            }
+        }
     }
 
     protected abstract void _toBack(long ptr);
--- a/glass/glass/src/com/sun/glass/utils/NativeLibLoader.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/glass/glass/src/com/sun/glass/utils/NativeLibLoader.java	Tue Jun 04 09:43:48 2013 -0700
@@ -128,6 +128,20 @@
                             + libraryName + ") as a fallback");
                 }
             } catch (UnsatisfiedLinkError ex2) {
+                //On iOS we link all libraries staticaly. Presence of library 
+                //is recognized by existence of JNI_OnLoad_libraryname() C function.
+                //If libraryname contains hyphen, it needs to be translated 
+                //to underscore to form valid C function indentifier.
+                if ("iOS".equals(System.getProperty("os.name"))
+                        && libraryName.contains("-")) {
+                    libraryName = libraryName.replace("-", "_");
+                    try {
+                        System.loadLibrary(libraryName);
+                        return;
+                    } catch (UnsatisfiedLinkError ex3) {
+                        throw ex3;
+                    }
+                }
                 // Rethrow original exception
                 throw ex;
             }
--- a/gradleBuildSrc/win.gradle	Mon Jun 03 10:53:52 2013 -0700
+++ b/gradleBuildSrc/win.gradle	Tue Jun 04 09:43:48 2013 -0700
@@ -244,7 +244,7 @@
 WIN.font.compiler = compiler
 WIN.font.ccFlags = ["/DJFXFONT_PLUS", ccFlags].flatten()
 WIN.font.linker = linker
-WIN.font.linkFlags = [linkFlags, "advapi32.lib", "gdi32.lib", "user32.lib"].flatten()
+WIN.font.linkFlags = [linkFlags, "advapi32.lib", "gdi32.lib", "user32.lib", "dwrite.lib", "d2d1.lib", "windowscodecs.lib", "ole32.lib"].flatten()
 WIN.font.lib = "javafx-font"
 
 WIN.fontT2K = [:]
--- a/javafx-anim/src/com/sun/scenario/animation/SplineInterpolator.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-anim/src/com/sun/scenario/animation/SplineInterpolator.java	Tue Jun 04 09:43:48 2013 -0700
@@ -116,6 +116,22 @@
         }
     }
 
+    public double getX1() {
+        return x1;
+    }
+
+    public double getY1() {
+        return y1;
+    }
+
+    public double getX2() {
+        return x2;
+    }
+
+    public double getY2() {
+        return y2;
+    }
+
     /**
      * Returns the y-value of the cubic bezier curve that corresponds to the x
      * input.
--- a/javafx-anim/src/javafx/animation/Animation.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-anim/src/javafx/animation/Animation.java	Tue Jun 04 09:43:48 2013 -0700
@@ -83,6 +83,7 @@
  * @see Timeline
  * @see Transition
  * 
+ * @since JavaFX 2.0
  */
 public abstract class Animation {
 
@@ -98,6 +99,7 @@
 
     /**
      * The possible states for {@link Animation#statusProperty status}.
+     * @since JavaFX 2.0
      */
     public static enum Status {
         /**
--- a/javafx-anim/src/javafx/animation/AnimationTimer.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-anim/src/javafx/animation/AnimationTimer.java	Tue Jun 04 09:43:48 2013 -0700
@@ -39,6 +39,7 @@
  * and stop the timer.
  * 
  * 
+ * @since JavaFX 2.0
  */
 public abstract class AnimationTimer {
     
--- a/javafx-anim/src/javafx/animation/Interpolatable.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-anim/src/javafx/animation/Interpolatable.java	Tue Jun 04 09:43:48 2013 -0700
@@ -29,6 +29,7 @@
  * A value that can be interpolated. It defines single
  * {@link #interpolate(Object, double)} method, which returns interpolated value
  * of given fraction.
+ * @since JavaFX 2.0
  */
 public interface Interpolatable<T> {
 
--- a/javafx-anim/src/javafx/animation/Interpolator.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-anim/src/javafx/animation/Interpolator.java	Tue Jun 04 09:43:48 2013 -0700
@@ -38,6 +38,7 @@
  * <p>
  * A custom {@code Interpolator} has to be defined in terms of a "
  * {@link #curve(double) curve()}".
+ * @since JavaFX 2.0
  */
 public abstract class Interpolator {
 
--- a/javafx-anim/src/javafx/animation/KeyFrame.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-anim/src/javafx/animation/KeyFrame.java	Tue Jun 04 09:43:48 2013 -0700
@@ -50,6 +50,7 @@
  * @see KeyValue
  * @see Interpolator
  * 
+ * @since JavaFX 2.0
  */
 public final class KeyFrame {
 
--- a/javafx-anim/src/javafx/animation/KeyValue.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-anim/src/javafx/animation/KeyValue.java	Tue Jun 04 09:43:48 2013 -0700
@@ -57,6 +57,7 @@
  * @see KeyFrame
  * @see Interpolator
  * 
+ * @since JavaFX 2.0
  */
 public final class KeyValue {
 
@@ -65,6 +66,7 @@
     /**
      * @treatAsPrivate implementation detail
      * @deprecated This is an internal API that is not intended for use and will be removed in the next version
+     * @since JavaFX 2.0
      */
     @Deprecated
     public static enum Type {
--- a/javafx-anim/src/javafx/animation/Timeline.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-anim/src/javafx/animation/Timeline.java	Tue Jun 04 09:43:48 2013 -0700
@@ -65,6 +65,7 @@
  * @see KeyFrame
  * @see KeyValue
  * 
+ * @since JavaFX 2.0
  */
 public final class Timeline extends Animation {
     /* Package-private for testing purposes */
--- a/javafx-beans/src/javafx/beans/DefaultProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/DefaultProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -36,6 +36,7 @@
  * Specifies a property to which child elements will be added or set when an
  * explicit property is not given.
  *
+ * @since JavaFX 2.0
  */
 @Inherited
 @Documented
--- a/javafx-beans/src/javafx/beans/InvalidationListener.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/InvalidationListener.java	Tue Jun 04 09:43:48 2013 -0700
@@ -43,6 +43,7 @@
  * @see ObservableValue
  *
  *
+ * @since JavaFX 2.0
  */
 public interface InvalidationListener {
 
--- a/javafx-beans/src/javafx/beans/Observable.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/Observable.java	Tue Jun 04 09:43:48 2013 -0700
@@ -46,6 +46,7 @@
  * @see javafx.collections.ObservableMap
  * 
  * 
+ * @since JavaFX 2.0
  */
 public interface Observable {
 
--- a/javafx-beans/src/javafx/beans/WeakInvalidationListener.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/WeakInvalidationListener.java	Tue Jun 04 09:43:48 2013 -0700
@@ -45,6 +45,7 @@
  * @see Observable
  * 
  * 
+ * @since JavaFX 2.0
  */
 public final class WeakInvalidationListener implements InvalidationListener, WeakListener {
 
--- a/javafx-beans/src/javafx/beans/WeakListener.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/WeakListener.java	Tue Jun 04 09:43:48 2013 -0700
@@ -34,6 +34,7 @@
  * @see javafx.beans.value.WeakChangeListener
  *
  *
+ * @since JavaFX 2.1
  */
 public interface WeakListener {
     /**
--- a/javafx-beans/src/javafx/beans/binding/Binding.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/binding/Binding.java	Tue Jun 04 09:43:48 2013 -0700
@@ -52,6 +52,7 @@
  * @see DoubleBinding
  * 
  * 
+ * @since JavaFX 2.0
  */
 public interface Binding<T> extends ObservableValue<T> {
 
--- a/javafx-beans/src/javafx/beans/binding/Bindings.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/binding/Bindings.java	Tue Jun 04 09:43:48 2013 -0700
@@ -103,6 +103,7 @@
  * @see NumberBinding
  * 
  * 
+ * @since JavaFX 2.0
  */
 public final class Bindings {
 
@@ -118,6 +119,7 @@
      * @param func The function that calculates the value of this binding
      * @param dependencies The dependencies of this binding
      * @return The generated binding
+     * @since JavaFX 2.1
      */
     public static BooleanBinding createBooleanBinding(final Callable<Boolean> func, final Observable... dependencies) {
         return new BooleanBinding() {
@@ -158,6 +160,7 @@
      * @param func The function that calculates the value of this binding
      * @param dependencies The dependencies of this binding
      * @return The generated binding
+     * @since JavaFX 2.1
      */
     public static DoubleBinding createDoubleBinding(final Callable<Double> func, final Observable... dependencies) {
         return new DoubleBinding() {
@@ -198,6 +201,7 @@
      * @param func The function that calculates the value of this binding
      * @param dependencies The dependencies of this binding
      * @return The generated binding
+     * @since JavaFX 2.1
      */
     public static FloatBinding createFloatBinding(final Callable<Float> func, final Observable... dependencies) {
         return new FloatBinding() {
@@ -238,6 +242,7 @@
      * @param func The function that calculates the value of this binding
      * @param dependencies The dependencies of this binding
      * @return The generated binding
+     * @since JavaFX 2.1
      */
     public static IntegerBinding createIntegerBinding(final Callable<Integer> func, final Observable... dependencies) {
         return new IntegerBinding() {
@@ -278,6 +283,7 @@
      * @param func The function that calculates the value of this binding
      * @param dependencies The dependencies of this binding
      * @return The generated binding
+     * @since JavaFX 2.1
      */
     public static LongBinding createLongBinding(final Callable<Long> func, final Observable... dependencies) {
         return new LongBinding() {
@@ -318,6 +324,7 @@
      * @param func The function that calculates the value of this binding
      * @param dependencies The dependencies of this binding
      * @return The generated binding
+     * @since JavaFX 2.1
      */
     public static <T> ObjectBinding<T> createObjectBinding(final Callable<T> func, final Observable... dependencies) {
         return new ObjectBinding<T>() {
@@ -358,6 +365,7 @@
      * @param func The function that calculates the value of this binding
      * @param dependencies The dependencies of this binding
      * @return The generated binding
+     * @since JavaFX 2.1
      */
     public static StringBinding createStringBinding(final Callable<String> func, final Observable... dependencies) {
         return new StringBinding() {
@@ -553,7 +561,7 @@
      *            The property names to reach the final property. The first step
      *            must be specified as it marks the property of the root bean.
      * @return the created {@link ObjectBinding}
-     * @since 8.0
+     * @since JavaFX 8.0
      */
     public static <T> ObjectBinding<T> select(Object root, String... steps) {
         return new SelectBinding.AsObject<T>(root, steps);
@@ -576,7 +584,7 @@
      *            The property names to reach the final property. The first step
      *            must be specified as it marks the property of the root bean.
      * @return the created {@link DoubleBinding}
-     * @since 8.0
+     * @since JavaFX 8.0
      */
     public static DoubleBinding selectDouble(Object root, String... steps) {
         return new SelectBinding.AsDouble(root, steps);
@@ -599,7 +607,7 @@
      *            The property names to reach the final property. The first step
      *            must be specified as it marks the property of the root bean.
      * @return the created {@link FloatBinding}
-     * @since 8.0
+     * @since JavaFX 8.0
      */
     public static FloatBinding selectFloat(Object root, String... steps) {
         return new SelectBinding.AsFloat(root, steps);
@@ -622,7 +630,7 @@
      *            The property names to reach the final property. The first step
      *            must be specified as it marks the property of the root bean.
      * @return the created {@link IntegerBinding}
-     * @since 8.0
+     * @since JavaFX 8.0
      */
     public static IntegerBinding selectInteger(Object root, String... steps) {
         return new SelectBinding.AsInteger(root, steps);
@@ -645,7 +653,7 @@
      *            The property names to reach the final property. The first step
      *            must be specified as it marks the property of the root bean.
      * @return the created {@link LongBinding}
-     * @since 8.0
+     * @since JavaFX 8.0
      */
     public static LongBinding selectLong(Object root, String... steps) {
         return new SelectBinding.AsLong(root, steps);
@@ -668,7 +676,7 @@
      *            The property names to reach the final property. The first step
      *            must be specified as it marks the property of the root bean.
      * @return the created {@link ObjectBinding}
-     * @since 8.0
+     * @since JavaFX 8.0
      */
     public static BooleanBinding selectBoolean(Object root, String... steps) {
         return new SelectBinding.AsBoolean(root, steps);
@@ -691,7 +699,7 @@
      *            The property names to reach the final property. The first step
      *            must be specified as it marks the property of the root bean.
      * @return the created {@link ObjectBinding}
-     * @since 8.0
+     * @since JavaFX 8.0
      */
     public static StringBinding selectString(Object root, String... steps) {
         return new SelectBinding.AsString(root, steps);
@@ -781,6 +789,7 @@
      *            if one of the properties is {@code null}
      * @throws IllegalArgumentException
      *            if both properties are equal
+     * @since JavaFX 2.1
      */
     public static void unbindBidirectional(Object property1, Object property2) {
         BidirectionalBinding.unbind(property1, property2);
@@ -817,6 +826,7 @@
      *            if one of the properties or the {@code format} is {@code null}
      * @throws IllegalArgumentException
      *            if both properties are equal
+     * @since JavaFX 2.1
      */
     public  static void bindBidirectional(Property<String> stringProperty, Property<?> otherProperty, Format format) {
         BidirectionalBinding.bind(stringProperty, otherProperty, format);
@@ -853,6 +863,7 @@
      *            if one of the properties or the {@code converter} is {@code null}
      * @throws IllegalArgumentException
      *            if both properties are equal
+     * @since JavaFX 2.1
      */
     public static <T> void bindBidirectional(Property<String> stringProperty, Property<T> otherProperty, StringConverter<T> converter) {
         BidirectionalBinding.bind(stringProperty, otherProperty, converter);
@@ -891,6 +902,7 @@
      *            if one of the lists is {@code null}
      * @throws IllegalArgumentException
      *            if {@code list1} == {@code list2}
+     * @since JavaFX 2.1
      */
     public static <E> void bindContentBidirectional(ObservableList<E> list1, ObservableList<E> list2) {
         BidirectionalContentBinding.bind(list1, list2);
@@ -929,6 +941,7 @@
      *            if one of the sets is {@code null}
      * @throws IllegalArgumentException
      *            if {@code set1} == {@code set2}
+     * @since JavaFX 2.1
      */
     public static <E> void bindContentBidirectional(ObservableSet<E> set1, ObservableSet<E> set2) {
         BidirectionalContentBinding.bind(set1, set2);
@@ -965,6 +978,7 @@
      *            the first {@code ObservableMap<K, V>}
      * @param map2
      *            the second {@code ObservableMap<K, V>}
+     * @since JavaFX 2.1
      */
     public static <K, V> void bindContentBidirectional(ObservableMap<K, V> map1, ObservableMap<K, V> map2) {
         BidirectionalContentBinding.bind(map1, map2);
@@ -977,6 +991,7 @@
      *            the first {@code Object}
      * @param obj2
      *            the second {@code Object}
+     * @since JavaFX 2.1
      */
     public static void unbindContentBidirectional(Object obj1, Object obj2) {
         BidirectionalContentBinding.unbind(obj1, obj2);
@@ -999,6 +1014,7 @@
      *            the {@code List}
      * @param list2
      *            the {@code ObservableList}
+     * @since JavaFX 2.1
      */
     public static <E> void bindContent(List<E> list1, ObservableList<? extends E> list2) {
         ContentBinding.bind(list1, list2);
@@ -1025,6 +1041,7 @@
      *            if one of the sets is {@code null}
      * @throws IllegalArgumentException
      *            if {@code set1} == {@code set2}
+     * @since JavaFX 2.1
      */
     public static <E> void bindContent(Set<E> set1, ObservableSet<? extends E> set2) {
         ContentBinding.bind(set1, set2);
@@ -1053,6 +1070,7 @@
      *            if one of the maps is {@code null}
      * @throws IllegalArgumentException
      *            if {@code map1} == {@code map2}
+     * @since JavaFX 2.1
      */
     public static <K, V> void bindContent(Map<K, V> map1, ObservableMap<? extends K, ? extends V> map2) {
         ContentBinding.bind(map1, map2);
@@ -1069,6 +1087,7 @@
      *            if one of the {@code Objects} is {@code null}
      * @throws IllegalArgumentException
      *            if {@code obj1} == {@code obj2}
+     * @since JavaFX 2.1
      */
     public static void unbindContent(Object obj1, Object obj2) {
         ContentBinding.unbind(obj1, obj2);
@@ -5561,6 +5580,7 @@
      * @return the new {@code IntegerBinding}
      * @throws NullPointerException
      *             if the {@code ObservableStringValue} is {@code null}
+     * @since JavaFX 8.0
      */
     public static IntegerBinding length(final ObservableStringValue op) {
         if (op == null) {
@@ -5602,6 +5622,7 @@
      * @return the new {@code BooleanBinding}
      * @throws NullPointerException
      *             if the {@code ObservableStringValue} is {@code null}
+     * @since JavaFX 8.0
      */
     public static BooleanBinding isEmpty(final ObservableStringValue op) {
         if (op == null) {
@@ -5643,6 +5664,7 @@
      * @return the new {@code BooleanBinding}
      * @throws NullPointerException
      *             if the {@code ObservableStringValue} is {@code null}
+     * @since JavaFX 8.0
      */
     public static BooleanBinding isNotEmpty(final ObservableStringValue op) {
         if (op == null) {
@@ -5934,6 +5956,7 @@
      * @return the new {@code IntegerBinding}
      * @throws NullPointerException
      *             if the {@code ObservableList} is {@code null}
+     * @since JavaFX 2.1
      */
     public static <E> IntegerBinding size(final ObservableList<E> op) {
         if (op == null) {
@@ -5973,6 +5996,7 @@
      * @return the new {@code BooleanBinding}
      * @throws NullPointerException
      *             if the {@code ObservableList} is {@code null}
+     * @since JavaFX 2.1
      */
     public static <E> BooleanBinding isEmpty(final ObservableList<E> op) {
         if (op == null) {
@@ -6012,6 +6036,7 @@
      * @return the new {@code BooleanBinding}
      * @throws NullPointerException
      *             if the {@code ObservableList} is {@code null}
+     * @since JavaFX 8.0
      */
     public static <E> BooleanBinding isNotEmpty(final ObservableList<E> op)     {
         if (op == null) {
@@ -6052,6 +6077,7 @@
      * @return the new {@code ObjectBinding}
      * @throws NullPointerException if the {@code ObservableList} is {@code null}
      * @throws IllegalArgumentException if (@code index < 0}
+     * @since JavaFX 2.1
      */
     public static <E> ObjectBinding<E> valueAt(final ObservableList<E> op, final int index) {
         if (op == null) {
@@ -6099,6 +6125,7 @@
      * @param <E> the type of the {@code List} elements
      * @return the new {@code ObjectBinding}
      * @throws NullPointerException if the {@code ObservableList} or {@code index} is {@code null}
+     * @since JavaFX 2.1
      */
     public static <E> ObjectBinding<E> valueAt(final ObservableList<E> op, final ObservableIntegerValue index) {
         return valueAt(op, (ObservableNumberValue)index);
@@ -6114,6 +6141,7 @@
      * @param <E> the type of the {@code List} elements
      * @return the new {@code ObjectBinding}
      * @throws NullPointerException if the {@code ObservableList} or {@code index} is {@code null}
+     * @since JavaFX 8.0
      */
     public static <E> ObjectBinding<E> valueAt(final ObservableList<E> op, final ObservableNumberValue index) {
         if ((op == null) || (index == null)) {
@@ -6158,6 +6186,7 @@
      * @return the new {@code BooleanBinding}
      * @throws NullPointerException if the {@code ObservableList} is {@code null}
      * @throws IllegalArgumentException if (@code index < 0}
+     * @since JavaFX 2.1
      */
     public static BooleanBinding booleanValueAt(final ObservableList<Boolean> op, final int index) {
         if (op == null) {
@@ -6209,6 +6238,7 @@
      * @param index the position in the {@code List}
      * @return the new {@code BooleanBinding}
      * @throws NullPointerException if the {@code ObservableList} or {@code index} is {@code null}
+     * @since JavaFX 2.1
      */
     public static BooleanBinding booleanValueAt(final ObservableList<Boolean> op, final ObservableIntegerValue index) {
         return booleanValueAt(op, (ObservableNumberValue)index);
@@ -6223,6 +6253,7 @@
      * @param index the position in the {@code List}, converted to int
      * @return the new {@code BooleanBinding}
      * @throws NullPointerException if the {@code ObservableList} or {@code index} is {@code null}
+     * @since JavaFX 8.0
      */
     public static BooleanBinding booleanValueAt(final ObservableList<Boolean> op, final ObservableNumberValue index) {
         if ((op == null) || (index == null)) {
@@ -6272,6 +6303,7 @@
      * @return the new {@code DoubleBinding}
      * @throws NullPointerException if the {@code ObservableList} is {@code null}
      * @throws IllegalArgumentException if (@code index < 0}
+     * @since JavaFX 2.1
      */
     public static DoubleBinding doubleValueAt(final ObservableList<? extends Number> op, final int index) {
         if (op == null) {
@@ -6323,6 +6355,7 @@
      * @param index the position in the {@code List}
      * @return the new {@code DoubleBinding}
      * @throws NullPointerException if the {@code ObservableList} or {@code index} is {@code null}
+     * @since JavaFX 2.1
      */
     public static DoubleBinding doubleValueAt(final ObservableList<? extends Number> op, final ObservableIntegerValue index) {
         return doubleValueAt(op, (ObservableNumberValue)index);
@@ -6337,6 +6370,7 @@
      * @param index the position in the {@code List}, converted to int
      * @return the new {@code DoubleBinding}
      * @throws NullPointerException if the {@code ObservableList} or {@code index} is {@code null}
+     * @since JavaFX 8.0
      */
     public static DoubleBinding doubleValueAt(final ObservableList<? extends Number> op, final ObservableNumberValue index) {
         if ((op == null) || (index == null)) {
@@ -6386,6 +6420,7 @@
      * @return the new {@code FloatBinding}
      * @throws NullPointerException if the {@code ObservableList} is {@code null}
      * @throws IllegalArgumentException if (@code index < 0}
+     * @since JavaFX 2.1
      */
     public static FloatBinding floatValueAt(final ObservableList<? extends Number> op, final int index) {
         if (op == null) {
@@ -6437,6 +6472,7 @@
      * @param index the position in the {@code List}
      * @return the new {@code FloatBinding}
      * @throws NullPointerException if the {@code ObservableList} or {@code index} is {@code null}
+     * @since JavaFX 2.1
      */
     public static FloatBinding floatValueAt(final ObservableList<? extends Number> op, final ObservableIntegerValue index) {
         return floatValueAt(op, (ObservableNumberValue)index);
@@ -6451,6 +6487,7 @@
      * @param index the position in the {@code List}, converted to int
      * @return the new {@code FloatBinding}
      * @throws NullPointerException if the {@code ObservableList} or {@code index} is {@code null}
+     * @since JavaFX 8.0
      */
     public static FloatBinding floatValueAt(final ObservableList<? extends Number> op, final ObservableNumberValue index) {
         if ((op == null) || (index == null)) {
@@ -6500,6 +6537,7 @@
      * @return the new {@code IntegerBinding}
      * @throws NullPointerException if the {@code ObservableList} is {@code null}
      * @throws IllegalArgumentException if (@code index < 0}
+     * @since JavaFX 2.1
      */
     public static IntegerBinding integerValueAt(final ObservableList<? extends Number> op, final int index) {
         if (op == null) {
@@ -6551,6 +6589,7 @@
      * @param index the position in the {@code List}
      * @return the new {@code IntegerBinding}
      * @throws NullPointerException if the {@code ObservableList} or {@code index} is {@code null}
+     * @since JavaFX 2.1
      */
     public static IntegerBinding integerValueAt(final ObservableList<? extends Number> op, final ObservableIntegerValue index) {
         return integerValueAt(op, (ObservableNumberValue)index);
@@ -6565,6 +6604,7 @@
      * @param index the position in the {@code List}, converted to int
      * @return the new {@code IntegerBinding}
      * @throws NullPointerException if the {@code ObservableList} or {@code index} is {@code null}
+     * @since JavaFX 8.0
      */
     public static IntegerBinding integerValueAt(final ObservableList<? extends Number> op, final ObservableNumberValue index) {
         if ((op == null) || (index == null)) {
@@ -6614,6 +6654,7 @@
      * @return the new {@code LongBinding}
      * @throws NullPointerException if the {@code ObservableList} is {@code null}
      * @throws IllegalArgumentException if (@code index < 0}
+     * @since JavaFX 2.1
      */
     public static LongBinding longValueAt(final ObservableList<? extends Number> op, final int index) {
         if (op == null) {
@@ -6665,6 +6706,7 @@
      * @param index the position in the {@code List}
      * @return the new {@code LongBinding}
      * @throws NullPointerException if the {@code ObservableList} or {@code index} is {@code null}
+     * @since JavaFX 2.1
      */
     public static LongBinding longValueAt(final ObservableList<? extends Number> op, final ObservableIntegerValue index) {
         return longValueAt(op, (ObservableNumberValue)index);
@@ -6679,6 +6721,7 @@
      * @param index the position in the {@code List}, converted to int
      * @return the new {@code LongBinding}
      * @throws NullPointerException if the {@code ObservableList} or {@code index} is {@code null}
+     * @since JavaFX 8.0
      */
     public static LongBinding longValueAt(final ObservableList<? extends Number> op, final ObservableNumberValue index) {
         if ((op == null) || (index == null)) {
@@ -6728,6 +6771,7 @@
      * @return the new {@code StringBinding}
      * @throws NullPointerException if the {@code ObservableList} is {@code null}
      * @throws IllegalArgumentException if (@code index < 0}
+     * @since JavaFX 2.1
      */
     public static StringBinding stringValueAt(final ObservableList<String> op, final int index) {
         if (op == null) {
@@ -6774,6 +6818,7 @@
      * @param index the position in the {@code List}
      * @return the new {@code StringBinding}
      * @throws NullPointerException if the {@code ObservableList} or {@code index} is {@code null}
+     * @since JavaFX 2.1
      */
     public static StringBinding stringValueAt(final ObservableList<String> op, final ObservableIntegerValue index) {
         return stringValueAt(op, (ObservableNumberValue)index);
@@ -6788,6 +6833,7 @@
      * @param index the position in the {@code List}, converted to int
      * @return the new {@code StringBinding}
      * @throws NullPointerException if the {@code ObservableList} or {@code index} is {@code null}
+     * @since JavaFX 8.0
      */
     public static StringBinding stringValueAt(final ObservableList<String> op, final ObservableNumberValue index) {
         if ((op == null) || (index == null)) {
@@ -6835,6 +6881,7 @@
      * @return the new {@code IntegerBinding}
      * @throws NullPointerException
      *             if the {@code ObservableSet} is {@code null}
+     * @since JavaFX 2.1
      */
     public static <E> IntegerBinding size(final ObservableSet<E> op) {
         if (op == null) {
@@ -6874,6 +6921,7 @@
      * @return the new {@code BooleanBinding}
      * @throws NullPointerException
      *             if the {@code ObservableSet} is {@code null}
+     * @since JavaFX 2.1
      */
     public static <E> BooleanBinding isEmpty(final ObservableSet<E> op) {
         if (op == null) {
@@ -6913,6 +6961,7 @@
      * @return the new {@code BooleanBinding}
      * @throws NullPointerException
      *             if the {@code ObservableSet} is {@code null}
+     * @since JavaFX 8.0
      */
     public static <E> BooleanBinding isNotEmpty(final ObservableSet<E> op)     {
         if (op == null) {
@@ -6953,6 +7002,7 @@
      * @return the new {@code IntegerBinding}
      * @throws NullPointerException
      *             if the {@code ObservableArray} is {@code null}
+     * @since JavaFX 8.0
      */
     public static IntegerBinding size(final ObservableArray op) {
         if (op == null) {
@@ -6992,6 +7042,7 @@
      * @return the new {@code FloatBinding}
      * @throws NullPointerException if the {@code ObservableArray} is {@code null}
      * @throws IllegalArgumentException if (@code index < 0}
+     * @since JavaFX 8.0
      */
     public static FloatBinding floatValueAt(final ObservableFloatArray op, final int index) {
         if (op == null) {
@@ -7038,6 +7089,7 @@
      * @param index the position in the {@code ObservableArray}
      * @return the new {@code FloatBinding}
      * @throws NullPointerException if the {@code ObservableArray} or {@code index} is {@code null}
+     * @since JavaFX 8.0
      */
     public static FloatBinding floatValueAt(final ObservableFloatArray op, final ObservableIntegerValue index) {
         return floatValueAt(op, (ObservableNumberValue)index);
@@ -7052,6 +7104,7 @@
      * @param index the position in the {@code ObservableArray}, converted to int
      * @return the new {@code FloatBinding}
      * @throws NullPointerException if the {@code ObservableArray} or {@code index} is {@code null}
+     * @since JavaFX 8.0
      */
     public static FloatBinding floatValueAt(final ObservableFloatArray op, final ObservableNumberValue index) {
         if ((op == null) || (index == null)) {
@@ -7096,6 +7149,7 @@
      * @return the new {@code IntegerBinding}
      * @throws NullPointerException if the {@code ObservableArray} is {@code null}
      * @throws IllegalArgumentException if (@code index < 0}
+     * @since JavaFX 8.0
      */
     public static IntegerBinding integerValueAt(final ObservableIntegerArray op, final int index) {
         if (op == null) {
@@ -7142,6 +7196,7 @@
      * @param index the position in the {@code ObservableArray}
      * @return the new {@code IntegerBinding}
      * @throws NullPointerException if the {@code ObservableArray} or {@code index} is {@code null}
+     * @since JavaFX 8.0
      */
     public static IntegerBinding integerValueAt(final ObservableIntegerArray op, final ObservableIntegerValue index) {
         return integerValueAt(op, (ObservableNumberValue)index);
@@ -7156,6 +7211,7 @@
      * @param index the position in the {@code ObservableArray}, converted to int
      * @return the new {@code IntegerBinding}
      * @throws NullPointerException if the {@code ObservableArray} or {@code index} is {@code null}
+     * @since JavaFX 8.0
      */
     public static IntegerBinding integerValueAt(final ObservableIntegerArray op, final ObservableNumberValue index) {
         if ((op == null) || (index == null)) {
@@ -7205,6 +7261,7 @@
      * @throws NullPointerException
      *             if the {@code ObservableMap} is {@code null}
      *
+     * @since JavaFX 2.1
      */
     public static <K, V> IntegerBinding size(final ObservableMap<K, V> op) {
         if (op == null) {
@@ -7245,6 +7302,7 @@
      * @return the new {@code BooleanBinding}
      * @throws NullPointerException
      *             if the {@code ObservableMap} is {@code null}
+     * @since JavaFX 2.1
      */
     public static <K, V> BooleanBinding isEmpty(final ObservableMap<K, V> op) {
         if (op == null) {
@@ -7285,6 +7343,7 @@
      * @return the new {@code BooleanBinding}
      * @throws NullPointerException
      *             if the {@code ObservableMap} is {@code null}
+     * @since JavaFX 8.0
      */
     public static <K, V> BooleanBinding isNotEmpty(final ObservableMap<K, V> op)     {
         if (op == null) {
@@ -7324,6 +7383,7 @@
      * @param <V> type of the value elements of the {@code Map}
      * @return the new {@code ObjectBinding}
      * @throws NullPointerException if the {@code ObservableMap} is {@code null}
+     * @since JavaFX 2.1
      */
     public static <K, V> ObjectBinding<V> valueAt(final ObservableMap<K, V> op, final K key) {
         if (op == null) {
@@ -7372,6 +7432,7 @@
      * @param <V> type of the value elements of the {@code Map}
      * @return the new {@code ObjectBinding}
      * @throws NullPointerException if the {@code ObservableMap} or {@code key} is {@code null}
+     * @since JavaFX 2.1
      */
     public static <K, V> ObjectBinding<V> valueAt(final ObservableMap<K, V> op, final ObservableValue<? extends K> key) {
         if ((op == null) || (key == null)) {
@@ -7420,6 +7481,7 @@
      * @param <K> type of the key elements of the {@code Map}
      * @return the new {@code BooleanBinding}
      * @throws NullPointerException if the {@code ObservableMap} is {@code null}
+     * @since JavaFX 2.1
      */
     public static <K> BooleanBinding booleanValueAt(final ObservableMap<K, Boolean> op, final K key) {
         if (op == null) {
@@ -7473,6 +7535,7 @@
      * @param <K> type of the key elements of the {@code Map}
      * @return the new {@code BooleanBinding}
      * @throws NullPointerException if the {@code ObservableMap} or {@code key} is {@code null}
+     * @since JavaFX 2.1
      */
     public static <K> BooleanBinding booleanValueAt(final ObservableMap<K, Boolean> op, final ObservableValue<? extends K> key) {
         if ((op == null) || (key == null)) {
@@ -7526,6 +7589,7 @@
      * @param <K> type of the key elements of the {@code Map}
      * @return the new {@code DoubleBinding}
      * @throws NullPointerException if the {@code ObservableMap} is {@code null}
+     * @since JavaFX 2.1
      */
     public static <K> DoubleBinding doubleValueAt(final ObservableMap<K, ? extends Number> op, final K key) {
         if (op == null) {
@@ -7579,6 +7643,7 @@
      * @param <K> type of the key elements of the {@code Map}
      * @return the new {@code DoubleBinding}
      * @throws NullPointerException if the {@code ObservableMap} or {@code key} is {@code null}
+     * @since JavaFX 2.1
      */
     public static <K> DoubleBinding doubleValueAt(final ObservableMap<K, ? extends Number> op, final ObservableValue<? extends K> key) {
         if ((op == null) || (key == null)) {
@@ -7632,6 +7697,7 @@
      * @param <K> type of the key elements of the {@code Map}
      * @return the new {@code FloatBinding}
      * @throws NullPointerException if the {@code ObservableMap} is {@code null}
+     * @since JavaFX 2.1
      */
     public static <K> FloatBinding floatValueAt(final ObservableMap<K, ? extends Number> op, final K key) {
         if (op == null) {
@@ -7685,6 +7751,7 @@
      * @param <K> type of the key elements of the {@code Map}
      * @return the new {@code FloatBinding}
      * @throws NullPointerException if the {@code ObservableMap} or {@code key} is {@code null}
+     * @since JavaFX 2.1
      */
     public static <K> FloatBinding floatValueAt(final ObservableMap<K, ? extends Number> op, final ObservableValue<? extends K> key) {
         if ((op == null) || (key == null)) {
@@ -7738,6 +7805,7 @@
      * @param <K> type of the key elements of the {@code Map}
      * @return the new {@code IntegerBinding}
      * @throws NullPointerException if the {@code ObservableMap} is {@code null}
+     * @since JavaFX 2.1
      */
     public static <K> IntegerBinding integerValueAt(final ObservableMap<K, ? extends Number> op, final K key) {
         if (op == null) {
@@ -7791,6 +7859,7 @@
      * @param <K> type of the key elements of the {@code Map}
      * @return the new {@code IntegerBinding}
      * @throws NullPointerException if the {@code ObservableMap} or {@code key} is {@code null}
+     * @since JavaFX 2.1
      */
     public static <K> IntegerBinding integerValueAt(final ObservableMap<K, ? extends Number> op, final ObservableValue<? extends K> key) {
         if ((op == null) || (key == null)) {
@@ -7844,6 +7913,7 @@
      * @param <K> type of the key elements of the {@code Map}
      * @return the new {@code LongBinding}
      * @throws NullPointerException if the {@code ObservableMap} is {@code null}
+     * @since JavaFX 2.1
      */
     public static <K> LongBinding longValueAt(final ObservableMap<K, ? extends Number> op, final K key) {
         if (op == null) {
@@ -7897,6 +7967,7 @@
      * @param <K> type of the key elements of the {@code Map}
      * @return the new {@code LongBinding}
      * @throws NullPointerException if the {@code ObservableMap} or {@code key} is {@code null}
+     * @since JavaFX 2.1
      */
     public static <K> LongBinding longValueAt(final ObservableMap<K, ? extends Number> op, final ObservableValue<? extends K> key) {
         if ((op == null) || (key == null)) {
@@ -7950,6 +8021,7 @@
      * @param <K> type of the key elements of the {@code Map}
      * @return the new {@code StringBinding}
      * @throws NullPointerException if the {@code ObservableMap} is {@code null}
+     * @since JavaFX 2.1
      */
     public static <K> StringBinding stringValueAt(final ObservableMap<K, String> op, final K key) {
         if (op == null) {
@@ -7998,6 +8070,7 @@
      * @param <K> type of the key elements of the {@code Map}
      * @return the new {@code StringBinding}
      * @throws NullPointerException if the {@code ObservableMap} or {@code key} is {@code null}
+     * @since JavaFX 2.1
      */
     public static <K> StringBinding stringValueAt(final ObservableMap<K, String> op, final ObservableValue<? extends K> key) {
         if ((op == null) || (key == null)) {
--- a/javafx-beans/src/javafx/beans/binding/BooleanBinding.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/binding/BooleanBinding.java	Tue Jun 04 09:43:48 2013 -0700
@@ -55,6 +55,7 @@
  * @see Binding
  * @see javafx.beans.binding.BooleanExpression
  * 
+ * @since JavaFX 2.0
  */
 public abstract class BooleanBinding extends BooleanExpression implements
         Binding<Boolean> {
--- a/javafx-beans/src/javafx/beans/binding/BooleanExpression.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/binding/BooleanExpression.java	Tue Jun 04 09:43:48 2013 -0700
@@ -41,6 +41,7 @@
  * A concrete sub-class of {@code BooleanExpression} has to implement the method
  * {@link javafx.beans.value.ObservableBooleanValue#get()}, which provides the
  * actual value of this expression.
+ * @since JavaFX 2.0
  */
 public abstract class BooleanExpression implements ObservableBooleanValue {
 
@@ -109,6 +110,7 @@
      *         {@code ObservableValue} if necessary
      * @throws NullPointerException
      *             if {@code value} is {@code null}
+     * @since JavaFX 8.0
      */
     public static BooleanExpression booleanExpression(final ObservableValue<Boolean> value) {
         if (value == null) {
@@ -226,6 +228,7 @@
      * {@code ObjectExpression} will be updated automatically.
      * 
      * @return the new {@code ObjectExpression}
+     * @since JavaFX 8.0
      */
     public ObjectExpression<Boolean> asObject() {
         return new ObjectBinding<Boolean>() {
--- a/javafx-beans/src/javafx/beans/binding/DoubleBinding.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/binding/DoubleBinding.java	Tue Jun 04 09:43:48 2013 -0700
@@ -107,6 +107,7 @@
  * @see javafx.beans.binding.DoubleExpression
  * 
  * 
+ * @since JavaFX 2.0
  */
 public abstract class DoubleBinding extends DoubleExpression implements
         NumberBinding {
--- a/javafx-beans/src/javafx/beans/binding/DoubleExpression.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/binding/DoubleExpression.java	Tue Jun 04 09:43:48 2013 -0700
@@ -40,6 +40,7 @@
  * A concrete sub-class of {@code DoubleExpression} has to implement the method
  * {@link javafx.beans.value.ObservableDoubleValue#get()}, which provides the
  * actual value of this expression.
+ * @since JavaFX 2.0
  */
 public abstract class DoubleExpression extends NumberExpressionBase implements
         ObservableDoubleValue {
@@ -140,6 +141,7 @@
      *         {@code ObservableValue} if necessary
      * @throws NullPointerException
      *             if {@code value} is {@code null}
+     * @since JavaFX 8.0
      */
     public static <T extends Number> DoubleExpression doubleExpression(final ObservableValue<T> value) {
         if (value == null) {
@@ -282,6 +284,7 @@
      * {@code ObjectExpression} will be updated automatically.
      * 
      * @return the new {@code ObjectExpression}
+     * @since JavaFX 8.0
      */
     public ObjectExpression<Double> asObject() {
         return new ObjectBinding<Double>() {
--- a/javafx-beans/src/javafx/beans/binding/FloatBinding.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/binding/FloatBinding.java	Tue Jun 04 09:43:48 2013 -0700
@@ -57,6 +57,7 @@
  * @see javafx.beans.binding.FloatExpression
  * 
  * 
+ * @since JavaFX 2.0
  */
 public abstract class FloatBinding extends FloatExpression implements
         NumberBinding {
--- a/javafx-beans/src/javafx/beans/binding/FloatExpression.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/binding/FloatExpression.java	Tue Jun 04 09:43:48 2013 -0700
@@ -39,6 +39,7 @@
  * A concrete sub-class of {@code FloatExpression} has to implement the method
  * {@link javafx.beans.value.ObservableFloatValue#get()}, which provides the
  * actual value of this expression.
+ * @since JavaFX 2.0
  */
 public abstract class FloatExpression extends NumberExpressionBase implements
         ObservableFloatValue {
@@ -139,6 +140,7 @@
      *         {@code ObservableValue} if necessary
      * @throws NullPointerException
      *             if {@code value} is {@code null}
+     * @since JavaFX 8.0
      */
     public static <T extends Number> FloatExpression floatExpression(final ObservableValue<T> value) {
         if (value == null) {
@@ -262,6 +264,7 @@
      * {@code ObjectExpression} will be updated automatically.
      * 
      * @return the new {@code ObjectExpression}
+     * @since JavaFX 8.0
      */
     public ObjectExpression<Float> asObject() {
         return new ObjectBinding<Float>() {
--- a/javafx-beans/src/javafx/beans/binding/IntegerBinding.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/binding/IntegerBinding.java	Tue Jun 04 09:43:48 2013 -0700
@@ -57,6 +57,7 @@
  * @see javafx.beans.binding.IntegerExpression
  * 
  * 
+ * @since JavaFX 2.0
  */
 public abstract class IntegerBinding extends IntegerExpression implements
         NumberBinding {
--- a/javafx-beans/src/javafx/beans/binding/IntegerExpression.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/binding/IntegerExpression.java	Tue Jun 04 09:43:48 2013 -0700
@@ -39,6 +39,7 @@
  * A concrete sub-class of {@code IntegerExpression} has to implement the method
  * {@link javafx.beans.value.ObservableIntegerValue#get()}, which provides the
  * actual value of this expression.
+ * @since JavaFX 2.0
  */
 public abstract class IntegerExpression extends NumberExpressionBase implements
         ObservableIntegerValue {
@@ -139,6 +140,7 @@
      *         {@code ObservableValue} if necessary
      * @throws NullPointerException
      *             if {@code value} is {@code null}
+     * @since JavaFX 8.0
      */
     public static <T extends Number> IntegerExpression integerExpression(final ObservableValue<T> value) {
         if (value == null) {
@@ -262,6 +264,7 @@
      * {@code ObjectExpression} will be updated automatically.
      * 
      * @return the new {@code ObjectExpression}
+     * @since JavaFX 8.0
      */
     public ObjectExpression<Integer> asObject() {
         return new ObjectBinding<Integer>() {
--- a/javafx-beans/src/javafx/beans/binding/ListBinding.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/binding/ListBinding.java	Tue Jun 04 09:43:48 2013 -0700
@@ -61,6 +61,7 @@
  *
  * @param <E>
  *            the type of the {@code List} element
+ * @since JavaFX 2.1
  */
 public abstract class ListBinding<E> extends ListExpression<E> implements Binding<ObservableList<E>> {
 
--- a/javafx-beans/src/javafx/beans/binding/ListExpression.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/binding/ListExpression.java	Tue Jun 04 09:43:48 2013 -0700
@@ -52,6 +52,7 @@
  * interface will behave as if they were applied to an immutable empty list.
  *
  * @param <E> the type of the {@code List} elements.
+ * @since JavaFX 2.1
  */
 public abstract class ListExpression<E> implements ObservableListValue<E> {
 
--- a/javafx-beans/src/javafx/beans/binding/LongBinding.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/binding/LongBinding.java	Tue Jun 04 09:43:48 2013 -0700
@@ -57,6 +57,7 @@
  * @see javafx.beans.binding.LongExpression
  * 
  * 
+ * @since JavaFX 2.0
  */
 public abstract class LongBinding extends LongExpression implements
         NumberBinding {
--- a/javafx-beans/src/javafx/beans/binding/LongExpression.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/binding/LongExpression.java	Tue Jun 04 09:43:48 2013 -0700
@@ -38,6 +38,7 @@
  * A concrete sub-class of {@code LongExpression} has to implement the method
  * {@link javafx.beans.value.ObservableLongValue#get()}, which provides the
  * actual value of this expression.
+ * @since JavaFX 2.0
  */
 public abstract class LongExpression extends NumberExpressionBase implements
         ObservableLongValue {
@@ -136,6 +137,7 @@
      *         {@code ObservableValue} if necessary
      * @throws NullPointerException
      *             if {@code value} is {@code null}
+     * @since JavaFX 8.0
      */
     public static <T extends Number> LongExpression longExpression(final ObservableValue<T> value) {
         if (value == null) {
@@ -259,6 +261,7 @@
      * {@code ObjectExpression} will be updated automatically.
      * 
      * @return the new {@code ObjectExpression}
+     * @since JavaFX 8.0
      */
     public ObjectExpression<Long> asObject() {
         return new ObjectBinding<Long>() {
--- a/javafx-beans/src/javafx/beans/binding/MapBinding.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/binding/MapBinding.java	Tue Jun 04 09:43:48 2013 -0700
@@ -64,6 +64,7 @@
  *            the type of the key elements
  * @param <V>
  *            the type of the value elements
+ * @since JavaFX 2.1
  */
 public abstract class MapBinding<K, V> extends MapExpression<K, V> implements Binding<ObservableMap<K, V>> {
 
--- a/javafx-beans/src/javafx/beans/binding/MapExpression.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/binding/MapExpression.java	Tue Jun 04 09:43:48 2013 -0700
@@ -53,6 +53,7 @@
  *
  * @param <K> the type of the key elements
  * @param <V> the type of the value elements
+ * @since JavaFX 2.1
  */
 public abstract class MapExpression<K, V> implements ObservableMapValue<K, V> {
 
--- a/javafx-beans/src/javafx/beans/binding/NumberBinding.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/binding/NumberBinding.java	Tue Jun 04 09:43:48 2013 -0700
@@ -32,6 +32,7 @@
  * @see javafx.beans.binding.NumberExpression
  * 
  * 
+ * @since JavaFX 2.0
  */
 public interface NumberBinding extends Binding<Number>, NumberExpression {
 }
--- a/javafx-beans/src/javafx/beans/binding/NumberExpression.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/binding/NumberExpression.java	Tue Jun 04 09:43:48 2013 -0700
@@ -60,6 +60,7 @@
  * of the developer to call the correct getter ({@link #intValue()} etc.). If
  * the internal representation does not match the type of the getter, a standard
  * cast is done.
+ * @since JavaFX 2.0
  */
 public interface NumberExpression extends ObservableNumberValue {
 
--- a/javafx-beans/src/javafx/beans/binding/NumberExpressionBase.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/binding/NumberExpressionBase.java	Tue Jun 04 09:43:48 2013 -0700
@@ -45,6 +45,7 @@
  * @see LongExpression
  * @see FloatExpression
  * @see DoubleExpression
+ * @since JavaFX 2.0
  */
 public abstract class NumberExpressionBase implements NumberExpression {
 
--- a/javafx-beans/src/javafx/beans/binding/ObjectBinding.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/binding/ObjectBinding.java	Tue Jun 04 09:43:48 2013 -0700
@@ -57,6 +57,7 @@
  *
  * @param <T>
  *            the type of the wrapped {@code Object}
+ * @since JavaFX 2.0
  */
 public abstract class ObjectBinding<T> extends ObjectExpression<T> implements
         Binding<T> {
--- a/javafx-beans/src/javafx/beans/binding/ObjectExpression.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/binding/ObjectExpression.java	Tue Jun 04 09:43:48 2013 -0700
@@ -41,6 +41,7 @@
  * A concrete sub-class of {@code ObjectExpression} has to implement the method
  * {@link javafx.beans.value.ObservableObjectValue#get()}, which provides the
  * actual value of this expression.
+ * @since JavaFX 2.0
  */
 public abstract class ObjectExpression<T> implements ObservableObjectValue<T> {
 
@@ -172,7 +173,7 @@
      * {@code StringBinding} will be updated automatically.
      *
      * @return the new {@code StringBinding}
-     * @since 8.0
+     * @since JavaFX 8.0
      */
     public StringBinding asString() {
         return (StringBinding) StringFormatter.convert(this);
@@ -190,7 +191,7 @@
      * @param format
      *            the formatting {@code String}
      * @return the new {@code StringBinding}
-     * @since 8.0
+     * @since JavaFX 8.0
      */
     public StringBinding asString(String format) {
         return (StringBinding) Bindings.format(format, this);
@@ -210,7 +211,7 @@
      * @param format
      *            the formatting {@code String}
      * @return the new {@code StringBinding}
-     * @since 8.0
+     * @since JavaFX 8.0
      */
     public StringBinding asString(Locale locale, String format) {
         return (StringBinding) Bindings.format(locale, format, this);
--- a/javafx-beans/src/javafx/beans/binding/SetBinding.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/binding/SetBinding.java	Tue Jun 04 09:43:48 2013 -0700
@@ -62,6 +62,7 @@
  *
  * @param <E>
  *            the type of the {@code Set} elements
+ * @since JavaFX 2.1
  */
 public abstract class SetBinding<E> extends SetExpression<E> implements Binding<ObservableSet<E>> {
 
--- a/javafx-beans/src/javafx/beans/binding/SetExpression.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/binding/SetExpression.java	Tue Jun 04 09:43:48 2013 -0700
@@ -54,6 +54,7 @@
  * interface will behave as if they were applied to an immutable empty set.
  *
  * @param <E> the type of the {@code Set} elements
+ * @since JavaFX 2.1
  */
 public abstract class SetExpression<E> implements ObservableSetValue<E> {
 
--- a/javafx-beans/src/javafx/beans/binding/StringBinding.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/binding/StringBinding.java	Tue Jun 04 09:43:48 2013 -0700
@@ -56,6 +56,7 @@
  * @see javafx.beans.binding.StringExpression
  * 
  * 
+ * @since JavaFX 2.0
  */
 public abstract class StringBinding extends StringExpression implements
         Binding<String> {
--- a/javafx-beans/src/javafx/beans/binding/StringExpression.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/binding/StringExpression.java	Tue Jun 04 09:43:48 2013 -0700
@@ -42,6 +42,7 @@
  * Note: all implementation of {@link javafx.beans.binding.BooleanBinding}
  * returned by the comparisons in this class consider a {@code String} that is
  * {@code null} equal to an empty {@code String}.
+ * @since JavaFX 2.0
  */
 public abstract class StringExpression implements ObservableStringValue {
 
@@ -385,6 +386,7 @@
      * the length is considered to be {@code 0}.
      *
      * @return the new {@code IntegerBinding}
+     * @since JavaFX 8.0
      */
     public IntegerBinding length() {
         return Bindings.length(this);
@@ -398,6 +400,7 @@
      * it is considered to be empty.
      *
      * @return the new {@code BooleanBinding}
+     * @since JavaFX 8.0
      */
     public BooleanBinding isEmpty() {
         return Bindings.isEmpty(this);
@@ -411,6 +414,7 @@
      * it is considered to be empty.
      *
      * @return the new {@code BooleanBinding}
+     * @since JavaFX 8.0
      */
     public BooleanBinding isNotEmpty() {
         return Bindings.isNotEmpty(this);
--- a/javafx-beans/src/javafx/beans/binding/When.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/binding/When.java	Tue Jun 04 09:43:48 2013 -0700
@@ -58,6 +58,7 @@
  * {@code cond.getValue() == false}). The values {@code value1} and
  * {@code value2} have to be of the same type. They can be constant values or
  * implementations of {@link javafx.beans.value.ObservableValue}.
+ * @since JavaFX 2.0
  */
 public class When {
     private final ObservableBooleanValue condition;
@@ -241,6 +242,7 @@
 
     /**
      * If-then-else expression returning a number.
+     * @since JavaFX 2.0
      */
     public class NumberConditionBuilder {
 
@@ -471,6 +473,7 @@
     /**
      * An intermediate class needed while assembling the ternary expression. It
      * should not be used in another context.
+     * @since JavaFX 2.0
      */
     public class BooleanConditionBuilder {
 
@@ -642,6 +645,7 @@
     /**
      * An intermediate class needed while assembling the ternary expression. It
      * should not be used in another context.
+     * @since JavaFX 2.0
      */
     public class StringConditionBuilder {
 
@@ -810,6 +814,7 @@
     /**
      * An intermediate class needed while assembling the ternary expression. It
      * should not be used in another context.
+     * @since JavaFX 2.0
      */
     public class ObjectConditionBuilder<T> {
 
--- a/javafx-beans/src/javafx/beans/property/BooleanProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/BooleanProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -54,6 +54,7 @@
  * @see ReadOnlyBooleanProperty
  * @see Property
  *
+ * @since JavaFX 2.0
  */
 public abstract class BooleanProperty extends ReadOnlyBooleanProperty implements
         Property<Boolean>, WritableBooleanValue {
@@ -123,6 +124,7 @@
      *         {@code Property} if necessary
      * @throws NullPointerException
      *             if {@code value} is {@code null}
+     * @since JavaFX 8.0
      */
     public static BooleanProperty booleanProperty(final Property<Boolean> property) {
         if (property == null) {
@@ -161,6 +163,7 @@
      * {@code ObjectProperty} will be updated automatically.
      *
      * @return the new {@code ObjectProperty}
+     * @since JavaFX 8.0
      */
     @Override
     public ObjectProperty<Boolean> asObject() {
--- a/javafx-beans/src/javafx/beans/property/BooleanPropertyBase.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/BooleanPropertyBase.java	Tue Jun 04 09:43:48 2013 -0700
@@ -43,6 +43,7 @@
  * by extending classes.
  * 
  * @see BooleanProperty
+ * @since JavaFX 2.0
  */
 public abstract class BooleanPropertyBase extends BooleanProperty {
 
--- a/javafx-beans/src/javafx/beans/property/DoubleProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/DoubleProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -58,6 +58,7 @@
  * @see ReadOnlyDoubleProperty
  * @see Property
  *
+ * @since JavaFX 2.0
  */
 public abstract class DoubleProperty extends ReadOnlyDoubleProperty implements
         Property<Number>, WritableDoubleValue {
@@ -144,6 +145,7 @@
      * @throws NullPointerException
      *             if {@code value} is {@code null}
      * @see #asObject()
+     * @since JavaFX 8.0
      */
     public static DoubleProperty doubleProperty(final Property<Double> property) {
         if (property == null) {
@@ -192,6 +194,7 @@
      * </pre></blockquote>
      *
      * @return the new {@code ObjectProperty}
+     * @since JavaFX 8.0
      */
     @Override
     public ObjectProperty<Double> asObject() {
--- a/javafx-beans/src/javafx/beans/property/DoublePropertyBase.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/DoublePropertyBase.java	Tue Jun 04 09:43:48 2013 -0700
@@ -46,6 +46,7 @@
  * @see DoubleProperty
  * 
  * 
+ * @since JavaFX 2.0
  */
 public abstract class DoublePropertyBase extends DoubleProperty {
 
--- a/javafx-beans/src/javafx/beans/property/FloatProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/FloatProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -52,6 +52,7 @@
  * @see ReadOnlyFloatProperty
  * @see Property
  *
+ * @since JavaFX 2.0
  */
 public abstract class FloatProperty extends ReadOnlyFloatProperty implements
         Property<Number>, WritableFloatValue {
@@ -139,6 +140,7 @@
      * @throws NullPointerException
      *             if {@code value} is {@code null}
      * @see #asObject()
+     * @since JavaFX 8.0
      */
      public static FloatProperty floatProperty(final Property<Float> property) {
         if (property == null) {
@@ -187,6 +189,7 @@
      * </pre></blockquote>
      *
      * @return the new {@code ObjectProperty}
+     * @since JavaFX 8.0
      */
     @Override
     public ObjectProperty<Float> asObject() {
--- a/javafx-beans/src/javafx/beans/property/FloatPropertyBase.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/FloatPropertyBase.java	Tue Jun 04 09:43:48 2013 -0700
@@ -46,6 +46,7 @@
  * @see FloatProperty
  * 
  * 
+ * @since JavaFX 2.0
  */
 public abstract class FloatPropertyBase extends FloatProperty {
 
--- a/javafx-beans/src/javafx/beans/property/IntegerProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/IntegerProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -52,6 +52,7 @@
  * @see ReadOnlyIntegerProperty
  * @see Property
  *
+ * @since JavaFX 2.0
  */
 public abstract class IntegerProperty extends ReadOnlyIntegerProperty implements
         Property<Number>, WritableIntegerValue {
@@ -139,6 +140,7 @@
      * @throws NullPointerException
      *             if {@code value} is {@code null}
      * @see #asObject()
+     * @since JavaFX 8.0
      */
      public static IntegerProperty integerProperty(final Property<Integer> property) {
         if (property == null) {
@@ -187,6 +189,7 @@
      * </pre></blockquote>
      *
      * @return the new {@code ObjectProperty}
+     * @since JavaFX 8.0
      */
     @Override
     public ObjectProperty<Integer> asObject() {
--- a/javafx-beans/src/javafx/beans/property/IntegerPropertyBase.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/IntegerPropertyBase.java	Tue Jun 04 09:43:48 2013 -0700
@@ -46,6 +46,7 @@
  * @see IntegerProperty
  * 
  * 
+ * @since JavaFX 2.0
  */
 public abstract class IntegerPropertyBase extends IntegerProperty {
 
--- a/javafx-beans/src/javafx/beans/property/ListProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/ListProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -51,6 +51,7 @@
  * @see Property
  *
  * @param <E> the type of the {@code List} elements
+ * @since JavaFX 2.1
  */
 public abstract class ListProperty<E> extends ReadOnlyListProperty<E> implements
         Property<ObservableList<E>>, WritableListValue<E> {
--- a/javafx-beans/src/javafx/beans/property/ListPropertyBase.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/ListPropertyBase.java	Tue Jun 04 09:43:48 2013 -0700
@@ -45,6 +45,7 @@
  * @see ListProperty
  *
  * @param <E> the type of the {@code List} elements
+ * @since JavaFX 2.1
  */
 public abstract class ListPropertyBase<E> extends ListProperty<E> {
 
--- a/javafx-beans/src/javafx/beans/property/LongProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/LongProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -51,6 +51,7 @@
  * @see ReadOnlyLongProperty
  * @see Property
  *
+ * @since JavaFX 2.0
  */
 public abstract class LongProperty extends ReadOnlyLongProperty implements
         Property<Number>, WritableLongValue {
@@ -137,6 +138,7 @@
      * @throws NullPointerException
      *             if {@code value} is {@code null}
      * @see #asObject()
+     * @since JavaFX 8.0
      */
      public static LongProperty longProperty(final Property<Long> property) {
         if (property == null) {
@@ -185,6 +187,7 @@
      * </pre></blockquote>
      *
      * @return the new {@code ObjectProperty}
+     * @since JavaFX 8.0
      */
     @Override
     public ObjectProperty<Long> asObject() {
--- a/javafx-beans/src/javafx/beans/property/LongPropertyBase.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/LongPropertyBase.java	Tue Jun 04 09:43:48 2013 -0700
@@ -46,6 +46,7 @@
  * @see LongProperty
  * 
  * 
+ * @since JavaFX 2.0
  */
 public abstract class LongPropertyBase extends LongProperty {
 
--- a/javafx-beans/src/javafx/beans/property/MapProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/MapProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -52,6 +52,7 @@
  *
  * @param <K> the type of the key elements of the {@code Map}
  * @param <V> the type of the value elements of the {@code Map}
+ * @since JavaFX 2.1
  */
 public abstract class MapProperty<K, V> extends ReadOnlyMapProperty<K, V> implements
         Property<ObservableMap<K, V>>, WritableMapValue<K, V> {
--- a/javafx-beans/src/javafx/beans/property/MapPropertyBase.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/MapPropertyBase.java	Tue Jun 04 09:43:48 2013 -0700
@@ -45,6 +45,7 @@
  *
  * @param <K> the type of the key elements of the {@code Map}
  * @param <V> the type of the value elements of the {@code Map}
+ * @since JavaFX 2.1
  */
 public abstract class MapPropertyBase<K, V> extends MapProperty<K, V> {
 
--- a/javafx-beans/src/javafx/beans/property/ObjectProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/ObjectProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -56,6 +56,7 @@
  *
  * @param <T>
  *            the type of the wrapped {@code Object}
+ * @since JavaFX 2.0
  */
 public abstract class ObjectProperty<T> extends ReadOnlyObjectProperty<T>
         implements Property<T>, WritableObjectValue<T> {
--- a/javafx-beans/src/javafx/beans/property/ObjectPropertyBase.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/ObjectPropertyBase.java	Tue Jun 04 09:43:48 2013 -0700
@@ -45,6 +45,7 @@
  * 
  * @param <T>
  *            the type of the wrapped value
+ * @since JavaFX 2.0
  */
 public abstract class ObjectPropertyBase<T> extends ObjectProperty<T> {
 
--- a/javafx-beans/src/javafx/beans/property/Property.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/Property.java	Tue Jun 04 09:43:48 2013 -0700
@@ -35,6 +35,7 @@
  * 
  * @param <T>
  *            the type of the wrapped value
+ * @since JavaFX 2.0
  */
 public interface Property<T> extends ReadOnlyProperty<T>, WritableValue<T> {
 
--- a/javafx-beans/src/javafx/beans/property/ReadOnlyBooleanProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/ReadOnlyBooleanProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -37,6 +37,7 @@
  * @see javafx.beans.binding.BooleanExpression
  * @see ReadOnlyProperty
  * 
+ * @since JavaFX 2.0
  */
 public abstract class ReadOnlyBooleanProperty extends BooleanExpression
         implements ReadOnlyProperty<Boolean> {
@@ -83,6 +84,7 @@
      *         {@code ReadOnlyProperty} if necessary
      * @throws NullPointerException
      *             if {@code value} is {@code null}
+     * @since JavaFX 8.0
      */
     public static ReadOnlyBooleanProperty readOnlyBooleanProperty(final ReadOnlyProperty<Boolean> property) {
         if (property == null) {
@@ -132,6 +134,7 @@
      * {@code ReadOnlyObjectProperty} will be updated automatically.
      * 
      * @return the new {@code ReadOnlyObjectProperty}
+     * @since JavaFX 8.0
      */
     @Override
     public ReadOnlyObjectProperty<Boolean> asObject() {
--- a/javafx-beans/src/javafx/beans/property/ReadOnlyBooleanPropertyBase.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/ReadOnlyBooleanPropertyBase.java	Tue Jun 04 09:43:48 2013 -0700
@@ -35,6 +35,7 @@
  * implementation to attach listener.
  *
  * @see ReadOnlyBooleanProperty
+ * @since JavaFX 2.0
  */
 public abstract class ReadOnlyBooleanPropertyBase extends ReadOnlyBooleanProperty {
     
--- a/javafx-beans/src/javafx/beans/property/ReadOnlyBooleanWrapper.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/ReadOnlyBooleanWrapper.java	Tue Jun 04 09:43:48 2013 -0700
@@ -36,6 +36,7 @@
  * and can be passed to external users. The other property is read- and
  * writable and should be used internally only.
  * 
+ * @since JavaFX 2.0
  */
 public class ReadOnlyBooleanWrapper extends SimpleBooleanProperty {
 
--- a/javafx-beans/src/javafx/beans/property/ReadOnlyDoubleProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/ReadOnlyDoubleProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -37,6 +37,7 @@
  * @see javafx.beans.binding.DoubleExpression
  * @see ReadOnlyProperty
  * 
+ * @since JavaFX 2.0
  */
 public abstract class ReadOnlyDoubleProperty extends DoubleExpression implements
         ReadOnlyProperty<Number> {
@@ -83,6 +84,7 @@
      *         {@code ReadOnlyProperty} if necessary
      * @throws NullPointerException
      *             if {@code value} is {@code null}
+     * @since JavaFX 8.0
      */
     public static <T extends Number> ReadOnlyDoubleProperty readOnlyDoubleProperty(final ReadOnlyProperty<T> property) {
         if (property == null) {
@@ -132,6 +134,7 @@
      * {@code ReadOnlyObjectProperty} will be updated automatically.
      * 
      * @return the new {@code ReadOnlyObjectProperty}
+     * @since JavaFX 8.0
      */
     @Override
     public ReadOnlyObjectProperty<Double> asObject() {
--- a/javafx-beans/src/javafx/beans/property/ReadOnlyDoublePropertyBase.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/ReadOnlyDoublePropertyBase.java	Tue Jun 04 09:43:48 2013 -0700
@@ -35,6 +35,7 @@
  * implementation to attach listener.
  *
  * @see ReadOnlyDoubleProperty
+ * @since JavaFX 2.0
  */
 public abstract class ReadOnlyDoublePropertyBase extends ReadOnlyDoubleProperty {
     
--- a/javafx-beans/src/javafx/beans/property/ReadOnlyDoubleWrapper.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/ReadOnlyDoubleWrapper.java	Tue Jun 04 09:43:48 2013 -0700
@@ -36,6 +36,7 @@
  * and can be passed to external users. The other property is read- and
  * writable and should be used internally only.
  * 
+ * @since JavaFX 2.0
  */
 public class ReadOnlyDoubleWrapper extends SimpleDoubleProperty {
 
--- a/javafx-beans/src/javafx/beans/property/ReadOnlyFloatProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/ReadOnlyFloatProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -37,6 +37,7 @@
  * @see javafx.beans.binding.FloatExpression
  * @see ReadOnlyProperty
  * 
+ * @since JavaFX 2.0
  */
 public abstract class ReadOnlyFloatProperty extends FloatExpression implements
         ReadOnlyProperty<Number> {
@@ -83,6 +84,7 @@
      *         {@code ReadOnlyProperty} if necessary
      * @throws NullPointerException
      *             if {@code value} is {@code null}
+     * @since JavaFX 8.0
      */
     public static <T extends Number> ReadOnlyFloatProperty readOnlyFloatProperty(final ReadOnlyProperty<T> property) {
         if (property == null) {
@@ -132,6 +134,7 @@
      * {@code ReadOnlyObjectProperty} will be updated automatically.
      * 
      * @return the new {@code ReadOnlyObjectProperty}
+     * @since JavaFX 8.0
      */
     @Override
     public ReadOnlyObjectProperty<Float> asObject() {
--- a/javafx-beans/src/javafx/beans/property/ReadOnlyFloatPropertyBase.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/ReadOnlyFloatPropertyBase.java	Tue Jun 04 09:43:48 2013 -0700
@@ -35,6 +35,7 @@
  * implementation to attach listener.
  *
  * @see ReadOnlyFloatProperty
+ * @since JavaFX 2.0
  */
 public abstract class ReadOnlyFloatPropertyBase extends ReadOnlyFloatProperty {
     
--- a/javafx-beans/src/javafx/beans/property/ReadOnlyFloatWrapper.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/ReadOnlyFloatWrapper.java	Tue Jun 04 09:43:48 2013 -0700
@@ -36,6 +36,7 @@
  * and can be passed to external users. The other property is read- and
  * writable and should be used internally only.
  * 
+ * @since JavaFX 2.0
  */
 public class ReadOnlyFloatWrapper extends SimpleFloatProperty {
 
--- a/javafx-beans/src/javafx/beans/property/ReadOnlyIntegerProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/ReadOnlyIntegerProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -37,6 +37,7 @@
  * @see javafx.beans.binding.IntegerExpression
  * @see ReadOnlyProperty
  * 
+ * @since JavaFX 2.0
  */
 public abstract class ReadOnlyIntegerProperty extends IntegerExpression
         implements ReadOnlyProperty<Number> {
@@ -84,6 +85,7 @@
      *         {@code ReadOnlyProperty} if necessary
      * @throws NullPointerException
      *             if {@code value} is {@code null}
+     * @since JavaFX 8.0
      */
     public static <T extends Number> ReadOnlyIntegerProperty readOnlyIntegerProperty(final ReadOnlyProperty<T> property) {
         if (property == null) {
@@ -133,6 +135,7 @@
      * {@code ReadOnlyObjectProperty} will be updated automatically.
      * 
      * @return the new {@code ReadOnlyObjectProperty}
+     * @since JavaFX 8.0
      */
     @Override
     public ReadOnlyObjectProperty<Integer> asObject() {
--- a/javafx-beans/src/javafx/beans/property/ReadOnlyIntegerPropertyBase.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/ReadOnlyIntegerPropertyBase.java	Tue Jun 04 09:43:48 2013 -0700
@@ -35,6 +35,7 @@
  * implementation to attach listener.
  *
  * @see ReadOnlyIntegerProperty
+ * @since JavaFX 2.0
  */
 public abstract class ReadOnlyIntegerPropertyBase extends ReadOnlyIntegerProperty {
     
--- a/javafx-beans/src/javafx/beans/property/ReadOnlyIntegerWrapper.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/ReadOnlyIntegerWrapper.java	Tue Jun 04 09:43:48 2013 -0700
@@ -36,6 +36,7 @@
  * and can be passed to external users. The other property is read- and
  * writable and should be used internally only.
  * 
+ * @since JavaFX 2.0
  */
 public class ReadOnlyIntegerWrapper extends SimpleIntegerProperty {
 
--- a/javafx-beans/src/javafx/beans/property/ReadOnlyListProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/ReadOnlyListProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -40,6 +40,7 @@
  * @see ReadOnlyProperty
  *
  * @param <E> the type of the {@code List} elements
+ * @since JavaFX 2.1
  */
 public abstract class ReadOnlyListProperty<E> extends ListExpression<E>
         implements ReadOnlyProperty<ObservableList<E>>  {
--- a/javafx-beans/src/javafx/beans/property/ReadOnlyListPropertyBase.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/ReadOnlyListPropertyBase.java	Tue Jun 04 09:43:48 2013 -0700
@@ -36,6 +36,7 @@
  * This class provides a default implementation to attach listener.
  *
  * @see ReadOnlyListProperty
+ * @since JavaFX 2.1
  */
 public abstract class ReadOnlyListPropertyBase<E> extends ReadOnlyListProperty<E> {
 
--- a/javafx-beans/src/javafx/beans/property/ReadOnlyListWrapper.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/ReadOnlyListWrapper.java	Tue Jun 04 09:43:48 2013 -0700
@@ -39,6 +39,7 @@
  * and can be passed to external users. The other property is read- and
  * writable and should be used internally only.
  *
+ * @since JavaFX 2.1
  */
 public class ReadOnlyListWrapper<E> extends SimpleListProperty<E> {
 
--- a/javafx-beans/src/javafx/beans/property/ReadOnlyLongProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/ReadOnlyLongProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -37,6 +37,7 @@
  * @see javafx.beans.binding.LongExpression
  * @see ReadOnlyProperty
  * 
+ * @since JavaFX 2.0
  */
 public abstract class ReadOnlyLongProperty extends LongExpression implements
         ReadOnlyProperty<Number> {
@@ -82,6 +83,7 @@
      *         {@code ReadOnlyProperty} if necessary
      * @throws NullPointerException
      *             if {@code value} is {@code null}
+     * @since JavaFX 8.0
      */
     public static <T extends Number> ReadOnlyLongProperty readOnlyLongProperty(final ReadOnlyProperty<T> property) {
         if (property == null) {
@@ -131,6 +133,7 @@
      * {@code ReadOnlyObjectProperty} will be updated automatically.
      * 
      * @return the new {@code ReadOnlyObjectProperty}
+     * @since JavaFX 8.0
      */
     @Override
     public ReadOnlyObjectProperty<Long> asObject() {
--- a/javafx-beans/src/javafx/beans/property/ReadOnlyLongPropertyBase.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/ReadOnlyLongPropertyBase.java	Tue Jun 04 09:43:48 2013 -0700
@@ -35,6 +35,7 @@
  * implementation to attach listener.
  *
  * @see ReadOnlyLongProperty
+ * @since JavaFX 2.0
  */
 public abstract class ReadOnlyLongPropertyBase extends ReadOnlyLongProperty {
     
--- a/javafx-beans/src/javafx/beans/property/ReadOnlyLongWrapper.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/ReadOnlyLongWrapper.java	Tue Jun 04 09:43:48 2013 -0700
@@ -36,6 +36,7 @@
  * and can be passed to external users. The other property is read- and
  * writable and should be used internally only.
  * 
+ * @since JavaFX 2.0
  */
 public class ReadOnlyLongWrapper extends SimpleLongProperty {
 
--- a/javafx-beans/src/javafx/beans/property/ReadOnlyMapProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/ReadOnlyMapProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -42,6 +42,7 @@
  *
  * @param <K> the type of the key elements of the map
  * @param <V> the type of the value elements of the map
+ * @since JavaFX 2.1
  */
 public abstract class ReadOnlyMapProperty<K, V> extends MapExpression<K, V> implements ReadOnlyProperty<ObservableMap<K, V>>  {
 
--- a/javafx-beans/src/javafx/beans/property/ReadOnlyMapPropertyBase.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/ReadOnlyMapPropertyBase.java	Tue Jun 04 09:43:48 2013 -0700
@@ -36,6 +36,7 @@
  * This class provides a default implementation to attach listener.
  *
  * @see ReadOnlyMapProperty
+ * @since JavaFX 2.1
  */
 public abstract class ReadOnlyMapPropertyBase<K, V> extends ReadOnlyMapProperty<K, V> {
 
--- a/javafx-beans/src/javafx/beans/property/ReadOnlyMapWrapper.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/ReadOnlyMapWrapper.java	Tue Jun 04 09:43:48 2013 -0700
@@ -39,6 +39,7 @@
  * and can be passed to external users. The other property is read- and
  * writable and should be used internally only.
  *
+ * @since JavaFX 2.1
  */
 public class ReadOnlyMapWrapper<K, V> extends SimpleMapProperty<K, V> {
 
--- a/javafx-beans/src/javafx/beans/property/ReadOnlyObjectProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/ReadOnlyObjectProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -44,6 +44,7 @@
  *
  * @param <T>
  *            the type of the wrapped {@code Object}
+ * @since JavaFX 2.0
  */
 public abstract class ReadOnlyObjectProperty<T> extends ObjectExpression<T>
         implements ReadOnlyProperty<T> {
--- a/javafx-beans/src/javafx/beans/property/ReadOnlyObjectPropertyBase.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/ReadOnlyObjectPropertyBase.java	Tue Jun 04 09:43:48 2013 -0700
@@ -37,6 +37,7 @@
  * @see ReadOnlyObjectProperty
  *
  * @param <T> the type of the wrapped {@code Object}
+ * @since JavaFX 2.0
  */
 public abstract class ReadOnlyObjectPropertyBase<T> extends ReadOnlyObjectProperty<T> {
     
--- a/javafx-beans/src/javafx/beans/property/ReadOnlyObjectWrapper.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/ReadOnlyObjectWrapper.java	Tue Jun 04 09:43:48 2013 -0700
@@ -36,6 +36,7 @@
  * and can be passed to external users. The other property is read- and
  * writable and should be used internally only.
  * 
+ * @since JavaFX 2.0
  */
 public class ReadOnlyObjectWrapper<T> extends SimpleObjectProperty<T> {
 
--- a/javafx-beans/src/javafx/beans/property/ReadOnlyProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/ReadOnlyProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -34,6 +34,7 @@
  * 
  * @param <T>
  *            the type of the wrapped value
+ * @since JavaFX 2.0
  */
 public interface ReadOnlyProperty<T> extends ObservableValue<T> {
 
--- a/javafx-beans/src/javafx/beans/property/ReadOnlySetProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/ReadOnlySetProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -42,6 +42,7 @@
  * @see ReadOnlyProperty
  *
  * @param <E> the type of the {@code Set} elements
+ * @since JavaFX 2.1
  */
 public abstract class ReadOnlySetProperty<E> extends SetExpression<E> implements ReadOnlyProperty<ObservableSet<E>>  {
 
--- a/javafx-beans/src/javafx/beans/property/ReadOnlySetPropertyBase.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/ReadOnlySetPropertyBase.java	Tue Jun 04 09:43:48 2013 -0700
@@ -38,6 +38,7 @@
  * @see ReadOnlySetProperty
  *
  * @param <E> the type of the {@code Set} elements
+ * @since JavaFX 2.1
  */
 public abstract class ReadOnlySetPropertyBase<E> extends ReadOnlySetProperty<E> {
 
--- a/javafx-beans/src/javafx/beans/property/ReadOnlySetWrapper.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/ReadOnlySetWrapper.java	Tue Jun 04 09:43:48 2013 -0700
@@ -39,6 +39,7 @@
  * and can be passed to external users. The other property is read- and
  * writable and should be used internally only.
  *
+ * @since JavaFX 2.1
  */
 public class ReadOnlySetWrapper<E> extends SimpleSetProperty<E> {
 
--- a/javafx-beans/src/javafx/beans/property/ReadOnlyStringProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/ReadOnlyStringProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -34,6 +34,7 @@
  * @see javafx.beans.binding.StringExpression
  * @see ReadOnlyProperty
  * 
+ * @since JavaFX 2.0
  */
 public abstract class ReadOnlyStringProperty extends StringExpression implements
         ReadOnlyProperty<String> {
--- a/javafx-beans/src/javafx/beans/property/ReadOnlyStringPropertyBase.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/ReadOnlyStringPropertyBase.java	Tue Jun 04 09:43:48 2013 -0700
@@ -35,6 +35,7 @@
  * implementation to attach listener.
  *
  * @see ReadOnlyStringProperty
+ * @since JavaFX 2.0
  */
 public abstract class ReadOnlyStringPropertyBase extends ReadOnlyStringProperty {
     
--- a/javafx-beans/src/javafx/beans/property/ReadOnlyStringWrapper.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/ReadOnlyStringWrapper.java	Tue Jun 04 09:43:48 2013 -0700
@@ -36,6 +36,7 @@
  * and can be passed to external users. The other property is read- and
  * writable and should be used internally only.
  * 
+ * @since JavaFX 2.0
  */
 public class ReadOnlyStringWrapper extends SimpleStringProperty {
 
--- a/javafx-beans/src/javafx/beans/property/SetProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/SetProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -53,6 +53,7 @@
  * @see Property
  *
  * @param <E> the type of the {@code Set} elements
+ * @since JavaFX 2.1
  */
 public abstract class SetProperty<E> extends ReadOnlySetProperty<E> implements
         Property<ObservableSet<E>>, WritableSetValue<E> {
--- a/javafx-beans/src/javafx/beans/property/SetPropertyBase.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/SetPropertyBase.java	Tue Jun 04 09:43:48 2013 -0700
@@ -45,6 +45,7 @@
  * @see SetProperty
  *
  * @param <E> the type of the {@code Set} elements
+ * @since JavaFX 2.1
  */
 public abstract class SetPropertyBase<E> extends SetProperty<E> {
 
--- a/javafx-beans/src/javafx/beans/property/SimpleBooleanProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/SimpleBooleanProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -31,6 +31,7 @@
  * 
  * @see BooleanPropertyBase
  * 
+ * @since JavaFX 2.0
  */
 public class SimpleBooleanProperty extends BooleanPropertyBase {
 
--- a/javafx-beans/src/javafx/beans/property/SimpleDoubleProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/SimpleDoubleProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -31,6 +31,7 @@
  * 
  * @see DoublePropertyBase
  * 
+ * @since JavaFX 2.0
  */
 public class SimpleDoubleProperty extends DoublePropertyBase {
 
--- a/javafx-beans/src/javafx/beans/property/SimpleFloatProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/SimpleFloatProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -31,6 +31,7 @@
  * 
  * @see FloatPropertyBase
  * 
+ * @since JavaFX 2.0
  */
 public class SimpleFloatProperty extends FloatPropertyBase {
 
--- a/javafx-beans/src/javafx/beans/property/SimpleIntegerProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/SimpleIntegerProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -31,6 +31,7 @@
  * 
  * @see IntegerPropertyBase
  * 
+ * @since JavaFX 2.0
  */
 public class SimpleIntegerProperty extends IntegerPropertyBase {
 
--- a/javafx-beans/src/javafx/beans/property/SimpleListProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/SimpleListProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -34,6 +34,7 @@
  * @see ListPropertyBase
  *
  * @param <E> the type of the {@code List} elements
+ * @since JavaFX 2.1
  */
 public class SimpleListProperty<E> extends ListPropertyBase<E> {
 
--- a/javafx-beans/src/javafx/beans/property/SimpleLongProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/SimpleLongProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -31,6 +31,7 @@
  * 
  * @see LongPropertyBase
  * 
+ * @since JavaFX 2.0
  */
 public class SimpleLongProperty extends LongPropertyBase {
 
--- a/javafx-beans/src/javafx/beans/property/SimpleMapProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/SimpleMapProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -36,6 +36,7 @@
  *
  * @param <K> the type of the key elements of the {@code Map}
  * @param <V> the type of the value elements of the {@code Map}
+ * @since JavaFX 2.1
  */
 public class SimpleMapProperty<K, V> extends MapPropertyBase<K, V> {
 
--- a/javafx-beans/src/javafx/beans/property/SimpleObjectProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/SimpleObjectProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -34,6 +34,7 @@
  * 
  * @param <T>
  *            the type of the wrapped {@code Object}
+ * @since JavaFX 2.0
  */
 public class SimpleObjectProperty<T> extends ObjectPropertyBase<T> {
 
--- a/javafx-beans/src/javafx/beans/property/SimpleSetProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/SimpleSetProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -34,6 +34,7 @@
  * @see SetPropertyBase
  *
  * @param <E> the type of the {@code Set} elements
+ * @since JavaFX 2.1
  */
 public class SimpleSetProperty<E> extends SetPropertyBase<E> {
 
--- a/javafx-beans/src/javafx/beans/property/SimpleStringProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/SimpleStringProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -31,6 +31,7 @@
  * 
  * @see StringPropertyBase
  * 
+ * @since JavaFX 2.0
  */
 public class SimpleStringProperty extends StringPropertyBase {
 
--- a/javafx-beans/src/javafx/beans/property/StringProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/StringProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -52,6 +52,7 @@
  * @see ReadOnlyStringProperty
  * @see Property
  * 
+ * @since JavaFX 2.0
  */
 public abstract class StringProperty extends ReadOnlyStringProperty implements
         Property<String>, WritableStringValue {
@@ -85,6 +86,7 @@
      *             if {@code other} or {@code format} is {@code null}
      * @throws IllegalArgumentException
      *             if {@code other} is {@code this}
+     * @since JavaFX 2.1
      */
     public void bindBidirectional(Property<?> other, Format format) {
         Bindings.bindBidirectional(this, other, format);
@@ -103,6 +105,7 @@
      *             if {@code other} or {@code converter} is {@code null}
      * @throws IllegalArgumentException
      *             if {@code other} is {@code this}
+     * @since JavaFX 2.1
      */
     public <T> void bindBidirectional(Property<T> other, StringConverter<T> converter) {
         Bindings.bindBidirectional(this, other, converter);
@@ -129,6 +132,7 @@
      *             if {@code other} is {@code null}
      * @throws IllegalArgumentException
      *             if {@code other} is {@code this}
+     * @since JavaFX 2.1
      */
     public void unbindBidirectional(Object other) {
         Bindings.unbindBidirectional(this, other);
--- a/javafx-beans/src/javafx/beans/property/StringPropertyBase.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/StringPropertyBase.java	Tue Jun 04 09:43:48 2013 -0700
@@ -43,6 +43,7 @@
  * @see StringProperty
  * 
  * 
+ * @since JavaFX 2.0
  */
 public abstract class StringPropertyBase extends StringProperty {
 
--- a/javafx-beans/src/javafx/beans/property/adapter/JavaBeanBooleanProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/adapter/JavaBeanBooleanProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -61,6 +61,7 @@
  * 
  * @see javafx.beans.property.BooleanProperty
  * @see JavaBeanBooleanPropertyBuilder
+ * @since JavaFX 2.1
  */
 public final class JavaBeanBooleanProperty extends BooleanProperty implements JavaBeanProperty<Boolean> {
 
--- a/javafx-beans/src/javafx/beans/property/adapter/JavaBeanBooleanPropertyBuilder.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/adapter/JavaBeanBooleanPropertyBuilder.java	Tue Jun 04 09:43:48 2013 -0700
@@ -55,6 +55,7 @@
  * calling {@link #build()}.
  * 
  * @see JavaBeanBooleanProperty
+ * @since JavaFX 2.1
  */
 public final class JavaBeanBooleanPropertyBuilder {
 
--- a/javafx-beans/src/javafx/beans/property/adapter/JavaBeanDoubleProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/adapter/JavaBeanDoubleProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -61,6 +61,7 @@
  * 
  * @see javafx.beans.property.DoubleProperty
  * @see JavaBeanDoublePropertyBuilder
+ * @since JavaFX 2.1
  */
 public final class JavaBeanDoubleProperty extends DoubleProperty implements JavaBeanProperty<Number> {
 
--- a/javafx-beans/src/javafx/beans/property/adapter/JavaBeanDoublePropertyBuilder.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/adapter/JavaBeanDoublePropertyBuilder.java	Tue Jun 04 09:43:48 2013 -0700
@@ -55,6 +55,7 @@
  * calling {@link #build()}.
  * 
  * @see JavaBeanDoubleProperty
+ * @since JavaFX 2.1
  */
 public final class JavaBeanDoublePropertyBuilder {
 
--- a/javafx-beans/src/javafx/beans/property/adapter/JavaBeanFloatProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/adapter/JavaBeanFloatProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -61,6 +61,7 @@
  * 
  * @see javafx.beans.property.FloatProperty
  * @see JavaBeanFloatPropertyBuilder
+ * @since JavaFX 2.1
  */
 public final class JavaBeanFloatProperty extends FloatProperty implements JavaBeanProperty<Number> {
 
--- a/javafx-beans/src/javafx/beans/property/adapter/JavaBeanFloatPropertyBuilder.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/adapter/JavaBeanFloatPropertyBuilder.java	Tue Jun 04 09:43:48 2013 -0700
@@ -55,6 +55,7 @@
  * calling {@link #build()}.
  * 
  * @see JavaBeanFloatProperty
+ * @since JavaFX 2.1
  */
 public final class JavaBeanFloatPropertyBuilder {
 
--- a/javafx-beans/src/javafx/beans/property/adapter/JavaBeanIntegerProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/adapter/JavaBeanIntegerProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -61,6 +61,7 @@
  * 
  * @see javafx.beans.property.IntegerProperty
  * @see JavaBeanIntegerPropertyBuilder
+ * @since JavaFX 2.1
  */
 public final class JavaBeanIntegerProperty extends IntegerProperty implements JavaBeanProperty<Number> {
 
--- a/javafx-beans/src/javafx/beans/property/adapter/JavaBeanIntegerPropertyBuilder.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/adapter/JavaBeanIntegerPropertyBuilder.java	Tue Jun 04 09:43:48 2013 -0700
@@ -55,6 +55,7 @@
  * calling {@link #build()}.
  * 
  * @see JavaBeanIntegerProperty
+ * @since JavaFX 2.1
  */
 public final class JavaBeanIntegerPropertyBuilder {
 
--- a/javafx-beans/src/javafx/beans/property/adapter/JavaBeanLongProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/adapter/JavaBeanLongProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -61,6 +61,7 @@
  * 
  * @see javafx.beans.property.LongProperty
  * @see JavaBeanLongPropertyBuilder
+ * @since JavaFX 2.1
  */
 public final class JavaBeanLongProperty extends LongProperty implements JavaBeanProperty<Number> {
 
--- a/javafx-beans/src/javafx/beans/property/adapter/JavaBeanLongPropertyBuilder.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/adapter/JavaBeanLongPropertyBuilder.java	Tue Jun 04 09:43:48 2013 -0700
@@ -55,6 +55,7 @@
  * calling {@link #build()}.
  * 
  * @see JavaBeanLongProperty
+ * @since JavaFX 2.1
  */
 public final class JavaBeanLongPropertyBuilder {
 
--- a/javafx-beans/src/javafx/beans/property/adapter/JavaBeanObjectProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/adapter/JavaBeanObjectProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -63,6 +63,7 @@
  * @see JavaBeanObjectPropertyBuilder
  * 
  * @param T type of the wrapped {@code Object}
+ * @since JavaFX 2.1
  */
 public final class JavaBeanObjectProperty<T> extends ObjectProperty<T> implements JavaBeanProperty<T> {
 
--- a/javafx-beans/src/javafx/beans/property/adapter/JavaBeanObjectPropertyBuilder.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/adapter/JavaBeanObjectPropertyBuilder.java	Tue Jun 04 09:43:48 2013 -0700
@@ -57,6 +57,7 @@
  * @see JavaBeanObjectProperty
  * 
  * @param T the type of the wrapped {@code Object}
+ * @since JavaFX 2.1
  */
 public final class JavaBeanObjectPropertyBuilder<T> {
 
--- a/javafx-beans/src/javafx/beans/property/adapter/JavaBeanProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/adapter/JavaBeanProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -32,6 +32,7 @@
  * writable Java Bean properties and JavaFX properties.
  * 
  * @param T The type of the wrapped property
+ * @since JavaFX 2.1
  */
 public interface JavaBeanProperty<T> extends ReadOnlyJavaBeanProperty<T>, Property<T> {
 }
--- a/javafx-beans/src/javafx/beans/property/adapter/JavaBeanStringProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/adapter/JavaBeanStringProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -61,6 +61,7 @@
  * 
  * @see javafx.beans.property.StringProperty
  * @see JavaBeanStringPropertyBuilder
+ * @since JavaFX 2.1
  */
 public final class JavaBeanStringProperty extends StringProperty implements JavaBeanProperty<String> {
 
--- a/javafx-beans/src/javafx/beans/property/adapter/JavaBeanStringPropertyBuilder.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/adapter/JavaBeanStringPropertyBuilder.java	Tue Jun 04 09:43:48 2013 -0700
@@ -55,6 +55,7 @@
  * calling {@link #build()}.
  * 
  * @see JavaBeanStringProperty
+ * @since JavaFX 2.1
  */
 public final class JavaBeanStringPropertyBuilder {
 
--- a/javafx-beans/src/javafx/beans/property/adapter/ReadOnlyJavaBeanBooleanProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/adapter/ReadOnlyJavaBeanBooleanProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -53,6 +53,7 @@
  * 
  * @see javafx.beans.property.ReadOnlyBooleanProperty
  * @see ReadOnlyJavaBeanBooleanPropertyBuilder
+ * @since JavaFX 2.1
  */
 public final class ReadOnlyJavaBeanBooleanProperty extends ReadOnlyBooleanPropertyBase implements ReadOnlyJavaBeanProperty<Boolean> {
 
--- a/javafx-beans/src/javafx/beans/property/adapter/ReadOnlyJavaBeanBooleanPropertyBuilder.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/adapter/ReadOnlyJavaBeanBooleanPropertyBuilder.java	Tue Jun 04 09:43:48 2013 -0700
@@ -54,6 +54,7 @@
  * calling {@link #build()}.
  * 
  * @see ReadOnlyJavaBeanBooleanProperty
+ * @since JavaFX 2.1
  */
 public final class ReadOnlyJavaBeanBooleanPropertyBuilder {
 
--- a/javafx-beans/src/javafx/beans/property/adapter/ReadOnlyJavaBeanDoubleProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/adapter/ReadOnlyJavaBeanDoubleProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -53,6 +53,7 @@
  * 
  * @see javafx.beans.property.ReadOnlyDoubleProperty
  * @see ReadOnlyJavaBeanDoublePropertyBuilder
+ * @since JavaFX 2.1
  */
 public final class ReadOnlyJavaBeanDoubleProperty extends ReadOnlyDoublePropertyBase implements ReadOnlyJavaBeanProperty<Number> {
 
--- a/javafx-beans/src/javafx/beans/property/adapter/ReadOnlyJavaBeanDoublePropertyBuilder.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/adapter/ReadOnlyJavaBeanDoublePropertyBuilder.java	Tue Jun 04 09:43:48 2013 -0700
@@ -54,6 +54,7 @@
  * calling {@link #build()}.
  * 
  * @see ReadOnlyJavaBeanDoubleProperty
+ * @since JavaFX 2.1
  */
 public final class ReadOnlyJavaBeanDoublePropertyBuilder {
 
--- a/javafx-beans/src/javafx/beans/property/adapter/ReadOnlyJavaBeanFloatProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/adapter/ReadOnlyJavaBeanFloatProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -53,6 +53,7 @@
  * 
  * @see javafx.beans.property.ReadOnlyFloatProperty
  * @see ReadOnlyJavaBeanFloatPropertyBuilder
+ * @since JavaFX 2.1
  */
 public final class ReadOnlyJavaBeanFloatProperty extends ReadOnlyFloatPropertyBase implements ReadOnlyJavaBeanProperty<Number> {
 
--- a/javafx-beans/src/javafx/beans/property/adapter/ReadOnlyJavaBeanFloatPropertyBuilder.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/adapter/ReadOnlyJavaBeanFloatPropertyBuilder.java	Tue Jun 04 09:43:48 2013 -0700
@@ -54,6 +54,7 @@
  * calling {@link #build()}.
  * 
  * @see ReadOnlyJavaBeanFloatProperty
+ * @since JavaFX 2.1
  */
 public final class ReadOnlyJavaBeanFloatPropertyBuilder {
 
--- a/javafx-beans/src/javafx/beans/property/adapter/ReadOnlyJavaBeanIntegerProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/adapter/ReadOnlyJavaBeanIntegerProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -53,6 +53,7 @@
  * 
  * @see javafx.beans.property.ReadOnlyIntegerProperty
  * @see ReadOnlyJavaBeanIntegerPropertyBuilder
+ * @since JavaFX 2.1
  */
 public final class ReadOnlyJavaBeanIntegerProperty extends ReadOnlyIntegerPropertyBase implements ReadOnlyJavaBeanProperty<Number> {
 
--- a/javafx-beans/src/javafx/beans/property/adapter/ReadOnlyJavaBeanIntegerPropertyBuilder.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/adapter/ReadOnlyJavaBeanIntegerPropertyBuilder.java	Tue Jun 04 09:43:48 2013 -0700
@@ -54,6 +54,7 @@
  * calling {@link #build()}.
  * 
  * @see ReadOnlyJavaBeanIntegerProperty
+ * @since JavaFX 2.1
  */
 public final class ReadOnlyJavaBeanIntegerPropertyBuilder {
 
--- a/javafx-beans/src/javafx/beans/property/adapter/ReadOnlyJavaBeanLongProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/adapter/ReadOnlyJavaBeanLongProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -53,6 +53,7 @@
  * 
  * @see javafx.beans.property.ReadOnlyLongProperty
  * @see ReadOnlyJavaBeanLongPropertyBuilder
+ * @since JavaFX 2.1
  */
 public final class ReadOnlyJavaBeanLongProperty extends ReadOnlyLongPropertyBase implements ReadOnlyJavaBeanProperty<Number> {
 
--- a/javafx-beans/src/javafx/beans/property/adapter/ReadOnlyJavaBeanLongPropertyBuilder.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/adapter/ReadOnlyJavaBeanLongPropertyBuilder.java	Tue Jun 04 09:43:48 2013 -0700
@@ -54,6 +54,7 @@
  * calling {@link #build()}.
  * 
  * @see ReadOnlyJavaBeanLongProperty
+ * @since JavaFX 2.1
  */
 public final class ReadOnlyJavaBeanLongPropertyBuilder {
 
--- a/javafx-beans/src/javafx/beans/property/adapter/ReadOnlyJavaBeanObjectProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/adapter/ReadOnlyJavaBeanObjectProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -55,6 +55,7 @@
  * @see ReadOnlyJavaBeanObjectPropertyBuilder
  * 
  * @param T the type of the wrapped {@code Object}
+ * @since JavaFX 2.1
  */
 public final class ReadOnlyJavaBeanObjectProperty<T> extends ReadOnlyObjectPropertyBase<T> implements ReadOnlyJavaBeanProperty<T> {
 
--- a/javafx-beans/src/javafx/beans/property/adapter/ReadOnlyJavaBeanObjectPropertyBuilder.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/adapter/ReadOnlyJavaBeanObjectPropertyBuilder.java	Tue Jun 04 09:43:48 2013 -0700
@@ -56,6 +56,7 @@
  * @see ReadOnlyJavaBeanObjectProperty
  * 
  * @param T the type of the wrapped {@code Object}
+ * @since JavaFX 2.1
  */
 public final class ReadOnlyJavaBeanObjectPropertyBuilder<T> {
 
--- a/javafx-beans/src/javafx/beans/property/adapter/ReadOnlyJavaBeanProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/adapter/ReadOnlyJavaBeanProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -32,6 +32,7 @@
  * readonly Java Bean properties and JavaFX properties.
  * 
  * @param T The type of the wrapped property
+ * @since JavaFX 2.1
  */
 public interface ReadOnlyJavaBeanProperty<T> extends ReadOnlyProperty<T> {
     /**
--- a/javafx-beans/src/javafx/beans/property/adapter/ReadOnlyJavaBeanStringProperty.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/adapter/ReadOnlyJavaBeanStringProperty.java	Tue Jun 04 09:43:48 2013 -0700
@@ -53,6 +53,7 @@
  * 
  * @see javafx.beans.property.ReadOnlyStringProperty
  * @see ReadOnlyJavaBeanStringPropertyBuilder
+ * @since JavaFX 2.1
  */
 public final class ReadOnlyJavaBeanStringProperty extends ReadOnlyStringPropertyBase implements ReadOnlyJavaBeanProperty<String> {
 
--- a/javafx-beans/src/javafx/beans/property/adapter/ReadOnlyJavaBeanStringPropertyBuilder.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/property/adapter/ReadOnlyJavaBeanStringPropertyBuilder.java	Tue Jun 04 09:43:48 2013 -0700
@@ -54,6 +54,7 @@
  * calling {@link #build()}.
  * 
  * @see ReadOnlyJavaBeanStringProperty
+ * @since JavaFX 2.1
  */
 public final class ReadOnlyJavaBeanStringPropertyBuilder {
 
--- a/javafx-beans/src/javafx/beans/value/ChangeListener.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/value/ChangeListener.java	Tue Jun 04 09:43:48 2013 -0700
@@ -40,6 +40,7 @@
  * @see ObservableValue
  * 
  * 
+ * @since JavaFX 2.0
  */
 public interface ChangeListener<T> {
 
--- a/javafx-beans/src/javafx/beans/value/ObservableBooleanValue.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/value/ObservableBooleanValue.java	Tue Jun 04 09:43:48 2013 -0700
@@ -31,6 +31,7 @@
  * @see ObservableValue
  * 
  * 
+ * @since JavaFX 2.0
  */
 public interface ObservableBooleanValue extends ObservableValue<Boolean> {
 
--- a/javafx-beans/src/javafx/beans/value/ObservableDoubleValue.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/value/ObservableDoubleValue.java	Tue Jun 04 09:43:48 2013 -0700
@@ -32,6 +32,7 @@
  * @see ObservableNumberValue
  * 
  * 
+ * @since JavaFX 2.0
  */
 public interface ObservableDoubleValue extends ObservableNumberValue {
 
--- a/javafx-beans/src/javafx/beans/value/ObservableFloatValue.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/value/ObservableFloatValue.java	Tue Jun 04 09:43:48 2013 -0700
@@ -32,6 +32,7 @@
  * @see ObservableNumberValue
  * 
  * 
+ * @since JavaFX 2.0
  */
 public interface ObservableFloatValue extends ObservableNumberValue {
 
--- a/javafx-beans/src/javafx/beans/value/ObservableIntegerValue.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/value/ObservableIntegerValue.java	Tue Jun 04 09:43:48 2013 -0700
@@ -32,6 +32,7 @@
  * @see ObservableNumberValue
  * 
  * 
+ * @since JavaFX 2.0
  */
 public interface ObservableIntegerValue extends ObservableNumberValue {
 
--- a/javafx-beans/src/javafx/beans/value/ObservableListValue.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/value/ObservableListValue.java	Tue Jun 04 09:43:48 2013 -0700
@@ -35,6 +35,7 @@
  * @see ObservableValue
  *
  * @param <E> the type of the {@code List} elements
+ * @since JavaFX 2.1
  */
 public interface ObservableListValue<E> extends ObservableObjectValue<ObservableList<E>>, ObservableList<E> {
 }
--- a/javafx-beans/src/javafx/beans/value/ObservableLongValue.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/value/ObservableLongValue.java	Tue Jun 04 09:43:48 2013 -0700
@@ -32,6 +32,7 @@
  * @see ObservableNumberValue
  * 
  * 
+ * @since JavaFX 2.0
  */
 public interface ObservableLongValue extends ObservableNumberValue {
 
--- a/javafx-beans/src/javafx/beans/value/ObservableMapValue.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/value/ObservableMapValue.java	Tue Jun 04 09:43:48 2013 -0700
@@ -36,6 +36,7 @@
  *
  * @param <K> the type of the key elements of the {@code Map}
  * @param <V> the type of the value elements of the {@code Map}
+ * @since JavaFX 2.1
  */
 public interface ObservableMapValue<K, V> extends ObservableObjectValue<ObservableMap<K,V>>, ObservableMap<K, V> {
 }
--- a/javafx-beans/src/javafx/beans/value/ObservableNumberValue.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/value/ObservableNumberValue.java	Tue Jun 04 09:43:48 2013 -0700
@@ -39,6 +39,7 @@
  * @see ObservableLongValue
  * 
  * 
+ * @since JavaFX 2.0
  */
 public interface ObservableNumberValue extends ObservableValue<Number> {
 
--- a/javafx-beans/src/javafx/beans/value/ObservableObjectValue.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/value/ObservableObjectValue.java	Tue Jun 04 09:43:48 2013 -0700
@@ -31,6 +31,7 @@
  * @see ObservableValue
  * 
  * 
+ * @since JavaFX 2.0
  */
 public interface ObservableObjectValue<T> extends ObservableValue<T> {
 
--- a/javafx-beans/src/javafx/beans/value/ObservableSetValue.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/value/ObservableSetValue.java	Tue Jun 04 09:43:48 2013 -0700
@@ -35,6 +35,7 @@
  * @see ObservableValue
  *
  * @param <E> the type of the {@code Set} elements
+ * @since JavaFX 2.1
  */
 public interface ObservableSetValue<E> extends ObservableObjectValue<ObservableSet<E>>, ObservableSet<E> {
 }
--- a/javafx-beans/src/javafx/beans/value/ObservableStringValue.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/value/ObservableStringValue.java	Tue Jun 04 09:43:48 2013 -0700
@@ -32,6 +32,7 @@
  * @see ObservableValue
  * 
  * 
+ * @since JavaFX 2.0
  */
 public interface ObservableStringValue extends ObservableObjectValue<String> {
 }
--- a/javafx-beans/src/javafx/beans/value/ObservableValue.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/value/ObservableValue.java	Tue Jun 04 09:43:48 2013 -0700
@@ -78,6 +78,7 @@
  * @see ObservableStringValue
  * 
  * 
+ * @since JavaFX 2.0
  */
 public interface ObservableValue<T> extends Observable {
 
--- a/javafx-beans/src/javafx/beans/value/ObservableValueBase.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/value/ObservableValueBase.java	Tue Jun 04 09:43:48 2013 -0700
@@ -41,6 +41,7 @@
  * observers are being notified, but it is not thread-safe.
  * 
  * 
+ * @since JavaFX 2.0
  */
 public abstract class ObservableValueBase<T> implements ObservableValue<T> {
 
--- a/javafx-beans/src/javafx/beans/value/WeakChangeListener.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/value/WeakChangeListener.java	Tue Jun 04 09:43:48 2013 -0700
@@ -50,6 +50,7 @@
  *            The type of the observed value
  * 
  * 
+ * @since JavaFX 2.0
  */
 public final class WeakChangeListener<T> implements ChangeListener<T>, WeakListener {
 
--- a/javafx-beans/src/javafx/beans/value/WritableBooleanValue.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/value/WritableBooleanValue.java	Tue Jun 04 09:43:48 2013 -0700
@@ -31,6 +31,7 @@
  * @see WritableValue
  * 
  * 
+ * @since JavaFX 2.0
  */
 public interface WritableBooleanValue extends WritableValue<Boolean> {
 
--- a/javafx-beans/src/javafx/beans/value/WritableDoubleValue.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/value/WritableDoubleValue.java	Tue Jun 04 09:43:48 2013 -0700
@@ -32,6 +32,7 @@
  * @see WritableNumberValue
  * 
  * 
+ * @since JavaFX 2.0
  */
 public interface WritableDoubleValue extends WritableNumberValue {
 
--- a/javafx-beans/src/javafx/beans/value/WritableFloatValue.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/value/WritableFloatValue.java	Tue Jun 04 09:43:48 2013 -0700
@@ -32,6 +32,7 @@
  * @see WritableNumberValue
  * 
  * 
+ * @since JavaFX 2.0
  */
 public interface WritableFloatValue extends WritableNumberValue {
 
--- a/javafx-beans/src/javafx/beans/value/WritableIntegerValue.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/value/WritableIntegerValue.java	Tue Jun 04 09:43:48 2013 -0700
@@ -32,6 +32,7 @@
  * @see WritableNumberValue
  * 
  * 
+ * @since JavaFX 2.0
  */
 public interface WritableIntegerValue extends WritableNumberValue {
 
--- a/javafx-beans/src/javafx/beans/value/WritableListValue.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/value/WritableListValue.java	Tue Jun 04 09:43:48 2013 -0700
@@ -35,6 +35,7 @@
  * @see javafx.beans.value.WritableListValue
  *
  * @param <E> the type of the {@code List} elements
+ * @since JavaFX 2.1
  */
 public interface WritableListValue<E> extends WritableObjectValue<ObservableList<E>>, ObservableList<E> {
 }
--- a/javafx-beans/src/javafx/beans/value/WritableLongValue.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/value/WritableLongValue.java	Tue Jun 04 09:43:48 2013 -0700
@@ -32,6 +32,7 @@
  * @see WritableNumberValue
  * 
  * 
+ * @since JavaFX 2.0
  */
 public interface WritableLongValue extends WritableNumberValue {
 
--- a/javafx-beans/src/javafx/beans/value/WritableMapValue.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/value/WritableMapValue.java	Tue Jun 04 09:43:48 2013 -0700
@@ -36,6 +36,7 @@
  *
  * @param <K> the type of the key elements of the {@code Map}
  * @param <V> the type of the value elements of the {@code Map}
+ * @since JavaFX 2.1
  */
 public interface WritableMapValue<K, V> extends WritableObjectValue<ObservableMap<K,V>>, ObservableMap<K, V> {
 }
--- a/javafx-beans/src/javafx/beans/value/WritableNumberValue.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/value/WritableNumberValue.java	Tue Jun 04 09:43:48 2013 -0700
@@ -36,6 +36,7 @@
  * @see WritableLongValue
  * 
  * 
+ * @since JavaFX 2.0
  */
 public interface WritableNumberValue extends WritableValue<Number> {
 
--- a/javafx-beans/src/javafx/beans/value/WritableObjectValue.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/value/WritableObjectValue.java	Tue Jun 04 09:43:48 2013 -0700
@@ -34,6 +34,7 @@
  * @see WritableValue
  * 
  * 
+ * @since JavaFX 2.0
  */
 public interface WritableObjectValue<T> extends WritableValue<T> {
 
--- a/javafx-beans/src/javafx/beans/value/WritableSetValue.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/value/WritableSetValue.java	Tue Jun 04 09:43:48 2013 -0700
@@ -35,6 +35,7 @@
  * @see javafx.beans.value.WritableSetValue
  *
  * @param <E> the type of the {@code Set} elements
+ * @since JavaFX 2.1
  */
 public interface WritableSetValue<E> extends WritableObjectValue<ObservableSet<E>>, ObservableSet<E> {
 }
--- a/javafx-beans/src/javafx/beans/value/WritableStringValue.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/value/WritableStringValue.java	Tue Jun 04 09:43:48 2013 -0700
@@ -30,6 +30,7 @@
  * 
  * @see WritableValue
  * @see WritableObjectValue
+ * @since JavaFX 2.0
  */
 public interface WritableStringValue extends WritableObjectValue<String> {
 
--- a/javafx-beans/src/javafx/beans/value/WritableValue.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/beans/value/WritableValue.java	Tue Jun 04 09:43:48 2013 -0700
@@ -43,6 +43,7 @@
  *            The type of the wrapped value
  * 
  * 
+ * @since JavaFX 2.0
  */
 public interface WritableValue<T> {
 
--- a/javafx-beans/src/javafx/collections/ArrayChangeListener.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/collections/ArrayChangeListener.java	Tue Jun 04 09:43:48 2013 -0700
@@ -26,6 +26,7 @@
 
 /**
  * Interface that receives notifications of changes to an ObservableArray.
+ * @since JavaFX 8.0
  */
 public interface ArrayChangeListener<T extends ObservableArray<T>> {
     
--- a/javafx-beans/src/javafx/collections/FXCollections.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/collections/FXCollections.java	Tue Jun 04 09:43:48 2013 -0700
@@ -76,6 +76,7 @@
  * they yield only limited number of notifications. On the other hand, java.util.Collections methods
  * might call "modification methods" on an ObservableList multiple times, resulting in a number of notifications.
  *
+ * @since JavaFX 2.0
  */
 public class FXCollections {
     /** Not to be instantiated. */
@@ -114,7 +115,7 @@
      *
      * @param list a concrete List that backs this ObservableList
      * @param extractor element to Observable[] convertor
-     * @since 2.1
+     * @since JavaFX 2.1
      * @return a newly created ObservableList
      */
     public static <E> ObservableList<E> observableList(List<E> list, Callback<E, Observable[]> extractor) {
@@ -149,6 +150,7 @@
      * reported to observers of any ObservableSet that wraps it.
      * @param set a Set that backs this ObservableSet
      * @return a newly created ObservableSet
+     * @since JavaFX 2.1
      */
     public static <E> ObservableSet<E> observableSet(Set<E> set) {
         if (set == null) {
@@ -161,6 +163,7 @@
      * Constructs an ObservableSet that contains all the specified elements.
      * @param elements elements that will be added into returned ObservableSet
      * @return a newly created ObservableSet
+     * @since JavaFX 2.1
      */
     public static <E> ObservableSet<E> observableSet(E... elements) {
         if (elements == null) {
@@ -194,6 +197,7 @@
      * @param valueType the type of value that {@code map} is permitted to hold
      * @return a dynamically typesafe view of the specified map
      * @see Collections#checkedMap(java.util.Map, java.lang.Class)
+     * @since JavaFX 8.0
      */
     public static <K, V> ObservableMap<K, V> checkedObservableMap(ObservableMap<K, V> map, Class<K> keyType, Class<V> valueType) {
         if (map == null || keyType == null || valueType == null) {
@@ -207,6 +211,7 @@
      * @param  map the map to be "wrapped" in a synchronized map.
      * @return A synchronized version of the observable map
      * @see Collections#synchronizedMap(java.util.Map)
+     * @since JavaFX 8.0
      */
     public static <K, V> ObservableMap<K, V> synchronizedObservableMap(ObservableMap<K, V> map) {
         if (map == null) {
@@ -221,6 +226,7 @@
      * Creates and empty unmodifiable observable map.
      * @return An empty unmodifiable observable map
      * @see Collections#emptyMap()
+     * @since JavaFX 8.0
      */
     @SuppressWarnings("unchecked")
     @ReturnsUnmodifiableCollection
@@ -231,6 +237,7 @@
     /**
      * Creates a new empty observable integer array.
      * @return a newly created ObservableIntegerArray
+     * @since JavaFX 8.0
      */
     public static ObservableIntegerArray observableIntegerArray() {
         return new ObservableIntegerArrayImpl();
@@ -240,6 +247,7 @@
      * Creates a new observable integer array with {@code values} set to it.
      * @param values the values that will be in the new observable integer array
      * @return a newly created ObservableIntegerArray
+     * @since JavaFX 8.0
      */
     public static ObservableIntegerArray observableIntegerArray(int... values) {
         return new ObservableIntegerArrayImpl(values);
@@ -250,6 +258,7 @@
      * {@code array}.
      * @param array observable integer array to copy
      * @return a newly created ObservableIntegerArray
+     * @since JavaFX 8.0
      */
     public static ObservableIntegerArray observableIntegerArray(ObservableIntegerArray array) {
         return new ObservableIntegerArrayImpl(array);
@@ -258,6 +267,7 @@
     /**
      * Creates a new empty observable float array.
      * @return a newly created ObservableFloatArray
+     * @since JavaFX 8.0
      */
     public static ObservableFloatArray observableFloatArray() {
         return new ObservableFloatArrayImpl();
@@ -267,6 +277,7 @@
      * Creates a new observable float array with {@code values} set to it.
      * @param values the values that will be in the new observable float array
      * @return a newly created ObservableFloatArray
+     * @since JavaFX 8.0
      */
     public static ObservableFloatArray observableFloatArray(float... values) {
         return new ObservableFloatArrayImpl(values);
@@ -277,6 +288,7 @@
      * {@code array}.
      * @param array observable float array to copy
      * @return a newly created ObservableFloatArray
+     * @since JavaFX 8.0
      */
     public static ObservableFloatArray observableFloatArray(ObservableFloatArray array) {
         return new ObservableFloatArrayImpl(array);
@@ -298,7 +310,7 @@
      * This list reports element updates.
      * @param extractor element to Observable[] convertor. Observable objects are listened for changes on the element.
      * @see #observableList(java.util.List, javafx.util.Callback) 
-     * @since 2.1
+     * @since JavaFX 2.1
      * @return a newly created ObservableList
      */
     public static <E> ObservableList<E> observableArrayList(Callback<E, Observable[]> extractor) {
@@ -431,6 +443,7 @@
      * @param set an ObservableSet that is to be wrapped
      * @return an ObserableSet wrapper that is unmodifiable
      * @see Collections#unmodifiableSet(java.util.Set)
+     * @since JavaFX 8.0
      */
     @ReturnsUnmodifiableCollection
     public static<E> ObservableSet<E> unmodifiableObservableSet(ObservableSet<E> set) {
@@ -446,6 +459,7 @@
      * @param type  the type of element that <tt>set</tt> is permitted to hold
      * @return a dynamically typesafe view of the specified set
      * @see Collections#checkedSet(java.util.Set, java.lang.Class)
+     * @since JavaFX 8.0
      */
     public static<E> ObservableSet<E> checkedObservableSet(ObservableSet<E> set, Class<E> type) {
         if (set == null) {
@@ -459,6 +473,7 @@
      * @param  set the set to be "wrapped" in a synchronized set.
      * @return A synchronized version of the observable set
      * @see Collections#synchronizedSet(java.util.Set)
+     * @since JavaFX 8.0
      */
     public static<E> ObservableSet<E> synchronizedObservableSet(ObservableSet<E> set) {
         if (set == null) {
@@ -473,6 +488,7 @@
      * Creates and empty unmodifiable observable set.
      * @return An empty unmodifiable observable set
      * @see Collections#emptySet()
+     * @since JavaFX 8.0
      */
     @SuppressWarnings("unchecked")
     @ReturnsUnmodifiableCollection
--- a/javafx-beans/src/javafx/collections/ListChangeListener.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/collections/ListChangeListener.java	Tue Jun 04 09:43:48 2013 -0700
@@ -33,6 +33,7 @@
  *
  * @param <E> the list element type
  * @see Change
+ * @since JavaFX 2.0
  */
 public interface ListChangeListener<E> {
 
@@ -101,6 +102,7 @@
      * And on the other hand, update changes must go after add/remove changes because they refer with their indexes to the current
      * state of the list, which means with all add/remove changes applied.
      * @param <E> the list element type
+     * @since JavaFX 2.0
      */
     public abstract static class Change<E> {
         private final ObservableList<E> list;
@@ -210,7 +212,7 @@
          * This is the only optional event type and may not be
          * fired by all ObservableLists.
          * @return true if the current change is an update change.
-         * @since 2.1
+         * @since JavaFX 2.1
          */
         public boolean wasUpdated() {
             return false;
--- a/javafx-beans/src/javafx/collections/MapChangeListener.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/collections/MapChangeListener.java	Tue Jun 04 09:43:48 2013 -0700
@@ -29,6 +29,7 @@
  * Interface that receives notifications of changes to an ObservableMap.
  * @param <K> the key element type
  * @param <V> the value element type
+ * @since JavaFX 2.0
  */
 public interface MapChangeListener<K, V> {
 
@@ -41,6 +42,7 @@
      *
      * @param <K> key type
      * @param <V> value type
+     * @since JavaFX 2.0
      */
     public static abstract class Change<K, V> {
 
--- a/javafx-beans/src/javafx/collections/ModifiableObservableListBase.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/collections/ModifiableObservableListBase.java	Tue Jun 04 09:43:48 2013 -0700
@@ -76,7 +76,7 @@
  *
  * @param <E> the type of the elements contained in the List
  * @see ObservableListBase
- * @since 8.0
+ * @since JavaFX 8.0
  */
 public abstract class ModifiableObservableListBase<E> extends ObservableListBase<E> {
 
--- a/javafx-beans/src/javafx/collections/ObservableArray.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/collections/ObservableArray.java	Tue Jun 04 09:43:48 2013 -0700
@@ -27,57 +27,64 @@
 import javafx.beans.Observable;
 
 /**
- * An array that allows listeners to track changes when they occur. To achieve
- * that internal array is encapsulated and there is no direct access available
- * from outside. Bulk operations are supported but they always do copy of the 
- * data range. You can find them in subclasses as they deal with primitive
- * arrays directly.
+ * {@code ObservableArray} is an array that allows listeners to track changes
+ * when they occur. In order to track changes, the internal array
+ * is encapsulated and there is no direct access available from the outside.
+ * Bulk operations are supported but they always do a copy of the data range.
+ * You can find them in subclasses as they deal with primitive arrays directly.
  *
- * Implementations have both {@code capacity} which is internal array length
- * and {@code size}. If size needs to be increased beyond capacity the capacity
- * increases to match that new size. Use {@link #trimToSize() } method
+ * <p>Implementations have both {@code capacity}, which is internal array length,
+ * and {@code size}. If size needs to be increased beyond capacity, the capacity
+ * increases to match that new size. Use {@link #trimToSize()} method
  * to shrink it.
  * 
  * @see ArrayChangeListener
  * @param <T> actual array instance type
+ * @since JavaFX 8.0
  */
 public interface ObservableArray<T extends ObservableArray<T>> extends Observable {
 
     /**
      * Add a listener to this observable array.
      * @param listener the listener for listening to the array changes
+     * @throws NullPointerException if {@code listener} is {@code null}
      */    
     public void addListener(ArrayChangeListener<T> listener);
 
     /**
-     * Tries to removed a listener from this observable array. If the listener is not
+     * Tries to remove a listener from this observable array. If the listener is not
      * attached to this array, nothing happens.
      * @param listener a listener to remove
+     * @throws NullPointerException if {@code listener} is {@code null}
      */    
     public void removeListener(ArrayChangeListener<T> listener);
 
     /**
-     * Sets new length of data in this array. This method ensures capacity for
-     * the new array length but never shrinks it. To avoid data copying
-     * call {@link #clear() } before setting it to new value. New elements
-     * will be set to 0.
+     * Sets new length of data in this array. This method grows capacity
+     * if necessary but never shrinks it. Resulting array will contain existing
+     * data for indexes that are less than the current size and zeroes for
+     * indexes that are greater than the current size.
+     * @param size new length of data in this array
+     * @throws NegativeArraySizeException if size is negative
      */
     public void resize(int size);
 
     /**
-     * Grows capacity if it is less then given {@code value}, does nothing if
-     * it already exceeds the {@code value}.
+     * Grows the capacity of this array if the current capacity is less than
+     * given {@code capacity}, does nothing if it already exceeds
+     * the {@code capacity}.
      * @param capacity
      */
     public void ensureCapacity(int capacity);
 
     /**
-     * Shrinks capacity to the current size of data in the array.
+     * Shrinks the capacity to the current size of data in the array.
      */
     public void trimToSize();
 
     /**
-     * Sets size of array to 0. No data removed nor capacity changes.
+     * Empties the array by resizing it to 0. Capacity is not changed.
+     * @see #trimToSize()
      */
     public void clear();
 
@@ -86,4 +93,4 @@
      * @return length of data in this array
      */
     public int size();
-}
\ No newline at end of file
+}
--- a/javafx-beans/src/javafx/collections/ObservableArrayBase.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/collections/ObservableArrayBase.java	Tue Jun 04 09:43:48 2013 -0700
@@ -36,7 +36,7 @@
  * @param <T> actual array instance type
  * @see ObservableArray
  * @see ArrayChangeListener
- * @since 8.0
+ * @since JavaFX 8.0
  */
 public abstract class ObservableArrayBase<T extends ObservableArray<T>> implements ObservableArray<T> {
     
@@ -65,4 +65,4 @@
     protected final void fireChange(boolean sizeChanged, int from, int to) {
         ArrayListenerHelper.fireValueChangedEvent(listenerHelper, sizeChanged, from, to);
     }    
-}
\ No newline at end of file
+}
--- a/javafx-beans/src/javafx/collections/ObservableFloatArray.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/collections/ObservableFloatArray.java	Tue Jun 04 09:43:48 2013 -0700
@@ -25,25 +25,36 @@
 package javafx.collections;
 
 /**
- * A float[] array that allows listeners to track changes when they occur. To achieve
- * that internal array is encapsulated and there is no direct access available
- * from outside. Bulk operations are supported but they always do copy of the 
- * data range.
+ * {@code ObservableFloatArray} is a {@code float[]} array that allows listeners
+ * to track changes when they occur. In order to track changes, the internal
+ * array is encapsulated and there is no direct access available from the outside.
+ * Bulk operations are supported but they always do a copy of the data range.
  * 
  * @see ArrayChangeListener
+ * @since JavaFX 8.0
  */
 public interface ObservableFloatArray extends ObservableArray<ObservableFloatArray> {
 
     /**
      * Copies specified portion of array into {@code dest} array. Throws
      * the same exceptions as {@link System#arraycopy(java.lang.Object,
-     * int, java.lang.Object, int, int) }
+     * int, java.lang.Object, int, int) System.arraycopy()} method.
      * @param srcIndex starting position in the observable array
      * @param dest destination array
      * @param destIndex starting position in destination array
      * @param length length of portion to copy
      */
     public void copyTo(int srcIndex, float[] dest, int destIndex, int length);
+
+    /**
+     * Copies specified portion of array into {@code dest} observable array.
+     * Throws the same exceptions as {@link System#arraycopy(java.lang.Object,
+     * int, java.lang.Object, int, int) System.arraycopy()} method.
+     * @param srcIndex starting position in the observable array
+     * @param dest destination observable array
+     * @param destIndex starting position in destination observable array
+     * @param length length of portion to copy
+     */
     public void copyTo(int srcIndex, ObservableFloatArray dest, int destIndex, int length);
 
     /**
@@ -56,31 +67,96 @@
      */
     public float get(int index);
 
+    /**
+     * Appends given {@code elements} to the end of this array. Capacity is increased
+     * if necessary to match the new size of the data.
+     * @param elements elements to append
+     */
     public void addAll(float... elements);
+
+    /**
+     * Appends content of a given observable array to the end of this array.
+     * Capacity is increased if necessary to match the new size of the data.
+     * @param src observable array with elements to append
+     */
     public void addAll(ObservableFloatArray src);
+
+    /**
+     * Appends a portion of given array to the end of this array.
+     * Capacity is increased if necessary to match the new size of the data.
+     * @param src source array
+     * @param srcIndex starting position in source array
+     * @param length length of portion to append
+     */
     public void addAll(float[] src, int srcIndex, int length);
+
+    /**
+     * Appends a portion of given observable array to the end of this array.
+     * Capacity is increased if necessary to match the new size of the data.
+     * @param src source observable array
+     * @param srcIndex starting position in source array
+     * @param length length of portion to append
+     */
     public void addAll(ObservableFloatArray src, int srcIndex, int length);
 
     /**
-     * Sets observable array to a copy of given array
-     * @param elements source array to copy.
-     * @throws NullPointerException if {@code array} is null
+     * Replaces this observable array content with given elements.
+     * Capacity is increased if necessary to match the new size of the data.
+     * @param elements elements to put into array content
+     * @throws NullPointerException if {@code src} is null
      */
     public void setAll(float... elements);
+
+    /**
+     * Replaces this observable array content with a copy of portion of
+     * a given array.
+     * Capacity is increased if necessary to match the new size of the data.
+     * @param src source array to copy.
+     * @param srcIndex starting position in source observable array
+     * @param length length of a portion to copy
+     * @throws NullPointerException if {@code src} is null
+     */
+    public void setAll(float[] src, int srcIndex, int length);
+
+    /**
+     * Replaces this observable array content with a copy of given observable array.
+     * Capacity is increased if necessary to match the new size of the data.
+     * @param src source observable array to copy.
+     * @throws NullPointerException if {@code src} is null
+     */
     public void setAll(ObservableFloatArray src);
-    public void setAll(float[] src, int srcIndex, int length);
+
+    /**
+     * Replaces this observable array content with a portion of a given
+     * observable array.
+     * Capacity is increased if necessary to match the new size of the data.
+     * @param src source observable array to copy.
+     * @param srcIndex starting position in source observable array
+     * @param length length of a portion to copy
+     * @throws NullPointerException if {@code src} is null
+     */
     public void setAll(ObservableFloatArray src, int srcIndex, int length);
 
     /**
-     * Sets portion of observable array to a copy of given array. Throws 
+     * Copies a portion of specified array into this observable array. Throws
      * the same exceptions as {@link System#arraycopy(java.lang.Object, 
-     * int, java.lang.Object, int, int) }
-     * @param destIndex the starting destination index in this observable array
+     * int, java.lang.Object, int, int) System.arraycopy()} method.
+     * @param destIndex the starting destination position in this observable array
      * @param src source array to copy
      * @param srcIndex starting position in source array
      * @param length length of portion to copy
      */
     public void set(int destIndex, float[] src, int srcIndex, int length);
+
+    /**
+     * Copies a portion of specified observable array into this observable array.
+     * Throws the same exceptions as {@link System#arraycopy(java.lang.Object,
+     * int, java.lang.Object, int, int) System.arraycopy()} method.
+     * @param destIndex the starting destination position in this observable array
+     * @param src source observable array to copy
+     * @param srcIndex starting position in source array
+     * @param length length of portion to copy
+     */
     public void set(int destIndex, ObservableFloatArray src, int srcIndex, int length);
 
     /**
@@ -99,7 +175,7 @@
      * If the observable array fits in the specified array, it is copied therein. 
      * Otherwise, a new array is allocated with the size of the observable array.
      *
-     * @param array the array into which the observable array to be copied, 
+     * @param dest the array into which the observable array to be copied,
      *          if it is big enough; otherwise, a new float array is allocated. 
      *          Ignored, if null.
      * @return a float array containing the copy of the observable array
@@ -121,4 +197,4 @@
      */
     public float[] toArray(int srcIndex, float[] dest, int length);
     
-}
\ No newline at end of file
+}
--- a/javafx-beans/src/javafx/collections/ObservableIntegerArray.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/collections/ObservableIntegerArray.java	Tue Jun 04 09:43:48 2013 -0700
@@ -25,25 +25,36 @@
 package javafx.collections;
 
 /**
- * An int[] array that allows listeners to track changes when they occur. To achieve
- * that internal array is encapsulated and there is no direct access available
- * from outside. Bulk operations are supported but they always do copy of the 
- * data range.
+ * {@code ObservableIntegerArray} is a {@code int[]} array that allows listeners
+ * to track changes when they occur. In order to track changes, the internal
+ * array is encapsulated and there is no direct access available from the outside.
+ * Bulk operations are supported but they always do a copy of the data range.
  * 
  * @see ArrayChangeListener
+ * @since JavaFX 8.0
  */
 public interface ObservableIntegerArray extends ObservableArray<ObservableIntegerArray> {
 
     /**
      * Copies specified portion of array into {@code dest} array. Throws
      * the same exceptions as {@link System#arraycopy(java.lang.Object,
-     * int, java.lang.Object, int, int) }
+     * int, java.lang.Object, int, int) System.arraycopy()} method.
      * @param srcIndex starting position in the observable array
      * @param dest destination array
      * @param destIndex starting position in destination array
      * @param length length of portion to copy
      */
     public void copyTo(int srcIndex, int[] dest, int destIndex, int length);
+
+    /**
+     * Copies specified portion of array into {@code dest} observable array.
+     * Throws the same exceptions as {@link System#arraycopy(java.lang.Object,
+     * int, java.lang.Object, int, int) System.arraycopy()} method.
+     * @param srcIndex starting position in the observable array
+     * @param dest destination observable array
+     * @param destIndex starting position in destination observable array
+     * @param length length of portion to copy
+     */
     public void copyTo(int srcIndex, ObservableIntegerArray dest, int destIndex, int length);
 
     /**
@@ -57,43 +68,102 @@
     public int get(int index);
 
     /**
-     * Appends given {@code elements} to the end of array. Capacity is increased
+     * Appends given {@code elements} to the end of this array. Capacity is increased
      * if necessary to match the new size of the data.
-     * @param elements
+     * @param elements elements to append
      */
     public void addAll(int... elements);
+
+    /**
+     * Appends content of a given observable array to the end of this array. 
+     * Capacity is increased if necessary to match the new size of the data.
+     * @param src observable array with elements to append
+     */
     public void addAll(ObservableIntegerArray src);
+
+    /**
+     * Appends a portion of given array to the end of this array.
+     * Capacity is increased if necessary to match the new size of the data.
+     * @param src source array
+     * @param srcIndex starting position in source array
+     * @param length length of portion to append
+     */
     public void addAll(int[] src, int srcIndex, int length);
+
+    /**
+     * Appends a portion of given observable array to the end of this array.
+     * Capacity is increased if necessary to match the new size of the data.
+     * @param src source observable array
+     * @param srcIndex starting position in source array
+     * @param length length of portion to append
+     */
     public void addAll(ObservableIntegerArray src, int srcIndex, int length);
 
     /**
-     * Sets observable array to a copy of given array. Capacity is increased
-     * if necessary to match the new size of the data
-     * @param elements source array to copy.
-     * @throws NullPointerException if {@code array} is null
+     * Replaces this observable array content with given elements.
+     * Capacity is increased if necessary to match the new size of the data.
+     * @param elements elements to put into array content
+     * @throws NullPointerException if {@code src} is null
      */
     public void setAll(int... elements);
+
+    /**
+     * Replaces this observable array content with a copy of portion of
+     * a given array.
+     * Capacity is increased if necessary to match the new size of the data.
+     * @param src source array to copy.
+     * @param srcIndex starting position in source observable array
+     * @param length length of a portion to copy
+     * @throws NullPointerException if {@code src} is null
+     */
     public void setAll(int[] src, int srcIndex, int length);
+
+    /**
+     * Replaces this observable array content with a copy of given observable array.
+     * Capacity is increased if necessary to match the new size of the data.
+     * @param src source observable array to copy.
+     * @throws NullPointerException if {@code src} is null
+     */
     public void setAll(ObservableIntegerArray src);
+
+    /**
+     * Replaces this observable array content with a portion of a given
+     * observable array.
+     * Capacity is increased if necessary to match the new size of the data.
+     * @param src source observable array to copy.
+     * @param srcIndex starting position in source observable array
+     * @param length length of a portion to copy
+     * @throws NullPointerException if {@code src} is null
+     */
     public void setAll(ObservableIntegerArray src, int srcIndex, int length);
 
     /**
-     * Sets portion of observable array to a copy of given array. Throws 
+     * Copies a portion of specified array into this observable array. Throws
      * the same exceptions as {@link System#arraycopy(java.lang.Object, 
-     * int, java.lang.Object, int, int) }
-     * @param destIndex the starting destination index in this observable array
+     * int, java.lang.Object, int, int) System.arraycopy()} method.
+     * @param destIndex the starting destination position in this observable array
      * @param src source array to copy
      * @param srcIndex starting position in source array
      * @param length length of portion to copy
      */
     public void set(int destIndex, int[] src, int srcIndex, int length);
+
+    /**
+     * Copies a portion of specified observable array into this observable array.
+     * Throws the same exceptions as {@link System#arraycopy(java.lang.Object,
+     * int, java.lang.Object, int, int) System.arraycopy()} method.
+     * @param destIndex the starting destination position in this observable array
+     * @param src source observable array to copy
+     * @param srcIndex starting position in source array
+     * @param length length of portion to copy
+     */
     public void set(int destIndex, ObservableIntegerArray src, int srcIndex, int length);
 
     /**
      * Sets a single value in the array. Avoid using this method if many values
      * are updated, use {@linkplain #setAll(int, int[], int, int)} update method
      * instead with as minimum number of invocations as possible.
-     * @param index index of the value to setAll
+     * @param index index of the value to set
      * @param value new value for the given index
      * @throws ArrayIndexOutOfBoundsException if {@code index} is outside
      * array bounds
--- a/javafx-beans/src/javafx/collections/ObservableList.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/collections/ObservableList.java	Tue Jun 04 09:43:48 2013 -0700
@@ -40,6 +40,7 @@
  * @see ListChangeListener
  * @see ListChangeListener.Change
  * @param <E> the list element type
+ * @since JavaFX 2.0
  */
 public interface ObservableList<E> extends List<E>, Observable {
     /**
@@ -106,6 +107,7 @@
      * the specified predicate.
      * @param predicate the predicate to use
      * @return new {@code FilteredList}
+     * @since JavaFX 8.0
      */
     public default FilteredList<E> filtered(Predicate<E> predicate) {
         return new FilteredList<>(this, predicate);
@@ -116,6 +118,7 @@
      * the specified comparator.
      * @param comparator the comparator to use or null for the natural order
      * @return new {@code SortedList}
+     * @since JavaFX 8.0
      */
     public default SortedList<E> sorted(Comparator<E> comparator) {
         return new SortedList<>(this, comparator);
@@ -125,6 +128,7 @@
      * Creates a {@link SortedList} wrapper of this list with the natural
      * ordering.
      * @return new {@code SortedList}
+     * @since JavaFX 8.0
      */
     public default SortedList<E> sorted() {
         return sorted(null);
--- a/javafx-beans/src/javafx/collections/ObservableListBase.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/collections/ObservableListBase.java	Tue Jun 04 09:43:48 2013 -0700
@@ -86,7 +86,7 @@
  * @see ObservableList
  * @see ListChangeListener.Change
  * @see ModifiableObservableListBase
- * @since 8.0
+ * @since JavaFX 8.0
  */
 public abstract class ObservableListBase<E> extends AbstractList<E>  implements ObservableList<E> {
 
--- a/javafx-beans/src/javafx/collections/ObservableMap.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/collections/ObservableMap.java	Tue Jun 04 09:43:48 2013 -0700
@@ -34,6 +34,7 @@
  *
  * @see MapChangeListener
  * @see MapChangeListener.Change
+ * @since JavaFX 2.0
  */
 public interface ObservableMap<K, V> extends Map<K, V>, Observable {
     /**
--- a/javafx-beans/src/javafx/collections/ObservableSet.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/collections/ObservableSet.java	Tue Jun 04 09:43:48 2013 -0700
@@ -35,6 +35,7 @@
  * 
  * @see SetChangeListener
  * @see SetChangeListener.Change
+ * @since JavaFX 2.1
  */
 public interface ObservableSet<E> extends Set<E>, Observable {
     /**
--- a/javafx-beans/src/javafx/collections/SetChangeListener.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/collections/SetChangeListener.java	Tue Jun 04 09:43:48 2013 -0700
@@ -28,6 +28,7 @@
 /**
  * Interface that receives notifications of changes to an ObservableSet.
  * @param <E> the element type
+ * @since JavaFX 2.1
  */
 public interface SetChangeListener<E> {
 
@@ -38,6 +39,7 @@
      * modify the set and hence no change will be generated.
      *
      * @param <E> element type
+     * @since JavaFX 2.1
      */
     public static abstract class Change<E> {
 
--- a/javafx-beans/src/javafx/collections/WeakListChangeListener.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/collections/WeakListChangeListener.java	Tue Jun 04 09:43:48 2013 -0700
@@ -50,6 +50,7 @@
  * @param <E>
  *            The type of the observed value
  *
+ * @since JavaFX 2.1
  */
 public final class WeakListChangeListener<E> implements ListChangeListener<E>, WeakListener {
 
--- a/javafx-beans/src/javafx/collections/WeakMapChangeListener.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/collections/WeakMapChangeListener.java	Tue Jun 04 09:43:48 2013 -0700
@@ -50,6 +50,7 @@
  * @param <K> the key element type
  * @param <V> the value element type
  *
+ * @since JavaFX 2.1
  */
 public final class WeakMapChangeListener<K, V> implements MapChangeListener<K, V>, WeakListener {
 
--- a/javafx-beans/src/javafx/collections/WeakSetChangeListener.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/collections/WeakSetChangeListener.java	Tue Jun 04 09:43:48 2013 -0700
@@ -50,6 +50,7 @@
  * @param <E>
  *            The type of the observed value
  *
+ * @since JavaFX 2.1
  */
 public final class WeakSetChangeListener<E> implements SetChangeListener<E>, WeakListener {
 
--- a/javafx-beans/src/javafx/collections/transformation/FilteredList.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/collections/transformation/FilteredList.java	Tue Jun 04 09:43:48 2013 -0700
@@ -44,6 +44,7 @@
  * to the FilteredList.
  *
  * @see TransformationList
+ * @since JavaFX 8.0
  */
 public final class FilteredList<E> extends TransformationList<E, E>{
 
@@ -51,6 +52,14 @@
     private int size;
 
     private SortHelper helper;
+    private static final Predicate ALWAYS_TRUE = new Predicate() {
+
+        @Override
+        public boolean test(Object t) {
+            return true;
+        }
+
+    };
 
     /**
      * Constructs a new FilteredList wrapper around the source list.
@@ -77,7 +86,7 @@
      * @param source the source list
      */
     public FilteredList(ObservableList<E> source) {
-        this(source, e -> true);
+        this(source, ALWAYS_TRUE);
     }
 
     /**
@@ -85,14 +94,14 @@
      * Elements not matching the predicate will be filtered-out.
      */
     private final ObjectProperty<Predicate<? super E>> predicate =
-            new ObjectPropertyBase<Predicate<? super E>>(e -> true) {
+            new ObjectPropertyBase<Predicate<? super E>>(ALWAYS_TRUE) {
 
         @Override
         protected void invalidated() {
             if (get() == null) {
                 if (isBound()) {
                     unbind();
-                    set(e -> true);
+                    set(ALWAYS_TRUE);
                     throw new IllegalArgumentException("Predicate cannot be null.");
 
                 }
--- a/javafx-beans/src/javafx/collections/transformation/SortedList.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/collections/transformation/SortedList.java	Tue Jun 04 09:43:48 2013 -0700
@@ -45,6 +45,7 @@
  * valid again.
  *
  * @see TransformationList
+ * @since JavaFX 8.0
  */
 public final class SortedList<E> extends TransformationList<E, E>{
 
--- a/javafx-beans/src/javafx/collections/transformation/TransformationList.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/src/javafx/collections/transformation/TransformationList.java	Tue Jun 04 09:43:48 2013 -0700
@@ -40,6 +40,7 @@
  * 
  * @param <E> the type parameter of this list
  * @param <F> the upper bound of the type of the source list
+ * @since JavaFX 8.0
  */
 public abstract class TransformationList<E, F> extends ObservableListBase<E> implements ObservableList<E> {
 
@@ -101,8 +102,12 @@
 
     private ListChangeListener<F> getListener() {
         if (sourceListener == null) {
-            sourceListener = (Change<? extends F> c) -> {
-                TransformationList.this.sourceChanged(c);
+            sourceListener = new ListChangeListener<F>() {
+
+                @Override
+                public void onChanged(Change<? extends F> c) {
+                    TransformationList.this.sourceChanged(c);
+                }
             };
         }
         return sourceListener;
--- a/javafx-beans/test/javafx/collections/ObservableArrayTest.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-beans/test/javafx/collections/ObservableArrayTest.java	Tue Jun 04 09:43:48 2013 -0700
@@ -32,6 +32,7 @@
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
+import javafx.beans.InvalidationListener;
 
 import static org.junit.Assert.*;
 import org.junit.Ignore;
@@ -78,7 +79,10 @@
         abstract A toArray(A dest);
         abstract A toArray(int srcIndex, A dest, int length);
 
-        abstract A createPrimitiveArray(int size);
+        A createPrimitiveArray(int size) {
+            return createPrimitiveArray(size, true);
+        }
+        abstract A createPrimitiveArray(int size, boolean fillWithData);
         abstract A clonePrimitiveArray(A array);
         abstract int arrayLength(A array);
         abstract P get(A array, int index);
@@ -110,10 +114,12 @@
             array.set(index, value);
         }
 
-        @Override int[] createPrimitiveArray(int size) {
+        @Override int[] createPrimitiveArray(int size, boolean fillWithData) {
             int[] res = new int[size];
-            for (int i = 0; i < size; i++) {
-                res[i] = nextValue++;
+            if (fillWithData) {
+                for (int i = 0; i < size; i++) {
+                    res[i] = nextValue++;
+                }
             }
             return res;
         }
@@ -229,10 +235,12 @@
             array.set(index, value);
         }
 
-        @Override float[] createPrimitiveArray(int size) {
+        @Override float[] createPrimitiveArray(int size, boolean fillWithData) {
             float[] res = new float[size];
-            for (int i = 0; i < size; i++) {
-                res[i] = nextValue++;
+            if (fillWithData) {
+                for (int i = 0; i < size; i++) {
+                    res[i] = nextValue++;
+                }
             }
             return res;
         }
@@ -277,9 +285,9 @@
         @Override
         void assertElementsEqual(float[] actual, int from, int to, float[] expected, int expFrom) {
             for(int i = from, j = expFrom; i < to; i++, j++) {
-                assertEquals("expected = " + expected[j] + ", actual = " + actual[i],
-                        Float.floatToRawIntBits(actual[i]),
-                        Float.floatToRawIntBits(expected[j]));
+                assertEquals("expected float = " + expected[j] + ", actual float = " + actual[i],
+                        Float.floatToRawIntBits(expected[j]),
+                        Float.floatToRawIntBits(actual[i]));
             }
         }
 
@@ -462,6 +470,50 @@
         mao.check0();
     }
 
+    @Test (expected = NullPointerException.class)
+    public void testAddNullArrayChangeListener() {
+        try {
+            array.addListener((ArrayChangeListener) null);
+        } finally {
+            mao.check0();
+            array.resize(1);
+            mao.check1();
+        }
+    }
+
+    @Test (expected = NullPointerException.class)
+    public void testAddNullInvalidationListener() {
+        try {
+            array.addListener((InvalidationListener) null);
+        } finally {
+            mao.check0();
+            array.resize(1);
+            mao.check1();
+        }
+    }
+
+    @Test (expected = NullPointerException.class)
+    public void testRemoveNullArrayChangeListener() {
+        try {
+            array.removeListener((ArrayChangeListener) null);
+        } finally {
+            mao.check0();
+            array.resize(1);
+            mao.check1();
+        }
+    }
+
+    @Test (expected = NullPointerException.class)
+    public void testRemoveNullInvalidationListener() {
+        try {
+            array.removeListener((InvalidationListener) null);
+        } finally {
+            mao.check0();
+            array.resize(1);
+            mao.check1();
+        }
+    }
+
     // ========== resize tests ==========
 
     private void testResize(boolean noChange, int newSize, int matchingElements) {
@@ -476,6 +528,8 @@
         assertEquals(newSize, array.size());
         assertEquals(newSize, wrapper.arrayLength(actual));
         wrapper.assertElementsEqual(actual, 0, matchingElements, expected, 0);
+        wrapper.assertElementsEqual(actual, matchingElements, newSize,
+                wrapper.createPrimitiveArray(Math.max(0, newSize - matchingElements), false), 0);
     }
 
     @Test public void testResizeTo0() {
@@ -2189,7 +2243,7 @@
             assertUnchanged();
         }
     }
-    
+
     @Test (expected = ArrayIndexOutOfBoundsException.class)
     public void testCopyToANegativeAfterEnsureCapacity() {
         array.ensureCapacity(INITIAL_SIZE * 2);
@@ -2524,7 +2578,7 @@
         mao.reset();
 
         array.trimToSize();
-        
+
         assertUnchanged();
     }
 
--- a/javafx-builders/src/javafx/animation/AnimationBuilder.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-builders/src/javafx/animation/AnimationBuilder.java	Tue Jun 04 09:43:48 2013 -0700
@@ -29,6 +29,7 @@
 Builder class for javafx.animation.Animation
 @see javafx.animation.Animation
 @deprecated This class is deprecated and will be removed in the next version
+* @since JavaFX 2.0
 */
 @javax.annotation.Generated("Generated by javafx.builder.processor.BuilderProcessor")
 @Deprecated
--- a/javafx-builders/src/javafx/animation/FadeTransitionBuilder.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-builders/src/javafx/animation/FadeTransitionBuilder.java	Tue Jun 04 09:43:48 2013 -0700
@@ -29,6 +29,7 @@
 Builder class for javafx.animation.FadeTransition
 @see javafx.animation.FadeTransition
 @deprecated This class is deprecated and will be removed in the next version
+* @since JavaFX 2.0
 */
 @javax.annotation.Generated("Generated by javafx.builder.processor.BuilderProcessor")
 @Deprecated
--- a/javafx-builders/src/javafx/animation/FillTransitionBuilder.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-builders/src/javafx/animation/FillTransitionBuilder.java	Tue Jun 04 09:43:48 2013 -0700
@@ -29,6 +29,7 @@
 Builder class for javafx.animation.FillTransition
 @see javafx.animation.FillTransition
 @deprecated This class is deprecated and will be removed in the next version
+* @since JavaFX 2.0
 */
 @javax.annotation.Generated("Generated by javafx.builder.processor.BuilderProcessor")
 @Deprecated
--- a/javafx-builders/src/javafx/animation/ParallelTransitionBuilder.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-builders/src/javafx/animation/ParallelTransitionBuilder.java	Tue Jun 04 09:43:48 2013 -0700
@@ -29,6 +29,7 @@
 Builder class for javafx.animation.ParallelTransition
 @see javafx.animation.ParallelTransition
 @deprecated This class is deprecated and will be removed in the next version
+* @since JavaFX 2.0
 */
 @javax.annotation.Generated("Generated by javafx.builder.processor.BuilderProcessor")
 @Deprecated
--- a/javafx-builders/src/javafx/animation/PathTransitionBuilder.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-builders/src/javafx/animation/PathTransitionBuilder.java	Tue Jun 04 09:43:48 2013 -0700
@@ -29,6 +29,7 @@
 Builder class for javafx.animation.PathTransition
 @see javafx.animation.PathTransition
 @deprecated This class is deprecated and will be removed in the next version
+* @since JavaFX 2.0
 */
 @javax.annotation.Generated("Generated by javafx.builder.processor.BuilderProcessor")
 @Deprecated
--- a/javafx-builders/src/javafx/animation/PauseTransitionBuilder.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-builders/src/javafx/animation/PauseTransitionBuilder.java	Tue Jun 04 09:43:48 2013 -0700
@@ -29,6 +29,7 @@
 Builder class for javafx.animation.PauseTransition
 @see javafx.animation.PauseTransition
 @deprecated This class is deprecated and will be removed in the next version
+* @since JavaFX 2.0
 */
 @javax.annotation.Generated("Generated by javafx.builder.processor.BuilderProcessor")
 @Deprecated
--- a/javafx-builders/src/javafx/animation/RotateTransitionBuilder.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-builders/src/javafx/animation/RotateTransitionBuilder.java	Tue Jun 04 09:43:48 2013 -0700
@@ -29,6 +29,7 @@
 Builder class for javafx.animation.RotateTransition
 @see javafx.animation.RotateTransition
 @deprecated This class is deprecated and will be removed in the next version
+* @since JavaFX 2.0
 */
 @javax.annotation.Generated("Generated by javafx.builder.processor.BuilderProcessor")
 @Deprecated
--- a/javafx-builders/src/javafx/animation/ScaleTransitionBuilder.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-builders/src/javafx/animation/ScaleTransitionBuilder.java	Tue Jun 04 09:43:48 2013 -0700
@@ -29,6 +29,7 @@
 Builder class for javafx.animation.ScaleTransition
 @see javafx.animation.ScaleTransition
 @deprecated This class is deprecated and will be removed in the next version
+* @since JavaFX 2.0
 */
 @javax.annotation.Generated("Generated by javafx.builder.processor.BuilderProcessor")
 @Deprecated
--- a/javafx-builders/src/javafx/animation/SequentialTransitionBuilder.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-builders/src/javafx/animation/SequentialTransitionBuilder.java	Tue Jun 04 09:43:48 2013 -0700
@@ -29,6 +29,7 @@
 Builder class for javafx.animation.SequentialTransition
 @see javafx.animation.SequentialTransition
 @deprecated This class is deprecated and will be removed in the next version
+* @since JavaFX 2.0
 */
 @javax.annotation.Generated("Generated by javafx.builder.processor.BuilderProcessor")
 @Deprecated
--- a/javafx-builders/src/javafx/animation/StrokeTransitionBuilder.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-builders/src/javafx/animation/StrokeTransitionBuilder.java	Tue Jun 04 09:43:48 2013 -0700
@@ -29,6 +29,7 @@
 Builder class for javafx.animation.StrokeTransition
 @see javafx.animation.StrokeTransition
 @deprecated This class is deprecated and will be removed in the next version
+* @since JavaFX 2.0
 */
 @javax.annotation.Generated("Generated by javafx.builder.processor.BuilderProcessor")
 @Deprecated
--- a/javafx-builders/src/javafx/animation/TimelineBuilder.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-builders/src/javafx/animation/TimelineBuilder.java	Tue Jun 04 09:43:48 2013 -0700
@@ -29,6 +29,7 @@
 Builder class for javafx.animation.Timeline
 @see javafx.animation.Timeline
 @deprecated This class is deprecated and will be removed in the next version
+* @since JavaFX 2.0
 */
 @javax.annotation.Generated("Generated by javafx.builder.processor.BuilderProcessor")
 @Deprecated
--- a/javafx-builders/src/javafx/animation/TransitionBuilder.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-builders/src/javafx/animation/TransitionBuilder.java	Tue Jun 04 09:43:48 2013 -0700
@@ -29,6 +29,7 @@
 Builder class for javafx.animation.Transition
 @see javafx.animation.Transition
 @deprecated This class is deprecated and will be removed in the next version
+* @since JavaFX 2.0
 */
 @javax.annotation.Generated("Generated by javafx.builder.processor.BuilderProcessor")
 @Deprecated
--- a/javafx-builders/src/javafx/animation/TranslateTransitionBuilder.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-builders/src/javafx/animation/TranslateTransitionBuilder.java	Tue Jun 04 09:43:48 2013 -0700
@@ -29,6 +29,7 @@
 Builder class for javafx.animation.TranslateTransition
 @see javafx.animation.TranslateTransition
 @deprecated This class is deprecated and will be removed in the next version
+* @since JavaFX 2.0
 */
 @javax.annotation.Generated("Generated by javafx.builder.processor.BuilderProcessor")
 @Deprecated
--- a/javafx-builders/src/javafx/embed/swing/JFXPanelBuilder.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-builders/src/javafx/embed/swing/JFXPanelBuilder.java	Tue Jun 04 09:43:48 2013 -0700
@@ -29,6 +29,7 @@
 Builder class for javafx.embed.swing.JFXPanel
 @see javafx.embed.swing.JFXPanel
 @deprecated This class is deprecated and will be removed in the next version
+* @since JavaFX 2.0
 */
 @javax.annotation.Generated("Generated by javafx.builder.processor.BuilderProcessor")
 @Deprecated
--- a/javafx-builders/src/javafx/embed/swt/CustomTransferBuilder.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-builders/src/javafx/embed/swt/CustomTransferBuilder.java	Tue Jun 04 09:43:48 2013 -0700
@@ -29,6 +29,7 @@
 Builder class for javafx.embed.swt.CustomTransfer
 @see javafx.embed.swt.CustomTransfer
 @deprecated This class is deprecated and will be removed in the next version
+* @since JavaFX 2.2
 */
 @javax.annotation.Generated("Generated by javafx.builder.processor.BuilderProcessor")
 @Deprecated
--- a/javafx-builders/src/javafx/geometry/BoundingBoxBuilder.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-builders/src/javafx/geometry/BoundingBoxBuilder.java	Tue Jun 04 09:43:48 2013 -0700
@@ -29,6 +29,7 @@
 Builder class for javafx.geometry.BoundingBox
 @see javafx.geometry.BoundingBox
 @deprecated This class is deprecated and will be removed in the next version
+* @since JavaFX 2.0
 */
 @javax.annotation.Generated("Generated by javafx.builder.processor.BuilderProcessor")
 @Deprecated
--- a/javafx-builders/src/javafx/geometry/Dimension2DBuilder.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-builders/src/javafx/geometry/Dimension2DBuilder.java	Tue Jun 04 09:43:48 2013 -0700
@@ -29,6 +29,7 @@
 Builder class for javafx.geometry.Dimension2D
 @see javafx.geometry.Dimension2D
 @deprecated This class is deprecated and will be removed in the next version
+* @since JavaFX 2.0
 */
 @javax.annotation.Generated("Generated by javafx.builder.processor.BuilderProcessor")
 @Deprecated
--- a/javafx-builders/src/javafx/geometry/InsetsBuilder.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-builders/src/javafx/geometry/InsetsBuilder.java	Tue Jun 04 09:43:48 2013 -0700
@@ -29,6 +29,7 @@
 Builder class for javafx.geometry.Insets
 @see javafx.geometry.Insets
 @deprecated This class is deprecated and will be removed in the next version
+* @since JavaFX 2.0
 */
 @javax.annotation.Generated("Generated by javafx.builder.processor.BuilderProcessor")
 @Deprecated
--- a/javafx-builders/src/javafx/geometry/Point2DBuilder.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-builders/src/javafx/geometry/Point2DBuilder.java	Tue Jun 04 09:43:48 2013 -0700
@@ -29,6 +29,7 @@
 Builder class for javafx.geometry.Point2D
 @see javafx.geometry.Point2D
 @deprecated This class is deprecated and will be removed in the next version
+* @since JavaFX 2.0
 */
 @javax.annotation.Generated("Generated by javafx.builder.processor.BuilderProcessor")
 @Deprecated
--- a/javafx-builders/src/javafx/geometry/Point3DBuilder.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-builders/src/javafx/geometry/Point3DBuilder.java	Tue Jun 04 09:43:48 2013 -0700
@@ -29,6 +29,7 @@
 Builder class for javafx.geometry.Point3D
 @see javafx.geometry.Point3D
 @deprecated This class is deprecated and will be removed in the next version
+* @since JavaFX 2.0
 */
 @javax.annotation.Generated("Generated by javafx.builder.processor.BuilderProcessor")
 @Deprecated
--- a/javafx-builders/src/javafx/geometry/Rectangle2DBuilder.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-builders/src/javafx/geometry/Rectangle2DBuilder.java	Tue Jun 04 09:43:48 2013 -0700
@@ -29,6 +29,7 @@
 Builder class for javafx.geometry.Rectangle2D
 @see javafx.geometry.Rectangle2D
 @deprecated This class is deprecated and will be removed in the next version
+* @since JavaFX 2.0
 */
 @javax.annotation.Generated("Generated by javafx.builder.processor.BuilderProcessor")
 @Deprecated
--- a/javafx-builders/src/javafx/scene/GroupBuilder.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-builders/src/javafx/scene/GroupBuilder.java	Tue Jun 04 09:43:48 2013 -0700
@@ -29,6 +29,7 @@
 Builder class for javafx.scene.Group
 @see javafx.scene.Group
 @deprecated This class is deprecated and will be removed in the next version
+* @since JavaFX 2.0
 */
 @javax.annotation.Generated("Generated by javafx.builder.processor.BuilderProcessor")
 @Deprecated
--- a/javafx-builders/src/javafx/scene/ImageCursorBuilder.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-builders/src/javafx/scene/ImageCursorBuilder.java	Tue Jun 04 09:43:48 2013 -0700
@@ -29,6 +29,7 @@
 Builder class for javafx.scene.ImageCursor
 @see javafx.scene.ImageCursor
 @deprecated This class is deprecated and will be removed in the next version
+* @since JavaFX 2.0
 */
 @javax.annotation.Generated("Generated by javafx.builder.processor.BuilderProcessor")
 @Deprecated
--- a/javafx-builders/src/javafx/scene/NodeBuilder.java	Mon Jun 03 10:53:52 2013 -0700
+++ b/javafx-builders/src/javafx/scene/NodeBuilder.java	Tue Jun 04 09:43:48 2013 -0700
@@ -29,6 +29,7 @@
 Builder class for javafx.scene.Node
 @see javafx.scene.Node
 @deprecated This class is deprecated and will be removed in the next version
+* @since JavaFX 2.0
 */
 @javax.annotation.Generated("Generated by javafx.builder.processor.BuilderProcessor")
 @Deprecated
@@ -298,6 +299,7 @@
     private javafx.event.EventHandler<? super javafx.scene.input.ContextMenuEvent> onContextMenuRequested;
     /**
     Set the value of the {@link javafx.scene.Node#getOnContextMenuRequested() onContextMenuRequested} property for the instance constructed by this builder.
+    * @since JavaFX 2.1
     */
     @SuppressWarnings("unchecked")
     public B onContextMenuRequested(javafx.event.EventHandler<? super javafx.scene.input.ContextMenuEvent> x) {
@@ -430,6 +432,7 @@
     private javafx.event.EventHandler<? super javafx.scene.input.MouseDragEvent> onMouseDragEntered;
     /**
     Set the value of the {@link javafx.scene.Node#getOnMouseDragEntered() onMouseDragEntered} property for the instance constructed by this builder.
+    * @since JavaFX 2.1
     */
     @SuppressWarnings("unchecked")
     public B onMouseDragEntered(javafx.event.EventHandler<? super javafx.scene.input.MouseDragEvent> x) {
@@ -441,6 +444,7 @@
     private javafx.event.EventHandler<? super javafx.scene.input.MouseDragEvent> onMouseDragExited;
     /**
     Set the value of the {@link javafx.scene.Node#getOnMouseDragExited() onMouseDragExited} property for the instance constructed by this builder.
+    * @since JavaFX 2.1
     */
     @SuppressWarnings("unchecked")
     public B onMouseDragExited(javafx.event.EventHandler<? super javafx.scene.input.MouseDragEvent> x) {
@@ -463,6 +467,7 @@
     private javafx.event.EventHandler<? super javafx.scene.input.MouseDragEvent> onMouseDragOver;
     /**
     Set the value of the {@link javafx.scene.Node#getOnMouseDragOver() onMouseDragOver} property for the instance constructed by this builder.
+    * @since JavaFX 2.1
     */
     @SuppressWarnings("unchecked")
     public B onMouseDragOver(javafx.event.EventHandler<? super javafx.scene.input.MouseDragEvent> x) {
@@ -474,6 +479,7 @@
     private javafx.event.EventHandler<? super javafx.scene.input.MouseDragEvent> onMouseDragReleased;
     /**
     Set the value of the {@link javafx.scene.Node#getOnMouseDragReleased() onMouseDragReleased} property for the instance constructed by this builder.
+    * @since JavaFX 2.1
     */
     @SuppressWarnings("unchecked")
     public B onMouseDragReleased(javafx.event.EventHandler<? super javafx.scene.input.MouseDragEvent> x) {
@@ -540,6 +546,7 @@
     private javafx.event.EventHandler<? super javafx.scene.input.RotateEvent> onRotate;
     /**
     Set the value of the {@link javafx.scene.Node#getOnRotate() onRotate} property for the instance constructed by this builder.
+    * @since JavaFX 2.2
     */
     @SuppressWarnings("unchecked")
     public B onRotate(javafx.event.EventHandler<? super javafx.scene.input.RotateEvent> x) {
@@ -551,6 +558,7 @@
     private javafx.event.EventHandler<? super javafx.scene.input.RotateEvent> onRotationFinished;
     /**
     Set the value of the {@link javafx.scene.Node#getOnRotationFinished() onRotationFinished} property for the instance constructed by this builder.
+    * @since JavaFX 2.2
     */
     @SuppressWarnings("unchecked")
     public B onRotationFinished(javafx.event.EventHandler<? super javafx.scene.input.RotateEvent> x) {
@@ -562,6 +570,7 @@
     private javafx.event.EventHandler<? super javafx.scene.input.RotateEvent> onRotationStarted;
     /**
     Set the value of the {@link javafx.scene.Node#getOnRotationStarted() onRotationStarted} property for the instance constructed by this builder.
+    * @since JavaFX 2.2
     */
     @SuppressWarnings("unchecked")
     public B onRotationStarted(javafx.event.EventHandler<? super javafx.scene.input.RotateEvent> x) {
@@ -584,6 +593,7 @@
     private javafx.event.EventHandler<? super javafx.scene.input.ScrollEvent> onScrollFinished;
     /**
     Set the value of the {@link javafx.scene.Node#getOnScrollFinished() onScrollFinished} property for the instance constructed by this builder.
+    * @since JavaFX 2.2
     */
     @SuppressWarnings("unchecked")
     public B onScrollFinished(javafx.event.EventHandler<? super javafx.scene.input.ScrollEvent> x) {