     //  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
-    {
-        super.alpha = value;
-
-        dispatchEvent(new Event("alphaChanged"));
+    { 
+        if (_alpha != value)
+        {
+            _alpha = value;
+        
+            if (layer)
+                value = value * layer.computedAlpha; 
+            
+            $alpha = value;
+
+            dispatchEvent(new Event("alphaChanged"));
+        }
     }
 
     //----------------------------------

        super.filters = clonedFilters;
    }

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

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

            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
