 import flash.display.BitmapData;
 import flash.display.Shader;
 import flash.filters.ShaderFilter;
+import flash.geom.Point;
+import flash.geom.Rectangle;
 import flash.utils.ByteArray;
 
 import mx.core.IUIComponent;

            shader = new Shader(shaderByteCode);
            if (shader.data)
            {
                shader.data.from.input = bitmapFrom;
                shader.data.to.input = bitmapTo;
                

        disposeFrom = (bitmapFrom == null);
        disposeTo = (bitmapTo == null);
        
        // If we got the bitmaps from the state information in a transition, they
        // are stored along with the visual bounds of the object in an Object
        var boundsFrom:Rectangle;
        var boundsTo:Rectangle;
        var bmHolder:Object;
        
        // TODO (chaase): Should take the 'from' snapshot on the
        // fly, in case the object has changed since the overall
        // effect (composite, etc) started much earlier and the
        // object has changed since propertyChanges was initialized 
        if (!bitmapFrom && propertyChanges &&
            propertyChanges.start["bitmapInfo"] !== undefined)
        {
            bmHolder = propertyChanges.start["bitmapInfo"];
            bitmapFrom = bmHolder["bitmap"];
            boundsFrom = bmHolder["bounds"];
        }
        if (!bitmapTo && propertyChanges &&
            propertyChanges.end["bitmapInfo"] !== undefined)
        {
            bmHolder = propertyChanges.end["bitmapInfo"];
            bitmapTo = bmHolder["bitmap"];
            boundsTo = bmHolder["bounds"];
        }
        if (!bitmapFrom)
            if (propertyChanges &&
                (propertyChanges.start["visible"] == false ||
