             }
             else
             {
+                // FIXME chaase: why anything but origAlpha here?
                 alphaTo = (alphaFrom == 0) ? origAlpha : 0; 
             }
         }

            }
            else
            {
                alphaFrom = 0;
                alphaTo = origAlpha;
            }
        }
        else if (isNaN(alphaFrom))
        {
            alphaFrom = (alphaTo == 0) ? origAlpha : 0;
        }
        else if (isNaN(alphaTo))

     */
    override public function play():void
    {
        // FIXME chaase: clean up this logic and make it simpler to decide whether
        // and object is appearing or disappearing, then set the starting/ending
        // values appropriately. Also, reuse the lazy-evaluation code for
        // animations by supplying NaNs for values to be filled in with
        // state values from propChanges later
        
        // Remember the original value of the target object's alpha
        origAlpha = target.alpha;
        var propChanges:PropertyChanges = propertyChanges;
        
        // If nobody assigned a value, make this a "show" effect.
        if (isNaN(alphaFrom) && isNaN(alphaTo))
        {
            var startAlpha:Number = origAlpha;
            var endAlpha:Number = origAlpha;
            if (propChanges && propChanges.end["alpha"] !== undefined &&
                propChanges.end["alpha"] != propChanges.start["alpha"])
            {
                endAlpha = propChanges.end["alpha"];
            }
            if (propChanges && propChanges.end["visible"] !== undefined &&
                propChanges.end["visible"] != propChanges.start["visible"])
            {
                alphaFrom = propChanges.start["visible"] ? startAlpha : 0;
                alphaTo = propChanges.end["visible"] ? endAlpha : 0;
                // Force target to be visible at effect 
                restoreAlpha = !propChanges.end["visible"];
            }
            else if (propChanges && propChanges.end["parent"] !== undefined &&
                propChanges.end["parent"] != propChanges.start["parent"])
            {
                alphaFrom = propChanges.start["parent"] ? startAlpha : 0;
                alphaTo = propChanges.end["parent"] ? endAlpha : 0;
                restoreAlpha = !propChanges.end["parent"];
                if (alphaFrom == 0)
                {
                    target.alpha = 0;
