                 // We need to restore both the matrix translation and the rotation translation
                 transformMatrix.translate(tx + bitmapTopLeft.x - 1, ty + bitmapTopLeft.y - 1);
                 // Save off the bounds so we can compare it the next time this function is called
-                lastBoundsWidth = bounds.width;
-                lastBoundsHeight = bounds.height;
+                lastBoundsWidth = targetBounds.width;
+                lastBoundsHeight = targetBounds.height;
                 
                 nonRepeatSourceCreated = true;
                 

	/**
	 *  @private
	 */
	public function begin(target:Graphics, bounds:Rectangle):void
	{		
        var sourceAsBitmapData:BitmapData = _bitmapData;
        

            
            // If fillMode is scale and our bitmapdata width and height are > 0, scale to fill the content area  
            if (fillMode == BitmapFillMode.SCALE && sourceAsBitmapData.width > 0 && sourceAsBitmapData.height > 0)
                transformMatrix.scale((targetBounds.width/sourceAsBitmapData.width), (targetBounds.height/sourceAsBitmapData.height)); 
            
            transformMatrix.scale(scaleX, scaleY);
            transformMatrix.rotate(rotation * RADIANS_PER_DEGREES);
            transformMatrix.translate(x + targetBounds.left + transformX, y + targetBounds.top + transformY);
        }
        
        // If repeat is true, fillMode is repeat, or if the source bitmap size  
        // equals or exceeds the targetBounds, just use the source bitmap
        if (repeatFill || 
            (MatrixUtil.isDeltaIdentity(transformMatrix) && 
             transformMatrix.tx == targetBounds.left &&
             transformMatrix.ty == targetBounds.top &&
             targetBounds.width <= sourceAsBitmapData.width && 
             targetBounds.height <= sourceAsBitmapData.height))
        {
            if (nonRepeatAlphaSource && nonRepeatSourceCreated)
            {
