 			{
 				bitmapData = new BitmapData(tmpSprite.width, tmpSprite.height, true, 0);
 				bitmapData.draw(tmpSprite, new Matrix());
+                bitmapCreated = true;
 			}
             
             // If the bitmapData isn't transparent (ex. JPEG), then copy it into a transparent bitmapData
             if (!bitmapData.transparent)
             {
-                // TODO (jszeto) : Dispose of this bitmap when we no longer need it
+                // FIXME (jszeto) : Only clone this if alpha is not 1. Dispose of this bitmap when we no longer need it
                 var transparentBitmap:BitmapData = new BitmapData(bitmapData.width, bitmapData.height, true);
                 transparentBitmap.draw(bitmapData);
-                _source = transparentBitmap;
+                bitmapCreated = true;
+                bitmapData = transparentBitmap;
             }
-            else
-            {
-	
-			    _source = bitmapData;
-            }
-			
-            applyAlphaMultiplier = true;
-			dispatchFillChangedEvent("source", oldValue, bitmapData);
+            
+            _source = value;
+            setBitmapData(bitmapData, bitmapCreated);
+            
+			dispatchFillChangedEvent("source", oldValue, value);
         }
 	}
 

															oldValue, value));
        regenerateNonRepeatSource = true;
	}
}

}

import flash.display.BitmapData;
import flash.display.DisplayObject;
import flash.display.Graphics;
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.IOErrorEvent;
import flash.events.SecurityErrorEvent;
import flash.geom.ColorTransform;
import flash.geom.Matrix;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.net.URLRequest;
import flash.system.LoaderContext;

import mx.events.PropertyChangeEvent;
import mx.geom.CompoundTransform;
import mx.utils.MatrixUtil;



/** 
