changeset 9220:e7c421ff5ba7 8u72-b09

Merge
author kcr
date Fri, 13 Nov 2015 09:49:50 -0800
parents ed86b1b4428d 0038d3a0a1a3
children 28b84ad4cc20 d024f271ff52
files .hgtags build.properties modules/media/src/main/native/jfxmedia/platform/osx/avf/AVFMediaPlayer.mm
diffstat 86 files changed, 1342 insertions(+), 1983 deletions(-) [+]
line wrap: on
line diff
--- a/.hgtags	Thu Nov 12 16:58:55 2015 -0800
+++ b/.hgtags	Fri Nov 13 09:49:50 2015 -0800
@@ -298,7 +298,10 @@
 197ed97d436ff0728694bea3e89daaa07dadc802 8u65-b06
 9427774c05027b9e43ecccb9ddc80e60a364fd28 8u60-b25
 7241d695f6a0f597df84215fa0323e026b37f5dd 8u66-b02
+532d08adb49e3d3eee9d3a0f42dc06903701b939 8u72-b01
+ccf27da308f7fdd4e8cc9c095e8d00a990f45e83 8u72-b02
 4b2c709991958e16b9d11a493e758d21e11f6304 8u65-b07
+a5823b07dc4f156632054d41839b24832dfe90e6 8u72-b03
 2fd8439a480bec3d0def62db0dc98406b11973f1 8u66-b07
 c15532b4551db397b666f358ee8585692007181b 8u60-b26
 4a01ca9673fbdda59508a883b9a9751beb6f0f05 8u66-b08
@@ -324,9 +327,14 @@
 e44cb6f3207cb44b44381124a2f88302f157e426 8u65-b16
 e199adc2d3ccb0bc3239fe651935c8a0798be282 8u66-b17
 0b343c5df884940fce2a93295be06e841e2a8e8a 8u65-b17
+150adff1e78b7b3541e0791a332a444f1cbf606c 8u72-b04
+6182fa11d50c1ef8d6943610f694949d9fec84c1 8u72-b05
 4c364c0c7dc319b1737bf59263ea29a79b06564d 8u71-b03
 34c11afb67591f03c65427c120c130aab58cd15b 8u71-b04
 086b3600fb84aba882798a03cd1b53d3c630f768 8u71-b05
 d73f2c5e6e2d5bce4b95b5e9b888b4a6a3062246 8u71-b06
+79be18ed9ffede38984e430cceda7dd59c079cb9 8u72-b06
 2dbb3acf2fc35dafd332eb2ef9c0f7099f1b03c7 8u71-b07
+69be468990729ea993ad3f54cd81bb53ae3de8e5 8u72-b07
 42cb4f996c271b23d59b6813a8ad1864a8bed12b 8u71-b08
+4b4340fe8b9103993511d1e30064d7097a92b39c 8u72-b08
--- a/build.properties	Thu Nov 12 16:58:55 2015 -0800
+++ b/build.properties	Fri Nov 13 09:49:50 2015 -0800
@@ -33,10 +33,10 @@
 jfx.release.milestone=fcs
 # Note: For fcs builds the suffix should be blank
 jfx.release.suffix=
-jfx.release.name=8u71
+jfx.release.name=8u72
 jfx.release.major.version=8
 jfx.release.minor.version=0
-jfx.release.micro.version=71
+jfx.release.micro.version=72
 
 ##############################################################################
 #
--- a/modules/base/src/main/java/javafx/beans/property/ReadOnlyBooleanWrapper.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/base/src/main/java/javafx/beans/property/ReadOnlyBooleanWrapper.java	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, 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,11 +25,6 @@
 
 package javafx.beans.property;
 
-import javafx.beans.InvalidationListener;
-import javafx.beans.value.ChangeListener;
-
-import com.sun.javafx.binding.ExpressionHelper;
-
 /**
  * This class provides a convenient class to define read-only properties. It
  * creates two properties that are synchronized. One property is read-only
@@ -102,82 +97,20 @@
      * {@inheritDoc}
      */
     @Override
-    public void addListener(InvalidationListener listener) {
-        getReadOnlyProperty().addListener(listener);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void removeListener(
-            InvalidationListener listener) {
-        if (readOnlyProperty != null) {
-            readOnlyProperty.removeListener(listener);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void addListener(ChangeListener<? super Boolean> listener) {
-        getReadOnlyProperty().addListener(listener);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void removeListener(ChangeListener<? super Boolean> listener) {
-        if (readOnlyProperty != null) {
-            readOnlyProperty.removeListener(listener);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
     protected void fireValueChangedEvent() {
+        super.fireValueChangedEvent();
         if (readOnlyProperty != null) {
             readOnlyProperty.fireValueChangedEvent();
         }
     }
 
-    private class ReadOnlyPropertyImpl extends ReadOnlyBooleanProperty {
-        
-        private ExpressionHelper<Boolean> helper = null;
-        
+    private class ReadOnlyPropertyImpl extends ReadOnlyBooleanPropertyBase {
+
         @Override
         public boolean get() {
             return ReadOnlyBooleanWrapper.this.get();
         }
 
-        @Override 
-        public void addListener(InvalidationListener listener) {
-            helper = ExpressionHelper.addListener(helper, this, listener);
-        }
-
-        @Override 
-        public void removeListener(InvalidationListener listener) {
-            helper = ExpressionHelper.removeListener(helper, listener);
-        }
-        
-        @Override
-        public void addListener(ChangeListener<? super Boolean> listener) {
-            helper = ExpressionHelper.addListener(helper, this, listener);
-        }
-
-        @Override 
-        public void removeListener(ChangeListener<? super Boolean> listener) {
-            helper = ExpressionHelper.removeListener(helper, listener);
-        }
-        
-        private void fireValueChangedEvent() {
-            ExpressionHelper.fireValueChangedEvent(helper);
-        }
-        
         @Override
         public Object getBean() {
             return ReadOnlyBooleanWrapper.this.getBean();
--- a/modules/base/src/main/java/javafx/beans/property/ReadOnlyDoubleWrapper.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/base/src/main/java/javafx/beans/property/ReadOnlyDoubleWrapper.java	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, 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,11 +25,6 @@
 
 package javafx.beans.property;
 
-import javafx.beans.InvalidationListener;
-import javafx.beans.value.ChangeListener;
-
-import com.sun.javafx.binding.ExpressionHelper;
-
 /**
  * This class provides a convenient class to define read-only properties. It
  * creates two properties that are synchronized. One property is read-only
@@ -102,81 +97,20 @@
      * {@inheritDoc}
      */
     @Override
-    public void addListener(InvalidationListener listener) {
-        getReadOnlyProperty().addListener(listener);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void removeListener(InvalidationListener listener) {
-        if (readOnlyProperty != null) {
-            readOnlyProperty.removeListener(listener);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void addListener(ChangeListener<? super Number> listener) {
-        getReadOnlyProperty().addListener(listener);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void removeListener(ChangeListener<? super Number> listener) {
-        if (readOnlyProperty != null) {
-            readOnlyProperty.removeListener(listener);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
     protected void fireValueChangedEvent() {
+        super.fireValueChangedEvent();
         if (readOnlyProperty != null) {
             readOnlyProperty.fireValueChangedEvent();
         }
     }
 
-    private class ReadOnlyPropertyImpl extends ReadOnlyDoubleProperty {
-        
-        private ExpressionHelper<Number> helper = null;
-        
+    private class ReadOnlyPropertyImpl extends ReadOnlyDoublePropertyBase {
+
         @Override
         public double get() {
             return ReadOnlyDoubleWrapper.this.get();
         }
 
-        @Override 
-        public void addListener(InvalidationListener listener) {
-            helper = ExpressionHelper.addListener(helper, this, listener);
-        }
-
-        @Override 
-        public void removeListener(InvalidationListener listener) {
-            helper = ExpressionHelper.removeListener(helper, listener);
-        }
-        
-        @Override
-        public void addListener(ChangeListener<? super Number> listener) {
-            helper = ExpressionHelper.addListener(helper, this, listener);
-        }
-
-        @Override 
-        public void removeListener(ChangeListener<? super Number> listener) {
-            helper = ExpressionHelper.removeListener(helper, listener);
-        }
-        
-        protected void fireValueChangedEvent() {
-            ExpressionHelper.fireValueChangedEvent(helper);
-        }
-        
         @Override
         public Object getBean() {
             return ReadOnlyDoubleWrapper.this.getBean();
--- a/modules/base/src/main/java/javafx/beans/property/ReadOnlyFloatWrapper.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/base/src/main/java/javafx/beans/property/ReadOnlyFloatWrapper.java	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, 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,11 +25,6 @@
 
 package javafx.beans.property;
 
-import javafx.beans.InvalidationListener;
-import javafx.beans.value.ChangeListener;
-
-import com.sun.javafx.binding.ExpressionHelper;
-
 /**
  * This class provides a convenient class to define read-only properties. It
  * creates two properties that are synchronized. One property is read-only
@@ -101,81 +96,20 @@
      * {@inheritDoc}
      */
     @Override
-    public void addListener(InvalidationListener listener) {
-        getReadOnlyProperty().addListener(listener);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void removeListener(InvalidationListener listener) {
-        if (readOnlyProperty != null) {
-            readOnlyProperty.removeListener(listener);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void addListener(ChangeListener<? super Number> listener) {
-        getReadOnlyProperty().addListener(listener);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void removeListener(ChangeListener<? super Number> listener) {
-        if (readOnlyProperty != null) {
-            readOnlyProperty.removeListener(listener);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
     protected void fireValueChangedEvent() {
+        super.fireValueChangedEvent();
         if (readOnlyProperty != null) {
             readOnlyProperty.fireValueChangedEvent();
         }
     }
 
-    private class ReadOnlyPropertyImpl extends ReadOnlyFloatProperty {
-        
-        private ExpressionHelper<Number> helper = null;
-        
+    private class ReadOnlyPropertyImpl extends ReadOnlyFloatPropertyBase {
+
         @Override
         public float get() {
             return ReadOnlyFloatWrapper.this.get();
         }
 
-        @Override 
-        public void addListener(InvalidationListener listener) {
-            helper = ExpressionHelper.addListener(helper, this, listener);
-        }
-
-        @Override 
-        public void removeListener(InvalidationListener listener) {
-            helper = ExpressionHelper.removeListener(helper, listener);
-        }
-        
-        @Override
-        public void addListener(ChangeListener<? super Number> listener) {
-            helper = ExpressionHelper.addListener(helper, this, listener);
-        }
-
-        @Override 
-        public void removeListener(ChangeListener<? super Number> listener) {
-            helper = ExpressionHelper.removeListener(helper, listener);
-        }
-        
-        protected void fireValueChangedEvent() {
-            ExpressionHelper.fireValueChangedEvent(helper);
-        }
-        
         @Override
         public Object getBean() {
             return ReadOnlyFloatWrapper.this.getBean();
--- a/modules/base/src/main/java/javafx/beans/property/ReadOnlyIntegerWrapper.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/base/src/main/java/javafx/beans/property/ReadOnlyIntegerWrapper.java	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, 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,11 +25,6 @@
 
 package javafx.beans.property;
 
-import javafx.beans.InvalidationListener;
-import javafx.beans.value.ChangeListener;
-
-import com.sun.javafx.binding.ExpressionHelper;
-
 /**
  * This class provides a convenient class to define read-only properties. It
  * creates two properties that are synchronized. One property is read-only
@@ -101,81 +96,20 @@
      * {@inheritDoc}
      */
     @Override
-    public void addListener(InvalidationListener listener) {
-        getReadOnlyProperty().addListener(listener);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void removeListener(InvalidationListener listener) {
-        if (readOnlyProperty != null) {
-            readOnlyProperty.removeListener(listener);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void addListener(ChangeListener<? super Number> listener) {
-        getReadOnlyProperty().addListener(listener);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void removeListener(ChangeListener<? super Number> listener) {
-        if (readOnlyProperty != null) {
-            readOnlyProperty.removeListener(listener);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
     protected void fireValueChangedEvent() {
+        super.fireValueChangedEvent();
         if (readOnlyProperty != null) {
             readOnlyProperty.fireValueChangedEvent();
         }
     }
 
-    private class ReadOnlyPropertyImpl extends ReadOnlyIntegerProperty {
-        
-        private ExpressionHelper<Number> helper = null;
-        
+    private class ReadOnlyPropertyImpl extends ReadOnlyIntegerPropertyBase {
+
         @Override
         public int get() {
             return ReadOnlyIntegerWrapper.this.get();
         }
 
-        @Override 
-        public void addListener(InvalidationListener listener) {
-            helper = ExpressionHelper.addListener(helper, this, listener);
-        }
-
-        @Override 
-        public void removeListener(InvalidationListener listener) {
-            helper = ExpressionHelper.removeListener(helper, listener);
-        }
-        
-        @Override
-        public void addListener(ChangeListener<? super Number> listener) {
-            helper = ExpressionHelper.addListener(helper, this, listener);
-        }
-
-        @Override 
-        public void removeListener(ChangeListener<? super Number> listener) {
-            helper = ExpressionHelper.removeListener(helper, listener);
-        }
-        
-        protected void fireValueChangedEvent() {
-            ExpressionHelper.fireValueChangedEvent(helper);
-        }
-        
         @Override
         public Object getBean() {
             return ReadOnlyIntegerWrapper.this.getBean();
--- a/modules/base/src/main/java/javafx/beans/property/ReadOnlyListWrapper.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/base/src/main/java/javafx/beans/property/ReadOnlyListWrapper.java	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, 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,12 +25,7 @@
 
 package javafx.beans.property;
 
-import com.sun.javafx.binding.ListExpressionHelper;
-import javafx.beans.InvalidationListener;
-import javafx.beans.value.ChangeListener;
-import javafx.collections.ListChangeListener;
 import javafx.collections.ObservableList;
-
 import static javafx.collections.ListChangeListener.Change;
 
 /**
@@ -105,61 +100,8 @@
      * {@inheritDoc}
      */
     @Override
-    public void addListener(InvalidationListener listener) {
-        getReadOnlyProperty().addListener(listener);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void removeListener(InvalidationListener listener) {
-        if (readOnlyProperty != null) {
-            readOnlyProperty.removeListener(listener);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void addListener(ChangeListener<? super ObservableList<E>> listener) {
-        getReadOnlyProperty().addListener(listener);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void removeListener(ChangeListener<? super ObservableList<E>> listener) {
-        if (readOnlyProperty != null) {
-            readOnlyProperty.removeListener(listener);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void addListener(ListChangeListener<? super E> listener) {
-        getReadOnlyProperty().addListener(listener);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void removeListener(ListChangeListener<? super E> listener) {
-        if (readOnlyProperty != null) {
-            readOnlyProperty.removeListener(listener);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
     protected void fireValueChangedEvent() {
+        super.fireValueChangedEvent();
         if (readOnlyProperty != null) {
             readOnlyProperty.fireValueChangedEvent();
         }
@@ -170,14 +112,13 @@
      */
     @Override
     protected void fireValueChangedEvent(Change<? extends E> change) {
+        super.fireValueChangedEvent(change);
         if (readOnlyProperty != null) {
             readOnlyProperty.fireValueChangedEvent(change);
         }
     }
 
-    private class ReadOnlyPropertyImpl extends ReadOnlyListProperty<E> {
-
-        private ListExpressionHelper<E> helper = null;
+    private class ReadOnlyPropertyImpl extends ReadOnlyListPropertyBase<E> {
 
         @Override
         public ObservableList<E> get() {
@@ -185,44 +126,6 @@
         }
 
         @Override
-        public void addListener(InvalidationListener listener) {
-            helper = ListExpressionHelper.addListener(helper, this, listener);
-        }
-
-        @Override
-        public void removeListener(InvalidationListener listener) {
-            helper = ListExpressionHelper.removeListener(helper, listener);
-        }
-
-        @Override
-        public void addListener(ChangeListener<? super ObservableList<E>> listener) {
-            helper = ListExpressionHelper.addListener(helper, this, listener);
-        }
-
-        @Override
-        public void removeListener(ChangeListener<? super ObservableList<E>> listener) {
-            helper = ListExpressionHelper.removeListener(helper, listener);
-        }
-
-        @Override
-        public void addListener(ListChangeListener<? super E> listener) {
-            helper = ListExpressionHelper.addListener(helper, this, listener);
-        }
-
-        @Override
-        public void removeListener(ListChangeListener<? super E> listener) {
-            helper = ListExpressionHelper.removeListener(helper, listener);
-        }
-
-        private void fireValueChangedEvent() {
-            ListExpressionHelper.fireValueChangedEvent(helper);
-        }
-
-        private void fireValueChangedEvent(Change<? extends E> change) {
-            ListExpressionHelper.fireValueChangedEvent(helper, change);
-        }
-
-        @Override
         public Object getBean() {
             return ReadOnlyListWrapper.this.getBean();
         }
--- a/modules/base/src/main/java/javafx/beans/property/ReadOnlyLongWrapper.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/base/src/main/java/javafx/beans/property/ReadOnlyLongWrapper.java	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, 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,11 +25,6 @@
 
 package javafx.beans.property;
 
-import javafx.beans.InvalidationListener;
-import javafx.beans.value.ChangeListener;
-
-import com.sun.javafx.binding.ExpressionHelper;
-
 /**
  * This class provides a convenient class to define read-only properties. It
  * creates two properties that are synchronized. One property is read-only
@@ -101,81 +96,20 @@
      * {@inheritDoc}
      */
     @Override
-    public void addListener(InvalidationListener listener) {
-        getReadOnlyProperty().addListener(listener);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void removeListener(InvalidationListener listener) {
-        if (readOnlyProperty != null) {
-            readOnlyProperty.removeListener(listener);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void addListener(ChangeListener<? super Number> listener) {
-        getReadOnlyProperty().addListener(listener);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void removeListener(ChangeListener<? super Number> listener) {
-        if (readOnlyProperty != null) {
-            readOnlyProperty.removeListener(listener);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
     protected void fireValueChangedEvent() {
+        super.fireValueChangedEvent();
         if (readOnlyProperty != null) {
             readOnlyProperty.fireValueChangedEvent();
         }
     }
 
-    private class ReadOnlyPropertyImpl extends ReadOnlyLongProperty {
-        
-        private ExpressionHelper<Number> helper = null;
-        
+    private class ReadOnlyPropertyImpl extends ReadOnlyLongPropertyBase {
+
         @Override
         public long get() {
             return ReadOnlyLongWrapper.this.get();
         }
 
-        @Override 
-        public void addListener(InvalidationListener listener) {
-            helper = ExpressionHelper.addListener(helper, this, listener);
-        }
-
-        @Override 
-        public void removeListener(InvalidationListener listener) {
-            helper = ExpressionHelper.removeListener(helper, listener);
-        }
-        
-        @Override
-        public void addListener(ChangeListener<? super Number> listener) {
-            helper = ExpressionHelper.addListener(helper, this, listener);
-        }
-
-        @Override 
-        public void removeListener(ChangeListener<? super Number> listener) {
-            helper = ExpressionHelper.removeListener(helper, listener);
-        }
-        
-        protected void fireValueChangedEvent() {
-            ExpressionHelper.fireValueChangedEvent(helper);
-        }
-        
         @Override
         public Object getBean() {
             return ReadOnlyLongWrapper.this.getBean();
--- a/modules/base/src/main/java/javafx/beans/property/ReadOnlyMapWrapper.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/base/src/main/java/javafx/beans/property/ReadOnlyMapWrapper.java	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, 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,12 +25,7 @@
 
 package javafx.beans.property;
 
-import com.sun.javafx.binding.MapExpressionHelper;
-import javafx.beans.InvalidationListener;
-import javafx.beans.value.ChangeListener;
 import javafx.collections.ObservableMap;
-import javafx.collections.MapChangeListener;
-
 import static javafx.collections.MapChangeListener.Change;
 
 /**
@@ -105,61 +100,8 @@
      * {@inheritDoc}
      */
     @Override
-    public void addListener(InvalidationListener listener) {
-        getReadOnlyProperty().addListener(listener);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void removeListener(InvalidationListener listener) {
-        if (readOnlyProperty != null) {
-            readOnlyProperty.removeListener(listener);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void addListener(ChangeListener<? super ObservableMap<K, V>> listener) {
-        getReadOnlyProperty().addListener(listener);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void removeListener(ChangeListener<? super ObservableMap<K, V>> listener) {
-        if (readOnlyProperty != null) {
-            readOnlyProperty.removeListener(listener);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void addListener(MapChangeListener<? super K, ? super V> listener) {
-        getReadOnlyProperty().addListener(listener);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void removeListener(MapChangeListener<? super K, ? super V> listener) {
-        if (readOnlyProperty != null) {
-            readOnlyProperty.removeListener(listener);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
     protected void fireValueChangedEvent() {
+        super.fireValueChangedEvent();
         if (readOnlyProperty != null) {
             readOnlyProperty.fireValueChangedEvent();
         }
@@ -170,14 +112,13 @@
      */
     @Override
     protected void fireValueChangedEvent(Change<? extends K, ? extends V> change) {
+        super.fireValueChangedEvent(change);
         if (readOnlyProperty != null) {
             readOnlyProperty.fireValueChangedEvent(change);
         }
     }
 
-    private class ReadOnlyPropertyImpl extends ReadOnlyMapProperty<K, V> {
-
-        private MapExpressionHelper<K, V> helper = null;
+    private class ReadOnlyPropertyImpl extends ReadOnlyMapPropertyBase<K, V> {
 
         @Override
         public ObservableMap<K, V> get() {
@@ -185,44 +126,6 @@
         }
 
         @Override
-        public void addListener(InvalidationListener listener) {
-            helper = MapExpressionHelper.addListener(helper, this, listener);
-        }
-
-        @Override
-        public void removeListener(InvalidationListener listener) {
-            helper = MapExpressionHelper.removeListener(helper, listener);
-        }
-
-        @Override
-        public void addListener(ChangeListener<? super ObservableMap<K, V>> listener) {
-            helper = MapExpressionHelper.addListener(helper, this, listener);
-        }
-
-        @Override
-        public void removeListener(ChangeListener<? super ObservableMap<K, V>> listener) {
-            helper = MapExpressionHelper.removeListener(helper, listener);
-        }
-
-        @Override
-        public void addListener(MapChangeListener<? super K, ? super V> listener) {
-            helper = MapExpressionHelper.addListener(helper, this, listener);
-        }
-
-        @Override
-        public void removeListener(MapChangeListener<? super K, ? super V> listener) {
-            helper = MapExpressionHelper.removeListener(helper, listener);
-        }
-
-        private void fireValueChangedEvent() {
-            MapExpressionHelper.fireValueChangedEvent(helper);
-        }
-
-        private void fireValueChangedEvent(Change<? extends K, ? extends V> change) {
-            MapExpressionHelper.fireValueChangedEvent(helper, change);
-        }
-
-        @Override
         public Object getBean() {
             return ReadOnlyMapWrapper.this.getBean();
         }
--- a/modules/base/src/main/java/javafx/beans/property/ReadOnlyObjectWrapper.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/base/src/main/java/javafx/beans/property/ReadOnlyObjectWrapper.java	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, 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,11 +25,6 @@
 
 package javafx.beans.property;
 
-import javafx.beans.InvalidationListener;
-import javafx.beans.value.ChangeListener;
-
-import com.sun.javafx.binding.ExpressionHelper;
-
 /**
  * This class provides a convenient class to define read-only properties. It
  * creates two properties that are synchronized. One property is read-only
@@ -101,81 +96,20 @@
      * {@inheritDoc}
      */
     @Override
-    public void addListener(InvalidationListener listener) {
-        getReadOnlyProperty().addListener(listener);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void removeListener(InvalidationListener listener) {
-        if (readOnlyProperty != null) {
-            readOnlyProperty.removeListener(listener);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void addListener(ChangeListener<? super T> listener) {
-        getReadOnlyProperty().addListener(listener);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void removeListener(ChangeListener<? super T> listener) {
-        if (readOnlyProperty != null) {
-            readOnlyProperty.removeListener(listener);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
     protected void fireValueChangedEvent() {
+        super.fireValueChangedEvent();
         if (readOnlyProperty != null) {
             readOnlyProperty.fireValueChangedEvent();
         }
     }
 
-    private class ReadOnlyPropertyImpl extends ReadOnlyObjectProperty<T> {
-        
-        private ExpressionHelper<T> helper = null;
-        
+    private class ReadOnlyPropertyImpl extends ReadOnlyObjectPropertyBase<T> {
+
         @Override
         public T get() {
             return ReadOnlyObjectWrapper.this.get();
         }
 
-        @Override 
-        public void addListener(InvalidationListener listener) {
-            helper = ExpressionHelper.addListener(helper, this, listener);
-        }
-
-        @Override 
-        public void removeListener(InvalidationListener listener) {
-            helper = ExpressionHelper.removeListener(helper, listener);
-        }
-        
-        @Override
-        public void addListener(ChangeListener<? super T> listener) {
-            helper = ExpressionHelper.addListener(helper, this, listener);
-        }
-
-        @Override 
-        public void removeListener(ChangeListener<? super T> listener) {
-            helper = ExpressionHelper.removeListener(helper, listener);
-        }
-        
-        protected void fireValueChangedEvent() {
-            ExpressionHelper.fireValueChangedEvent(helper);
-        }
-        
         @Override
         public Object getBean() {
             return ReadOnlyObjectWrapper.this.getBean();
--- a/modules/base/src/main/java/javafx/beans/property/ReadOnlySetWrapper.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/base/src/main/java/javafx/beans/property/ReadOnlySetWrapper.java	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, 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,12 +25,7 @@
 
 package javafx.beans.property;
 
-import com.sun.javafx.binding.SetExpressionHelper;
-import javafx.beans.InvalidationListener;
-import javafx.beans.value.ChangeListener;
 import javafx.collections.ObservableSet;
-import javafx.collections.SetChangeListener;
-
 import static javafx.collections.SetChangeListener.Change;
 
 /**
@@ -105,61 +100,8 @@
      * {@inheritDoc}
      */
     @Override
-    public void addListener(InvalidationListener listener) {
-        getReadOnlyProperty().addListener(listener);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void removeListener(InvalidationListener listener) {
-        if (readOnlyProperty != null) {
-            readOnlyProperty.removeListener(listener);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void addListener(ChangeListener<? super ObservableSet<E>> listener) {
-        getReadOnlyProperty().addListener(listener);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void removeListener(ChangeListener<? super ObservableSet<E>> listener) {
-        if (readOnlyProperty != null) {
-            readOnlyProperty.removeListener(listener);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void addListener(SetChangeListener<? super E> listener) {
-        getReadOnlyProperty().addListener(listener);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void removeListener(SetChangeListener<? super E> listener) {
-        if (readOnlyProperty != null) {
-            readOnlyProperty.removeListener(listener);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
     protected void fireValueChangedEvent() {
+        super.fireValueChangedEvent();
         if (readOnlyProperty != null) {
             readOnlyProperty.fireValueChangedEvent();
         }
@@ -170,14 +112,13 @@
      */
     @Override
     protected void fireValueChangedEvent(Change<? extends E> change) {
+        super.fireValueChangedEvent(change);
         if (readOnlyProperty != null) {
             readOnlyProperty.fireValueChangedEvent(change);
         }
     }
 
-    private class ReadOnlyPropertyImpl extends ReadOnlySetProperty<E> {
-
-        private SetExpressionHelper<E> helper = null;
+    private class ReadOnlyPropertyImpl extends ReadOnlySetPropertyBase<E> {
 
         @Override
         public ObservableSet<E> get() {
@@ -185,44 +126,6 @@
         }
 
         @Override
-        public void addListener(InvalidationListener listener) {
-            helper = SetExpressionHelper.addListener(helper, this, listener);
-        }
-
-        @Override
-        public void removeListener(InvalidationListener listener) {
-            helper = SetExpressionHelper.removeListener(helper, listener);
-        }
-
-        @Override
-        public void addListener(ChangeListener<? super ObservableSet<E>> listener) {
-            helper = SetExpressionHelper.addListener(helper, this, listener);
-        }
-
-        @Override
-        public void removeListener(ChangeListener<? super ObservableSet<E>> listener) {
-            helper = SetExpressionHelper.removeListener(helper, listener);
-        }
-
-        @Override
-        public void addListener(SetChangeListener<? super E> listener) {
-            helper = SetExpressionHelper.addListener(helper, this, listener);
-        }
-
-        @Override
-        public void removeListener(SetChangeListener<? super E> listener) {
-            helper = SetExpressionHelper.removeListener(helper, listener);
-        }
-
-        private void fireValueChangedEvent() {
-            SetExpressionHelper.fireValueChangedEvent(helper);
-        }
-
-        private void fireValueChangedEvent(Change<? extends E> change) {
-            SetExpressionHelper.fireValueChangedEvent(helper, change);
-        }
-
-        @Override
         public Object getBean() {
             return ReadOnlySetWrapper.this.getBean();
         }
--- a/modules/base/src/main/java/javafx/beans/property/ReadOnlyStringWrapper.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/base/src/main/java/javafx/beans/property/ReadOnlyStringWrapper.java	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, 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,11 +25,6 @@
 
 package javafx.beans.property;
 
-import javafx.beans.InvalidationListener;
-import javafx.beans.value.ChangeListener;
-
-import com.sun.javafx.binding.ExpressionHelper;
-
 /**
  * This class provides a convenient class to define read-only properties. It
  * creates two properties that are synchronized. One property is read-only
@@ -102,82 +97,20 @@
      * {@inheritDoc}
      */
     @Override
-    public void addListener(InvalidationListener listener) {
-        getReadOnlyProperty().addListener(listener);
-        get();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void removeListener(InvalidationListener listener) {
-        if (readOnlyProperty != null) {
-            readOnlyProperty.removeListener(listener);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void addListener(ChangeListener<? super String> listener) {
-        getReadOnlyProperty().addListener(listener);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void removeListener(ChangeListener<? super String> listener) {
-        if (readOnlyProperty != null) {
-            readOnlyProperty.removeListener(listener);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
     protected void fireValueChangedEvent() {
+        super.fireValueChangedEvent();
         if (readOnlyProperty != null) {
             readOnlyProperty.fireValueChangedEvent();
         }
     }
 
-    private class ReadOnlyPropertyImpl extends ReadOnlyStringProperty {
-        
-        private ExpressionHelper<String> helper = null;
+    private class ReadOnlyPropertyImpl extends ReadOnlyStringPropertyBase {
         
         @Override
         public String get() {
             return ReadOnlyStringWrapper.this.get();
         }
 
-        @Override 
-        public void addListener(InvalidationListener listener) {
-            helper = ExpressionHelper.addListener(helper, this, listener);
-        }
-
-        @Override 
-        public void removeListener(InvalidationListener listener) {
-            helper = ExpressionHelper.removeListener(helper, listener);
-        }
-        
-        @Override
-        public void addListener(ChangeListener<? super String> listener) {
-            helper = ExpressionHelper.addListener(helper, this, listener);
-        }
-
-        @Override 
-        public void removeListener(ChangeListener<? super String> listener) {
-            helper = ExpressionHelper.removeListener(helper, listener);
-        }
-        
-        protected void fireValueChangedEvent() {
-            ExpressionHelper.fireValueChangedEvent(helper);
-        }
-        
         @Override
         public Object getBean() {
             return ReadOnlyStringWrapper.this.getBean();
--- a/modules/base/src/test/java/com/sun/javafx/binding/BidirectionalBindingTest.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/base/src/test/java/com/sun/javafx/binding/BidirectionalBindingTest.java	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, 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,10 +25,8 @@
 
 package com.sun.javafx.binding;
 
-import javafx.beans.InvalidationListener;
 import javafx.beans.binding.Bindings;
 import javafx.beans.property.*;
-import javafx.beans.value.ChangeListener;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -36,262 +34,272 @@
 
 import java.util.Arrays;
 import java.util.Collection;
+import javafx.beans.value.ObservableValue;
 
 import static org.junit.Assert.*;
-import org.junit.Rule;
-import org.junit.rules.ExpectedException;
 
 @RunWith(Parameterized.class)
 public class BidirectionalBindingTest<T> {
-	
-    private static final float EPSILON_FLOAT = 1e-5f;
-    private static final double EPSILON_DOUBLE = 1e-10;
 
-    public static interface Functions<S> {
-        PropertyMock<S> create();
-    	void bind(PropertyMock<S> obj1, PropertyMock<S> obj2);
-    	void unbind(PropertyMock<S> obj1, PropertyMock<S> obj2);
-    	BidirectionalBinding createBindingDirectly(PropertyMock<S> op1, PropertyMock<S> op2);
-    	void check(S expected, S actual);
+    @FunctionalInterface
+    public static interface PropertyFactory<T> {
+        Property<T> createProperty();
     }
 
-    private final Functions<T> func;
-    private final T[] v;
-    
-    @Rule
-    public ExpectedException thrown = ExpectedException.none();
+    public static class Factory<T> {
 
-    private PropertyMock<T> op1;
-    private PropertyMock<T> op2;
-    private PropertyMock<T> op3;
-    private PropertyMock<T> op4;
-    
-    public BidirectionalBindingTest(Functions<T> func, T[] v) {
-        this.op1 = func.create();
-        this.op2 = func.create();
-        this.op3 = func.create();
-        this.op4 = func.create();
-        this.func = func;
-        this.v = v;
+        private PropertyFactory<T> propertyFactory;
+        private T[] values;
+        public Factory(PropertyFactory<T> propertyFactory, T[] values) {
+            this.propertyFactory = propertyFactory;
+            this.values = values;
+        }
+        public Property<T> createProperty() {
+            return propertyFactory.createProperty();
+        }
+        public T[] getValues() {
+            return values;
+        }
+    }
+
+    private Factory<T> factory;
+    private Property<T> op1;
+    private Property<T> op2;
+    private Property<T> op3;
+    private Property<T> op4;
+    private T[] v;
+
+    public BidirectionalBindingTest(Factory<T> factory) {
+        this.factory = factory;
     }
 
     @Before
     public void setUp() {
-    	op1.setValue(v[0]);
-    	op2.setValue(v[1]);
+        op1 = factory.createProperty();
+        op2 = factory.createProperty();
+        op3 = factory.createProperty();
+        op4 = factory.createProperty();
+        v = factory.getValues();
+        op1.setValue(v[0]);
+        op2.setValue(v[1]);
     }
-    
+
     @Test
     public void testBind() {
-    	func.bind(op1, op2);
-		System.gc(); // making sure we did not not overdo weak references
-		func.check(v[1], op1.getValue());
-		func.check(v[1], op2.getValue());
-		
-		op1.setValue(v[2]);
-		func.check(v[2], op1.getValue());
-		func.check(v[2], op2.getValue());
-		
-		op2.setValue(v[3]);
-		func.check(v[3], op1.getValue());
-		func.check(v[3], op2.getValue());
+        Bindings.bindBidirectional(op1, op2);
+        Bindings.bindBidirectional(op1, op2);
+        System.gc(); // making sure we did not not overdo weak references
+        assertEquals(v[1], op1.getValue());
+        assertEquals(v[1], op2.getValue());
+
+        op1.setValue(v[2]);
+        assertEquals(v[2], op1.getValue());
+        assertEquals(v[2], op2.getValue());
+
+        op2.setValue(v[3]);
+        assertEquals(v[3], op1.getValue());
+        assertEquals(v[3], op2.getValue());
     }
 
-	@Test
-	public void testUnbind() {
-		// unbind non-existing binding => no-op
-		func.unbind(op1, op2);
-		
-		// unbind properties of different beans
-    	func.bind(op1, op2);
-		System.gc(); // making sure we did not not overdo weak references
-		func.check(v[1], op1.getValue());
-		func.check(v[1], op2.getValue());
-		
-		func.unbind(op1, op2);
-		System.gc();
-		func.check(v[1], op1.getValue());
-		func.check(v[1], op2.getValue());
-		
-		op1.setValue(v[2]);
-		func.check(v[2], op1.getValue());
-		func.check(v[1], op2.getValue());
-		
-		op2.setValue(v[3]);
-		func.check(v[2], op1.getValue());
-		func.check(v[3], op2.getValue());
-	}
-	
-	@Test
-	public void testChaining() {
-		op3.setValue(v[2]);
-		func.bind(op1, op2);
-		func.bind(op2, op3);
-		System.gc(); // making sure we did not not overdo weak references
-		func.check(v[2], op1.getValue());
-		func.check(v[2], op2.getValue());
-		func.check(v[2], op3.getValue());
-		
-		op1.setValue(v[3]);
-		func.check(v[3], op1.getValue());
-		func.check(v[3], op2.getValue());
-		func.check(v[3], op3.getValue());
-		
-		op2.setValue(v[0]);
-		func.check(v[0], op1.getValue());
-		func.check(v[0], op2.getValue());
-		func.check(v[0], op3.getValue());
-		
-		op3.setValue(v[1]);
-		func.check(v[1], op1.getValue());
-		func.check(v[1], op2.getValue());
-		func.check(v[1], op3.getValue());
-		
-		// now unbind 
-		func.unbind(op1, op2);
-		System.gc(); // making sure we did not not overdo weak references
-		func.check(v[1], op1.getValue());
-		func.check(v[1], op2.getValue());
-		func.check(v[1], op3.getValue());
-		
-		op1.setValue(v[2]);
-		func.check(v[2], op1.getValue());
-		func.check(v[1], op2.getValue());
-		func.check(v[1], op3.getValue());
-		
-		op2.setValue(v[3]);
-		func.check(v[2], op1.getValue());
-		func.check(v[3], op2.getValue());
-		func.check(v[3], op3.getValue());
-		
-		op3.setValue(v[0]);
-		func.check(v[2], op1.getValue());
-		func.check(v[0], op2.getValue());
-		func.check(v[0], op3.getValue());
-	}
-	
-	@Test
-	public void testWeakReferencing() {
-		func.bind(op1, op2);
-		assertEquals(1, op1.getListenerCount());
-		assertEquals(1, op2.getListenerCount());
-		
-		op1 = null;
-		System.gc();
-		op2.setValue(v[2]);
-		assertEquals(0, op2.getListenerCount());
-		
-		func.bind(op2, op3);
-		assertEquals(1, op2.getListenerCount());
-        assertEquals(1, op3.getListenerCount());
+    @Test
+    public void testUnbind() {
+        // unbind non-existing binding => no-op
+        Bindings.unbindBidirectional(op1, op2);
 
-		op3 = null;
-		System.gc();
-		op2.setValue(v[0]);
-		assertEquals(0, op2.getListenerCount());
-	}
-	
-	@Test
-	public void testHashCode() {
-		final int hc1 = func.createBindingDirectly(op1, op2).hashCode();
-		final int hc2 = func.createBindingDirectly(op2, op1).hashCode();
-		assertEquals(hc1, hc2);
-	}
-	
-	
-	@Test
-	public void testEquals() {
-		final BidirectionalBinding golden = func.createBindingDirectly(op1, op2);
-		
-		assertTrue(golden.equals(golden));
-		assertFalse(golden.equals(null));
-		assertFalse(golden.equals(op1));
-		assertTrue(golden.equals(func.createBindingDirectly(op1, op2)));
-		assertTrue(golden.equals(func.createBindingDirectly(op2, op1)));
-		assertFalse(golden.equals(func.createBindingDirectly(op1, op3)));
-		assertFalse(golden.equals(func.createBindingDirectly(op3, op1)));
-		assertFalse(golden.equals(func.createBindingDirectly(op3, op2)));
-		assertFalse(golden.equals(func.createBindingDirectly(op2, op3)));
-	}
-	
-	@Test
-	public void testEqualsWithGCedProperty() {
-		final BidirectionalBinding binding1 = func.createBindingDirectly(op1, op2);
-		final BidirectionalBinding binding2 = func.createBindingDirectly(op1, op2);
-		final BidirectionalBinding binding3 = func.createBindingDirectly(op2, op1);
-		final BidirectionalBinding binding4 = func.createBindingDirectly(op2, op1);
-		op1 = null;
-		System.gc();
+        // unbind properties of different beans
+        Bindings.bindBidirectional(op1, op2);
+        System.gc(); // making sure we did not not overdo weak references
+        assertEquals(v[1], op1.getValue());
+        assertEquals(v[1], op2.getValue());
 
-		assertTrue(binding1.equals(binding1));
-		assertFalse(binding1.equals(binding2));
-		assertFalse(binding1.equals(binding3));
+        Bindings.unbindBidirectional(op1, op2);
+        System.gc();
+        assertEquals(v[1], op1.getValue());
+        assertEquals(v[1], op2.getValue());
 
-		assertTrue(binding3.equals(binding3));
-		assertFalse(binding3.equals(binding1));
-		assertFalse(binding3.equals(binding4));
-	}
-	
-	@Test(expected=NullPointerException.class)
-	public void testBind_Null_X() {
-		func.bind(null, op2);
-	}
+        op1.setValue(v[2]);
+        assertEquals(v[2], op1.getValue());
+        assertEquals(v[1], op2.getValue());
 
-	@Test(expected=NullPointerException.class)
-	public void testBind_X_Null() {
-		func.bind(op1, null);
-	}
+        op2.setValue(v[3]);
+        assertEquals(v[2], op1.getValue());
+        assertEquals(v[3], op2.getValue());
+    }
 
-	@Test(expected=IllegalArgumentException.class)
-	public void testBind_X_Self() {
-		func.bind(op1, op1);
-	}
-	
-	@Test(expected=NullPointerException.class)
-	public void testUnbind_Null_X() {
-		func.unbind(null, op2);
-	}
+    @Test
+    public void testChaining() {
+        op3.setValue(v[2]);
+        Bindings.bindBidirectional(op1, op2);
+        Bindings.bindBidirectional(op2, op3);
+        System.gc(); // making sure we did not not overdo weak references
+        assertEquals(v[2], op1.getValue());
+        assertEquals(v[2], op2.getValue());
+        assertEquals(v[2], op3.getValue());
 
-	@Test(expected=NullPointerException.class)
-	public void testUnbind_X_Null() {
-		func.unbind(op1, null);
-	}
+        op1.setValue(v[3]);
+        assertEquals(v[3], op1.getValue());
+        assertEquals(v[3], op2.getValue());
+        assertEquals(v[3], op3.getValue());
 
-	@Test(expected=IllegalArgumentException.class)
-	public void testUnbind_X_Self() {
-		func.unbind(op1, op1);
-	}
-        
-        @Test
-        public void testBrokenBind() {
-            func.bind(op1, op2);
-            op1.bind(op3);
-            assertEquals(op3.getValue(), op1.getValue());
-            assertEquals(op2.getValue(), op1.getValue());
+        op2.setValue(v[0]);
+        assertEquals(v[0], op1.getValue());
+        assertEquals(v[0], op2.getValue());
+        assertEquals(v[0], op3.getValue());
 
-            op2.setValue(v[2]);
-            assertEquals(op3.getValue(), op1.getValue());
-            assertEquals(op2.getValue(), op1.getValue());
-        }
-        
-        @Test
-        public void testDoubleBrokenBind() {
-            func.bind(op1, op2);
-            op1.bind(op3);
-            op4.setValue(v[0]);
+        op3.setValue(v[1]);
+        assertEquals(v[1], op1.getValue());
+        assertEquals(v[1], op2.getValue());
+        assertEquals(v[1], op3.getValue());
 
-            op2.bind(op4);
-            assertEquals(op4.getValue(), op2.getValue());
-            assertEquals(op3.getValue(), op1.getValue());
-            // Test that bidirectional binding was unbound in this case
-            op3.setValue(v[0]);
-            op4.setValue(v[1]);
-            assertEquals(op4.getValue(), op2.getValue());
-            assertEquals(op3.getValue(), op1.getValue());
-            assertEquals(v[0], op1.getValue());
-            assertEquals(v[1], op2.getValue());
-        }
-        
+        // now unbind
+        Bindings.unbindBidirectional(op1, op2);
+        System.gc(); // making sure we did not not overdo weak references
+        assertEquals(v[1], op1.getValue());
+        assertEquals(v[1], op2.getValue());
+        assertEquals(v[1], op3.getValue());
+
+        op1.setValue(v[2]);
+        assertEquals(v[2], op1.getValue());
+        assertEquals(v[1], op2.getValue());
+        assertEquals(v[1], op3.getValue());
+
+        op2.setValue(v[3]);
+        assertEquals(v[2], op1.getValue());
+        assertEquals(v[3], op2.getValue());
+        assertEquals(v[3], op3.getValue());
+
+        op3.setValue(v[0]);
+        assertEquals(v[2], op1.getValue());
+        assertEquals(v[0], op2.getValue());
+        assertEquals(v[0], op3.getValue());
+    }
+
+    private int getListenerCount(ObservableValue<T> v) {
+        return ExpressionHelperUtility.getChangeListeners(v).size();
+    }
+
+    @Test
+    public void testWeakReferencing() {
+        Bindings.bindBidirectional(op1, op2);
+
+        assertEquals(1, getListenerCount(op1));
+        assertEquals(1, getListenerCount(op2));
+
+        op1 = null;
+        System.gc();
+        op2.setValue(v[2]);
+        assertEquals(0, getListenerCount(op2));
+
+        Bindings.bindBidirectional(op2, op3);
+        assertEquals(1, getListenerCount(op2));
+        assertEquals(1, getListenerCount(op3));
+
+        op3 = null;
+        System.gc();
+        op2.setValue(v[0]);
+        assertEquals(0, getListenerCount(op2));
+    }
+
+    @Test
+    public void testHashCode() {
+        final int hc1 = BidirectionalBinding.bind(op1, op2).hashCode();
+        final int hc2 = BidirectionalBinding.bind(op2, op1).hashCode();
+        assertEquals(hc1, hc2);
+    }
+
+    @Test
+    public void testEquals() {
+        final BidirectionalBinding golden = BidirectionalBinding.bind(op1, op2);
+
+        assertTrue(golden.equals(golden));
+        assertFalse(golden.equals(null));
+        assertFalse(golden.equals(op1));
+        assertTrue(golden.equals(BidirectionalBinding.bind(op1, op2)));
+        assertTrue(golden.equals(BidirectionalBinding.bind(op2, op1)));
+        assertFalse(golden.equals(BidirectionalBinding.bind(op1, op3)));
+        assertFalse(golden.equals(BidirectionalBinding.bind(op3, op1)));
+        assertFalse(golden.equals(BidirectionalBinding.bind(op3, op2)));
+        assertFalse(golden.equals(BidirectionalBinding.bind(op2, op3)));
+    }
+
+    @Test
+    public void testEqualsWithGCedProperty() {
+        final BidirectionalBinding binding1 = BidirectionalBinding.bind(op1, op2);
+        final BidirectionalBinding binding2 = BidirectionalBinding.bind(op1, op2);
+        final BidirectionalBinding binding3 = BidirectionalBinding.bind(op2, op1);
+        final BidirectionalBinding binding4 = BidirectionalBinding.bind(op2, op1);
+        op1 = null;
+        System.gc();
+
+        assertTrue(binding1.equals(binding1));
+        assertFalse(binding1.equals(binding2));
+        assertFalse(binding1.equals(binding3));
+
+        assertTrue(binding3.equals(binding3));
+        assertFalse(binding3.equals(binding1));
+        assertFalse(binding3.equals(binding4));
+    }
+
+    @Test(expected=NullPointerException.class)
+    public void testBind_Null_X() {
+        Bindings.bindBidirectional(null, op2);
+    }
+
+    @Test(expected=NullPointerException.class)
+    public void testBind_X_Null() {
+        Bindings.bindBidirectional(op1, null);
+    }
+
+    @Test(expected=IllegalArgumentException.class)
+    public void testBind_X_Self() {
+        Bindings.bindBidirectional(op1, op1);
+    }
+
+    @Test(expected=NullPointerException.class)
+    public void testUnbind_Null_X() {
+        Bindings.unbindBidirectional(null, op2);
+    }
+
+    @Test(expected=NullPointerException.class)
+    public void testUnbind_X_Null() {
+        Bindings.unbindBidirectional(op1, null);
+    }
+
+    @Test(expected=IllegalArgumentException.class)
+    public void testUnbind_X_Self() {
+        Bindings.unbindBidirectional(op1, op1);
+    }
+
+    @Test
+    public void testBrokenBind() {
+        Bindings.bindBidirectional(op1, op2);
+        op1.bind(op3);
+        assertEquals(op3.getValue(), op1.getValue());
+        assertEquals(op2.getValue(), op1.getValue());
+
+        op2.setValue(v[2]);
+        assertEquals(op3.getValue(), op1.getValue());
+        assertEquals(op2.getValue(), op1.getValue());
+    }
+
+    @Test
+    public void testDoubleBrokenBind() {
+        Bindings.bindBidirectional(op1, op2);
+        op1.bind(op3);
+        op4.setValue(v[0]);
+
+        op2.bind(op4);
+        assertEquals(op4.getValue(), op2.getValue());
+        assertEquals(op3.getValue(), op1.getValue());
+        // Test that bidirectional binding was unbound in this case
+        op3.setValue(v[0]);
+        op4.setValue(v[1]);
+        assertEquals(op4.getValue(), op2.getValue());
+        assertEquals(op3.getValue(), op1.getValue());
+        assertEquals(v[0], op1.getValue());
+        assertEquals(v[1], op2.getValue());
+    }
+
     @Parameterized.Parameters
     public static Collection<Object[]> parameters() {
         final Boolean[] booleanData = new Boolean[] {true, false, true, false};
@@ -303,346 +311,20 @@
         final String[] stringData = new String[] {"A", "B", "C", "D"};
 
         return Arrays.asList(new Object[][] {
-            // boolean
-            {
-                new Functions<Boolean>() {
-                    @Override
-                    public PropertyMock<Boolean> create() {
-                        return new BooleanPropertyMock();
-                    }
-                    @Override
-                    public void bind(PropertyMock<Boolean> op1, PropertyMock<Boolean> op2) {
-                        Bindings.bindBidirectional(op1, op2);
-                    }
-                    @Override
-                    public void unbind(PropertyMock<Boolean> op1, PropertyMock<Boolean> op2) {
-                        Bindings.unbindBidirectional(op1, op2);
-                    }
-                    @Override
-                    public BidirectionalBinding createBindingDirectly(PropertyMock<Boolean> op1, PropertyMock<Boolean> op2) {
-                        return BidirectionalBinding.bind(op1, op2);
-                    }
-                    @Override
-                    public void check(Boolean expected, Boolean actual) {
-                    	assertEquals(expected, actual);
-                    }
-                },
-                booleanData
-            },
-            // double
-            {
-                new Functions<Number>() {
-                    @Override
-                    public PropertyMock<Number> create() {
-                        return new DoublePropertyMock();
-                    }
-                    @Override
-                    public void bind(PropertyMock<Number> op1, PropertyMock<Number> op2) {
-                        Bindings.bindBidirectional(op1, op2);
-                    }
-                    @Override
-                    public void unbind(PropertyMock<Number> op1, PropertyMock<Number> op2) {
-                        Bindings.unbindBidirectional(op1, op2);
-                    }
-                    @Override
-                    public BidirectionalBinding createBindingDirectly(PropertyMock<Number> op1, PropertyMock<Number> op2) {
-                        return BidirectionalBinding.bind(op1, op2);
-                    }
-                    @Override
-                    public void check(Number expected, Number actual) {
-                    	assertEquals(expected.doubleValue(), actual.doubleValue(), EPSILON_DOUBLE);
-                    }
-                },
-                doubleData
-            },
-            // float
-            {
-                new Functions<Number>() {
-                    @Override
-                    public PropertyMock<Number> create() {
-                        return new FloatPropertyMock();
-                    }
-                    @Override
-                    public void bind(PropertyMock<Number> op1, PropertyMock<Number> op2) {
-                        Bindings.bindBidirectional(op1, op2);
-                    }
-                    @Override
-                    public void unbind(PropertyMock<Number> op1, PropertyMock<Number> op2) {
-                        Bindings.unbindBidirectional(op1, op2);
-                    }
-                    @Override
-                    public BidirectionalBinding createBindingDirectly(PropertyMock<Number> op1, PropertyMock<Number> op2) {
-                        return BidirectionalBinding.bind(op1, op2);
-                    }
-                    @Override
-                    public void check(Number expected, Number actual) {
-                    	assertEquals(expected.floatValue(), actual.floatValue(), EPSILON_FLOAT);
-                    }
-                },
-                floatData
-            },
-            // integer
-            {
-                new Functions<Number>() {
-                    @Override
-                    public PropertyMock<Number> create() {
-                        return new IntegerPropertyMock();
-                    }
-                    @Override
-                    public void bind(PropertyMock<Number> op1, PropertyMock<Number> op2) {
-                        Bindings.bindBidirectional(op1, op2);
-                    }
-                    @Override
-                    public void unbind(PropertyMock<Number> op1, PropertyMock<Number> op2) {
-                        Bindings.unbindBidirectional(op1, op2);
-                    }
-                    @Override
-                    public BidirectionalBinding createBindingDirectly(PropertyMock<Number> op1, PropertyMock<Number> op2) {
-                        return BidirectionalBinding.bind(op1, op2);
-                    }
-                    @Override
-                    public void check(Number expected, Number actual) {
-                    	assertEquals(expected.intValue(), actual.intValue());
-                    }
-                },
-                integerData
-            },
-            // long
-            {
-                new Functions<Number>() {
-                    @Override
-                    public PropertyMock<Number> create() {
-                        return new LongPropertyMock();
-                    }
-                    @Override
-                    public void bind(PropertyMock<Number> op1, PropertyMock<Number> op2) {
-                        Bindings.bindBidirectional(op1, op2);
-                    }
-                    @Override
-                    public void unbind(PropertyMock<Number> op1, PropertyMock<Number> op2) {
-                        Bindings.unbindBidirectional(op1, op2);
-                    }
-                    @Override
-                    public BidirectionalBinding createBindingDirectly(PropertyMock<Number> op1, PropertyMock<Number> op2) {
-                        return BidirectionalBinding.bind(op1, op2);
-                    }
-                    @Override
-                    public void check(Number expected, Number actual) {
-                    	assertEquals(expected.longValue(), actual.longValue());
-                    }
-                },
-                longData
-            },
-            // object
-            {
-                new Functions<Object>() {
-                    @Override
-                    public PropertyMock<Object> create() {
-                        return new ObjectPropertyMock<Object>();
-                    }
-					@Override
-                    public void bind(PropertyMock<Object> op1, PropertyMock<Object> op2) {
-                        Bindings.bindBidirectional(op1, op2);
-                    }
-					@Override
-                    public void unbind(PropertyMock<Object> op1, PropertyMock<Object> op2) {
-                        Bindings.unbindBidirectional(op1, op2);
-                    }
-					@Override
-                    public BidirectionalBinding createBindingDirectly(PropertyMock<Object> op1, PropertyMock<Object> op2) {
-                        return BidirectionalBinding.bind(op1, op2);
-                    }
-                    @Override
-                    public void check(Object expected, Object actual) {
-                    	assertEquals(expected, actual);
-                    }
-                },
-                objectData
-            },
-            // string
-            {
-                new Functions<String>() {
-                    @Override
-                    public PropertyMock<String> create() {
-                        return new StringPropertyMock();
-                    }
-                    @Override
-                    public void bind(PropertyMock<String> op1, PropertyMock<String> op2) {
-                        Bindings.bindBidirectional(op1, op2);
-                    }
-                    @Override
-                    public void unbind(PropertyMock<String> op1, PropertyMock<String> op2) {
-                        Bindings.unbindBidirectional(op1, op2);
-                    }
-                    @Override
-                    public BidirectionalBinding createBindingDirectly(PropertyMock<String> op1, PropertyMock<String> op2) {
-                        return BidirectionalBinding.bind(op1, op2);
-                    }
-                    @Override
-                    public void check(String expected, String actual) {
-                    	assertEquals(expected, actual);
-                    }
-                },
-                stringData
-            },
+            { new Factory(() -> new SimpleBooleanProperty(), booleanData) },
+            { new Factory(() -> new SimpleDoubleProperty(), doubleData) },
+            { new Factory(() -> new SimpleFloatProperty(), floatData) },
+            { new Factory(() -> new SimpleIntegerProperty(), integerData) },
+            { new Factory(() -> new SimpleLongProperty(), longData) },
+            { new Factory(() -> new SimpleObjectProperty<>(), objectData) },
+            { new Factory(() -> new SimpleStringProperty(), stringData) },
+            { new Factory(() -> new ReadOnlyBooleanWrapper(), booleanData) },
+            { new Factory(() -> new ReadOnlyDoubleWrapper(), doubleData) },
+            { new Factory(() -> new ReadOnlyFloatWrapper(), floatData) },
+            { new Factory(() -> new ReadOnlyIntegerWrapper(), integerData) },
+            { new Factory(() -> new ReadOnlyLongWrapper(), longData) },
+            { new Factory(() -> new ReadOnlyObjectWrapper<>(), objectData) },
+            { new Factory(() -> new ReadOnlyStringWrapper(), stringData) },
         });
     }
-    
-    private interface PropertyMock<T> extends Property<T> {
-        int getListenerCount();
-    }
-    
-    private static class BooleanPropertyMock extends SimpleBooleanProperty implements PropertyMock<Boolean> {
-        
-        private int listenerCount = 0;
-        
-        @Override
-        public int getListenerCount() {
-            return listenerCount;
-        }
-        
-        @Override 
-        public void addListener(ChangeListener<? super Boolean> listener) {
-            super.addListener(listener);
-            listenerCount++;
-        }
-        
-        @Override 
-        public void removeListener(ChangeListener<? super Boolean> listener) {
-            super.removeListener(listener);
-            listenerCount--;
-        }
-    }
-    
-    private static class DoublePropertyMock extends SimpleDoubleProperty implements PropertyMock<Number> {
-        
-        private int listenerCount = 0;
-        
-        @Override
-        public int getListenerCount() {
-            return listenerCount;
-        }
-        
-        @Override 
-        public void addListener(ChangeListener<? super Number> listener) {
-            super.addListener(listener);
-            listenerCount++;
-        }
-        
-        @Override 
-        public void removeListener(ChangeListener<? super Number> listener) {
-            super.removeListener(listener);
-            listenerCount--;
-        }
-    }
-    
-    private static class FloatPropertyMock extends SimpleFloatProperty implements PropertyMock<Number> {
-        
-        private int listenerCount = 0;
-        
-        @Override
-        public int getListenerCount() {
-            return listenerCount;
-        }
-        
-        @Override 
-        public void addListener(ChangeListener<? super Number> listener) {
-            super.addListener(listener);
-            listenerCount++;
-        }
-        
-        @Override 
-        public void removeListener(ChangeListener<? super Number> listener) {
-            super.removeListener(listener);
-            listenerCount--;
-        }
-    }
-    
-    private static class IntegerPropertyMock extends SimpleIntegerProperty implements PropertyMock<Number> {
-        
-        private int listenerCount = 0;
-        
-        @Override
-        public int getListenerCount() {
-            return listenerCount;
-        }
-        
-        @Override 
-        public void addListener(ChangeListener<? super Number> listener) {
-            super.addListener(listener);
-            listenerCount++;
-        }
-        
-        @Override 
-        public void removeListener(ChangeListener<? super Number> listener) {
-            super.removeListener(listener);
-            listenerCount--;
-        }
-    }
-    
-    private static class LongPropertyMock extends SimpleLongProperty implements PropertyMock<Number> {
-        
-        private int listenerCount = 0;
-        
-        @Override
-        public int getListenerCount() {
-            return listenerCount;
-        }
-        
-        @Override 
-        public void addListener(ChangeListener<? super Number> listener) {
-            super.addListener(listener);
-            listenerCount++;
-        }
-        
-        @Override 
-        public void removeListener(ChangeListener<? super Number> listener) {
-            super.removeListener(listener);
-            listenerCount--;
-        }
-    }
-    
-    private static class ObjectPropertyMock<T> extends SimpleObjectProperty<T> implements PropertyMock<T> {
-        
-        private int listenerCount = 0;
-        
-        @Override
-        public int getListenerCount() {
-            return listenerCount;
-        }
-        
-        @Override
-        public void addListener(ChangeListener<? super T> listener) {
-            super.addListener(listener);
-            listenerCount++;
-        }
-        
-        @Override 
-        public void removeListener(ChangeListener<? super T> listener) {
-            super.removeListener(listener);
-            listenerCount--;
-        }
-    }
-    
-    private static class StringPropertyMock extends SimpleStringProperty implements PropertyMock<String> {
-        
-        private int listenerCount = 0;
-        
-        @Override
-        public int getListenerCount() {
-            return listenerCount;
-        }
-        
-        @Override 
-        public void addListener(ChangeListener<? super String> listener) {
-            super.addListener(listener);
-            listenerCount++;
-        }
-        
-        @Override 
-        public void removeListener(ChangeListener<? super String> listener) {
-            super.removeListener(listener);
-            listenerCount--;
-        }
-    }
 }
--- a/modules/base/src/test/java/javafx/beans/property/ReadOnlyBooleanWrapperTest.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/base/src/test/java/javafx/beans/property/ReadOnlyBooleanWrapperTest.java	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, 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
@@ -155,7 +155,7 @@
 		property.set(VALUE_1);
 		assertEquals(VALUE_1, property.get());
 		property.check(1);
-		internalInvalidationListener.check(readOnlyProperty, 1);
+		internalInvalidationListener.check(property, 1);
 		assertEquals(VALUE_1, readOnlyProperty.get());
 		publicInvalidationListener.check(readOnlyProperty, 1);
 		
@@ -172,7 +172,7 @@
 		property.set(VALUE_1);
 		assertEquals(VALUE_1, property.get());
 		property.check(1);
-		internalInvalidationListener.check(readOnlyProperty, 1);
+		internalInvalidationListener.check(property, 1);
 		assertEquals(VALUE_1, readOnlyProperty.get());
 		publicInvalidationListener.check(readOnlyProperty, 1);
 	}
@@ -185,7 +185,7 @@
 		property.set(VALUE_1);
 		assertEquals(VALUE_1, property.get());
 		property.check(1);
-		internalChangeListener.check(readOnlyProperty, DEFAULT, VALUE_1, 1);
+		internalChangeListener.check(property, DEFAULT, VALUE_1, 1);
 		assertEquals(VALUE_1, readOnlyProperty.get());
 		
 		// set same value again
@@ -200,7 +200,7 @@
 		property.set(VALUE_1);
 		assertEquals(VALUE_1, property.get());
 		property.check(2);
-		internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 2);
+		internalChangeListener.check(property, VALUE_2, VALUE_1, 2);
 		assertEquals(VALUE_1, readOnlyProperty.get());
 	}
 	
@@ -239,7 +239,7 @@
 		property.setValue(VALUE_1);
 		assertEquals(VALUE_1, property.get());
 		property.check(1);
-		internalInvalidationListener.check(readOnlyProperty, 1);
+		internalInvalidationListener.check(property, 1);
 		assertEquals(VALUE_1, readOnlyProperty.get());
 		publicInvalidationListener.check(readOnlyProperty, 1);
 		
@@ -256,7 +256,7 @@
 		property.setValue(VALUE_1);
 		assertEquals(VALUE_1, property.get());
 		property.check(1);
-		internalInvalidationListener.check(readOnlyProperty, 1);
+		internalInvalidationListener.check(property, 1);
 		assertEquals(VALUE_1, readOnlyProperty.get());
 		publicInvalidationListener.check(readOnlyProperty, 1);
 	}
@@ -269,7 +269,7 @@
 		property.setValue(VALUE_1);
 		assertEquals(VALUE_1, property.get());
 		property.check(1);
-		internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 1);
+		internalChangeListener.check(property, VALUE_2, VALUE_1, 1);
 		assertEquals(VALUE_1, readOnlyProperty.get());
 		
 		// set same value again
@@ -284,7 +284,7 @@
 		property.setValue(VALUE_1);
 		assertEquals(VALUE_1, property.get());
 		property.check(2);
-		internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 2);
+		internalChangeListener.check(property, VALUE_2, VALUE_1, 2);
 		assertEquals(VALUE_1, readOnlyProperty.get());
 	}
 	
@@ -331,7 +331,7 @@
 		assertEquals(VALUE_1, property.get());
 		assertTrue(property.isBound());
 		property.check(1);
-		internalInvalidationListener.check(readOnlyProperty, 1);
+		internalInvalidationListener.check(property, 1);
 		assertEquals(VALUE_1, readOnlyProperty.get());
 		publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -339,7 +339,7 @@
 		v.set(VALUE_2);
 		assertEquals(VALUE_2, property.get());
 		property.check(1);
-		internalInvalidationListener.check(readOnlyProperty, 1);
+		internalInvalidationListener.check(property, 1);
 		assertEquals(VALUE_2, readOnlyProperty.get());
 		publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -348,7 +348,7 @@
 		v.set(VALUE_2);
 		assertEquals(VALUE_2, property.get());
 		property.check(1);
-		internalInvalidationListener.check(readOnlyProperty, 1);
+		internalInvalidationListener.check(property, 1);
 		assertEquals(VALUE_2, readOnlyProperty.get());
 		publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -357,7 +357,7 @@
 		v.set(VALUE_1);
 		assertEquals(VALUE_1, property.get());
 		property.check(1);
-		internalInvalidationListener.check(readOnlyProperty, 1);
+		internalInvalidationListener.check(property, 1);
 		assertEquals(VALUE_1, readOnlyProperty.get());
 		publicInvalidationListener.check(readOnlyProperty, 1);
 	}
@@ -371,14 +371,14 @@
 		assertEquals(VALUE_1, property.get());
 		assertTrue(property.isBound());
 		property.check(1);
-		internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 1);
+		internalChangeListener.check(property, VALUE_2, VALUE_1, 1);
 		assertEquals(VALUE_1, readOnlyProperty.get());
 
 		// change binding once
 		v.set(VALUE_2);
 		assertEquals(VALUE_2, property.get());
 		property.check(1);
-		internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 1);
+		internalChangeListener.check(property, VALUE_1, VALUE_2, 1);
 		assertEquals(VALUE_2, readOnlyProperty.get());
 
 		// change binding twice without reading
@@ -386,7 +386,7 @@
 		v.set(VALUE_2);
 		assertEquals(VALUE_2, property.get());
 		property.check(2);
-		internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 2);
+		internalChangeListener.check(property, VALUE_1, VALUE_2, 2);
 		assertEquals(VALUE_2, readOnlyProperty.get());
 
 		// change binding twice to same value
@@ -394,7 +394,7 @@
 		v.set(VALUE_1);
 		assertEquals(VALUE_1, property.get());
 		property.check(2);
-		internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 1);
+		internalChangeListener.check(property, VALUE_2, VALUE_1, 1);
 		assertEquals(VALUE_1, readOnlyProperty.get());
 	}
 	
@@ -443,7 +443,7 @@
 		assertEquals(VALUE_1, property.get());
 		assertTrue(property.isBound());
 		property.check(1);
-		internalInvalidationListener.check(readOnlyProperty, 1);
+		internalInvalidationListener.check(property, 1);
 		assertEquals(VALUE_1, readOnlyProperty.get());
 		publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -451,7 +451,7 @@
 		v.set(VALUE_2);
 		assertEquals(VALUE_2, property.get());
 		property.check(1);
-		internalInvalidationListener.check(readOnlyProperty, 1);
+		internalInvalidationListener.check(property, 1);
 		assertEquals(VALUE_2, readOnlyProperty.get());
 		publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -460,7 +460,7 @@
 		v.set(VALUE_2);
 		assertEquals(VALUE_2, property.get());
 		property.check(1);
-		internalInvalidationListener.check(readOnlyProperty, 1);
+		internalInvalidationListener.check(property, 1);
 		assertEquals(VALUE_2, readOnlyProperty.get());
 		publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -469,7 +469,7 @@
 		v.set(VALUE_1);
 		assertEquals(VALUE_1, property.get());
 		property.check(1);
-		internalInvalidationListener.check(readOnlyProperty, 1);
+		internalInvalidationListener.check(property, 1);
 		assertEquals(VALUE_1, readOnlyProperty.get());
 		publicInvalidationListener.check(readOnlyProperty, 1);
 	}
@@ -483,14 +483,14 @@
 		assertEquals(VALUE_1, property.get());
 		assertTrue(property.isBound());
 		property.check(1);
-		internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 1);
+		internalChangeListener.check(property, VALUE_2, VALUE_1, 1);
 		assertEquals(VALUE_1, readOnlyProperty.get());
 
 		// change binding once
 		v.set(VALUE_2);
 		assertEquals(VALUE_2, property.get());
 		property.check(1);
-		internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 1);
+		internalChangeListener.check(property, VALUE_1, VALUE_2, 1);
 		assertEquals(VALUE_2, readOnlyProperty.get());
 
 		// change binding twice without reading
@@ -498,7 +498,7 @@
 		v.set(VALUE_2);
 		assertEquals(VALUE_2, property.get());
 		property.check(2);
-		internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 2);
+		internalChangeListener.check(property, VALUE_1, VALUE_2, 2);
 		assertEquals(VALUE_2, readOnlyProperty.get());
 
 		// change binding twice to same value
@@ -506,7 +506,7 @@
 		v.set(VALUE_1);
 		assertEquals(VALUE_1, property.get());
 		property.check(2);
-		internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 1);
+		internalChangeListener.check(property, VALUE_2, VALUE_1, 1);
 		assertEquals(VALUE_1, readOnlyProperty.get());
 	}
 
@@ -568,7 +568,7 @@
 		assertEquals(VALUE_2, property.get());
 		assertTrue(property.isBound());
 		property.check(1);
-		internalInvalidationListener.check(readOnlyProperty, 1);
+		internalInvalidationListener.check(property, 1);
 		assertEquals(VALUE_2, readOnlyProperty.get());
 		publicInvalidationListener.check(readOnlyProperty, 1);
 		
@@ -576,7 +576,7 @@
 		v2.set(VALUE_1);
 		assertEquals(VALUE_1, property.get());
 		property.check(1);
-		internalInvalidationListener.check(readOnlyProperty, 1);
+		internalInvalidationListener.check(property, 1);
 		assertEquals(VALUE_1, readOnlyProperty.get());
 		publicInvalidationListener.check(readOnlyProperty, 1);
 		
@@ -623,7 +623,7 @@
 		property.set(VALUE_2);
 		assertEquals(VALUE_2, property.get());
 		property.check(1);
-		internalInvalidationListener.check(readOnlyProperty, 1);
+		internalInvalidationListener.check(property, 1);
 		assertEquals(VALUE_2, readOnlyProperty.get());
 		publicInvalidationListener.check(readOnlyProperty, 1);
 	}
@@ -641,7 +641,7 @@
 		property.addListener(internalListener2);
 		internalListener2.reset();
 		property.set(VALUE_2);
-		internalListener2.check(readOnlyProperty, 1);
+		internalListener2.check(property, 1);
 		
 		// setting the property, checking public
 		property.set(VALUE_1);
@@ -657,7 +657,7 @@
 		v.get();
 		internalListener3.reset();
 		v.set(VALUE_1);
-		internalListener3.check(readOnlyProperty, 1);
+		internalListener3.check(property, 1);
 		
 		// binding the property, checking public
 		property.bind(v);
--- a/modules/base/src/test/java/javafx/beans/property/ReadOnlyDoubleWrapperTest.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/base/src/test/java/javafx/beans/property/ReadOnlyDoubleWrapperTest.java	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, 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
@@ -156,7 +156,7 @@
         property.set(VALUE_1);
         assertEquals(VALUE_1, property.get(), EPSILON);
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get(), EPSILON);
         publicInvalidationListener.check(readOnlyProperty, 1);
         
@@ -173,7 +173,7 @@
         property.set(VALUE_1);
         assertEquals(VALUE_1, property.get(), EPSILON);
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get(), EPSILON);
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -186,7 +186,7 @@
         property.set(VALUE_1);
         assertEquals(VALUE_1, property.get(), EPSILON);
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, DEFAULT, VALUE_1, 1);
+        internalChangeListener.check(property, DEFAULT, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get(), EPSILON);
         
         // set same value again
@@ -201,7 +201,7 @@
         property.set(VALUE_1);
         assertEquals(VALUE_1, property.get(), EPSILON);
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 2);
+        internalChangeListener.check(property, VALUE_2, VALUE_1, 2);
         assertEquals(VALUE_1, readOnlyProperty.get(), EPSILON);
     }
     
@@ -240,7 +240,7 @@
         property.setValue(VALUE_1);
         assertEquals(VALUE_1, property.get(), EPSILON);
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get(), EPSILON);
         publicInvalidationListener.check(readOnlyProperty, 1);
         
@@ -257,7 +257,7 @@
         property.setValue(VALUE_1);
         assertEquals(VALUE_1, property.get(), EPSILON);
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get(), EPSILON);
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -270,7 +270,7 @@
         property.setValue(VALUE_1);
         assertEquals(VALUE_1, property.get(), EPSILON);
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, DEFAULT, VALUE_1, 1);
+        internalChangeListener.check(property, DEFAULT, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get(), EPSILON);
         
         // set same value again
@@ -285,7 +285,7 @@
         property.setValue(VALUE_1);
         assertEquals(VALUE_1, property.get(), EPSILON);
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 2);
+        internalChangeListener.check(property, VALUE_2, VALUE_1, 2);
         assertEquals(VALUE_1, readOnlyProperty.get(), EPSILON);
     }
     
@@ -332,7 +332,7 @@
         assertEquals(VALUE_1, property.get(), EPSILON);
         assertTrue(property.isBound());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get(), EPSILON);
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -340,7 +340,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get(), EPSILON);
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get(), EPSILON);
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -349,7 +349,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get(), EPSILON);
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get(), EPSILON);
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -358,7 +358,7 @@
         v.set(VALUE_1);
         assertEquals(VALUE_1, property.get(), EPSILON);
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get(), EPSILON);
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -372,14 +372,14 @@
         assertEquals(VALUE_1, property.get(), EPSILON);
         assertTrue(property.isBound());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, DEFAULT, VALUE_1, 1);
+        internalChangeListener.check(property, DEFAULT, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get(), EPSILON);
 
         // change binding once
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get(), EPSILON);
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 1);
+        internalChangeListener.check(property, VALUE_1, VALUE_2, 1);
         assertEquals(VALUE_2, readOnlyProperty.get(), EPSILON);
 
         // change binding twice without reading
@@ -387,7 +387,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get(), EPSILON);
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 2);
+        internalChangeListener.check(property, VALUE_1, VALUE_2, 2);
         assertEquals(VALUE_2, readOnlyProperty.get(), EPSILON);
 
         // change binding twice to same value
@@ -395,7 +395,7 @@
         v.set(VALUE_1);
         assertEquals(VALUE_1, property.get(), EPSILON);
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 1);
+        internalChangeListener.check(property, VALUE_2, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get(), EPSILON);
     }
     
@@ -444,7 +444,7 @@
         assertEquals(VALUE_1, property.get(), EPSILON);
         assertTrue(property.isBound());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get(), EPSILON);
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -452,7 +452,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get(), EPSILON);
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get(), EPSILON);
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -461,7 +461,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get(), EPSILON);
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get(), EPSILON);
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -470,7 +470,7 @@
         v.set(VALUE_1);
         assertEquals(VALUE_1, property.get(), EPSILON);
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get(), EPSILON);
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -484,14 +484,14 @@
         assertEquals(VALUE_1, property.get(), EPSILON);
         assertTrue(property.isBound());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, DEFAULT, VALUE_1, 1);
+        internalChangeListener.check(property, DEFAULT, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get(), EPSILON);
 
         // change binding once
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get(), EPSILON);
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 1);
+        internalChangeListener.check(property, VALUE_1, VALUE_2, 1);
         assertEquals(VALUE_2, readOnlyProperty.get(), EPSILON);
 
         // change binding twice without reading
@@ -499,7 +499,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get(), EPSILON);
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 2);
+        internalChangeListener.check(property, VALUE_1, VALUE_2, 2);
         assertEquals(VALUE_2, readOnlyProperty.get(), EPSILON);
 
         // change binding twice to same value
@@ -507,7 +507,7 @@
         v.set(VALUE_1);
         assertEquals(VALUE_1, property.get(), EPSILON);
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 1);
+        internalChangeListener.check(property, VALUE_2, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get(), EPSILON);
     }
 
@@ -569,7 +569,7 @@
         assertEquals(VALUE_2, property.get(), EPSILON);
         assertTrue(property.isBound());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get(), EPSILON);
         publicInvalidationListener.check(readOnlyProperty, 1);
         
@@ -577,7 +577,7 @@
         v2.set(VALUE_1);
         assertEquals(VALUE_1, property.get(), EPSILON);
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get(), EPSILON);
         publicInvalidationListener.check(readOnlyProperty, 1);
         
@@ -624,7 +624,7 @@
         property.set(VALUE_2);
         assertEquals(VALUE_2, property.get(), EPSILON);
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get(), EPSILON);
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -642,7 +642,7 @@
         property.addListener(internalListener2);
         internalListener2.reset();
         property.set(VALUE_2);
-        internalListener2.check(readOnlyProperty, 1);
+        internalListener2.check(property, 1);
         
         // setting the property, checking public
         property.set(VALUE_1);
@@ -658,7 +658,7 @@
         v.get();
         internalListener3.reset();
         v.set(VALUE_1);
-        internalListener3.check(readOnlyProperty, 1);
+        internalListener3.check(property, 1);
         
         // binding the property, checking public
         property.bind(v);
--- a/modules/base/src/test/java/javafx/beans/property/ReadOnlyFloatWrapperTest.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/base/src/test/java/javafx/beans/property/ReadOnlyFloatWrapperTest.java	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, 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
@@ -156,7 +156,7 @@
         property.set(VALUE_1);
         assertEquals(VALUE_1, property.get(), EPSILON);
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get(), EPSILON);
         publicInvalidationListener.check(readOnlyProperty, 1);
         
@@ -173,7 +173,7 @@
         property.set(VALUE_1);
         assertEquals(VALUE_1, property.get(), EPSILON);
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get(), EPSILON);
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -186,7 +186,7 @@
         property.set(VALUE_1);
         assertEquals(VALUE_1, property.get(), EPSILON);
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, DEFAULT, VALUE_1, 1);
+        internalChangeListener.check(property, DEFAULT, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get(), EPSILON);
         
         // set same value again
@@ -201,7 +201,7 @@
         property.set(VALUE_1);
         assertEquals(VALUE_1, property.get(), EPSILON);
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 2);
+        internalChangeListener.check(property, VALUE_2, VALUE_1, 2);
         assertEquals(VALUE_1, readOnlyProperty.get(), EPSILON);
     }
     
@@ -240,7 +240,7 @@
         property.setValue(VALUE_1);
         assertEquals(VALUE_1, property.get(), EPSILON);
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get(), EPSILON);
         publicInvalidationListener.check(readOnlyProperty, 1);
         
@@ -257,7 +257,7 @@
         property.setValue(VALUE_1);
         assertEquals(VALUE_1, property.get(), EPSILON);
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get(), EPSILON);
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -270,7 +270,7 @@
         property.setValue(VALUE_1);
         assertEquals(VALUE_1, property.get(), EPSILON);
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, DEFAULT, VALUE_1, 1);
+        internalChangeListener.check(property, DEFAULT, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get(), EPSILON);
         
         // set same value again
@@ -285,7 +285,7 @@
         property.setValue(VALUE_1);
         assertEquals(VALUE_1, property.get(), EPSILON);
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 2);
+        internalChangeListener.check(property, VALUE_2, VALUE_1, 2);
         assertEquals(VALUE_1, readOnlyProperty.get(), EPSILON);
     }
     
@@ -332,7 +332,7 @@
         assertEquals(VALUE_1, property.get(), EPSILON);
         assertTrue(property.isBound());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get(), EPSILON);
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -340,7 +340,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get(), EPSILON);
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get(), EPSILON);
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -349,7 +349,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get(), EPSILON);
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get(), EPSILON);
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -358,7 +358,7 @@
         v.set(VALUE_1);
         assertEquals(VALUE_1, property.get(), EPSILON);
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get(), EPSILON);
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -372,14 +372,14 @@
         assertEquals(VALUE_1, property.get(), EPSILON);
         assertTrue(property.isBound());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, DEFAULT, VALUE_1, 1);
+        internalChangeListener.check(property, DEFAULT, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get(), EPSILON);
 
         // change binding once
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get(), EPSILON);
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 1);
+        internalChangeListener.check(property, VALUE_1, VALUE_2, 1);
         assertEquals(VALUE_2, readOnlyProperty.get(), EPSILON);
 
         // change binding twice without reading
@@ -387,7 +387,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get(), EPSILON);
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 2);
+        internalChangeListener.check(property, VALUE_1, VALUE_2, 2);
         assertEquals(VALUE_2, readOnlyProperty.get(), EPSILON);
 
         // change binding twice to same value
@@ -395,7 +395,7 @@
         v.set(VALUE_1);
         assertEquals(VALUE_1, property.get(), EPSILON);
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 1);
+        internalChangeListener.check(property, VALUE_2, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get(), EPSILON);
     }
     
@@ -444,7 +444,7 @@
         assertEquals(VALUE_1, property.get(), EPSILON);
         assertTrue(property.isBound());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get(), EPSILON);
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -452,7 +452,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get(), EPSILON);
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get(), EPSILON);
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -461,7 +461,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get(), EPSILON);
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get(), EPSILON);
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -470,7 +470,7 @@
         v.set(VALUE_1);
         assertEquals(VALUE_1, property.get(), EPSILON);
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get(), EPSILON);
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -484,14 +484,14 @@
         assertEquals(VALUE_1, property.get(), EPSILON);
         assertTrue(property.isBound());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, DEFAULT, VALUE_1, 1);
+        internalChangeListener.check(property, DEFAULT, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get(), EPSILON);
 
         // change binding once
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get(), EPSILON);
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 1);
+        internalChangeListener.check(property, VALUE_1, VALUE_2, 1);
         assertEquals(VALUE_2, readOnlyProperty.get(), EPSILON);
 
         // change binding twice without reading
@@ -499,7 +499,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get(), EPSILON);
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 2);
+        internalChangeListener.check(property, VALUE_1, VALUE_2, 2);
         assertEquals(VALUE_2, readOnlyProperty.get(), EPSILON);
 
         // change binding twice to same value
@@ -507,7 +507,7 @@
         v.set(VALUE_1);
         assertEquals(VALUE_1, property.get(), EPSILON);
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 1);
+        internalChangeListener.check(property, VALUE_2, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get(), EPSILON);
     }
 
@@ -569,7 +569,7 @@
         assertEquals(VALUE_2, property.get(), EPSILON);
         assertTrue(property.isBound());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get(), EPSILON);
         publicInvalidationListener.check(readOnlyProperty, 1);
         
@@ -577,7 +577,7 @@
         v2.set(VALUE_1);
         assertEquals(VALUE_1, property.get(), EPSILON);
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get(), EPSILON);
         publicInvalidationListener.check(readOnlyProperty, 1);
         
@@ -624,7 +624,7 @@
         property.set(VALUE_2);
         assertEquals(VALUE_2, property.get(), EPSILON);
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get(), EPSILON);
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -642,7 +642,7 @@
         property.addListener(internalListener2);
         internalListener2.reset();
         property.set(VALUE_2);
-        internalListener2.check(readOnlyProperty, 1);
+        internalListener2.check(property, 1);
         
         // setting the property, checking public
         property.set(VALUE_1);
@@ -658,7 +658,7 @@
         v.get();
         internalListener3.reset();
         v.set(VALUE_1);
-        internalListener3.check(readOnlyProperty, 1);
+        internalListener3.check(property, 1);
         
         // binding the property, checking public
         property.bind(v);
--- a/modules/base/src/test/java/javafx/beans/property/ReadOnlyIntegerWrapperTest.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/base/src/test/java/javafx/beans/property/ReadOnlyIntegerWrapperTest.java	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, 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
@@ -155,7 +155,7 @@
         property.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
         
@@ -172,7 +172,7 @@
         property.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -185,7 +185,7 @@
         property.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, DEFAULT, VALUE_1, 1);
+        internalChangeListener.check(property, DEFAULT, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         
         // set same value again
@@ -200,7 +200,7 @@
         property.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 2);
+        internalChangeListener.check(property, VALUE_2, VALUE_1, 2);
         assertEquals(VALUE_1, readOnlyProperty.get());
     }
     
@@ -239,7 +239,7 @@
         property.setValue(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
         
@@ -256,7 +256,7 @@
         property.setValue(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -269,7 +269,7 @@
         property.setValue(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, DEFAULT, VALUE_1, 1);
+        internalChangeListener.check(property, DEFAULT, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         
         // set same value again
@@ -284,7 +284,7 @@
         property.setValue(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 2);
+        internalChangeListener.check(property, VALUE_2, VALUE_1, 2);
         assertEquals(VALUE_1, readOnlyProperty.get());
     }
     
@@ -331,7 +331,7 @@
         assertEquals(VALUE_1, property.get());
         assertTrue(property.isBound());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -339,7 +339,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -348,7 +348,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -357,7 +357,7 @@
         v.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -371,14 +371,14 @@
         assertEquals(VALUE_1, property.get());
         assertTrue(property.isBound());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, DEFAULT, VALUE_1, 1);
+        internalChangeListener.check(property, DEFAULT, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
 
         // change binding once
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 1);
+        internalChangeListener.check(property, VALUE_1, VALUE_2, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
 
         // change binding twice without reading
@@ -386,7 +386,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 2);
+        internalChangeListener.check(property, VALUE_1, VALUE_2, 2);
         assertEquals(VALUE_2, readOnlyProperty.get());
 
         // change binding twice to same value
@@ -394,7 +394,7 @@
         v.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 1);
+        internalChangeListener.check(property, VALUE_2, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
     }
     
@@ -443,7 +443,7 @@
         assertEquals(VALUE_1, property.get());
         assertTrue(property.isBound());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -451,7 +451,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -460,7 +460,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -469,7 +469,7 @@
         v.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -483,14 +483,14 @@
         assertEquals(VALUE_1, property.get());
         assertTrue(property.isBound());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, DEFAULT, VALUE_1, 1);
+        internalChangeListener.check(property, DEFAULT, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
 
         // change binding once
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 1);
+        internalChangeListener.check(property, VALUE_1, VALUE_2, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
 
         // change binding twice without reading
@@ -498,7 +498,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 2);
+        internalChangeListener.check(property, VALUE_1, VALUE_2, 2);
         assertEquals(VALUE_2, readOnlyProperty.get());
 
         // change binding twice to same value
@@ -506,7 +506,7 @@
         v.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 1);
+        internalChangeListener.check(property, VALUE_2, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
     }
 
@@ -568,7 +568,7 @@
         assertEquals(VALUE_2, property.get());
         assertTrue(property.isBound());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
         
@@ -576,7 +576,7 @@
         v2.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
         
@@ -623,7 +623,7 @@
         property.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -641,7 +641,7 @@
         property.addListener(internalListener2);
         internalListener2.reset();
         property.set(VALUE_2);
-        internalListener2.check(readOnlyProperty, 1);
+        internalListener2.check(property, 1);
         
         // setting the property, checking public
         property.set(VALUE_1);
@@ -657,7 +657,7 @@
         v.get();
         internalListener3.reset();
         v.set(VALUE_1);
-        internalListener3.check(readOnlyProperty, 1);
+        internalListener3.check(property, 1);
         
         // binding the property, checking public
         property.bind(v);
--- a/modules/base/src/test/java/javafx/beans/property/ReadOnlyListWrapperTest.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/base/src/test/java/javafx/beans/property/ReadOnlyListWrapperTest.java	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, 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
@@ -153,7 +153,7 @@
         property.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
         
@@ -170,7 +170,7 @@
         property.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -183,7 +183,7 @@
         property.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, DEFAULT, VALUE_1, 1);
+        internalChangeListener.check(property, DEFAULT, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         
         // set same value again
@@ -198,7 +198,7 @@
         property.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 2);
+        internalChangeListener.check(property, VALUE_2, VALUE_1, 2);
         assertEquals(VALUE_1, readOnlyProperty.get());
     }
     
@@ -237,7 +237,7 @@
         property.setValue(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
         
@@ -254,7 +254,7 @@
         property.setValue(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -267,7 +267,7 @@
         property.setValue(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, DEFAULT, VALUE_1, 1);
+        internalChangeListener.check(property, DEFAULT, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         
         // set same value again
@@ -282,7 +282,7 @@
         property.setValue(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 2);
+        internalChangeListener.check(property, VALUE_2, VALUE_1, 2);
         assertEquals(VALUE_1, readOnlyProperty.get());
     }
     
@@ -329,7 +329,7 @@
         assertEquals(VALUE_1, property.get());
         assertTrue(property.isBound());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -337,7 +337,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -346,7 +346,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -355,7 +355,7 @@
         v.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -369,14 +369,14 @@
         assertEquals(VALUE_1, property.get());
         assertTrue(property.isBound());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, DEFAULT, VALUE_1, 1);
+        internalChangeListener.check(property, DEFAULT, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
 
         // change binding once
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 1);
+        internalChangeListener.check(property, VALUE_1, VALUE_2, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
 
         // change binding twice without reading
@@ -384,7 +384,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 2);
+        internalChangeListener.check(property, VALUE_1, VALUE_2, 2);
         assertEquals(VALUE_2, readOnlyProperty.get());
 
         // change binding twice to same value
@@ -392,7 +392,7 @@
         v.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 1);
+        internalChangeListener.check(property, VALUE_2, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
     }
     
@@ -441,7 +441,7 @@
         assertEquals(VALUE_1, property.get());
         assertTrue(property.isBound());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -449,7 +449,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -458,7 +458,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -467,7 +467,7 @@
         v.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -481,14 +481,14 @@
         assertEquals(VALUE_1, property.get());
         assertTrue(property.isBound());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, DEFAULT, VALUE_1, 1);
+        internalChangeListener.check(property, DEFAULT, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
 
         // change binding once
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 1);
+        internalChangeListener.check(property, VALUE_1, VALUE_2, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
 
         // change binding twice without reading
@@ -496,7 +496,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 2);
+        internalChangeListener.check(property, VALUE_1, VALUE_2, 2);
         assertEquals(VALUE_2, readOnlyProperty.get());
 
         // change binding twice to same value
@@ -504,7 +504,7 @@
         v.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 1);
+        internalChangeListener.check(property, VALUE_2, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
     }
 
@@ -566,7 +566,7 @@
         assertEquals(VALUE_2, property.get());
         assertTrue(property.isBound());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
         
@@ -574,7 +574,7 @@
         v2.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
         
@@ -621,7 +621,7 @@
         property.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -639,7 +639,7 @@
         property.addListener(internalListener2);
         internalListener2.reset();
         property.set(VALUE_2);
-        internalListener2.check(readOnlyProperty, 1);
+        internalListener2.check(property, 1);
         
         // setting the property, checking public
         property.set(VALUE_1);
@@ -655,7 +655,7 @@
         v.get();
         internalListener3.reset();
         v.set(VALUE_1);
-        internalListener3.check(readOnlyProperty, 1);
+        internalListener3.check(property, 1);
         
         // binding the property, checking public
         property.bind(v);
--- a/modules/base/src/test/java/javafx/beans/property/ReadOnlyLongWrapperTest.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/base/src/test/java/javafx/beans/property/ReadOnlyLongWrapperTest.java	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, 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
@@ -155,7 +155,7 @@
         property.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
         
@@ -172,7 +172,7 @@
         property.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -185,7 +185,7 @@
         property.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, DEFAULT, VALUE_1, 1);
+        internalChangeListener.check(property, DEFAULT, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         
         // set same value again
@@ -200,7 +200,7 @@
         property.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 2);
+        internalChangeListener.check(property, VALUE_2, VALUE_1, 2);
         assertEquals(VALUE_1, readOnlyProperty.get());
     }
     
@@ -239,7 +239,7 @@
         property.setValue(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
         
@@ -256,7 +256,7 @@
         property.setValue(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -269,7 +269,7 @@
         property.setValue(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, DEFAULT, VALUE_1, 1);
+        internalChangeListener.check(property, DEFAULT, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         
         // set same value again
@@ -284,7 +284,7 @@
         property.setValue(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 2);
+        internalChangeListener.check(property, VALUE_2, VALUE_1, 2);
         assertEquals(VALUE_1, readOnlyProperty.get());
     }
     
@@ -331,7 +331,7 @@
         assertEquals(VALUE_1, property.get());
         assertTrue(property.isBound());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -339,7 +339,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -348,7 +348,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -357,7 +357,7 @@
         v.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -371,14 +371,14 @@
         assertEquals(VALUE_1, property.get());
         assertTrue(property.isBound());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, DEFAULT, VALUE_1, 1);
+        internalChangeListener.check(property, DEFAULT, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
 
         // change binding once
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 1);
+        internalChangeListener.check(property, VALUE_1, VALUE_2, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
 
         // change binding twice without reading
@@ -386,7 +386,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 2);
+        internalChangeListener.check(property, VALUE_1, VALUE_2, 2);
         assertEquals(VALUE_2, readOnlyProperty.get());
 
         // change binding twice to same value
@@ -394,7 +394,7 @@
         v.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 1);
+        internalChangeListener.check(property, VALUE_2, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
     }
     
@@ -443,7 +443,7 @@
         assertEquals(VALUE_1, property.get());
         assertTrue(property.isBound());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -451,7 +451,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -460,7 +460,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -469,7 +469,7 @@
         v.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -483,14 +483,14 @@
         assertEquals(VALUE_1, property.get());
         assertTrue(property.isBound());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, DEFAULT, VALUE_1, 1);
+        internalChangeListener.check(property, DEFAULT, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
 
         // change binding once
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 1);
+        internalChangeListener.check(property, VALUE_1, VALUE_2, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
 
         // change binding twice without reading
@@ -498,7 +498,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 2);
+        internalChangeListener.check(property, VALUE_1, VALUE_2, 2);
         assertEquals(VALUE_2, readOnlyProperty.get());
 
         // change binding twice to same value
@@ -506,7 +506,7 @@
         v.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 1);
+        internalChangeListener.check(property, VALUE_2, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
     }
 
@@ -568,7 +568,7 @@
         assertEquals(VALUE_2, property.get());
         assertTrue(property.isBound());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
         
@@ -576,7 +576,7 @@
         v2.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
         
@@ -623,7 +623,7 @@
         property.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -641,7 +641,7 @@
         property.addListener(internalListener2);
         internalListener2.reset();
         property.set(VALUE_2);
-        internalListener2.check(readOnlyProperty, 1);
+        internalListener2.check(property, 1);
         
         // setting the property, checking public
         property.set(VALUE_1);
@@ -657,7 +657,7 @@
         v.get();
         internalListener3.reset();
         v.set(VALUE_1);
-        internalListener3.check(readOnlyProperty, 1);
+        internalListener3.check(property, 1);
         
         // binding the property, checking public
         property.bind(v);
--- a/modules/base/src/test/java/javafx/beans/property/ReadOnlyMapWrapperTest.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/base/src/test/java/javafx/beans/property/ReadOnlyMapWrapperTest.java	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, 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
@@ -155,7 +155,7 @@
         property.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
         
@@ -172,7 +172,7 @@
         property.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -185,7 +185,7 @@
         property.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, DEFAULT, VALUE_1, 1);
+        internalChangeListener.check(property, DEFAULT, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         
         // set same value again
@@ -200,7 +200,7 @@
         property.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 2);
+        internalChangeListener.check(property, VALUE_2, VALUE_1, 2);
         assertEquals(VALUE_1, readOnlyProperty.get());
     }
     
@@ -239,7 +239,7 @@
         property.setValue(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
         
@@ -256,7 +256,7 @@
         property.setValue(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -269,7 +269,7 @@
         property.setValue(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, DEFAULT, VALUE_1, 1);
+        internalChangeListener.check(property, DEFAULT, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         
         // set same value again
@@ -284,7 +284,7 @@
         property.setValue(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 2);
+        internalChangeListener.check(property, VALUE_2, VALUE_1, 2);
         assertEquals(VALUE_1, readOnlyProperty.get());
     }
     
@@ -331,7 +331,7 @@
         assertEquals(VALUE_1, property.get());
         assertTrue(property.isBound());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -339,7 +339,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -348,7 +348,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -357,7 +357,7 @@
         v.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -371,14 +371,14 @@
         assertEquals(VALUE_1, property.get());
         assertTrue(property.isBound());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, DEFAULT, VALUE_1, 1);
+        internalChangeListener.check(property, DEFAULT, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
 
         // change binding once
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 1);
+        internalChangeListener.check(property, VALUE_1, VALUE_2, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
 
         // change binding twice without reading
@@ -386,7 +386,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 2);
+        internalChangeListener.check(property, VALUE_1, VALUE_2, 2);
         assertEquals(VALUE_2, readOnlyProperty.get());
 
         // change binding twice to same value
@@ -394,7 +394,7 @@
         v.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 1);
+        internalChangeListener.check(property, VALUE_2, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
     }
     
@@ -443,7 +443,7 @@
         assertEquals(VALUE_1, property.get());
         assertTrue(property.isBound());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -451,7 +451,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -460,7 +460,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -469,7 +469,7 @@
         v.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -483,14 +483,14 @@
         assertEquals(VALUE_1, property.get());
         assertTrue(property.isBound());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, DEFAULT, VALUE_1, 1);
+        internalChangeListener.check(property, DEFAULT, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
 
         // change binding once
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 1);
+        internalChangeListener.check(property, VALUE_1, VALUE_2, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
 
         // change binding twice without reading
@@ -498,7 +498,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 2);
+        internalChangeListener.check(property, VALUE_1, VALUE_2, 2);
         assertEquals(VALUE_2, readOnlyProperty.get());
 
         // change binding twice to same value
@@ -506,7 +506,7 @@
         v.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 1);
+        internalChangeListener.check(property, VALUE_2, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
     }
 
@@ -568,7 +568,7 @@
         assertEquals(VALUE_2, property.get());
         assertTrue(property.isBound());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
         
@@ -576,7 +576,7 @@
         v2.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
         
@@ -623,7 +623,7 @@
         property.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -641,7 +641,7 @@
         property.addListener(internalListener2);
         internalListener2.reset();
         property.set(VALUE_2);
-        internalListener2.check(readOnlyProperty, 1);
+        internalListener2.check(property, 1);
         
         // setting the property, checking public
         property.set(VALUE_1);
@@ -657,7 +657,7 @@
         v.get();
         internalListener3.reset();
         v.set(VALUE_1);
-        internalListener3.check(readOnlyProperty, 1);
+        internalListener3.check(property, 1);
         
         // binding the property, checking public
         property.bind(v);
--- a/modules/base/src/test/java/javafx/beans/property/ReadOnlyObjectWrapperTest.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/base/src/test/java/javafx/beans/property/ReadOnlyObjectWrapperTest.java	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, 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
@@ -154,7 +154,7 @@
         property.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
         
@@ -171,7 +171,7 @@
         property.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -184,7 +184,7 @@
         property.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, DEFAULT, VALUE_1, 1);
+        internalChangeListener.check(property, DEFAULT, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         
         // set same value again
@@ -199,7 +199,7 @@
         property.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 2);
+        internalChangeListener.check(property, VALUE_2, VALUE_1, 2);
         assertEquals(VALUE_1, readOnlyProperty.get());
     }
     
@@ -238,7 +238,7 @@
         property.setValue(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
         
@@ -255,7 +255,7 @@
         property.setValue(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -268,7 +268,7 @@
         property.setValue(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, DEFAULT, VALUE_1, 1);
+        internalChangeListener.check(property, DEFAULT, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         
         // set same value again
@@ -283,7 +283,7 @@
         property.setValue(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 2);
+        internalChangeListener.check(property, VALUE_2, VALUE_1, 2);
         assertEquals(VALUE_1, readOnlyProperty.get());
     }
     
@@ -330,7 +330,7 @@
         assertEquals(VALUE_1, property.get());
         assertTrue(property.isBound());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -338,7 +338,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -347,7 +347,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -356,7 +356,7 @@
         v.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -370,14 +370,14 @@
         assertEquals(VALUE_1, property.get());
         assertTrue(property.isBound());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, DEFAULT, VALUE_1, 1);
+        internalChangeListener.check(property, DEFAULT, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
 
         // change binding once
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 1);
+        internalChangeListener.check(property, VALUE_1, VALUE_2, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
 
         // change binding twice without reading
@@ -385,7 +385,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 2);
+        internalChangeListener.check(property, VALUE_1, VALUE_2, 2);
         assertEquals(VALUE_2, readOnlyProperty.get());
 
         // change binding twice to same value
@@ -393,7 +393,7 @@
         v.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 1);
+        internalChangeListener.check(property, VALUE_2, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
     }
     
@@ -442,7 +442,7 @@
         assertEquals(VALUE_1, property.get());
         assertTrue(property.isBound());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -450,7 +450,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -459,7 +459,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -468,7 +468,7 @@
         v.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -482,14 +482,14 @@
         assertEquals(VALUE_1, property.get());
         assertTrue(property.isBound());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, DEFAULT, VALUE_1, 1);
+        internalChangeListener.check(property, DEFAULT, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
 
         // change binding once
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 1);
+        internalChangeListener.check(property, VALUE_1, VALUE_2, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
 
         // change binding twice without reading
@@ -497,7 +497,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 2);
+        internalChangeListener.check(property, VALUE_1, VALUE_2, 2);
         assertEquals(VALUE_2, readOnlyProperty.get());
 
         // change binding twice to same value
@@ -505,7 +505,7 @@
         v.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 1);
+        internalChangeListener.check(property, VALUE_2, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
     }
 
@@ -567,7 +567,7 @@
         assertEquals(VALUE_2, property.get());
         assertTrue(property.isBound());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
         
@@ -575,7 +575,7 @@
         v2.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
         
@@ -622,7 +622,7 @@
         property.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -640,7 +640,7 @@
         property.addListener(internalListener2);
         internalListener2.reset();
         property.set(VALUE_2);
-        internalListener2.check(readOnlyProperty, 1);
+        internalListener2.check(property, 1);
         
         // setting the property, checking public
         property.set(VALUE_1);
@@ -656,7 +656,7 @@
         v.get();
         internalListener3.reset();
         v.set(VALUE_1);
-        internalListener3.check(readOnlyProperty, 1);
+        internalListener3.check(property, 1);
         
         // binding the property, checking public
         property.bind(v);
--- a/modules/base/src/test/java/javafx/beans/property/ReadOnlySetWrapperTest.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/base/src/test/java/javafx/beans/property/ReadOnlySetWrapperTest.java	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, 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
@@ -153,7 +153,7 @@
         property.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
         
@@ -170,7 +170,7 @@
         property.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -183,7 +183,7 @@
         property.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, DEFAULT, VALUE_1, 1);
+        internalChangeListener.check(property, DEFAULT, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         
         // set same value again
@@ -198,7 +198,7 @@
         property.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 2);
+        internalChangeListener.check(property, VALUE_2, VALUE_1, 2);
         assertEquals(VALUE_1, readOnlyProperty.get());
     }
     
@@ -237,7 +237,7 @@
         property.setValue(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
         
@@ -254,7 +254,7 @@
         property.setValue(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -267,7 +267,7 @@
         property.setValue(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, DEFAULT, VALUE_1, 1);
+        internalChangeListener.check(property, DEFAULT, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         
         // set same value again
@@ -282,7 +282,7 @@
         property.setValue(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 2);
+        internalChangeListener.check(property, VALUE_2, VALUE_1, 2);
         assertEquals(VALUE_1, readOnlyProperty.get());
     }
     
@@ -329,7 +329,7 @@
         assertEquals(VALUE_1, property.get());
         assertTrue(property.isBound());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -337,7 +337,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -346,7 +346,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -355,7 +355,7 @@
         v.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -369,14 +369,14 @@
         assertEquals(VALUE_1, property.get());
         assertTrue(property.isBound());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, DEFAULT, VALUE_1, 1);
+        internalChangeListener.check(property, DEFAULT, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
 
         // change binding once
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 1);
+        internalChangeListener.check(property, VALUE_1, VALUE_2, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
 
         // change binding twice without reading
@@ -384,7 +384,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 2);
+        internalChangeListener.check(property, VALUE_1, VALUE_2, 2);
         assertEquals(VALUE_2, readOnlyProperty.get());
 
         // change binding twice to same value
@@ -392,7 +392,7 @@
         v.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 1);
+        internalChangeListener.check(property, VALUE_2, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
     }
     
@@ -441,7 +441,7 @@
         assertEquals(VALUE_1, property.get());
         assertTrue(property.isBound());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -449,7 +449,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -458,7 +458,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -467,7 +467,7 @@
         v.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -481,14 +481,14 @@
         assertEquals(VALUE_1, property.get());
         assertTrue(property.isBound());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, DEFAULT, VALUE_1, 1);
+        internalChangeListener.check(property, DEFAULT, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
 
         // change binding once
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 1);
+        internalChangeListener.check(property, VALUE_1, VALUE_2, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
 
         // change binding twice without reading
@@ -496,7 +496,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 2);
+        internalChangeListener.check(property, VALUE_1, VALUE_2, 2);
         assertEquals(VALUE_2, readOnlyProperty.get());
 
         // change binding twice to same value
@@ -504,7 +504,7 @@
         v.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 1);
+        internalChangeListener.check(property, VALUE_2, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
     }
 
@@ -566,7 +566,7 @@
         assertEquals(VALUE_2, property.get());
         assertTrue(property.isBound());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
         
@@ -574,7 +574,7 @@
         v2.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
         
@@ -621,7 +621,7 @@
         property.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -639,7 +639,7 @@
         property.addListener(internalListener2);
         internalListener2.reset();
         property.set(VALUE_2);
-        internalListener2.check(readOnlyProperty, 1);
+        internalListener2.check(property, 1);
         
         // setting the property, checking public
         property.set(VALUE_1);
@@ -655,7 +655,7 @@
         v.get();
         internalListener3.reset();
         v.set(VALUE_1);
-        internalListener3.check(readOnlyProperty, 1);
+        internalListener3.check(property, 1);
         
         // binding the property, checking public
         property.bind(v);
--- a/modules/base/src/test/java/javafx/beans/property/ReadOnlyStringWrapperTest.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/base/src/test/java/javafx/beans/property/ReadOnlyStringWrapperTest.java	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, 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
@@ -155,7 +155,7 @@
         property.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
         
@@ -172,7 +172,7 @@
         property.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -185,7 +185,7 @@
         property.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, DEFAULT, VALUE_1, 1);
+        internalChangeListener.check(property, DEFAULT, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         
         // set same value again
@@ -200,7 +200,7 @@
         property.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 2);
+        internalChangeListener.check(property, VALUE_2, VALUE_1, 2);
         assertEquals(VALUE_1, readOnlyProperty.get());
     }
     
@@ -239,7 +239,7 @@
         property.setValue(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
         
@@ -256,7 +256,7 @@
         property.setValue(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -269,7 +269,7 @@
         property.setValue(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, DEFAULT, VALUE_1, 1);
+        internalChangeListener.check(property, DEFAULT, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         
         // set same value again
@@ -284,7 +284,7 @@
         property.setValue(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 2);
+        internalChangeListener.check(property, VALUE_2, VALUE_1, 2);
         assertEquals(VALUE_1, readOnlyProperty.get());
     }
     
@@ -331,7 +331,7 @@
         assertEquals(VALUE_1, property.get());
         assertTrue(property.isBound());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -339,7 +339,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -348,7 +348,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -357,7 +357,7 @@
         v.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -371,14 +371,14 @@
         assertEquals(VALUE_1, property.get());
         assertTrue(property.isBound());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, DEFAULT, VALUE_1, 1);
+        internalChangeListener.check(property, DEFAULT, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
 
         // change binding once
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 1);
+        internalChangeListener.check(property, VALUE_1, VALUE_2, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
 
         // change binding twice without reading
@@ -386,7 +386,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 2);
+        internalChangeListener.check(property, VALUE_1, VALUE_2, 2);
         assertEquals(VALUE_2, readOnlyProperty.get());
 
         // change binding twice to same value
@@ -394,7 +394,7 @@
         v.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 1);
+        internalChangeListener.check(property, VALUE_2, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
     }
     
@@ -443,7 +443,7 @@
         assertEquals(VALUE_1, property.get());
         assertTrue(property.isBound());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -451,7 +451,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -460,7 +460,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
 
@@ -469,7 +469,7 @@
         v.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -483,14 +483,14 @@
         assertEquals(VALUE_1, property.get());
         assertTrue(property.isBound());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, DEFAULT, VALUE_1, 1);
+        internalChangeListener.check(property, DEFAULT, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
 
         // change binding once
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 1);
+        internalChangeListener.check(property, VALUE_1, VALUE_2, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
 
         // change binding twice without reading
@@ -498,7 +498,7 @@
         v.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_1, VALUE_2, 2);
+        internalChangeListener.check(property, VALUE_1, VALUE_2, 2);
         assertEquals(VALUE_2, readOnlyProperty.get());
 
         // change binding twice to same value
@@ -506,7 +506,7 @@
         v.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(2);
-        internalChangeListener.check(readOnlyProperty, VALUE_2, VALUE_1, 1);
+        internalChangeListener.check(property, VALUE_2, VALUE_1, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
     }
 
@@ -568,7 +568,7 @@
         assertEquals(VALUE_2, property.get());
         assertTrue(property.isBound());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
         
@@ -576,7 +576,7 @@
         v2.set(VALUE_1);
         assertEquals(VALUE_1, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_1, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
         
@@ -623,7 +623,7 @@
         property.set(VALUE_2);
         assertEquals(VALUE_2, property.get());
         property.check(1);
-        internalInvalidationListener.check(readOnlyProperty, 1);
+        internalInvalidationListener.check(property, 1);
         assertEquals(VALUE_2, readOnlyProperty.get());
         publicInvalidationListener.check(readOnlyProperty, 1);
     }
@@ -641,7 +641,7 @@
         property.addListener(internalListener2);
         internalListener2.reset();
         property.set(VALUE_2);
-        internalListener2.check(readOnlyProperty, 1);
+        internalListener2.check(property, 1);
         
         // setting the property, checking public
         property.set(VALUE_1);
@@ -657,7 +657,7 @@
         v.get();
         internalListener3.reset();
         v.set(VALUE_1);
-        internalListener3.check(readOnlyProperty, 1);
+        internalListener3.check(property, 1);
         
         // binding the property, checking public
         property.bind(v);
--- a/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/ComboBoxPopupControl.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/ComboBoxPopupControl.java	Fri Nov 13 09:49:50 2015 -0800
@@ -26,7 +26,6 @@
 package com.sun.javafx.scene.control.skin;
 
 import javafx.beans.value.ObservableValue;
-import javafx.css.PseudoClass;
 import javafx.css.Styleable;
 import javafx.geometry.*;
 import javafx.scene.control.*;
@@ -77,6 +76,11 @@
             if (getEditor() != null) {
                 // Fix for the regression noted in a comment in RT-29885.
                 ((FakeFocusTextField)textField).setFakeFocus(hasFocus);
+
+                // JDK-8120120 (aka RT-21454) and JDK-8136838
+                if (!hasFocus) {
+                    setTextFromTextFieldIntoComboBoxValue();
+                }
             }
         });
 
@@ -548,6 +552,4 @@
      *                                                                         *
      **************************************************************************/
 
-    private static PseudoClass CONTAINS_FOCUS_PSEUDOCLASS_STATE = PseudoClass.getPseudoClass("contains-focus");
-
 }
--- a/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/TableHeaderRow.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/TableHeaderRow.java	Fri Nov 13 09:49:50 2015 -0800
@@ -326,11 +326,11 @@
 
     /** {@inheritDoc} */
     @Override protected double computePrefHeight(double width) {
-        // we use cornerRegion.getHeight() here to avoid RT-37616, where the
-        // entire header row would disappear when all columns were hidden. We know
-        // that the cornerRegion height has previously been calculated and set,
-        // so we can baseline on this size to prevent the header row disappearing.
-        return snappedTopInset() + Math.max(header.prefHeight(width), cornerRegion.getHeight()) + snappedBottomInset();
+        // we hardcode 24.0 here to avoid RT-37616, where the
+        // entire header row would disappear when all columns were hidden.
+        double headerPrefHeight = header.prefHeight(width);
+        headerPrefHeight = headerPrefHeight == 0.0 ? 24.0 : headerPrefHeight;
+        return snappedTopInset() + headerPrefHeight + snappedBottomInset();
     }
 
     // protected to allow subclasses to provide a custom root header
--- a/modules/controls/src/main/java/javafx/scene/control/HeavyweightDialog.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/controls/src/main/java/javafx/scene/control/HeavyweightDialog.java	Fri Nov 13 09:49:50 2015 -0800
@@ -93,9 +93,9 @@
             }
         });
 
-        stage.addEventHandler(KeyEvent.KEY_RELEASED, keyEvent -> {
+        stage.addEventHandler(KeyEvent.KEY_PRESSED, keyEvent -> {
             if (keyEvent.getCode() == KeyCode.ESCAPE) {
-                if (requestPermissionToClose(dialog)) {
+                if (!keyEvent.isConsumed() && requestPermissionToClose(dialog)) {
                     dialog.close();
                     keyEvent.consume();
                 }
--- a/modules/controls/src/main/resources/com/sun/javafx/scene/control/skin/caspian/caspian.css	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/controls/src/main/resources/com/sun/javafx/scene/control/skin/caspian/caspian.css	Fri Nov 13 09:49:50 2015 -0800
@@ -3186,8 +3186,8 @@
     -fx-background-insets: 0 0 -1 0, 0, 1 0 1 1;
 }
 
-.combo-box-base:editable:contains-focus,
-.date-picker:contains-focus {
+.combo-box-base:editable:focused,
+.date-picker:focused {
     -fx-background-color: -fx-focus-color, -fx-outer-border, -fx-control-inner-background;
     -fx-background-radius: 5.4, 3, 2;
     -fx-background-insets: -1.4, 0, 1;
--- a/modules/controls/src/main/resources/com/sun/javafx/scene/control/skin/modena/modena.css	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/controls/src/main/resources/com/sun/javafx/scene/control/skin/modena/modena.css	Fri Nov 13 09:49:50 2015 -0800
@@ -1767,8 +1767,8 @@
     -fx-background-insets: 1 0 1 1;
     -fx-background-radius: 2 0 0 2;
 }
-.combo-box-base:editable:contains-focus,
-.date-picker:contains-focus {
+.combo-box-base:editable:focused,
+.date-picker:focused {
     -fx-background-color: -fx-focus-color;
     -fx-background-insets: -0.2;
     -fx-background-radius: 3;
@@ -1784,8 +1784,8 @@
     -fx-background-insets: 1 0 1 1, 1 0 1 1, 3 2 3 3;
     -fx-background-radius: 2 0 0 2, 1 0 0 1, 0;
 }
-.combo-box-base:editable:contains-focus > .arrow-button,
-.date-picker:contains-focus > .arrow-button {
+.combo-box-base:editable:focused > .arrow-button,
+.date-picker:focused > .arrow-button {
     -fx-background-color: -fx-inner-border, -fx-body-color, -fx-faint-focus-color, -fx-body-color;
     -fx-background-insets: 1, 2, 1, 2.6;
     -fx-background-radius: 0 2 2 0, 0 1 1 0, 0 1 1 0, 0 1 1 0;
--- a/modules/fxpackager/src/main/java/com/oracle/tools/packager/AbstractImageBundler.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/fxpackager/src/main/java/com/oracle/tools/packager/AbstractImageBundler.java	Fri Nov 13 09:49:50 2015 -0800
@@ -276,29 +276,45 @@
             params.put(".runtime.version.security", matcher.group(5));
             params.put(".runtime.version.patch", "0");
             params.put(".runtime.version.modifiers", matcher.group(7));
-        } else {
-            Pattern newVersionMatcher = Pattern.compile("java version \"((\\d+).(\\d+).(\\d+).(\\d+))(-(.*))?(\\+[^\"]*)?\"");
-            matcher = newVersionMatcher.matcher(versionOutput);
-            if (matcher.find()) {
-                params.put(".runtime.version", matcher.group(1));
-                params.put(".runtime.version.release", matcher.group(1));
-                params.put(".runtime.version.major", matcher.group(2));
-                params.put(".runtime.version.update", matcher.group(3));
-                params.put(".runtime.version.minor", matcher.group(3));
-                params.put(".runtime.version.security", matcher.group(4));
-                params.put(".runtime.version.patch", matcher.group(5));
-                params.put(".runtime.version.modifiers", matcher.group(7));
-            } else {
-                params.put(".runtime.version", "");
-                params.put(".runtime.version.release", "");
-                params.put(".runtime.version.major", "");
-                params.put(".runtime.version.update", "");
-                params.put(".runtime.version.minor", "");
-                params.put(".runtime.version.security", "");
-                params.put(".runtime.version.patch", "");
-                params.put(".runtime.version.modifiers", "");
-            }
+            return;
+        } 
+        
+        Pattern macJreVersionMatcher = Pattern.compile("java version \"(1.(\\d+).(\\d+).(\\d+))\"");
+        matcher = macJreVersionMatcher.matcher(versionOutput);
+        if (matcher.find()) {
+            params.put(".runtime.version", matcher.group(1));
+            params.put(".runtime.version.release", matcher.group(1));
+            params.put(".runtime.version.major", matcher.group(2));
+            params.put(".runtime.version.update", matcher.group(3));
+            params.put(".runtime.version.minor", matcher.group(3));
+            params.put(".runtime.version.security", matcher.group(3));
+            params.put(".runtime.version.patch", matcher.group(4));
+            params.put(".runtime.version.modifiers", "");
+            return;
         }
+
+        Pattern newVersionMatcher = Pattern.compile("java version \"((\\d+).(\\d+).(\\d+).(\\d+))(-(.*))?(\\+[^\"]*)?\"");
+        matcher = newVersionMatcher.matcher(versionOutput);
+        if (matcher.find()) {
+            params.put(".runtime.version", matcher.group(1));
+            params.put(".runtime.version.release", matcher.group(1));
+            params.put(".runtime.version.major", matcher.group(2));
+            params.put(".runtime.version.update", matcher.group(3));
+            params.put(".runtime.version.minor", matcher.group(3));
+            params.put(".runtime.version.security", matcher.group(4));
+            params.put(".runtime.version.patch", matcher.group(5));
+            params.put(".runtime.version.modifiers", matcher.group(7));
+            return;
+        }
+
+        params.put(".runtime.version", "");
+        params.put(".runtime.version.release", "");
+        params.put(".runtime.version.major", "");
+        params.put(".runtime.version.update", "");
+        params.put(".runtime.version.minor", "");
+        params.put(".runtime.version.security", "");
+        params.put(".runtime.version.patch", "");
+        params.put(".runtime.version.modifiers", "");
     }
 
 
--- a/modules/fxpackager/src/main/java/com/oracle/tools/packager/mac/MacAppStoreBundler.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/fxpackager/src/main/java/com/oracle/tools/packager/mac/MacAppStoreBundler.java	Fri Nov 13 09:49:50 2015 -0800
@@ -290,13 +290,33 @@
                             I18N.getString("error.non-existent-runtime.advice")));
         }
 
-        if (new File(baseDir, "Contents/Home/lib/libjfxmedia_qtkit.dylib").exists()
-            || new File(baseDir, "Contents/Home/jre/lib/libjfxmedia_qtkit.dylib").exists())
-        {
+        int majorVersion;
+        int updateVersion;
+        
+        try {
+            majorVersion = Integer.parseInt(params.get(".runtime.version.major").toString());
+            updateVersion = Integer.parseInt(params.get(".runtime.version.update").toString());
+        } catch (Exception e) {
+            // assume the worst
+            majorVersion = 8;
+            updateVersion = 60;
+        }
+        
+        // Quicktime
+        // before 8u40 it was all of media
+        // after 8u40 QTKit dependencies are isolated in it's own library
+        if (majorVersion == 8 && updateVersion >= 40) {
             rules.add(JreUtils.Rule.suffixNeg("/lib/libjfxmedia_qtkit.dylib"));
         } else {
             rules.add(JreUtils.Rule.suffixNeg("/lib/libjfxmedia.dylib"));
         }
+        
+        // webkit
+        // 8u60 webkit started using an API Apple didn't like
+        if (majorVersion == 8 && updateVersion >= 60) {
+            rules.add(JreUtils.Rule.suffixNeg("/lib/libjfxwebkit.dylib"));
+        }
+        
         return rules.toArray(new JreUtils.Rule[rules.size()]);
     }
 
--- a/modules/fxpackager/src/test/java/com/oracle/tools/packager/mac/MacAppStoreBundlerTest.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/fxpackager/src/test/java/com/oracle/tools/packager/mac/MacAppStoreBundlerTest.java	Fri Nov 13 09:49:50 2015 -0800
@@ -26,6 +26,7 @@
 package com.oracle.tools.packager.mac;
 
 import com.oracle.tools.packager.AbstractBundler;
+import com.oracle.tools.packager.AbstractImageBundler;
 import com.oracle.tools.packager.BundlerParamInfo;
 import com.oracle.tools.packager.ConfigException;
 import com.oracle.tools.packager.IOUtils;
@@ -42,6 +43,8 @@
 import java.io.File;
 import java.io.IOException;
 import java.io.PrintStream;
+import java.nio.file.Files;
+import java.nio.file.Paths;
 import java.text.SimpleDateFormat;
 import java.util.Arrays;
 import java.util.Collection;
@@ -185,7 +188,7 @@
         );
         bundleParams.put(MAC_CF_BUNDLE_VERSION.getID(), "1.0." + new SimpleDateFormat("YYYYMMddHHmm").format(new Date()));
         bundleParams.put(CLASSPATH.getID(), "mainApp.jar");
-        bundleParams.put(IDENTIFIER.getID(), "com.example.javapackager.hello.TestPackager");
+        bundleParams.put(IDENTIFIER.getID(), "com.example.javapacakger.hello.TestPackager");
         bundleParams.put(MacAppBundler.MAC_CATEGORY.getID(), "public.app-category.developer-tools");
         bundleParams.put(APP_RESOURCES.getID(), new RelativeFileSet(appResourcesDir, appResources));
         bundleParams.put(VERBOSE.getID(), true);
@@ -200,10 +203,10 @@
         File result = bundler.execute(bundleParams, new File(workDir, "smoke"));
         System.err.println("Bundle at - " + result);
 
-        checkFiles(result);
+        checkFiles(result, runtimeJdk);
     }
 
-    private void checkFiles(File result) throws IOException {
+    private void checkFiles(File result, String runtimeRoot) throws IOException {
         assertNotNull(result);
         assertTrue(result.exists());
         assertTrue(result.length() > MIN_SIZE);
@@ -220,7 +223,34 @@
         Matcher matcher = jreInfoPListPattern.matcher(output);
         assertTrue("Insure that info.plist is packed in for embedded jre", matcher.find());
 
-        assertFalse("Insure JFX Media isn't packed in", output.contains("/libjfxmedia_qtkit.dylib"));
+        Map<String, Object> params = new HashMap<>();
+        String version;
+        
+        if (runtimeRoot == null) {
+            version = System.getProperty("java.runtime.version");
+        } else {
+            byte[] infoPlistBytes = Files.readAllBytes(Paths.get(runtimeRoot).getParent().resolve("Info.plist"));
+            String infoPlist = new String(infoPlistBytes);
+
+            Pattern cfBundleVersionMatcher = Pattern.compile("<key>CFBundleVersion</key>\\s*<string>([^<]+)</string>");
+            Matcher m = cfBundleVersionMatcher.matcher(infoPlist);
+            assertTrue("Packed Info.plist presents a java version", m.find());
+            version = m.group(1);
+        }
+        AbstractImageBundler.extractFlagsFromVersion(params, "java version \"" + version + "\"\n");
+
+        int majorVersion = Integer.parseInt(params.get(".runtime.version.major").toString());
+        int updateVersion = Integer.parseInt(params.get(".runtime.version.update").toString());
+        
+        if (majorVersion == 8 && updateVersion >= 40) {
+            assertFalse("Insure JFX Media QuickTime Partition isn't packed in", output.contains("/libjfxmedia_qtkit.dylib"));
+        } else {
+            assertFalse("Insure JFX Media isn't packed in", output.contains("/libjfxmedia.dylib"));
+        }
+
+        if (majorVersion == 8 && updateVersion >= 60) {
+            assertFalse("Insure WebView library isn't packed in", output.contains("/libjfxwebkit.dylib"));
+        }
     }
 
     @Test
@@ -291,7 +321,7 @@
         File result = bundler.execute(bundleParams, new File(workDir, "everything"));
         System.err.println("Bundle at - " + result);
 
-        checkFiles(result);
+        checkFiles(result, runtimeJdk);
     }
 
     /**
@@ -320,7 +350,7 @@
                         new HashSet<>(Arrays.asList(fakeMainJar)))
         );
         bundleParams.put(CLASSPATH.getID(), "mainApp.jar");
-        bundleParams.put(IDENTIFIER.getID(), "com.example.javapackager.hello.TestPackager");
+        bundleParams.put(IDENTIFIER.getID(), "com.example.javapacakger.hello.TestPackager");
         bundleParams.put(MacAppBundler.MAC_CATEGORY.getID(), "public.app-category.developer-tools");
         bundleParams.put(APP_RESOURCES.getID(), new RelativeFileSet(appResourcesDir, appResources));
         bundleParams.put(VERBOSE.getID(), true);
@@ -332,7 +362,7 @@
         File result = bundler.execute(bundleParams, new File(workDir, "jre"));
         System.err.println("Bundle at - " + result);
 
-        checkFiles(result);
+        checkFiles(result, runtimeJre);
 
     }
 
@@ -355,7 +385,7 @@
                         new HashSet<>(Arrays.asList(fakeMainJar)))
         );
         bundleParams.put(CLASSPATH.getID(), "mainApp.jar");
-        bundleParams.put(IDENTIFIER.getID(), "com.example.javapackager.hello.TestPackager");
+        bundleParams.put(IDENTIFIER.getID(), "com.example.javapacakger.hello.TestPackager");
         bundleParams.put(MacAppBundler.MAC_CATEGORY.getID(), "public.app-category.developer-tools");
         bundleParams.put(APP_RESOURCES.getID(), new RelativeFileSet(appResourcesDir, appResources));
         bundleParams.put(VERBOSE.getID(), true);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/modules/graphics/src/main/java/com/sun/javafx/tk/PermissionHelper.java	Fri Nov 13 09:49:50 2015 -0800
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2015, 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.tk;
+
+import java.awt.AWTPermission;
+import java.security.Permission;
+
+public class PermissionHelper {
+
+    // TODO: use refelction in the future to avoid hard dependency on AWT
+    private static final Permission accessClipboardPermission = new AWTPermission("accessClipboard");
+
+    public static Permission getAccessClipboardPermission() {
+        return accessClipboardPermission;
+    }
+
+    // Static helper class; do not construct an instance
+    private PermissionHelper() {}
+}
--- a/modules/graphics/src/main/java/com/sun/javafx/tk/quantum/QuantumClipboard.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/graphics/src/main/java/com/sun/javafx/tk/quantum/QuantumClipboard.java	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2015, 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
@@ -41,7 +41,6 @@
 import java.net.URL;
 import java.nio.ByteBuffer;
 import java.security.AccessControlContext;
-import java.security.AllPermission;
 import java.security.Permission;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -62,6 +61,7 @@
 import com.sun.glass.ui.ClipboardAssistance;
 import com.sun.glass.ui.Pixels;
 import com.sun.javafx.tk.ImageLoader;
+import com.sun.javafx.tk.PermissionHelper;
 import com.sun.javafx.tk.TKClipboard;
 import com.sun.javafx.tk.Toolkit;
 import javafx.scene.image.PixelReader;
@@ -329,8 +329,6 @@
         return null;
     }
 
-    private static final Permission all = new AllPermission();
-
     private static Image convertObjectToImage(Object obj) {
         if (obj instanceof Image) {
             return (Image) obj;
@@ -394,7 +392,9 @@
                                 SocketPermission sp = new SocketPermission(hoststr, "connect");
                                 context.checkPermission(sp);
                             } else {
-                                context.checkPermission(all);
+                                final Permission clipboardPerm =
+                                        PermissionHelper.getAccessClipboardPermission();
+                                context.checkPermission(clipboardPerm);
                             }
                         }
                         return (new Image(url));
--- a/modules/graphics/src/main/java/com/sun/prism/es2/ES2SwapChain.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/graphics/src/main/java/com/sun/prism/es2/ES2SwapChain.java	Fri Nov 13 09:49:50 2015 -0800
@@ -134,9 +134,9 @@
                 copyFullBuffer = false;
                 if (isMSAA()) {
                     context.flushVertexBuffer();
-                    // Note must flip the z axis during blit
+                    // Note must flip the image vertically during blit
                     g.blit(stableBackbuffer, null,
-                            0, 0, sw, sh, 0, 0, dw, dh);
+                            0, 0, sw, sh, 0, dh, dw, 0);
                 } else {
                     drawTexture(g, stableBackbuffer,
                                 0, 0, dw, dh, 0, 0, sw, sh);
--- a/modules/graphics/src/main/java/javafx/scene/Parent.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/graphics/src/main/java/javafx/scene/Parent.java	Fri Nov 13 09:49:50 2015 -0800
@@ -262,7 +262,7 @@
                     // update the parent and scene for each new node
                     for (int i = from; i < to; ++i) {
                         Node node = children.get(i);
-                        if (node.isManaged()) {
+                        if (node.isManaged() || (node instanceof Parent && ((Parent) node).layoutFlag != LayoutFlags.CLEAN)) {
                             relayout = true;
                         }
                         node.setParent(Parent.this);
@@ -497,7 +497,10 @@
                         old.setParent(null);
                         old.setScenes(null, null);
                     }
-                    if (!removedChildrenOptimizationDisabled) {
+                    // Do not add node with null scene to the removed list.
+                    // It will not be processed in the list and its memory
+                    // will not be freed.
+                    if (scene != null && !removedChildrenOptimizationDisabled) {
                         removed.add(old);
                     }
                 }
@@ -653,6 +656,11 @@
         if (oldScene != null && newScene == null) {
             // RT-34863 - clean up CSS cache when Parent is removed from scene-graph
             StyleManager.getInstance().forget(this);
+
+            // Clear removed list on parent who is no longer in a scene 
+            if (removed != null) {
+                removed.clear();
+            }
         }
 
         for (int i=0; i<children.size(); i++) {
--- a/modules/graphics/src/main/java/javafx/scene/input/Clipboard.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/graphics/src/main/java/javafx/scene/input/Clipboard.java	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, 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
@@ -28,6 +28,7 @@
 import java.io.File;
 import java.security.AccessControlContext;
 import java.security.AccessController;
+import java.security.Permission;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -35,9 +36,9 @@
 import javafx.scene.image.Image;
 import javafx.util.Pair;
 
+import com.sun.javafx.tk.PermissionHelper;
 import com.sun.javafx.tk.TKClipboard;
 import com.sun.javafx.tk.Toolkit;
-import java.security.AllPermission;
 
 /**
  * Represents an operating system clipboard, on which data may be placed during, for
@@ -170,7 +171,9 @@
         try {
             final SecurityManager securityManager = System.getSecurityManager();
             if (securityManager != null) {
-                securityManager.checkPermission(new AllPermission());
+                final Permission clipboardPerm =
+                        PermissionHelper.getAccessClipboardPermission();
+                securityManager.checkPermission(clipboardPerm);
             }
             return getSystemClipboardImpl();
         } catch (final SecurityException e) {
--- a/modules/graphics/src/main/java/javafx/scene/input/Dragboard.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/graphics/src/main/java/javafx/scene/input/Dragboard.java	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, 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,10 +25,11 @@
 
 package javafx.scene.input;
 
-import java.security.AllPermission;
+import java.security.Permission;
 import java.util.Set;
 
 import com.sun.javafx.scene.input.DragboardHelper;
+import com.sun.javafx.tk.PermissionHelper;
 import com.sun.javafx.tk.TKClipboard;
 import com.sun.javafx.tk.TKScene;
 import javafx.scene.image.Image;
@@ -53,7 +54,9 @@
         if (dataAccessRestricted) {
             final SecurityManager securityManager = System.getSecurityManager();
             if (securityManager != null) {
-                securityManager.checkPermission(new AllPermission());
+                final Permission clipboardPerm =
+                        PermissionHelper.getAccessClipboardPermission();
+                securityManager.checkPermission(clipboardPerm);
             }
         }
         return super.getContentImpl(dataFormat);
--- a/modules/graphics/src/main/native-glass/mac/GlassView3D.m	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/graphics/src/main/native-glass/mac/GlassView3D.m	Fri Nov 13 09:49:50 2015 -0800
@@ -88,6 +88,7 @@
             kCGLPFAColorSize, 32,
             kCGLPFAAlphaSize, 8,
             kCGLPFADepthSize, depth,
+	    kCGLPFAAllowOfflineRenderers, // lets OpenGL know this context is offline renderer aware
             (CGLPixelFormatAttribute)0
         };
         GLint npix = 0;
@@ -207,7 +208,19 @@
 - (id)initWithFrame:(NSRect)frame withJview:(jobject)jView withJproperties:(jobject)jproperties
 {
     LOG("GlassView3D initWithFrame:withJview:withJproperties");
-    self = [super initWithFrame:frame pixelFormat:[NSOpenGLView defaultPixelFormat]];
+
+    NSOpenGLPixelFormatAttribute pixelFormatAttributes[] =
+    {
+        NSOpenGLPFAAllowOfflineRenderers, // Lets OpenGL know this context is offline renderer aware
+        (NSOpenGLPixelFormatAttribute)0
+    };
+    NSOpenGLPixelFormat *pFormat = [[[NSOpenGLPixelFormat alloc] initWithAttributes:pixelFormatAttributes] autorelease];
+    if (!pFormat)
+    {
+        pFormat = [NSOpenGLView defaultPixelFormat];
+        LOG("GlassView3D initWithFrame: initWithAttributes failed! Set pixel format to default pixel format");
+    }
+    self = [super initWithFrame:frame pixelFormat:pFormat];
     if (self != nil)
     {
         [self _initialize3dWithJproperties:jproperties];
--- a/modules/graphics/src/main/native-prism-es2/macosx/MacOSXWindowSystemInterface.m	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/graphics/src/main/native-prism-es2/macosx/MacOSXWindowSystemInterface.m	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, 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
@@ -58,6 +58,10 @@
     attribs[index++] = NSOpenGLPFADepthSize;
     attribs[index++] = ivalues[com_sun_prism_es2_GLPixelFormat_Attributes_DEPTH_SIZE];
 
+
+    // Lets OpenGL know this context is offline renderer aware.
+    attribs[index++] = NSOpenGLPFAAllowOfflineRenderers;
+
     // Zero-terminate
     attribs[index++] = 0;
 
--- a/modules/graphics/src/test/java/javafx/scene/ParentTest.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/graphics/src/test/java/javafx/scene/ParentTest.java	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2015, 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
@@ -29,11 +29,6 @@
 import com.sun.javafx.sg.prism.NGGroup;
 import com.sun.javafx.tk.Toolkit;
 import java.util.concurrent.atomic.AtomicBoolean;
-import javafx.beans.InvalidationListener;
-import javafx.beans.Observable;
-import javafx.beans.value.ChangeListener;
-import javafx.beans.value.ObservableValue;
-import javafx.geometry.Bounds;
 import javafx.scene.shape.Rectangle;
 import javafx.stage.Stage;
 import org.junit.After;
@@ -498,14 +493,7 @@
 
     @Test
     public void requestLayoutAlwaysCalledUpToTheLayoutRoot() {
-        final Group root = new Group() {
-
-            @Override
-            public void requestLayout() {
-                fail();
-            }
-
-        };
+        final Group root = new Group();
         final LGroup lroot = new LGroup();
         lroot.setManaged(false);
         root.getChildren().add(lroot);
@@ -527,6 +515,47 @@
         sub.requestLayout();
         lroot.assertAndClear(true);
         sub.assertAndClear(true);
+    }
+    
+    @Test
+    public void unmanagedParentTest() {
+        final LGroup innerGroup = new LGroup();
+        innerGroup.setManaged(false);
+
+        final LGroup outerGroup = new LGroup();
+        outerGroup.setManaged(false);
+
+        Scene s = new Scene(outerGroup);
+
+        innerGroup.assertAndClear(false);
+        outerGroup.assertAndClear(true);
+
+        outerGroup.getChildren().add(innerGroup);
+        innerGroup.requestLayout();
+
+        innerGroup.assertAndClear(true);
+        outerGroup.assertAndClear(true);
+
+        outerGroup.getChildren().remove(innerGroup);
+
+        innerGroup.assertAndClear(false);
+        outerGroup.assertAndClear(false);
+
+        final LGroup intermediate = new LGroup();
+        intermediate.setManaged(false);
+        intermediate.setAutoSizeChildren(false);
+        outerGroup.getChildren().add(intermediate);
+
+        innerGroup.assertAndClear(false);
+        intermediate.assertAndClear(true);
+        outerGroup.assertAndClear(true);
+
+        innerGroup.requestLayout();
+        intermediate.getChildren().add(innerGroup);
+
+        innerGroup.assertAndClear(true);
+        intermediate.assertAndClear(true);
+        outerGroup.assertAndClear(false);
 
     }
 
--- a/modules/graphics/src/test/java/javafx/scene/Parent_structure_sync_Test.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/graphics/src/test/java/javafx/scene/Parent_structure_sync_Test.java	Fri Nov 13 09:49:50 2015 -0800
@@ -29,6 +29,7 @@
 import com.sun.javafx.sg.prism.NGGroup;
 import com.sun.javafx.tk.Toolkit;
 import java.util.List;
+import javafx.scene.layout.BorderPane;
 import javafx.scene.shape.Rectangle;
 import javafx.stage.Stage;
 import org.junit.Before;
@@ -334,4 +335,30 @@
         sync();
         assertTrue(parent2.test_getRemoved().isEmpty());
     }
+
+    @Test
+    public void validateParentsRemovedList2() {
+        BorderPane borderPane = new BorderPane(r1);
+        Parent p = (Parent) borderPane;
+        sync();
+        borderPane.setCenter(null);
+        assertNotNull(p.test_getRemoved());
+        assertTrue(p.test_getRemoved().isEmpty());
+        sync();
+        assertTrue(p.test_getRemoved().isEmpty());
+    }
+
+    @Test
+    public void validateParentsRemovedList3() {
+        BorderPane borderPane = new BorderPane(r1);
+        Parent p = (Parent) borderPane;
+        parent.getScene().setRoot(borderPane);
+        sync();
+        borderPane.getScene().setRoot(parent);
+        borderPane.setCenter(null);
+        assertNotNull(p.test_getRemoved());
+        assertTrue(p.test_getRemoved().isEmpty());
+        sync();
+        assertTrue(p.test_getRemoved().isEmpty());
+    }
 }
--- a/modules/media/src/main/java/com/sun/media/jfxmedia/MediaManager.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/media/src/main/java/com/sun/media/jfxmedia/MediaManager.java	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2015, 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
@@ -57,11 +57,25 @@
      * @throws IllegalArgumentException if <code>contentType</code> is
      * <code>null</code>.
      */
-    public static boolean canPlayContentType (String contentType) {
+    public static boolean canPlayContentType(String contentType) {
         if (contentType == null) {
             throw new IllegalArgumentException("contentType == null!");
         }
-        return NativeMediaManager.getDefaultInstance().canPlayContentType (contentType);
+        return NativeMediaManager.getDefaultInstance().canPlayContentType(contentType);
+    }
+
+    /**
+     * Whether a media source having the indicated protocol may be
+     * played.
+     *
+     * @throws IllegalArgumentException if <code>contentType</code> is
+     * <code>null</code>.
+     */
+    public static boolean canPlayProtocol(String protocol) {
+        if (protocol == null) {
+            throw new IllegalArgumentException("protocol == null!");
+        }
+        return NativeMediaManager.getDefaultInstance().canPlayProtocol(protocol);
     }
 
 
--- a/modules/media/src/main/java/com/sun/media/jfxmedia/locator/ConnectionHolder.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/media/src/main/java/com/sun/media/jfxmedia/locator/ConnectionHolder.java	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2015, 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
@@ -256,7 +256,7 @@
 
         boolean needBuffer() {
             String scheme = uri.getScheme().toLowerCase();
-            return "http".equals(scheme);
+            return ("http".equals(scheme) || "https".equals(scheme));
         }
 
         boolean isSeekable() {
--- a/modules/media/src/main/java/com/sun/media/jfxmedia/locator/HLSConnectionHolder.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/media/src/main/java/com/sun/media/jfxmedia/locator/HLSConnectionHolder.java	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2015, 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
@@ -593,7 +593,7 @@
 
         private URI getPlaylistURI() throws URISyntaxException, MalformedURLException {
             String location = playlistsLocations.get(infoIndex);
-            if (location.startsWith("http://")) {
+            if (location.startsWith("http://") || location.startsWith("https://")) {
                 return new URI(location);
             } else {
                 return new URI(playlistURI.toURL().toString().substring(0, playlistURI.toURL().toString().lastIndexOf("/") + 1) + location);
@@ -899,7 +899,7 @@
         }
 
         private void setBaseURI(String playlistURI, String URI) {
-            if (!URI.startsWith("http://")) {
+            if (!URI.startsWith("http://") || !URI.startsWith("https://")) {
                 baseURI = playlistURI.substring(0, playlistURI.lastIndexOf("/") + 1);
             }
             needBaseURI = false;
--- a/modules/media/src/main/java/com/sun/media/jfxmedia/locator/Locator.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/media/src/main/java/com/sun/media/jfxmedia/locator/Locator.java	Fri Nov 13 09:49:50 2015 -0800
@@ -229,12 +229,12 @@
         }
 
         // Verify the protocol is supported.
-        if (!isIpod && !protocol.equals("file") && !protocol.equals("http")) {
+        if (!isIpod && !MediaManager.canPlayProtocol(protocol)) {
             throw new UnsupportedOperationException("Unsupported protocol \"" + protocol + "\"");
         }
 
         // Check if we can block
-        if (protocol.equals("http")) {
+        if (protocol.equals("http") || protocol.equals("https")) {
             canBlock = true;
         }
 
@@ -343,7 +343,7 @@
                 if (protocol.equals("file")) {
                     // Map file:/somepath to file:///somepath
                     uriString = uriString.replaceFirst("/", "///");
-                } else if (protocol.equals("http")) {
+                } else if (protocol.equals("http") || protocol.equals("https")) {
                     // Map http:/somepath to http://somepath
                     uriString = uriString.replaceFirst("/", "//");
                 }
@@ -386,7 +386,7 @@
                 for (int numConnectionAttempts = 0; numConnectionAttempts < MAX_CONNECTION_ATTEMPTS; numConnectionAttempts++) {
                     try {
                         // Verify existence.
-                        if (scheme.equals("http")) {
+                        if (scheme.equals("http") || scheme.equals("https")) {
                             // Check ability to connect, trying HEAD before GET.
                             LocatorConnection locatorConnection = getConnection(uri, "HEAD");
                             if (locatorConnection == null || locatorConnection.connection == null) {
--- a/modules/media/src/main/java/com/sun/media/jfxmediaimpl/NativeMediaManager.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/media/src/main/java/com/sun/media/jfxmediaimpl/NativeMediaManager.java	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2015, 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
@@ -67,6 +67,8 @@
     // should never change once we're initialized
     private final List<String> supportedContentTypes =
             new ArrayList();
+    private final List<String> supportedProtocols =
+            new ArrayList<>();
 
     /**
      * The NativeMediaManager singleton.
@@ -164,6 +166,28 @@
         }
     }
 
+    private synchronized void loadProtocols() {
+        if (!supportedProtocols.isEmpty()) {
+            // already populated, just return
+            return;
+        }
+
+        List<String> npt = PlatformManager.getManager().getSupportedProtocols();
+        if (null != npt && !npt.isEmpty()) {
+            supportedProtocols.addAll(npt);
+        }
+
+        if (Logger.canLog(Logger.DEBUG)) {
+            StringBuilder sb = new StringBuilder("JFXMedia supported protocols:\n");
+            for (String type : supportedProtocols) {
+                sb.append("    ");
+                sb.append(type);
+                sb.append("\n");
+            }
+            Logger.logMsg(Logger.DEBUG, sb.toString());
+        }
+    }
+
     /**
      * Whether a media source having the indicated content type may be played.
      *
@@ -195,11 +219,6 @@
         return false;
     }
 
-    /**
-     * Returns a copy of the array of supported content types.
-     *
-     * @return {@link String} array of supported content types.
-     */
     public String[] getSupportedContentTypes() {
         if (supportedContentTypes.isEmpty()) {
             loadContentTypes();
@@ -208,6 +227,37 @@
         return supportedContentTypes.toArray(new String[1]);
     }
 
+    /**
+     * Whether a media source having the indicated protocol may be played.
+     *
+     * @see MediaManager#canPlayProtocol(java.lang.String)
+     *
+     * @throws IllegalArgumentException if
+     * <code>protocol</code> is
+     * <code>null</code>.
+     */
+    public boolean canPlayProtocol(String protocol) {
+        if (protocol == null) {
+            throw new IllegalArgumentException("protocol == null!");
+        }
+
+        if (supportedProtocols.isEmpty()) {
+            loadProtocols();
+        }
+
+        /*
+         * Don't just use supportedProtocols.contains(protocol) as that
+         * is case sensitive, which we do not want
+         */
+        for (String type : supportedProtocols) {
+            if (protocol.equalsIgnoreCase(type)) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
     public static MetadataParser getMetadataParser(Locator locator) {
         return PlatformManager.getManager().createMetadataParser(locator);
     }
--- a/modules/media/src/main/java/com/sun/media/jfxmediaimpl/NativeMediaPlayer.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/media/src/main/java/com/sun/media/jfxmediaimpl/NativeMediaPlayer.java	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2015, 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
@@ -750,7 +750,7 @@
             String contentType = media.getLocator().getContentType();
             String protocol = media.getLocator().getProtocol();
             if ((contentType != null && (contentType.equals(MediaUtils.CONTENT_TYPE_M3U) || contentType.equals(MediaUtils.CONTENT_TYPE_M3U8)))
-                    || (protocol != null && !protocol.equals("http"))) {
+                    || (protocol != null && !protocol.equals("http") && !protocol.equals("https"))) {
                 HandleBufferEvents(new BufferProgressEvent(getDuration(), 0, 1, 1));
             }
         }
--- a/modules/media/src/main/java/com/sun/media/jfxmediaimpl/platform/Platform.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/media/src/main/java/com/sun/media/jfxmediaimpl/platform/Platform.java	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2015, 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
@@ -59,14 +59,30 @@
         }
         return false;
     }
+    
+    public boolean canPlayProtocol(String protocol) {
+        String[] protocols = getSupportedProtocols();
+        if (protocols != null) {
+            for (String p : protocols) {
+                if (p.equalsIgnoreCase(protocol)) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
 
     // NB: This method returns only content which can actually be PLAYED. It
     // does not account for metadata being able to be parsed without the media
     // being able to be played.
     public String[] getSupportedContentTypes() {
-        return null;
+        return new String[0];
     }
-
+    
+    public String[] getSupportedProtocols() {
+        return new String[0];
+    }
+    
     // XXX javadoc
     public MetadataParser createMetadataParser(Locator source) {
         return null;
--- a/modules/media/src/main/java/com/sun/media/jfxmediaimpl/platform/PlatformManager.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/media/src/main/java/com/sun/media/jfxmediaimpl/platform/PlatformManager.java	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2015, 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
@@ -166,6 +166,25 @@
         return outTypes;
     }
 
+    public List<String> getSupportedProtocols() {
+        ArrayList<String> outProtocols = new ArrayList<String>();
+
+        if (!platforms.isEmpty()) {
+            for (Platform platty : platforms) {
+                String[] npt = platty.getSupportedProtocols();
+                if (npt != null) {
+                    for (String p : npt) {
+                        if (!outProtocols.contains(p)) {
+                            outProtocols.add(p);
+                        }
+                    }
+                }
+            }
+        }
+
+        return outProtocols;
+    }
+
     public MetadataParser createMetadataParser(Locator source) {
         for (Platform platty : platforms) {
             MetadataParser parser = platty.createMetadataParser(source);
@@ -180,9 +199,10 @@
     // FIXME: Make Media non-platform specific, it doesn't need to be
     public Media createMedia(Locator source) {
         String mimeType = source.getContentType();
+        String protocol = source.getProtocol();
         // go down the list until we get one that can be created
         for (Platform platty : platforms) {
-            if (platty.canPlayContentType(mimeType)) {
+            if (platty.canPlayContentType(mimeType) && platty.canPlayProtocol(protocol)) {
                 Media outMedia = platty.createMedia(source);
                 if (null != outMedia) {
                     return outMedia;
@@ -195,9 +215,10 @@
 
     public MediaPlayer createMediaPlayer(Locator source) {
         String mimeType = source.getContentType();
+        String protocol = source.getProtocol();
         // go down the list until we get one that can be created
         for (Platform platty : platforms) {
-            if (platty.canPlayContentType(mimeType)) {
+            if (platty.canPlayContentType(mimeType) && platty.canPlayProtocol(protocol)) {
                 MediaPlayer outPlayer = platty.createMediaPlayer(source);
                 if (null != outPlayer) {
                     return outPlayer;
--- a/modules/media/src/main/java/com/sun/media/jfxmediaimpl/platform/gstreamer/GSTPlatform.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/media/src/main/java/com/sun/media/jfxmediaimpl/platform/gstreamer/GSTPlatform.java	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2015, 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
@@ -34,6 +34,7 @@
 import com.sun.media.jfxmediaimpl.HostUtils;
 import com.sun.media.jfxmediaimpl.MediaUtils;
 import com.sun.media.jfxmediaimpl.platform.Platform;
+import java.util.Arrays;
 
 /**
  * GStreamer platform implementation.
@@ -56,23 +57,18 @@
         "application/vnd.apple.mpegurl",
         "audio/mpegurl"
     };
+    
+    /**
+     * All supported protocols.
+     */
+    private static final String[] PROTOCOLS = {
+        "file",
+        "http",
+        "https"
+    };
 
     private static GSTPlatform globalInstance = null;
 
-    // HACK: move this back to native when we fix the jdeveloper crash
-    private static final String[] contentTypes;
-
-    static {
-        // HACK: remove this when we go back to polling native
-        if (!HostUtils.isMacOSX()) {
-            contentTypes = new String[CONTENT_TYPES.length];
-            System.arraycopy(CONTENT_TYPES, 0, contentTypes,
-                    0, CONTENT_TYPES.length);
-        } else {
-            contentTypes = CONTENT_TYPES;
-        }
-    }
-
     @Override
     public boolean loadPlatform() {
         // Initialize GStreamer JNI and supporting native classes.
@@ -104,9 +100,12 @@
 
     @Override
     public String[] getSupportedContentTypes() {
-        String[] contentTypesCopy = new String[contentTypes.length];
-        System.arraycopy(contentTypes, 0, contentTypesCopy, 0, contentTypes.length);
-        return contentTypesCopy;
+        return Arrays.copyOf(CONTENT_TYPES, CONTENT_TYPES.length);
+    }
+    
+    @Override
+    public String[] getSupportedProtocols() {
+        return Arrays.copyOf(PROTOCOLS, PROTOCOLS.length);
     }
 
     @Override
@@ -135,7 +134,8 @@
                 // Block until player transitions to READY or HALTED.
 
                 // Timeouts in milliseconds.
-                final long timeout = source.getURI().getScheme().equals("http") ?
+                String scheme = source.getURI().getScheme();
+                final long timeout = (scheme.equals("http") || scheme.equals("https")) ?
                         60000L : 5000L;
                 final long iterationTime = 50L;
                 long timeWaited = 0L;
--- a/modules/media/src/main/java/com/sun/media/jfxmediaimpl/platform/ios/IOSPlatform.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/media/src/main/java/com/sun/media/jfxmediaimpl/platform/ios/IOSPlatform.java	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2015, 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
@@ -31,6 +31,7 @@
 import com.sun.media.jfxmedia.logging.Logger;
 import com.sun.media.jfxmediaimpl.HostUtils;
 import com.sun.media.jfxmediaimpl.platform.Platform;
+import java.util.Arrays;
 
 /**
  * iOS Platform implementation.
@@ -53,6 +54,15 @@
         "video/x-quicktime",
         "audio/x-aiff"
     };
+    
+    /**
+     * All supported protocols.
+     */
+    private static final String[] PROTOCOLS = {
+        "http",
+        "https",
+        "ipod-library"
+    };
 
     private static final class IOSPlatformInitializer {
         private static final IOSPlatform globalInstance = new IOSPlatform();
@@ -88,9 +98,12 @@
 
     @Override
     public String[] getSupportedContentTypes() {
-        String[] contentTypesCopy = new String[CONTENT_TYPES.length];
-        System.arraycopy(CONTENT_TYPES, 0, contentTypesCopy, 0, CONTENT_TYPES.length);
-        return contentTypesCopy;
+        return Arrays.copyOf(CONTENT_TYPES, CONTENT_TYPES.length);
+    }
+    
+    @Override
+    public String[] getSupportedProtocols() {
+        return Arrays.copyOf(PROTOCOLS, PROTOCOLS.length);
     }
 
     @Override
--- a/modules/media/src/main/java/com/sun/media/jfxmediaimpl/platform/osx/OSXPlatform.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/media/src/main/java/com/sun/media/jfxmediaimpl/platform/osx/OSXPlatform.java	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2015, 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
@@ -34,11 +34,12 @@
 import com.sun.media.jfxmediaimpl.platform.Platform;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
+import java.util.Arrays;
 
 /**
  * Mac OS X Platform implementation. This class implements both the QTKit based
  * platform and the AVFoundation based platforms.
- * 
+ *
  * NOTE: The QTKit based platform is deprecated and will be removed in a future
  * release.
  */
@@ -57,6 +58,15 @@
         "audio/mpegurl"
     };
 
+    /**
+     * All supported protocols.
+     */
+    private static final String[] PROTOCOLS = {
+        "file",
+        "http",
+        "https"
+    };
+
     private static final class OSXPlatformInitializer {
         private static final OSXPlatform globalInstance;
         static {
@@ -121,9 +131,12 @@
 
     @Override
     public String[] getSupportedContentTypes() {
-        String[] contentTypesCopy = new String[CONTENT_TYPES.length];
-        System.arraycopy(CONTENT_TYPES, 0, contentTypesCopy, 0, CONTENT_TYPES.length);
-        return contentTypesCopy;
+        return Arrays.copyOf(CONTENT_TYPES, CONTENT_TYPES.length);
+    }
+
+    @Override
+    public String[] getSupportedProtocols() {
+        return Arrays.copyOf(PROTOCOLS, PROTOCOLS.length);
     }
 
     @Override
--- a/modules/media/src/main/java/javafx/scene/media/AudioClip.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/media/src/main/java/javafx/scene/media/AudioClip.java	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2015, 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
@@ -70,7 +70,7 @@
      * Create an <code>AudioClip</code> loaded from the supplied source URL.
      *
      * @param source URL string from which to load the audio clip. This can be an
-     * HTTP, file or jar source.
+     * HTTP, HTTPS, FILE or JAR source.
      * @throws NullPointerException if the parameter is <code>null</code>.
      * @throws IllegalArgumentException if the parameter violates
      * <a href="http://www.ietf.org/rfc/rfc2396.txt">RFC 2396</a>.
--- a/modules/media/src/main/java/javafx/scene/media/Media.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/media/src/main/java/javafx/scene/media/Media.java	Fri Nov 13 09:49:50 2015 -0800
@@ -87,7 +87,9 @@
     private ReadOnlyObjectWrapper<MediaException> error;
 
     private void setError(MediaException value) {
-        errorPropertyImpl().set(value);
+        if (getError() == null) {
+            errorPropertyImpl().set(value);
+        }
     }
 
     /**
@@ -335,7 +337,7 @@
     /**
      * Constructs a <code>Media</code> instance.  This is the only way to
      * specify the media source. The source must represent a valid <code>URI</code>
-     * and is immutable. Only HTTP, FILE, and JAR <code>URL</code>s are supported. If the
+     * and is immutable. Only HTTP, HTTPS, FILE, and JAR <code>URL</code>s are supported. If the
      * provided URL is invalid then an exception will be thrown.  If an
      * asynchronous error occurs, the {@link #errorProperty error} property will be set. Listen
      * to this property to be notified of any such errors.
@@ -352,7 +354,7 @@
      * <ul>
      * <li>The supplied URI must conform to RFC-2396 as required by
      * <A href="https://docs.oracle.com/javase/8/docs/api/java/net/URI.html">java.net.URI</A>.</li>
-     * <li>Only HTTP, FILE, and JAR URIs are supported.</li>
+     * <li>Only HTTP, HTTPS, FILE, and JAR URIs are supported.</li>
      * </ul>
      *
      * <p>See <A href="https://docs.oracle.com/javase/8/docs/api/java/net/URI.html">java.net.URI</A>
@@ -451,7 +453,7 @@
         }
         return null;
     }
-    
+
     // http://javafx-jira.kenai.com/browse/RT-24594
     // TODO: Remove this entire method (and associated stuff) when we switch to track parsing in MetadataParser
     void _updateMedia(com.sun.media.jfxmedia.Media _media) {
@@ -473,28 +475,28 @@
                         }
                         trackMetadata.put("encoding", trackElement.getEncodingType().toString());
                         trackMetadata.put("enabled", Boolean.valueOf(trackElement.isEnabled()));
-                        
+
                         if (trackElement instanceof com.sun.media.jfxmedia.track.VideoTrack) {
                             com.sun.media.jfxmedia.track.VideoTrack vt =
                                     (com.sun.media.jfxmedia.track.VideoTrack) trackElement;
 
                             int videoWidth = vt.getFrameSize().getWidth();
                             int videoHeight = vt.getFrameSize().getHeight();
-                            
+
                             // FIXME: this isn't valid when there are multiple video tracks...
                             setWidth(videoWidth);
                             setHeight(videoHeight);
 
                             trackMetadata.put("video width", Integer.valueOf(videoWidth));
                             trackMetadata.put("video height", Integer.valueOf(videoHeight));
-                            
+
                             newTrack = new VideoTrack(trackElement.getTrackID(), trackMetadata);
                         } else if (trackElement instanceof com.sun.media.jfxmedia.track.AudioTrack) {
                             newTrack = new AudioTrack(trackElement.getTrackID(), trackMetadata);
                         } else if (trackElement instanceof com.sun.media.jfxmedia.track.SubtitleTrack) {
                             newTrack = new SubtitleTrack(trackID, trackMetadata);
                         }
-                        
+
                         if (null != newTrack) {
                             tracksBacking.add(newTrack);
                         }
--- a/modules/media/src/main/java/javafx/scene/media/MediaPlayer.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/media/src/main/java/javafx/scene/media/MediaPlayer.java	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2015, 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
@@ -526,7 +526,12 @@
             } catch (com.sun.media.jfxmedia.MediaException e) {
                 handleError(MediaException.exceptionToMediaException(e));
             } catch (MediaException e) {
-                handleError(e);
+                // Check media object for error. If it is connection related, then Media object will have better error message
+                if (media.getError() != null) {
+                    handleError(media.getError());
+                } else {
+                    handleError(e);
+                }
             } catch (Exception e) {
                 handleError(new MediaException(MediaException.Type.UNKNOWN, e.getMessage()));
             }
--- a/modules/media/src/main/java/javafx/scene/media/package.html	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/media/src/main/java/javafx/scene/media/package.html	Fri Nov 13 09:49:50 2015 -0800
@@ -99,14 +99,19 @@
     <td>Hypertext transfer protocol for representation of remote files</td>
     <td><a href="https://docs.oracle.com/javase/8/docs/api/java/net/URI.html">java.net.URI</a></td>
 </tr>
+    <td>HTTPS</td>
+    <td>Hypertext transfer protocol secure for representation of remote files</td>
+    <td><a href="https://docs.oracle.com/javase/8/docs/api/java/net/URI.html">java.net.URI</a></td>
+</tr>
+<tr>
 <tr>
     <td>JAR</td>
-    <td>Representation of media entries in files accessible via the FILE or HTTP protocols</td>
+    <td>Representation of media entries in files accessible via the FILE, HTTP or HTTPS protocols</td>
     <td><a href="https://docs.oracle.com/javase/8/docs/api/java/net/JarURLConnection.html">java.net.JarURLConnection</a></td>
 </tr>
 <tr>
     <td>HTTP Live Streaming (HLS)</td>
-    <td>Playlist-based media streaming via HTTP</td>
+    <td>Playlist-based media streaming via HTTP or HTTPS</td>
     <td><a href="http://tools.ietf.org/html/draft-pantos-http-live-streaming">Internet-Draft: HTTP Live Streaming</a></td>
 </tr>
 </table>
@@ -114,7 +119,7 @@
 </p>
 <p>
 <h4>MPEG-4 Playback via HTTP</h4>
-It is recommended that MPEG-4 media to be played over HTTP be formatted such that the
+It is recommended that MPEG-4 media to be played over HTTP or HTTPS be formatted such that the
 headers required to decode the stream appear at the beginning of the file. Otherwise,
 playback might stall until the entire file is downloaded.
 </p>
--- a/modules/media/src/main/native/jfxmedia/platform/osx/QTKMediaPlayer.mm	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/media/src/main/native/jfxmedia/platform/osx/QTKMediaPlayer.mm	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2015, 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
@@ -322,7 +322,11 @@
              if (loadError) {
                  LOGGER_ERRORMSG(([[NSString stringWithFormat:@"Error loading QTMovie: %@\n", loadError] UTF8String]));
                  if (eventHandler) {
-                     eventHandler->SendPlayerMediaErrorEvent(ERROR_OSX_INIT);
+                     if (loadError.domain == NSOSStatusErrorDomain) {
+                         eventHandler->SendPlayerMediaErrorEvent(ERROR_LOCATOR_CONNECTION_LOST);
+                     } else {
+                         eventHandler->SendPlayerMediaErrorEvent(ERROR_OSX_INIT);
+                     }
                  }
              }
              
--- a/modules/media/src/main/native/jfxmedia/platform/osx/avf/AVFMediaPlayer.mm	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/media/src/main/native/jfxmedia/platform/osx/avf/AVFMediaPlayer.mm	Fri Nov 13 09:49:50 2015 -0800
@@ -236,6 +236,7 @@
         if (newOutput) {
             CVDisplayLinkStop(_displayLink);
             [_playerItem removeOutput:_playerOutput];
+        [_playerOutput setDelegate:nil queue:nil];
 
             self.playerOutput = newOutput;
             [_playerOutput setDelegate:blockSelf queue:playerQueue];
@@ -400,6 +401,11 @@
 - (void) dispose {
     @synchronized(self) {
         if (!isDisposed) {
+            if (_playerOutput != nil) {
+                [_playerItem removeOutput:_playerOutput];
+                [_playerOutput setDelegate:nil queue:nil];
+            }
+
             [self setPlayerState:kPlayerState_HALTED];
 
             NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
--- a/modules/web/src/main/java-wrappers/com/sun/webkit/dom/CharacterDataImpl.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/web/src/main/java-wrappers/com/sun/webkit/dom/CharacterDataImpl.java	Fri Nov 13 09:49:50 2015 -0800
@@ -4,14 +4,15 @@
 
 import org.w3c.dom.CharacterData;
 import org.w3c.dom.DOMException;
+import org.w3c.dom.Node;
 
 public class CharacterDataImpl extends NodeImpl implements CharacterData {
     CharacterDataImpl(long peer) {
         super(peer);
     }
 
-    static CharacterData getImpl(long peer) {
-        return (CharacterData)create(peer);
+    static Node getImpl(long peer) {
+        return (Node)create(peer);
     }
 
 
--- a/modules/web/src/main/java-wrappers/com/sun/webkit/dom/DOMWindowImpl.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/web/src/main/java-wrappers/com/sun/webkit/dom/DOMWindowImpl.java	Fri Nov 13 09:49:50 2015 -0800
@@ -10,7 +10,6 @@
 import org.w3c.dom.Element;
 import org.w3c.dom.css.CSSStyleDeclaration;
 import org.w3c.dom.events.Event;
-import org.w3c.dom.events.EventException;
 import org.w3c.dom.events.EventListener;
 import org.w3c.dom.events.EventTarget;
 import org.w3c.dom.views.AbstractView;
@@ -914,6 +913,16 @@
     }
     native static void setOnwaitingImpl(long peer, long value);
 
+    public EventListener getOnwheel() {
+        return EventListenerImpl.getImpl(getOnwheelImpl(getPeer()));
+    }
+    native static long getOnwheelImpl(long peer);
+
+    public void setOnwheel(EventListener value) {
+        setOnwheelImpl(getPeer(), EventListenerImpl.getPeer(value));
+    }
+    native static void setOnwheelImpl(long peer, long value);
+
     public EventListener getOnreset() {
         return EventListenerImpl.getImpl(getOnresetImpl(getPeer()));
     }
@@ -1181,42 +1190,6 @@
         , String pseudoElement);
 
 
-    public void clearTimeout(int handle)
-    {
-        clearTimeoutImpl(getPeer()
-            , handle);
-    }
-    native static void clearTimeoutImpl(long peer
-        , int handle);
-
-
-    public void clearInterval(int handle)
-    {
-        clearIntervalImpl(getPeer()
-            , handle);
-    }
-    native static void clearIntervalImpl(long peer
-        , int handle);
-
-
-    public String atob(String string) throws DOMException
-    {
-        return atobImpl(getPeer()
-            , string);
-    }
-    native static String atobImpl(long peer
-        , String string);
-
-
-    public String btoa(String string) throws DOMException
-    {
-        return btoaImpl(getPeer()
-            , string);
-    }
-    native static String btoaImpl(long peer
-        , String string);
-
-
     public void addEventListener(String type
         , EventListener listener
         , boolean useCapture)
@@ -1247,7 +1220,7 @@
         , boolean useCapture);
 
 
-    public boolean dispatchEvent(Event evt) throws EventException
+    public boolean dispatchEvent(Event evt) throws DOMException
     {
         return dispatchEventImpl(getPeer()
             , EventImpl.getPeer(evt));
@@ -1270,6 +1243,42 @@
     native static void releaseEventsImpl(long peer);
 
 
+    public String atob(String string) throws DOMException
+    {
+        return atobImpl(getPeer()
+            , string);
+    }
+    native static String atobImpl(long peer
+        , String string);
+
+
+    public String btoa(String string) throws DOMException
+    {
+        return btoaImpl(getPeer()
+            , string);
+    }
+    native static String btoaImpl(long peer
+        , String string);
+
+
+    public void clearTimeout(int handle)
+    {
+        clearTimeoutImpl(getPeer()
+            , handle);
+    }
+    native static void clearTimeoutImpl(long peer
+        , int handle);
+
+
+    public void clearInterval(int handle)
+    {
+        clearIntervalImpl(getPeer()
+            , handle);
+    }
+    native static void clearIntervalImpl(long peer
+        , int handle);
+
+
 
 //stubs
     public DocumentView getDocument() {
--- a/modules/web/src/main/java-wrappers/com/sun/webkit/dom/DocumentImpl.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/web/src/main/java-wrappers/com/sun/webkit/dom/DocumentImpl.java	Fri Nov 13 09:49:50 2015 -0800
@@ -24,6 +24,7 @@
 import org.w3c.dom.html.HTMLCollection;
 import org.w3c.dom.html.HTMLElement;
 import org.w3c.dom.html.HTMLHeadElement;
+import org.w3c.dom.html.HTMLScriptElement;
 import org.w3c.dom.ranges.Range;
 import org.w3c.dom.stylesheets.StyleSheetList;
 import org.w3c.dom.traversal.NodeFilter;
@@ -593,6 +594,16 @@
     }
     native static void setOnsubmitImpl(long peer, long value);
 
+    public EventListener getOnwheel() {
+        return EventListenerImpl.getImpl(getOnwheelImpl(getPeer()));
+    }
+    native static long getOnwheelImpl(long peer);
+
+    public void setOnwheel(EventListener value) {
+        setOnwheelImpl(getPeer(), EventListenerImpl.getPeer(value));
+    }
+    native static void setOnwheelImpl(long peer, long value);
+
     public EventListener getOnbeforecut() {
         return EventListenerImpl.getImpl(getOnbeforecutImpl(getPeer()));
     }
@@ -723,6 +734,16 @@
     }
     native static boolean getHiddenImpl(long peer);
 
+    public HTMLScriptElement getCurrentScript() {
+        return HTMLScriptElementImpl.getImpl(getCurrentScriptImpl(getPeer()));
+    }
+    native static long getCurrentScriptImpl(long peer);
+
+    public String getOrigin() {
+        return getOriginImpl(getPeer());
+    }
+    native static String getOriginImpl(long peer);
+
 
 //functions
     public Element createElement(String tagName) throws DOMException
@@ -771,7 +792,7 @@
     public ProcessingInstruction createProcessingInstruction(String target
         , String data) throws DOMException
     {
-        return ProcessingInstructionImpl.getImpl(createProcessingInstructionImpl(getPeer()
+        return (ProcessingInstruction)ProcessingInstructionImpl.getImpl(createProcessingInstructionImpl(getPeer()
             , target
             , data));
     }
@@ -1048,15 +1069,6 @@
         , String elementName);
 
 
-    public NodeList getItems(String typeNames)
-    {
-        return NodeListImpl.getImpl(getItemsImpl(getPeer()
-            , typeNames));
-    }
-    native static long getItemsImpl(long peer
-        , String typeNames);
-
-
     public Element elementFromPoint(int x
         , int y)
     {
--- a/modules/web/src/main/java-wrappers/com/sun/webkit/dom/ElementImpl.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/web/src/main/java-wrappers/com/sun/webkit/dom/ElementImpl.java	Fri Nov 13 09:49:50 2015 -0800
@@ -42,6 +42,16 @@
     }
     native static long getStyleImpl(long peer);
 
+    public String getId() {
+        return getIdImpl(getPeer());
+    }
+    native static String getIdImpl(long peer);
+
+    public void setId(String value) {
+        setIdImpl(getPeer(), value);
+    }
+    native static void setIdImpl(long peer, String value);
+
     public int getOffsetLeft() {
         return getOffsetLeftImpl(getPeer());
     }
@@ -477,6 +487,16 @@
     }
     native static void setOnsubmitImpl(long peer, long value);
 
+    public EventListener getOnwheel() {
+        return EventListenerImpl.getImpl(getOnwheelImpl(getPeer()));
+    }
+    native static long getOnwheelImpl(long peer);
+
+    public void setOnwheel(EventListener value) {
+        setOnwheelImpl(getPeer(), EventListenerImpl.getPeer(value));
+    }
+    native static void setOnwheelImpl(long peer, long value);
+
     public EventListener getOnbeforecut() {
         return EventListenerImpl.getImpl(getOnbeforecutImpl(getPeer()));
     }
@@ -841,13 +861,6 @@
         , String selectors);
 
 
-    public void remove() throws DOMException
-    {
-        removeImpl(getPeer());
-    }
-    native static void removeImpl(long peer);
-
-
     public void webkitRequestFullScreen(short flags)
     {
         webkitRequestFullScreenImpl(getPeer()
@@ -864,6 +877,13 @@
     native static void webkitRequestFullscreenImpl(long peer);
 
 
+    public void remove() throws DOMException
+    {
+        removeImpl(getPeer());
+    }
+    native static void removeImpl(long peer);
+
+
 
 //stubs
     public void setIdAttribute(String name, boolean isId) throws DOMException {
--- a/modules/web/src/main/java-wrappers/com/sun/webkit/dom/HTMLElementImpl.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/web/src/main/java-wrappers/com/sun/webkit/dom/HTMLElementImpl.java	Fri Nov 13 09:49:50 2015 -0800
@@ -18,16 +18,6 @@
 
 
 //attributes
-    public String getId() {
-        return getIdImpl(getPeer());
-    }
-    native static String getIdImpl(long peer);
-
-    public void setId(String value) {
-        setIdImpl(getPeer(), value);
-    }
-    native static void setIdImpl(long peer, String value);
-
     public String getTitle() {
         return getTitleImpl(getPeer());
     }
@@ -188,26 +178,6 @@
     }
     native static void setSpellcheckImpl(long peer, boolean value);
 
-    public boolean getItemScope() {
-        return getItemScopeImpl(getPeer());
-    }
-    native static boolean getItemScopeImpl(long peer);
-
-    public void setItemScope(boolean value) {
-        setItemScopeImpl(getPeer(), value);
-    }
-    native static void setItemScopeImpl(long peer, boolean value);
-
-    public String getItemId() {
-        return getItemIdImpl(getPeer());
-    }
-    native static String getItemIdImpl(long peer);
-
-    public void setItemId(String value) {
-        setItemIdImpl(getPeer(), value);
-    }
-    native static void setItemIdImpl(long peer, String value);
-
 
 //functions
     public Element insertAdjacentElement(String where
--- a/modules/web/src/main/java-wrappers/com/sun/webkit/dom/HTMLIFrameElementImpl.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/web/src/main/java-wrappers/com/sun/webkit/dom/HTMLIFrameElementImpl.java	Fri Nov 13 09:49:50 2015 -0800
@@ -97,16 +97,6 @@
     }
     native static void setSandboxImpl(long peer, String value);
 
-    public boolean getSeamless() {
-        return getSeamlessImpl(getPeer());
-    }
-    native static boolean getSeamlessImpl(long peer);
-
-    public void setSeamless(boolean value) {
-        setSeamlessImpl(getPeer(), value);
-    }
-    native static void setSeamlessImpl(long peer, boolean value);
-
     public String getScrolling() {
         return getScrollingImpl(getPeer());
     }
--- a/modules/web/src/main/java-wrappers/com/sun/webkit/dom/HTMLImageElementImpl.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/web/src/main/java-wrappers/com/sun/webkit/dom/HTMLImageElementImpl.java	Fri Nov 13 09:49:50 2015 -0800
@@ -115,6 +115,16 @@
     }
     native static void setSrcImpl(long peer, String value);
 
+    public String getSrcset() {
+        return getSrcsetImpl(getPeer());
+    }
+    native static String getSrcsetImpl(long peer);
+
+    public void setSrcset(String value) {
+        setSrcsetImpl(getPeer(), value);
+    }
+    native static void setSrcsetImpl(long peer, String value);
+
     public String getUseMap() {
         return getUseMapImpl(getPeer());
     }
--- a/modules/web/src/main/java-wrappers/com/sun/webkit/dom/KeyboardEventImpl.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/web/src/main/java-wrappers/com/sun/webkit/dom/KeyboardEventImpl.java	Fri Nov 13 09:49:50 2015 -0800
@@ -26,6 +26,11 @@
     }
     native static String getKeyIdentifierImpl(long peer);
 
+    public int getLocation() {
+        return getLocationImpl(getPeer());
+    }
+    native static int getLocationImpl(long peer);
+
     public int getKeyLocation() {
         return getKeyLocationImpl(getPeer());
     }
@@ -82,7 +87,7 @@
         , boolean cancelable
         , AbstractView view
         , String keyIdentifier
-        , int keyLocation
+        , int location
         , boolean ctrlKey
         , boolean altKey
         , boolean shiftKey
@@ -95,7 +100,7 @@
             , cancelable
             , DOMWindowImpl.getPeer(view)
             , keyIdentifier
-            , keyLocation
+            , location
             , ctrlKey
             , altKey
             , shiftKey
@@ -108,7 +113,7 @@
         , boolean cancelable
         , long view
         , String keyIdentifier
-        , int keyLocation
+        , int location
         , boolean ctrlKey
         , boolean altKey
         , boolean shiftKey
@@ -121,7 +126,7 @@
         , boolean cancelable
         , AbstractView view
         , String keyIdentifier
-        , int keyLocation
+        , int location
         , boolean ctrlKey
         , boolean altKey
         , boolean shiftKey
@@ -133,7 +138,7 @@
             , cancelable
             , DOMWindowImpl.getPeer(view)
             , keyIdentifier
-            , keyLocation
+            , location
             , ctrlKey
             , altKey
             , shiftKey
@@ -145,7 +150,7 @@
         , boolean cancelable
         , long view
         , String keyIdentifier
-        , int keyLocation
+        , int location
         , boolean ctrlKey
         , boolean altKey
         , boolean shiftKey
--- a/modules/web/src/main/java-wrappers/com/sun/webkit/dom/NodeImpl.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/web/src/main/java-wrappers/com/sun/webkit/dom/NodeImpl.java	Fri Nov 13 09:49:50 2015 -0800
@@ -13,7 +13,6 @@
 import org.w3c.dom.NodeList;
 import org.w3c.dom.UserDataHandler;
 import org.w3c.dom.events.Event;
-import org.w3c.dom.events.EventException;
 import org.w3c.dom.events.EventListener;
 import org.w3c.dom.events.EventTarget;
 
@@ -507,7 +506,7 @@
         , boolean useCapture);
 
 
-    public boolean dispatchEvent(Event event) throws EventException
+    public boolean dispatchEvent(Event event) throws DOMException
     {
         return dispatchEventImpl(getPeer()
             , EventImpl.getPeer(event));
--- a/modules/web/src/main/java-wrappers/com/sun/webkit/dom/ProcessingInstructionImpl.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/web/src/main/java-wrappers/com/sun/webkit/dom/ProcessingInstructionImpl.java	Fri Nov 13 09:49:50 2015 -0800
@@ -2,17 +2,17 @@
 
 package com.sun.webkit.dom;
 
-import org.w3c.dom.DOMException;
+import org.w3c.dom.Node;
 import org.w3c.dom.ProcessingInstruction;
 import org.w3c.dom.stylesheets.StyleSheet;
 
-public class ProcessingInstructionImpl extends NodeImpl implements ProcessingInstruction {
+public class ProcessingInstructionImpl extends CharacterDataImpl implements ProcessingInstruction {
     ProcessingInstructionImpl(long peer) {
         super(peer);
     }
 
-    static ProcessingInstruction getImpl(long peer) {
-        return (ProcessingInstruction)create(peer);
+    static Node getImpl(long peer) {
+        return (Node)create(peer);
     }
 
 
@@ -22,16 +22,6 @@
     }
     native static String getTargetImpl(long peer);
 
-    public String getData() {
-        return getDataImpl(getPeer());
-    }
-    native static String getDataImpl(long peer);
-
-    public void setData(String value) throws DOMException {
-        setDataImpl(getPeer(), value);
-    }
-    native static void setDataImpl(long peer, String value);
-
     public StyleSheet getSheet() {
         return StyleSheetImpl.getImpl(getSheetImpl(getPeer()));
     }
--- a/modules/web/src/main/java-wrappers/com/sun/webkit/dom/RangeImpl.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/web/src/main/java-wrappers/com/sun/webkit/dom/RangeImpl.java	Fri Nov 13 09:49:50 2015 -0800
@@ -8,7 +8,6 @@
 import org.w3c.dom.DocumentFragment;
 import org.w3c.dom.Node;
 import org.w3c.dom.ranges.Range;
-import org.w3c.dom.ranges.RangeException;
 
 public class RangeImpl implements Range {
     private static class SelfDisposer implements DisposerRecord {
@@ -106,7 +105,7 @@
 
 //functions
     public void setStart(Node refNode
-        , int offset) throws RangeException, DOMException
+        , int offset) throws DOMException
     {
         setStartImpl(getPeer()
             , NodeImpl.getPeer(refNode)
@@ -118,7 +117,7 @@
 
 
     public void setEnd(Node refNode
-        , int offset) throws RangeException, DOMException
+        , int offset) throws DOMException
     {
         setEndImpl(getPeer()
             , NodeImpl.getPeer(refNode)
@@ -129,7 +128,7 @@
         , int offset);
 
 
-    public void setStartBefore(Node refNode) throws RangeException, DOMException
+    public void setStartBefore(Node refNode) throws DOMException
     {
         setStartBeforeImpl(getPeer()
             , NodeImpl.getPeer(refNode));
@@ -138,7 +137,7 @@
         , long refNode);
 
 
-    public void setStartAfter(Node refNode) throws RangeException, DOMException
+    public void setStartAfter(Node refNode) throws DOMException
     {
         setStartAfterImpl(getPeer()
             , NodeImpl.getPeer(refNode));
@@ -147,7 +146,7 @@
         , long refNode);
 
 
-    public void setEndBefore(Node refNode) throws RangeException, DOMException
+    public void setEndBefore(Node refNode) throws DOMException
     {
         setEndBeforeImpl(getPeer()
             , NodeImpl.getPeer(refNode));
@@ -156,7 +155,7 @@
         , long refNode);
 
 
-    public void setEndAfter(Node refNode) throws RangeException, DOMException
+    public void setEndAfter(Node refNode) throws DOMException
     {
         setEndAfterImpl(getPeer()
             , NodeImpl.getPeer(refNode));
@@ -174,7 +173,7 @@
         , boolean toStart);
 
 
-    public void selectNode(Node refNode) throws RangeException, DOMException
+    public void selectNode(Node refNode) throws DOMException
     {
         selectNodeImpl(getPeer()
             , NodeImpl.getPeer(refNode));
@@ -183,7 +182,7 @@
         , long refNode);
 
 
-    public void selectNodeContents(Node refNode) throws RangeException, DOMException
+    public void selectNodeContents(Node refNode) throws DOMException
     {
         selectNodeContentsImpl(getPeer()
             , NodeImpl.getPeer(refNode));
@@ -225,7 +224,7 @@
     native static long cloneContentsImpl(long peer);
 
 
-    public void insertNode(Node newNode) throws DOMException, RangeException
+    public void insertNode(Node newNode) throws DOMException
     {
         insertNodeImpl(getPeer()
             , NodeImpl.getPeer(newNode));
@@ -234,7 +233,7 @@
         , long newNode);
 
 
-    public void surroundContents(Node newParent) throws DOMException, RangeException
+    public void surroundContents(Node newParent) throws DOMException
     {
         surroundContentsImpl(getPeer()
             , NodeImpl.getPeer(newParent));
@@ -273,7 +272,7 @@
         , String html);
 
 
-    public boolean intersectsNode(Node refNode) throws RangeException, DOMException
+    public boolean intersectsNode(Node refNode) throws DOMException
     {
         return intersectsNodeImpl(getPeer()
             , NodeImpl.getPeer(refNode));
@@ -282,7 +281,7 @@
         , long refNode);
 
 
-    public short compareNode(Node refNode) throws RangeException, DOMException
+    public short compareNode(Node refNode) throws DOMException
     {
         return compareNodeImpl(getPeer()
             , NodeImpl.getPeer(refNode));
@@ -292,7 +291,7 @@
 
 
     public short comparePoint(Node refNode
-        , int offset) throws RangeException, DOMException
+        , int offset) throws DOMException
     {
         return comparePointImpl(getPeer()
             , NodeImpl.getPeer(refNode)
@@ -304,7 +303,7 @@
 
 
     public boolean isPointInRange(Node refNode
-        , int offset) throws RangeException, DOMException
+        , int offset) throws DOMException
     {
         return isPointInRangeImpl(getPeer()
             , NodeImpl.getPeer(refNode)
@@ -315,7 +314,7 @@
         , int offset);
 
 
-    public void expand(String unit) throws RangeException, DOMException
+    public void expand(String unit) throws DOMException
     {
         expandImpl(getPeer()
             , unit);
--- a/modules/web/src/main/java-wrappers/com/sun/webkit/dom/WheelEventImpl.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/web/src/main/java-wrappers/com/sun/webkit/dom/WheelEventImpl.java	Fri Nov 13 09:49:50 2015 -0800
@@ -20,6 +20,26 @@
     public static final int DOM_DELTA_PAGE = 0x02;
 
 //attributes
+    public double getDeltaX() {
+        return getDeltaXImpl(getPeer());
+    }
+    native static double getDeltaXImpl(long peer);
+
+    public double getDeltaY() {
+        return getDeltaYImpl(getPeer());
+    }
+    native static double getDeltaYImpl(long peer);
+
+    public double getDeltaZ() {
+        return getDeltaZImpl(getPeer());
+    }
+    native static double getDeltaZImpl(long peer);
+
+    public int getDeltaMode() {
+        return getDeltaModeImpl(getPeer());
+    }
+    native static int getDeltaModeImpl(long peer);
+
     public int getWheelDeltaX() {
         return getWheelDeltaXImpl(getPeer());
     }
@@ -30,11 +50,6 @@
     }
     native static int getWheelDeltaYImpl(long peer);
 
-    public int getDeltaMode() {
-        return getDeltaModeImpl(getPeer());
-    }
-    native static int getDeltaModeImpl(long peer);
-
     public int getWheelDelta() {
         return getWheelDeltaImpl(getPeer());
     }
--- a/modules/web/src/main/native/Source/JavaScriptCore/runtime/ArgumentsIteratorConstructor.cpp	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/web/src/main/native/Source/JavaScriptCore/runtime/ArgumentsIteratorConstructor.cpp	Fri Nov 13 09:49:50 2015 -0800
@@ -31,6 +31,7 @@
 #include "JSCJSValueInlines.h"
 #include "JSCellInlines.h"
 #include "JSGlobalObject.h"
+#include "StructureInlines.h"
 
 namespace JSC {
 
--- a/modules/web/src/main/native/Source/JavaScriptCore/runtime/JSPromiseFunctions.cpp	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/web/src/main/native/Source/JavaScriptCore/runtime/JSPromiseFunctions.cpp	Fri Nov 13 09:49:50 2015 -0800
@@ -35,6 +35,7 @@
 #include "JSPromiseConstructor.h"
 #include "JSPromiseDeferred.h"
 #include "NumberObject.h"
+#include "StructureInlines.h"
 
 namespace JSC {
 
--- a/modules/web/src/main/native/Source/JavaScriptCore/runtime/MapConstructor.cpp	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/web/src/main/native/Source/JavaScriptCore/runtime/MapConstructor.cpp	Fri Nov 13 09:49:50 2015 -0800
@@ -32,6 +32,7 @@
 #include "JSGlobalObject.h"
 #include "JSMap.h"
 #include "MapPrototype.h"
+#include "StructureInlines.h"
 
 namespace JSC {
 
--- a/modules/web/src/main/native/Source/JavaScriptCore/runtime/MapIteratorConstructor.cpp	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/web/src/main/native/Source/JavaScriptCore/runtime/MapIteratorConstructor.cpp	Fri Nov 13 09:49:50 2015 -0800
@@ -31,6 +31,7 @@
 #include "JSGlobalObject.h"
 #include "JSMapIterator.h"
 #include "MapIteratorPrototype.h"
+#include "StructureInlines.h"
 
 namespace JSC {
 
--- a/modules/web/src/main/native/Source/JavaScriptCore/runtime/SetConstructor.cpp	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/web/src/main/native/Source/JavaScriptCore/runtime/SetConstructor.cpp	Fri Nov 13 09:49:50 2015 -0800
@@ -33,6 +33,7 @@
 #include "JSSet.h"
 #include "MapData.h"
 #include "SetPrototype.h"
+#include "StructureInlines.h"
 
 namespace JSC {
 
--- a/modules/web/src/main/native/Source/JavaScriptCore/runtime/SetIteratorConstructor.cpp	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/web/src/main/native/Source/JavaScriptCore/runtime/SetIteratorConstructor.cpp	Fri Nov 13 09:49:50 2015 -0800
@@ -31,6 +31,7 @@
 #include "JSGlobalObject.h"
 #include "JSSetIterator.h"
 #include "SetIteratorPrototype.h"
+#include "StructureInlines.h"
 
 namespace JSC {
 
--- a/modules/web/src/main/native/Source/JavaScriptCore/runtime/WeakMapConstructor.cpp	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/web/src/main/native/Source/JavaScriptCore/runtime/WeakMapConstructor.cpp	Fri Nov 13 09:49:50 2015 -0800
@@ -30,6 +30,7 @@
 #include "JSCellInlines.h"
 #include "JSGlobalObject.h"
 #include "JSWeakMap.h"
+#include "StructureInlines.h"
 #include "WeakMapPrototype.h"
 
 namespace JSC {
--- a/modules/web/src/main/native/Source/WebCore/mapfile-macosx	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/web/src/main/native/Source/WebCore/mapfile-macosx	Fri Nov 13 09:49:50 2015 -0800
@@ -611,6 +611,7 @@
                _Java_com_sun_webkit_dom_ElementImpl_getElementsByTagNameImpl
                _Java_com_sun_webkit_dom_ElementImpl_getElementsByTagNameNSImpl
                _Java_com_sun_webkit_dom_ElementImpl_getFirstElementChildImpl
+               _Java_com_sun_webkit_dom_ElementImpl_getIdImpl
                _Java_com_sun_webkit_dom_ElementImpl_getLastElementChildImpl
                _Java_com_sun_webkit_dom_ElementImpl_getNextElementSiblingImpl
                _Java_com_sun_webkit_dom_ElementImpl_getOffsetHeightImpl
@@ -688,6 +689,7 @@
                _Java_com_sun_webkit_dom_ElementImpl_setAttributeNodeImpl
                _Java_com_sun_webkit_dom_ElementImpl_setAttributeNodeNSImpl
                _Java_com_sun_webkit_dom_ElementImpl_setClassNameImpl
+               _Java_com_sun_webkit_dom_ElementImpl_setIdImpl
                _Java_com_sun_webkit_dom_ElementImpl_setOnabortImpl
                _Java_com_sun_webkit_dom_ElementImpl_setOnbeforecopyImpl
                _Java_com_sun_webkit_dom_ElementImpl_setOnbeforecutImpl
--- a/modules/web/src/main/native/Source/WebCore/mapfile-vers	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/web/src/main/native/Source/WebCore/mapfile-vers	Fri Nov 13 09:49:50 2015 -0800
@@ -6,7 +6,7 @@
                WTFReportAssertionFailure;
                _ZN3WTF10fastMallocEj;
                _ZN3WTF10fastMallocEm;
-               _ZN3WTF8fastFreeEPv;	       
+               _ZN3WTF8fastFreeEPv;
                _ZN3WTF11currentTimeEv;
                JSCheckScriptSyntax;
                JSClassCreate;
@@ -613,6 +613,7 @@
                Java_com_sun_webkit_dom_ElementImpl_getElementsByTagNameImpl;
                Java_com_sun_webkit_dom_ElementImpl_getElementsByTagNameNSImpl;
                Java_com_sun_webkit_dom_ElementImpl_getFirstElementChildImpl;
+               Java_com_sun_webkit_dom_ElementImpl_getIdImpl;
                Java_com_sun_webkit_dom_ElementImpl_getLastElementChildImpl;
                Java_com_sun_webkit_dom_ElementImpl_getNextElementSiblingImpl;
                Java_com_sun_webkit_dom_ElementImpl_getOffsetHeightImpl;
@@ -690,6 +691,7 @@
                Java_com_sun_webkit_dom_ElementImpl_setAttributeNodeImpl;
                Java_com_sun_webkit_dom_ElementImpl_setAttributeNodeNSImpl;
                Java_com_sun_webkit_dom_ElementImpl_setClassNameImpl;
+               Java_com_sun_webkit_dom_ElementImpl_setIdImpl;
                Java_com_sun_webkit_dom_ElementImpl_setOnabortImpl;
                Java_com_sun_webkit_dom_ElementImpl_setOnbeforecopyImpl;
                Java_com_sun_webkit_dom_ElementImpl_setOnbeforecutImpl;
--- a/modules/web/src/main/native/Source/WebCore/platform/URL.cpp	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/web/src/main/native/Source/WebCore/platform/URL.cpp	Fri Nov 13 09:49:50 2015 -0800
@@ -312,6 +312,9 @@
 {
     m_isValid = false;
     m_protocolIsInHTTPFamily = false;
+#if PLATFORM(JAVA)
+    m_protocolIsInJar = false;
+#endif
     m_schemeEnd = 0;
     m_userStart = 0;
     m_userEnd = 0;
@@ -425,6 +428,11 @@
             if (str[0] == '#') {
                 appendASCII(base.m_string.left(base.m_queryEnd), str, len, parseBuffer);
                 parse(parseBuffer.data(), &relative);
+#if PLATFORM(JAVA)
+            } else if(base.isJarFile()) {
+                appendASCII(base.m_string.left(base.m_pathAfterLastSlash), str, len, parseBuffer);
+                parse(parseBuffer.data(), &relative);
+#endif
             } else {
                 m_string = relative;
                 invalidate();
@@ -1177,6 +1185,13 @@
         && isLetterMatchIgnoringCase(url[2], 'l')
         && isLetterMatchIgnoringCase(url[3], 'e');
 
+#if PLATFORM(JAVA)
+    m_protocolIsInJar = schemeEnd == 3
+        && isLetterMatchIgnoringCase(url[0], 'j')
+        && isLetterMatchIgnoringCase(url[1], 'a')
+        && isLetterMatchIgnoringCase(url[2], 'r');
+#endif
+
     m_protocolIsInHTTPFamily = isLetterMatchIgnoringCase(url[0], 'h')
         && isLetterMatchIgnoringCase(url[1], 't')
         && isLetterMatchIgnoringCase(url[2], 't')
--- a/modules/web/src/main/native/Source/WebCore/platform/URL.h	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/web/src/main/native/Source/WebCore/platform/URL.h	Fri Nov 13 09:49:50 2015 -0800
@@ -182,6 +182,7 @@
 
 #if PLATFORM(JAVA)
     String deprecatedString() const;
+    bool isJarFile() const { return m_protocolIsInJar; }
 #endif
     const URL* innerURL() const { return 0; }
 
@@ -208,6 +209,9 @@
     String m_string;
     bool m_isValid : 1;
     bool m_protocolIsInHTTPFamily : 1;
+#if PLATFORM(JAVA)
+    bool m_protocolIsInJar : 1;
+#endif
 
     int m_schemeEnd;
     int m_userStart;
--- a/modules/web/src/main/native/Source/WebCore/platform/graphics/PathTraversalState.cpp	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/web/src/main/native/Source/WebCore/platform/graphics/PathTraversalState.cpp	Fri Nov 13 09:49:50 2015 -0800
@@ -25,7 +25,6 @@
 
 namespace WebCore {
 
-static const float kPathSegmentLengthTolerance = 0.00001f;
 
 static inline FloatPoint midPoint(const FloatPoint& first, const FloatPoint& second)
 {
@@ -43,9 +42,15 @@
         : start(s)
         , control(c)
         , end(e)
+        , splitDepth(0)
     {
     }
     
+    double magnitudeSquared() const
+    {
+        return ((double)(start.dot(start)) + (double)(control.dot(control)) + (double)(end.dot(end))) / 9.0;
+    }
+
     float approximateDistance() const
     {
         return distanceLine(start, control) + distanceLine(control, end);
@@ -62,11 +67,14 @@
 
         left.start = start;
         right.end = end;
+
+        left.splitDepth = right.splitDepth = splitDepth + 1;
     }
     
     FloatPoint start;
     FloatPoint control;
     FloatPoint end;
+    unsigned short splitDepth;
 };
 
 struct CubicBezier {
@@ -76,9 +84,15 @@
         , control1(c1)
         , control2(c2)
         , end(e)
+        , splitDepth(0)
     {
     }
     
+    double magnitudeSquared() const
+    {
+        return ((double)(start.dot(start)) + (double)(control1.dot(control1)) + (double)(control2.dot(control2)) + (double)(end.dot(end))) / 16.0;
+    }
+
     float approximateDistance() const
     {
         return distanceLine(start, control1) + distanceLine(control1, control2) + distanceLine(control2, end);
@@ -99,24 +113,26 @@
         FloatPoint leftControl2ToRightControl1 = midPoint(left.control2, right.control1);
         left.end = leftControl2ToRightControl1;
         right.start = leftControl2ToRightControl1;
+
+        left.splitDepth = right.splitDepth = splitDepth + 1;
     }
     
     FloatPoint start;
     FloatPoint control1;
     FloatPoint control2;
     FloatPoint end;
+    unsigned short splitDepth;
 };
 
-// FIXME: This function is possibly very slow due to the ifs required for proper path measuring
-// A simple speed-up would be to use an additional boolean template parameter to control whether
-// to use the "fast" version of this function with no PathTraversalState updating, vs. the slow
-// version which does update the PathTraversalState.  We'll have to shark it to see if that's necessary.
-// Another check which is possible up-front (to send us down the fast path) would be to check if
-// approximateDistance() + current total distance > desired distance
 template<class CurveType>
 static float curveLength(PathTraversalState& traversalState, CurveType curve)
 {
-    static const unsigned curveStackDepthLimit = 20;
+    static const unsigned short curveSplitDepthLimit = 20;
+    static const double pathSegmentLengthToleranceSquared = 1.e-16;
+
+    double curveScaleForToleranceSquared = curve.magnitudeSquared();
+    if (curveScaleForToleranceSquared < pathSegmentLengthToleranceSquared)
+        return 0;
 
     Vector<CurveType> curveStack;
     curveStack.append(curve);
@@ -124,7 +140,8 @@
     float totalLength = 0;
     do {
         float length = curve.approximateDistance();
-        if ((length - distanceLine(curve.start, curve.end)) > kPathSegmentLengthTolerance && curveStack.size() <= curveStackDepthLimit) {
+        double lengthDiscrepancy = length - distanceLine(curve.start, curve.end);
+        if ((lengthDiscrepancy * lengthDiscrepancy) / curveScaleForToleranceSquared > pathSegmentLengthToleranceSquared && curve.splitDepth < curveSplitDepthLimit) {
             CurveType leftCurve;
             CurveType rightCurve;
             curve.split(leftCurve, rightCurve);
@@ -160,20 +177,20 @@
 float PathTraversalState::closeSubpath()
 {
     float distance = distanceLine(m_current, m_start);
-    m_current = m_control1 = m_control2 = m_start;
+    m_current = m_start;
     return distance;
 }
 
 float PathTraversalState::moveTo(const FloatPoint& point)
 {
-    m_current = m_start = m_control1 = m_control2 = point;
+    m_current = m_start = point;
     return 0;
 }
 
 float PathTraversalState::lineTo(const FloatPoint& point)
 {
     float distance = distanceLine(m_current, point);
-    m_current = m_control1 = m_control2 = point;
+    m_current = point;
     return distance;
 }
 
@@ -181,9 +198,6 @@
 {
     float distance = curveLength<QuadraticBezier>(*this, QuadraticBezier(m_current, newControl, newEnd));
 
-    m_control1 = newControl;
-    m_control2 = newEnd;
-
     if (m_action != TraversalPointAtLength && m_action != TraversalNormalAngleAtLength) 
         m_current = newEnd;
 
@@ -193,9 +207,6 @@
 float PathTraversalState::cubicBezierTo(const FloatPoint& newControl1, const FloatPoint& newControl2, const FloatPoint& newEnd)
 {
     float distance = curveLength<CubicBezier>(*this, CubicBezier(m_current, newControl1, newControl2, newEnd));
-
-    m_control1 = newEnd;
-    m_control2 = newControl2;
  
     if (m_action != TraversalPointAtLength && m_action != TraversalNormalAngleAtLength) 
         m_current = newEnd;
--- a/modules/web/src/main/native/Source/WebCore/platform/graphics/PathTraversalState.h	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/web/src/main/native/Source/WebCore/platform/graphics/PathTraversalState.h	Fri Nov 13 09:49:50 2015 -0800
@@ -55,8 +55,6 @@
 
     FloatPoint m_current;
     FloatPoint m_start;
-    FloatPoint m_control1;
-    FloatPoint m_control2;
 
     float m_totalLength;
     unsigned m_segmentIndex;
--- a/modules/web/src/main/native/Source/WebCore/platform/java/DataObjectJava.h	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/web/src/main/native/Source/WebCore/platform/java/DataObjectJava.h	Fri Nov 13 09:49:50 2015 -0800
@@ -157,7 +157,7 @@
         void asFilenames(Vector<String>& result) const {
             if(m_url.isEmpty() && !m_filenames.isEmpty())
                 result = m_filenames;
-            else
+            else if(!m_url.isEmpty())
                 result.append(m_url.string());
         }
 
--- a/modules/web/src/main/native/Tools/DumpRenderTree/java/DumpRenderTree.cpp	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/web/src/main/native/Tools/DumpRenderTree/java/DumpRenderTree.cpp	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
  */
 #include "config.h"
 
--- a/modules/web/src/test/java/javafx/scene/web/DOMTest.java	Thu Nov 12 16:58:55 2015 -0800
+++ b/modules/web/src/test/java/javafx/scene/web/DOMTest.java	Fri Nov 13 09:49:50 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, 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
@@ -49,6 +49,25 @@
  */
 public class DOMTest extends TestBase {
 
+    @Test public void testGetSetId() {
+        final Document doc = getDocumentFor("src/test/resources/html/dom.html");
+        submit(() -> {
+            NodeList ee = doc.getElementsByTagName("p");
+
+            int numProcessed = 0;
+                for (int i = 0 ; i < ee.getLength() ; i++) {
+                    Node n = ee.item(i);
+                    String s = ((ElementImpl)n).getId();
+                    String newId = "new" + s;
+                    ((ElementImpl)n).setId(newId);
+                    assertEquals("New element id", newId, ((ElementImpl)n).getId());
+                    numProcessed++;
+                }
+
+            assertTrue("Number of processed Elements is equal to 0", numProcessed > 0);
+        });
+    }
+
     @Test public void testEmptyTextContent() {
         final Document doc = getDocumentFor("src/test/resources/html/dom.html");
         submit(() -> {