             focusObject.visible = false;
     }
 
+    /**
+     *  @private
+     *  Called when our associated layer parent needs to inform us of 
+     *  a change to it's visibility or alpha.
+     */
+    protected function layer_PropertyChange(event:PropertyChangeEvent):void
+    {
+        switch (event.property)
+        {
+            case "visible":
+            {
+                var newValue:Boolean = (event.newValue && _visible);            
+                if (newValue != $visible)
+                    $visible = newValue;
+                break;
+            }
+            case "alpha":
+            {
+                var newAlpha:Number = Number(event.newValue) * _alpha;
+                if (newAlpha != $alpha)
+                    $alpha = newAlpha;
+                break;
+            }
+        }
+    }
+    
     //--------------------------------------------------------------------------
     //
     //  Event handlers: Validation

        super.filters = clonedFilters;
    }

    //--------------------------------------------------------------------------
    //
    //  Properties: Display
    //
    //--------------------------------------------------------------------------

    //----------------------------------
    //  $parent
    //----------------------------------

    //  alpha
    //----------------------------------

    /**
     *  @private
     *  Storage for the alpha property.
     */
    private var _alpha:Number = 1.0;
    
    [Bindable("alphaChanged")]
    [Inspectable(defaultValue="1.0", category="General", verbose="1")]

    /**
     *  @private
     */
    override public function get alpha():Number
    {
        // Here we roundtrip alpha in the same manner as the 
        // player (purposely introducing a rounding error).
        return int(_alpha * 256.0) / 256.0;
    }
    
    /**
     *  @private
     */
    override public function set alpha(value:Number):void
    { 
        if (_alpha != value)
        {
            _alpha = value;
        
            if (layer)
                value = value * layer.computedAlpha; 
            
            $alpha = value;

            dispatchEvent(new Event("alphaChanged"));
        }
    }

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