     
         return target;
     }
+ 
+    /**
+     * @private
+     * If the target of our override is a String (representing a property), 
+     * we register a PROPERTY_CHANGE listener to determine when/if our target 
+     * context becomes available or changes.  
+     */ 
+    protected function addContextListener(target:Object):void
+    {
+        if (target is String && parentContext != null)
+        {
+            targetProperty = target as String;
+            parentContext.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE,
+                context_propertyChangeHandler);
+        }
+    }
+    
+    /**
+     * @private
+     * Unregister our PROPERTY_CHANGE listener.
+     */ 
+    protected function removeContextListener():void
+    {
+        if (parentContext != null)
+        {
+            parentContext.removeEventListener(PropertyChangeEvent.PROPERTY_CHANGE,
+                context_propertyChangeHandler);
+        }
+    }
+    
+    /**
+     * @private
+     * Called when our target context is set.  We re-apply our override
+     * if appropriate.
+     */
+    protected function context_propertyChangeHandler(event:PropertyChangeEvent):void
+    {
+        if (event.property == targetProperty && event.newValue != null)
+        {
+            apply(parentContext);
+            removeContextListener();
+        }
+    }
 }
 
 }
     *  @productversion Flex 3
     */
    public function OverrideBase() {}
    
    //--------------------------------------------------------------------------
    //
    //  Methods
    //
    //--------------------------------------------------------------------------
    
    /**
     * @private 

package mx.states
{
    
import mx.core.UIComponent;
import mx.events.PropertyChangeEvent;
import mx.utils.OnDemandEventDispatcher;

/**
