diff --git a/lib/mixins/property-effects.html b/lib/mixins/property-effects.html
index 5cb13c7233..fb83f48312 100644
--- a/lib/mixins/property-effects.html
+++ b/lib/mixins/property-effects.html
@@ -356,7 +356,7 @@
toPath = Polymer.Path.translate(fromProp, toPath, fromPath);
value = detail && detail.value;
} else {
- value = event.target[fromProp];
+ value = event.currentTarget[fromProp];
}
value = negate ? !value : value;
if (!inst[TYPES.READ_ONLY] || !inst[TYPES.READ_ONLY][toPath]) {
diff --git a/test/unit/property-effects.html b/test/unit/property-effects.html
index d4ed2e4442..265cab65b9 100644
--- a/test/unit/property-effects.html
+++ b/test/unit/property-effects.html
@@ -329,6 +329,18 @@
assert.equal(el.observerCounts.customEventValueChanged, 1, 'custom bound property observer not called');
});
+ test('custom notification bubbling event to property', function() {
+ const child = document.createElement('div');
+ el.$.boundChild.appendChild(child);
+
+ el.$.boundChild.customEventValue = 42;
+ child.dispatchEvent(new Event('custom', {bubbles: true}));
+ console.warn(el.$.boundChild.customEventValue);
+ console.warn(el.$.boundChild.customEventValue);
+ assert.equal(el.customEventValue, 42, 'custom bound property incorrect');
+ assert.equal(el.observerCounts.customEventValueChanged, 1, 'custom bound property observer not called');
+ });
+
test('custom notification event to path', function() {
el.clearObserverCounts();
el.$.boundChild.customEventObjectValue = 84;