 	
 	        // Set new value
 	        setPropertyValue(obj, propName, newValue, oldValue);
-	        
-	        // Save state in case our value is changed again while applied.  This can
-	        // occur when our value property is databound.
-	        applied = true;
-	        this.parentContext = parent;
-        }
+        }
+        else if (!applied)
+        {
+            // Our target context is unavailable so we attempt to register
+            // a listener on our parent document to detect when/if it becomes
+            // valid.
+            addContextListener(target);
+        }
+        
+        // Save state in case our value or target is changed while applied. This
+        // can occur when our value property is databound or when a target is 
+        // deferred instantiated.
+        applied = true;
     }
 
     /**

	                setPropertyValue(obj, relatedProps[i],
	                        oldRelatedValues[i], oldRelatedValues[i]);
	            }
	        }
	        
	        // Clear our flags and override context.
	        applied = false;
	        parentContext = null;
	        appliedTarget = null;
        }
    }

    /**

     *  @playerversion AIR 1.1
     *  @productversion Flex 3
     */
    override public function apply(parent:UIComponent):void
    {   
        parentContext = parent;
        var obj:* = getOverrideContext(target, parent);
        if (obj != null)
        {
