         animateShaderTransitionInstance.bitmapFrom = bitmapFrom;
         animateShaderTransitionInstance.bitmapTo = bitmapTo;
 
-        // Iterate through the data properties of the original shader, copying
-        // each parameter to shaderCopy. Skip the 'input' parameters, as these
-        // will be set by the animation and we do not want a reference to the
-        // same common objects.
-        animateShaderTransitionInstance.shaderCode = 
-            (shaderCode is ByteArray) ?
-            ByteArray(shaderCode) :
-            new shaderCode();
+        if (!shaderCode)
+            // User should always supply a shader, but if they don't just 
+            // pass it on
+            animateShaderTransitionInstance.shaderCode = null;
+        else
+            animateShaderTransitionInstance.shaderCode = 
+                (shaderCode is ByteArray) ?
+                ByteArray(shaderCode) :
+                new shaderCode();
         animateShaderTransitionInstance.shaderProperties = shaderProperties;
     }
 }

////////////////////////////////////////////////////////////////////////////////
package mx.effects
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.DisplayObject;
import flash.display.IBitmapDrawable;
import flash.display.Shader;
import flash.display.ShaderData;
import flash.display.ShaderInput;
import flash.display.Sprite;
import flash.geom.Matrix;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.utils.ByteArray;

import mx.effects.effectClasses.FxAnimateShaderTransitionInstance;
import mx.graphics.graphicsClasses.GraphicElement;
import mx.utils.ObjectUtil;

/**
 * This effect animates a transition between two bitmaps,

    public static function getSnapshot(target:Object):BitmapData
    {
        if (target is GraphicElement)
            return GraphicElement(target).getBitmapData(true, 0, false);
        else if (!(target is IUIComponent))
            throw new Error("FxAnimateShaderTransition can only operate on" + 
                    " IUIComponent and GraphicElement instances");
        // TODO (chaase): Does this utility function belong in a more central
        // location, like UIComponent, or as part of ImageSnapshot?
        
        var topLevel:Sprite = Sprite(IUIComponent(target).systemManager);   
        var rectBounds:Rectangle = target.getBounds(topLevel);
        var m:Matrix = target.transform.concatenatedMatrix;
        // truncate position because the fractional offset will already be figured
        // into the filter placement onto the target. 
        // TODO (chaase): There are still some offset
        // problems with objects inside of rotated parents, depending on the angle.
        if (m)
            m.translate(-(Math.floor(rectBounds.x)), -(Math.floor(rectBounds.y)));
        var bmData:BitmapData = new BitmapData(rectBounds.width, 
            rectBounds.height, true, 0);
        bmData.draw(IBitmapDrawable(target), m);

        return bmData;
