     private function setupParentObj(newParent:Object):void
     {
 		var eventDispatcher:IEventDispatcher;
-        var p:String;
-
+        var eventName:String;
+
+        // Remove listeners from the old "watched" object.
         if (parentObj != null &&
-            parentObj is IEventDispatcher &&
-            events != null)
+            parentObj is IEventDispatcher)
         {
             eventDispatcher = parentObj as IEventDispatcher;
-            
-			for (p in events)
-            {
-                eventDispatcher.removeEventListener(p, eventHandler);
+
+            // events can be null when watching a function marked with
+            // [Bindable(style="true")].
+            if (events != null)
+            {
+                for (eventName in events)
+                {
+                    if (eventName != "__NoChangeEvent__")
+                    {
+                        eventDispatcher.removeEventListener(eventName, eventHandler);
+                    }
+                }
+            }
+
+            if (isStyle)
+            {
+                // For example, if the data binding expression is
+                // {getStyle("color")}, the eventName will be
+                // "colorChanged".
+                eventName = parameterFunction.apply(document) + "Changed";
+                eventDispatcher.removeEventListener(eventName, eventHandler);
+                eventDispatcher.removeEventListener("allStylesChanged", eventHandler);
             }
         }
         
 		parentObj = newParent;
         
+        // Add listeners the new "watched" object.
         if (parentObj != null &&
-            parentObj is IEventDispatcher &&
-            events != null)
+            parentObj is IEventDispatcher)
         {
             eventDispatcher = parentObj as IEventDispatcher;
 
-            for (p in events)
-            {
-                if (p != "__NoChangeEvent__")
-				{
-                    eventDispatcher.addEventListener(
-						p, eventHandler, false, EventPriority.BINDING, true);
-				}
+            // events can be null when watching a function marked with
+            // [Bindable(style="true")].
+            if (events != null)
+            {
+                for (eventName in events)
+                {
+                    if (eventName != "__NoChangeEvent__")
+                    {
+                        eventDispatcher.addEventListener(eventName, eventHandler,
+                                                         false,
+                                                         EventPriority.BINDING,
+                                                         true);
+                    }
+                }
+            }
+
+            if (isStyle)
+            {
+                // For example, if the data binding expression is
+                // {getStyle("color")}, the eventName will be
+                // "colorChanged".
+                eventName = parameterFunction.apply(document) + "Changed";
+                eventDispatcher.addEventListener(eventName, eventHandler, false,
+                                                 EventPriority.BINDING, true);                
+                eventDispatcher.addEventListener("allStylesChanged", eventHandler, false,
+                                                 EventPriority.BINDING, true);                
             }
         }
     }

    {
        updateFunctionReturn();

        notifyListeners(events[event.type]);
    }
}


        this.parameterFunction = parameterFunction;
        this.events = events;
        this.functionGetter = functionGetter;
        this.isStyle = isStyle;
    }

	//--------------------------------------------------------------------------
