changeset 6393:29bfa7536f04

Automated merge with ssh://jfxsrc.us.oracle.com//javafx/8u/master/jfx/rt
author kcr
date Thu, 27 Feb 2014 16:56:48 -0800
parents 76d1ce5ed6f4 9fc1d65de074
children 63431cee20ce
files modules/graphics/src/main/java/com/sun/javafx/css/parser/SimpleRecognizer.java modules/graphics/src/main/java/com/sun/scenario/effect/impl/state/LinearConvolvePeer.java modules/graphics/src/main/java/com/sun/scenario/effect/impl/state/LinearConvolveShadowPeer.java
diffstat 291 files changed, 8496 insertions(+), 5901 deletions(-) [+]
line wrap: on
line diff
--- a/.idea/3DViewer.iml	Wed Feb 26 08:22:40 2014 -0800
+++ b/.idea/3DViewer.iml	Thu Feb 27 16:56:48 2014 -0800
@@ -17,20 +17,11 @@
       <sourceFolder url="file://$MODULE_DIR$/apps/experiments/3DViewer/src/test/java" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/apps/experiments/3DViewer/src/test/resources" isTestSource="true" />
       <excludeFolder url="file://$MODULE_DIR$/apps/experiments/3DViewer/build" />
+      <excludeFolder url="file://$MODULE_DIR$/apps/experiments/3DViewer/nbproject" />
     </content>
     <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="module-library">
-      <library name="3DViewer.jar">
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/apps/experiments/3DViewer/build/libs/3DViewer.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
     <orderEntry type="module" module-name="rt" />
     <orderEntry type="inheritedJdk" />
-    <orderEntry type="module" module-name="builders" />
   </component>
 </module>
 
--- a/.idea/Ensemble8.iml	Wed Feb 26 08:22:40 2014 -0800
+++ b/.idea/Ensemble8.iml	Thu Feb 27 16:56:48 2014 -0800
@@ -24,8 +24,19 @@
       <sourceFolder url="file://$MODULE_DIR$/apps/samples/Ensemble8/src/generated/java" isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/apps/samples/Ensemble8/src/generated/resources" isTestSource="false" />
       <excludeFolder url="file://$MODULE_DIR$/apps/samples/Ensemble8/build" />
+      <excludeFolder url="file://$MODULE_DIR$/apps/samples/Ensemble8/nbproject" />
     </content>
     <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module" module-name="rt" />
+    <orderEntry type="module-library">
+      <library name="lucene-grouping-3.2.0.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/apps/samples/Ensemble8/lib/lucene-grouping-3.2.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
     <orderEntry type="module-library">
       <library name="lucene-core-3.2.0.jar">
         <CLASSES>
@@ -36,18 +47,6 @@
       </library>
     </orderEntry>
     <orderEntry type="module-library">
-      <library name="lucene-grouping-3.2.0.jar">
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/apps/samples/Ensemble8/lib/lucene-grouping-3.2.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module" module-name="rt" />
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="module" module-name="builders" />
-    <orderEntry type="module-library">
       <library>
         <CLASSES>
           <root url="jar://$MODULE_DIR$/../caches/sdk/rt/lib/ext/jfxrt.jar!/" />
@@ -56,6 +55,7 @@
         <SOURCES />
       </library>
     </orderEntry>
+    <orderEntry type="inheritedJdk" />
   </component>
 </module>
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.idea/FX8-3DFeatures.iml	Thu Feb 27 16:56:48 2014 -0800
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$/apps/toys/FX8-3DFeatures">
+      <sourceFolder url="file://$MODULE_DIR$/apps/toys/FX8-3DFeatures/src" isTestSource="false" />
+    </content>
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module" module-name="rt" />
+    <orderEntry type="inheritedJdk" />
+  </component>
+</module>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.idea/FXSlideShow.iml	Thu Feb 27 16:56:48 2014 -0800
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$/apps/toys/FXSlideShow">
+      <sourceFolder url="file://$MODULE_DIR$/apps/toys/FXSlideShow/src" isTestSource="false" />
+      <excludeFolder url="file://$MODULE_DIR$/apps/toys/FXSlideShow/nbproject" />
+    </content>
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module" module-name="rt" />
+    <orderEntry type="inheritedJdk" />
+  </component>
+</module>
+
--- a/.idea/GraphicsPerformance.iml	Wed Feb 26 08:22:40 2014 -0800
+++ b/.idea/GraphicsPerformance.iml	Thu Feb 27 16:56:48 2014 -0800
@@ -7,11 +7,6 @@
       <sourceFolder url="file://$MODULE_DIR$/apps/performance/GraphicsPerformance/src/main/resources" isTestSource="false" />
     </content>
     <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="module" module-name="base" />
-    <orderEntry type="module" module-name="controls" />
-    <orderEntry type="module" module-name="fxml" />
-    <orderEntry type="module" module-name="fxpackager" />
-    <orderEntry type="module" module-name="graphics" />
     <orderEntry type="module" module-name="rt" />
     <orderEntry type="inheritedJdk" />
   </component>
--- a/.idea/Hello.iml	Wed Feb 26 08:22:40 2014 -0800
+++ b/.idea/Hello.iml	Thu Feb 27 16:56:48 2014 -0800
@@ -6,14 +6,7 @@
       <sourceFolder url="file://$MODULE_DIR$/apps/toys/Hello/src/main/java" isTestSource="false" />
     </content>
     <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="module" module-name="base" />
-    <orderEntry type="module" module-name="controls" />
-    <orderEntry type="module" module-name="fxml" />
-    <orderEntry type="module" module-name="graphics" />
-    <orderEntry type="module" module-name="media" />
-    <orderEntry type="module" module-name="swing" />
-    <orderEntry type="module" module-name="swt" />
-    <orderEntry type="module" module-name="web" />
+    <orderEntry type="module" module-name="rt" />
     <orderEntry type="inheritedJdk" />
   </component>
 </module>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.idea/MandelbrotSet.iml	Thu Feb 27 16:56:48 2014 -0800
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$/apps/samples/MandelbrotSet">
+      <sourceFolder url="file://$MODULE_DIR$/apps/samples/MandelbrotSet/src" isTestSource="false" />
+      <excludeFolder url="file://$MODULE_DIR$/apps/samples/MandelbrotSet/nbproject" />
+    </content>
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module" module-name="rt" />
+    <orderEntry type="inheritedJdk" />
+  </component>
+</module>
+
--- a/.idea/Shape3DToy.iml	Wed Feb 26 08:22:40 2014 -0800
+++ b/.idea/Shape3DToy.iml	Thu Feb 27 16:56:48 2014 -0800
@@ -7,14 +7,7 @@
       <sourceFolder url="file://$MODULE_DIR$/apps/toys/Shape3DToy/src/main/resources" isTestSource="false" />
     </content>
     <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="module" module-name="base" />
-    <orderEntry type="module" module-name="controls" />
-    <orderEntry type="module" module-name="fxml" />
-    <orderEntry type="module" module-name="graphics" />
-    <orderEntry type="module" module-name="media" />
-    <orderEntry type="module" module-name="swing" />
-    <orderEntry type="module" module-name="swt" />
-    <orderEntry type="module" module-name="web" />
+    <orderEntry type="module" module-name="rt" />
     <orderEntry type="inheritedJdk" />
   </component>
 </module>
--- a/.idea/StretchyGrid.iml	Wed Feb 26 08:22:40 2014 -0800
+++ b/.idea/StretchyGrid.iml	Thu Feb 27 16:56:48 2014 -0800
@@ -6,8 +6,7 @@
       <sourceFolder url="file://$MODULE_DIR$/apps/toys/StretchyGrid/src/main/java" isTestSource="false" />
     </content>
     <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="module" module-name="base" />
-    <orderEntry type="module" module-name="graphics" />
+    <orderEntry type="module" module-name="rt" />
     <orderEntry type="inheritedJdk" />
   </component>
 </module>
--- a/.idea/SystemTests.iml	Wed Feb 26 08:22:40 2014 -0800
+++ b/.idea/SystemTests.iml	Thu Feb 27 16:56:48 2014 -0800
@@ -5,17 +5,10 @@
     <content url="file://$MODULE_DIR$/tests/system">
       <sourceFolder url="file://$MODULE_DIR$/tests/system/src/test/java" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/tests/system/src/test/resources" isTestSource="true" />
+      <excludeFolder url="file://$MODULE_DIR$/tests/system/build" />
     </content>
     <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="module" module-name="base" />
-    <orderEntry type="module" module-name="buildSrc" />
-    <orderEntry type="module" module-name="controls" />
-    <orderEntry type="module" module-name="fxml" />
-    <orderEntry type="module" module-name="graphics" />
-    <orderEntry type="module" module-name="media" />
-    <orderEntry type="module" module-name="swing" />
-    <orderEntry type="module" module-name="swt" />
-    <orderEntry type="module" module-name="web" />
+    <orderEntry type="module" module-name="rt" />
     <orderEntry type="inheritedJdk" />
   </component>
 </module>
--- a/.idea/modules.xml	Wed Feb 26 08:22:40 2014 -0800
+++ b/.idea/modules.xml	Thu Feb 27 16:56:48 2014 -0800
@@ -4,8 +4,11 @@
     <modules>
       <module fileurl="file://$PROJECT_DIR$/.idea/3DViewer.iml" filepath="$PROJECT_DIR$/.idea/3DViewer.iml" />
       <module fileurl="file://$PROJECT_DIR$/.idea/Ensemble8.iml" filepath="$PROJECT_DIR$/.idea/Ensemble8.iml" />
+      <module fileurl="file://$PROJECT_DIR$/.idea/FX8-3DFeatures.iml" filepath="$PROJECT_DIR$/.idea/FX8-3DFeatures.iml" />
+      <module fileurl="file://$PROJECT_DIR$/.idea/FXSlideShow.iml" filepath="$PROJECT_DIR$/.idea/FXSlideShow.iml" />
       <module fileurl="file://$PROJECT_DIR$/.idea/GraphicsPerformance.iml" filepath="$PROJECT_DIR$/.idea/GraphicsPerformance.iml" />
       <module fileurl="file://$PROJECT_DIR$/.idea/Hello.iml" filepath="$PROJECT_DIR$/.idea/Hello.iml" />
+      <module fileurl="file://$PROJECT_DIR$/.idea/MandelbrotSet.iml" filepath="$PROJECT_DIR$/.idea/MandelbrotSet.iml" />
       <module fileurl="file://$PROJECT_DIR$/.idea/Modena.iml" filepath="$PROJECT_DIR$/.idea/Modena.iml" />
       <module fileurl="file://$PROJECT_DIR$/.idea/Shape3DToy.iml" filepath="$PROJECT_DIR$/.idea/Shape3DToy.iml" />
       <module fileurl="file://$PROJECT_DIR$/.idea/StretchyGrid.iml" filepath="$PROJECT_DIR$/.idea/StretchyGrid.iml" />
--- a/apps/samples/Ensemble8/nbproject/project.properties	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/nbproject/project.properties	Thu Feb 27 16:56:48 2014 -0800
@@ -45,8 +45,8 @@
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.7
-javac.target=1.7
+javac.source=1.8
+javac.target=1.8
 javac.test.classpath=\
     ${javac.classpath}:\
     ${build.classes.dir}
--- a/apps/samples/Ensemble8/src/app/java/ensemble/DocsPage.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/app/java/ensemble/DocsPage.java	Thu Feb 27 16:56:48 2014 -0800
@@ -134,10 +134,8 @@
                 sampleButton.getStyleClass().setAll("sample-button");
                 sampleButton.setGraphic(sample.getMediumPreview());
                 sampleButton.setContentDisplay(ContentDisplay.TOP);
-                sampleButton.setOnAction(new EventHandler<ActionEvent>() {
-                    @Override public void handle(ActionEvent actionEvent) {
-                        pageBrowser.goToSample(sample);
-                    }
+                sampleButton.setOnAction((ActionEvent actionEvent) -> {
+                    pageBrowser.goToSample(sample);
                 });
                 sideBar.getChildren().add(sampleButton);
             }
--- a/apps/samples/Ensemble8/src/app/java/ensemble/EnsembleApp.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/app/java/ensemble/EnsembleApp.java	Thu Feb 27 16:56:48 2014 -0800
@@ -195,22 +195,16 @@
         root.getChildren().add(0, pageBrowser);
         pageBrowser.goHome();
         // wire nav buttons
-        backButton.setOnAction(new EventHandler<ActionEvent>() {
-            @Override public void handle(ActionEvent event) {
-                pageBrowser.backward();
-            }
+        backButton.setOnAction((ActionEvent event) -> {
+            pageBrowser.backward();
         });
         backButton.disableProperty().bind(pageBrowser.backPossibleProperty().not());
-        forwardButton.setOnAction(new EventHandler<ActionEvent>() {
-            @Override public void handle(ActionEvent event) {
-                pageBrowser.forward();
-            }
+        forwardButton.setOnAction((ActionEvent event) -> {
+            pageBrowser.forward();
         });
         forwardButton.disableProperty().bind(pageBrowser.forwardPossibleProperty().not());
-        homeButton.setOnAction(new EventHandler<ActionEvent>() {
-            @Override public void handle(ActionEvent event) {
-                pageBrowser.goHome();
-            }
+        homeButton.setOnAction((ActionEvent event) -> {
+            pageBrowser.goHome();
         });
         homeButton.disableProperty().bind(pageBrowser.atHomeProperty());
         
@@ -219,19 +213,15 @@
         sampleListPopover.setPrefWidth(440);
         root.getChildren().add(sampleListPopover);
         final SamplePopoverTreeList rootPage = new SamplePopoverTreeList(Samples.ROOT,pageBrowser);
-        listButton.setOnMouseClicked(new EventHandler<MouseEvent>() {
-            @Override public void handle(MouseEvent e) {
-                if (sampleListPopover.isVisible()) {
-                    sampleListPopover.hide();
-                } else {
-                    sampleListPopover.clearPages();
-                    sampleListPopover.pushPage(rootPage);
-                    sampleListPopover.show(new Runnable() {
-                        @Override public void run() {
-                            listButton.setSelected(false);
-                        }
-                    });
-                }
+        listButton.setOnMouseClicked((MouseEvent e) -> {
+            if (sampleListPopover.isVisible()) {
+                sampleListPopover.hide();
+            } else {
+                sampleListPopover.clearPages();
+                sampleListPopover.pushPage(rootPage);
+                sampleListPopover.show(() -> {
+                    listButton.setSelected(false);
+                });
             }
         });
         
@@ -268,11 +258,8 @@
                         } else {
                             sampleListPopover.clearPages();
                             sampleListPopover.pushPage(rootPage);
-                            sampleListPopover.show(new Runnable() {
-                                @Override
-                                public void run() {
-                                    listButton.setSelected(false);
-                                }
+                            sampleListPopover.show(() -> {
+                                listButton.setSelected(false);
                             });
                         }
                         event.consume();
@@ -289,31 +276,29 @@
     private RadioMenuItem screenSizeMenuItem(String text, final int width, final int height, final boolean retina, ToggleGroup tg) {
         RadioMenuItem radioMenuItem = new RadioMenuItem(text + " " + width + "x" + height);
         radioMenuItem.setToggleGroup(tg);
-        radioMenuItem.setOnAction(new EventHandler<ActionEvent>() {
-            @Override public void handle(ActionEvent t) {
-                double menuHeight = IS_IOS || IS_MAC || IS_ANDROID ? 0 : menuBar.prefHeight(width);
-                scene.getWindow().setWidth(width + scene.getWindow().getWidth() - scene.getWidth());
-                scene.getWindow().setHeight(height + menuHeight + scene.getWindow().getHeight() - scene.getHeight());
-                if (retina) {
-                    Parent root = scene.getRoot();
-                    if (root instanceof Pane) {
-                        Group newRoot = new Group();
-                        newRoot.setAutoSizeChildren(false);
-                        scene.setRoot(newRoot);
-                        newRoot.getChildren().add(root);
-                        root.getTransforms().add(new Scale(2, 2, 0, 0));
-                        root.resize(width/2, height/2);
-                    } else {
-                        root.getChildrenUnmodifiable().get(0).resize(width/2, height/2);
-                    }
+        radioMenuItem.setOnAction((ActionEvent t) -> {
+            double menuHeight = IS_IOS || IS_MAC || IS_ANDROID ? 0 : menuBar.prefHeight(width);
+            scene.getWindow().setWidth(width + scene.getWindow().getWidth() - scene.getWidth());
+            scene.getWindow().setHeight(height + menuHeight + scene.getWindow().getHeight() - scene.getHeight());
+            if (retina) {
+                Parent root = scene.getRoot();
+                if (root instanceof Pane) {
+                    Group newRoot = new Group();
+                    newRoot.setAutoSizeChildren(false);
+                    scene.setRoot(newRoot);
+                    newRoot.getChildren().add(root);
+                    root.getTransforms().add(new Scale(2, 2, 0, 0));
+                    root.resize(width/2, height/2);
                 } else {
-                    Parent root = scene.getRoot();
-                    if (root instanceof Group) {
-                        Pane oldRoot = (Pane)root.getChildrenUnmodifiable().get(0);
-                        ((Group)root).getChildren().clear();
-                        oldRoot.getTransforms().clear();
-                        scene.setRoot(oldRoot);
-                    }
+                    root.getChildrenUnmodifiable().get(0).resize(width/2, height/2);
+                }
+            } else {
+                Parent root = scene.getRoot();
+                if (root instanceof Group) {
+                    Pane oldRoot = (Pane)root.getChildrenUnmodifiable().get(0);
+                    ((Group)root).getChildren().clear();
+                    oldRoot.getTransforms().clear();
+                    scene.setRoot(oldRoot);
                 }
             }
         });
@@ -323,36 +308,26 @@
     private void setStylesheets() {
         final String EXTERNAL_STYLESHEET = "http://fonts.googleapis.com/css?family=Source+Sans+Pro:200,300,400,600";
         scene.getStylesheets().setAll("/ensemble/EnsembleStylesCommon.css");
-        Thread backgroundThread = new Thread(new Runnable() {
-            
-            @Override
-            public void run() {
-                try {
-                    URL url = new URL(EXTERNAL_STYLESHEET);
-                    try (
-                            ReadableByteChannel rbc = Channels.newChannel(url.openStream());
-                            Reader newReader = Channels.newReader(rbc, "ISO-8859-1");
-                            BufferedReader bufferedReader = new BufferedReader(newReader)
-                            ) {
-                        // Checking whether we can read a line from this url
-                        // without exception
-                        bufferedReader.readLine();
-                    }
-                    Platform.runLater(new Runnable() {
-
-                        @Override
-                        public void run() {
-                            
-                            // when succeeded add this stylesheet to the scene
-                            scene.getStylesheets().add(EXTERNAL_STYLESHEET);
-                        }
-                    });
-                } catch (MalformedURLException ex) {
-                    Logger.getLogger(EnsembleApp.class.getName()).log(Level.FINE, "Failed to load external stylesheet", ex);
-                } catch (IOException ex) {
+        Thread backgroundThread = new Thread(() -> {
+            try {
+                URL url = new URL(EXTERNAL_STYLESHEET);
+                try (
+                        ReadableByteChannel rbc = Channels.newChannel(url.openStream());
+                        Reader newReader = Channels.newReader(rbc, "ISO-8859-1");
+                        BufferedReader bufferedReader = new BufferedReader(newReader)
+                        ) {
+                    // Checking whether we can read a line from this url
+                    // without exception
+                    bufferedReader.readLine();
+                }
+                Platform.runLater(() -> {
+                    scene.getStylesheets().add(EXTERNAL_STYLESHEET);
+                });
+            }catch (MalformedURLException ex) {
+                Logger.getLogger(EnsembleApp.class.getName()).log(Level.FINE, "Failed to load external stylesheet", ex);
+            }catch (IOException ex) {
                     Logger.getLogger(EnsembleApp.class.getName()).log(Level.FINE, "Failed to load external stylesheet", ex);
                 }
-            }
         }, "Trying to reach external styleshet");
         backgroundThread.setDaemon(true);
         backgroundThread.start();
--- a/apps/samples/Ensemble8/src/app/java/ensemble/HomePage.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/app/java/ensemble/HomePage.java	Thu Feb 27 16:56:48 2014 -0800
@@ -271,11 +271,8 @@
                                 sampleButton.setContentDisplay(ContentDisplay.TOP);
                                 sampleButton.setText(sample.name);
                                 sampleButton.setGraphic(sample.getMediumPreview());
-                                sampleButton.setOnAction(new EventHandler<ActionEvent>() {
-                                    
-                                    @Override public void handle(ActionEvent actionEvent) {
-                                        pageBrowser.goToSample(sample);
-                                    }
+                                sampleButton.setOnAction((ActionEvent actionEvent) -> {
+                                    pageBrowser.goToSample(sample);
                                 });
                                 buttonCache.put(sample, sampleButton);
                             }
@@ -300,11 +297,8 @@
             sampleButton.getStyleClass().setAll("sample-button");
             sampleButton.setGraphic(Samples.HIGHLIGHTS[highlightIndex].getLargePreview());
             sampleButton.setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
-            sampleButton.setOnAction(new EventHandler<ActionEvent>() {
-                @Override public void handle(ActionEvent actionEvent) {
-//                    System.out.println("Clicked " + Samples.HIGHLIGHTS[highlightIndex].name);
-                    pageBrowser.goToSample(Samples.HIGHLIGHTS[highlightIndex]);
-                }
+            sampleButton.setOnAction((ActionEvent actionEvent) -> {
+                pageBrowser.goToSample(Samples.HIGHLIGHTS[highlightIndex]);
             });
             return sampleButton;
         }
--- a/apps/samples/Ensemble8/src/app/java/ensemble/SampleInfo.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/app/java/ensemble/SampleInfo.java	Thu Feb 27 16:56:48 2014 -0800
@@ -205,19 +205,16 @@
             final Method fPlay = play;
             final Method fStop = stop;
             
-            root.sceneProperty().addListener(new ChangeListener<Scene>() {
-                @Override
-                public void changed(ObservableValue<? extends Scene> ov, Scene oldScene, Scene newScene) {
-                    try {
-                        if (oldScene != null && fStop != null) {
-                            fStop.invoke(app);
-                        }
-                        if (newScene != null && fPlay != null) {
-                            fPlay.invoke(app);
-                        }
-                    } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) {
-                        Logger.getLogger(SamplePage.class.getName()).log(Level.SEVERE, null, ex);
+            root.sceneProperty().addListener((ObservableValue<? extends Scene> ov, Scene oldScene, Scene newScene) -> {
+                try {
+                    if (oldScene != null && fStop != null) {
+                        fStop.invoke(app);
                     }
+                    if (newScene != null && fPlay != null) {
+                        fPlay.invoke(app);
+                    }
+                } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) {
+                    Logger.getLogger(SamplePage.class.getName()).log(Level.SEVERE, null, ex);
                 }
             });
 
--- a/apps/samples/Ensemble8/src/app/java/ensemble/SearchPopover.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/app/java/ensemble/SearchPopover.java	Thu Feb 27 16:56:48 2014 -0800
@@ -72,39 +72,33 @@
         getStyleClass().add("right-tooth");
         setPrefWidth(600);
         
-        searchBox.textProperty().addListener(new ChangeListener<String>() {
-            @Override public void changed(ObservableValue<? extends String> ov, String t, String t1) {
-                updateResults();
-            }
+        searchBox.textProperty().addListener((ObservableValue<? extends String> ov, String t, String t1) -> {
+            updateResults();
         });
         
-        searchBox.addEventFilter(KeyEvent.ANY, new EventHandler<KeyEvent>() {
-            @Override public void handle(KeyEvent t) {
-                if (t.getCode() == KeyCode.DOWN 
-                        || t.getCode() == KeyCode.UP
-                        || t.getCode() == KeyCode.PAGE_DOWN
-                        || (t.getCode() == KeyCode.HOME && (t.isControlDown() || t.isMetaDown()))
-                        || (t.getCode() == KeyCode.END && (t.isControlDown() || t.isMetaDown()))
-                        || t.getCode() == KeyCode.PAGE_UP) {
-                    searchResultPopoverList.fireEvent(t);
-                    t.consume();
-                } else if (t.getCode() == KeyCode.ENTER) {
-                    t.consume();
-                    if (t.getEventType() == KeyEvent.KEY_PRESSED) {
-                        SearchResult selectedItem = searchResultPopoverList.getSelectionModel().getSelectedItem();
-                        if (selectedItem != null) searchResultPopoverList.itemClicked(selectedItem);
-                    }
+        searchBox.addEventFilter(KeyEvent.ANY, (KeyEvent t) -> {
+            if (t.getCode() == KeyCode.DOWN
+                    || t.getCode() == KeyCode.UP
+                    || t.getCode() == KeyCode.PAGE_DOWN
+                    || (t.getCode() == KeyCode.HOME && (t.isControlDown() || t.isMetaDown()))
+                    || (t.getCode() == KeyCode.END && (t.isControlDown() || t.isMetaDown()))
+                    || t.getCode() == KeyCode.PAGE_UP) {
+                searchResultPopoverList.fireEvent(t);
+                t.consume();
+            } else if (t.getCode() == KeyCode.ENTER) {
+                t.consume();
+                if (t.getEventType() == KeyEvent.KEY_PRESSED) {
+                    SearchResult selectedItem = searchResultPopoverList.getSelectionModel().getSelectedItem();
+                    if (selectedItem != null) searchResultPopoverList.itemClicked(selectedItem);
                 }
             }
         });
         searchResultPopoverList = new SearchResultPopoverList(pageBrowser);
         // if list gets focus then send back to search box
-        searchResultPopoverList.focusedProperty().addListener(new ChangeListener<Boolean>() {
-            @Override public void changed(ObservableValue<? extends Boolean> ov, Boolean t, Boolean hasFocus) {
-                if (hasFocus) {
-                    searchBox.requestFocus();
-                    searchBox.selectPositionCaret(searchBox.getText().length());
-                }
+        searchResultPopoverList.focusedProperty().addListener((ObservableValue<? extends Boolean> ov, Boolean t, Boolean hasFocus) -> {
+            if (hasFocus) {
+                searchBox.requestFocus();
+                searchBox.selectPositionCaret(searchBox.getText().length());
             }
         });
     }
@@ -154,16 +148,10 @@
             searchErrorTooltip.show( searchBox.getScene().getWindow(),x, y);
             searchErrorTooltipHidder = new Timeline();
             searchErrorTooltipHidder.getKeyFrames().add( 
-                new KeyFrame(Duration.seconds(3), 
-                    new EventHandler<ActionEvent>() {
-                        
-                        @Override
-                        public void handle(ActionEvent t) {
-                            searchErrorTooltip.hide();
-                            searchErrorTooltip.setText(null);
-                        }
-                    }
-                )
+                new KeyFrame(Duration.seconds(3), (ActionEvent t) -> {
+                    searchErrorTooltip.hide();
+                    searchErrorTooltip.setText(null);
+            })
             );
             searchErrorTooltipHidder.play();
         } else {
--- a/apps/samples/Ensemble8/src/app/java/ensemble/SearchResultPopoverList.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/app/java/ensemble/SearchResultPopoverList.java	Thu Feb 27 16:56:48 2014 -0800
@@ -206,11 +206,7 @@
             for (SearchResultListCell cell: allCells) {
                 if (cell.isVisible()) visibleCells.add(cell);
             }
-            Collections.sort(visibleCells, new Comparator<Node>() {
-                @Override public int compare(Node o1, Node o2) {
-                    return Double.compare(o1.getLayoutY(), o2.getLayoutY());
-                }
-            });
+            Collections.sort(visibleCells, (Node o1, Node o2) -> Double.compare(o1.getLayoutY(), o2.getLayoutY()));
             
             samplesIcon.setLayoutX(8);
             samplesIcon.resize(24, 24);
@@ -306,24 +302,20 @@
             // many times for any change of cell layout in the list but that 
             // dosn't matter as they will all be batched up by layout machanisim
             // and iconPane.layoutChildren() will only be called once per frame.
-            final ChangeListener<Bounds> boundsChangeListener = new ChangeListener<Bounds>() {
-                @Override public void changed(ObservableValue<? extends Bounds> ov, Bounds t, Bounds t1) {
-                    iconPane.requestLayout();
+            final ChangeListener<Bounds> boundsChangeListener = (ObservableValue<? extends Bounds> ov, Bounds t, Bounds t1) -> {
+                iconPane.requestLayout();
+            };
+            parentProperty().addListener((ObservableValue<? extends Parent> ov, Parent oldParent, Parent newParent) -> {
+                if(oldParent != null) {
+                    oldParent.layoutBoundsProperty().removeListener(boundsChangeListener);
                 }
-            };
-            parentProperty().addListener(new ChangeListener<Parent>() {
-                @Override public void changed(ObservableValue<? extends Parent> ov, Parent oldParent, Parent newParent) {
-                    if(oldParent != null) {
-                        oldParent.layoutBoundsProperty().removeListener(boundsChangeListener);
-                    }
-                    if (newParent != null && newParent.isVisible()) {
-                        iconPane.allCells.add(SearchResultListCell.this);
-                        newParent.layoutBoundsProperty().addListener(boundsChangeListener);
-                    } else {
-                        iconPane.allCells.remove(SearchResultListCell.this);
-                    }
-                    iconPane.requestLayout();
+                if (newParent != null && newParent.isVisible()) {
+                    iconPane.allCells.add(SearchResultListCell.this);
+                    newParent.layoutBoundsProperty().addListener(boundsChangeListener);
+                } else {
+                    iconPane.allCells.remove(SearchResultListCell.this);
                 }
+                iconPane.requestLayout();
             });
         }
 
--- a/apps/samples/Ensemble8/src/app/java/ensemble/control/BendingPages.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/app/java/ensemble/control/BendingPages.java	Thu Feb 27 16:56:48 2014 -0800
@@ -187,120 +187,83 @@
     public BendingPages() {
         getChildren().setAll(backPage.get(), frontPage.get(), frontPageBack, shadow);
         
-        backPage.addListener(new ChangeListener<Node>() {
-
-            @Override
-            public void changed(ObservableValue<? extends Node> arg0, Node arg1, Node arg2) {
-                getChildren().set(0, arg2);
+        backPage.addListener((ObservableValue<? extends Node> arg0, Node arg1, Node arg2) -> {
+            getChildren().set(0, arg2);
+        });
+        
+        frontPage.addListener((ObservableValue<? extends Node> arg0, Node oldPage, Node newPage) -> {
+            if (bookBend != null) {
+                bookBend.detach();
+            }
+            getChildren().set(1, newPage);
+            bookBend = new BookBend(newPage, frontPageBack, shadow);
+            setTarget();
+        });
+        
+        addEventFilter(MouseEvent.MOUSE_MOVED, (MouseEvent me) -> {
+            if (withinGrip(me)) {
+                animState = FOLLOWING_MOVING_MOUSE;
+                setTarget(me);
+                update();
+            } else if (animState == FOLLOWING_MOVING_MOUSE) {
+                endFollowingMouse();
             }
         });
         
-        frontPage.addListener(new ChangeListener<Node>() {
-
-            @Override
-            public void changed(ObservableValue<? extends Node> arg0, Node oldPage, Node newPage) {
-                if (bookBend != null) {
-                    bookBend.detach();
-                }
-                getChildren().set(1, newPage);
-                bookBend = new BookBend(newPage, frontPageBack, shadow);
-                setTarget();
+        setOnMousePressed((MouseEvent me) -> {
+            if (withinGrip(me)) {
+                animState = FOLLOWING_DRAGGING_MOUSE;
+                me.consume();
+            } else if (withinPath(me)) {
+                animState = FOLLOWING_DRAGGING_MOUSE;
+                me.consume();
             }
         });
         
-        addEventFilter(MouseEvent.MOUSE_MOVED, new EventHandler<MouseEvent>() {
-
-            @Override
-            public void handle(MouseEvent me) {
-                if (withinGrip(me)) {
-                    animState = FOLLOWING_MOVING_MOUSE;
-                    setTarget(me);
-                    update();
-                } else if (animState == FOLLOWING_MOVING_MOUSE) {
-                    endFollowingMouse();
-                }
+        setOnMouseDragged((MouseEvent me) -> {
+            if (animState == FOLLOWING_DRAGGING_MOUSE) {
+                setTarget(me);
+                deltaX = targetX - bookBend.getTargetX();
+                deltaY = targetY - bookBend.getTargetY();
+                update();
+                me.consume();
             }
         });
         
-        setOnMousePressed(new EventHandler<MouseEvent>() {
-
-            @Override
-            public void handle(MouseEvent me) {
-                if (withinGrip(me)) {
-                    animState = FOLLOWING_DRAGGING_MOUSE;
-                    me.consume();
-                } else if (withinPath(me)) {
-                    animState = FOLLOWING_DRAGGING_MOUSE;
-                    me.consume();
-                }
-            }
-
-        });
-        
-        setOnMouseDragged(new EventHandler<MouseEvent>() {
-
-            @Override
-            public void handle(MouseEvent me) {
-                if (animState == FOLLOWING_DRAGGING_MOUSE) {
-                    setTarget(me);
-                    deltaX = targetX - bookBend.getTargetX();
-                    deltaY = targetY - bookBend.getTargetY();
-                    update();
-                    me.consume();
-                }
+        setOnMouseExited((MouseEvent me) -> {
+            if (animState == FOLLOWING_MOVING_MOUSE) {
+                endFollowingMouse();
+                me.consume();
             }
         });
         
-        setOnMouseExited(new EventHandler<MouseEvent>() {
-
-            @Override
-            public void handle(MouseEvent me) {
-                if (animState == FOLLOWING_MOVING_MOUSE) {
-                    endFollowingMouse();
-                    me.consume();
-                }
+        setOnMouseReleased((MouseEvent me) -> {
+            if (animState == FOLLOWING_DRAGGING_MOUSE && !me.isStillSincePress()) {
+                endFollowingMouse();
+                me.consume();
             }
         });
         
-        setOnMouseReleased(new EventHandler<MouseEvent>() {
-
-            @Override
-            public void handle(MouseEvent me) {
-                if (animState == FOLLOWING_DRAGGING_MOUSE && !me.isStillSincePress()) {
-                    endFollowingMouse();
-                    me.consume();
+        setOnMouseClicked((MouseEvent me) -> {
+            if (me.isStillSincePress() && (withinGrip(me) || withinPath(me))) {
+                if (state == OPENED) {
+                    state = CLOSED;
+                } else {
+                    state = OPENED;
                 }
+                setTarget();
+                animateTo();
+                me.consume();
             }
         });
         
-        setOnMouseClicked(new EventHandler<MouseEvent>() {
-
-            @Override
-            public void handle(MouseEvent me) {
-                if (me.isStillSincePress() && (withinGrip(me) || withinPath(me))) {
-                    if (state == OPENED) {
-                        state = CLOSED;
-                    } else {
-                        state = OPENED;
-                    }
-                    setTarget();
-                    animateTo();
-                    me.consume();
-                }
-            }
-        });
-        
-        layoutBoundsProperty().addListener(new ChangeListener<Bounds>() {
-
-            @Override
-            public void changed(ObservableValue<? extends Bounds> arg0, Bounds arg1, Bounds arg2) {
-                if (state == State.CLOSED) {
-                    setTarget();
-                    bookBend.update(targetX, targetY);
-                } else if (state == State.OPENED) {
-                    setTarget();
-                    bookBend.update(targetX, targetY);
-                }
+        layoutBoundsProperty().addListener((ObservableValue<? extends Bounds> arg0, Bounds arg1, Bounds arg2) -> {
+            if (state == State.CLOSED) {
+                setTarget();
+                bookBend.update(targetX, targetY);
+            } else if (state == State.OPENED) {
+                setTarget();
+                bookBend.update(targetX, targetY);
             }
         });
     }
@@ -366,21 +329,13 @@
             animation.stop();
         }
         DoubleProperty t = new SimpleDoubleProperty();
-        t.addListener(new ChangeListener<Number>() {
-
-            @Override
-            public void changed(ObservableValue<? extends Number> arg0, Number arg1, Number t) {
-                bookBend.update(fx + (targetX - fx) * t.doubleValue(), fy + (targetY - fy) * t.doubleValue());
-            }
+        t.addListener((ObservableValue<? extends Number> arg0, Number arg1, Number t1) -> {
+            bookBend.update(fx + (targetX - fx) * t1.doubleValue(), fy + (targetY - fy) * t1.doubleValue());
         });
         animation = TimelineBuilder.create()
-                .keyFrames(new KeyFrame(Duration.millis(200), new EventHandler<ActionEvent>() {
-
-                        @Override
-                        public void handle(ActionEvent arg0) {
-                            animState = NO_ANIMATION;
-                        }
-                    },
+                .keyFrames(new KeyFrame(Duration.millis(200), (ActionEvent arg0) -> {
+                    animState = NO_ANIMATION;
+        },
                     new KeyValue(t, 1, Interpolator.EASE_OUT)))
                 .build();
         animation.play();
--- a/apps/samples/Ensemble8/src/app/java/ensemble/control/BookBend.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/app/java/ensemble/control/BookBend.java	Thu Feb 27 16:56:48 2014 -0800
@@ -115,24 +115,16 @@
         this.clip = clip;
 
         node.setEffect(new DisplacementMap(map));
-        node.layoutBoundsProperty().addListener(new InvalidationListener() {
-
-            @Override
-            public void invalidated(Observable arg0) {
-                newWidth = (int) Math.round(node.getLayoutBounds().getWidth());
-                newHeight = (int) Math.round(node.getLayoutBounds().getHeight());
-                if (newWidth != map.getWidth() || newHeight != map.getHeight()) {
-                    setUpdateNeeded(true);
-                }
+        node.layoutBoundsProperty().addListener((Observable arg0) -> {
+            newWidth = (int) Math.round(node.getLayoutBounds().getWidth());
+            newHeight = (int) Math.round(node.getLayoutBounds().getHeight());
+            if (newWidth != map.getWidth() || newHeight != map.getHeight()) {
+                setUpdateNeeded(true);
             }
         });
-        node.sceneProperty().addListener(new ChangeListener<Scene>() {
-
-            @Override
-            public void changed(ObservableValue<? extends Scene> ov, Scene oldValue, Scene newValue) {
-                if(newValue == null){
-                    stopAnimationTimer();
-                }
+        node.sceneProperty().addListener((ObservableValue<? extends Scene> ov, Scene oldValue, Scene newValue) -> {
+            if(newValue == null){
+                stopAnimationTimer();
             }
         });
         newWidth = (int) Math.round(node.getLayoutBounds().getWidth());
--- a/apps/samples/Ensemble8/src/app/java/ensemble/control/Popover.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/app/java/ensemble/control/Popover.java	Thu Feb 27 16:56:48 2014 -0800
@@ -127,15 +127,12 @@
         setScaleX(.8);
         setScaleY(.8);
         // create handlers for auto hiding
-        popoverHideHandler = new EventHandler<MouseEvent>() {
-            @Override public void handle(MouseEvent t) {
-                // check if event is outside popup
-                Point2D mouseInFilterPane = sceneToLocal(t.getX(), t.getY());
-                if (mouseInFilterPane.getX() < 0 || mouseInFilterPane.getX() > (getWidth()) ||
+        popoverHideHandler = (MouseEvent t) -> {
+            Point2D mouseInFilterPane = sceneToLocal(t.getX(), t.getY());
+            if (mouseInFilterPane.getX() < 0 || mouseInFilterPane.getX() > (getWidth()) ||
                     mouseInFilterPane.getY() < 0 || mouseInFilterPane.getY() > (getHeight())) {
-                    hide();
-                    t.consume();
-                }
+                hide();
+                t.consume();
             }
         };
 //        popoverScrollHandler = new EventHandler<ScrollEvent>() {
@@ -304,15 +301,12 @@
             int pageWidth = width - left - right;
             final int newPageX = (pageWidth+PAGE_GAP) * (pages.size()-1);
             new Timeline(
-                    new KeyFrame(Duration.millis(350),
-                        new EventHandler<ActionEvent>() {
-                            @Override public void handle(ActionEvent t) {
-                                pagesPane.setCache(false);
-                                pagesPane.getChildren().remove(pagesPane.getChildren().size()-1);
-                                titlesPane.getChildren().remove(titlesPane.getChildren().size()-1);
-                                resizePopoverToNewPage(pages.getFirst().getPageNode());
-                            }
-                        },
+                    new KeyFrame(Duration.millis(350), (ActionEvent t) -> {
+                        pagesPane.setCache(false);
+                        pagesPane.getChildren().remove(pagesPane.getChildren().size()-1);
+                        titlesPane.getChildren().remove(titlesPane.getChildren().size()-1);
+                        resizePopoverToNewPage(pages.getFirst().getPageNode());
+            },
                         new KeyValue(pagesPane.translateXProperty(), -newPageX, Interpolator.EASE_BOTH),
                         new KeyValue(titlesPane.translateXProperty(), -newPageX, Interpolator.EASE_BOTH),
                         new KeyValue(pagesClipRect.xProperty(), newPageX, Interpolator.EASE_BOTH),
@@ -345,13 +339,10 @@
         
         if (!pages.isEmpty() && isVisible()) {
             final Timeline timeline = new Timeline(
-                    new KeyFrame(Duration.millis(350),
-                        new EventHandler<ActionEvent>() {
-                            @Override public void handle(ActionEvent t) {
-                                pagesPane.setCache(false);
-                                resizePopoverToNewPage(pageNode);
-                            }
-                        },
+                    new KeyFrame(Duration.millis(350), (ActionEvent t) -> {
+                        pagesPane.setCache(false);
+                        resizePopoverToNewPage(pageNode);
+            },
                         new KeyValue(pagesPane.translateXProperty(), -newPageX, Interpolator.EASE_BOTH),
                         new KeyValue(titlesPane.translateXProperty(), -newPageX, Interpolator.EASE_BOTH),
                         new KeyValue(pagesClipRect.xProperty(), newPageX, Interpolator.EASE_BOTH),
@@ -400,10 +391,8 @@
 
             FadeTransition fade = new FadeTransition(Duration.seconds(.1), this);
             fade.setToValue(1.0);
-            fade.setOnFinished(new EventHandler<ActionEvent>() {
-                @Override public void handle(ActionEvent event) {
-                    fadeAnimation = null;
-                }
+            fade.setOnFinished((ActionEvent event) -> {
+                fadeAnimation = null;
             });
 
             ScaleTransition scale = new ScaleTransition(Duration.seconds(.1), this);
@@ -427,13 +416,11 @@
 
             FadeTransition fade = new FadeTransition(Duration.seconds(.1), this);
             fade.setToValue(0);
-            fade.setOnFinished(new EventHandler<ActionEvent>() {
-                @Override public void handle(ActionEvent event) {
-                    fadeAnimation = null;
-                    setVisible(false);
-                    clearPages();
-                    if (onHideCallback != null) onHideCallback.run();
-                }
+            fade.setOnFinished((ActionEvent event) -> {
+                fadeAnimation = null;
+                setVisible(false);
+                clearPages();
+                if (onHideCallback != null) onHideCallback.run();
             });
 
             ScaleTransition scale = new ScaleTransition(Duration.seconds(.1), this);
--- a/apps/samples/Ensemble8/src/app/java/ensemble/control/SearchBox.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/app/java/ensemble/control/SearchBox.java	Thu Feb 27 16:56:48 2014 -0800
@@ -57,10 +57,8 @@
         setPrefHeight(30);
         clearButton.getStyleClass().setAll("search-clear-button");
         clearButton.setCursor(Cursor.DEFAULT);
-        clearButton.setOnMouseClicked(new EventHandler<MouseEvent>() {
-            @Override public void handle(MouseEvent t) {
-                setText("");
-            }
+        clearButton.setOnMouseClicked((MouseEvent t) -> {
+            setText("");
         });
         clearButton.setVisible(false);
         clearButton.setManaged(false);
--- a/apps/samples/Ensemble8/src/app/java/ensemble/samplepage/Description.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/app/java/ensemble/samplepage/Description.java	Thu Feb 27 16:56:48 2014 -0800
@@ -79,10 +79,8 @@
         sourceBtn.getStyleClass().add("sample-page-box-title");
         sourceBtn.setGraphic(new ImageView(ORANGE_ARROW));
         sourceBtn.setContentDisplay(ContentDisplay.RIGHT);
-        sourceBtn.setOnAction(new EventHandler<ActionEvent>() {
-            @Override public void handle(ActionEvent ev) {
-                samplePage.pageBrowser.goToPage(samplePage.getUrl().replaceFirst("sample://", "sample-src://"));
-            }
+        sourceBtn.setOnAction((ActionEvent ev) -> {
+            samplePage.pageBrowser.goToPage(samplePage.getUrl().replaceFirst("sample://", "sample-src://"));
         });
         if (PlatformFeatures.LINK_TO_SOURCE) getChildren().add(sourceBtn);
         if (Platform.isSupported(ConditionalFeature.WEB)) {
@@ -128,11 +126,9 @@
         }
 
         // listen for when sample changes
-        samplePage.registerSampleInfoUpdater(new Callback<SampleInfo, Void>() {
-            @Override public Void call(SampleInfo sampleInfo) {
-                update(sampleInfo);
-                return null;
-            }
+        samplePage.registerSampleInfoUpdater((SampleInfo sampleInfo) -> {
+            update(sampleInfo);
+            return null;
         });
     }
 
@@ -141,20 +137,16 @@
             relatedDocumentsList.getChildren().clear();
             for (final URL docUrl : sampleInfo.getDocURLs()) {
                 Hyperlink link = new Hyperlink(docUrl.getName());
-                link.setOnAction(new EventHandler<ActionEvent>() {
-                    @Override public void handle(ActionEvent ev) {
-                        samplePage.pageBrowser.goToPage(docUrl.getURL());
-                    }
+                link.setOnAction((ActionEvent ev) -> {
+                    samplePage.pageBrowser.goToPage(docUrl.getURL());
                 });
                 link.setTooltip(new Tooltip(docUrl.getName()));
                 relatedDocumentsList.getChildren().add(link);
             }
             for (final String classpath : sampleInfo.apiClasspaths) {
                 Hyperlink link = new Hyperlink(classpath);
-                link.setOnAction(new EventHandler<ActionEvent>() {
-                    @Override public void handle(ActionEvent ev) {
-                        samplePage.pageBrowser.goToPage(samplePage.apiClassToUrl(classpath));
-                    }
+                link.setOnAction((ActionEvent ev) -> {
+                    samplePage.pageBrowser.goToPage(samplePage.apiClassToUrl(classpath));
                 });
                 relatedDocumentsList.getChildren().add(link);
             }
@@ -163,11 +155,8 @@
         for (final SampleInfo.URL sampleURL : sampleInfo.getRelatedSampleURLs()) {
             if (Samples.ROOT.sampleForPath(sampleURL.getURL()) != null) { //Check if sample exists
                 Hyperlink sampleLink = new Hyperlink(sampleURL.getName());
-                sampleLink.setOnAction(new EventHandler<ActionEvent>() {
-                    @Override
-                    public void handle(ActionEvent t) {
-                        samplePage.pageBrowser.goToPage("sample://" + sampleURL.getURL());
-                    }
+                sampleLink.setOnAction((ActionEvent t) -> {
+                    samplePage.pageBrowser.goToPage("sample://" + sampleURL.getURL());
                 });
                 sampleLink.setPrefWidth(1000);
                 relatedSamples.getChildren().add(sampleLink);
--- a/apps/samples/Ensemble8/src/app/java/ensemble/samplepage/PieChartDataVisualizer.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/app/java/ensemble/samplepage/PieChartDataVisualizer.java	Thu Feb 27 16:56:48 2014 -0800
@@ -65,35 +65,19 @@
         setMinHeight(100);
         setMinWidth(100);
         
-        chart.dataProperty().addListener(new ChangeListener<ObservableList<Data>>() {
-
-            @Override
-            public void changed(ObservableValue<? extends ObservableList<Data>> ov, ObservableList<Data> t, ObservableList<Data> t1) {
-                setItems(t1);
-            }
+        chart.dataProperty().addListener((ObservableValue<? extends ObservableList<Data>> ov, ObservableList<Data> t, ObservableList<Data> t1) -> {
+            setItems(t1);
         });
         
         TableColumn<Data, String> nameColumn = new TableColumn<>("Name");
-        nameColumn.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Data, String>, ObservableValue<String>>() {
-
-            @Override
-            public ObservableValue<String> call(CellDataFeatures<Data, String> p) {
-                return p.getValue().nameProperty();
-            }
-        });
+        nameColumn.setCellValueFactory((CellDataFeatures<Data, String> p) -> p.getValue().nameProperty());
         nameColumn.setCellFactory(TextFieldTableCell.<Data>forTableColumn());
         nameColumn.setEditable(true);
         nameColumn.setSortable(false);
         nameColumn.setMinWidth(80);
         
         TableColumn<Data, Number> pieValueColumn = new TableColumn<>("PieValue");
-        pieValueColumn.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Data, Number>, ObservableValue<Number>>() {
-
-            @Override
-            public ObservableValue<Number> call(CellDataFeatures<Data, Number> p) {
-                return p.getValue().pieValueProperty();
-            }
-        });
+        pieValueColumn.setCellValueFactory((CellDataFeatures<Data, Number> p) -> p.getValue().pieValueProperty());
         pieValueColumn.setCellFactory(TextFieldTableCell.<Data, Number>forTableColumn(new StringConverter<Number>() {
 
                 @Override
@@ -117,24 +101,20 @@
         pieValueColumn.setSortable(false);
         pieValueColumn.setMinWidth(80);
         
-        setOnContextMenuRequested(new EventHandler<ContextMenuEvent>() {
-
-            @Override
-            public void handle(ContextMenuEvent t) {
-                Node node = t.getPickResult().getIntersectedNode();
-                while (node != null && !(node instanceof TableRow) && !(node instanceof TableCell)) {
-                    node = node.getParent();
-                }
-                if (node instanceof TableCell) {
-                    TableCell tc = (TableCell) node;
-                    getSelectionModel().select(tc.getIndex());
-                } else if (node instanceof TableRow) {
-                    TableRow tr = (TableRow) node;
-                    if (tr.getItem() == null) {
-                        getSelectionModel().clearSelection();
-                    } else {
-                        getSelectionModel().select(tr.getIndex());
-                    }
+        setOnContextMenuRequested((ContextMenuEvent t) -> {
+            Node node = t.getPickResult().getIntersectedNode();
+            while (node != null && !(node instanceof TableRow) && !(node instanceof TableCell)) {
+                node = node.getParent();
+            }
+            if (node instanceof TableCell) {
+                TableCell tc = (TableCell) node;
+                getSelectionModel().select(tc.getIndex());
+            } else if (node instanceof TableRow) {
+                TableRow tr = (TableRow) node;
+                if (tr.getItem() == null) {
+                    getSelectionModel().clearSelection();
+                } else {
+                    getSelectionModel().select(tr.getIndex());
                 }
             }
         });
@@ -162,36 +142,24 @@
                     MenuItemBuilder.create()
                         .text("Delete item")
 //                        .accelerator(new KeyCodeCombination(KeyCode.DELETE, KeyCombination.CONTROL_DOWN))
-                        .onAction(new EventHandler<ActionEvent>() {
-
-                            @Override
-                            public void handle(ActionEvent t) {
-                                int index = getSelectionModel().getSelectedIndex();
-                                if (index >= 0 && index < chart.getData().size()) {
-                                    chart.getData().remove(index);
-                                }
+                        .onAction((ActionEvent t) -> {
+                            int index = getSelectionModel().getSelectedIndex();
+                            if (index >= 0 && index < chart.getData().size()) {
+                                chart.getData().remove(index);
                             }
-                        })
+        })
                         .build(),
                     MenuItemBuilder.create()
                         .text("Clear data")
-                        .onAction(new EventHandler<ActionEvent>() {
-
-                            @Override
-                            public void handle(ActionEvent t) {
-                                chart.getData().clear();
-                            }
-                        })
+                        .onAction((ActionEvent t) -> {
+                            chart.getData().clear();
+        })
                         .build(),
                     MenuItemBuilder.create()
                         .text("Set new data")
-                        .onAction(new EventHandler<ActionEvent>() {
-
-                            @Override
-                            public void handle(ActionEvent t) {
-                                chart.setData(PieChartApp.generateData());
-                            }
-                        })
+                        .onAction((ActionEvent t) -> {
+                            chart.setData(PieChartApp.generateData());
+        })
                         .build())
                 .build());
         
--- a/apps/samples/Ensemble8/src/app/java/ensemble/samplepage/SamplePage.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/app/java/ensemble/samplepage/SamplePage.java	Thu Feb 27 16:56:48 2014 -0800
@@ -120,10 +120,8 @@
      * @param updater a method that updates content for a given SampleInfo
      */
     void registerSampleInfoUpdater(final Callback<SampleInfo, Void> updater) {
-        sampleInfoProperty.addListener(new ChangeListener<SampleInfo>() {
-            public void changed(ObservableValue<? extends SampleInfo> ov, SampleInfo t, SampleInfo sampleInfo) {
-                updater.call(sampleInfo);
-            }
+        sampleInfoProperty.addListener((ObservableValue<? extends SampleInfo> ov, SampleInfo t, SampleInfo sampleInfo) -> {
+            updater.call(sampleInfo);
         });
         updater.call(sampleInfoProperty.get());
     }
--- a/apps/samples/Ensemble8/src/app/java/ensemble/samplepage/SamplePageContent.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/app/java/ensemble/samplepage/SamplePageContent.java	Thu Feb 27 16:56:48 2014 -0800
@@ -55,13 +55,9 @@
         this.samplePage = samplePage;
         playground = new PlaygroundNode(samplePage);
         description = new Description(samplePage);
-        samplePage.registerSampleInfoUpdater(new Callback<SampleInfo, Void>() {
-
-            @Override
-            public Void call(SampleInfo sampleInfo) {
-                update(sampleInfo);
-                return null;
-            }
+        samplePage.registerSampleInfoUpdater((SampleInfo sampleInfo) -> {
+            update(sampleInfo);
+            return null;
         });
     }
 
--- a/apps/samples/Ensemble8/src/app/java/ensemble/samplepage/SimpleHSBColorPicker.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/app/java/ensemble/samplepage/SimpleHSBColorPicker.java	Thu Feb 27 16:56:48 2014 -0800
@@ -63,28 +63,25 @@
         getChildren().addAll(hsbRect, lightRect);
         lightRect.setStroke(Color.GRAY);
         lightRect.setStrokeType(StrokeType.OUTSIDE);
-        EventHandler<MouseEvent> ml = new EventHandler<MouseEvent>() {
-            @Override
-            public void handle(MouseEvent e) {
-                double w = getWidth();
-                double h = getHeight();
-                double x = Math.min(w, Math.max(0, e.getX()));
-                double y = Math.min(h, Math.max(0, e.getY()));
-                double hue = (360 / w) * x;
-                double vert = (1 / h) * y;
-                double sat;
-                double bright;
-                if (vert < 0.5) {
-                    bright = 1;
-                    sat = vert * 2;
-                } else {
-                    bright = sat = 1 - 2 * (vert - 0.5);
-                }
-                // convert back to color
-                Color c = Color.hsb((int) hue, sat, bright);
-                color.set(c);
-                e.consume();
+        EventHandler<MouseEvent> ml = (MouseEvent e) -> {
+            double w = getWidth();
+            double h = getHeight();
+            double x = Math.min(w, Math.max(0, e.getX()));
+            double y = Math.min(h, Math.max(0, e.getY()));
+            double hue = (360 / w) * x;
+            double vert = (1 / h) * y;
+            double sat;
+            double bright;
+            if (vert < 0.5) {
+                bright = 1;
+                sat = vert * 2;
+            } else {
+                bright = sat = 1 - 2 * (vert - 0.5);
             }
+            // convert back to color
+            Color c = Color.hsb((int) hue, sat, bright);
+            color.set(c);
+            e.consume();
         };
         lightRect.setOnMouseDragged(ml);
         lightRect.setOnMouseClicked(ml);
--- a/apps/samples/Ensemble8/src/app/java/ensemble/samplepage/XYDataVisualizer.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/app/java/ensemble/samplepage/XYDataVisualizer.java	Thu Feb 27 16:56:48 2014 -0800
@@ -91,24 +91,16 @@
             getRoot().getChildren().get(0).setExpanded(true);
         }
         
-        chart.dataProperty().addListener(new ChangeListener<ObservableList<XYChart.Series<X, Y>>>() {
-
-            @Override
-            public void changed(ObservableValue<? extends ObservableList<Series<X, Y>>> ov, ObservableList<Series<X, Y>> t, ObservableList<Series<X, Y>> t1) {
-                setRoot(new MyTreeItem(new XYChartItem<X, Y>(t1)));
-            }
+        chart.dataProperty().addListener((ObservableValue<? extends ObservableList<Series<X, Y>>> ov, ObservableList<Series<X, Y>> t, ObservableList<Series<X, Y>> t1) -> {
+            setRoot(new MyTreeItem(new XYChartItem<X, Y>(t1)));
         });
         
         TreeTableColumn<XYChartItem<X, Y>, String> nameColumn = new TreeTableColumn<>("Name");
-        nameColumn.setCellValueFactory(new Callback<TreeTableColumn.CellDataFeatures<XYChartItem<X, Y>, String>, ObservableValue<String>>() {
-
-            @Override
-            public ObservableValue<String> call(CellDataFeatures<XYChartItem<X, Y>, String> p) {
-                if (p.getValue() != null) {
-                    return p.getValue().getValue().nameProperty();
-                } else {
-                    return null;
-                }
+        nameColumn.setCellValueFactory((CellDataFeatures<XYChartItem<X, Y>, String> p) -> {
+            if (p.getValue() != null) {
+                return p.getValue().getValue().nameProperty();
+            } else {
+                return null;
             }
         });
         nameColumn.setEditable(true);
@@ -116,54 +108,44 @@
         nameColumn.setMinWidth(70);
         
         TreeTableColumn<XYChartItem<X, Y>, X> xValueColumn = new TreeTableColumn<>("XValue");
-        xValueColumn.setCellValueFactory(new Callback<TreeTableColumn.CellDataFeatures<XYChartItem<X, Y>, X>, ObservableValue<X>>() {
-
-            @Override
-            public ObservableValue<X> call(CellDataFeatures<XYChartItem<X, Y>, X> p) {
-                if (p.getValue() != null) {
-                    return p.getValue().getValue().xValueProperty();
-                } else {
-                    return null;
-                }
+        xValueColumn.setCellValueFactory((CellDataFeatures<XYChartItem<X, Y>, X> p) -> {
+            if (p.getValue() != null) {
+                return p.getValue().getValue().xValueProperty();
+            } else {
+                return null;
             }
         });
-        xValueColumn.setCellFactory(new Callback<TreeTableColumn<XYChartItem<X, Y>, X>, TreeTableCell<XYChartItem<X, Y>, X>>() {
-
-            @Override
-            public TreeTableCell<XYChartItem<X, Y>, X> call(TreeTableColumn<XYChartItem<X, Y>, X> p) {
-                return new TextFieldTreeTableCell<XYChartItem<X, Y>, X>() {
-                    {
-                        setConverter(new StringConverter<X>() {
-                            @Override
-                            public String toString(X t) {
-                                return t == null ? null : t.toString();
+        xValueColumn.setCellFactory((TreeTableColumn<XYChartItem<X, Y>, X> p) -> new TextFieldTreeTableCell<XYChartItem<X, Y>, X>() {
+            {
+                setConverter(new StringConverter<X>() {
+                    @Override
+                    public String toString(X t) {
+                        return t == null ? null : t.toString();
+                    }
+                    
+                    @Override
+                    public X fromString(String string) {
+                        if (string == null) {
+                            return null;
+                        }
+                        try {
+                            if (clzX.isAssignableFrom(String.class)) {
+                                return (X) string;
+                            } else if (clzX.isAssignableFrom(Double.class)) {
+                                return (X) new Double(string);
+                            } else if (clzX.isAssignableFrom(Integer.class)) {
+                                return (X) new Integer(string);
                             }
-
-                            @Override
-                            public X fromString(String string) {
-                                if (string == null) {
-                                    return null;
-                                }
-                                try {
-                                    if (clzX.isAssignableFrom(String.class)) {
-                                        return (X) string;
-                                    } else if (clzX.isAssignableFrom(Double.class)) {
-                                        return (X) new Double(string);
-                                    } else if (clzX.isAssignableFrom(Integer.class)) {
-                                        return (X) new Integer(string);
-                                    }
-                                } catch (NumberFormatException ex) {
-                                    Logger.getLogger(XYDataVisualizer.class.getName()).log(Level.FINE, 
-                                            "Failed to parse {0} to type {1}", new Object[]{string, clzX});
-                                    return getItem();
-                                }
-                                Logger.getLogger(XYDataVisualizer.class.getName()).log(Level.FINE, 
-                                        "This valueX type is not supported: {0}", clzX);
-                                return getItem();
-                            }
-                        });
+                        } catch (NumberFormatException ex) {
+                            Logger.getLogger(XYDataVisualizer.class.getName()).log(Level.FINE,
+                                    "Failed to parse {0} to type {1}", new Object[]{string, clzX});
+                            return getItem();
+                        }
+                        Logger.getLogger(XYDataVisualizer.class.getName()).log(Level.FINE,
+                                "This valueX type is not supported: {0}", clzX);
+                        return getItem();
                     }
-                };
+                });
             }
         });
         xValueColumn.setEditable(true);
@@ -171,52 +153,39 @@
         xValueColumn.setMinWidth(50);
         
         TreeTableColumn<XYChartItem<X, Y>, Y> yValueColumn = new TreeTableColumn<>("YValue");
-        yValueColumn.setCellValueFactory(new Callback<TreeTableColumn.CellDataFeatures<XYChartItem<X, Y>, Y>, ObservableValue<Y>>() {
-
+        yValueColumn.setCellValueFactory((CellDataFeatures<XYChartItem<X, Y>, Y> p) -> {
+            if (p.getValue() != null) {
+                return p.getValue().getValue().yValueProperty();
+            } else {
+                return null;
+            }
+        });
+        yValueColumn.setCellFactory((TreeTableColumn<XYChartItem<X, Y>, Y> p) -> new TextFieldTreeTableCell<>(new StringConverter<Y>() {
+            
             @Override
-            public ObservableValue<Y> call(CellDataFeatures<XYChartItem<X, Y>, Y> p) {
-                if (p.getValue() != null) {
-                    return p.getValue().getValue().yValueProperty();
-                } else {
+            public String toString(Y t) {
+                return t == null ? null : t.toString();
+            }
+            
+            @Override
+            public Y fromString(String string) {
+                if (string == null) {
                     return null;
                 }
+                Y y = (Y) new Double(string);
+                return y;
             }
-        });
-        yValueColumn.setCellFactory(new Callback<TreeTableColumn<XYChartItem<X, Y>, Y>, TreeTableCell<XYChartItem<X, Y>, Y>>() {
-
-            @Override
-            public TreeTableCell<XYChartItem<X, Y>, Y> call(TreeTableColumn<XYChartItem<X, Y>, Y> p) {
-                return new TextFieldTreeTableCell<>(new StringConverter<Y>() {
-
-                    @Override
-                    public String toString(Y t) {
-                        return t == null ? null : t.toString();
-                    }
-
-                    @Override
-                    public Y fromString(String string) {
-                        if (string == null) {
-                            return null;
-                        }
-                        Y y = (Y) new Double(string);
-                        return y;
-                    }
-                });
-            }
-        });
+        }));
         yValueColumn.setEditable(true);
         yValueColumn.setSortable(false);
         yValueColumn.setMinWidth(50);
         
         TreeTableColumn<XYChartItem<X, Y>, Object> extraValueColumn = new TreeTableColumn<>("Extra Value");
-        extraValueColumn.setCellValueFactory(new Callback<TreeTableColumn.CellDataFeatures<XYChartItem<X, Y>, Object>, ObservableValue<Object>>() {
-            @Override
-            public ObservableValue<Object> call(CellDataFeatures<XYChartItem<X, Y>, Object> p) {
-                if (p.getValue() != null) {
-                    return p.getValue().getValue().extraValueProperty();
-                } else {
-                    return null;
-                }
+        extraValueColumn.setCellValueFactory((CellDataFeatures<XYChartItem<X, Y>, Object> p) -> {
+            if (p.getValue() != null) {
+                return p.getValue().getValue().extraValueProperty();
+            } else {
+                return null;
             }
         });
         extraValueColumn.setMinWidth(100);
@@ -224,118 +193,93 @@
         
         getColumns().setAll(nameColumn, xValueColumn, yValueColumn, extraValueColumn);
         
-        setOnContextMenuRequested(new EventHandler<ContextMenuEvent>() {
-
-            @Override
-            public void handle(ContextMenuEvent t) {
-                Node node = t.getPickResult().getIntersectedNode();
-                while (node != null && !(node instanceof TreeTableRow) && !(node instanceof TreeTableCell)) {
-                    node = node.getParent();
+        setOnContextMenuRequested((ContextMenuEvent t) -> {
+            Node node = t.getPickResult().getIntersectedNode();
+            while (node != null && !(node instanceof TreeTableRow) && !(node instanceof TreeTableCell)) {
+                node = node.getParent();
+            }
+            if (node instanceof TreeTableCell) {
+                TreeTableCell tc = (TreeTableCell) node;
+                if (tc.getItem() == null) {
+                    getSelectionModel().clearSelection();
+                } else {
+                    getSelectionModel().select(tc.getIndex());
                 }
-                if (node instanceof TreeTableCell) {
-                    TreeTableCell tc = (TreeTableCell) node;
-                    if (tc.getItem() == null) {
-                        getSelectionModel().clearSelection();
-                    } else {
-                        getSelectionModel().select(tc.getIndex());
-                    }
-                } else if (node instanceof TreeTableRow) {
-                    TreeTableRow tr = (TreeTableRow) node;
-                    if (tr.getItem() == null) {
-                        getSelectionModel().clearSelection();
-                    } else {
-                        getSelectionModel().select(tr.getIndex());
-                    }
+            } else if (node instanceof TreeTableRow) {
+                TreeTableRow tr = (TreeTableRow) node;
+                if (tr.getItem() == null) {
+                    getSelectionModel().clearSelection();
+                } else {
+                    getSelectionModel().select(tr.getIndex());
                 }
             }
         });
 
         MenuItem insertDataItemMenuItem = new MenuItem("Insert data item");
         insertDataItemMenuItem.setDisable(!isEditable());
-        insertDataItemMenuItem.setOnAction(new EventHandler<ActionEvent>() {
-
-            @Override
-            public void handle(ActionEvent t) {
-                TreeItem<XYChartItem<X, Y>> selectedItem = getSelectionModel().getSelectedItem();
-                if (selectedItem == null || selectedItem.getParent() == null) {
-                    return;
-                }
-                Object value = selectedItem.getValue().getValue();
-                Object parentValue = selectedItem.getParent().getValue().getValue();
-                if (value instanceof Series) {
-                    Series series = (Series) value;
-                    insertItem(series.getData());
-                } else if (parentValue instanceof Series) {
-                    Series series = (Series) parentValue;
-                    insertItem(series.getData().indexOf(value), series.getData());
-                }
+        insertDataItemMenuItem.setOnAction((ActionEvent t) -> {
+            TreeItem<XYChartItem<X, Y>> selectedItem = getSelectionModel().getSelectedItem();
+            if (selectedItem == null || selectedItem.getParent() == null) {
+                return;
+            }
+            Object value = selectedItem.getValue().getValue();
+            Object parentValue = selectedItem.getParent().getValue().getValue();
+            if (value instanceof Series) {
+                Series series = (Series) value;
+                insertItem(series.getData());
+            } else if (parentValue instanceof Series) {
+                Series series = (Series) parentValue;
+                insertItem(series.getData().indexOf(value), series.getData());
             }
         });
 
         MenuItem insertSeriesMenuitem = new MenuItem("Insert Series");
         insertSeriesMenuitem.setDisable(!isEditable());
-        insertSeriesMenuitem.setOnAction(new EventHandler<ActionEvent>() {
-
-            @Override
-            public void handle(ActionEvent t) {
-                TreeItem<XYChartItem<X, Y>> selectedItem = getSelectionModel().getSelectedItem();
-                if (selectedItem == null) {
-                    return;
-                }
-                Object value = selectedItem.getValue().getValue();
-                if (value instanceof ObservableList) {
-                    ObservableList parentList = (ObservableList) value;
-                    insertSeries(parentList.size(), parentList);
-                } else {
-                    Object parentValue = selectedItem.getParent().getValue().getValue();
-                    if (parentValue instanceof ObservableList) {
-                        ObservableList parentList = (ObservableList) parentValue;
-
-                        insertSeries(parentList.indexOf(value), parentList);
-                    }
+        insertSeriesMenuitem.setOnAction((ActionEvent t) -> {
+            TreeItem<XYChartItem<X, Y>> selectedItem = getSelectionModel().getSelectedItem();
+            if (selectedItem == null) {
+                return;
+            }
+            Object value = selectedItem.getValue().getValue();
+            if (value instanceof ObservableList) {
+                ObservableList parentList = (ObservableList) value;
+                insertSeries(parentList.size(), parentList);
+            } else {
+                Object parentValue = selectedItem.getParent().getValue().getValue();
+                if (parentValue instanceof ObservableList) {
+                    ObservableList parentList = (ObservableList) parentValue;
+                    
+                    insertSeries(parentList.indexOf(value), parentList);
                 }
             }
         });
 
         MenuItem deleteItemMenuItem = new MenuItem("Delete item");
         deleteItemMenuItem.setDisable(!isEditable());
-        deleteItemMenuItem.setOnAction(new EventHandler<ActionEvent>() {
-
-            @Override
-            public void handle(ActionEvent t) {
-                TreeItem<XYChartItem<X, Y>> selectedItem = getSelectionModel().getSelectedItem();
-                if (selectedItem == null) {
-                    return;
-                }
-                Object value = selectedItem.getValue().getValue();
-                Object parentValue = selectedItem.getParent().getValue().getValue();
-                if (parentValue instanceof ObservableList) {
-                    ((ObservableList) parentValue).remove(value);
-                } else if (parentValue instanceof Series) {
-                    ((Series) parentValue).getData().remove(value);
-                }
+        deleteItemMenuItem.setOnAction((ActionEvent t) -> {
+            TreeItem<XYChartItem<X, Y>> selectedItem = getSelectionModel().getSelectedItem();
+            if (selectedItem == null) {
+                return;
+            }
+            Object value = selectedItem.getValue().getValue();
+            Object parentValue = selectedItem.getParent().getValue().getValue();
+            if (parentValue instanceof ObservableList) {
+                ((ObservableList) parentValue).remove(value);
+            } else if (parentValue instanceof Series) {
+                ((Series) parentValue).getData().remove(value);
             }
         });
 
         MenuItem removeAllDataMenuItem = new MenuItem("Remove all data");
         removeAllDataMenuItem.setDisable(!isEditable());
-        removeAllDataMenuItem.setOnAction(new EventHandler<ActionEvent>() {
-
-            @Override
-            public void handle(ActionEvent t) {
-                chart.getData().clear();
-//                                chart.setData(null);
-            }
+        removeAllDataMenuItem.setOnAction((ActionEvent t) -> {
+            chart.getData().clear();
         });
 
         MenuItem setNewDataMenuItem = new MenuItem("Set new data");
         setNewDataMenuItem.setDisable(!isEditable());
-        setNewDataMenuItem.setOnAction(new EventHandler<ActionEvent>() {
-
-            @Override
-            public void handle(ActionEvent t) {
-                chart.setData(generateData());
-            }
+        setNewDataMenuItem.setOnAction((ActionEvent t) -> {
+            chart.setData(generateData());
         });
 
         ContextMenu contextMenu = new ContextMenu(
@@ -474,23 +418,13 @@
     private static class MyTreeItem<X, Y> extends TreeItem<XYChartItem<X, Y>> {
         
         {
-            expandedProperty().addListener(new ChangeListener<Boolean>() {
-
-                @Override
-                public void changed(ObservableValue<? extends Boolean> ov, Boolean t, Boolean expanded) {
-                    if (expanded) {
-                        ObservableList children = getValue().getChildren();
-                        if (children != null) {
-                            ListContentBinding.bind(getChildren(), children, new Callback<Object, TreeItem<XYChartItem<X, Y>>>() {
-
-                                @Override
-                                public TreeItem call(Object p) {
-                                    return new MyTreeItem(new XYDataVisualizer.XYChartItem(p), false);
-                                }
-                            });
-                            if (getChildren().size() == 1) {
-                                getChildren().get(0).setExpanded(true);
-                            }
+            expandedProperty().addListener((ObservableValue<? extends Boolean> ov, Boolean t, Boolean expanded) -> {
+                if (expanded) {
+                    ObservableList children = getValue().getChildren();
+                    if (children != null) {
+                        ListContentBinding.bind(getChildren(), children, (Object p) -> new MyTreeItem(new XYDataVisualizer.XYChartItem(p), false));
+                        if (getChildren().size() == 1) {
+                            getChildren().get(0).setExpanded(true);
                         } 
                     }
                 }
--- a/apps/samples/Ensemble8/src/compiletime/java/ensemble/compiletime/search/BuildEnsembleSearchIndex.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/compiletime/java/ensemble/compiletime/search/BuildEnsembleSearchIndex.java	Thu Feb 27 16:56:48 2014 -0800
@@ -147,11 +147,7 @@
                 continue;
             }
             System.out.println(docPageUrl);
-            tasks.add(new Callable<List<Document>>() {
-                @Override public List<Document> call() throws Exception {
-                    return indexDocumentationPage(docPageUrl);
-                }
-            });
+            tasks.add((Callable<List<Document>>) () -> indexDocumentationPage(docPageUrl));
         }
         System.out.println(" --- end of list ---");
         return tasks;
@@ -197,11 +193,7 @@
         Matcher matcher = findClassUrl.matcher(content);
         while (matcher.find()) {
             final String classUrl = javaDocBaseUrl+matcher.group(1);
-            tasks.add(new Callable<List<Document>>() {
-                @Override public List<Document> call() throws Exception {
-                    return indexApiDocs(classUrl);
-                }
-            });
+            tasks.add((Callable<List<Document>>) () -> indexApiDocs(classUrl));
         }
         return tasks;
     }
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/animation/timeline/TimelineApp.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/animation/timeline/TimelineApp.java	Thu Feb 27 16:56:48 2014 -0800
@@ -107,55 +107,33 @@
         //method for creating navigation panel
         //start/stop/pause/play from start buttons
         Button buttonStart = new Button("Start");
-        buttonStart.setOnAction(new EventHandler<ActionEvent>() {
-            @Override
-            public void handle(ActionEvent t) {
-                //start timeline
-                timeline.play();
-            }
+        buttonStart.setOnAction((ActionEvent t) -> {
+            timeline.play();
         });
         Button buttonStop = new Button("Stop");
-        buttonStop.setOnAction(new EventHandler<ActionEvent>() {
-            @Override
-            public void handle(ActionEvent t) {
-                //stop timeline
-                timeline.stop();
-            }
+        buttonStop.setOnAction((ActionEvent t) -> {
+            timeline.stop();
         });
         Button buttonPlayFromStart = new Button("Restart");
-        buttonPlayFromStart.setOnAction(new EventHandler<ActionEvent>() {
-            @Override
-            public void handle(ActionEvent t) {
-                //play from start
-                timeline.playFromStart();
-            }
+        buttonPlayFromStart.setOnAction((ActionEvent t) -> {
+            timeline.playFromStart();
         });
         Button buttonPause = new Button("Pause");
-        buttonPause.setOnAction(new EventHandler<ActionEvent>() {
-            @Override
-            public void handle(ActionEvent t) {
-                //pause from start
-                timeline.pause();
-            }
+        buttonPause.setOnAction((ActionEvent t) -> {
+            timeline.pause();
         });
         //text showing current time
         final Text currentRateText = new Text("Current time: 0 ms");
         currentRateText.setBoundsType(TextBoundsType.VISUAL);
-        timeline.currentTimeProperty().addListener(new InvalidationListener() {
-            @Override
-            public void invalidated(Observable ov) {
-                int time = (int) timeline.getCurrentTime().toMillis();
-                currentRateText.setText("Current time: " + time + " ms");
-            }
+        timeline.currentTimeProperty().addListener((Observable ov) -> {
+            int time = (int) timeline.getCurrentTime().toMillis();
+            currentRateText.setText("Current time: " + time + " ms");
         });
         //Autoreverse checkbox
         final CheckBox checkBoxAutoReverse = new CheckBox("Auto Reverse");
         checkBoxAutoReverse.setSelected(true);
-        checkBoxAutoReverse.selectedProperty().addListener(new InvalidationListener() {
-            @Override
-            public void invalidated(Observable ov) {
-                timeline.setAutoReverse(checkBoxAutoReverse.isSelected());
-            }
+        checkBoxAutoReverse.selectedProperty().addListener((Observable ov) -> {
+            timeline.setAutoReverse(checkBoxAutoReverse.isSelected());
         });
         //add all navigation to layout
         HBox hBox1 = new HBox(10);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/animation/timelineevents/TimelineEventsApp.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/animation/timelineevents/TimelineEventsApp.java	Thu Feb 27 16:56:48 2014 -0800
@@ -102,13 +102,10 @@
         //create a keyFrame, the keyValue is reached at time 2s
         Duration duration = Duration.seconds(2);
         //one can add a specific action when the keyframe is reached
-        EventHandler<ActionEvent> onFinished = new EventHandler<ActionEvent>() {
-            @Override
-            public void handle(ActionEvent t) {
-                 stack.setTranslateX(java.lang.Math.random() * 200);
-                 //reset counter
-                 i = 0;
-            }
+        EventHandler<ActionEvent> onFinished = (ActionEvent t) -> {
+            stack.setTranslateX(java.lang.Math.random() * 200);
+            //reset counter
+            i = 0;
         };
         KeyFrame keyFrame = new KeyFrame(duration, onFinished , keyValueX, keyValueY);
         //add the keyframe to the timeline
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/area/audio/AudioAreaChartApp.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/area/audio/AudioAreaChartApp.java	Thu Feb 27 16:56:48 2014 -0800
@@ -69,13 +69,9 @@
             System.getProperty("demo.play.audio", "true"));
 
     public AudioAreaChartApp() {
-        audioSpectrumListener = new AudioSpectrumListener() {
-            @Override
-            public void spectrumDataUpdate(double timestamp, double duration,
-                    float[] magnitudes, float[] phases) {
-                for (int i = 0; i < series1Data.length; i++) {
-                    series1Data[i].setYValue(magnitudes[i] + 60);
-                }
+        audioSpectrumListener = (double timestamp, double duration, float[] magnitudes, float[] phases) -> {
+            for (int i = 0; i < series1Data.length; i++) {
+                series1Data[i].setYValue(magnitudes[i] + 60);
             }
         };
     }
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/bar/audio/AudioBarChartApp.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/bar/audio/AudioBarChartApp.java	Thu Feb 27 16:56:48 2014 -0800
@@ -71,13 +71,9 @@
             System.getProperty("demo.play.audio", "true"));
 
     public AudioBarChartApp() {
-        audioSpectrumListener = new AudioSpectrumListener() {
-            @Override
-            public void spectrumDataUpdate(double timestamp, double duration,
-                    float[] magnitudes, float[] phases) {
-                for (int i = 0; i < series1Data.length; i++) {
-                    series1Data[i].setYValue(magnitudes[i] + 60);
-                }
+        audioSpectrumListener = (double timestamp, double duration, float[] magnitudes, float[] phases) -> {
+            for (int i = 0; i < series1Data.length; i++) {
+                series1Data[i].setYValue(magnitudes[i] + 60);
             }
         };
     }
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/candlestick/CandleStickChart.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/candlestick/CandleStickChart.java	Thu Feb 27 16:56:48 2014 -0800
@@ -164,12 +164,8 @@
             // fade out old candle
             FadeTransition ft = new FadeTransition(Duration.millis(500), candle);
             ft.setToValue(0);
-            ft.setOnFinished(new EventHandler<ActionEvent>() {
-
-                @Override
-                public void handle(ActionEvent actionEvent) {
-                    getPlotChildren().remove(candle);
-                }
+            ft.setOnFinished((ActionEvent actionEvent) -> {
+                getPlotChildren().remove(candle);
             });
             ft.play();
         } else {
@@ -208,12 +204,8 @@
                 // fade out old candle
                 FadeTransition ft = new FadeTransition(Duration.millis(500), candle);
                 ft.setToValue(0);
-                ft.setOnFinished(new EventHandler<ActionEvent>() {
-
-                    @Override
-                    public void handle(ActionEvent actionEvent) {
-                        getPlotChildren().remove(candle);
-                    }
+                ft.setOnFinished((ActionEvent actionEvent) -> {
+                    getPlotChildren().remove(candle);
                 });
                 ft.play();
             } else {
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/line/stock/StockLineChartApp.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/line/stock/StockLineChartApp.java	Thu Feb 27 16:56:48 2014 -0800
@@ -73,15 +73,11 @@
         // create timeline to add new data every 60th of second
         animation = new Timeline();
         animation.getKeyFrames()
-                .add(new KeyFrame(Duration.millis(1000 / 60), new EventHandler<ActionEvent>() {
-            @Override
-            public void handle(ActionEvent actionEvent) {
-                // 6 minutes data per frame
-                for (int count = 0; count < 6; count++) {
-                    nextTime();
-                    plotTime();
-                }
-            }
+                .add(new KeyFrame(Duration.millis(1000 / 60), (ActionEvent actionEvent) -> {
+                    for (int count = 0; count < 6; count++) {
+                        nextTime();
+                        plotTime();
+                    }
         }));
         animation.setCycleCount(Animation.INDEFINITE);
     }
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/pie/drilldown/DrilldownPieChartApp.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/pie/drilldown/DrilldownPieChartApp.java	Thu Feb 27 16:56:48 2014 -0800
@@ -79,16 +79,13 @@
     }
 
     private void setDrilldownData(final PieChart pie, PieChart.Data data, final String labelPrefix) {
-        data.getNode().setOnMouseClicked(new EventHandler<MouseEvent>() {
-            
-            @Override public void handle(MouseEvent t) {
-                pie.setData(FXCollections.observableArrayList(
-                        new PieChart.Data(labelPrefix + "-1", 7),
-                        new PieChart.Data(labelPrefix + "-2", 2),
-                        new PieChart.Data(labelPrefix + "-3", 5),
-                        new PieChart.Data(labelPrefix + "-4", 3),
-                        new PieChart.Data(labelPrefix + "-5", 2)));
-            }
+        data.getNode().setOnMouseClicked((MouseEvent t) -> {
+            pie.setData(FXCollections.observableArrayList(
+                    new PieChart.Data(labelPrefix + "-1", 7),
+                    new PieChart.Data(labelPrefix + "-2", 2),
+                    new PieChart.Data(labelPrefix + "-3", 5),
+                    new PieChart.Data(labelPrefix + "-4", 3),
+                    new PieChart.Data(labelPrefix + "-5", 2)));
         });
     }
     
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/scatter/animated/LiveScatterChartApp.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/scatter/animated/LiveScatterChartApp.java	Thu Feb 27 16:56:48 2014 -0800
@@ -68,31 +68,27 @@
         // create animation
         Timeline timeline1 = new Timeline();
         timeline1.getKeyFrames().add(
-            new KeyFrame(Duration.millis(20), new EventHandler<ActionEvent>() {
-                @Override public void handle(ActionEvent actionEvent) {
+            new KeyFrame(Duration.millis(20), (ActionEvent actionEvent) -> {
+                series.getData().add(new XYChart.Data<Number, Number>(
+                        nextX,
+                        Math.sin(Math.toRadians(nextX)) * 100
+                ));
+                nextX += 10;
+        })
+        );
+        timeline1.setCycleCount(200);
+        Timeline timeline2 = new Timeline();
+        timeline2.getKeyFrames().add(
+                new KeyFrame(Duration.millis(50), (ActionEvent actionEvent) -> {
                     series.getData().add(new XYChart.Data<Number, Number>(
                             nextX,
                             Math.sin(Math.toRadians(nextX)) * 100
                     ));
+                    if (series.getData().size() > 54) {
+                        series.getData().remove(0);
+                    }
                     nextX += 10;
-                }
-            })
-        );
-        timeline1.setCycleCount(200);
-        Timeline timeline2 = new Timeline();
-        timeline2.getKeyFrames().add(
-                new KeyFrame(Duration.millis(50), new EventHandler<ActionEvent>() {
-                    @Override public void handle(ActionEvent actionEvent) {
-                        series.getData().add(new XYChart.Data<Number, Number>(
-                                nextX,
-                                Math.sin(Math.toRadians(nextX)) * 100
-                        ));
-                        if (series.getData().size() > 54) {
-                            series.getData().remove(0);
-                        }
-                        nextX += 10;
-                    }
-                })
+        })
         );
         timeline2.setCycleCount(Animation.INDEFINITE);
         animation = new SequentialTransition();
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/button/pillbutton/PillButtonApp.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/button/pillbutton/PillButtonApp.java	Thu Feb 27 16:56:48 2014 -0800
@@ -78,12 +78,9 @@
         // enforce rule that one of the ToggleButtons must be selected at any
         // time (that is, it is not valid to have zero ToggleButtons selected).
         // (Fix for RT-34920 that considered this to be a bug)
-        group.selectedToggleProperty().addListener(new ChangeListener<Toggle>() {
-            @Override
-            public void changed(ObservableValue<? extends Toggle> observable, Toggle oldValue, Toggle newValue) {
-                if (newValue == null) {
-                    group.selectToggle(oldValue);
-                }
+        group.selectedToggleProperty().addListener((ObservableValue<? extends Toggle> observable, Toggle oldValue, Toggle newValue) -> {
+            if (newValue == null) {
+                group.selectToggle(oldValue);
             }
         });
 
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/datepicker/DatePickerApp.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/datepicker/DatePickerApp.java	Thu Feb 27 16:56:48 2014 -0800
@@ -147,18 +147,15 @@
         //Create the menubar to experiment with the DatePicker
         datePickerMenuBar = createMenuBar(dayCellFactory);
         // Listen for DatePicker actions
-        datePicker.setOnAction(new EventHandler<ActionEvent>() {
-            @Override
-            public void handle(ActionEvent t) {
-                LocalDate isoDate = datePicker.getValue();
-                if ((isoDate != null) && (!isoDate.equals(LocalDate.now()))) {
-                    for (Menu menu : datePickerMenuBar.getMenus()) {
-                        if (menu.getText().equals("Options for Locale")) {
-                            for (MenuItem menuItem : menu.getItems()) {
-                                if (menuItem.getText().equals("Set date to today")) {
-                                    if ((menuItem instanceof CheckMenuItem) && ((CheckMenuItem) menuItem).isSelected()) {
-                                        ((CheckMenuItem) menuItem).setSelected(false);
-                                    }
+        datePicker.setOnAction((ActionEvent t) -> {
+            LocalDate isoDate = datePicker.getValue();
+            if ((isoDate != null) && (!isoDate.equals(LocalDate.now()))) {
+                for (Menu menu : datePickerMenuBar.getMenus()) {
+                    if (menu.getText().equals("Options for Locale")) {
+                        for (MenuItem menuItem : menu.getItems()) {
+                            if (menuItem.getText().equals("Set date to today")) {
+                                if ((menuItem instanceof CheckMenuItem) && ((CheckMenuItem) menuItem).isSelected()) {
+                                    ((CheckMenuItem) menuItem).setSelected(false);
                                 }
                             }
                         }
@@ -188,48 +185,36 @@
         //Style DatePicker with cell factory
         final CheckMenuItem cellFactoryMenuItem = new CheckMenuItem("Use cell factory to color past days and add tooltip to tomorrow");
         optionsMenu.getItems().add(cellFactoryMenuItem);
-        cellFactoryMenuItem.setOnAction(new EventHandler<ActionEvent>() {
-            @Override
-            public void handle(ActionEvent t) {
-                if (cellFactoryMenuItem.isSelected()) {
-                    datePicker.setDayCellFactory(dayCellFac);
-                } else {
-                    datePicker.setDayCellFactory(null);
-                }
+        cellFactoryMenuItem.setOnAction((ActionEvent t) -> {
+            if (cellFactoryMenuItem.isSelected()) {
+                datePicker.setDayCellFactory(dayCellFac);
+            } else {
+                datePicker.setDayCellFactory(null);
             }
         });
                        
         //Set date to today
         final CheckMenuItem todayMenuItem = new CheckMenuItem("Set date to today");
         optionsMenu.getItems().add(todayMenuItem);
-        todayMenuItem.setOnAction(new EventHandler<ActionEvent>() {
-            @Override
-            public void handle(ActionEvent t) {
-                if (todayMenuItem.isSelected()) {
-                    datePicker.setValue(today);
-                }
+        todayMenuItem.setOnAction((ActionEvent t) -> {
+            if (todayMenuItem.isSelected()) {
+                datePicker.setValue(today);
             }
         });
 
         //Set date to today
         final CheckMenuItem showWeekNumMenuItem = new CheckMenuItem("Show week numbers");
         optionsMenu.getItems().add(showWeekNumMenuItem);
-        showWeekNumMenuItem.setOnAction(new EventHandler<ActionEvent>() {
-            @Override
-            public void handle(ActionEvent t) {
-                datePicker.setShowWeekNumbers(showWeekNumMenuItem.isSelected());
-            }
+        showWeekNumMenuItem.setOnAction((ActionEvent t) -> {
+            datePicker.setShowWeekNumbers(showWeekNumMenuItem.isSelected());
         });        
         
-        localeToggleGroup.selectedToggleProperty().addListener(new ChangeListener<Toggle>() {
-            @Override
-            public void changed(ObservableValue<? extends Toggle> ov, Toggle oldToggle, Toggle newToggle) {
-                if (localeToggleGroup.getSelectedToggle() != null) {
-                    String selectedLocale = ((RadioMenuItem) localeToggleGroup.getSelectedToggle()).getText();
-                    Locale locale = Locale.forLanguageTag(selectedLocale.replace('_', '-'));
-                    Locale.setDefault(locale);
-                    createDatePicker();
-                }
+        localeToggleGroup.selectedToggleProperty().addListener((ObservableValue<? extends Toggle> ov, Toggle oldToggle, Toggle newToggle) -> {
+            if (localeToggleGroup.getSelectedToggle() != null) {
+                String selectedLocale = ((RadioMenuItem) localeToggleGroup.getSelectedToggle()).getText();
+                Locale locale = Locale.forLanguageTag(selectedLocale.replace('_', '-'));
+                Locale.setDefault(locale);
+                createDatePicker();
             }
         });       
 
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/htmleditor/HTMLEditorApp.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/htmleditor/HTMLEditorApp.java	Thu Feb 27 16:56:48 2014 -0800
@@ -94,12 +94,8 @@
         scrollPane.setFitToWidth(true);
 
         Button showHTMLButton = new Button("Show the HTML below");
-        showHTMLButton.setOnAction(new EventHandler<ActionEvent>() {
-
-            @Override
-            public void handle(ActionEvent arg0) {
-                htmlLabel.setText(htmlEditor.getHtmlText());
-            }
+        showHTMLButton.setOnAction((ActionEvent arg0) -> {
+            htmlLabel.setText(htmlEditor.getHtmlText());
         });
 
         VBox vRoot = new VBox();
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/listview/listviewcellfactory/ListViewCellFactoryApp.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/listview/listviewcellfactory/ListViewCellFactoryApp.java	Thu Feb 27 16:56:48 2014 -0800
@@ -65,11 +65,7 @@
 
         ));
         
-        listView.setCellFactory(new Callback<ListView<java.lang.Number>, ListCell<java.lang.Number>>() {
-            @Override public ListCell<Number> call(ListView<java.lang.Number> list) {
-                return new MoneyFormatCell();
-            }
-        });        
+        listView.setCellFactory((ListView<java.lang.Number> list) -> new MoneyFormatCell());        
         
         listView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
         return listView;
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/menu/MenuApp.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/menu/MenuApp.java	Thu Feb 27 16:56:48 2014 -0800
@@ -79,12 +79,9 @@
         final MenuItem menu112 = new MenuItem("foo");
         final CheckMenuItem menu113 = new CheckMenuItem("Show \"foo\" item");
         menu113.setSelected(true);
-        menu113.selectedProperty().addListener(new InvalidationListener() {
-            @Override
-            public void invalidated(Observable valueModel) {
-                menu112.setVisible(menu113.isSelected());
-                System.err.println("MenuItem \"foo\" is now " + (menu112.isVisible() ? "" : "not") + " visible.");
-            }
+        menu113.selectedProperty().addListener((Observable valueModel) -> {
+            menu112.setVisible(menu113.isSelected());
+            System.err.println("MenuItem \"foo\" is now " + (menu112.isVisible() ? "" : "not") + " visible.");
         });
         // Options->Submenu 1 submenu 
         Menu menu11 = new Menu("Submenu 1",
@@ -100,12 +97,9 @@
         final String change[] = {"Change Text", "Change Back"};
         final MenuItem menu13 = new MenuItem(change[0]);
         menu13.setAccelerator(KeyCombination.keyCombination("Shortcut+C"));
-        menu13.setOnAction(new EventHandler<ActionEvent>() {
-            @Override
-            public void handle(ActionEvent t) {
-                menu13.setText((menu13.getText().equals(change[0])) ? change[1] : change[0]);
-                outputLabel.setText(((MenuItem) t.getTarget()).getText() + " - action called");
-            }
+        menu13.setOnAction((ActionEvent t) -> {
+            menu13.setText((menu13.getText().equals(change[0])) ? change[1] : change[0]);
+            outputLabel.setText(((MenuItem) t.getTarget()).getText() + " - action called");
         });
 
         // Options menu       
@@ -129,11 +123,8 @@
             hbox.getChildren().add(sysMenuLabel);
             vbox.getChildren().add(hbox);
             sysMenuLabel.setVisible((menuBar.getHeight() == 0));
-            menuBar.heightProperty().addListener(new ChangeListener<Number>() {
-                @Override
-                public void changed(ObservableValue<? extends Number> ov, Number t, Number t1) {
-                    sysMenuLabel.setVisible((menuBar.getHeight() == 0));
-                }
+            menuBar.heightProperty().addListener((ObservableValue<? extends Number> ov, Number t, Number t1) -> {
+                sysMenuLabel.setVisible((menuBar.getHeight() == 0));
             });
         }
 
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/pagination/PaginationApp.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/pagination/PaginationApp.java	Thu Feb 27 16:56:48 2014 -0800
@@ -73,22 +73,14 @@
         images[6] = new Image(PaginationApp.class.getResource("/ensemble/samples/shared-resources/Animal7.jpg").toExternalForm(), false);
 
         pagination = new Pagination(7);
-        pagination.setPageFactory(new Callback<Integer, Node>() {
-            @Override
-            public Node call(Integer pageIndex) {
-                return createAnimalPage(pageIndex);
-            }
-        });
+        pagination.setPageFactory((Integer pageIndex) -> createAnimalPage(pageIndex));
         //Style can be numeric page indicators or bullet indicators
         Button styleButton = new Button("Toggle pagination style");
-        styleButton.setOnAction(new EventHandler<ActionEvent>() {
-            @Override
-            public void handle(ActionEvent me) {
-                if (!pagination.getStyleClass().contains(Pagination.STYLE_CLASS_BULLET)) {
-                    pagination.getStyleClass().add(Pagination.STYLE_CLASS_BULLET);
-                } else {
-                    pagination.getStyleClass().remove(Pagination.STYLE_CLASS_BULLET);
-                }
+        styleButton.setOnAction((ActionEvent me) -> {
+            if (!pagination.getStyleClass().contains(Pagination.STYLE_CLASS_BULLET)) {
+                pagination.getStyleClass().add(Pagination.STYLE_CLASS_BULLET);
+            } else {
+                pagination.getStyleClass().remove(Pagination.STYLE_CLASS_BULLET);
             }
         });
 
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/scrollbar/ScrollBarApp.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/scrollbar/ScrollBarApp.java	Thu Feb 27 16:56:48 2014 -0800
@@ -78,23 +78,15 @@
         //create horizontal scrollbar
         xscrollBar = horizontalScrollBar(-1,-1,xBarWidth,xBarHeight,xBarWidth,xBarHeight);
         xscrollBar.setUnitIncrement(20.0);
-        xscrollBar.valueProperty().addListener(new ChangeListener<Number>() {
-            @Override
-            public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
-                //changes the x position of the circle
-                setScrollValueX(xscrollBar.getValue(), circle);
-            }
+        xscrollBar.valueProperty().addListener((ObservableValue<? extends Number> observable, Number oldValue, Number newValue) -> {
+            setScrollValueX(xscrollBar.getValue(), circle);
         });
 
         //create vertical scrollbar
         yscrollBar = verticalScrollBar(-1,-1,yBarWidth,yBarHeight,yBarWidth,yBarHeight);
         yscrollBar.setUnitIncrement(20.0);
-        yscrollBar.valueProperty().addListener(new ChangeListener<Number>() {
-            @Override
-            public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
-                //changes the y position of the circle
-                setScrollValueY(yscrollBar.getValue(), circle);
-            }
+        yscrollBar.valueProperty().addListener((ObservableValue<? extends Number> observable, Number oldValue, Number newValue) -> {
+            setScrollValueY(yscrollBar.getValue(), circle);
         });
 
         //shift position of vertical scrollbar to right side of scene
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/tab/TabPaneApp.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/tab/TabPaneApp.java	Thu Feb 27 16:56:48 2014 -0800
@@ -113,10 +113,8 @@
             final RadioButton radioButton = new RadioButton(policy.name());
             radioButton.setMnemonicParsing(false);
             radioButton.setToggleGroup(closingPolicy);
-            radioButton.setOnAction(new EventHandler<ActionEvent>() {                
-                @Override public void handle(ActionEvent event) {
-                    tabPane.setTabClosingPolicy(TabPane.TabClosingPolicy.valueOf(radioButton.getText()));
-                }
+            radioButton.setOnAction((ActionEvent event) -> {
+                tabPane.setTabClosingPolicy(TabPane.TabClosingPolicy.valueOf(radioButton.getText()));
             });
             if (policy.name().equals(TabPane.TabClosingPolicy.SELECTED_TAB.name())) {
                 radioButton.setSelected(true);
@@ -134,20 +132,18 @@
 
         final CheckBox cb = new CheckBox("Show labels on original tabs");
         cb.setSelected(true);
-        cb.setOnAction(new EventHandler<ActionEvent>() {           
-            @Override public void handle(ActionEvent event) {
-                if (cb.isSelected()) {
-                    tab1.setText("Tab 1");
-                    tab2.setText("Longer Tab");
-                    tab3.setText("Tab 3");
-                    internalTab.setText("Internal Tabs");
-
-                } else {
-                    tab1.setText("");
-                    tab2.setText("");
-                    tab3.setText("");
-                    internalTab.setText("");
-                }
+        cb.setOnAction((ActionEvent event) -> {
+            if (cb.isSelected()) {
+                tab1.setText("Tab 1");
+                tab2.setText("Longer Tab");
+                tab3.setText("Tab 3");
+                internalTab.setText("Internal Tabs");
+                
+            } else {
+                tab1.setText("");
+                tab2.setText("");
+                tab3.setText("");
+                internalTab.setText("");
             }
         });
         vboxTab3.getChildren().add(cb);
@@ -195,18 +191,14 @@
         innerVbox.setTranslateX(10);
         innerVbox.setTranslateY(10);
         Button innerTabPosButton = new Button("Toggle Tab Position");
-        innerTabPosButton.setOnAction(new EventHandler<ActionEvent>() {           
-            @Override public void handle(ActionEvent e) {
-                toggleTabPosition(internalTabPane);
-            }
+        innerTabPosButton.setOnAction((ActionEvent e) -> {
+            toggleTabPosition(internalTabPane);
         });
         innerVbox.getChildren().add(innerTabPosButton);
         {
             Button innerTabModeButton = new Button("Toggle Tab Mode");
-            innerTabModeButton.setOnAction(new EventHandler<ActionEvent>() {               
-                @Override public void handle(ActionEvent e) {
-                    toggleTabMode(internalTabPane);
-                }
+            innerTabModeButton.setOnAction((ActionEvent e) -> {
+                toggleTabMode(internalTabPane);
             });
             innerVbox.getChildren().add(innerTabModeButton);
         }
@@ -226,38 +218,30 @@
     private void setUpControlButtons(VBox vbox) {
         // Toggle style class floating
         final Button tabModeButton = new Button("Toggle Tab Mode");
-        tabModeButton.setOnAction(new EventHandler<ActionEvent>() {            
-            @Override public void handle(ActionEvent e) {
-                toggleTabMode(tabPane);
-            }
+        tabModeButton.setOnAction((ActionEvent e) -> {
+            toggleTabMode(tabPane);
         });
         vbox.getChildren().add(tabModeButton);
         // Tab position
         final Button tabPositionButton = new Button("Toggle Tab Position");
-        tabPositionButton.setOnAction(new EventHandler<ActionEvent>() {           
-            @Override public void handle(ActionEvent e) {
-                toggleTabPosition(tabPane);
-            }
+        tabPositionButton.setOnAction((ActionEvent e) -> {
+            toggleTabPosition(tabPane);
         });
         // Add tab and switch to it
         final Button newTabButton = new Button("Switch to New Tab");
-        newTabButton.setOnAction(new EventHandler<ActionEvent>() {
-            @Override public void handle(ActionEvent e) {
-                Tab t = new Tab("Testing");
-                t.setContent(new Button("Howdy"));
-                tabPane.getTabs().add(t);
-                tabPane.getSelectionModel().select(t);
-            }
+        newTabButton.setOnAction((ActionEvent e) -> {
+            Tab t = new Tab("Testing");
+            t.setContent(new Button("Howdy"));
+            tabPane.getTabs().add(t);
+            tabPane.getSelectionModel().select(t);
         });
         vbox.getChildren().add(newTabButton);
         // Add tab
         final Button addTabButton = new Button("Add Tab");
-        addTabButton.setOnAction(new EventHandler<ActionEvent>() {
-            @Override public void handle(ActionEvent e) {
-                Tab t = new Tab("New Tab");
-                t.setContent(new Region());
-                tabPane.getTabs().add(t);
-            }
+        addTabButton.setOnAction((ActionEvent e) -> {
+            Tab t = new Tab("New Tab");
+            t.setContent(new Region());
+            tabPane.getTabs().add(t);
         });
         vbox.getChildren().add(addTabButton);
     }
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/text/searchbox/SearchBox.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/text/searchbox/SearchBox.java	Thu Feb 27 16:56:48 2014 -0800
@@ -56,18 +56,12 @@
         clearButton = new Button();
         clearButton.setVisible(false);
         getChildren().addAll(textBox, clearButton);
-        clearButton.setOnAction(new EventHandler<ActionEvent>() {
-            @Override
-            public void handle(ActionEvent actionEvent) {
-                textBox.setText("");
-                textBox.requestFocus();
-            }
+        clearButton.setOnAction((ActionEvent actionEvent) -> {
+            textBox.setText("");
+            textBox.requestFocus();
         });
-        textBox.textProperty().addListener(new ChangeListener<String>() {
-            @Override
-            public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
-                clearButton.setVisible(textBox.getText().length() != 0);
-            }
+        textBox.textProperty().addListener((ObservableValue<? extends String> observable, String oldValue, String newValue) -> {
+            clearButton.setVisible(textBox.getText().length() != 0);
         });
     }
 
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/text/textvalidator/TextInputValidatorPane.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/text/textvalidator/TextInputValidatorPane.java	Thu Feb 27 16:56:48 2014 -0800
@@ -39,26 +39,22 @@
  
 public class TextInputValidatorPane<C extends TextInputControl> extends ValidatorPane<C> {
 
-    private InvalidationListener textListener = new InvalidationListener() {           
-        @Override public void invalidated(Observable o) {
-            final Validator v = getValidator();
-            final ValidationResult result = v != null ?
+    private InvalidationListener textListener = (Observable o) -> {
+        final Validator v = getValidator();
+        final ValidationResult result = v != null ?
                 v.validate(getContent()) :
                 new ValidationResult("", ValidationResult.Type.SUCCESS);
-
-            handleValidationResult(result);
-        }
+        
+        handleValidationResult(result);
     };
 
     public TextInputValidatorPane() {
-        contentProperty().addListener(new ChangeListener<C>() {                
-            @Override public void changed(ObservableValue<? extends C> ov, C oldValue, C newValue) {
-                if (oldValue != null) {
-                    oldValue.textProperty().removeListener(textListener);
-                }
-                if (newValue != null) {
-                    newValue.textProperty().addListener(textListener);
-                }
+        contentProperty().addListener((ObservableValue<? extends C> ov, C oldValue, C newValue) -> {
+            if (oldValue != null) {
+                oldValue.textProperty().removeListener(textListener);
+            }
+            if (newValue != null) {
+                newValue.textProperty().addListener(textListener);
             }
         });
     }
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/text/textvalidator/TextValidatorApp.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/text/textvalidator/TextValidatorApp.java	Thu Feb 27 16:56:48 2014 -0800
@@ -60,23 +60,20 @@
 
         TextInputValidatorPane<TextField> pane = new TextInputValidatorPane<TextField>();
         pane.setContent(dateField);
-        pane.setValidator(new Validator<TextField>() {
-            @Override
-            public ValidationResult validate(TextField control) {
-                try {
-                    String text = control.getText();
-                    if (text == null || text.trim().equals("")) {
-                        return null;
-                    }
-                    double d = Double.parseDouble(text);
-                    if (d < 1000) {
-                        return new ValidationResult("Should be > 1000", ValidationResult.Type.WARNING);
-                    }
-                    return null; // succeeded
-                } catch (Exception e) {
-                    // failed
-                    return new ValidationResult("Bad number", ValidationResult.Type.ERROR);
+        pane.setValidator((TextField control) -> {
+            try {
+                String text = control.getText();
+                if (text == null || text.trim().equals("")) {
+                    return null;
                 }
+                double d = Double.parseDouble(text);
+                if (d < 1000) {
+                    return new ValidationResult("Should be > 1000", ValidationResult.Type.WARNING);
+                }
+                return null; // succeeded
+            } catch (Exception e) {
+                // failed
+                return new ValidationResult("Bad number", ValidationResult.Type.ERROR);
             }
         });
 
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/text/textvalidator/ValidatorPane.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/text/textvalidator/ValidatorPane.java	Thu Feb 27 16:56:48 2014 -0800
@@ -106,15 +106,12 @@
     }
 
     public ValidatorPane() {
-        content.addListener(new ChangeListener<Control>() {
-            @Override
-            public void changed(ObservableValue<? extends Control> ov, Control oldValue, Control newValue) {
-                if (oldValue != null) {
-                    getChildren().remove(oldValue);
-                }
-                if (newValue != null) {
-                    getChildren().add(0, newValue);
-                }
+        content.addListener((ObservableValue<? extends Control> ov, Control oldValue, Control newValue) -> {
+            if (oldValue != null) {
+                getChildren().remove(oldValue);
+            }
+            if (newValue != null) {
+                getChildren().add(0, newValue);
             }
         });
     }
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/togglebutton/ToggleButtonApp.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/togglebutton/ToggleButtonApp.java	Thu Feb 27 16:56:48 2014 -0800
@@ -34,7 +34,9 @@
 import javafx.application.Application;
 import javafx.beans.value.ChangeListener;
 import javafx.beans.value.ObservableValue;
+import javafx.geometry.HPos;
 import javafx.geometry.Pos;
+import javafx.geometry.VPos;
 import javafx.scene.Parent;
 import javafx.scene.Scene;
 import javafx.scene.control.Label;
@@ -74,14 +76,11 @@
         tb1.setToggleGroup(group);
         tb2.setToggleGroup(group);
         tb3.setToggleGroup(group);
-        group.selectedToggleProperty().addListener(new ChangeListener<Toggle>() {
-            @Override
-            public void changed(ObservableValue<? extends Toggle> observable, Toggle oldValue, Toggle selectedToggle) {
-                if (selectedToggle != null) {
-                    label.setText(((ToggleButton) selectedToggle).getText());
-                } else {
-                    label.setText("...");
-                }
+        group.selectedToggleProperty().addListener((ObservableValue<? extends Toggle> observable, Toggle oldValue, Toggle selectedToggle) -> {
+            if (selectedToggle != null) {
+                label.setText(((ToggleButton) selectedToggle).getText());
+            } else {
+                label.setText("...");
             }
         });
         // select the first button to start with
@@ -90,7 +89,7 @@
         GridPane.setConstraints(tb1, 0, 0);
         GridPane.setConstraints(tb2, 1, 0);
         GridPane.setConstraints(tb3, 2, 0);
-        GridPane.setConstraints(label, 1, 1, 1, 1);
+        GridPane.setConstraints(label, 0, 1, 3, 1, HPos.CENTER, VPos.BASELINE);
         GridPane grid = new GridPane();
         grid.setVgap(20);
         grid.setHgap(12);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/webview/WebViewApp.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/webview/WebViewApp.java	Thu Feb 27 16:56:48 2014 -0800
@@ -69,19 +69,13 @@
         webEngine.load(DEFAULT_URL);
 
         final TextField locationField = new TextField(DEFAULT_URL);
-        webEngine.locationProperty().addListener(new ChangeListener<String>() {
-            @Override
-            public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
-                locationField.setText(newValue);
-            }
+        webEngine.locationProperty().addListener((ObservableValue<? extends String> observable, String oldValue, String newValue) -> {
+            locationField.setText(newValue);
         });
-        EventHandler<ActionEvent> goAction = new EventHandler<ActionEvent>() {
-            @Override
-            public void handle(ActionEvent event) {
-                webEngine.load(locationField.getText().startsWith("http://")
-                        ? locationField.getText()
-                        : "http://" + locationField.getText());
-            }
+        EventHandler<ActionEvent> goAction = (ActionEvent event) -> {
+            webEngine.load(locationField.getText().startsWith("http://")
+                    ? locationField.getText()
+                    : "http://" + locationField.getText());
         };
         locationField.setOnAction(goAction);
 
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics2d/bouncingballs/Ball.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics2d/bouncingballs/Ball.java	Thu Feb 27 16:56:48 2014 -0800
@@ -59,13 +59,11 @@
         setCache(true);
         setFill(BALL_GRADIENT);
         createTimeline();
-        setOnMousePressed(new EventHandler<MouseEvent>() {
-            public void handle(MouseEvent me) {
-                if (timeline.getStatus() != Status.RUNNING) {
-                    timeline.play();
-                } else {
-                    timeline.pause();
-                }
+        setOnMousePressed((MouseEvent me) -> {
+            if (timeline.getStatus() != Status.RUNNING) {
+                timeline.play();
+            } else {
+                timeline.pause();
             }
         });
 
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics2d/bouncingballs/BouncingBallsApp.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics2d/bouncingballs/BouncingBallsApp.java	Thu Feb 27 16:56:48 2014 -0800
@@ -93,10 +93,8 @@
         final BallsPane pane = ballsscreen.getPane();
 
         Button resetButton = new Button("Reset");
-        resetButton.setOnAction(new EventHandler<ActionEvent>() {
-            public void handle(ActionEvent event) {
-                pane.resetBalls();
-            }
+        resetButton.setOnAction((ActionEvent event) -> {
+            pane.resetBalls();
         });
         VBox vb = new VBox(10);
         vb.getChildren().addAll(resetButton, ballsscreen);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics2d/brickbreaker/Level.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics2d/brickbreaker/Level.java	Thu Feb 27 16:56:48 2014 -0800
@@ -105,30 +105,26 @@
 
     private void initStartingTimeline() {
         startingTimeline = new Timeline();
-        KeyFrame kf1 = new KeyFrame(Duration.millis(500), new EventHandler<ActionEvent>() {
-            public void handle(ActionEvent event) {
-                message.setVisible(true);
-                state = STARTING_LEVEL;
-                bat.setVisible(false);
-                ball.setVisible(false);
-            }
+        KeyFrame kf1 = new KeyFrame(Duration.millis(500), (ActionEvent event) -> {
+            message.setVisible(true);
+            state = STARTING_LEVEL;
+            bat.setVisible(false);
+            ball.setVisible(false);
         }, new KeyValue(message.opacityProperty(), 0));
         KeyFrame kf2 = new KeyFrame(Duration.millis(1500), new KeyValue(message.opacityProperty(), 1));
         KeyFrame kf3 = new KeyFrame(Duration.millis(3000), new KeyValue(message.opacityProperty(), 1));
-        KeyFrame kf4 = new KeyFrame(Duration.millis(4000), new EventHandler<ActionEvent>() {
-            public void handle(ActionEvent event) {
-                message.setVisible(false);
-
-                bat.setTranslateX((Config.FIELD_WIDTH - bat.getWidth()) / 2.0);
-                ball.setTranslateX((Config.FIELD_WIDTH - ball.getDiameter()) / 2.0);
-                ball.setTranslateY(Config.BAT_Y - ball.getDiameter());
-                ballDirX = (Utils.random(2) * 2 - 1) * Config.BALL_MIN_COORD_SPEED;
-                ballDirY = -Config.BALL_MIN_SPEED;
-
-                bat.setVisible(true);
-                ball.setVisible(true);
-                state = BALL_CATCHED;
-            }
+        KeyFrame kf4 = new KeyFrame(Duration.millis(4000), (ActionEvent event) -> {
+            message.setVisible(false);
+            
+            bat.setTranslateX((Config.FIELD_WIDTH - bat.getWidth()) / 2.0);
+            ball.setTranslateX((Config.FIELD_WIDTH - ball.getDiameter()) / 2.0);
+            ball.setTranslateY(Config.BAT_Y - ball.getDiameter());
+            ballDirX = (Utils.random(2) * 2 - 1) * Config.BALL_MIN_COORD_SPEED;
+            ballDirY = -Config.BALL_MIN_SPEED;
+            
+            bat.setVisible(true);
+            ball.setVisible(true);
+            state = BALL_CATCHED;
         }, new KeyValue(message.opacityProperty(), 0));
 
         startingTimeline.getKeyFrames().addAll(kf1, kf2, kf3, kf4);
@@ -598,70 +594,59 @@
         background.setImage(Config.getImages().get(Config.IMAGE_BACKGROUND));
         background.setFitWidth(Config.SCREEN_WIDTH);
         background.setFitHeight(Config.SCREEN_HEIGHT);
-        background.setOnMouseMoved(new EventHandler<MouseEvent>() {
-            public void handle(MouseEvent me) {
+        background.setOnMouseMoved((MouseEvent me) -> {
+            moveBat(me.getX() - bat.getWidth() / 2);
+            me.consume();
+        });
+        background.setOnMouseDragged((MouseEvent me) -> {
+            moveBat(me.getX() - bat.getWidth() / 2);
+            me.consume();
+        });
+        background.setOnMousePressed((MouseEvent me) -> {
+            background.requestFocus();
+            if (state == PLAYING) {
+                // Support touch-only devices like some mobile phones
                 moveBat(me.getX() - bat.getWidth() / 2);
-                me.consume();
+            }
+            if (state == BALL_CATCHED) {
+                state = PLAYING;
+            }
+            if (state == GAME_OVER) {
+                mainFrame.changeState(MainFrame.SPLASH);
+            }
+            me.consume();
+        });
+        background.setOnKeyPressed((KeyEvent ke) -> {
+            if ((ke.getCode() == KeyCode.POWER) || (ke.getCode() == KeyCode.X)) {
+                Platform.exit();
+            }
+            if (state == BALL_CATCHED && (ke.getCode() == KeyCode.SPACE ||
+                    ke.getCode() == KeyCode.ENTER || ke.getCode() == KeyCode.PLAY)) {
+                state = PLAYING;
+            }
+            if (state == GAME_OVER) {
+                mainFrame.changeState(MainFrame.SPLASH);
+            }
+            if (state == PLAYING && ke.getCode() == KeyCode.Q) {
+                // Lost life
+                lostLife();
+                return;
+            }
+            if ((ke.getCode() == KeyCode.LEFT || ke.getCode() == KeyCode.TRACK_PREV)) {
+                batDirection = - Config.BAT_SPEED;
+            }
+            if ((ke.getCode() == KeyCode.RIGHT || ke.getCode() == KeyCode.TRACK_NEXT)) {
+                batDirection = Config.BAT_SPEED;
+            }
+            if (ke.getCode() != KeyCode.TAB) {
+                ke.consume();
             }
         });
-        background.setOnMouseDragged(new EventHandler<MouseEvent>() {
-            public void handle(MouseEvent me) {
-                // Support touch-only devices like some mobile phones
-                moveBat(me.getX() - bat.getWidth() / 2);
-                me.consume();
-            }
-        });
-        background.setOnMousePressed(new EventHandler<MouseEvent>() {
-            public void handle(MouseEvent me) {
-                background.requestFocus();
-                if (state == PLAYING) {
-                    // Support touch-only devices like some mobile phones
-                    moveBat(me.getX() - bat.getWidth() / 2);
-                }
-                if (state == BALL_CATCHED) {
-                    state = PLAYING;
-                }
-                if (state == GAME_OVER) {
-                    mainFrame.changeState(MainFrame.SPLASH);
-                }
-                me.consume();
-            }
-        });
-        background.setOnKeyPressed(new EventHandler<KeyEvent>() {
-            public void handle(KeyEvent ke) {
-                if ((ke.getCode() == KeyCode.POWER) || (ke.getCode() == KeyCode.X)) {
-                    Platform.exit();
-                }
-                if (state == BALL_CATCHED && (ke.getCode() == KeyCode.SPACE ||
-                        ke.getCode() == KeyCode.ENTER || ke.getCode() == KeyCode.PLAY)) {
-                    state = PLAYING;
-                }
-                if (state == GAME_OVER) {
-                    mainFrame.changeState(MainFrame.SPLASH);
-                }
-                if (state == PLAYING && ke.getCode() == KeyCode.Q) {
-                    // Lost life
-                    lostLife();
-                    return;
-                }
-                if ((ke.getCode() == KeyCode.LEFT || ke.getCode() == KeyCode.TRACK_PREV)) {
-                    batDirection = - Config.BAT_SPEED;
-                }
-                if ((ke.getCode() == KeyCode.RIGHT || ke.getCode() == KeyCode.TRACK_NEXT)) {
-                    batDirection = Config.BAT_SPEED;
-                }
-                if (ke.getCode() != KeyCode.TAB) {
-                    ke.consume();
-                }
-            }
-        });
-        background.setOnKeyReleased(new EventHandler<KeyEvent>() {
-            public void handle(KeyEvent ke) {
-                if (ke.getCode() == KeyCode.LEFT || ke.getCode() == KeyCode.RIGHT ||
+        background.setOnKeyReleased((KeyEvent ke) -> {
+            if (ke.getCode() == KeyCode.LEFT || ke.getCode() == KeyCode.RIGHT ||
                     ke.getCode() == KeyCode.TRACK_PREV || ke.getCode() == KeyCode.TRACK_NEXT) {
-                    batDirection = 0;
-                    ke.consume();
-                }
+                batDirection = 0;
+                ke.consume();
             }
         });
         group.getChildren().add(background);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics2d/brickbreaker/Splash.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics2d/brickbreaker/Splash.java	Thu Feb 27 16:56:48 2014 -0800
@@ -68,46 +68,44 @@
     private void initTimeline() {
         timeline = new Timeline();
         timeline.setCycleCount(Timeline.INDEFINITE);
-        KeyFrame kf = new KeyFrame(Duration.millis(40), new EventHandler<ActionEvent>() {
-            public void handle(ActionEvent event) {
-                if (state == STATE_SHOW_TITLE) {
-                    stateArg++;
-                    int center = Config.SCREEN_WIDTH / 2;
-                    int offset = (int)(Math.cos(stateArg / 4.0) * (40 - stateArg) / 40 * center);
-                    brick.setTranslateX(center - brick.getImage().getWidth() / 2 + offset);
-                    breaker.setTranslateX(center - breaker.getImage().getWidth() / 2 - offset);
-                    if (stateArg == 40) {
-                        stateArg = 0;
-                        state = STATE_SHOW_STRIKE;
-                    }
-                    return;
+        KeyFrame kf = new KeyFrame(Duration.millis(40), (ActionEvent event) -> {
+            if (state == STATE_SHOW_TITLE) {
+                stateArg++;
+                int center = Config.SCREEN_WIDTH / 2;
+                int offset = (int)(Math.cos(stateArg / 4.0) * (40 - stateArg) / 40 * center);
+                brick.setTranslateX(center - brick.getImage().getWidth() / 2 + offset);
+                breaker.setTranslateX(center - breaker.getImage().getWidth() / 2 - offset);
+                if (stateArg == 40) {
+                    stateArg = 0;
+                    state = STATE_SHOW_STRIKE;
                 }
-                if (state == STATE_SHOW_STRIKE) {
-                    if (stateArg == 0) {
-                        strike.setTranslateX(breaker.getTranslateX() + brick.getImage().getWidth());
-                        strike.setScaleX(0);
-                        strike.setScaleY(0);
-                        strike.setVisible(true);
-                    }
-                    stateArg++;
-                    double coef = stateArg / 30f;
-                    brick.setTranslateX(breaker.getTranslateX() +
+                return;
+            }
+            if (state == STATE_SHOW_STRIKE) {
+                if (stateArg == 0) {
+                    strike.setTranslateX(breaker.getTranslateX() + brick.getImage().getWidth());
+                    strike.setScaleX(0);
+                    strike.setScaleY(0);
+                    strike.setVisible(true);
+                }
+                stateArg++;
+                double coef = stateArg / 30f;
+                brick.setTranslateX(breaker.getTranslateX() +
                         (breaker.getImage().getWidth() - brick.getImage().getWidth()) / 2f * (1 - coef));
-                    strike.setScaleX(coef);
-                    strike.setScaleY(coef);
-                    strike.setRotate((30 - stateArg) * 2);
-                    if (stateArg == 30) {
-                        stateArg = 0;
-                        state = STATE_SUN;
-                    }
-                    return;
+                strike.setScaleX(coef);
+                strike.setScaleY(coef);
+                strike.setRotate((30 - stateArg) * 2);
+                if (stateArg == 30) {
+                    stateArg = 0;
+                    state = STATE_SUN;
                 }
-                // Here state == STATE_SUN
-                if (pressanykey.getOpacity() < 1) {
-                    pressanykey.setOpacity(pressanykey.getOpacity() + 0.05f);
-                }
-                stateArg--;
+                return;
             }
+            // Here state == STATE_SUN
+            if (pressanykey.getOpacity() < 1) {
+                pressanykey.setOpacity(pressanykey.getOpacity() + 0.05f);
+            }
+            stateArg--;
         });
         timeline.getKeyFrames().add(kf);
     }
@@ -130,15 +128,11 @@
         background.setImage(Config.getImages().get(Config.IMAGE_BACKGROUND));
         background.setFitWidth(Config.SCREEN_WIDTH);
         background.setFitHeight(Config.SCREEN_HEIGHT);
-        background.setOnMousePressed(new EventHandler<MouseEvent>() {
-            @Override public void handle(MouseEvent me) {
-                mainFrame.startGame();
-            }
+        background.setOnMousePressed((MouseEvent me) -> {
+            mainFrame.startGame();
         });
-        background.setOnKeyPressed(new EventHandler<KeyEvent>() {
-            @Override public void handle(KeyEvent ke) {
-                mainFrame.startGame();
-            }
+        background.setOnKeyPressed((KeyEvent ke) -> {
+            mainFrame.startGame();
         });
         brick = new ImageView();
         brick.setImage(Config.getImages().get(Config.IMAGE_SPLASH_BRICK));
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics2d/calc/Calculator.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics2d/calc/Calculator.java	Thu Feb 27 16:56:48 2014 -0800
@@ -95,12 +95,8 @@
     }
 
     private void addKeyListener() {
-        setOnKeyPressed(new EventHandler<KeyEvent>() {
-
-            @Override
-            public void handle(KeyEvent ke) {
-                processKeyEvent(ke);
-            }
+        setOnKeyPressed((KeyEvent ke) -> {
+            processKeyEvent(ke);
         });
         setFocusTraversable(true);
         requestFocus();
@@ -164,11 +160,8 @@
                 final Key key = new Key(Util.KEY_CODES[i][j]);
                 key.setTranslateX(background.getX() + (Key.WIDTH + 1) * j + BORDER);
                 key.setTranslateY(background.getY() + (Key.HEIGHT + 1) * i + BORDER + TR_Y);
-                key.setOnMousePressed(new EventHandler<MouseEvent>() {
-
-                    @Override public void handle(MouseEvent me) {
-                        onKey(key);
-                    }
+                key.setOnMousePressed((MouseEvent me) -> {
+                    onKey(key);
                 });
                 keys[i * Util.KEY_CODES[0].length + j] = key;
                 
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics2d/calc/Key.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics2d/calc/Key.java	Thu Feb 27 16:56:48 2014 -0800
@@ -96,16 +96,12 @@
     }
 
     private void initListeners() {
-        setOnMouseEntered(new EventHandler<MouseEvent>() {
-            @Override public void handle(MouseEvent me) {
-                background.setFill(CELL_SEL_FILL);
-            }
+        setOnMouseEntered((MouseEvent me) -> {
+            background.setFill(CELL_SEL_FILL);
         });
 
-        setOnMouseExited(new EventHandler<MouseEvent>() {
-            @Override public void handle(MouseEvent me) {
-                background.setFill(CELL_FILL);
-            }
+        setOnMouseExited((MouseEvent me) -> {
+            background.setFill(CELL_FILL);
         });
     }
 
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics2d/digitalclock/Clock.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics2d/digitalclock/Clock.java	Thu Feb 27 16:56:48 2014 -0800
@@ -96,22 +96,16 @@
         // wait till start of next second then start a timeline to call refreshClocks() every second
         delayTimeline = new Timeline();
         delayTimeline.getKeyFrames().add(
-                new KeyFrame(new Duration(1000 - (System.currentTimeMillis() % 1000)), new EventHandler<ActionEvent>() {            
-            @Override public void handle(ActionEvent event) {
-                if (secondTimeline != null) {
-                    secondTimeline.stop();
-                }
-                secondTimeline = new Timeline();
-                secondTimeline.setCycleCount(Timeline.INDEFINITE);
-                secondTimeline.getKeyFrames().add(
-                        new KeyFrame(Duration.seconds(1), new EventHandler<ActionEvent>() {
-                    
-                    @Override public void handle(ActionEvent event) {
-                        refreshClocks();
+                new KeyFrame(new Duration(1000 - (System.currentTimeMillis() % 1000)), (ActionEvent event) -> {
+                    if (secondTimeline != null) {
+                        secondTimeline.stop();
                     }
-                }));
-                secondTimeline.play();
-            }
+            secondTimeline = new Timeline();
+            secondTimeline.setCycleCount(Timeline.INDEFINITE);
+            secondTimeline.getKeyFrames().add(new KeyFrame(Duration.seconds(1), (ActionEvent event1) -> {
+                refreshClocks();
+            }));
+            secondTimeline.play();
         }));
         delayTimeline.play();
     }
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics2d/displayshelf/DisplayShelf.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics2d/displayshelf/DisplayShelf.java	Thu Feb 27 16:56:48 2014 -0800
@@ -86,14 +86,11 @@
             final PerspectiveImage item =
                     items[i] = new PerspectiveImage(images[i]);
             final double index = i;
-            item.setOnMouseClicked(new EventHandler<MouseEvent>() {
-                @Override
-                public void handle(MouseEvent me) {
-                    localChange = true;
-                    scrollBar.setValue(index);
-                    localChange = false;
-                    shiftToCenter(item);
-                }
+            item.setOnMouseClicked((MouseEvent me) -> {
+                localChange = true;
+                scrollBar.setValue(index);
+                localChange = false;
+                shiftToCenter(item);
             });
         }
         // setup scroll bar
@@ -101,12 +98,9 @@
         scrollBar.setVisibleAmount(1);
         scrollBar.setUnitIncrement(1);
         scrollBar.setBlockIncrement(1);
-        scrollBar.valueProperty().addListener(new InvalidationListener() {
-            @Override
-            public void invalidated(Observable ov) {
-                if (!localChange) {
-                    shiftToCenter(items[(int) Math.round(scrollBar.getValue())]);
-                }
+        scrollBar.valueProperty().addListener((Observable ov) -> {
+            if (!localChange) {
+                shiftToCenter(items[(int) Math.round(scrollBar.getValue())]);
             }
         });
         // create content
@@ -114,20 +108,17 @@
         getChildren().addAll(centered, scrollBar);
         // listen for keyboard events
         setFocusTraversable(true);
-        setOnKeyPressed(new EventHandler<KeyEvent>() {
-            @Override
-            public void handle(KeyEvent ke) {
-                if (ke.getCode() == KeyCode.LEFT) {
-                    shift(1);
-                    localChange = true;
-                    scrollBar.setValue(centerIndex);
-                    localChange = false;
-                } else if (ke.getCode() == KeyCode.RIGHT) {
-                    shift(-1);
-                    localChange = true;
-                    scrollBar.setValue(centerIndex);
-                    localChange = false;
-                }
+        setOnKeyPressed((KeyEvent ke) -> {
+            if (ke.getCode() == KeyCode.LEFT) {
+                shift(1);
+                localChange = true;
+                scrollBar.setValue(centerIndex);
+                localChange = false;
+            } else if (ke.getCode() == KeyCode.RIGHT) {
+                shift(-1);
+                localChange = true;
+                scrollBar.setValue(centerIndex);
+                localChange = false;
             }
         });
         // update
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics2d/images/imageoperator/ImageOperationApp.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics2d/images/imageoperator/ImageOperationApp.java	Thu Feb 27 16:56:48 2014 -0800
@@ -83,24 +83,15 @@
     public Parent createContent() {
          StackPane root = new StackPane();
         final WritableImage img = new WritableImage(200, 200);
-        gridSize.addListener(new InvalidationListener() {
-            @Override
-            public void invalidated(Observable observable) {
-                renderImage(img, gridSize.doubleValue(), hueFactor.doubleValue(), hueOffset.doubleValue());
-            }
-        });
-        hueFactor.addListener(new InvalidationListener() {
-            @Override
-            public void invalidated(Observable observable) {
-                renderImage(img, gridSize.doubleValue(), hueFactor.doubleValue(), hueOffset.doubleValue());
-            }
-        });
-        hueOffset.addListener(new InvalidationListener() {
-            @Override
-            public void invalidated(Observable observable) {
-                renderImage(img, gridSize.doubleValue(), hueFactor.doubleValue(), hueOffset.doubleValue());
-            }
-        });
+        gridSize.addListener((Observable observable) -> {
+            renderImage(img, gridSize.doubleValue(), hueFactor.doubleValue(), hueOffset.doubleValue());
+         });
+        hueFactor.addListener((Observable observable) -> {
+            renderImage(img, gridSize.doubleValue(), hueFactor.doubleValue(), hueOffset.doubleValue());
+         });
+        hueOffset.addListener((Observable observable) -> {
+            renderImage(img, gridSize.doubleValue(), hueFactor.doubleValue(), hueOffset.doubleValue());
+         });
         renderImage(img, 3.0, 12.0, 240.0);
 
         ImageView view = new ImageView(img);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics2d/puzzle/Piece.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics2d/puzzle/Piece.java	Thu Feb 27 16:56:48 2014 -0800
@@ -88,41 +88,35 @@
             // start in inactive state
             setInactive();
             // add listeners to support dragging
-            setOnMousePressed(new EventHandler<MouseEvent>() {
-                public void handle(MouseEvent me) {
-                    toFront();
-                    startDragX = getTranslateX();
-                    startDragY = getTranslateY();
-                    dragAnchor = new Point2D(me.getSceneX(), me.getSceneY());
+            setOnMousePressed((MouseEvent me) -> {
+                toFront();
+                startDragX = getTranslateX();
+                startDragY = getTranslateY();
+                dragAnchor = new Point2D(me.getSceneX(), me.getSceneY());
+            });
+            setOnMouseReleased((MouseEvent me) -> {
+                if (getTranslateX() < (10) && getTranslateX() > (- 10) &&
+                        getTranslateY() < (10) && getTranslateY() > (- 10)) {
+                    setTranslateX(0);
+                    setTranslateY(0);
+                    setInactive();
                 }
             });
-            setOnMouseReleased(new EventHandler<MouseEvent>() {
-                public void handle(MouseEvent me) {
-                    if (getTranslateX() < (10) && getTranslateX() > (- 10) &&
-                        getTranslateY() < (10) && getTranslateY() > (- 10)) {
-                        setTranslateX(0);
-                        setTranslateY(0);
-                        setInactive();
-                    }
-                }
-            });
-            setOnMouseDragged(new EventHandler<MouseEvent>() {
-                public void handle(MouseEvent me) {
-                    double newTranslateX = startDragX
-                                            + me.getSceneX() - dragAnchor.getX();
-                    double newTranslateY = startDragY
-                                            + me.getSceneY() - dragAnchor.getY();
-                    double minTranslateX = - 45f - correctX;
-                    double maxTranslateX = (deskWidth - Piece.SIZE + 50f ) - correctX;
-                    double minTranslateY = - 30f - correctY;
-                    double maxTranslateY = (deskHeight - Piece.SIZE + 70f ) - correctY;
-                    if ((newTranslateX> minTranslateX ) &&
-                            (newTranslateX< maxTranslateX) &&
-                            (newTranslateY> minTranslateY) &&
-                            (newTranslateY< maxTranslateY)) {
-                        setTranslateX(newTranslateX);
-                        setTranslateY(newTranslateY);
-                    }
+            setOnMouseDragged((MouseEvent me) -> {
+                double newTranslateX = startDragX
+                        + me.getSceneX() - dragAnchor.getX();
+                double newTranslateY = startDragY
+                        + me.getSceneY() - dragAnchor.getY();
+                double minTranslateX = - 45f - correctX;
+                double maxTranslateX = (deskWidth - Piece.SIZE + 50f ) - correctX;
+                double minTranslateY = - 30f - correctY;
+                double maxTranslateY = (deskHeight - Piece.SIZE + 70f ) - correctY;
+                if ((newTranslateX> minTranslateX ) &&
+                        (newTranslateX< maxTranslateX) &&
+                        (newTranslateY> minTranslateY) &&
+                        (newTranslateY< maxTranslateY)) {
+                    setTranslateX(newTranslateX);
+                    setTranslateY(newTranslateY);
                 }
             });
         }
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics2d/puzzle/PuzzlePiecesApp.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics2d/puzzle/PuzzlePiecesApp.java	Thu Feb 27 16:56:48 2014 -0800
@@ -95,45 +95,41 @@
         // create button box
         Button shuffleButton = new Button("Shuffle");
         shuffleButton.setStyle("-fx-font-size: 2em;");
-        shuffleButton.setOnAction(new EventHandler<ActionEvent>() {           
-            @Override public void handle(ActionEvent actionEvent) {
-                if (timeline != null) {
-                    timeline.stop();
-                }
-                timeline = new Timeline();
-                for (final Piece piece : pieces) {
-                    piece.setActive();
-                    double shuffleX = Math.random()
-                            * (desk.getWidth() - Piece.SIZE + 48f)
-                            - 24f - piece.getCorrectX();
-                    double shuffleY = Math.random()
-                            * (desk.getHeight() - Piece.SIZE + 30f)
-                            - 15f - piece.getCorrectY();
-                    timeline.getKeyFrames().add(
-                            new KeyFrame(Duration.seconds(1),
-                            new KeyValue(piece.translateXProperty(), shuffleX),
-                            new KeyValue(piece.translateYProperty(), shuffleY)));
-                }
-                timeline.playFromStart();
+        shuffleButton.setOnAction((ActionEvent actionEvent) -> {
+            if (timeline != null) {
+                timeline.stop();
             }
+            timeline = new Timeline();
+            for (final Piece piece : pieces) {
+                piece.setActive();
+                double shuffleX = Math.random()
+                        * (desk.getWidth() - Piece.SIZE + 48f)
+                        - 24f - piece.getCorrectX();
+                double shuffleY = Math.random()
+                        * (desk.getHeight() - Piece.SIZE + 30f)
+                        - 15f - piece.getCorrectY();
+                timeline.getKeyFrames().add(
+                        new KeyFrame(Duration.seconds(1),
+                                new KeyValue(piece.translateXProperty(), shuffleX),
+                                new KeyValue(piece.translateYProperty(), shuffleY)));
+            }
+            timeline.playFromStart();
         });
         Button solveButton = new Button("Solve");
         solveButton.setStyle("-fx-font-size: 2em;");
-        solveButton.setOnAction(new EventHandler<ActionEvent>() {            
-            @Override public void handle(ActionEvent actionEvent) {
-                if (timeline != null) {
-                    timeline.stop();
-                }
-                timeline = new Timeline();
-                for (final Piece piece : pieces) {
-                    piece.setInactive();
-                    timeline.getKeyFrames().add(
-                            new KeyFrame(Duration.seconds(1),
-                            new KeyValue(piece.translateXProperty(), 0),
-                            new KeyValue(piece.translateYProperty(), 0)));
-                }
-                timeline.playFromStart();
+        solveButton.setOnAction((ActionEvent actionEvent) -> {
+            if (timeline != null) {
+                timeline.stop();
             }
+            timeline = new Timeline();
+            for (final Piece piece : pieces) {
+                piece.setInactive();
+                timeline.getKeyFrames().add(
+                        new KeyFrame(Duration.seconds(1),
+                                new KeyValue(piece.translateXProperty(), 0),
+                                new KeyValue(piece.translateYProperty(), 0)));
+            }
+            timeline.playFromStart();
         });
         HBox buttonBox = new HBox(8);
         buttonBox.getChildren().addAll(shuffleButton, solveButton);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics2d/stopwatch/Watch.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics2d/stopwatch/Watch.java	Thu Feb 27 16:56:48 2014 -0800
@@ -90,10 +90,8 @@
 
     private void configureTimeline() {
         time.setCycleCount(Timeline.INDEFINITE);
-        KeyFrame keyFrame = new KeyFrame(Duration.millis(47), new EventHandler<ActionEvent>() {
-            public void handle(ActionEvent event) {
-                calculate();
-            }
+        KeyFrame keyFrame = new KeyFrame(Duration.millis(47), (ActionEvent event) -> {
+            calculate();
         });
         time.getKeyFrames().add(keyFrame);
     }
@@ -164,46 +162,34 @@
     }
 
     private void configureListeners() {
-        startButton.setOnMousePressed(new EventHandler<MouseEvent>() {          
-            @Override public void handle(MouseEvent me) {
-                startButton.moveDown();
-                me.consume();
-            }
+        startButton.setOnMousePressed((MouseEvent me) -> {
+            startButton.moveDown();
+            me.consume();
         });
 
-        stopButton.setOnMousePressed(new EventHandler<MouseEvent>() {          
-            @Override public void handle(MouseEvent me) {
-                stopButton.moveDown();
-                me.consume();
-            }
+        stopButton.setOnMousePressed((MouseEvent me) -> {
+            stopButton.moveDown();
+            me.consume();
         });
 
-        startButton.setOnMouseReleased(new EventHandler<MouseEvent>() {           
-            @Override public void handle(MouseEvent me) {
-                startButton.moveUp();
-                startStop();
-                me.consume();
-            }
+        startButton.setOnMouseReleased((MouseEvent me) -> {
+            startButton.moveUp();
+            startStop();
+            me.consume();
         });
 
-        stopButton.setOnMouseReleased(new EventHandler<MouseEvent>() {           
-            @Override public void handle(MouseEvent me) {
-                stopButton.moveUp();
-                stopReset();
-                me.consume();
-            }
+        stopButton.setOnMouseReleased((MouseEvent me) -> {
+            stopButton.moveUp();
+            stopReset();
+            me.consume();
         });
 
-        startButton.setOnMouseDragged(new EventHandler<MouseEvent>() {           
-            @Override public void handle(MouseEvent me) {
-                me.consume();
-            }
+        startButton.setOnMouseDragged((MouseEvent me) -> {
+            me.consume();
         });
 
-        stopButton.setOnMouseDragged(new EventHandler<MouseEvent>() {          
-            @Override public void handle(MouseEvent me) {
-                me.consume();
-            }
+        stopButton.setOnMouseDragged((MouseEvent me) -> {
+            me.consume();
         });
     }
 
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics3d/xylophone/XylophoneApp.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics3d/xylophone/XylophoneApp.java	Thu Feb 27 16:56:48 2014 -0800
@@ -173,45 +173,29 @@
         bar8Cube.setTranslateX(xStart + 8 * xOffset);
         bar8Cube.setTranslateZ(yPos);
 
-        bar1Cube.setOnMousePressed(new EventHandler<MouseEvent>() {
-            @Override public void handle(MouseEvent me) {
-                bar1Note.play();
-            }
+        bar1Cube.setOnMousePressed((MouseEvent me) -> {
+            bar1Note.play();
         });
-        bar2Cube.setOnMousePressed(new EventHandler<MouseEvent>() {
-            @Override public void handle(MouseEvent me) {
-                bar2Note.play();
-            }
+        bar2Cube.setOnMousePressed((MouseEvent me) -> {
+            bar2Note.play();
         });
-        bar3Cube.setOnMousePressed(new EventHandler<MouseEvent>() {
-            @Override public void handle(MouseEvent me) {
-                bar3Note.play();
-            }
+        bar3Cube.setOnMousePressed((MouseEvent me) -> {
+            bar3Note.play();
         });
-        bar4Cube.setOnMousePressed(new EventHandler<MouseEvent>() {
-            @Override public void handle(MouseEvent me) {
-                bar4Note.play();
-            }
+        bar4Cube.setOnMousePressed((MouseEvent me) -> {
+            bar4Note.play();
         });
-        bar5Cube.setOnMousePressed(new EventHandler<MouseEvent>() {
-            @Override public void handle(MouseEvent me) {
-                bar5Note.play();
-            }
+        bar5Cube.setOnMousePressed((MouseEvent me) -> {
+            bar5Note.play();
         });
-        bar6Cube.setOnMousePressed(new EventHandler<MouseEvent>() {
-            @Override public void handle(MouseEvent me) {
-                bar6Note.play();
-            }
+        bar6Cube.setOnMousePressed((MouseEvent me) -> {
+            bar6Note.play();
         });
-        bar7Cube.setOnMousePressed(new EventHandler<MouseEvent>() {
-            @Override public void handle(MouseEvent me) {
-                bar7Note.play();
-            }
+        bar7Cube.setOnMousePressed((MouseEvent me) -> {
+            bar7Note.play();
         });
-        bar8Cube.setOnMousePressed(new EventHandler<MouseEvent>() {
-            @Override public void handle(MouseEvent me) {
-                bar8Note.play();
-            }
+        bar8Cube.setOnMousePressed((MouseEvent me) -> {
+            bar8Note.play();
         });
         rectangleGroup.getChildren().addAll(base1Cube, base2Cube,
                 bar1Cube, bar2Cube, bar3Cube,
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/language/changelistener/ChangeListenerApp.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/language/changelistener/ChangeListenerApp.java	Thu Feb 27 16:56:48 2014 -0800
@@ -86,37 +86,26 @@
         text.setTextOrigin(VPos.TOP);
         text.setTextAlignment(TextAlignment.CENTER);
         // create listener
-        final InvalidationListener hoverListener = new InvalidationListener() {
-            @Override
-            public void invalidated(Observable ov) {
-                if (rect.isHover()) {
-                    text.setText("hovered");
-                } else {
-                    text.setText("not hovered");
-                }
+        final InvalidationListener hoverListener = (Observable ov) -> {
+            if (rect.isHover()) {
+                text.setText("hovered");
+            } else {
+                text.setText("not hovered");
             }
         };
         //create button for adding listener
         Button buttonAdd = new Button("Add listener");
         buttonAdd.setPrefSize(140, 18);
-        buttonAdd.setOnAction(new EventHandler<ActionEvent>() {
-            @Override
-            public void handle(ActionEvent t) {
-                //add the listener on property hover
-                rect.hoverProperty().addListener(hoverListener);
-                text.setText("listener added");
-            }
+        buttonAdd.setOnAction((ActionEvent t) -> {
+            rect.hoverProperty().addListener(hoverListener);
+            text.setText("listener added");
         });
         //create a button for removing the listener
         Button buttonRemove = new Button("Remove listener");
         buttonRemove.setPrefSize(140, 18);
-        buttonRemove.setOnAction(new EventHandler<ActionEvent>() {
-            @Override
-            public void handle(ActionEvent t) {
-                //remove the listener
-                rect.hoverProperty().removeListener(hoverListener);
-                text.setText("listener removed");
-            }
+        buttonRemove.setOnAction((ActionEvent t) -> {
+            rect.hoverProperty().removeListener(hoverListener);
+            text.setText("listener removed");
         });
         // show all nodes
         vbox.getChildren().addAll(text, buttonAdd, buttonRemove);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/language/concurrency/service/ServiceApp.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/language/concurrency/service/ServiceApp.java	Thu Feb 27 16:56:48 2014 -0800
@@ -70,12 +70,9 @@
         vbox.setPadding(new Insets(12));
         TableView tableView = new TableView();
         Button button = new Button("Refresh");
-        button.setOnAction(new EventHandler<ActionEvent>() {
-            @Override
-            public void handle(ActionEvent t) {
-                service.restart();
-            }
-        });
+        button.setOnAction((ActionEvent t) -> {
+            service.restart();
+       });
         vbox.setPrefHeight(160);
         vbox.getChildren().addAll(tableView, button);
 
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/language/observablelist/ObservableListApp.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/language/observablelist/ObservableListApp.java	Thu Feb 27 16:56:48 2014 -0800
@@ -90,47 +90,34 @@
         //create button for adding random integer to random position in observable list
         Button buttonAddNumber = new Button("Replace random integer");
         buttonAddNumber.setPrefSize(190, 45);
-        buttonAddNumber.setOnAction(new EventHandler<ActionEvent>() {
-            @Override
-            public void handle(ActionEvent t) {
-                int randomIndex = (int) (Math.round(Math.random() * (list.size() - 1)));
-                int randomNumber = (int) (Math.round(Math.random() * 10));
-                list.set(randomIndex, randomNumber);
-                //actualise content of the text to see the result
-                textList.setText(list.toString());
-            }
+        buttonAddNumber.setOnAction((ActionEvent t) -> {
+            int randomIndex = (int) (Math.round(Math.random() * (list.size() - 1)));
+            int randomNumber = (int) (Math.round(Math.random() * 10));
+            list.set(randomIndex, randomNumber);
+            //actualise content of the text to see the result
+            textList.setText(list.toString());
         });
 
         //create button for adding listener
         Button buttonAdd = new Button("Add list listener");
         buttonAdd.setPrefSize(190, 45);
-        final ListChangeListener<Integer> listener = new ListChangeListener<Integer>() {
-            @Override
-            public void onChanged(ListChangeListener.Change<? extends Integer> c) {
-                while (c.next()) {
-                    textMessage.setText("replacement on index " + c.getFrom());
-                }
+        final ListChangeListener<Integer> listener = (ListChangeListener.Change<? extends Integer> c) -> {
+            while (c.next()) {
+                textMessage.setText("replacement on index " + c.getFrom());
             }
         };
 
-        buttonAdd.setOnAction(new EventHandler<ActionEvent>() {
-            @Override
-            public void handle(ActionEvent t) {
-                list.addListener(listener);
-                textMessage.setText("listener added");
-            }
+        buttonAdd.setOnAction((ActionEvent t) -> {
+            list.addListener(listener);
+            textMessage.setText("listener added");
         });
 
         //create a button for removing the listener
         Button buttonRemove = new Button("Remove list listener");
         buttonRemove.setPrefSize(190, 45);
-        buttonRemove.setOnAction(new EventHandler<ActionEvent>() {
-            @Override
-            public void handle(ActionEvent t) {
-                //remove the listener
-                list.removeListener(listener);
-                textMessage.setText("listener removed");
-            }
+        buttonRemove.setOnAction((ActionEvent t) -> {
+            list.removeListener(listener);
+            textMessage.setText("listener removed");
         });
 
         VBox vBoxTop = new VBox(10);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/language/swing/SwingInteropApp.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/language/swing/SwingInteropApp.java	Thu Feb 27 16:56:48 2014 -0800
@@ -64,11 +64,8 @@
 
     public Parent createContent() {
         button.setPrefSize(180, 45);
-        button.setOnAction(new EventHandler<ActionEvent>() {
-            @Override
-            public void handle(ActionEvent t) {
-                service.restart();
-            }
+        button.setOnAction((ActionEvent t) -> {
+            service.restart();
         });
         button.disableProperty().bind(service.bp);
         return button;
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/media/advancedmedia/MediaControl.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/media/advancedmedia/MediaControl.java	Thu Feb 27 16:56:48 2014 -0800
@@ -137,81 +137,60 @@
         playButton.setMinWidth(Control.USE_PREF_SIZE);
 
         playButton.setGraphic(imageViewPlay);
-        playButton.setOnAction(new EventHandler<ActionEvent>() {
-            @Override
-            public void handle(ActionEvent e) {
-                updateValues();
-                MediaPlayer.Status status = mp.getStatus();
-                if (status == MediaPlayer.Status.UNKNOWN
-                        || status == MediaPlayer.Status.HALTED) {
-                    // don't do anything in these states
-                    return;
+        playButton.setOnAction((ActionEvent e) -> {
+            updateValues();
+            MediaPlayer.Status status = mp.getStatus();
+            if (status == MediaPlayer.Status.UNKNOWN
+                    || status == MediaPlayer.Status.HALTED) {
+                // don't do anything in these states
+                return;
+            }
+            
+            if (status == MediaPlayer.Status.PAUSED
+                    || status == MediaPlayer.Status.READY
+                    || status == MediaPlayer.Status.STOPPED) {
+                // rewind the movie if we're sitting at the end
+                if (atEndOfMedia) {
+                    mp.seek(mp.getStartTime());
+                    atEndOfMedia = false;
+                    playButton.setGraphic(imageViewPlay);
+                    //playButton.setText(">");
+                    updateValues();
                 }
-
-                if (status == MediaPlayer.Status.PAUSED
-                        || status == MediaPlayer.Status.READY
-                        || status == MediaPlayer.Status.STOPPED) {
-                    // rewind the movie if we're sitting at the end
-                    if (atEndOfMedia) {
-                        mp.seek(mp.getStartTime());
-                        atEndOfMedia = false;
-                        playButton.setGraphic(imageViewPlay);
-                        //playButton.setText(">");
-                        updateValues();
-                    }
-                    mp.play();
-                    playButton.setGraphic(imageViewPause);
-                    //playButton.setText("||");
-                } else {
-                    mp.pause();
-                }
+                mp.play();
+                playButton.setGraphic(imageViewPause);
+                //playButton.setText("||");
+            } else {
+                mp.pause();
             }
         });
-        mp.currentTimeProperty().addListener(new ChangeListener<Duration>() {
-            @Override
-            public void changed(ObservableValue<? extends Duration> observable, Duration oldValue, Duration newValue) {
-                updateValues();
-            }
+        mp.currentTimeProperty().addListener((ObservableValue<? extends Duration> observable, Duration oldValue, Duration newValue) -> {
+            updateValues();
         });
-        mp.setOnPlaying(new Runnable() {
-            @Override
-            public void run() {
-
-                if (stopRequested) {
-                    mp.pause();
-                    stopRequested = false;
-                } else {
-                    playButton.setGraphic(imageViewPause);
-                    //playButton.setText("||");
-                }
-            }
-        });
-        mp.setOnPaused(new Runnable() {
-            @Override
-            public void run() {
-
-                playButton.setGraphic(imageViewPlay);
+        mp.setOnPlaying(() -> {
+            if (stopRequested) {
+                mp.pause();
+                stopRequested = false;
+            } else {
+                playButton.setGraphic(imageViewPause);
                 //playButton.setText("||");
             }
         });
-        mp.setOnReady(new Runnable() {
-            @Override
-            public void run() {
-                duration = mp.getMedia().getDuration();
-                updateValues();
-            }
+        mp.setOnPaused(() -> {
+            playButton.setGraphic(imageViewPlay);
+        });
+        mp.setOnReady(() -> {
+            duration = mp.getMedia().getDuration();
+            updateValues();
         });
 
         mp.setCycleCount(repeat ? MediaPlayer.INDEFINITE : 1);
-        mp.setOnEndOfMedia(new Runnable() {
-            @Override
-            public void run() {
-                if (!repeat) {
-                    playButton.setGraphic(imageViewPlay);
-                    //playButton.setText(">");
-                    stopRequested = true;
-                    atEndOfMedia = true;
-                }
+        mp.setOnEndOfMedia(() -> {
+            if (!repeat) {
+                playButton.setGraphic(imageViewPlay);
+                //playButton.setText(">");
+                stopRequested = true;
+                atEndOfMedia = true;
             }
         });
         mediaBar.getChildren().add(playButton);
@@ -228,17 +207,14 @@
         timeSlider.setMaxWidth(Double.MAX_VALUE);
         
         HBox.setHgrow(timeSlider, Priority.ALWAYS);
-        timeSlider.valueProperty().addListener(new InvalidationListener() {
-            @Override
-            public void invalidated(Observable ov) {
-                if (timeSlider.isValueChanging()) {
-                    // multiply duration by percentage calculated by slider position
-                    if (duration != null) {
-                        mp.seek(duration.multiply(timeSlider.getValue() / 100.0));
-                    }
-                    updateValues();
-
+        timeSlider.valueProperty().addListener((Observable ov) -> {
+            if (timeSlider.isValueChanging()) {
+                // multiply duration by percentage calculated by slider position
+                if (duration != null) {
+                    mp.seek(duration.multiply(timeSlider.getValue() / 100.0));
                 }
+                updateValues();
+                
             }
         });
         mediaBar.getChildren().add(timeSlider);
@@ -259,11 +235,8 @@
             public void handle(ActionEvent event) {
                 if (!fullScreen) {
                     newStage = new Stage();
-                    newStage.fullScreenProperty().addListener(new ChangeListener<Boolean>() {
-                        @Override
-                        public void changed(ObservableValue<? extends Boolean> ov, Boolean t, Boolean t1) {
-                            onFullScreen();
-                        }
+                    newStage.fullScreenProperty().addListener((ObservableValue<? extends Boolean> ov, Boolean t, Boolean t1) -> {
+                        onFullScreen();
                     });
                     final BorderPane borderPane = new BorderPane() {
                         @Override
@@ -317,17 +290,11 @@
         volumeSlider.setPrefWidth(70);
         volumeSlider.setMinWidth(30);
         volumeSlider.setMaxWidth(Region.USE_PREF_SIZE);
-        volumeSlider.valueProperty().addListener(new InvalidationListener() {
-            @Override
-            public void invalidated(Observable ov) {
-            }
+        volumeSlider.valueProperty().addListener((Observable ov) -> {
         });
-        volumeSlider.valueProperty().addListener(new ChangeListener<Number>() {
-            @Override
-            public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
-                if (volumeSlider.isValueChanging()) {
-                    mp.setVolume(volumeSlider.getValue() / 100.0);
-                }
+        volumeSlider.valueProperty().addListener((ObservableValue<? extends Number> observable, Number oldValue, Number newValue) -> {
+            if (volumeSlider.isValueChanging()) {
+                mp.setVolume(volumeSlider.getValue() / 100.0);
             }
         });
         mediaBar.getChildren().add(volumeSlider);
@@ -346,11 +313,8 @@
             
             smallBP.setBottom(null);
             setBottom(mediaBar);
-            Platform.runLater(new Runnable() {
-                @Override
-                public void run() {
-                    newStage.close();
-                }
+            Platform.runLater(() -> {
+                newStage.close();
             });
 
         }
@@ -358,18 +322,15 @@
 
     protected void updateValues() {
         if (playTime != null && timeSlider != null && volumeSlider != null && duration != null) {
-            Platform.runLater(new Runnable() {
-                @Override
-                public void run() {
-                    Duration currentTime = mp.getCurrentTime();
-                    playTime.setText(formatTime(currentTime, duration));
-                    timeSlider.setDisable(duration.isUnknown());
-                    if (!timeSlider.isDisabled() && duration.greaterThan(Duration.ZERO) && !timeSlider.isValueChanging()) {
-                        timeSlider.setValue(currentTime.divide(duration).toMillis() * 100.0);
-                    }
-                    if (!volumeSlider.isValueChanging()) {
-                        volumeSlider.setValue((int) Math.round(mp.getVolume() * 100));
-                    }
+            Platform.runLater(() -> {
+                Duration currentTime = mp.getCurrentTime();
+                playTime.setText(formatTime(currentTime, duration));
+                timeSlider.setDisable(duration.isUnknown());
+                if (!timeSlider.isDisabled() && duration.greaterThan(Duration.ZERO) && !timeSlider.isValueChanging()) {
+                    timeSlider.setValue(currentTime.divide(duration).toMillis() * 100.0);
+                }
+                if (!volumeSlider.isValueChanging()) {
+                    volumeSlider.setValue((int) Math.round(mp.getVolume() * 100));
                 }
             });
         }
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/media/alphamediaplayer/AlphaMediaPlayerApp.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/media/alphamediaplayer/AlphaMediaPlayerApp.java	Thu Feb 27 16:56:48 2014 -0800
@@ -76,33 +76,20 @@
         fierPlayer = new MediaPlayer(new Media(FIER_URL));
         fierPlayer.setAutoPlay(true);
 
-        arthPos.addListener(new InvalidationListener() {
-            @Override
-            public void invalidated(Observable observable) {
-                planetaryPlayerPane.setTranslate1(arthPos.doubleValue());
-            }
+        arthPos.addListener((Observable observable) -> {
+            planetaryPlayerPane.setTranslate1(arthPos.doubleValue());
         });
 
-        fierPos.addListener(new InvalidationListener() {
-            @Override
-            public void invalidated(Observable observable) {
-                planetaryPlayerPane.setTranslate2(fierPos.doubleValue());
-
-            }
+        fierPos.addListener((Observable observable) -> {
+            planetaryPlayerPane.setTranslate2(fierPos.doubleValue());
         });
 
-        arthRate.addListener(new InvalidationListener() {
-            @Override
-            public void invalidated(Observable observable) {
-                arthPlayer.setRate(arthRate.doubleValue());
-            }
+        arthRate.addListener((Observable observable) -> {
+            arthPlayer.setRate(arthRate.doubleValue());
         });
 
-        fierRate.addListener(new InvalidationListener() {
-            @Override
-            public void invalidated(Observable observable) {
-                fierPlayer.setRate(fierRate.doubleValue());
-            }
+        fierRate.addListener((Observable observable) -> {
+            fierPlayer.setRate(fierRate.doubleValue());
         });
 
         planetaryPlayerPane = new PlanetaryPlayerPane(arthPlayer, fierPlayer);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/media/alphamediaplayer/PlanetaryPlayerPane.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/media/alphamediaplayer/PlanetaryPlayerPane.java	Thu Feb 27 16:56:48 2014 -0800
@@ -80,76 +80,54 @@
         mvPane.getChildren().add(mediaViewerGroup);
         setCenter(mvPane);
 
-        mp1.setOnPlaying(new Runnable() {
-            @Override public void run() {
-                if (stopRequested) {
-                    mp1.pause();
-                    stopRequested = false;
-                }
+        mp1.setOnPlaying(() -> {
+            if (stopRequested) {
+                mp1.pause();
+                stopRequested = false;
             }
         });
-        mp1.setOnEndOfMedia(new Runnable() {
-            @Override public void run() {
-                if (!repeat) {
-                    stopRequested = true;
-                    atEndOfMedia = true;
-                }
+        mp1.setOnEndOfMedia(() -> {
+            if (!repeat) {
+                stopRequested = true;
+                atEndOfMedia = true;
             }
         });
         mp1.setCycleCount(repeat ? MediaPlayer.INDEFINITE : 1);
 
-        mp2.setOnPlaying(new Runnable() {
-            @Override public void run() {
-                if (stopRequested) {
-                    mp2.pause();
-                    stopRequested = false;
-                }
+        mp2.setOnPlaying(() -> {
+            if (stopRequested) {
+                mp2.pause();
+                stopRequested = false;
             }
         });
-        mp2.setOnEndOfMedia(new Runnable() {
-            @Override public void run() {
-                if (!repeat) {
-                    stopRequested = true;
-                    atEndOfMedia = true;
-                }
+        mp2.setOnEndOfMedia(() -> {
+            if (!repeat) {
+                stopRequested = true;
+                atEndOfMedia = true;
             }
         });
         mp2.setCycleCount(repeat ? MediaPlayer.INDEFINITE : 1);
 
-        final EventHandler<ActionEvent> backAction = new EventHandler<ActionEvent>() {
-            @Override public void handle(ActionEvent e) {
-                mp1.seek(Duration.ZERO);
-                mp2.seek(Duration.ZERO);
-            }
+        final EventHandler<ActionEvent> backAction = (ActionEvent e) -> {
+            mp1.seek(Duration.ZERO);
+            mp2.seek(Duration.ZERO);
         };
-        final EventHandler<ActionEvent> stopAction = new EventHandler<ActionEvent>() {
-            @Override
-            public void handle(ActionEvent e) {
-                mp1.stop();
-                mp2.stop();
-            }
+        final EventHandler<ActionEvent> stopAction = (ActionEvent e) -> {
+            mp1.stop();
+            mp2.stop();
         };
-        final EventHandler<ActionEvent> playAction = new EventHandler<ActionEvent>() {
-            @Override
-            public void handle(ActionEvent e) {
-                mp1.play();
-                mp2.play();
-            }
+        final EventHandler<ActionEvent> playAction = (ActionEvent e) -> {
+            mp1.play();
+            mp2.play();
         };
-        final EventHandler<ActionEvent> pauseAction = new EventHandler<ActionEvent>() {
-            @Override
-            public void handle(ActionEvent e) {
-                mp1.pause();
-                mp2.pause();
-            }
+        final EventHandler<ActionEvent> pauseAction = (ActionEvent e) -> {
+            mp1.pause();
+            mp2.pause();
         };
-        final EventHandler<ActionEvent> forwardAction = new EventHandler<ActionEvent>() {
-            @Override
-            public void handle(ActionEvent e) {
-                Duration currentTime = mp1.getCurrentTime();
-                mp1.seek(Duration.seconds(currentTime.toSeconds() + 0.1));
-                mp2.seek(Duration.seconds(currentTime.toSeconds() + 0.1));
-            }
+        final EventHandler<ActionEvent> forwardAction = (ActionEvent e) -> {
+            Duration currentTime = mp1.getCurrentTime();
+            mp1.seek(Duration.seconds(currentTime.toSeconds() + 0.1));
+            mp2.seek(Duration.seconds(currentTime.toSeconds() + 0.1));
         };
         
         mediaBottomBar = new HBox();
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/media/audioclip/AudioClipApp.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/media/audioclip/AudioClipApp.java	Thu Feb 27 16:56:48 2014 -0800
@@ -106,11 +106,8 @@
         Lighting lighting = new Lighting(new Light.Point(-20, -20, 100, Color.WHITE));
         lighting.setSurfaceScale(1);
         rectangle.setEffect(lighting);
-        rectangle.setOnMousePressed(new EventHandler<MouseEvent>() {
-            @Override
-            public void handle(MouseEvent me) {
-                barNote.play();
-            }
+        rectangle.setOnMousePressed((MouseEvent me) -> {
+            barNote.play();
         });
         return rectangle;
     }
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/media/overlaymediaplayer/PlayerPane.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/media/overlaymediaplayer/PlayerPane.java	Thu Feb 27 16:56:48 2014 -0800
@@ -118,70 +118,53 @@
             topBar.setStyle("-fx-background-color: rgb(0,0,0.0,0.0);");
             bottomBar.setStyle("-fx-background-color: rgb(0,0,0.0,0.0);");
 
-            setOnMouseEntered(new EventHandler<MouseEvent>() {
-                @Override
-                public void handle(MouseEvent t) {
-                    if (transition != null) {
-                        transition.stop();
-                    }
-                    FadeTransition fadeTransition1 = new FadeTransition(Duration.millis(200), topBar);
-                    fadeTransition1.setToValue(1.0);
-                    fadeTransition1.setInterpolator(Interpolator.EASE_OUT);
+            setOnMouseEntered((MouseEvent t) -> {
+                if (transition != null) {
+                    transition.stop();
+                }
+                FadeTransition fadeTransition1 = new FadeTransition(Duration.millis(200), topBar);
+                fadeTransition1.setToValue(1.0);
+                fadeTransition1.setInterpolator(Interpolator.EASE_OUT);
+                
+                FadeTransition fadeTransition2 = new FadeTransition(Duration.millis(200), bottomBar);
+                fadeTransition2.setToValue(1.0);
+                fadeTransition2.setInterpolator(Interpolator.EASE_OUT);
+                
+                transition = new ParallelTransition(fadeTransition1, fadeTransition2);
+                transition.play();
+            });
+            setOnMouseExited((MouseEvent t) -> {
+                if (transition != null) {
+                    transition.stop();
+                }
+                FadeTransition fadeTransitionTop = new FadeTransition(Duration.millis(800), topBar);
+                fadeTransitionTop.setToValue(0.0);
+                fadeTransitionTop.setInterpolator(Interpolator.EASE_OUT);
+                
+                FadeTransition fadeTransitionBottom = new FadeTransition(Duration.millis(800), bottomBar);
+                fadeTransitionBottom.setToValue(0.0);
+                fadeTransitionBottom.setInterpolator(Interpolator.EASE_OUT);
+                transition = new ParallelTransition(fadeTransitionTop, fadeTransitionBottom);
+                transition.play();
+            });
 
-                    FadeTransition fadeTransition2 = new FadeTransition(Duration.millis(200), bottomBar);
-                    fadeTransition2.setToValue(1.0);
-                    fadeTransition2.setInterpolator(Interpolator.EASE_OUT);
-
-                    transition = new ParallelTransition(fadeTransition1, fadeTransition2);
-                    transition.play();
+            mp.currentTimeProperty().addListener((ObservableValue<? extends Duration> observable, Duration oldValue, Duration newValue) -> {
+                updateValues();
+            });
+            mp.setOnPlaying(() -> {
+                if (stopRequested) {
+                    mp.pause();
+                    stopRequested = false; 
                 }
             });
-            setOnMouseExited(new EventHandler<MouseEvent>() {
-                @Override public void handle(MouseEvent t) {
-                    if (transition != null) {
-                        transition.stop();
-                    }                                                 
-                    FadeTransition fadeTransitionTop = new FadeTransition(Duration.millis(800), topBar);
-                    fadeTransitionTop.setToValue(0.0);
-                    fadeTransitionTop.setInterpolator(Interpolator.EASE_OUT);
- 
-                    FadeTransition fadeTransitionBottom = new FadeTransition(Duration.millis(800), bottomBar);
-                    fadeTransitionBottom.setToValue(0.0);
-                    fadeTransitionBottom.setInterpolator(Interpolator.EASE_OUT);
-                    transition = new ParallelTransition(fadeTransitionTop, fadeTransitionBottom);
-                    transition.play();
-                }
+            mp.setOnReady(() -> {
+                duration = mp.getMedia().getDuration();
+                updateValues();
             });
-
-            mp.currentTimeProperty().addListener(new ChangeListener<Duration>() {
-                @Override
-                public void changed(ObservableValue<? extends Duration> observable, Duration oldValue, Duration newValue) {
-                    updateValues();
-                }
-            });
-            mp.setOnPlaying(new Runnable() {
-                @Override
-                public void run() {
-                    if (stopRequested) {
-                        mp.pause();
-                        stopRequested = false;
-                    } 
-                }
-            });
-            mp.setOnReady(new Runnable() {
-                @Override
-                public void run() {
-                    duration = mp.getMedia().getDuration();
-                    updateValues();
-                }
-            });
-            mp.setOnEndOfMedia(new Runnable() {
-                @Override
-                public void run() {
-                    if (!repeat) {
-                        stopRequested = true;
-                        atEndOfMedia = true;
-                    }
+            mp.setOnEndOfMedia(() -> {
+                if (!repeat) {
+                    stopRequested = true;
+                    atEndOfMedia = true;
                 }
             });
             mp.setCycleCount(repeat ? MediaPlayer.INDEFINITE : 1);
@@ -198,17 +181,14 @@
             timeSlider.setId("media-slider");
             timeSlider.setMinWidth(200);
             timeSlider.setMaxWidth(Double.MAX_VALUE);
-            timeSlider.valueProperty().addListener(new InvalidationListener() {
-                @Override
-                public void invalidated(Observable ov) {
-                    if (timeSlider.isValueChanging()) {
-                        // multiply duration by percentage calculated by slider position
-                        if (duration != null) {
-                            mp.seek(duration.multiply(timeSlider.getValue() / 100.0));
-                        }
-                        updateValues();
-
+            timeSlider.valueProperty().addListener((Observable ov) -> {
+                if (timeSlider.isValueChanging()) {
+                    // multiply duration by percentage calculated by slider position
+                    if (duration != null) {
+                        mp.seek(duration.multiply(timeSlider.getValue() / 100.0));
                     }
+                    updateValues();
+                    
                 }
             });
             mediaTopBar.getChildren().add(timeSlider);
@@ -233,51 +213,30 @@
             volumeSlider.setPrefWidth(120);
             volumeSlider.setMinWidth(30);
             volumeSlider.setMaxWidth(Region.USE_PREF_SIZE);
-            volumeSlider.valueProperty().addListener(new InvalidationListener() {
-                @Override
-                public void invalidated(Observable ov) {
-                }
+            volumeSlider.valueProperty().addListener((Observable ov) -> {
             });
-            volumeSlider.valueProperty().addListener(new ChangeListener<Number>() {
-                @Override
-                public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
-                    if (volumeSlider.isValueChanging()) {
-                        mp.setVolume(volumeSlider.getValue() / 100.0);
-                    }
+            volumeSlider.valueProperty().addListener((ObservableValue<? extends Number> observable, Number oldValue, Number newValue) -> {
+                if (volumeSlider.isValueChanging()) {
+                    mp.setVolume(volumeSlider.getValue() / 100.0);
                 }
             });
             mediaTopBar.getChildren().add(volumeSlider);
                         
-            final EventHandler<ActionEvent> backAction = new EventHandler<ActionEvent>() {
-                @Override
-                public void handle(ActionEvent e) {
-                    mp.seek(Duration.ZERO);
-                }
+            final EventHandler<ActionEvent> backAction = (ActionEvent e) -> {
+                mp.seek(Duration.ZERO);
             };
-            final EventHandler<ActionEvent> stopAction = new EventHandler<ActionEvent>() {
-                @Override
-                public void handle(ActionEvent e) {
-                    mp.stop();
-                }
+            final EventHandler<ActionEvent> stopAction = (ActionEvent e) -> {
+                mp.stop();
             };
-            final EventHandler<ActionEvent> playAction = new EventHandler<ActionEvent>() {
-                @Override
-                public void handle(ActionEvent e) {
-                    mp.play();
-                }
+            final EventHandler<ActionEvent> playAction = (ActionEvent e) -> {
+                mp.play();
             };
-            final EventHandler<ActionEvent> pauseAction = new EventHandler<ActionEvent>() {
-                @Override
-                public void handle(ActionEvent e) {
-                    mp.pause();
-                }
+            final EventHandler<ActionEvent> pauseAction = (ActionEvent e) -> {
+                mp.pause();
             };
-            final EventHandler<ActionEvent> forwardAction = new EventHandler<ActionEvent>() {
-                @Override
-                public void handle(ActionEvent e) {
-                    Duration currentTime = mp.getCurrentTime();
-                    mp.seek(Duration.seconds(currentTime.toSeconds() + 5.0));
-                }
+            final EventHandler<ActionEvent> forwardAction = (ActionEvent e) -> {
+                Duration currentTime = mp.getCurrentTime();
+                mp.seek(Duration.seconds(currentTime.toSeconds() + 5.0));
             };
 
             mediaBottomBar = new HBox();
@@ -318,18 +277,15 @@
 
         protected void updateValues() {
             if (playTime != null && timeSlider != null && volumeSlider != null && duration != null) {
-                Platform.runLater(new Runnable() {
-                    @Override
-                    public void run() {
-                        Duration currentTime = mp.getCurrentTime();
-                        playTime.setText(formatTime(currentTime, duration));
-                        timeSlider.setDisable(duration.isUnknown());
-                        if (!timeSlider.isDisabled() && duration.greaterThan(Duration.ZERO) && !timeSlider.isValueChanging()) {
-                            timeSlider.setValue(currentTime.divide(duration).toMillis() * 100.0);
-                        }
-                        if (!volumeSlider.isValueChanging()) {
-                            volumeSlider.setValue((int) Math.round(mp.getVolume() * 100));
-                        }
+                Platform.runLater(() -> {
+                    Duration currentTime = mp.getCurrentTime();
+                    playTime.setText(formatTime(currentTime, duration));
+                    timeSlider.setDisable(duration.isUnknown());
+                    if (!timeSlider.isDisabled() && duration.greaterThan(Duration.ZERO) && !timeSlider.isValueChanging()) {
+                        timeSlider.setValue(currentTime.divide(duration).toMillis() * 100.0);
+                    }
+                    if (!volumeSlider.isValueChanging()) {
+                        volumeSlider.setValue((int) Math.round(mp.getVolume() * 100));
                     }
                 });
             }
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/media/streamingmediaplayer/PlayerPane.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/media/streamingmediaplayer/PlayerPane.java	Thu Feb 27 16:56:48 2014 -0800
@@ -131,35 +131,23 @@
         BorderPane.setAlignment(mediaTopBar, Pos.CENTER);
 
 
-        mp.currentTimeProperty().addListener(new ChangeListener<Duration>() {
-            @Override
-            public void changed(ObservableValue<? extends Duration> observable, Duration oldValue, Duration newValue) {
-                updateValues();
+        mp.currentTimeProperty().addListener((ObservableValue<? extends Duration> observable, Duration oldValue, Duration newValue) -> {
+            updateValues();
+        });
+        mp.setOnPlaying(() -> {
+            if (stopRequested) {
+                mp.pause();
+                stopRequested = false;
             }
         });
-        mp.setOnPlaying(new Runnable() {
-            @Override
-            public void run() {
-                if (stopRequested) {
-                    mp.pause();
-                    stopRequested = false;
-                }
-            }
+        mp.setOnReady(() -> {
+            duration = mp.getMedia().getDuration();
+            updateValues();
         });
-        mp.setOnReady(new Runnable() {
-            @Override
-            public void run() {
-                duration = mp.getMedia().getDuration();
-                updateValues();
-            }
-        });
-        mp.setOnEndOfMedia(new Runnable() {
-            @Override
-            public void run() {
-                if (!repeat) {
-                    stopRequested = true;
-                    atEndOfMedia = true;
-                }
+        mp.setOnEndOfMedia(() -> {
+            if (!repeat) {
+                stopRequested = true;
+                atEndOfMedia = true;
             }
         });
         mp.setCycleCount(repeat ? MediaPlayer.INDEFINITE : 1);
@@ -175,17 +163,14 @@
         timeSlider.setId("media-slider");
         timeSlider.setMinWidth(240);
         timeSlider.setMaxWidth(Double.MAX_VALUE);
-        timeSlider.valueProperty().addListener(new InvalidationListener() {
-            @Override
-            public void invalidated(Observable ov) {
-                if (timeSlider.isValueChanging()) {
-                    // multiply duration by percentage calculated by slider position
-                    if (duration != null) {
-                        mp.seek(duration.multiply(timeSlider.getValue() / 100.0));
-                    }
-                    updateValues();
-
+        timeSlider.valueProperty().addListener((Observable ov) -> {
+            if (timeSlider.isValueChanging()) {
+                // multiply duration by percentage calculated by slider position
+                if (duration != null) {
+                    mp.seek(duration.multiply(timeSlider.getValue() / 100.0));
                 }
+                updateValues();
+                
             }
         });
         HBox.setHgrow(timeSlider, Priority.ALWAYS);
@@ -210,53 +195,32 @@
         volumeSlider.setPrefWidth(120);
         volumeSlider.setMinWidth(30);
         volumeSlider.setMaxWidth(Region.USE_PREF_SIZE);
-        volumeSlider.valueProperty().addListener(new InvalidationListener() {
-            @Override
-            public void invalidated(Observable ov) {
-            }
+        volumeSlider.valueProperty().addListener((Observable ov) -> {
         });
-        volumeSlider.valueProperty().addListener(new ChangeListener<Number>() {
-            @Override
-            public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
-                if (volumeSlider.isValueChanging()) {
-                    mp.setVolume(volumeSlider.getValue() / 100.0);
-                }
+        volumeSlider.valueProperty().addListener((ObservableValue<? extends Number> observable, Number oldValue, Number newValue) -> {
+            if (volumeSlider.isValueChanging()) {
+                mp.setVolume(volumeSlider.getValue() / 100.0);
             }
         });
         mediaTopBar.getChildren().add(volumeSlider);
 
         setTop(mediaTopBar);
 
-        final EventHandler<ActionEvent> backAction = new EventHandler<ActionEvent>() {
-            @Override
-            public void handle(ActionEvent e) {
-                mp.seek(Duration.ZERO);
-            }
+        final EventHandler<ActionEvent> backAction = (ActionEvent e) -> {
+            mp.seek(Duration.ZERO);
         };
-        final EventHandler<ActionEvent> stopAction = new EventHandler<ActionEvent>() {
-            @Override
-            public void handle(ActionEvent e) {
-                mp.stop();
-            }
+        final EventHandler<ActionEvent> stopAction = (ActionEvent e) -> {
+            mp.stop();
         };
-        final EventHandler<ActionEvent> playAction = new EventHandler<ActionEvent>() {
-            @Override
-            public void handle(ActionEvent e) {
-                mp.play();
-            }
+        final EventHandler<ActionEvent> playAction = (ActionEvent e) -> {
+            mp.play();
         };
-        final EventHandler<ActionEvent> pauseAction = new EventHandler<ActionEvent>() {
-            @Override
-            public void handle(ActionEvent e) {
-                mp.pause();
-            }
+        final EventHandler<ActionEvent> pauseAction = (ActionEvent e) -> {
+            mp.pause();
         };
-        final EventHandler<ActionEvent> forwardAction = new EventHandler<ActionEvent>() {
-            @Override
-            public void handle(ActionEvent e) {
-                Duration currentTime = mp.getCurrentTime();
-                mp.seek(Duration.seconds(currentTime.toSeconds() + 5.0));
-            }
+        final EventHandler<ActionEvent> forwardAction = (ActionEvent e) -> {
+            Duration currentTime = mp.getCurrentTime();
+            mp.seek(Duration.seconds(currentTime.toSeconds() + 5.0));
         };
 
         Button backButton = new Button("Back");
@@ -290,18 +254,15 @@
 
     protected void updateValues() {
         if (playTime != null && timeSlider != null && volumeSlider != null && duration != null) {
-            Platform.runLater(new Runnable() {
-                @Override
-                public void run() {
-                    Duration currentTime = mp.getCurrentTime();
-                    playTime.setText(formatTime(currentTime, duration));
-                    timeSlider.setDisable(duration.isUnknown());
-                    if (!timeSlider.isDisabled() && duration.greaterThan(Duration.ZERO) && !timeSlider.isValueChanging()) {
-                        timeSlider.setValue(currentTime.divide(duration).toMillis() * 100.0);
-                    }
-                    if (!volumeSlider.isValueChanging()) {
-                        volumeSlider.setValue((int) Math.round(mp.getVolume() * 100));
-                    }
+            Platform.runLater(() -> {
+                Duration currentTime = mp.getCurrentTime();
+                playTime.setText(formatTime(currentTime, duration));
+                timeSlider.setDisable(duration.isUnknown());
+                if (!timeSlider.isDisabled() && duration.greaterThan(Duration.ZERO) && !timeSlider.isValueChanging()) {
+                    timeSlider.setValue(currentTime.divide(duration).toMillis() * 100.0);
+                }
+                if (!volumeSlider.isValueChanging()) {
+                    volumeSlider.setValue((int) Math.round(mp.getVolume() * 100));
                 }
             });
         }
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/scenegraph/advancedstage/AdvancedStageApp.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/scenegraph/advancedstage/AdvancedStageApp.java	Thu Feb 27 16:56:48 2014 -0800
@@ -79,98 +79,45 @@
         Button button = new Button("Create a Stage");
         button.setStyle("-fx-font-size: 24;");
         button.setDefaultButton(true);
-        button.setOnAction(new EventHandler<ActionEvent>() {
-            @Override
-            public void handle(ActionEvent t) {
-                // INITIALISATION OF THE STAGE/SCENE
-
-                //create stage which has set stage style transparent
-                final Stage stage = new Stage(StageStyle.TRANSPARENT);
-                
-                //create root node of scene, i.e. group
-                Group rootGroup = new Group();
-                
-                //create scene with set width, height and color
-                Scene scene = new Scene(rootGroup, 200, 200, Color.TRANSPARENT);
-                
-                //set scene to stage
-                stage.setScene(scene);
-                
-                //center stage on screen
-                stage.centerOnScreen();
-                
-                //show the stage
-                stage.show();
-
-                // CREATION OF THE DRAGGER (CIRCLE)
-
-                //create dragger with desired size
-                Circle dragger = new Circle(100, 100, 100);
-                
-                //fill the dragger with some nice radial background
-                dragger.setFill(new RadialGradient(-0.3, 135, 0.5, 0.5, 1, true, CycleMethod.NO_CYCLE, new Stop[]{
-                            new Stop(0, Color.DARKGRAY),
-                            new Stop(1, Color.BLACK)
-                        }));
-
-                //when mouse button is pressed, save the initial position of screen
-                rootGroup.setOnMousePressed(new EventHandler<MouseEvent>() {
-                    @Override
-                    public void handle(MouseEvent me) {
-                        initX = me.getScreenX() - stage.getX();
-                        initY = me.getScreenY() - stage.getY();
-                    }
-                });
-
-                //when screen is dragged, translate it accordingly
-                rootGroup.setOnMouseDragged(new EventHandler<MouseEvent>() {
-                    @Override
-                    public void handle(MouseEvent me) {
-                        stage.setX(me.getScreenX() - initX);
-                        stage.setY(me.getScreenY() - initY);
-                    }
-                });
-
-                // CREATE MIN AND CLOSE BUTTONS
-                //create button for closing application
-                Button close = new Button("Close me");
-                close.setOnAction(new EventHandler<ActionEvent>() {
-                    @Override
-                    public void handle(ActionEvent event) {
-                        //in case we would like to close whole demo
-                        //javafx.application.Platform.exit();
-
-                        //however we want to close only this instance of stage
-                        stage.close();
-                    }
-                });
-
-                //create button for minimalising application
-                Button min = new Button("Minimize me");
-                min.setOnAction(new EventHandler<ActionEvent>() {
-                    @Override
-                    public void handle(ActionEvent event) {
-                        stage.setIconified(true);
-                    }
-                });
-
-                // CREATE SIMPLE TEXT NODE
-                Text text = new Text("JavaFX"); //20, 110,
-                text.setFill(Color.WHITESMOKE);
-                text.setEffect(new Lighting());
-                text.setBoundsType(TextBoundsType.VISUAL);
-                text.setFont(Font.font(Font.getDefault().getFamily(), 50));
-
-                // USE A LAYOUT VBOX FOR EASIER POSITIONING OF THE VISUAL NODES ON SCENE
-                VBox vBox = new VBox();
-                vBox.setSpacing(10);
-                vBox.setPadding(new Insets(60, 0, 0, 20));
-                vBox.setAlignment(Pos.TOP_CENTER);
-                vBox.getChildren().addAll(text, min, close);
-
-                //add all nodes to main root group
-                rootGroup.getChildren().addAll(dragger, vBox);
-            }
+        button.setOnAction((ActionEvent t) -> {
+            final Stage stage = new Stage(StageStyle.TRANSPARENT);
+            Group rootGroup = new Group();
+            Scene scene = new Scene(rootGroup, 200, 200, Color.TRANSPARENT);
+            stage.setScene(scene);
+            stage.centerOnScreen();
+            stage.show();
+            Circle dragger = new Circle(100, 100, 100);
+            dragger.setFill(new RadialGradient(-0.3, 135, 0.5, 0.5, 1, true, CycleMethod.NO_CYCLE, new Stop[]{
+                new Stop(0, Color.DARKGRAY),
+                new Stop(1, Color.BLACK)
+            }));
+            rootGroup.setOnMousePressed((MouseEvent me) -> {
+                initX = me.getScreenX() - stage.getX();
+                initY = me.getScreenY() - stage.getY();
+            });
+            rootGroup.setOnMouseDragged((MouseEvent me) -> {
+                stage.setX(me.getScreenX() - initX);
+                stage.setY(me.getScreenY() - initY);
+            });
+            Button close = new Button("Close me");
+            close.setOnAction((ActionEvent event) -> {
+                stage.close();
+            });
+            Button min = new Button("Minimize me");
+            min.setOnAction((ActionEvent event) -> {
+                stage.setIconified(true);
+            });
+            Text text = new Text("JavaFX");
+            text.setFill(Color.WHITESMOKE);
+            text.setEffect(new Lighting());
+            text.setBoundsType(TextBoundsType.VISUAL);
+            text.setFont(Font.font(Font.getDefault().getFamily(), 50));
+            VBox vBox = new VBox();
+            vBox.setSpacing(10);
+            vBox.setPadding(new Insets(60, 0, 0, 20));
+            vBox.setAlignment(Pos.TOP_CENTER);
+            vBox.getChildren().addAll(text, min, close);
+            rootGroup.getChildren().addAll(dragger, vBox);
         });
         return button;
     }
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/scenegraph/events/gestureevent/GestureEventApp.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/scenegraph/events/gestureevent/GestureEventApp.java	Thu Feb 27 16:56:48 2014 -0800
@@ -168,130 +168,86 @@
     }
 
     private void setEventListeners(final Node listeningNode, final Rectangle rec, final String msgPrefix) {
-        listeningNode.setOnSwipeDown(new EventHandler<SwipeEvent>() {
-            @Override 
-            public void handle(SwipeEvent se) {
-                showOnConsole(msgPrefix + "SwipeDown event");
-                se.consume();
-            }
+        listeningNode.setOnSwipeDown((SwipeEvent se) -> {
+            showOnConsole(msgPrefix + "SwipeDown event");
+            se.consume();
         });
 
-        listeningNode.setOnSwipeUp(new EventHandler<SwipeEvent>() {
-            @Override 
-            public void handle(SwipeEvent se) {
-                showOnConsole(msgPrefix + "SwipeUp event");
-                se.consume();
-            }
+        listeningNode.setOnSwipeUp((SwipeEvent se) -> {
+            showOnConsole(msgPrefix + "SwipeUp event");
+            se.consume();
         });
 
-        listeningNode.setOnSwipeLeft(new EventHandler<SwipeEvent>() {
-            @Override 
-            public void handle(SwipeEvent se) {
-                showOnConsole(msgPrefix + "SwipeLeft event");
-                se.consume();
-            }
+        listeningNode.setOnSwipeLeft((SwipeEvent se) -> {
+            showOnConsole(msgPrefix + "SwipeLeft event");
+            se.consume();
         });
 
-        listeningNode.setOnSwipeRight(new EventHandler<SwipeEvent>() {
-            @Override 
-            public void handle(SwipeEvent se) {
-                showOnConsole(msgPrefix + "SwipeRight event");
-                se.consume();
-            }
+        listeningNode.setOnSwipeRight((SwipeEvent se) -> {
+            showOnConsole(msgPrefix + "SwipeRight event");
+            se.consume();
         });
         
-        listeningNode.setOnTouchStationary(new EventHandler<TouchEvent>() {
-            @Override 
-            public void handle(TouchEvent se) {
-                showOnConsole(msgPrefix + "TouchStationary event");
-                se.consume();
-            }
+        listeningNode.setOnTouchStationary((TouchEvent se) -> {
+            showOnConsole(msgPrefix + "TouchStationary event");
+            se.consume();
         });
 
-        listeningNode.setOnScroll(new EventHandler<ScrollEvent>() {
-            @Override
-            public void handle(ScrollEvent event) {
-                
-                // scroll amount
-                double translateX = event.getDeltaX();
-                double translateY = event.getDeltaY();
-
-                if ((rec.getTranslateX() + translateX > 0) && (rec.getTranslateX() + translateX < 300)) {
-                    rec.setTranslateX(rec.getTranslateX() + translateX);
-                }
-                if ((rec.getTranslateY() + translateY > SMALL_REC_Y - 20) && (rec.getTranslateY() + translateY < 180 + SMALL_REC_Y)) {
-                    rec.setTranslateY(rec.getTranslateY() + translateY);
-                }
-                showOnConsole(msgPrefix + "Scroll event");
-                event.consume();
+        listeningNode.setOnScroll((ScrollEvent event) -> {
+            double translateX = event.getDeltaX();
+            double translateY = event.getDeltaY();
+            
+            if ((rec.getTranslateX() + translateX > 0) && (rec.getTranslateX() + translateX < 300)) {
+                rec.setTranslateX(rec.getTranslateX() + translateX);
             }
+            if ((rec.getTranslateY() + translateY > SMALL_REC_Y - 20) && (rec.getTranslateY() + translateY < 180 + SMALL_REC_Y)) {
+                rec.setTranslateY(rec.getTranslateY() + translateY);
+            }
+            showOnConsole(msgPrefix + "Scroll event");
+            event.consume();
         });
 
-        listeningNode.setOnZoom(new EventHandler<ZoomEvent>() {
-            @Override
-            public void handle(ZoomEvent event) {
-                rec.setScaleX(rec.getScaleX() * event.getZoomFactor());
-                rec.setScaleY(rec.getScaleY() * event.getZoomFactor());
-                showOnConsole(msgPrefix + "Zoom event");
-                event.consume();
-            }
+        listeningNode.setOnZoom((ZoomEvent event) -> {
+            rec.setScaleX(rec.getScaleX() * event.getZoomFactor());
+            rec.setScaleY(rec.getScaleY() * event.getZoomFactor());
+            showOnConsole(msgPrefix + "Zoom event");
+            event.consume();
         });
 
-        listeningNode.setOnRotate(new EventHandler<RotateEvent>() {
-            @Override
-            public void handle(RotateEvent event) {
-                rec.setRotate(listeningNode.getRotate() + event.getAngle());
-                showOnConsole(msgPrefix + "Rotate event");
-                event.consume();
-            }
+        listeningNode.setOnRotate((RotateEvent event) -> {
+            rec.setRotate(listeningNode.getRotate() + event.getAngle());
+            showOnConsole(msgPrefix + "Rotate event");
+            event.consume();
         });
 
-        listeningNode.setOnScrollStarted(new EventHandler<ScrollEvent>() {
-            @Override
-            public void handle(ScrollEvent event) {
-                showOnConsole(msgPrefix + "Scroll started");
-                event.consume();
-            }
+        listeningNode.setOnScrollStarted((ScrollEvent event) -> {
+            showOnConsole(msgPrefix + "Scroll started");
+            event.consume();
         });
 
-        listeningNode.setOnScrollFinished(new EventHandler<ScrollEvent>() {
-            @Override
-            public void handle(ScrollEvent event) {
-                showOnConsole(msgPrefix + "Scroll finished");
-                event.consume();
-            }
+        listeningNode.setOnScrollFinished((ScrollEvent event) -> {
+            showOnConsole(msgPrefix + "Scroll finished");
+            event.consume();
         });
 
-        listeningNode.setOnZoomStarted(new EventHandler<ZoomEvent>() {
-            @Override
-            public void handle(ZoomEvent event) {
-                showOnConsole(msgPrefix + "Zoom started");
-                event.consume();
-            }
+        listeningNode.setOnZoomStarted((ZoomEvent event) -> {
+            showOnConsole(msgPrefix + "Zoom started");
+            event.consume();
         });
 
-        listeningNode.setOnZoomFinished(new EventHandler<ZoomEvent>() {
-            @Override
-            public void handle(ZoomEvent event) {
-                showOnConsole(msgPrefix + "Zoom finished");
-                event.consume();
-            }
+        listeningNode.setOnZoomFinished((ZoomEvent event) -> {
+            showOnConsole(msgPrefix + "Zoom finished");
+            event.consume();
         });
 
-        listeningNode.setOnRotationStarted(new EventHandler<RotateEvent>() {
-            @Override
-            public void handle(RotateEvent event) {
-                showOnConsole(msgPrefix + "Rotation started");
-                event.consume();
-            }
+        listeningNode.setOnRotationStarted((RotateEvent event) -> {
+            showOnConsole(msgPrefix + "Rotation started");
+            event.consume();
         });
 
-        listeningNode.setOnRotationFinished(new EventHandler<RotateEvent>() {
-            @Override
-            public void handle(RotateEvent event) {
-                showOnConsole(msgPrefix + "Rotation finished");
-                event.consume();
-            }
+        listeningNode.setOnRotationFinished((RotateEvent event) -> {
+            showOnConsole(msgPrefix + "Rotation finished");
+            event.consume();
         });
     }
 
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/scenegraph/events/keyevent/KeyEventApp.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/scenegraph/events/keyevent/KeyEventApp.java	Thu Feb 27 16:56:48 2014 -0800
@@ -61,13 +61,10 @@
         //create a console for logging key events
         final ListView<String> console = new ListView<String>(FXCollections.<String>observableArrayList());
         // listen on the console items and remove old ones when we get over 20 items
-        console.getItems().addListener(new ListChangeListener<String>() {
-            @Override
-            public void onChanged(ListChangeListener.Change<? extends String> change) {
-                while (change.next()) {
-                    if (change.getList().size() > 20.0) {
-                        change.getList().remove(0);
-                    }
+        console.getItems().addListener((ListChangeListener.Change<? extends String> change) -> {
+            while (change.next()) {
+                if (change.getList().size() > 20.0) {
+                    change.getList().remove(0);
                 }
             }
         });
@@ -79,36 +76,27 @@
         textBox.setPromptText("Write here");
         textBox.setStyle("-fx-font-size: 34;");
         //add a key listeners
-        textBox.setOnKeyPressed(new EventHandler<KeyEvent>() {
-            @Override
-            public void handle(KeyEvent ke) {
-                console.getItems().add("Key Pressed: " + ke.getText());
+        textBox.setOnKeyPressed((KeyEvent ke) -> {
+            console.getItems().add("Key Pressed: " + ke.getText());
+        });
+        textBox.setOnKeyReleased((KeyEvent ke) -> {
+            console.getItems().add("Key Released: " + ke.getText());
+        });
+        textBox.setOnKeyTyped((KeyEvent ke) -> {
+            String text = "Key Typed: " + ke.getCharacter();
+            if (ke.isAltDown()) {
+                text += " , alt down";
             }
-        });
-        textBox.setOnKeyReleased(new EventHandler<KeyEvent>() {
-            @Override
-            public void handle(KeyEvent ke) {
-                console.getItems().add("Key Released: " + ke.getText());
+            if (ke.isControlDown()) {
+                text += " , ctrl down";
             }
-        });
-        textBox.setOnKeyTyped(new EventHandler<KeyEvent>() {
-            @Override
-            public void handle(KeyEvent ke) {
-                String text = "Key Typed: " + ke.getCharacter();
-                if (ke.isAltDown()) {
-                    text += " , alt down";
-                }
-                if (ke.isControlDown()) {
-                    text += " , ctrl down";
-                }
-                if (ke.isMetaDown()) {
-                    text += " , meta down";
-                }
-                if (ke.isShiftDown()) {
-                    text += " , shift down";
-                }
-                console.getItems().add(text);
+            if (ke.isMetaDown()) {
+                text += " , meta down";
             }
+            if (ke.isShiftDown()) {
+                text += " , shift down";
+            }
+            console.getItems().add(text);
         });
 
         VBox vb = new VBox(10);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/scenegraph/events/keystrokemotion/LettersPane.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/scenegraph/events/keystrokemotion/LettersPane.java	Thu Feb 27 16:56:48 2014 -0800
@@ -59,19 +59,13 @@
         setId("LettersPane");
         setPrefSize(240, 240);
         setFocusTraversable(true);
-        setOnMousePressed(new EventHandler<MouseEvent>() {
-            @Override
-            public void handle(MouseEvent me) {
-                requestFocus();
-                me.consume();
-            }
+        setOnMousePressed((MouseEvent me) -> {
+            requestFocus();
+            me.consume();
         });
-        setOnKeyPressed(new EventHandler<KeyEvent>() {
-            @Override
-            public void handle(KeyEvent ke) {
-                createLetter(ke.getText());
-                ke.consume();
-            }
+        setOnKeyPressed((KeyEvent ke) -> {
+            createLetter(ke.getText());
+            ke.consume();
         });
         // create press keys text
         pressText = new Text("Press Keys");
@@ -104,12 +98,8 @@
         // over 3 seconds move letter to random position and fade it out
         final Timeline timeline = new Timeline();
         timeline.getKeyFrames().add(
-                new KeyFrame(Duration.seconds(3), new EventHandler<ActionEvent>() {
-            @Override
-            public void handle(ActionEvent event) {
-                // we are done remove us from scene
-                getChildren().remove(letter);
-            }
+                new KeyFrame(Duration.seconds(3), (ActionEvent event) -> {
+                    getChildren().remove(letter);
         },
                 new KeyValue(letter.translateXProperty(), getRandom(0.0f, getWidth() - letter.getBoundsInLocal().getWidth()), INTERPOLATOR),
                 new KeyValue(letter.translateYProperty(), getRandom(0.0f, getHeight() - letter.getBoundsInLocal().getHeight()), INTERPOLATOR),
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/scenegraph/events/mouseevent/MouseEventApp.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/scenegraph/events/mouseevent/MouseEventApp.java	Thu Feb 27 16:56:48 2014 -0800
@@ -106,42 +106,36 @@
         circleBig.setTranslateX(BIG_CIRCLE_STARTX);
         circleBig.setTranslateY(BIG_CIRCLE_STARTY);
         // we can set mouse event to any node, also on the rectangle
-        rectangle.setOnMouseMoved(new EventHandler<MouseEvent>() {
-            public void handle(MouseEvent me) {
-                //log mouse move to console, method listed below
-                showOnConsole("Mouse moved, x: " + me.getX() + ", y: " + me.getY());
-            }
+        rectangle.setOnMouseMoved((MouseEvent me) -> {
+            showOnConsole("Mouse moved, x: " + me.getX() + ", y: " + me.getY());
         });
 
-        rectangle.setOnScroll(new EventHandler<ScrollEvent>() {
-            @Override
-            public void handle(ScrollEvent event) {
-                double translateX = event.getDeltaX();
-                double translateY = event.getDeltaY();
-                // reduce the deltas for the circles to stay in the screen
-                for (Circle c : new Circle[]{circleSmall, circleBig}) {
-                    if (c.getTranslateX() + translateX + c.getRadius() > RECT_WIDTH) {
-                        translateX = RECT_WIDTH - c.getTranslateX() - c.getRadius();
-                    }
-                    if (c.getTranslateX() + translateX - c.getRadius() < 0) {
-                        translateX = -c.getTranslateX() + c.getRadius();
-                    }
-                    if (c.getTranslateY() + translateY + c.getRadius() > RECT_HEIGHT) {
-                        translateY = RECT_HEIGHT - c.getTranslateY() - c.getRadius();
-                    }
-                    if (c.getTranslateY() + translateY - c.getRadius() < 0) {
-                        translateY = -c.getTranslateY() + c.getRadius();
-                    }
+        rectangle.setOnScroll((ScrollEvent event) -> {
+            double translateX = event.getDeltaX();
+            double translateY = event.getDeltaY();
+            // reduce the deltas for the circles to stay in the screen
+            for (Circle c : new Circle[]{circleSmall, circleBig}) {
+                if (c.getTranslateX() + translateX + c.getRadius() > RECT_WIDTH) {
+                    translateX = RECT_WIDTH - c.getTranslateX() - c.getRadius();
                 }
-                // move the circles
-                for (Circle c : new Circle[]{circleSmall, circleBig}) {
-                    c.setTranslateX(c.getTranslateX() + translateX);
-                    c.setTranslateY(c.getTranslateY() + translateY);
+                if (c.getTranslateX() + translateX - c.getRadius() < 0) {
+                    translateX = -c.getTranslateX() + c.getRadius();
                 }
-                // log event
-                showOnConsole("Scrolled, deltaX: " + event.getDeltaX()
-                        + ", deltaY: " + event.getDeltaY());
+                if (c.getTranslateY() + translateY + c.getRadius() > RECT_HEIGHT) {
+                    translateY = RECT_HEIGHT - c.getTranslateY() - c.getRadius();
+                }
+                if (c.getTranslateY() + translateY - c.getRadius() < 0) {
+                    translateY = -c.getTranslateY() + c.getRadius();
+                }
             }
+            // move the circles
+            for (Circle c : new Circle[]{circleSmall, circleBig}) {
+                c.setTranslateX(c.getTranslateX() + translateX);
+                c.setTranslateY(c.getTranslateY() + translateY);
+            }
+            // log event
+            showOnConsole("Scrolled, deltaX: " + event.getDeltaX()
+                    + ", deltaY: " + event.getDeltaY());
         });
         return new Group(rectangle, circleBig, circleSmall, console);
     }
@@ -157,60 +151,41 @@
         //change a cursor when it is over circle
         circle.setCursor(Cursor.HAND);
         //add a mouse listeners
-        circle.setOnMouseClicked(new EventHandler<MouseEvent>() {
-            @Override
-            public void handle(MouseEvent me) {
-                showOnConsole("Clicked on" + name + ", " + me.getClickCount() + "times");
-                //the event will be passed only to the circle which is on front
-                me.consume();
+        circle.setOnMouseClicked((MouseEvent me) -> {
+            showOnConsole("Clicked on" + name + ", " + me.getClickCount() + "times");
+            //the event will be passed only to the circle which is on front
+            me.consume();
+        });
+        circle.setOnMouseDragged((MouseEvent me) -> {
+            double dragX = me.getSceneX() - dragAnchor.getX();
+            double dragY = me.getSceneY() - dragAnchor.getY();
+            //calculate new position of the circle
+            double newXPosition = initX + dragX;
+            double newYPosition = initY + dragY;
+            //if new position do not exceeds borders of the rectangle, translate to this position
+            if ((newXPosition >= circle.getRadius()) && (newXPosition <= RECT_WIDTH - circle.getRadius())) {
+                circle.setTranslateX(newXPosition);
             }
+            if ((newYPosition >= circle.getRadius()) && (newYPosition <= RECT_HEIGHT - circle.getRadius())) {
+                circle.setTranslateY(newYPosition);
+            }
+            showOnConsole(name + " was dragged (x:" + dragX + ", y:" + dragY + ")");
         });
-        circle.setOnMouseDragged(new EventHandler<MouseEvent>() {
-            @Override
-            public void handle(MouseEvent me) {
-                double dragX = me.getSceneX() - dragAnchor.getX();
-                double dragY = me.getSceneY() - dragAnchor.getY();
-                //calculate new position of the circle
-                double newXPosition = initX + dragX;
-                double newYPosition = initY + dragY;
-                //if new position do not exceeds borders of the rectangle, translate to this position
-                if ((newXPosition >= circle.getRadius()) && (newXPosition <= RECT_WIDTH - circle.getRadius())) {
-                    circle.setTranslateX(newXPosition);
-                }
-                if ((newYPosition >= circle.getRadius()) && (newYPosition <= RECT_HEIGHT - circle.getRadius())) {
-                    circle.setTranslateY(newYPosition);
-                }
-                showOnConsole(name + " was dragged (x:" + dragX + ", y:" + dragY + ")");
-            }
+        circle.setOnMouseEntered((MouseEvent me) -> {
+            circle.toFront();
+            showOnConsole("Mouse entered " + name);
         });
-        circle.setOnMouseEntered(new EventHandler<MouseEvent>() {
-            @Override
-            public void handle(MouseEvent me) {
-                //change the z-coordinate of the circle
-                circle.toFront();
-                showOnConsole("Mouse entered " + name);
-            }
+        circle.setOnMouseExited((MouseEvent me) -> {
+            showOnConsole("Mouse exited " + name);
         });
-        circle.setOnMouseExited(new EventHandler<MouseEvent>() {
-            @Override
-            public void handle(MouseEvent me) {
-                showOnConsole("Mouse exited " + name);
-            }
+        circle.setOnMousePressed((MouseEvent me) -> {
+            initX = circle.getTranslateX();
+            initY = circle.getTranslateY();
+            dragAnchor = new Point2D(me.getSceneX(), me.getSceneY());
+            showOnConsole("Mouse pressed above " + name);
         });
-        circle.setOnMousePressed(new EventHandler<MouseEvent>() {
-            @Override
-            public void handle(MouseEvent me) {
-                //when mouse is pressed, store initial position
-                initX = circle.getTranslateX();
-                initY = circle.getTranslateY();
-                dragAnchor = new Point2D(me.getSceneX(), me.getSceneY());
-                showOnConsole("Mouse pressed above " + name);
-            }
-        });
-        circle.setOnMouseReleased(new EventHandler<MouseEvent>() {
-            public void handle(MouseEvent me) {
-                showOnConsole("Mouse released above " + name);
-            }
+        circle.setOnMouseReleased((MouseEvent me) -> {
+            showOnConsole("Mouse released above " + name);
         });
 
         return circle;
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/scenegraph/events/multitouch/MultiTouchImageView.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/scenegraph/events/multitouch/MultiTouchImageView.java	Thu Feb 27 16:56:48 2014 -0800
@@ -54,60 +54,39 @@
         imageView.setSmooth(true);
         getChildren().add(imageView);
 
-        setOnMousePressed(new EventHandler<MouseEvent>() {
-            @Override
-            public void handle(MouseEvent event) {
-
-                lastX = event.getX();
-                lastY = event.getY();
-                toFront();
-                //  postView.toFront();
+        setOnMousePressed((MouseEvent event) -> {
+            lastX = event.getX();
+            lastY = event.getY();
+            toFront();
+        });
+        setOnMouseDragged((MouseEvent event) -> {
+            double layoutX = getLayoutX() + (event.getX() - lastX);
+            double layoutY = getLayoutY() + (event.getY() - lastY);
+            
+            if ((layoutX >= 0) && (layoutX <= (getParent().getLayoutBounds().getWidth()))) {
+                setLayoutX(layoutX);
+            }
+            
+            if ((layoutY >= 0) && (layoutY <= (getParent().getLayoutBounds().getHeight()))) {
+                setLayoutY(layoutY);
+            }
+            
+            if ((getLayoutX() + (event.getX() - lastX) <= 0)) {
+                setLayoutX(0);
             }
         });
-        setOnMouseDragged(new EventHandler<MouseEvent>() {
-            @Override
-            public void handle(MouseEvent event) {
-
-                double layoutX = getLayoutX() + (event.getX() - lastX);
-                double layoutY = getLayoutY() + (event.getY() - lastY);
-
-                if ((layoutX >= 0) && (layoutX <= (getParent().getLayoutBounds().getWidth()))) {
-                    setLayoutX(layoutX);
-                }
-
-                if ((layoutY >= 0) && (layoutY <= (getParent().getLayoutBounds().getHeight()))) {
-                    setLayoutY(layoutY);
-                }
-
-                if ((getLayoutX() + (event.getX() - lastX) <= 0)) {
-                    setLayoutX(0);
-                }
-            }
+        addEventHandler(ZoomEvent.ZOOM_STARTED, (ZoomEvent event) -> {
+            startScale = getScaleX();
         });
-        addEventHandler(ZoomEvent.ZOOM_STARTED, new EventHandler<ZoomEvent>() {
-            @Override
-            public void handle(ZoomEvent event) {
-                startScale = getScaleX();
-            }
+        addEventHandler(ZoomEvent.ZOOM, (ZoomEvent event) -> {
+            setScaleX(event.getTotalZoomFactor());
+            setScaleY(event.getTotalZoomFactor());
         });
-        addEventHandler(ZoomEvent.ZOOM, new EventHandler<ZoomEvent>() {
-            @Override
-            public void handle(ZoomEvent event) {
-                setScaleX(event.getTotalZoomFactor());
-                setScaleY(event.getTotalZoomFactor());
-            }
+        addEventHandler(RotateEvent.ROTATION_STARTED, (RotateEvent event) -> {
+            startRotate = getRotate();
         });
-        addEventHandler(RotateEvent.ROTATION_STARTED, new EventHandler<RotateEvent>() {
-            @Override
-            public void handle(RotateEvent event) {
-                startRotate = getRotate();
-            }
-        });
-        addEventHandler(RotateEvent.ROTATE, new EventHandler<RotateEvent>() {
-            @Override
-            public void handle(RotateEvent event) {
-                setRotate(event.getTotalAngle());
-            }
+        addEventHandler(RotateEvent.ROTATE, (RotateEvent event) -> {
+            setRotate(event.getTotalAngle());
         });
 
     }
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/scenegraph/stage/StageApp.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/scenegraph/stage/StageApp.java	Thu Feb 27 16:56:48 2014 -0800
@@ -62,38 +62,35 @@
         Button button = new Button("Create a Stage");
         button.setStyle("-fx-font-size: 24;");
         button.setDefaultButton(true);
-        button.setOnAction(new EventHandler<ActionEvent>() {
-            @Override
-            public void handle(ActionEvent t) {
-                final Stage stage = new Stage();
-                
-                //create root node of scene, i.e. group
-                Group rootGroup = new Group();
-                
-                //create scene with set width, height and color
-                Scene scene = new Scene(rootGroup, 200, 200, Color.WHITESMOKE);
-                
-                //set scene to stage
-                stage.setScene(scene);
-                
-                //set title to stage
-                stage.setTitle("New stage");
-                
-                //center stage on screen
-                stage.centerOnScreen();
-                
-                //show the stage
-                stage.show();
-                
-                //add some node to scene
-                Text text = new Text(20, 110, "JavaFX");
-                text.setFill(Color.DODGERBLUE);
-                text.setEffect(new Lighting());
-                text.setFont(Font.font(Font.getDefault().getFamily(), 50));
-                
-                //add text to the main root group
-                rootGroup.getChildren().add(text);
-            }
+        button.setOnAction((ActionEvent t) -> {
+            final Stage stage = new Stage();
+            
+            //create root node of scene, i.e. group
+            Group rootGroup = new Group();
+            
+            //create scene with set width, height and color
+            Scene scene = new Scene(rootGroup, 200, 200, Color.WHITESMOKE);
+            
+            //set scene to stage
+            stage.setScene(scene);
+            
+            //set title to stage
+            stage.setTitle("New stage");
+            
+            //center stage on screen
+            stage.centerOnScreen();
+            
+            //show the stage
+            stage.show();
+            
+            //add some node to scene
+            Text text = new Text(20, 110, "JavaFX");
+            text.setFill(Color.DODGERBLUE);
+            text.setEffect(new Lighting());
+            text.setFont(Font.font(Font.getDefault().getFamily(), 50));
+            
+            //add text to the main root group
+            rootGroup.getChildren().add(text);
         });
         return button;
     }
--- a/apps/toys/.classpath	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/toys/.classpath	Thu Feb 27 16:56:48 2014 -0800
@@ -1,8 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
+    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
     <classpathentry kind="src" path="FX8-3DFeatures/src"/>
     <classpathentry kind="src" path="FXSlideShow/src"/>
     <classpathentry kind="src" path="Hello/src/main/java"/>
+    <!--
+    <classpathentry kind="src" path="iOS/iPodAccessTest/src"/>
+    <classpathentry kind="src" path="iOS/SensorsTest/src"/>
+    -->
     <classpathentry kind="src" path="Shape3DToy/src/main/java"/>
     <classpathentry kind="src" path="Shape3DToy/src/main/resources"/>
     <classpathentry kind="src" path="StretchyGrid/src/main/java"/>
@@ -11,6 +16,5 @@
         <attribute name="optional" value="true"/>
         </attributes>
     </classpathentry>
-    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
     <classpathentry kind="output" path="bin"/>
 </classpath>
\ No newline at end of file
--- a/apps/toys/FXSlideShow/src/fxslideshow/FXSlideShow.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/toys/FXSlideShow/src/fxslideshow/FXSlideShow.java	Thu Feb 27 16:56:48 2014 -0800
@@ -700,4 +700,8 @@
 
         startAutoForward();
     }
+
+    public static void main(String[] args) {
+        Application.launch(args);
+    }
 }
--- a/apps/toys/Hello/src/main/java/hello/HelloListView.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/apps/toys/Hello/src/main/java/hello/HelloListView.java	Thu Feb 27 16:56:48 2014 -0800
@@ -773,9 +773,10 @@
         ObservableList<String> listOneItems = FXCollections.observableArrayList(names.subList(0, 8));
         ObservableList<String> listTwoItems = FXCollections.observableArrayList(names.subList(8, 16));
 
-        Label introLabel = new Label("By default, DnD is a MOVE, hold ctrl/cmd whilst dragging for COPY.");
+        Label introLabel = new Label("On Windows: DnD is a MOVE, hold ctrl/cmd whilst dragging for COPY.\n"
+                                    +"On Mac: DnD is a COPY. With any modifier held, no DnD operation is performed.");
         introLabel.setWrapText(true);
-        introLabel.setFont(Font.font(18));
+        introLabel.setFont(Font.font(14));
         grid.add(introLabel, 0, 0, 2, 1);
 
         // --- list one
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildSrc/armv7hft.gradle	Thu Feb 27 16:56:48 2014 -0800
@@ -0,0 +1,568 @@
+/*
+ * 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.
+ */
+
+ext.ARMV7HFT = [:]
+
+// Define the location of the sdk and toolchain
+def sdk=file("${rootProject.CROSS_TOOLS_DIR}/armhf-raspberry-pi-10")
+def compilerHome=file("${rootProject.CROSS_TOOLS_DIR}/gcc-linaro-arm-linux-gnueabihf-raspbian-2012.09-20120921_linux")
+def compilerPrefix
+def jniPlatform
+if (IS_LINUX) {
+    fetchExternalTools('ARMV7HFT',
+            ["armhf-raspberry-pi-10.tgz",
+             "gcc-linaro-arm-linux-gnueabihf-raspbian-2012.09-20120921_linux.tgz" ],
+            rootProject.CROSS_TOOLS_DIR, rootProject.IS_IMPORT_CROSS_TOOLS)
+
+    compilerHome=file("${rootProject.CROSS_TOOLS_DIR}/gcc-linaro-arm-linux-gnueabihf-raspbian-2012.09-20120921_linux")
+    compilerPrefix="arm-linux-gnueabihf-"
+    jniPlatform="linux"
+} else if (IS_MAC) {
+    fetchExternalTools('ARMV7HF',
+            ["armhf-raspberry-pi-10.tgz"],
+            rootProject.CROSS_TOOLS_DIR, rootProject.IS_IMPORT_CROSS_TOOLS)
+
+    compilerHome=file("/usr/local/arm-linux")
+    compilerPrefix="arm-linux-"
+    jniPlatform="darwin"
+} else {
+    println "ERROR: Cannot build on this platform"
+    return;
+}
+
+if (rootProject.hasProperty("ARMV7HF_COMPILER")) {
+    logger.quiet "Using alternate ARMV7HF_COMPILER $rootProject.ARMV7HF_COMPILER"
+    compilerHome=file(rootProject.ARMV7HF_COMPILER);
+}
+if (rootProject.hasProperty("ARMV7HF_COMPILER_PREFIX")) {
+    logger.quiet "Using alternate ARMV7HF_COMPILER_PREFIX $rootProject.ARMV7HF_COMPILER_PREFIX"
+    compilerPrefix="${rootProject.ARMV7HF_COMPILER_PREFIX}"
+}
+
+// Declare whether this particular target file applies to the current system
+ARMV7HFT.canBuild = (IS_LINUX || IS_MAC) && compilerHome.exists() && sdk.exists()
+if (!ARMV7HFT.canBuild) {
+    if (!compilerHome.exists()) println "ERROR: Mising compiler $compilerHome"
+    if (!sdk.exists()) println "ERROR: Mising sdk $sdk"
+    return;
+}
+
+// Lambda for naming the generated libs
+ARMV7HFT.library = { name -> return "lib${name}.so" as String }
+
+ARMV7HFT.compileSwing = false;
+ARMV7HFT.compileSWT = false;
+ARMV7HFT.compileFXPackager = false;
+ARMV7HFT.compileDesignTime = false;
+
+// Libraries end up in the sdk/rt/lib/arm directory for arm builds
+ARMV7HFT.libDest = "lib/arm"
+
+// TODO this is garbage. Each target file should define what it includes,
+// not what it excludes.
+ARMV7HFT.jfxrtJarExcludes = [
+    "**/*.hlsl",
+    "com/sun/glass/ui/win",
+    "com/sun/glass/ui/accessible/win",
+    "com/sun/prism/d3d",
+    "com/sun/prism/es2/gl/win",
+    //"com/sun/prism/null3d",
+    "com/sun/scenario/effect/impl/hw/d3d",
+    
+    "com/sun/glass/events/mac",
+    "com/sun/glass/ui/mac",
+    "com/sun/glass/ui/accessible/mac",
+    "com/sun/prism/es2/gl/mac",
+    
+    "com/sun/glass/ui/android",
+    
+    "com/sun/glass/ui/ios",
+    
+    "com/sun/glass/ui/swt", // SWT glass
+    
+    "javafx/embed/swing", // Swing Interop
+    
+    "javafx/embed/swt", // SWT Interop
+
+    "com/sun/prism/es2/MacGL*",
+    "com/sun/prism/es2/IOSGL*",
+    "com/sun/prism/es2/WinGL*",
+]
+
+def commonFlags = [
+        "-fno-strict-aliasing", "-fPIC", "-fno-omit-frame-pointer", // optimization flags
+        "-W", "-Wall", "-Wno-unused", "-Wno-parentheses", "-Werror=implicit-function-declaration"] // warning flags
+// Specify the compilation parameters and link parameters
+def ccFlags = [
+        commonFlags, "-I$JDK_HOME/include", "-I$JDK_HOME/include/$jniPlatform", "-c",
+        IS_DEBUG_NATIVE ? ["-ggdb", "-DVERBOSE"] : "-O2"].flatten()
+//ccFlags.addAll(["-Wnon-virtual-dtor", "-Woverloaded-virtual", "-std=c++0x"])
+def linkFlags = ["-shared", commonFlags].flatten()
+
+// Specify the compilation parameters and link parameters
+def extraCFlags = [
+        "-I", "-L",
+        ccFlags,
+        "-mthumb", "-march=armv7-a", "-mfloat-abi=hard", "-mfpu=vfp",
+        "-I$sdk/usr/include",
+        "-I$sdk/opt/vc/include",
+        "-I$sdk/opt/vc/include/interface/vcos/pthreads",
+        "-I$sdk/opt/vc/include/interface/vmcs_host/linux",
+        "-DOMAP3", "-DUSE_DISPMAN"].flatten();
+
+//See if we should build for imx6
+def imxHeader=file("$sdk/usr/include/linux/mxcfb.h")
+if (imxHeader.exists()) {
+        extraCFlags = [extraCFlags,"-DIMX6_PLATFORM"].flatten();
+}
+
+def extraLFlags = [
+        "-I", "-L",
+        linkFlags,
+        "-L$sdk/lib/arm-linux/gnueabihf",
+        "-L$sdk/usr/lib",
+        "-L$sdk/usr/lib/arm-linux-gnueabihf",
+        "-L$sdk/opt/vc/lib"].flatten()
+
+def lensLFlags = [extraLFlags, "-lpthread", "-ludev", "-ldl", "-lm"].flatten()
+def monocleCFlags = [
+        extraCFlags,
+        "-Werror",
+        "-I", file("modules/graphics/src/main/native-glass/monocle/")].flatten();
+def monocleLFlags = [extraLFlags, "-ldl", "-lm"].flatten()
+
+def fontCFlags = [extraCFlags].flatten()
+def fontLFlags = [extraLFlags].flatten()
+
+def iioCFlags = [extraCFlags].flatten()
+def iioLFlags = [extraLFlags].flatten()
+
+def es2EglfbCFlags = [extraCFlags, "-DIS_EGLFB", "-DLINUX"].flatten()
+def es2EglfbLFlags = [extraLFlags].flatten()
+
+def es2X11CFlags = [extraCFlags, "-DUSE_XSHM", "-DDEBUG", "-DIS_EGLX11", "-DLINUX"].flatten()
+def es2X11LFlags = [extraLFlags, "-lX11", "-lXext", "-lXdmcp", "-lXau"].flatten()
+
+def mediaCFlags = [extraCFlags,
+    "-I$sdk/usr/include/gstreamer-0.10",
+    "-I$sdk/usr/include/glib-2.0",
+    "-I$sdk/usr/lib/arm-linux-gnueabihf/glib-2.0/include",
+    "-DENABLE_NATIVE_SOURCE=1", "-DENABLE_GST_FFMPEG=1"].flatten()
+def mediaLFlags = [extraLFlags, "-lgstreamer-0.10", "-lgstapp-0.10",
+    "-lgstbase-0.10", "-lglib-2.0", "-lgobject-2.0", "-lgmodule-2.0", "-lgthread-2.0"].flatten()
+
+def webCFlags = [extraCFlags].flatten()
+def webLFlags = [extraLFlags].flatten()
+
+// libraries to remove from the SDK
+//deploy.trim.public.library.filter= \
+//  fxavcodecplugin-52.so \
+//  fxavcodecplugin-53.so \
+//  fxplugins.so \
+//  libjfxwebkit.so \
+//  libgstplugins-lite.so \
+//  libgstreamer-lite.so \
+//  libprism-es2-eglx11.so \
+//  libglass_lens_fb.so \
+
+def gtkCFlags = [extraCFlags].flatten()
+def gtkLFlags = [extraLFlags].flatten()
+setupTools("armv6hf_tools",
+    { propFile ->
+        ByteArrayOutputStream results = new ByteArrayOutputStream();
+        exec {
+            commandLine("$sdk/bin/pkg-config", "--cflags", "gtk+-2.0", "gthread-2.0", "xtst");
+            setStandardOutput(results);
+        }
+        propFile << "cflags=" << results.toString().trim() << "\n";
+
+        results = new ByteArrayOutputStream();
+        exec {
+            commandLine "$sdk/bin/pkg-config", "--libs", "gtk+-2.0", "gthread-2.0", "xtst"
+            standardOutput = results
+        }
+        propFile << "libs=" << results.toString().trim();
+    },
+    { properties ->
+        gtkCFlags.addAll(properties.getProperty("cflags").split(" "))
+        gtkLFlags.addAll(properties.getProperty("libs").split(" "))
+    }
+)
+
+ARMV7HFT.javafxPlatformProperties ="""javafx.platform=eglfb
+directfb.com.sun.javafx.scene.control.skin.ListViewSkin.pannable=true
+directfb.com.sun.javafx.scene.control.skin.TreeViewSkin.pannable=true
+directfb.com.sun.javafx.scene.control.skin.TableViewSkin.pannable=true
+directfb.glass.platform=Lens
+directfb.glass.lens=dfb
+directfb.prism.order=sw
+directfb.com.sun.javafx.isEmbedded=true
+directfb.com.sun.javafx.scene.control.skin.FXVK.cache=true
+eglfb.com.sun.javafx.scene.control.skin.ListViewSkin.pannable=true
+eglfb.com.sun.javafx.scene.control.skin.TreeViewSkin.pannable=true
+eglfb.com.sun.javafx.scene.control.skin.TableViewSkin.pannable=true
+eglfb.glass.platform=Lens
+eglfb.glass.lens=eglfb
+eglfb.prism.order=es2
+eglfb.prism.eglfb=true
+eglfb.prism.lcdtext=false
+eglfb.prism.maxvram=128m
+eglfb.prism.targetvram=112m
+eglfb.use.egl=true
+eglfb.use.gles2=true
+eglfb.embedded=eglfb
+eglfb.com.sun.javafx.isEmbedded=true
+eglfb.doNativeComposite=true
+eglfb.com.sun.javafx.scene.control.skin.FXVK.cache=true
+eglfb.prism.glDepthSize=0
+fb.com.sun.javafx.scene.control.skin.ListViewSkin.pannable=true
+fb.com.sun.javafx.scene.control.skin.TreeViewSkin.pannable=true
+fb.com.sun.javafx.scene.control.skin.TableViewSkin.pannable=true
+fb.glass.platform=Lens
+fb.glass.lens=fb
+fb.prism.order=sw
+fb.com.sun.javafx.isEmbedded=true
+fb.glass.restrictWindowToScreen=true
+fb.com.sun.javafx.scene.control.skin.FXVK.cache=true
+monocle.glass.platform=Monocle
+monocle.prism.order=es2,sw
+monocle.prism.eglfb=true
+monocle.prism.lcdtext=false
+monocle.prism.maxvram=128m
+monocle.prism.targetvram=112m
+monocle.use.egl=true
+monocle.use.gles2=true
+monocle.embedded=eglfb
+monocle.com.sun.javafx.isEmbedded=true
+monocle.doNativeComposite=true
+monocle.com.sun.javafx.scene.control.skin.FXVK.cache=true
+monocle.prism.glDepthSize=0
+eglx11.com.sun.javafx.scene.control.skin.ListViewSkin.pannable=true
+eglx11.com.sun.javafx.scene.control.skin.TreeViewSkin.pannable=true
+eglx11.com.sun.javafx.scene.control.skin.TableViewSkin.pannable=true
+eglx11.glass.platform=Lens
+eglx11.glass.lens=eglx11
+eglx11.prism.order=es2
+eglx11.prism.eglx11=true
+eglx11.prism.lcdtext=false
+eglx11.prism.maxvram=128m
+eglx11.prism.targetvram=112m
+eglx11.use.egl=true
+eglx11.use.gles2=true
+eglx11.embedded=eglx11
+eglx11.com.sun.javafx.isEmbedded=true
+eglx11.com.sun.javafx.scene.control.skin.FXVK.cache=true
+eglx11.prism.glDepthSize=0
+gtk.com.sun.javafx.scene.control.skin.ListViewSkin.pannable=true
+gtk.com.sun.javafx.scene.control.skin.TreeViewSkin.pannable=true
+gtk.com.sun.javafx.scene.control.skin.TableViewSkin.pannable=true
+gtk.glass.platform=gtk
+gtk.prism.order=sw
+gtk.com.sun.javafx.isEmbedded=true
+gtk.com.sun.javafx.scene.control.skin.FXVK.cache=true"""
+
+def pangoCCFlags = [extraCFlags, "-D_ENABLE_PANGO"];
+def pangoLinkFlags = [extraLFlags];
+setupTools("armv6hf_pango_tools",
+    { propFile ->
+        ByteArrayOutputStream results = new ByteArrayOutputStream();
+        exec {
+            commandLine "$sdk/bin/pkg-config", "--cflags", "pangoft2"
+            standardOutput = results
+        }
+        propFile << "cflags=" << results.toString().trim() << "\n";
+
+        results = new ByteArrayOutputStream();
+        exec {
+            commandLine "$sdk/bin/pkg-config", "--libs", "pangoft2"
+            standardOutput = results
+        }
+        propFile << "libs=" << results.toString().trim();
+    },
+    { properties ->
+        pangoCCFlags.addAll(properties.getProperty("cflags").split(" "))
+        pangoLinkFlags.addAll(properties.getProperty("libs").split(" "))
+    }
+)
+
+def freetypeCCFlags = [ext.IS_COMPILE_PANGO ? "-D_ENABLE_PANGO" :
+                       ext.IS_COMPILE_HARFBUZZ ? "-D_ENABLE_HARFBUZZ" : ""]
+def freetypeLinkFlags = []
+setupTools("armv6hf_freetype_tools",
+    { propFile ->
+        ByteArrayOutputStream results = new ByteArrayOutputStream();
+        exec {
+            commandLine "$sdk/bin/pkg-config", "--cflags", "freetype2"
+            standardOutput = results
+        }
+        propFile << "cflags=" << results.toString().trim() << "\n";
+
+        results = new ByteArrayOutputStream();
+        exec {
+            commandLine "$sdk/bin/pkg-config", "--libs", "freetype2"
+            standardOutput = results
+        }
+        propFile << "libs=" << results.toString().trim();
+    },
+    { properties ->
+        freetypeCCFlags.addAll(properties.getProperty("cflags").split(" "))
+        freetypeLinkFlags.addAll(properties.getProperty("libs").split(" "))
+    }
+)
+
+def compiler = file("$compilerHome/bin/${compilerPrefix}gcc").getAbsolutePath()
+def linker = file("$compilerHome/bin/${compilerPrefix}g++").getAbsolutePath()
+
+ARMV7HFT.glass = [:]
+ARMV7HFT.glass.variants = ["eglfb", "directfb", "fb", "gtk", "lensport", "monocle", "monocle_x11" ]
+ARMV7HFT.glass.javahInclude = [
+    "com/sun/glass/events/**",
+    "com/sun/glass/ui/*",
+    "com/sun/glass/ui/lens/*",
+    "com/sun/glass/ui/monocle/linux/*",
+    "com/sun/glass/ui/monocle/util/*",
+    "com/sun/glass/ui/monocle/x11/*",
+    "com/sun/glass/ui/gtk/*",
+    "com/sun/glass/ui/accessible/gtk/*"]
+ARMV7HFT.glass.lib = "glass"
+
+ARMV7HFT.glass.lensport = [:]
+ARMV7HFT.glass.lensport.nativeSource = [
+    file("modules/graphics/src/main/native-glass/lens/lensport") ]
+ARMV7HFT.glass.lensport.compiler = compiler
+ARMV7HFT.glass.lensport.ccFlags = ["-ffast-math", extraCFlags, "-DLINUX", "-DISEGLFB",
+    "-DLENSPORT", "-I", file("modules/graphics/src/main/native-glass/lens/") ].flatten()
+ARMV7HFT.glass.lensport.linker = linker
+ARMV7HFT.glass.lensport.linkFlags = [lensLFlags].flatten()
+ARMV7HFT.glass.lensport.lib = "lens_porting"
+
+ARMV7HFT.glass.monocle = [:]
+ARMV7HFT.glass.monocle.nativeSource = [
+        file("modules/graphics/src/main/native-glass/monocle/linux"),
+        file("modules/graphics/src/main/native-glass/monocle/util") ]
+ARMV7HFT.glass.monocle.compiler = compiler
+ARMV7HFT.glass.monocle.ccFlags = monocleCFlags
+ARMV7HFT.glass.monocle.linker = linker
+ARMV7HFT.glass.monocle.linkFlags = monocleLFlags
+ARMV7HFT.glass.monocle.lib = "glass_monocle"
+
+ARMV7HFT.glass.monocle_x11 = [:]
+ARMV7HFT.glass.monocle_x11.nativeSource = [
+        file("modules/graphics/src/main/native-glass/monocle/util"),
+        file("modules/graphics/src/main/native-glass/monocle/x11") ]
+ARMV7HFT.glass.monocle_x11.compiler = compiler
+ARMV7HFT.glass.monocle_x11.ccFlags = monocleCFlags
+ARMV7HFT.glass.monocle_x11.linker = linker
+ARMV7HFT.glass.monocle_x11.linkFlags = [ monocleLFlags, "-lX11" ].flatten()
+ARMV7HFT.glass.monocle_x11.lib = "glass_monocle_x11"
+
+ARMV7HFT.glass.eglfb = [:]
+// TODO when building headless, use lens/cursor/nullcursor/
+// otherwise we use lens/cursor/fbCursor/ and lens/input/udev
+
+// TODO when USE_RFB is specified use lens/rfb
+
+// TODO use /eglfb/x11ContainerScreen when using eglfb and EGL_X11_FB_CONTAINER
+// TODO use /headless/headlessScreen when using headless
+ARMV7HFT.glass.eglfb.nativeSource = [
+    file("modules/graphics/src/main/native-glass/lens"),
+    file("modules/graphics/src/main/native-glass/lens/wm"),
+    file("modules/graphics/src/main/native-glass/lens/cursor/fbCursor"),
+    file("modules/graphics/src/main/native-glass/lens/input/udev"),
+    file("modules/graphics/src/main/native-glass/lens/wm/screen/fbdevScreen.c") ]
+ARMV7HFT.glass.eglfb.compiler = compiler
+ARMV7HFT.glass.eglfb.ccFlags = ["-ffast-math", extraCFlags, "-DLINUX", "-DISEGLFB"].flatten()
+ARMV7HFT.glass.eglfb.linker = linker
+ARMV7HFT.glass.eglfb.linkFlags = [lensLFlags].flatten()
+ARMV7HFT.glass.eglfb.lib = "glass_lens_eglfb"
+
+ARMV7HFT.glass.directfb = [:]
+ARMV7HFT.glass.directfb.nativeSource = [
+    file("modules/graphics/src/main/native-glass/lens"),
+    file("modules/graphics/src/main/native-glass/lens/wm"),
+    file("modules/graphics/src/main/native-glass/lens/cursor/fbCursor"),
+    file("modules/graphics/src/main/native-glass/lens/input/udev"),
+    file("modules/graphics/src/main/native-glass/lens/wm/screen/dfbScreen.c") ]
+ARMV7HFT.glass.directfb.compiler = compiler
+ARMV7HFT.glass.directfb.ccFlags = ["-ffast-math", extraCFlags, "-I$sdk/usr/include/directfb", "-DLINUX"].flatten()
+ARMV7HFT.glass.directfb.linker = linker
+ARMV7HFT.glass.directfb.linkFlags = [lensLFlags].flatten()
+ARMV7HFT.glass.directfb.lib = "glass_lens_dfb"
+
+ARMV7HFT.glass.fb = [:]
+ARMV7HFT.glass.fb.nativeSource = [
+    file("modules/graphics/src/main/native-glass/lens"),
+    file("modules/graphics/src/main/native-glass/lens/wm"),
+    file("modules/graphics/src/main/native-glass/lens/cursor/fbCursor"),
+    file("modules/graphics/src/main/native-glass/lens/input/udev"),
+    file("modules/graphics/src/main/native-glass/lens/wm/screen/fbdevScreen.c") ]
+ARMV7HFT.glass.fb.compiler = compiler
+ARMV7HFT.glass.fb.ccFlags = ["-ffast-math", extraCFlags, "-DLINUX"].flatten()
+ARMV7HFT.glass.fb.linker = linker
+ARMV7HFT.glass.fb.linkFlags = [lensLFlags].flatten()
+ARMV7HFT.glass.fb.lib = "glass_lens_fb"
+
+ARMV7HFT.glass.eglx11 = [:]
+ARMV7HFT.glass.eglx11.nativeSource = [
+    file("modules/graphics/src/main/native-glass/lens"),
+    file("modules/graphics/src/main/native-glass/lens/wm"),
+    file("modules/graphics/src/main/native-glass/lens/cursor/fbCursor"),
+    file("modules/graphics/src/main/native-glass/lens/input/udev"),
+    file("modules/graphics/src/main/native-glass/lens/wm/screen/x11ContainerScreen.c")]
+    //file("modules/graphics/src/main/native-glass/lens/wm/screen")]
+ARMV7HFT.glass.eglx11.compiler = compiler
+ARMV7HFT.glass.eglx11.ccFlags = ["-ffast-math", extraCFlags, "-DLINUX"].flatten()
+ARMV7HFT.glass.eglx11.linker = linker
+ARMV7HFT.glass.eglx11.linkFlags = [lensLFlags].flatten()
+ARMV7HFT.glass.eglx11.lib = "glass_lens_eglx11"
+
+ARMV7HFT.glass.gtk = [:]
+ARMV7HFT.glass.gtk.nativeSource = file("modules/graphics/src/main/native-glass/gtk")
+ARMV7HFT.glass.gtk.compiler = compiler
+ARMV7HFT.glass.gtk.ccFlags = ["-ffast-math", gtkCFlags, "-DLINUX"].flatten()
+ARMV7HFT.glass.gtk.linker = linker
+ARMV7HFT.glass.gtk.linkFlags = [gtkLFlags, "-lstdc++"].flatten()
+ARMV7HFT.glass.gtk.lib = "glass"
+
+ARMV7HFT.decora = [:]
+ARMV7HFT.decora.compiler = compiler
+ARMV7HFT.decora.ccFlags = extraCFlags
+ARMV7HFT.decora.linker = linker
+ARMV7HFT.decora.linkFlags = extraLFlags
+ARMV7HFT.decora.lib = "decora_sse"
+
+ARMV7HFT.prism = [:]
+ARMV7HFT.prism.javahInclude = ["com/sun/prism/impl/**/*", "com/sun/prism/PresentableState*"]
+ARMV7HFT.prism.nativeSource = file("modules/graphics/src/main/native-prism")
+ARMV7HFT.prism.compiler = compiler
+ARMV7HFT.prism.ccFlags = [extraCFlags].flatten()
+ARMV7HFT.prism.linker = linker
+ARMV7HFT.prism.linkFlags = [extraLFlags].flatten()
+ARMV7HFT.prism.lib = "prism_common"
+
+ARMV7HFT.prismSW = [:]
+ARMV7HFT.prismSW.javahInclude = ["com/sun/pisces/**/*"]
+ARMV7HFT.prismSW.nativeSource = file("modules/graphics/src/main/native-prism-sw")
+ARMV7HFT.prismSW.compiler = compiler
+ARMV7HFT.prismSW.ccFlags = [extraCFlags].flatten()
+ARMV7HFT.prismSW.linker = linker
+ARMV7HFT.prismSW.linkFlags = [extraLFlags].flatten()
+ARMV7HFT.prismSW.lib = "prism_sw"
+
+ARMV7HFT.iio = [:]
+ARMV7HFT.iio.javahInclude = ["com/sun/javafx/iio/**/*"]
+ARMV7HFT.iio.nativeSource = [
+    file("modules/graphics/src/main/native-iio"),
+    file("modules/graphics/src/main/native-iio/libjpeg7")]
+ARMV7HFT.iio.compiler = compiler
+ARMV7HFT.iio.ccFlags = iioCFlags
+ARMV7HFT.iio.linker = linker
+ARMV7HFT.iio.linkFlags = iioLFlags
+ARMV7HFT.iio.lib = "javafx_iio"
+
+ARMV7HFT.prismES2 = [:]
+ARMV7HFT.prismES2.variants = ["eglfb"]
+ARMV7HFT.prismES2.javahInclude = ["com/sun/prism/es2/**/*"]
+
+ARMV7HFT.prismES2.eglfb = [:]
+ARMV7HFT.prismES2.eglfb.nativeSource = [
+    file("modules/graphics/src/main/native-prism-es2"),
+    file("modules/graphics/src/main/native-prism-es2/GL"),
+    file("modules/graphics/src/main/native-prism-es2/eglfb")
+]
+ARMV7HFT.prismES2.eglfb.compiler = compiler
+ARMV7HFT.prismES2.eglfb.ccFlags = [ es2EglfbCFlags, "-I", ARMV7HFT.glass.lensport.nativeSource ].flatten()
+ARMV7HFT.prismES2.eglfb.linker = linker
+ARMV7HFT.prismES2.eglfb.linkFlags = es2EglfbLFlags
+ARMV7HFT.prismES2.eglfb.lib = "prism_es2_eglfb"
+
+ARMV7HFT.prismES2.eglx11 = [:]
+ARMV7HFT.prismES2.eglx11.nativeSource = [
+    file("modules/graphics/src/main/native-prism-es2"),
+    file("modules/graphics/src/main/native-prism-es2/GL"),
+    file("modules/graphics/src/main/native-prism-es2/eglx11")
+]
+ARMV7HFT.prismES2.eglx11.compiler = compiler
+ARMV7HFT.prismES2.eglx11.ccFlags = es2X11CFlags
+ARMV7HFT.prismES2.eglx11.linker = linker
+ARMV7HFT.prismES2.eglx11.linkFlags = es2X11LFlags
+ARMV7HFT.prismES2.eglx11.lib = "prism_es2_eglx11"
+
+def closedDir = file("$projectDir/../rt-closed")
+ARMV7HFT.font = [:]
+ARMV7HFT.font.javahInclude = [
+    "com/sun/javafx/font/**/*",
+    "com/sun/javafx/text/**/*"]
+ARMV7HFT.font.nativeSource = [file("modules/graphics/src/main/native-font")]
+ARMV7HFT.font.compiler = compiler
+ARMV7HFT.font.ccFlags = fontCFlags
+ARMV7HFT.font.linker = linker
+ARMV7HFT.font.linkFlags = fontLFlags
+ARMV7HFT.font.lib = "javafx_font"
+
+ARMV7HFT.fontT2K = [:]
+ARMV7HFT.fontT2K.javahInclude = ["com/sun/javafx/font/t2k/**/*"]
+ARMV7HFT.fontT2K.nativeSource = [
+        file("$closedDir/javafx-font-t2k-native/src"),
+        file("$closedDir/javafx-font-t2k-native/src/layout")]
+ARMV7HFT.fontT2K.compiler = compiler
+ARMV7HFT.fontT2K.ccFlags = [fontCFlags, "-DLE_STANDALONE"].flatten()
+ARMV7HFT.fontT2K.linker = linker
+ARMV7HFT.fontT2K.linkFlags = fontLFlags
+ARMV7HFT.fontT2K.lib = "javafx_font_t2k"
+
+ARMV7HFT.fontFreetype = [:]
+ARMV7HFT.fontFreetype.javahInclude = ["com/sun/javafx/font/freetype/OSFreetype.class*"]
+ARMV7HFT.fontFreetype.nativeSource = ["src/main/native-font/freetype.c"]
+ARMV7HFT.fontFreetype.compiler = compiler
+ARMV7HFT.fontFreetype.ccFlags = ["-DJFXFONT_PLUS", ccFlags, fontCFlags, freetypeCCFlags].flatten()
+ARMV7HFT.fontFreetype.linker = linker
+ARMV7HFT.fontFreetype.linkFlags = [linkFlags, fontLFlags, freetypeLinkFlags].flatten()
+ARMV7HFT.fontFreetype.lib = "javafx_font_freetype"
+
+ARMV7HFT.fontPango = [:]
+ARMV7HFT.fontPango.javahInclude = ["com/sun/javafx/font/freetype/OSPango.class"]
+ARMV7HFT.fontPango.nativeSource = ["src/main/native-font/pango.c"]
+ARMV7HFT.fontPango.compiler = compiler
+ARMV7HFT.fontPango.ccFlags = ["-DJFXFONT_PLUS", ccFlags, pangoCCFlags].flatten()
+ARMV7HFT.fontPango.linker = linker
+ARMV7HFT.fontPango.linkFlags = [linkFlags, pangoLinkFlags].flatten()
+ARMV7HFT.fontPango.lib = "javafx_font_pango"
+
+ARMV7HFT.webkit = [:]
+ARMV7HFT.webkit.binDir   = "$compilerHome/bin"
+ARMV7HFT.webkit.compiler = compiler
+ARMV7HFT.webkit.linker   = linker
+ARMV7HFT.webkit.ar       = file("$compilerHome/bin/${compilerPrefix}ar").getAbsolutePath()
+ARMV7HFT.webkit.objcopy  = file("$compilerHome/bin/${compilerPrefix}objcopy").getAbsolutePath()
+ARMV7HFT.webkit.strip    = file("$compilerHome/bin/${compilerPrefix}strip").getAbsolutePath()
+ARMV7HFT.webkit.ccFlags  = extraCFlags.join(' ')
+ARMV7HFT.webkit.linkFlags = extraLFlags.join(' ')
+
+ARMV7HFT.media = [:]
+ARMV7HFT.media.compiler = compiler
+ARMV7HFT.media.linker = linker
+ARMV7HFT.media.extra_cflags = mediaCFlags.join(' ')
+ARMV7HFT.media.extra_ldflags = mediaLFlags.join(' ')
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildSrc/armv7sft.gradle	Thu Feb 27 16:56:48 2014 -0800
@@ -0,0 +1,590 @@
+/*
+ * 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.
+ */
+
+ext.ARMV7SFT = [:]
+
+fetchExternalTools('ARMV7SFT', [ "armv6-vfp-04.tgz" ], 
+  rootProject.CROSS_TOOLS_DIR, rootProject.IS_IMPORT_CROSS_TOOLS)
+
+// Define the location of the sdk and toolchain
+def sdk=file("${rootProject.CROSS_TOOLS_DIR}/armv6-vfp-04")
+
+def compilerHome=file("/opt/arm-linaro-4.7")
+if (rootProject.hasProperty("ARMV7SFT_COMPILER")) {
+    logger.quiet "Using alternate ARMV7SFT_COMPILER $rootProject.ARMV7SF_COMPILER"
+    compilerHome=file(rootProject.ARMV7SFT_COMPILER);
+}
+def compilerPrefix="arm-linux-gnueabi-"
+if (rootProject.hasProperty("ARMV7SFT_COMPILER_PREFIX")) {
+    logger.quiet "Using alternate ARMV7SFT_COMPILER_PREFIX $rootProject.ARMV7SF_COMPILER_PREFIX"
+    compilerPrefix="${rootProject.ARMV7SFT_COMPILER_PREFIX}"
+}
+def jniPlatform
+if (IS_LINUX) {
+    jniPlatform="linux"
+} else if (IS_MAC) {
+    jniPlatform="darwin"
+} else {
+    println "ERROR: Cannot build on this platform"
+    return;
+}
+
+// Declare whether this particular target file applies to the current system
+ARMV7SFT.canBuild = (IS_LINUX || IS_MAC) && compilerHome.exists() && sdk.exists()
+if (!ARMV7SFT.canBuild) {
+    if (!compilerHome.exists()) println "ERROR: Mising compiler $compilerHome"
+    if (!sdk.exists()) println "ERROR: Mising sdk $sdk"
+    return;
+}
+
+// Lambda for naming the generated libs
+ARMV7SFT.library = { name -> return "lib${name}.so" as String }
+
+ARMV7SFT.compileSwing = false;
+ARMV7SFT.compileSWT = false;
+ARMV7SFT.compileFXPackager = false;
+ARMV7SFT.compileDesignTime = false;
+
+// Libraries end up in the sdk/rt/lib/arm directory for arm builds
+ARMV7SFT.libDest = "lib/arm"
+
+// TODO this is garbage. Each target file should define what it includes,
+// not what it excludes.
+ARMV7SFT.jfxrtJarExcludes = [
+    "**/*.hlsl",
+    "com/sun/glass/ui/win",
+    "com/sun/glass/ui/accessible/win",
+    "com/sun/prism/d3d",
+    "com/sun/prism/es2/gl/win",
+    //"com/sun/prism/null3d",
+    "com/sun/scenario/effect/impl/hw/d3d",
+    
+    "com/sun/glass/events/mac",
+    "com/sun/glass/ui/mac",
+    "com/sun/glass/ui/accessible/mac",
+    "com/sun/prism/es2/gl/mac",
+        
+    "com/sun/glass/ui/android",
+    
+    "com/sun/glass/ui/ios",
+    
+    "com/sun/glass/ui/swt", // SWT glass
+    
+    "javafx/embed/swing", // Swing Interop
+    
+    "javafx/embed/swt", // SWT Interop
+
+    "com/sun/prism/es2/MacGL*",
+    "com/sun/prism/es2/IOSGL*",
+    "com/sun/prism/es2/WinGL*",
+]
+
+def commonFlags = [
+        "-fno-strict-aliasing", "-fPIC", "-fno-omit-frame-pointer", // optimization flags
+        "-W", "-Wall", "-Wno-unused", "-Wno-parentheses", "-Werror=implicit-function-declaration"] // warning flags
+// Specify the compilation parameters and link parameters
+def ccFlags = [
+        commonFlags, "-I$JDK_HOME/include", "-I$JDK_HOME/include/$jniPlatform", "-c",
+        IS_DEBUG_NATIVE ? ["-ggdb", "-DVERBOSE"] : "-O2"].flatten()
+//ccFlags.addAll(["-Wnon-virtual-dtor", "-Woverloaded-virtual", "-std=c++0x"])
+def linkFlags = ["-shared", commonFlags].flatten()
+
+// Specify the compilation parameters and link parameters
+def extraCFlags = [
+        "-I", "-L",
+        ccFlags,
+        "-mthumb", "-march=armv7-a", "-mfloat-abi=softfp", "-mfpu=vfp",
+        "-I$sdk/usr/include",
+        "-D_GNU_SOURCE", "-DOMAP3"].flatten();
+
+//See if we should build for imx6
+def imxHeader=file("$sdk/usr/include/linux/mxcfb.h")
+if (imxHeader.exists()) {
+        extraCFlags = [extraCFlags,"-DIMX6_PLATFORM"].flatten();
+}
+
+def extraLFlags = [
+        "-I", "-L",
+        linkFlags,
+        "-Wl,-rpath-link", "$sdk/usr/lib",
+        "-L$sdk/usr/lib"].flatten()
+
+def x11CFlags = [extraCFlags, "-DUSE_XSHM"].flatten()
+def x11LFlags = [extraLFlags, "-lX11", "-lXext"].flatten()
+def eglCFlags = [extraCFlags].flatten()
+def eglLFlags = [extraLFlags].flatten()
+def dfbCFlags = ["-I$sdk/usr/include/directfb"]
+def dfbLFlags = ["-ldl"]
+// TODO dfb.args=disable-module=ps2mouse,disable-module=keyboard
+
+def lensLFlags = [extraLFlags, "-lpthread", "-ludev", "-ldl", "-lm"].flatten()
+def monocleCFlags = [
+        extraCFlags,
+        "-Werror",
+        "-I", file("modules/graphics/src/main/native-glass/monocle/")].flatten();
+def monocleLFlags = [extraLFlags, "-ldl", "-lm"].flatten()
+def glassCFlags = ["-ffast-math"]
+def glassLFlags = []
+
+def fontCFlags = [extraCFlags].flatten()
+def fontLFlags = [extraLFlags].flatten()
+
+def iioCFlags = [extraCFlags].flatten()
+def iioLFlags = [extraLFlags].flatten()
+
+def es2CFlags = [extraCFlags].flatten()
+def es2LFlags = [extraLFlags, eglLFlags].flatten()
+
+def es2EglfbCFlags = [extraCFlags, eglCFlags, "-DIS_EGLFB", "-DLINUX"].flatten()
+def es2EglfbLFlags = [extraLFlags, eglLFlags].flatten()
+def es2MonocleCFlags = [extraCFlags, eglCFlags, "-DIS_EGLFB", "-DLINUX"].flatten()
+def es2MonocleFlags = [extraLFlags, eglLFlags].flatten()
+
+def es2X11CFlags = [extraCFlags, eglCFlags, x11CFlags, "-DDEBUG", "-DIS_EGLX11", "-DLINUX"].flatten()
+def es2X11LFlags = [extraLFlags, x11LFlags, eglLFlags, "-lXdmcp", "-lXau"].flatten()
+
+def prismSWCFlags = [extraCFlags].flatten()
+def prismSWLFlags = [extraLFlags].flatten()
+
+def mediaCFlags = [extraCFlags,
+    "-I$sdk/usr/include/gstreamer-0.10",
+    "-I$sdk/usr/include/glib-2.0",
+    "-I$sdk/usr/lib/glib-2.0/include",
+    "-DENABLE_NATIVE_SOURCE=1", "-DENABLE_GST_FFMPEG=1"].flatten()
+def mediaLFlags = [extraLFlags, "-lgstreamer-0.10", "-lgstapp-0.10",
+    "-lgstbase-0.10", "-lglib-2.0", "-lgobject-2.0", "-lgmodule-2.0", "-lgthread-2.0"].flatten()
+
+def webCFlags = [extraCFlags].flatten()
+def webLFlags = [extraLFlags].flatten()
+
+// libraries to remove from the sdk
+//deploy.trim.public.library.filter= \
+//  fxavcodecplugin-52.so \
+//  fxavcodecplugin-53.so \
+//  fxplugins.so \
+//  libjfxwebkit.so \
+//  libgstplugins-lite.so \
+//  libgstreamer-lite.so \
+//  libprism-es2-eglx11.so \
+//  libglass-lens-fb.so \
+
+//defineProperty("CC", "gcc");
+//defineProperty("PRISM_CC", "cc");
+//defineProperty("PRISM_SW_CC", "cc");
+
+def gtkCFlags = [extraCFlags].flatten()
+def gtkLFlags = [extraLFlags].flatten()
+setupTools("ARMV7SFT_tools",
+    { propFile ->
+        ByteArrayOutputStream results = new ByteArrayOutputStream();
+        exec {
+            commandLine("$sdk/bin/pkg-config", "--cflags", "gtk+-2.0", "gthread-2.0", "xtst");
+            setStandardOutput(results);
+        }
+        propFile << "cflags=" << results.toString().trim() << "\n";
+
+        results = new ByteArrayOutputStream();
+        exec {
+            commandLine "$sdk/bin/pkg-config", "--libs", "gtk+-2.0", "gthread-2.0", "xtst"
+            standardOutput = results
+        }
+        propFile << "libs=" << results.toString().trim();
+    },
+    { properties ->
+        gtkCFlags.addAll(properties.getProperty("cflags").split(" "))
+        gtkLFlags.addAll(properties.getProperty("libs").split(" "))
+    }
+)
+
+ARMV7SFT.javafxPlatformProperties = """javafx.platform=eglfb
+directfb.com.sun.javafx.scene.control.skin.ListViewSkin.pannable=true
+directfb.com.sun.javafx.scene.control.skin.TreeViewSkin.pannable=true
+directfb.com.sun.javafx.scene.control.skin.TableViewSkin.pannable=true
+directfb.glass.platform=Lens
+directfb.glass.lens=dfb
+directfb.prism.order=sw
+directfb.com.sun.javafx.isEmbedded=true
+directfb.com.sun.javafx.scene.control.skin.FXVK.cache=true
+eglfb.com.sun.javafx.scene.control.skin.ListViewSkin.pannable=true
+eglfb.com.sun.javafx.scene.control.skin.TreeViewSkin.pannable=true
+eglfb.com.sun.javafx.scene.control.skin.TableViewSkin.pannable=true
+eglfb.maxTextureSize=2048
+eglfb.glass.platform=Lens
+eglfb.glass.lens=eglfb
+eglfb.prism.order=es2
+eglfb.prism.eglfb=true
+eglfb.prism.lcdtext=false
+eglfb.prism.maxvram=128m
+eglfb.prism.targetvram=112m
+eglfb.use.egl=true
+eglfb.doNativeComposite=true
+eglfb.use.gles2=true
+eglfb.embedded=eglfb
+eglfb.com.sun.javafx.isEmbedded=true
+eglfb.com.sun.javafx.scene.control.skin.FXVK.cache=true
+eglfb.prism.glDepthSize=0
+fb.com.sun.javafx.scene.control.skin.ListViewSkin.pannable=true
+fb.com.sun.javafx.scene.control.skin.TreeViewSkin.pannable=true
+fb.com.sun.javafx.scene.control.skin.TableViewSkin.pannable=true
+fb.glass.platform=Lens
+fb.glass.lens=fb
+fb.prism.order=sw
+fb.com.sun.javafx.isEmbedded=true
+fb.glass.restrictWindowToScreen=true
+fb.com.sun.javafx.scene.control.skin.FXVK.cache=true
+monocle.glass.platform=Monocle
+monocle.prism.order=es2,sw
+monocle.prism.eglfb=true
+monocle.prism.lcdtext=false
+monocle.prism.maxvram=128m
+monocle.prism.targetvram=112m
+monocle.use.egl=true
+monocle.use.gles2=true
+monocle.embedded=eglfb
+monocle.com.sun.javafx.isEmbedded=true
+monocle.doNativeComposite=true
+monocle.com.sun.javafx.scene.control.skin.FXVK.cache=true
+monocle.prism.glDepthSize=0
+eglx11.com.sun.javafx.scene.control.skin.ListViewSkin.pannable=true
+eglx11.com.sun.javafx.scene.control.skin.TreeViewSkin.pannable=true
+eglx11.com.sun.javafx.scene.control.skin.TableViewSkin.pannable=true
+eglx11.glass.platform=Lens
+eglx11.glass.lens=eglx11
+eglx11.prism.order=es2
+eglx11.prism.eglx11=true
+eglx11.prism.lcdtext=false
+eglx11.prism.maxvram=128m
+eglx11.prism.targetvram=112m
+eglx11.use.egl=true
+eglx11.use.gles2=true
+eglx11.embedded=eglx11
+eglx11.com.sun.javafx.isEmbedded=true
+eglx11.com.sun.javafx.scene.control.skin.FXVK.cache=true
+eglx11.prism.glDepthSize=0
+gtk.com.sun.javafx.scene.control.skin.ListViewSkin.pannable=true
+gtk.com.sun.javafx.scene.control.skin.TreeViewSkin.pannable=true
+gtk.com.sun.javafx.scene.control.skin.TableViewSkin.pannable=true
+gtk.glass.platform=gtk
+gtk.prism.order=sw
+gtk.com.sun.javafx.isEmbedded=true
+gtk.com.sun.javafx.scene.control.skin.FXVK.cache=true"""
+
+def pangoCCFlags = [extraCFlags, "-D_ENABLE_PANGO"];
+def pangoLinkFlags = [extraLFlags];
+setupTools("ARMV7SFT_pango_tools",
+    { propFile ->
+        ByteArrayOutputStream results = new ByteArrayOutputStream();
+        exec {
+            commandLine "$sdk/bin/pkg-config", "--cflags", "pangoft2"
+            standardOutput = results
+        }
+        propFile << "cflags=" << results.toString().trim() << "\n";
+
+        results = new ByteArrayOutputStream();
+        exec {
+            commandLine "$sdk/bin/pkg-config", "--libs", "pangoft2"
+            standardOutput = results
+        }
+        propFile << "libs=" << results.toString().trim();
+    },
+    { properties ->
+        pangoCCFlags.addAll(properties.getProperty("cflags").split(" "))
+        pangoLinkFlags.addAll(properties.getProperty("libs").split(" "))
+    }
+)
+
+def freetypeCCFlags = [ext.IS_COMPILE_PANGO ? "-D_ENABLE_PANGO" :
+                       ext.IS_COMPILE_HARFBUZZ ? "-D_ENABLE_HARFBUZZ" : ""]
+def freetypeLinkFlags = []
+setupTools("ARMV7SFT_freetype_tools",
+    { propFile ->
+        ByteArrayOutputStream results = new ByteArrayOutputStream();
+        exec {
+            commandLine "$sdk/bin/pkg-config", "--cflags", "freetype2"
+            standardOutput = results
+        }
+        propFile << "cflags=" << results.toString().trim() << "\n";
+
+        results = new ByteArrayOutputStream();
+        exec {
+            commandLine "$sdk/bin/pkg-config", "--libs", "freetype2"
+            standardOutput = results
+        }
+        propFile << "libs=" << results.toString().trim();
+    },
+    { properties ->
+        freetypeCCFlags.addAll(properties.getProperty("cflags").split(" "))
+        freetypeLinkFlags.addAll(properties.getProperty("libs").split(" "))
+    }
+)
+
+def compiler = file("$compilerHome/bin/${compilerPrefix}gcc").getAbsolutePath()
+def linker = file("$compilerHome/bin/${compilerPrefix}g++").getAbsolutePath()
+
+ARMV7SFT.glass = [:]
+ARMV7SFT.glass.variants = ["eglfb", "directfb", "fb", "gtk", "lensport", "monocle", "monocle_x11" ]
+ARMV7SFT.glass.javahInclude = [
+    "com/sun/glass/events/**",
+    "com/sun/glass/ui/*",
+    "com/sun/glass/ui/lens/*",
+    "com/sun/glass/ui/monocle/*",
+    "com/sun/glass/ui/monocle/linux/*",
+    "com/sun/glass/ui/monocle/util/*",
+    "com/sun/glass/ui/monocle/x11/*",
+    "com/sun/glass/ui/gtk/*",
+    "com/sun/glass/ui/accessible/gtk/*"]
+ARMV7SFT.glass.lib = "glass"
+
+ARMV7SFT.glass.lensport = [:]
+ARMV7SFT.glass.lensport.nativeSource = [
+    file("modules/graphics/src/main/native-glass/lens/lensport") ]
+ARMV7SFT.glass.lensport.compiler = compiler
+ARMV7SFT.glass.lensport.ccFlags = ["-ffast-math", extraCFlags, "-DLINUX", "-DISEGLFB",
+    "-DLENSPORT", "-I", file("modules/graphics/src/main/native-glass/lens/")].flatten()
+ARMV7SFT.glass.lensport.linker = linker
+ARMV7SFT.glass.lensport.linkFlags = [lensLFlags].flatten()
+ARMV7SFT.glass.lensport.lib = "lens_porting"
+
+ARMV7SFT.glass.monocle = [:]
+ARMV7SFT.glass.monocle.nativeSource = [
+        file("modules/graphics/src/main/native-glass/monocle"),
+        file("modules/graphics/src/main/native-glass/monocle/linux"),
+        file("modules/graphics/src/main/native-glass/monocle/util") ]
+ARMV7SFT.glass.monocle.compiler = compiler
+ARMV7SFT.glass.monocle.ccFlags = monocleCFlags
+ARMV7SFT.glass.monocle.linker = linker
+ARMV7SFT.glass.monocle.linkFlags = monocleLFlags
+ARMV7SFT.glass.monocle.lib = "glass_monocle"
+
+ARMV7SFT.glass.monocle_x11 = [:]
+ARMV7SFT.glass.monocle_x11.nativeSource = [
+        file("modules/graphics/src/main/native-glass/monocle/util"),
+        file("modules/graphics/src/main/native-glass/monocle/x11") ]
+ARMV7SFT.glass.monocle_x11.compiler = compiler
+ARMV7SFT.glass.monocle_x11.ccFlags = monocleCFlags
+ARMV7SFT.glass.monocle_x11.linker = linker
+ARMV7SFT.glass.monocle_x11.linkFlags = [ monocleLFlags, "-lX11" ].flatten()
+ARMV7SFT.glass.monocle_x11.lib = "glass_monocle_x11"
+
+ARMV7SFT.glass.eglfb = [:]
+// TODO when building headless, use lens/cursor/nullcursor/
+// otherwise we use lens/cursor/fbCursor/ and lens/input/udev
+
+// TODO when USE_RFB is specified use lens/rfb
+
+// TODO use /eglfb/x11ContainerScreen when using eglfb and EGL_X11_FB_CONTAINER
+// TODO use /headless/headlessScreen when using headless
+ARMV7SFT.glass.eglfb.nativeSource = [
+    file("modules/graphics/src/main/native-glass/lens"),
+    file("modules/graphics/src/main/native-glass/lens/wm"),
+    file("modules/graphics/src/main/native-glass/lens/cursor/fbCursor"),
+    file("modules/graphics/src/main/native-glass/lens/input/udev"),
+    file("modules/graphics/src/main/native-glass/lens/wm/screen/fbdevScreen.c")]
+ARMV7SFT.glass.eglfb.compiler = compiler
+ARMV7SFT.glass.eglfb.ccFlags = ["-ffast-math", extraCFlags, "-DLINUX", "-DISEGLFB"].flatten()
+ARMV7SFT.glass.eglfb.linker = linker
+ARMV7SFT.glass.eglfb.linkFlags = [lensLFlags].flatten()
+ARMV7SFT.glass.eglfb.lib = "glass_lens_eglfb"
+
+ARMV7SFT.glass.directfb = [:]
+ARMV7SFT.glass.directfb.nativeSource = [
+    file("modules/graphics/src/main/native-glass/lens"),
+    file("modules/graphics/src/main/native-glass/lens/wm"),
+    file("modules/graphics/src/main/native-glass/lens/cursor/fbCursor"),
+    file("modules/graphics/src/main/native-glass/lens/input/udev"),
+    file("modules/graphics/src/main/native-glass/lens/wm/screen/dfbScreen.c")]
+ARMV7SFT.glass.directfb.compiler = compiler
+ARMV7SFT.glass.directfb.ccFlags = ["-ffast-math", extraCFlags, "-I$sdk/usr/include/directfb", "-DLINUX"].flatten()
+ARMV7SFT.glass.directfb.linker = linker
+ARMV7SFT.glass.directfb.linkFlags = [lensLFlags].flatten()
+ARMV7SFT.glass.directfb.lib = "glass_lens_dfb"
+
+ARMV7SFT.glass.fb = [:]
+ARMV7SFT.glass.fb.nativeSource = [
+    file("modules/graphics/src/main/native-glass/lens"),
+    file("modules/graphics/src/main/native-glass/lens/wm"),
+    file("modules/graphics/src/main/native-glass/lens/cursor/fbCursor"),
+    file("modules/graphics/src/main/native-glass/lens/input/udev"),
+    file("modules/graphics/src/main/native-glass/lens/wm/screen/fbdevScreen.c") ]
+ARMV7SFT.glass.fb.compiler = compiler
+ARMV7SFT.glass.fb.ccFlags = ["-ffast-math", extraCFlags, "-DLINUX"].flatten()
+ARMV7SFT.glass.fb.linker = linker
+ARMV7SFT.glass.fb.linkFlags = [lensLFlags].flatten()
+ARMV7SFT.glass.fb.lib = "glass_lens_fb"
+ 
+ARMV7SFT.glass.eglx11 = [:]
+ARMV7SFT.glass.eglx11.nativeSource = [
+    file("modules/graphics/src/main/native-glass/lens"),
+    file("modules/graphics/src/main/native-glass/lens/wm"),
+    file("modules/graphics/src/main/native-glass/lens/cursor/fbCursor"),
+    file("modules/graphics/src/main/native-glass/lens/input/udev"),
+    file("modules/graphics/src/main/native-glass/lens/wm/screen/x11ContainerScreen.c")]
+ARMV7SFT.glass.eglx11.compiler = compiler
+ARMV7SFT.glass.eglx11.ccFlags = ["-ffast-math", extraCFlags].flatten()
+ARMV7SFT.glass.eglx11.ccFlags = ["-ffast-math", extraCFlags, "-DLINUX"].flatten()
+ARMV7SFT.glass.eglx11.linker = linker
+ARMV7SFT.glass.eglx11.linkFlags = [lensLFlags].flatten()
+ARMV7SFT.glass.eglx11.lib = "glass_lens_eglx11"
+ 
+ARMV7SFT.glass.gtk = [:]
+ARMV7SFT.glass.gtk.nativeSource = file("modules/graphics/src/main/native-glass/gtk")
+ARMV7SFT.glass.gtk.compiler = compiler
+ARMV7SFT.glass.gtk.ccFlags = ["-ffast-math", gtkCFlags, "-DLINUX"].flatten()
+ARMV7SFT.glass.gtk.linker = linker
+ARMV7SFT.glass.gtk.linkFlags = [gtkLFlags, "-lstdc++"].flatten()
+ARMV7SFT.glass.gtk.lib = "glass"
+
+ARMV7SFT.decora = [:]
+ARMV7SFT.decora.compiler = compiler
+ARMV7SFT.decora.ccFlags = extraCFlags
+ARMV7SFT.decora.linker = linker
+ARMV7SFT.decora.linkFlags = extraLFlags
+ARMV7SFT.decora.lib = "decora_sse"
+
+ARMV7SFT.prism = [:]
+ARMV7SFT.prism.javahInclude = ["com/sun/prism/impl/**/*", "com/sun/prism/PresentableState*"]
+ARMV7SFT.prism.nativeSource = file("modules/graphics/src/main/native-prism")
+ARMV7SFT.prism.compiler = compiler
+ARMV7SFT.prism.ccFlags = es2CFlags
+ARMV7SFT.prism.linker = linker
+ARMV7SFT.prism.linkFlags = es2LFlags 
+ARMV7SFT.prism.lib = "prism_common"
+
+ARMV7SFT.prismSW = [:]
+ARMV7SFT.prismSW.javahInclude = ["com/sun/pisces/**/*"]
+ARMV7SFT.prismSW.nativeSource = file("modules/graphics/src/main/native-prism-sw")
+ARMV7SFT.prismSW.compiler = compiler
+ARMV7SFT.prismSW.ccFlags = prismSWCFlags
+ARMV7SFT.prismSW.linker = linker
+ARMV7SFT.prismSW.linkFlags = prismSWLFlags
+ARMV7SFT.prismSW.lib = "prism_sw"
+
+ARMV7SFT.iio = [:]
+ARMV7SFT.iio.javahInclude = ["com/sun/javafx/iio/**/*"]
+ARMV7SFT.iio.nativeSource = [
+    file("modules/graphics/src/main/native-iio"),
+    file("modules/graphics/src/main/native-iio/libjpeg7")]
+ARMV7SFT.iio.compiler = compiler
+ARMV7SFT.iio.ccFlags = iioCFlags
+ARMV7SFT.iio.linker = linker
+ARMV7SFT.iio.linkFlags = iioLFlags
+ARMV7SFT.iio.lib = "javafx_iio"
+
+ARMV7SFT.prismES2 = [:]
+ARMV7SFT.prismES2.variants = ["eglfb", "monocle"]
+ARMV7SFT.prismES2.javahInclude = ["com/sun/prism/es2/**/*"]
+
+ARMV7SFT.prismES2.eglfb = [:]
+ARMV7SFT.prismES2.eglfb.nativeSource = [
+    file("modules/graphics/src/main/native-prism-es2"),
+    file("modules/graphics/src/main/native-prism-es2/GL"),
+    file("modules/graphics/src/main/native-prism-es2/eglfb")
+]
+ARMV7SFT.prismES2.eglfb.compiler = compiler
+ARMV7SFT.prismES2.eglfb.ccFlags = [ es2EglfbCFlags, "-I", ARMV7SFT.glass.lensport.nativeSource ].flatten()
+ARMV7SFT.prismES2.eglfb.linker = linker
+ARMV7SFT.prismES2.eglfb.linkFlags = es2EglfbLFlags
+ARMV7SFT.prismES2.eglfb.lib = "prism_es2_eglfb"
+
+ARMV7SFT.prismES2.monocle= [:]
+ARMV7SFT.prismES2.monocle.nativeSource = [
+    file("modules/graphics/src/main/native-prism-es2"),
+    file("modules/graphics/src/main/native-prism-es2/GL"),
+    file("modules/graphics/src/main/native-prism-es2/monocle")
+]
+ARMV7SFT.prismES2.monocle.compiler = compiler
+ARMV7SFT.prismES2.monocle.ccFlags = [ es2EglfbCFlags, "-I", ARMV7SFT.glass.lensport.nativeSource ].flatten()
+ARMV7SFT.prismES2.monocle.linker = linker
+ARMV7SFT.prismES2.monocle.linkFlags = es2EglfbLFlags
+ARMV7SFT.prismES2.monocle.lib = "prism_es2_monocle"
+
+ARMV7SFT.prismES2.eglx11 = [:]
+ARMV7SFT.prismES2.eglx11.nativeSource = [
+    file("modules/graphics/src/main/native-prism-es2"),
+    file("modules/graphics/src/main/native-prism-es2/GL"),
+    file("modules/graphics/src/main/native-prism-es2/eglx11")
+]
+ARMV7SFT.prismES2.eglx11.compiler = compiler
+ARMV7SFT.prismES2.eglx11.ccFlags = es2X11CFlags
+ARMV7SFT.prismES2.eglx11.linker = linker
+ARMV7SFT.prismES2.eglx11.linkFlags = es2X11LFlags
+ARMV7SFT.prismES2.eglx11.lib = "prism_es2_eglx11"
+
+def closedDir = file("$projectDir/../rt-closed")
+ARMV7SFT.font = [:]
+ARMV7SFT.font.javahInclude = [
+    "com/sun/javafx/font/**/*",
+    "com/sun/javafx/text/**/*"]
+ARMV7SFT.font.nativeSource = [file("modules/graphics/src/main/native-font")]
+ARMV7SFT.font.compiler = compiler
+ARMV7SFT.font.ccFlags = fontCFlags
+ARMV7SFT.font.linker = linker
+ARMV7SFT.font.linkFlags = fontLFlags
+ARMV7SFT.font.lib = "javafx_font"
+
+ARMV7SFT.fontT2K = [:]
+ARMV7SFT.fontT2K.javahInclude = ["com/sun/javafx/font/t2k/**/*"]
+ARMV7SFT.fontT2K.nativeSource = [
+        file("$closedDir/javafx-font-t2k-native/src"),
+        file("$closedDir/javafx-font-t2k-native/src/layout")]
+ARMV7SFT.fontT2K.compiler = compiler
+ARMV7SFT.fontT2K.ccFlags = [fontCFlags, "-DLE_STANDALONE"].flatten()
+ARMV7SFT.fontT2K.linker = linker
+ARMV7SFT.fontT2K.linkFlags = fontLFlags
+ARMV7SFT.fontT2K.lib = "javafx_font_t2k"
+
+ARMV7SFT.fontFreetype = [:]
+ARMV7SFT.fontFreetype.javahInclude = ["com/sun/javafx/font/freetype/OSFreetype.class"]
+ARMV7SFT.fontFreetype.nativeSource = ["src/main/native-font/freetype.c"]
+ARMV7SFT.fontFreetype.compiler = compiler
+ARMV7SFT.fontFreetype.ccFlags = ["-DJFXFONT_PLUS", ccFlags, fontCFlags, freetypeCCFlags].flatten()
+ARMV7SFT.fontFreetype.linker = linker
+ARMV7SFT.fontFreetype.linkFlags = [linkFlags, fontLFlags, freetypeLinkFlags].flatten()
+ARMV7SFT.fontFreetype.lib = "javafx_font_freetype"
+
+ARMV7SFT.fontPango = [:]
+ARMV7SFT.fontPango.javahInclude = ["com/sun/javafx/font/freetype/OSPango.class"]
+ARMV7SFT.fontPango.nativeSource = ["src/main/native-font/pango.c"]
+ARMV7SFT.fontPango.compiler = compiler
+ARMV7SFT.fontPango.ccFlags = ["-DJFXFONT_PLUS", ccFlags, pangoCCFlags].flatten()
+ARMV7SFT.fontPango.linker = linker
+ARMV7SFT.fontPango.linkFlags = [linkFlags, pangoLinkFlags].flatten()
+ARMV7SFT.fontPango.lib = "javafx_font_pango"
+
+ARMV7SFT.webkit = [:]
+ARMV7SFT.webkit.binDir   = "$compilerHome/bin"
+ARMV7SFT.webkit.compiler = compiler
+ARMV7SFT.webkit.linker   = linker
+ARMV7SFT.webkit.ar       = file("$compilerHome/bin/${compilerPrefix}ar").getAbsolutePath()
+ARMV7SFT.webkit.objcopy  = file("$compilerHome/bin/${compilerPrefix}objcopy").getAbsolutePath()
+ARMV7SFT.webkit.strip    = file("$compilerHome/bin/${compilerPrefix}strip").getAbsolutePath()
+ARMV7SFT.webkit.ccFlags  = extraCFlags.join(' ')
+ARMV7SFT.webkit.linkFlags = extraLFlags.join(' ')
+
+ARMV7SFT.media = [:]
+ARMV7SFT.media.compiler = compiler
+ARMV7SFT.media.linker = linker
+ARMV7SFT.media.extra_cflags = mediaCFlags.join(' ')
+ARMV7SFT.media.extra_ldflags = mediaLFlags.join(' ')
--- a/buildSrc/src/main/java/com/sun/scenario/effect/compiler/JSLC.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/buildSrc/src/main/java/com/sun/scenario/effect/compiler/JSLC.java	Thu Feb 27 16:56:48 2014 -0800
@@ -181,6 +181,7 @@
         throws Exception
     {
         int outTypes = jslcinfo.outTypes;
+        String genericsName = jslcinfo.genericsName;
         String interfaceName = jslcinfo.interfaceName;
         String peerName = jslcinfo.peerName;
         String shaderName = jslcinfo.shaderName;
@@ -210,7 +211,7 @@
             if (jslcinfo.force || outOfDate(outFile, sourceTime)) {
                 if (pinfo == null) pinfo = getParserInfo(stream);
                 JSWBackend javaBackend = new JSWBackend(pinfo.parser, pinfo.program);
-                String genCode = javaBackend.getGenCode(shaderName, peerName, interfaceName);
+                String genCode = javaBackend.getGenCode(shaderName, peerName, genericsName, interfaceName);
                 write(genCode, outFile);
             }
         }
@@ -227,7 +228,7 @@
                 if (pinfo == null) pinfo = getParserInfo(stream);
                 SSEBackend sseBackend = new SSEBackend(pinfo.parser, pinfo.program);
                 SSEBackend.GenCode gen =
-                    sseBackend.getGenCode(shaderName, peerName, interfaceName);
+                    sseBackend.getGenCode(shaderName, peerName, genericsName, interfaceName);
 
                 // write impl class
                 if (outFileStale) {
@@ -253,7 +254,7 @@
                 if (pinfo == null) pinfo = getParserInfo(stream);
                 MEBackend sseBackend = new MEBackend(pinfo.parser, pinfo.program);
                 MEBackend.GenCode gen =
-                    sseBackend.getGenCode(shaderName, peerName, interfaceName);
+                    sseBackend.getGenCode(shaderName, peerName, genericsName, interfaceName);
 
                 // write impl class
                 if (outFileStale) {
@@ -272,7 +273,7 @@
             if (jslcinfo.force || outOfDate(outFile, sourceTime)) {
                 if (pinfo == null) pinfo = getParserInfo(stream);
                 PrismBackend prismBackend = new PrismBackend(pinfo.parser, pinfo.program);
-                String genCode = prismBackend.getGlueCode(shaderName, peerName, interfaceName);
+                String genCode = prismBackend.getGlueCode(shaderName, peerName, genericsName, interfaceName);
                 write(genCode, outFile);
             }
         }
@@ -312,6 +313,7 @@
         public List<String> srcDirs = new ArrayList<String>();
         public String shaderName;
         public String peerName;
+        public String genericsName;
         public String interfaceName;
         public String pkgName = rootPkg;
         public Map<Integer, String> outNameMap = initDefaultInfoMap();
--- a/buildSrc/src/main/java/com/sun/scenario/effect/compiler/backend/prism/PrismBackend.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/buildSrc/src/main/java/com/sun/scenario/effect/compiler/backend/prism/PrismBackend.java	Thu Feb 27 16:56:48 2014 -0800
@@ -62,9 +62,11 @@
     
     public String getGlueCode(String effectName,
                               String peerName,
+                              String genericsName,
                               String interfaceName)
     {
         Map<String, Variable> vars = parser.getSymbolTable().getGlobalVariables();
+        StringBuilder genericsDecl = new StringBuilder();
         StringBuilder interfaceDecl = new StringBuilder();
         StringBuilder samplerLinear = new StringBuilder();
         StringBuilder samplerInit = new StringBuilder();
@@ -116,6 +118,10 @@
             throw new RuntimeException("Must use zero, one, or two samplers (for now)");
         }
 
+        if (genericsName != null) {
+            genericsDecl.append("<"+genericsName+">");
+        }
+
         if (interfaceName != null) {
             interfaceDecl.append("implements "+interfaceName);
         }
@@ -124,6 +130,7 @@
         glue.setAttribute("effectName", effectName);
         glue.setAttribute("peerName", peerName);
         glue.setAttribute("superClass", superClass);
+        glue.setAttribute("genericsDecl", genericsDecl.toString());
         glue.setAttribute("interfaceDecl", interfaceDecl.toString());
         glue.setAttribute("usercode", usercode.toString());
         glue.setAttribute("samplerLinear", samplerLinear.toString());
--- a/buildSrc/src/main/java/com/sun/scenario/effect/compiler/backend/sw/java/JSWBackend.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/buildSrc/src/main/java/com/sun/scenario/effect/compiler/backend/sw/java/JSWBackend.java	Thu Feb 27 16:56:48 2014 -0800
@@ -63,9 +63,11 @@
     
     public final String getGenCode(String effectName,
                                    String peerName,
+                                   String genericsName,
                                    String interfaceName)
     {
         Map<String, Variable> vars = parser.getSymbolTable().getGlobalVariables();
+        StringBuilder genericsDecl = new StringBuilder();
         StringBuilder interfaceDecl = new StringBuilder();
         StringBuilder constants = new StringBuilder();
         StringBuilder samplers = new StringBuilder();
@@ -208,7 +210,11 @@
                 posIncrY.append("pos" + i + "_y += inc" + i + "_y;\n");
             }
         }
-        
+
+        if (genericsName != null) {
+            genericsDecl.append("<"+genericsName+">");
+        }
+
         if (interfaceName != null) {
             interfaceDecl.append("implements "+interfaceName);
         }
@@ -218,6 +224,7 @@
         StringTemplate glue = group.getInstanceOf("glue");
         glue.setAttribute("effectName", effectName);
         glue.setAttribute("peerName", peerName);
+        glue.setAttribute("genericsDecl", genericsDecl.toString());
         glue.setAttribute("interfaceDecl", interfaceDecl.toString());
         glue.setAttribute("usercode", usercode.toString());
         glue.setAttribute("samplers", samplers.toString());
--- a/buildSrc/src/main/java/com/sun/scenario/effect/compiler/backend/sw/me/MEBackend.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/buildSrc/src/main/java/com/sun/scenario/effect/compiler/backend/sw/me/MEBackend.java	Thu Feb 27 16:56:48 2014 -0800
@@ -79,9 +79,11 @@
 
     public final GenCode getGenCode(String effectName,
                                     String peerName,
+                                    String genericsName,
                                     String interfaceName)
     {
         Map<String, Variable> vars = parser.getSymbolTable().getGlobalVariables();
+        StringBuilder genericsDecl = new StringBuilder();
         StringBuilder interfaceDecl = new StringBuilder();
         StringBuilder constants = new StringBuilder();
         StringBuilder samplers = new StringBuilder();
@@ -264,6 +266,10 @@
             }
         }
 
+        if (genericsName != null) {
+            genericsDecl.append("<"+genericsName+">");
+        }
+
         if (interfaceName != null) {
             interfaceDecl.append("implements "+interfaceName);
         }
@@ -273,6 +279,7 @@
         StringTemplate jglue = group.getInstanceOf("glue");
         jglue.setAttribute("effectName", effectName);
         jglue.setAttribute("peerName", peerName);
+        jglue.setAttribute("genericsDecl", genericsDecl.toString());
         jglue.setAttribute("interfaceDecl", interfaceDecl.toString());
         jglue.setAttribute("usercode", usercode.toString());
         jglue.setAttribute("samplers", samplers.toString());
--- a/buildSrc/src/main/java/com/sun/scenario/effect/compiler/backend/sw/sse/SSEBackend.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/buildSrc/src/main/java/com/sun/scenario/effect/compiler/backend/sw/sse/SSEBackend.java	Thu Feb 27 16:56:48 2014 -0800
@@ -94,9 +94,11 @@
 
     public final GenCode getGenCode(String effectName,
                                     String peerName,
+                                    String genericsName,
                                     String interfaceName)
     {
         Map<String, Variable> vars = parser.getSymbolTable().getGlobalVariables();
+        StringBuilder genericsDecl = new StringBuilder();
         StringBuilder interfaceDecl = new StringBuilder();
         StringBuilder constants = new StringBuilder();
         StringBuilder samplers = new StringBuilder();
@@ -309,6 +311,10 @@
             }
         }
 
+        if (genericsName != null) {
+            genericsDecl.append("<"+genericsName+">");
+        }
+
         if (interfaceName != null) {
             interfaceDecl.append("implements "+interfaceName);
         }
@@ -318,6 +324,7 @@
         StringTemplate jglue = group.getInstanceOf("glue");
         jglue.setAttribute("effectName", effectName);
         jglue.setAttribute("peerName", peerName);
+        jglue.setAttribute("genericsDecl", genericsDecl.toString());
         jglue.setAttribute("interfaceDecl", interfaceDecl.toString());
         jglue.setAttribute("usercode", usercode.toString());
         jglue.setAttribute("samplers", samplers.toString());
--- a/buildSrc/src/main/resources/com/sun/scenario/effect/compiler/backend/prism/PrismGlue.stg	Wed Feb 26 08:22:40 2014 -0800
+++ b/buildSrc/src/main/resources/com/sun/scenario/effect/compiler/backend/prism/PrismGlue.stg	Thu Feb 27 16:56:48 2014 -0800
@@ -1,6 +1,6 @@
 group PrismGlue;
 
-glue(effectName,peerName,superClass,interfaceDecl,
+glue(effectName,peerName,superClass,genericsDecl,interfaceDecl,
      usercode,samplerLinear,samplerInit,
      paramInit,paramUpdate,isPixcoordUsed) ::= <<
 /*
@@ -46,7 +46,7 @@
 import com.sun.scenario.effect.impl.state.*;
 import com.sun.javafx.geom.Rectangle;
 
-public class PPS$peerName$Peer extends $superClass$ $interfaceDecl$ {
+public class PPS$peerName$Peer extends $superClass$$genericsDecl$ $interfaceDecl$ {
 
     public PPS$peerName$Peer(FilterContext fctx, Renderer r, String shaderName) {
         super(fctx, r, shaderName);
--- a/buildSrc/src/main/resources/com/sun/scenario/effect/compiler/backend/sw/java/JSWGlue.stg	Wed Feb 26 08:22:40 2014 -0800
+++ b/buildSrc/src/main/resources/com/sun/scenario/effect/compiler/backend/sw/java/JSWGlue.stg	Thu Feb 27 16:56:48 2014 -0800
@@ -1,6 +1,6 @@
 group JSWGlue;
 
-glue(effectName,peerName,interfaceDecl,
+glue(effectName,peerName,genericsDecl,interfaceDecl,
      usercode,samplers,cleanup,srcRects,constants,
      pixInitY,pixInitX,posDecls,posInitY,posIncrY,posInitX,posIncrX,
      body) ::= <<
@@ -49,7 +49,7 @@
 import com.sun.javafx.geom.Rectangle;
 import com.sun.javafx.geom.transform.BaseTransform;
 
-public class JSW$peerName$Peer extends JSWEffectPeer $interfaceDecl$ {
+public class JSW$peerName$Peer extends JSWEffectPeer$genericsDecl$ $interfaceDecl$ {
 
     public JSW$peerName$Peer(FilterContext fctx, Renderer r, String uniqueName) {
         super(fctx, r, uniqueName);
@@ -64,6 +64,7 @@
 
     @Override
     public ImageData filter(Effect effect,
+                            RenderState rstate,
                             BaseTransform transform,
                             Rectangle outputClip,
                             ImageData... inputs)
--- a/buildSrc/src/main/resources/com/sun/scenario/effect/compiler/backend/sw/me/MEJavaGlue.stg	Wed Feb 26 08:22:40 2014 -0800
+++ b/buildSrc/src/main/resources/com/sun/scenario/effect/compiler/backend/sw/me/MEJavaGlue.stg	Thu Feb 27 16:56:48 2014 -0800
@@ -1,6 +1,6 @@
 group MEJavaGlue;
 
-glue(effectName,peerName,interfaceDecl,
+glue(effectName,peerName,genericsDecl,interfaceDecl,
      usercode,samplers,srcRects,constants,params,paramDecls) ::= <<
 /*
  * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
@@ -49,7 +49,7 @@
 import com.sun.javafx.geom.AffineTransform;
 import com.sun.javafx.geom.Rectangle;
 
-public class ME$peerName$Peer extends MEEffectPeer $interfaceName$ {
+public class ME$peerName$Peer extends MEEffectPeer$genericsDecl$ $interfaceDecl$ {
 
     public ME$peerName$Peer(FilterContext fctx, Renderer r, String uniqueName) {
         super(fctx, r, uniqueName);
--- a/buildSrc/src/main/resources/com/sun/scenario/effect/compiler/backend/sw/sse/SSEJavaGlue.stg	Wed Feb 26 08:22:40 2014 -0800
+++ b/buildSrc/src/main/resources/com/sun/scenario/effect/compiler/backend/sw/sse/SSEJavaGlue.stg	Thu Feb 27 16:56:48 2014 -0800
@@ -1,6 +1,6 @@
 group SSEJavaGlue;
 
-glue(effectName,peerName,interfaceDecl,
+glue(effectName,peerName,genericsDecl,interfaceDecl,
      usercode,samplers,cleanup,srcRects,constants,params,paramDecls) ::= <<
 /*
  * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
@@ -47,7 +47,7 @@
 import com.sun.javafx.geom.Rectangle;
 import com.sun.javafx.geom.transform.BaseTransform;
 
-public class SSE$peerName$Peer extends SSEEffectPeer $interfaceDecl$ {
+public class SSE$peerName$Peer extends SSEEffectPeer$genericsDecl$ $interfaceDecl$ {
 
     public SSE$peerName$Peer(FilterContext fctx, Renderer r, String uniqueName) {
         super(fctx, r, uniqueName);
@@ -62,6 +62,7 @@
 
     @Override
     public ImageData filter(Effect effect,
+                            RenderState rstate,
                             BaseTransform transform,
                             Rectangle outputClip,
                             ImageData... inputs)
--- a/modules/base/src/main/java/com/sun/javafx/PlatformUtil.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/modules/base/src/main/java/com/sun/javafx/PlatformUtil.java	Thu Feb 27 16:56:48 2014 -0800
@@ -48,38 +48,14 @@
     private static String javafxPlatform;
 
     static {
-        javafxPlatform = AccessController.doPrivileged(new PrivilegedAction<String>() {
-            @Override public String run() {
-                return System.getProperty("javafx.platform");
-            }
-        });
+        javafxPlatform = AccessController.doPrivileged((PrivilegedAction<String>) () -> System.getProperty("javafx.platform"));
         loadProperties();
-        embedded = AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
-            @Override public Boolean run() {
-                return Boolean.getBoolean("com.sun.javafx.isEmbedded");
-            }
-        });
-        embedded3DEnabled = AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
-            @Override public Boolean run() {
-                return Boolean.getBoolean("com.sun.javafx.experimental.embedded.3d");
-            }
-        });
-        embeddedType = AccessController.doPrivileged(new PrivilegedAction<String>() {
-            @Override public String run() {
-                return System.getProperty("embedded");
-            }
-        });
-        useEGL = AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
-            @Override public Boolean run() {
-                return Boolean.getBoolean("use.egl");
-            }
-        });
+        embedded = AccessController.doPrivileged((PrivilegedAction<Boolean>) () -> Boolean.getBoolean("com.sun.javafx.isEmbedded"));
+        embedded3DEnabled = AccessController.doPrivileged((PrivilegedAction<Boolean>) () -> Boolean.getBoolean("com.sun.javafx.experimental.embedded.3d"));
+        embeddedType = AccessController.doPrivileged((PrivilegedAction<String>) () -> System.getProperty("embedded"));
+        useEGL = AccessController.doPrivileged((PrivilegedAction<Boolean>) () -> Boolean.getBoolean("use.egl"));
         if (useEGL) {
-            doEGLCompositing = AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
-                @Override public Boolean run() {
-                    return Boolean.getBoolean("doNativeComposite");
-                }
-            });
+            doEGLCompositing = AccessController.doPrivileged((PrivilegedAction<Boolean>) () -> Boolean.getBoolean("doNativeComposite"));
         } else
             doEGLCompositing = false;
     }
@@ -156,11 +132,7 @@
     public static boolean useGLES2() {
         String useGles2 = "false";
         useGles2 =
-                AccessController.doPrivileged(new PrivilegedAction<String>() {
-                    public String run() {
-                        return System.getProperty("use.gles2");
-                    }
-                });
+                AccessController.doPrivileged((PrivilegedAction<String>) () -> System.getProperty("use.gles2"));
         if ("true".equals(useGles2))
             return true;
         else
@@ -278,35 +250,33 @@
                 (vmname != null && vmname.indexOf("Embedded") > 0))) {
             return;
         }
-        AccessController.doPrivileged(new PrivilegedAction<Void>() {
-            public Void run() {
-                final File rtDir = getRTDir();
-                final String propertyFilename = "javafx.platform.properties";
-                File rtProperties = new File(rtDir, propertyFilename);
-                // First look for javafx.platform.properties in the JavaFX runtime
-                // Then in the installation directory of the JRE
-                if (rtProperties.exists()) {
-                    loadPropertiesFromFile(rtProperties);
-                    return null;
-                } 
-                String javaHome = System.getProperty("java.home");
-                File javaHomeProperties = new File(javaHome,
-                                                   "lib" + File.separator
-                                                   + propertyFilename);
-                if (javaHomeProperties.exists()) {
-                    loadPropertiesFromFile(javaHomeProperties);
-                    return null;
-                } 
-                
-                String javafxRuntimePath = System.getProperty("javafx.runtime.path");
-                File javafxRuntimePathProperties = new File(javafxRuntimePath,
-                                                         File.separator + propertyFilename);
-                if (javafxRuntimePathProperties.exists()) {
-                   loadPropertiesFromFile(javafxRuntimePathProperties);
-                   return null;
-                }
+        AccessController.doPrivileged((PrivilegedAction<Void>) () -> {
+            final File rtDir = getRTDir();
+            final String propertyFilename = "javafx.platform.properties";
+            File rtProperties = new File(rtDir, propertyFilename);
+            // First look for javafx.platform.properties in the JavaFX runtime
+            // Then in the installation directory of the JRE
+            if (rtProperties.exists()) {
+                loadPropertiesFromFile(rtProperties);
                 return null;
             }
+            String javaHome = System.getProperty("java.home");
+            File javaHomeProperties = new File(javaHome,
+                                               "lib" + File.separator
+                                               + propertyFilename);
+            if (javaHomeProperties.exists()) {
+                loadPropertiesFromFile(javaHomeProperties);
+                return null;
+            }
+
+            String javafxRuntimePath = System.getProperty("javafx.runtime.path");
+            File javafxRuntimePathProperties = new File(javafxRuntimePath,
+                                                     File.separator + propertyFilename);
+            if (javafxRuntimePathProperties.exists()) {
+               loadPropertiesFromFile(javafxRuntimePathProperties);
+               return null;
+            }
+            return null;
         });
     }
     
--- a/modules/base/src/main/java/com/sun/javafx/binding/ExpressionHelper.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/modules/base/src/main/java/com/sun/javafx/binding/ExpressionHelper.java	Thu Feb 27 16:56:48 2014 -0800
@@ -28,6 +28,7 @@
 import javafx.beans.InvalidationListener;
 import javafx.beans.value.ChangeListener;
 import javafx.beans.value.ObservableValue;
+import sun.util.logging.PlatformLogger;
 
 import java.util.Arrays;
 
@@ -132,7 +133,11 @@
 
         @Override
         protected void fireValueChangedEvent() {
-            listener.invalidated(observable);
+            try {
+                listener.invalidated(observable);
+            } catch (Exception e) {
+                PlatformLogger.getLogger("beans").warning("Exception in InvalidationListener", e);
+            }
         }
     }
     
@@ -173,7 +178,11 @@
             currentValue = observable.getValue();
             final boolean changed = (currentValue == null)? (oldValue != null) : !currentValue.equals(oldValue);
             if (changed) {
-                listener.changed(observable, oldValue, currentValue);
+                try {
+                    listener.changed(observable, oldValue, currentValue);
+                } catch (Exception e) {
+                    PlatformLogger.getLogger("beans").warning("Exception in ChangeListener", e);
+                }
             }
         }
     }
@@ -336,7 +345,11 @@
             try {
                 locked = true;
                 for (int i = 0; i < curInvalidationSize; i++) {
-                    curInvalidationList[i].invalidated(observable);
+                    try {
+                        curInvalidationList[i].invalidated(observable);
+                    } catch (Exception e) {
+                        PlatformLogger.getLogger("beans").warning("Exception in InvalidationListener", e);
+                    }
                 }
                 if (curChangeSize > 0) {
                     final T oldValue = currentValue;
@@ -344,7 +357,11 @@
                     final boolean changed = (currentValue == null)? (oldValue != null) : !currentValue.equals(oldValue);
                     if (changed) {
                         for (int i = 0; i < curChangeSize; i++) {
-                            curChangeList[i].changed(observable, oldValue, currentValue);
+                            try {
+                                curChangeList[i].changed(observable, oldValue, currentValue);
+                            } catch (Exception e) {
+                                PlatformLogger.getLogger("beans").warning("Exception in ChangeListener", e);
+                            }
                         }
                     }
                 }
--- a/modules/base/src/main/java/com/sun/javafx/binding/SelectBinding.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/modules/base/src/main/java/com/sun/javafx/binding/SelectBinding.java	Thu Feb 27 16:56:48 2014 -0800
@@ -146,7 +146,7 @@
             try {
                 return (Boolean)observable.getValue();
             } catch (NullPointerException ex) {
-                Logging.getLogger().info("Value of select binding is null, returning default value", ex);
+                Logging.getLogger().fine("Value of select binding is null, returning default value", ex);
             } catch (ClassCastException ex) {
                 Logging.getLogger().warning("Value of select-binding has wrong type, returning default value.", ex);
             }
@@ -197,7 +197,7 @@
             try {
                 return ((Number)observable.getValue()).doubleValue();
             } catch (NullPointerException ex) {
-                Logging.getLogger().info("Value of select binding is null, returning default value", ex);
+                Logging.getLogger().fine("Value of select binding is null, returning default value", ex);
             } catch (ClassCastException ex) {
                 Logging.getLogger().warning("Exception while evaluating select-binding", ex);
             }
@@ -248,7 +248,7 @@
             try {
                 return ((Number)observable.getValue()).floatValue();
             } catch (NullPointerException ex) {
-                Logging.getLogger().info("Value of select binding is null, returning default value", ex);
+                Logging.getLogger().fine("Value of select binding is null, returning default value", ex);
             } catch (ClassCastException ex) {
                 Logging.getLogger().warning("Exception while evaluating select-binding", ex);
             }
@@ -299,7 +299,7 @@
             try {
                 return ((Number)observable.getValue()).intValue();
             } catch (NullPointerException ex) {
-                Logging.getLogger().info("Value of select binding is null, returning default value", ex);
+                Logging.getLogger().fine("Value of select binding is null, returning default value", ex);
             } catch (ClassCastException ex) {
                 Logging.getLogger().warning("Exception while evaluating select-binding", ex);
             }
@@ -350,7 +350,7 @@
             try {
                 return ((Number)observable.getValue()).longValue();
             } catch (NullPointerException ex) {
-                Logging.getLogger().info("Value of select binding is null, returning default value", ex);
+                Logging.getLogger().fine("Value of select binding is null, returning default value", ex);
             } catch (ClassCastException ex) {
                 Logging.getLogger().warning("Exception while evaluating select-binding", ex);
             }
@@ -498,7 +498,7 @@
                         if (ex instanceof  IllegalStateException) {
                             logger.warning("Property '" + propertyNames[i] + "' does not exist in " + obj.getClass(), ex);
                         } else if (ex instanceof NullPointerException) {
-                            logger.info("Property '" + propertyNames[i] + "' in " + properties[i] + " is null", ex);
+                            logger.fine("Property '" + propertyNames[i] + "' in " + properties[i] + " is null", ex);
                         } else {
                             Logging.getLogger().warning("", ex);
                         }
@@ -512,7 +512,7 @@
             updateDependencies();
             final ObservableValue<?> result = properties[n-1];
             if (result == null) {
-                Logging.getLogger().info("Property '" + propertyNames[n-1] + "' in " + properties[n-1] + " is null", new NullPointerException());
+                Logging.getLogger().fine("Property '" + propertyNames[n-1] + "' in " + properties[n-1] + " is null", new NullPointerException());
             }
             return result;
         }
--- a/modules/base/src/main/java/com/sun/javafx/collections/ArrayListenerHelper.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/modules/base/src/main/java/com/sun/javafx/collections/ArrayListenerHelper.java	Thu Feb 27 16:56:48 2014 -0800
@@ -29,6 +29,7 @@
 import javafx.beans.InvalidationListener;
 import javafx.collections.ArrayChangeListener;
 import javafx.collections.ObservableArray;
+import sun.util.logging.PlatformLogger;
 
 /**
  */
@@ -126,7 +127,11 @@
 
         @Override
         protected void fireValueChangedEvent(boolean sizeChanged, int from, int to) {
-            listener.invalidated(observable);
+            try {
+                listener.invalidated(observable);
+            } catch (Exception e) {
+                PlatformLogger.getLogger("collections").warning("Exception in InvalidationListener", e);
+            }
         }
     }
 
@@ -161,7 +166,11 @@
 
         @Override
         protected void fireValueChangedEvent(boolean sizeChanged, int from, int to) {
-            listener.onChanged(observable, sizeChanged, from, to);
+            try {
+                listener.onChanged(observable, sizeChanged, from, to);
+            } catch (Exception e) {
+                PlatformLogger.getLogger("collections").warning("Exception in ArrayChangeListener", e);
+            }
         }
     }
 
@@ -317,10 +326,18 @@
             try {
                 locked = true;
                 for (int i = 0; i < curInvalidationSize; i++) {
-                    curInvalidationList[i].invalidated(observable);
+                    try {
+                        curInvalidationList[i].invalidated(observable);
+                    } catch (Exception e) {
+                        PlatformLogger.getLogger("collections").warning("Exception in InvalidationListener", e);
+                    }
                 }
                 for (int i = 0; i < curChangeSize; i++) {
-                    curChangeList[i].onChanged(observable, sizeChanged, from, to);
+                    try {
+                        curChangeList[i].onChanged(observable, sizeChanged, from, to);
+                    } catch (Exception e) {
+                        PlatformLogger.getLogger("collections").warning("Exception in ArrayChangeListener", e);
+                    }
                 }
             } finally {
                 locked = false;
--- a/modules/base/src/main/java/com/sun/javafx/collections/FloatArraySyncer.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/modules/base/src/main/java/com/sun/javafx/collections/FloatArraySyncer.java	Thu Feb 27 16:56:48 2014 -0800
@@ -33,8 +33,10 @@
      * the same array was synced before. The usage is similar to toArray method
      * so always use it as following: {@code dest = source.syncTo(dest);}
      * @param array previously synced array
+     * @param fromAndLengthIndices an int array of 2 elements that states the 
+     * start and length of elements modified.
      * @return a synced array, which is the same or new array (depending on
      * the change).
      */
-    float[] syncTo(float[] array);
+    float[] syncTo(float[] array, int[] fromAndLengthIndices);
 }
--- a/modules/base/src/main/java/com/sun/javafx/collections/IntegerArraySyncer.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/modules/base/src/main/java/com/sun/javafx/collections/IntegerArraySyncer.java	Thu Feb 27 16:56:48 2014 -0800
@@ -33,8 +33,10 @@
      * the same array was synced before. The usage is similar to toArray method
      * so always use it as following: {@code dest = source.syncTo(dest);}
      * @param array previously synced array
+     * @param fromAndLengthIndices an int array of 2 elements that states the 
+     * start and length of elements modified.
      * @return a synced array, which is the same or new array (depending on
      * the change).
      */
-    int[] syncTo(int[] array);
+    int[] syncTo(int[] array, int[] fromAndLengthIndices);
 }
\ No newline at end of file
--- a/modules/base/src/main/java/com/sun/javafx/collections/ListListenerHelper.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/modules/base/src/main/java/com/sun/javafx/collections/ListListenerHelper.java	Thu Feb 27 16:56:48 2014 -0800
@@ -28,6 +28,7 @@
 import com.sun.javafx.binding.ExpressionHelperBase;
 import javafx.beans.InvalidationListener;
 import javafx.collections.ListChangeListener;
+import sun.util.logging.PlatformLogger;
 
 import java.util.Arrays;
 
@@ -121,7 +122,11 @@
 
         @Override
         protected void fireValueChangedEvent(ListChangeListener.Change<? extends E> change) {
+            try {
             listener.invalidated(change.getList());
+            } catch (Exception e) {
+                PlatformLogger.getLogger("collections").warning("Exception in InvalidationListener", e);
+            }
         }
     }
 
@@ -155,7 +160,11 @@
 
         @Override
         protected void fireValueChangedEvent(ListChangeListener.Change<? extends E> change) {
-            listener.onChanged(change);
+            try {
+                listener.onChanged(change);
+            } catch (Exception e) {
+                PlatformLogger.getLogger("collections").warning("Exception in ListChangeListener", e);
+            }
         }
     }
 
@@ -308,11 +317,19 @@
             try {
                 locked = true;
                 for (int i = 0; i < curInvalidationSize; i++) {
-                    curInvalidationList[i].invalidated(change.getList());
+                    try {
+                        curInvalidationList[i].invalidated(change.getList());
+                    } catch (Exception e) {
+                        PlatformLogger.getLogger("collections").warning("Exception in InvalidationListener", e);
+                    }
                 }
                 for (int i = 0; i < curChangeSize; i++) {
                     change.reset();
-                    curChangeList[i].onChanged(change);
+                    try {
+                        curChangeList[i].onChanged(change);
+                    } catch (Exception e) {
+                        PlatformLogger.getLogger("collections").warning("Exception in ListChangeListenerListener", e);
+                    }
                 }
             } finally {
                 locked = false;
--- a/modules/base/src/main/java/com/sun/javafx/collections/MapListenerHelper.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/modules/base/src/main/java/com/sun/javafx/collections/MapListenerHelper.java	Thu Feb 27 16:56:48 2014 -0800
@@ -28,6 +28,7 @@
 import com.sun.javafx.binding.ExpressionHelperBase;
 import javafx.beans.InvalidationListener;
 import javafx.collections.MapChangeListener;
+import sun.util.logging.PlatformLogger;
 
 import java.util.Arrays;
 
@@ -120,7 +121,11 @@
 
         @Override
         protected void fireValueChangedEvent(MapChangeListener.Change<? extends K, ? extends V> change) {
-            listener.invalidated(change.getMap());
+            try {
+                listener.invalidated(change.getMap());
+            } catch (Exception e) {
+                PlatformLogger.getLogger("collections").warning("Exception in InvalidationListener", e);
+            }
         }
     }
 
@@ -154,7 +159,11 @@
 
         @Override
         protected void fireValueChangedEvent(MapChangeListener.Change<? extends K, ? extends V> change) {
-            listener.onChanged(change);
+            try {
+                listener.onChanged(change);
+            } catch (Exception e) {
+                PlatformLogger.getLogger("collections").warning("Exception in MapChangeListener", e);
+            }
         }
     }
 
@@ -307,10 +316,18 @@
             try {
                 locked = true;
                 for (int i = 0; i < curInvalidationSize; i++) {
-                    curInvalidationList[i].invalidated(change.getMap());
+                    try {
+                        curInvalidationList[i].invalidated(change.getMap());
+                    } catch (Exception e) {
+                        PlatformLogger.getLogger("collections").warning("Exception in InvalidationListener", e);
+                    }
                 }
                 for (int i = 0; i < curChangeSize; i++) {
-                    curChangeList[i].onChanged(change);
+                    try {
+                        curChangeList[i].onChanged(change);
+                    } catch (Exception e) {
+                        PlatformLogger.getLogger("collections").warning("Exception in MapChangeListener", e);
+                    }
                 }
             } finally {
                 locked = false;
--- a/modules/base/src/main/java/com/sun/javafx/collections/ObservableListWrapper.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/modules/base/src/main/java/com/sun/javafx/collections/ObservableListWrapper.java	Thu Feb 27 16:56:48 2014 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2014, 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
@@ -27,6 +27,8 @@
 
 import javafx.collections.ModifiableObservableListBase;
 import com.sun.javafx.collections.NonIterableChange.SimplePermutationChange;
+
+import java.util.BitSet;
 import java.util.Collection;
 import java.util.Comparator;
 import java.util.List;
@@ -168,31 +170,39 @@
     @Override
     public boolean removeAll(Collection<?> c) {
         beginChange();
-        boolean modified = false;
+        BitSet bs = new BitSet(c.size());
         for (int i = 0; i < size(); ++i) {
             if (c.contains(get(i))) {
-                remove(i);
-                --i;
-                modified = true;
+                bs.set(i);
+            }
+        }
+        if (!bs.isEmpty()) {
+            int cur = size();
+            while ((cur = bs.previousSetBit(cur - 1)) >= 0) {
+                remove(cur);
             }
         }
         endChange();
-        return modified;
+        return !bs.isEmpty();
     }
 
     @Override
     public boolean retainAll(Collection<?> c) {
         beginChange();
-        boolean modified = false;
+        BitSet bs = new BitSet(c.size());
         for (int i = 0; i < size(); ++i) {
             if (!c.contains(get(i))) {
-                remove(i);
-                --i;
-                modified = true;
+                bs.set(i);
+            }
+        }
+        if (!bs.isEmpty()) {
+            int cur = size();
+            while ((cur = bs.previousSetBit(cur - 1)) >= 0) {
+                remove(cur);
             }
         }
         endChange();
-        return modified;
+        return !bs.isEmpty();
     }
 
     private SortHelper helper;
--- a/modules/base/src/main/java/com/sun/javafx/collections/SetListenerHelper.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/modules/base/src/main/java/com/sun/javafx/collections/SetListenerHelper.java	Thu Feb 27 16:56:48 2014 -0800
@@ -28,6 +28,7 @@
 import com.sun.javafx.binding.ExpressionHelperBase;
 import javafx.beans.InvalidationListener;
 import javafx.collections.SetChangeListener;
+import sun.util.logging.PlatformLogger;
 
 import java.util.Arrays;
 
@@ -120,7 +121,11 @@
 
         @Override
         protected void fireValueChangedEvent(SetChangeListener.Change<? extends E> change) {
-            listener.invalidated(change.getSet());
+            try {
+                listener.invalidated(change.getSet());
+            } catch (Exception e) {
+                PlatformLogger.getLogger("collections").warning("Exception in InvalidationListener", e);
+            }
         }
     }
 
@@ -154,7 +159,11 @@
 
         @Override
         protected void fireValueChangedEvent(SetChangeListener.Change<? extends E> change) {
-            listener.onChanged(change);
+            try {
+                listener.onChanged(change);
+            } catch (Exception e) {
+                PlatformLogger.getLogger("collections").warning("Exception in SetChangeListener", e);
+            }
         }
     }
 
@@ -307,10 +316,18 @@
             try {
                 locked = true;
                 for (int i = 0; i < curInvalidationSize; i++) {
-                    curInvalidationList[i].invalidated(change.getSet());
+                    try {
+                        curInvalidationList[i].invalidated(change.getSet());
+                    } catch (Exception e) {
+                        PlatformLogger.getLogger("collections").warning("Exception in InvalidationListener", e);
+                    }
                 }
                 for (int i = 0; i < curChangeSize; i++) {
-                    curChangeList[i].onChanged(change);
+                    try {
+                        curChangeList[i].onChanged(change);
+                    } catch (Exception e) {
+                        PlatformLogger.getLogger("collections").warning("Exception in SetChangeListener", e);
+                    }
                 }
             } finally {
                 locked = false;
--- a/modules/base/src/main/java/com/sun/javafx/collections/TrackableObservableList.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/modules/base/src/main/java/com/sun/javafx/collections/TrackableObservableList.java	Thu Feb 27 16:56:48 2014 -0800
@@ -41,12 +41,8 @@
 
     public TrackableObservableList() {
         super(new ArrayList<T>());
-        addListener(new ListChangeListener<T>() {
-
-            @Override
-            public void onChanged(Change<? extends T> c) {
-                TrackableObservableList.this.onChanged((Change<T>)c);
-            }
+        addListener((Change<? extends T> c) -> {
+            TrackableObservableList.this.onChanged((Change<T>)c);
         });
     }
 
--- a/modules/base/src/main/java/com/sun/javafx/collections/UnmodifiableObservableMap.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/modules/base/src/main/java/com/sun/javafx/collections/UnmodifiableObservableMap.java	Thu Feb 27 16:56:48 2014 -0800
@@ -51,11 +51,8 @@
 
     public UnmodifiableObservableMap(ObservableMap<K, V> map) {
         this.backingMap = map;
-        listener = new MapChangeListener<K, V>() {
-            @Override
-            public void onChanged(Change<? extends K,? extends V> c) {
-                callObservers(new MapAdapterChange<K, V>(UnmodifiableObservableMap.this, c));
-            }
+        listener = c -> {
+            callObservers(new MapAdapterChange<K, V>(UnmodifiableObservableMap.this, c));
         };
         this.backingMap.addListener(new WeakMapChangeListener<K, V>(listener));
     }
--- a/modules/base/src/main/java/com/sun/javafx/collections/VetoableListDecorator.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/modules/base/src/main/java/com/sun/javafx/collections/VetoableListDecorator.java	Thu Feb 27 16:56:48 2014 -0800
@@ -46,6 +46,7 @@
     private static interface ModCountAccessor {
         public int get();
         public int incrementAndGet();
+        public int decrementAndGet();
     }
 
     /**
@@ -71,12 +72,9 @@
 
     public VetoableListDecorator(ObservableList<E> decorated) {
         this.list = decorated;
-        this.list.addListener(new ListChangeListener<E>() {
-            @Override
-            public void onChanged(ListChangeListener.Change<? extends E> c) {
-                ListListenerHelper.fireValueChangedEvent(helper, 
-                        new SourceAdapterChange<E>(VetoableListDecorator.this, c));
-            }
+        this.list.addListener((ListChangeListener.Change<? extends E> c) -> {
+            ListListenerHelper.fireValueChangedEvent(helper,
+                    new SourceAdapterChange<E>(VetoableListDecorator.this, c));
         });
     }
 
@@ -113,9 +111,14 @@
     @Override
     public boolean setAll(Collection<? extends E> col) {
         onProposedChange(Collections.unmodifiableList(new ArrayList(col)), 0, size());
-        boolean ret = list.setAll(col);
-        modCount++;
-        return ret;
+        try {
+            modCount++;
+            list.setAll(col);
+            return true;
+        } catch(Exception e) {
+            modCount--;
+            throw e;
+        }
     }
 
     private void removeFromList(List<E> backingList, int offset, Collection<?> col, boolean complement) {
@@ -160,8 +163,12 @@
     @Override
     public void remove(int from, int to) {
         onProposedChange(Collections.<E>emptyList(), from, to);
-        list.remove(from, to);
-        modCount++;
+        try {
+            modCount++;
+            list.remove(from, to);
+        } catch (Exception e) {
+            modCount--;
+        }
     }
 
     @Override
@@ -197,9 +204,14 @@
     @Override
     public boolean add(E e) {
         onProposedChange(Collections.singletonList(e), size(), size());
-        boolean ret = list.add(e);
-        modCount++;
-        return ret;
+        try {
+            modCount++;
+            list.add(e);
+            return true;
+        } catch (Exception ex) {
+            modCount--;
+            throw ex;
+        }
     }
 
     @Override
@@ -220,44 +232,73 @@
     @Override
     public boolean addAll(Collection<? extends E> c) {
         onProposedChange(Collections.unmodifiableList(new ArrayList(c)), size(), size());
-        boolean ret = list.addAll(c);
-        if (ret)
+        try {
             modCount++;
-        return ret;
+            boolean ret = list.addAll(c);
+            if (!ret)
+                modCount--;
+            return ret;
+        } catch (Exception e) {
+            modCount--;
+            throw e;
+        }
     }
 
     @Override
     public boolean addAll(int index, Collection<? extends E> c) {
         onProposedChange(Collections.unmodifiableList(new ArrayList(c)), index, index);
-        boolean ret = list.addAll(index, c);
-        if (ret)
+        try {
             modCount++;
-        return ret;
+            boolean ret = list.addAll(index, c);
+            if (!ret)
+                modCount--;
+            return ret;
+        } catch (Exception e) {
+            modCount--;
+            throw e;
+        }
     }
 
     @Override
     public boolean removeAll(Collection<?> c) {
         removeFromList(this, 0, c, false);
-        boolean ret = list.removeAll(c);
-        if (ret)
+        try {
             modCount++;
-        return ret;
+            boolean ret = list.removeAll(c);
+            if (!ret)
+                modCount--;
+            return ret;
+        } catch (Exception e) {
+            modCount--;
+            throw e;
+        }
     }
 
     @Override
     public boolean retainAll(Collection<?> c) {
         removeFromList(this, 0, c, true);
-        boolean ret = list.retainAll(c);
-        if (ret)
+        try {
             modCount++;
-        return ret;
+            boolean ret = list.retainAll(c);
+            if (!ret)
+                modCount--;
+            return ret;
+        } catch (Exception e) {
+            modCount--;
+            throw e;
+        }
     }
 
     @Override
     public void clear() {
         onProposedChange(Collections.<E>emptyList(), 0, size());
-        list.clear();
-        modCount++;
+        try {
+            modCount++;
+            list.clear();
+        } catch (Exception e) {
+            modCount--;
+            throw e;
+        }
     }
 
     @Override
@@ -274,16 +315,26 @@
     @Override
     public void add(int index, E element) {
         onProposedChange(Collections.singletonList(element), index, index);
-        list.add(index, element);
-        modCount++;
+        try {
+            modCount++;
+            list.add(index, element);
+        } catch (Exception e) {
+            modCount--;
+            throw e;
+        }
     }
 
     @Override
     public E remove(int index) {
         onProposedChange(Collections.<E>emptyList(), index, index + 1);
-        E ret = list.remove(index);
-        modCount++;
-        return ret;
+        try {
+            modCount++;
+            E ret = list.remove(index);
+            return ret;
+        } catch (Exception e) {
+            modCount--;
+            throw e;
+        }
     }
 
     @Override
@@ -293,7 +344,7 @@
 
     @Override
     public int lastIndexOf(Object o) {
-        return lastIndexOf(o);
+        return list.lastIndexOf(o);
     }
 
     @Override
@@ -381,9 +432,14 @@
         public boolean add(E e) {
             checkForComodification();
             onProposedChange(Collections.<E>singletonList(e), offset + size(), offset + size());
-            boolean res =  subList.add(e);
-            incrementModCount();
-            return res;
+            try {
+                incrementModCount();
+                subList.add(e);
+            } catch (Exception ex) {
+                decrementModCount();
+                throw ex;
+            }
+            return true;
         }
 
         @Override
@@ -407,48 +463,77 @@
         public boolean addAll(Collection<? extends E> c) {
             checkForComodification();
             onProposedChange(Collections.unmodifiableList(new ArrayList(c)), offset + size(), offset + size());
-            boolean res =  subList.addAll(c);
-            if (res)
+            try {
                 incrementModCount();
-            return res;
+                boolean res =  subList.addAll(c);
+                if (!res)
+                    decrementModCount();
+                return res;
+            } catch (Exception e) {
+                decrementModCount();
+                throw e;
+            }
         }
 
         @Override
         public boolean addAll(int index, Collection<? extends E> c) {
             checkForComodification();
             onProposedChange(Collections.unmodifiableList(new ArrayList(c)), offset + index, offset + index);
-            boolean res = subList.addAll(index, c);
-            if (res)
+            try {
                 incrementModCount();
-            return res;
+                boolean res = subList.addAll(index, c);
+                if (!res)
+                    decrementModCount();
+                return res;
+            } catch (Exception e) {
+                decrementModCount();
+                throw e;
+            }
         }
 
         @Override
         public boolean removeAll(Collection<?> c) {
             checkForComodification();
             removeFromList(this, offset, c, false);
-            boolean res = subList.removeAll(c);
-            if (res)
+            try {
                 incrementModCount();
-            return res;
+                boolean res = subList.removeAll(c);
+                if (!res)
+                    decrementModCount();
+                return res;
+            } catch (Exception e) {
+                decrementModCount();
+                throw e;
+            }
         }
 
         @Override
         public boolean retainAll(Collection<?> c) {
             checkForComodification();
             removeFromList(this, offset, c, true);
-            boolean res = subList.retainAll(c);
-            if (res)
+            try {
                 incrementModCount();
-            return res;
+                boolean res = subList.retainAll(c);
+                if (!res)
+                    decrementModCount();
+                return res;
+            } catch (Exception e) {
+                decrementModCount();
+                throw e;
+            }
         }
 
         @Override
         public void clear() {
             checkForComodification();
             onProposedChange(Collections.<E>emptyList(), offset, offset + size());
-            subList.clear();
-            incrementModCount();
+            try {
+                incrementModCount();
+                subList.clear();
+            } catch (Exception e) {
+                decrementModCount();
+                throw e;
+            }
         }
 
         @Override
@@ -468,17 +553,27 @@
         public void add(int index, E element) {
             checkForComodification();
             onProposedChange(Collections.singletonList(element), offset + index, offset + index);
-            subList.add(index, element);
-            incrementModCount();
+            try {
+                incrementModCount();
+                subList.add(index, element);
+            } catch (Exception e) {
+                decrementModCount();
+                throw e;
+            }
         }
 
         @Override
         public E remove(int index) {
             checkForComodification();
             onProposedChange(Collections.<E>emptyList(), offset + index, offset + index + 1);
-            E res =  subList.remove(index);
-            incrementModCount();
-            return res;
+            try {
+                incrementModCount();
+                E res =  subList.remove(index);
+                return res;
+            } catch (Exception e) {
+                decrementModCount();
+                throw e;
+            }
 
         }
 
@@ -543,6 +638,10 @@
             modCount = modCountAccessor.incrementAndGet();
         }
 
+        private void decrementModCount() {
+            modCount = modCountAccessor.decrementAndGet();
+        }
+
         private class ModCountAccessorImplSub implements ModCountAccessor{
 
             @Override
@@ -555,6 +654,10 @@
                 return modCount = modCountAccessor.incrementAndGet();
             }
 
+            @Override
+            public int decrementAndGet() {
+                return modCount = modCountAccessor.decrementAndGet();
+            }
         }
     }
 
@@ -595,8 +698,13 @@
                 throw new IllegalStateException();
             }
             onProposedChange(Collections.<E>emptyList(), offset + lastReturned, offset + lastReturned + 1);
-            it.remove();
-            incrementModCount();
+            try {
+                incrementModCount();
+                it.remove();
+            } catch (Exception e) {
+                decrementModCount();
+                throw e;
+            }
             lastReturned = -1;
             --cursor;
         }
@@ -610,6 +718,10 @@
         protected void incrementModCount() {
             modCount = modCountAccessor.incrementAndGet();
         }
+
+        protected void decrementModCount() {
+            modCount = modCountAccessor.decrementAndGet();
+        }
     }
 
     private class VetoableListIteratorDecorator extends VetoableIteratorDecorator implements ListIterator<E> {
@@ -661,8 +773,13 @@
         public void add(E e) {
             checkForComodification();
             onProposedChange(Collections.singletonList(e), offset + cursor, offset + cursor);
-            lit.add(e);
-            incrementModCount();
+            try {
+                incrementModCount();
+                lit.add(e);
+            } catch (Exception ex) {
+                decrementModCount();
+                throw ex;
+            }
             ++cursor;
         }
     }
@@ -681,5 +798,10 @@
         public int incrementAndGet() {
             return ++modCount;
         }
+
+        @Override
+        public int decrementAndGet() {
+            return --modCount;
+        }
     }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/modules/base/src/main/java/com/sun/javafx/logging/JFRInputEvent.java	Thu Feb 27 16:56:48 2014 -0800
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package com.sun.javafx.logging;
+
+import com.oracle.jrockit.jfr.ContentType;
+import com.oracle.jrockit.jfr.EventDefinition;
+import com.oracle.jrockit.jfr.EventToken;
+import com.oracle.jrockit.jfr.TimedEvent;
+import com.oracle.jrockit.jfr.ValueDefinition;
+
+@EventDefinition(path="javafx/input", name = "JavaFX Input", description="JavaFX input event", stacktrace=false, thread=true)
+public class JFRInputEvent extends TimedEvent {
+
+    @ValueDefinition(name="inputType", description="Input event type", contentType=ContentType.None)
+    private String input;
+    
+    public JFRInputEvent(EventToken eventToken) {
+        super(eventToken);
+    }
+
+    public String getInput() {
+        return input;
+    }
+    
+    public void setInput(String s) {
+        input = s;
+    }    
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/modules/base/src/main/java/com/sun/javafx/logging/JFRLogger.java	Thu Feb 27 16:56:48 2014 -0800
@@ -0,0 +1,183 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package com.sun.javafx.logging;
+
+import com.oracle.jrockit.jfr.EventToken;
+import com.oracle.jrockit.jfr.Producer;
+
+/**
+ * Logs pulse related information with Java Flight Recorder.
+ */
+class JFRLogger extends Logger {
+    
+    private static final String PRODUCER_URI = "http://www.oracle.com/technetwork/java/javafx/index.html";
+    private static JFRLogger jfrLogger;
+    
+    private final Producer producer;
+    private final EventToken pulseEventToken;
+    private final EventToken inputEventToken;
+    private final ThreadLocal<JFRPulseEvent> curPhaseEvent;
+    private final ThreadLocal<JFRInputEvent> curInputEvent;
+        
+    private JFRLogger() throws Exception {
+        producer = new Producer("JavaFX producer", "JavaFX producer.", PRODUCER_URI);
+        pulseEventToken = producer.addEvent(JFRPulseEvent.class);
+        inputEventToken = producer.addEvent(JFRInputEvent.class);
+        producer.register();
+        curPhaseEvent = new ThreadLocal() {
+            @Override
+            public JFRPulseEvent initialValue() {
+                return new JFRPulseEvent(pulseEventToken);
+            }
+        };
+        curInputEvent = new ThreadLocal(){
+            @Override
+            public JFRInputEvent initialValue() {
+                return new JFRInputEvent(inputEventToken);
+            }
+        };
+    }
+    
+    public static JFRLogger getInstance() {
+        if (jfrLogger == null) {
+            /* Guards against exceptions in the constructor and the absence of jfr.jar at run time */
+            try {
+                Class klass = Class.forName("com.oracle.jrockit.jfr.FlightRecorder");
+                if (klass != null && com.oracle.jrockit.jfr.FlightRecorder.isActive()) {
+                    jfrLogger = new JFRLogger();
+                }
+            }
+            catch (Exception e) {
+                jfrLogger = null;
+            }
+        }
+        return jfrLogger;
+    }
+    
+    /**
+     *  Pulse number reconstruction for the render thread relies on the current synchronization 
+     *  between the FX and render threads: renderStart() is called on the FX thread after all
+     *  previous RenderJobs have finished and before any new RenderJob is pushed.
+     */
+    private int pulseNumber;
+    private int fxPulseNumber;
+    private int renderPulseNumber;
+    private Thread fxThread;
+    
+    @Override
+    public void pulseStart() {
+        ++pulseNumber;
+        fxPulseNumber = pulseNumber;
+        if (fxThread == null) {
+            fxThread = Thread.currentThread();
+        }
+        newPhase("Pulse start");
+    }
+    
+    @Override
+    public void pulseEnd() {
+        newPhase(null);
+        fxPulseNumber = 0;
+    }
+    
+    @Override
+    public void renderStart() {
+        renderPulseNumber = fxPulseNumber;
+    }
+
+    @Override
+    public void renderEnd() {
+        newPhase(null);
+        renderPulseNumber = 0;
+    }
+    
+    /**
+     * Finishes the current phase and starts a new one if phaseName is not null.
+     * @param phaseName The name for the new phase.
+     */
+    @Override
+    public void newPhase(String phaseName) {
+        if (pulseEventToken == null) {
+            return;
+        }
+        
+        JFRPulseEvent event = curPhaseEvent.get();
+
+        /* Cleanup if recording has finished */
+        if (!pulseEventToken.isEnabled()) {
+            event.setPhase(null);
+            return;
+        }
+        
+        /* Finish the previous phase if any */
+        if (event.getPhase() != null) {
+            event.end();
+            event.commit();
+        }
+
+        /* Done if the new phase name is null */
+        if (phaseName == null) {
+            event.setPhase(null);
+            return;
+        }
+                
+        event.reset();
+        event.begin();
+        event.setPhase(phaseName);
+        event.setPulseNumber(Thread.currentThread() == fxThread ? fxPulseNumber : renderPulseNumber);
+    }
+
+    @Override
+    public void newInput(String input) {
+        if (inputEventToken == null) {
+            return;
+        }
+
+        JFRInputEvent event = curInputEvent.get();
+
+        /* Cleanup if recording has finished */
+        if (!inputEventToken.isEnabled()) {
+            event.setInput(null);
+            return;
+        }
+        
+        /* Finish the previous input event if any */
+        if (event.getInput() != null) {
+            event.end();
+            event.commit();
+        }
+
+        /* Done if the new input is null */
+        if (input == null) {
+            event.setInput(null);
+            return;
+        }
+        
+        event.reset();
+        event.begin();
+        event.setInput(input);
+    }    
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/modules/base/src/main/java/com/sun/javafx/logging/JFRPulseEvent.java	Thu Feb 27 16:56:48 2014 -0800
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package com.sun.javafx.logging;
+
+import com.oracle.jrockit.jfr.ContentType;
+import com.oracle.jrockit.jfr.EventDefinition;
+import com.oracle.jrockit.jfr.EventToken;
+import com.oracle.jrockit.jfr.TimedEvent;
+import com.oracle.jrockit.jfr.ValueDefinition;
+
+@EventDefinition(path="javafx/pulse", name = "JavaFX Pulse Phase", description="Describes a phase in JavaFX pulse processing", stacktrace=false, thread=true)
+public class JFRPulseEvent extends TimedEvent {
+
+    @ValueDefinition(name="pulseID", description="Pulse number", contentType=ContentType.None, relationKey="http://www.oracle.com/javafx/pulse/id")
+    private int pulseNumber;
+
+    @ValueDefinition(name="phaseName", description="Pulse phase name", contentType=ContentType.None)
+    private String phase;
+    
+    public JFRPulseEvent(EventToken eventToken) {
+        super(eventToken);
+    }
+
+    public int getPulseNumber() {
+        return pulseNumber;
+    }
+     
+    public void setPulseNumber(int n) {
+        pulseNumber = n;
+    } 
+    
+    public String getPhase() {
+        return phase;
+    }
+    
+    public void setPhase(String s) {
+        phase = s;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/modules/base/src/main/java/com/sun/javafx/logging/Logger.java	Thu Feb 27 16:56:48 2014 -0800
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package com.sun.javafx.logging;
+
+/**
+ * Common API for pulse loggers
+ */
+public class Logger {
+    public void pulseStart() {}
+    public void pulseEnd() {}
+    public void renderStart() {}
+    public void renderEnd() {}
+    public void addMessage(String message) {}
+    public void incrementCounter(String counter) {}
+    public void newPhase(String name) {}
+    public void newInput(String name) {}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/modules/base/src/main/java/com/sun/javafx/logging/PrintLogger.java	Thu Feb 27 16:56:48 2014 -0800
@@ -0,0 +1,416 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package com.sun.javafx.logging;
+
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * Logs information on a per-pulse basis. When doing performance analysis, a very
+ * easy thing to start with is to run with the PulseLogger enabled, such that various
+ * statistics related to the scene graph and the pulse are recorded and dumped to
+ * the log.
+ * <p>
+ * The pulse logger is designed in such a way as to gather all of the pulse statistics
+ * together even though half of the pulse occurs on the FX thread and half on the
+ * render thread, and therefore two sets of pulse data are being accumulated
+ * concurrently. The {@code pulseStart}, {@code pulseEnd}, {@code renderStart},
+ * and {@code renderEnd} methods must be called appropriately by the runtime
+ * to ensure that the logging system works correctly.
+ */
+class PrintLogger extends Logger {
+
+    /**
+     * A reference to the pulse logger. This will be null if pulse logging
+     * is not enabled.
+     */
+    private static PrintLogger printLogger;
+
+    /**
+     * A time in milliseconds which defines the threshold. If a pulse lasts <em>longer</em> than
+     * the threshold, then it is logged, otherwise an abbreviated representation including
+     * only the time of the pulse is logged.
+     */
+    private static long THRESHOLD = (long)
+            AccessController.doPrivileged((PrivilegedAction<Integer>) () -> Integer.getInteger("javafx.pulseLogger.threshold", 17));
+    
+    /**
+     * Optionally exit after a given number of pulses
+     */
+    private static final int EXIT_ON_PULSE =
+            AccessController.doPrivileged((PrivilegedAction<Integer>) () -> Integer.getInteger("javafx.pulseLogger.exitOnPulse", 0));
+
+    /**
+     * We have a simple counter that keeps track of the current pulse number.
+     * INTER_PULSE_DATA is used to mark data that comes between pulses.
+     */
+    private int pulseCount = 1;
+    private static final int INTER_PULSE_DATA = -1;
+
+    /**
+     * When printing the truncated form of the pulse, we just print one truncated
+     * form after another, such as:
+     * 
+     * [5][2][4]
+     * 
+     * This way we don't cause the console to scroll far vertically in the case of fast
+     * pulses. We do this so that relevant information (pulses that exceed the threshold)
+     * is easy to find and remains visible as long as possible in the console. However,
+     * we don't want to scroll too far off to the right either, so we keep track of
+     * how many "quick pulses" have happened in a row. When we've exceeded some fixed
+     * number (20, say) then we will insert a newline into the log.
+     */
+    private volatile int wrapCount = 0;
+
+    /**
+     * References to PulseData for the FX thread (fxData) and the Render thread (renderData).
+     */
+    private volatile PulseData fxData, renderData;
+
+    /**
+     * Keeps track of the start of the previous pulse, such that we can print out
+     * the time interval between the start of pulses.
+     */
+    private long lastPulseStartTime;
+    
+    class ThreadLocalData {
+        String  phaseName;
+        long    phaseStart;
+    }
+    
+    private Thread fxThread;
+    private final ThreadLocal<ThreadLocalData> phaseData = 
+        new ThreadLocal() {
+            @Override
+            public ThreadLocalData initialValue() {
+                return new ThreadLocalData();
+            }
+        };
+    
+
+    /**
+     * The queue of all PulseData objects, both available and those in use.
+     * New PulseData objects are allocated from head if the state is AVAILABLE.
+     * They are re-linked at tail with the state INCOMPLETE. Once fully processed
+     * they will change their state back to AVAILABLE and will become ready for reuse.
+     */
+    private PulseData head;
+    private PulseData tail;
+    
+    /**
+     * A synchronization object for printing arbitrage.
+     */
+    private AtomicInteger active;
+    
+    /**
+     * PulseData object states
+     */
+    private static final int AVAILABLE = 0;
+    private static final int INCOMPLETE = 1;
+    private static final int COMPLETE = 2;
+    
+    /**
+     * Disallow instantiation.
+     */
+    private PrintLogger() {
+        head = new PulseData();
+        tail = new PulseData();
+        head.next = tail;
+        active = new AtomicInteger(0);
+    }
+
+    public static Logger getInstance() {
+        if (printLogger == null) {
+            boolean enabled = AccessController.doPrivileged((PrivilegedAction<Boolean>) () -> Boolean.getBoolean("javafx.pulseLogger"));
+            if (enabled) {
+                printLogger = new PrintLogger();
+            }
+        }
+        return printLogger;
+    }
+    
+    /**
+     * Allocate and initialize a PulseData object
+     */
+    private PulseData allocate(int n) {
+        PulseData res;
+        if (head != tail && head.state == AVAILABLE) {
+            res = head;
+            head = head.next;
+            res.next = null;
+        }
+        else {
+            res = new PulseData();
+        }
+        tail.next = res;
+        tail = res;
+        res.init(n);        
+        return res;
+    }
+
+    /**
+     * <strong>MUST</strong> be called at the start of every pulse.
+     * This method will initialize the fxData buffer so that subsequent
+     * calls to fxMessage will write to this buffer.
+     */
+    @Override
+    public void pulseStart() {
+        if (fxThread == null) {
+            fxThread = Thread.currentThread();
+        }
+        if (fxData != null) {
+            // Inter pulse data
+            fxData.state = COMPLETE;
+            if (active.incrementAndGet() == 1) {
+                fxData.printAndReset();
+                active.decrementAndGet();
+            }
+        }
+        fxData = allocate(pulseCount++);
+        if (lastPulseStartTime > 0) {
+            fxData.interval = (fxData.startTime - lastPulseStartTime)/1000000L;
+        }
+        lastPulseStartTime = fxData.startTime;
+    }
+
+    /**
+     * <strong>Must</strong> be called before any set of render jobs
+     * for a given pulse begin. This method will initialize the
+     * renderData buffer so that subsequent calls to renderMessage
+     * will write to this buffer. I have found that sometimes renderMessage
+     * is called without a pulse being started. Such cases are exceptional
+     * and appear to happen only at startup, and such cases are simply not
+     * logged.
+     */
+    @Override
+    public void renderStart() {
+        newPhase(null); // finish the current phase on the FX thread
+        fxData.pushedRender = true;
+        renderData = fxData;
+        active.incrementAndGet();
+    }
+
+    /**
+     * <strong>Must</strong> be called at the end of the pulse. If
+     * there was no rendering started during this pulse, then this
+     * method will cause the pulse data to be logged. Otherwise, the
+     * pulse data is logged when rendering is ended. However, as soon
+     * as pulseEnd is called, we are ready for another call to pulseStart.
+     */
+    @Override
+    public void pulseEnd() {
+        if (!fxData.pushedRender) {
+            fxData.state = COMPLETE;
+            if (active.incrementAndGet() == 1) {
+                fxData.printAndReset();
+                active.decrementAndGet();
+            }
+        }
+        fxData = null;
+    }
+
+    /**
+     * <strong>Must</strong> be called at the end of rendering, if a previous
+     * call to {@link #renderStart()} had been made. This will cause the pulse
+     * data to be logged.
+     */
+    @Override
+    public void renderEnd() {
+        newPhase(null); // finish the current phase on the render thread
+        renderData.state = COMPLETE;
+        for (;;) {
+            renderData.printAndReset();
+            if (active.decrementAndGet() == 0) {
+                break;
+            }
+            renderData = renderData.next;
+        }
+        renderData = null;
+    }
+    
+    /**
+     * Adds a message to the log for the pulse.
+     * @param message The message to log. A newline will be added automatically.
+     */
+    @Override
+    public void addMessage(String message) {
+        PulseData pulseData;
+        if (fxThread == null || Thread.currentThread() == fxThread) {
+            if (fxData == null) {
+                fxData = allocate(INTER_PULSE_DATA);
+            }
+            pulseData = fxData;
+        }
+        else {
+            pulseData = renderData;
+        }
+        if (pulseData == null) {
+            return;
+        }
+        pulseData.message
+            .append("T")
+            .append(Thread.currentThread().getId())
+            .append(" : ")
+            .append(message)
+            .append("\n");
+    }
+
+    /**
+     * Increments the given named per-pulse counter.
+     * @param counter The name for the counter.
+     */
+    @Override
+    public void incrementCounter(String counter) {
+        PulseData pulseData;
+        if (fxThread == null || Thread.currentThread() == fxThread) {
+            if (fxData == null) {
+                fxData = allocate(INTER_PULSE_DATA);
+            }
+            pulseData = fxData;
+        }
+        else {
+            pulseData = renderData;
+        }
+        if (pulseData == null) {
+            return;
+        }
+        Map<String,Counter> counters = pulseData.counters;
+        Counter cval = counters.get(counter);
+        if (cval == null) {
+            cval = new Counter();
+            counters.put(counter, cval);
+        }
+        cval.value += 1;
+    }
+    
+    @Override
+    public void newPhase(String name) {
+        long curTime = System.nanoTime();
+
+        ThreadLocalData curPhase = phaseData.get();
+        if (curPhase.phaseName != null) {            
+            PulseData pulseData = Thread.currentThread() == fxThread ? fxData : renderData;
+            if (pulseData != null) {
+                pulseData.message
+                    .append("T")
+                    .append(Thread.currentThread().getId())
+                    .append(" (").append((curPhase.phaseStart-pulseData.startTime)/1000000L)
+                    .append(" +").append((curTime - curPhase.phaseStart)/1000000L).append("ms): ")
+                    .append(curPhase.phaseName)
+                    .append("\n");
+            }
+        }
+        curPhase.phaseName = name;
+        curPhase.phaseStart = curTime;
+    }
+    
+    /**
+     *  A mutable integer to be used in the counter map
+     */
+    private static class Counter {
+        int     value;
+    }
+    
+    /**
+     * The data we collect per pulse. We store the pulse number
+     * associated with this pulse, along with what time it
+     * started at and the interval since the previous pulse.
+     * We also maintain the message buffer and counters.
+     */
+    private final class PulseData {
+        PulseData next;
+        volatile int state = AVAILABLE;
+        long startTime;
+        long interval;
+        int pulseCount;
+        boolean pushedRender;
+        StringBuffer message = new StringBuffer();
+        Map<String,Counter> counters = new ConcurrentHashMap();
+
+        void init(int n) {
+            state = INCOMPLETE;
+            pulseCount = n;
+            startTime = System.nanoTime();
+            interval = 0;
+            pushedRender = false;
+        }
+        
+        void printAndReset() {
+            long endTime = System.nanoTime();
+            long totalTime = (endTime - startTime)/1000000L;
+            
+            if (state != COMPLETE) {
+                System.err.println("\nWARNING: logging incomplete state");
+            }
+            
+            if (totalTime <= THRESHOLD) {
+                // Don't print inter pulse data
+                if (pulseCount != INTER_PULSE_DATA) {
+                    System.err.print((wrapCount++ % 10 == 0 ? "\n[" : "[") + pulseCount+ " " + interval + "ms:" + totalTime + "ms]");
+                }
+            }
+            else {
+                if (pulseCount == INTER_PULSE_DATA) {
+                    System.err.println("\n\nINTER PULSE LOG DATA");                
+                }
+                else {
+                    System.err.print("\n\nPULSE: " + pulseCount +
+                            " [" + interval + "ms:" + totalTime + "ms]");
+                    if (!pushedRender) {
+                        System.err.print(" Required No Rendering");
+                    }
+                    System.err.println();
+                }
+                System.err.print(message);
+                if (!counters.isEmpty()) {
+                    System.err.println("Counters:");
+                    List<Map.Entry<String,Counter>> entries = new ArrayList(counters.entrySet());
+                    Collections.sort(entries, (a, b) -> a.getKey().compareTo(b.getKey()));
+                    for (Map.Entry<String, Counter> entry : entries) {
+                        System.err.println("\t" + entry.getKey() + ": " + entry.getValue().value);
+                    }
+                }
+                wrapCount = 0;
+            }
+            
+            // Reset the state
+            message.setLength(0);
+            counters.clear();
+            state = AVAILABLE;
+            if (EXIT_ON_PULSE > 0 && pulseCount >= EXIT_ON_PULSE) {
+                System.err.println("Exiting after pulse #" + pulseCount);
+                System.exit(0);
+            }
+        }
+    }
+}
--- a/modules/base/src/main/java/com/sun/javafx/logging/PulseLogger.java	Wed Feb 26 08:22:40 2014 -0800
+++ b/modules/base/src/main/java/com/sun/javafx/logging/PulseLogger.java	Thu Feb 27 16:56:48 2014 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2014, 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
@@ -25,438 +25,74 @@
 
 package com.sun.javafx.logging;
 
-import java.security.AccessController;
-import java.security.PrivilegedAction;
 import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
 import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.atomic.AtomicInteger;
 
-/**
- * Logs information on a per-pulse basis. When doing performance analysis, a very
- * easy thing to start with is to run with the PulseLogger enabled, such that various
- * statistics related to the scene graph and the pulse are recorded and dumped to
- * the log.
- * <p>
- * The pulse logger is designed in such a way as to gather all of the pulse statistics
- * together even though half of the pulse occurs on the FX thread and half on the
- * render thread, and therefore two sets of pulse data are being accumulated
- * concurrently. The {@code pulseStart}, {@code pulseEnd}, {@code renderStart},
- * and {@code renderEnd} methods must be called appropriately by the runtime
- * to ensure that the logging system works correctly.
- */
 public class PulseLogger {
-    /**
-     * Specifies whether pulse logging is enabled or not. This is set via
-     * a command line flag and defaults to false.
-     */
-    public static final boolean PULSE_LOGGING_ENABLED =
-            AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
-                @Override public Boolean run() {
-                    return Boolean.getBoolean("javafx.pulseLogger");
-                }
-            });
-
-    /**
-     * A reference to the pulse logger. This will be null if pulse logging
-     * is not enabled.
-     */
-    public static final PulseLogger PULSE_LOGGER = PULSE_LOGGING_ENABLED ? new PulseLogger() : null;
-
-    /**
-     * A time in milliseconds which defines the threshold. If a pulse lasts <em>longer</em> than
-     * the threshold, then it is logged, otherwise an abbreviated representation including
-     * only the time of the pulse is logged.
-     */
-    private static long THRESHOLD = (long)
-            AccessController.doPrivileged(new PrivilegedAction<Integer>() {
-                @Override public Integer run() {
-                    return Integer.getInteger("javafx.pulseLogger.threshold", 17);
-                }
-            });
-
-    /**
-     * Optionally exit after a given number of pulses
-     */
-    private static final int EXIT_ON_PULSE =
-            AccessController.doPrivileged(new PrivilegedAction<Integer>() {
-                @Override
-                public Integer run() {
-                    return Integer.getInteger("javafx.pulseLogger.exitOnPulse", 0);
-                }
-            });
-
-    /**
-     * We have a simple counter that keeps track of the current pulse number.
-     * INTER_PULSE_DATA is used to mark data that comes between pulses.
-     */
-    private int pulseCount = 1;
-    private static final int INTER_PULSE_DATA = -1;
-
-    /**
-     * When printing the truncated form of the pulse, we just print one truncated
-     * form after another, such as:
-     * 
-     * [5][2][4]
-     * 
-     * This way we don't cause the console to scroll far vertically in the case of fast
-     * pulses. We do this so that relevant information (pulses that exceed the threshold)
-     * is easy to find and remains visible as long as possible in the console. However,
-     * we don't want to scroll too far off to the right either, so we keep track of
-     * how many "quick pulses" have happened in a row. When we've exceeded some fixed
-     * number (20, say) then we will insert a newline into the log.
-     */
-    private volatile int wrapCount = 0;
-
-    /**
-     * References to PulseData for the FX thread (fxData) and the Render thread (renderData).
-     */
-    private volatile PulseData fxData, renderData;
-
-    /**
-     * Keeps track of the start of the previous pulse, such that we can print out
-     * the time interval between the start of pulses.
-     */
-    private long lastPulseStartTime;
-
-    /**
-     * No logger activity is expected outside the renderStart..renderEnd interval.
-     * This flag is for notification when that assumption is broken.
-     */
-    private boolean nullRenderFlag = false;
-
-    /**
-     * The queue of all PulseData objects, both available and those in use.
-     * New PulseData objects are allocated from head if the state is AVAILABLE.
-     * They are re-linked at tail with the state INCOMPLETE. Once fully processed
-     * they will change their state back to AVAILABLE and will become ready for reuse.
-     */
-    private PulseData head;
-    private PulseData tail;
     
-    /**
-     * A synchronization object for printing arbitrage.
-     */
-    AtomicInteger active = new AtomicInteger(0);
+    public static final boolean PULSE_LOGGING_ENABLED;
     
-    /**
-     * PulseData object states
-     */
-    private static final int AVAILABLE = 0;
-    private static final int INCOMPLETE = 1;