 {
 
 import flash.display.DisplayObject;
-import flash.display.DisplayObjectContainer;
 import flash.events.Event;
 import flash.events.EventDispatcher;
 import flash.events.IEventDispatcher;
-import flash.events.KeyboardEvent;
 import flash.events.MouseEvent;
+import flash.geom.Matrix;
 import flash.geom.Point;
-import flash.system.ApplicationDomain;
 
 import mx.core.DragSource;
 import mx.core.IFlexDisplayObject;
 import mx.core.IUIComponent;
 import mx.core.UIComponentGlobals;
 import mx.core.mx_internal;
-import mx.effects.EffectInstance;
-import mx.effects.Move;
-import mx.effects.Zoom;
 import mx.events.DragEvent;
 import mx.events.Request;
-import mx.managers.ISystemManager;
 import mx.managers.dragClasses.DragProxy;
-import mx.managers.SystemManager;
 import mx.styles.CSSStyleDeclaration;
 import mx.styles.StyleManager;
+import mx.utils.MatrixUtil;
 
 use namespace mx_internal;
 


		dragProxy.allowMove = allowMove;
		
		var nonNullTarget:Object = mouseEvent.target;
		if (nonNullTarget == null)
			nonNullTarget = dragInitiator;
		

		var mouseX:Number = point.x;
		var mouseY:Number = point.y;

        // Find the proxy origin in global space
        var proxyOrigin:Point = DisplayObject(dragInitiator).localToGlobal(new Point(-xOffset, -yOffset));
        proxyOrigin = DisplayObject(sandboxRoot).globalToLocal(proxyOrigin);
        
        // Set dragProxy.offset to the mouse offset within the drag proxy.
        dragProxy.xOffset = mouseX - proxyOrigin.x;
        dragProxy.yOffset = mouseY - proxyOrigin.y;
        
        // Setup the initial position of the drag proxy.
        dragProxy.x = proxyOrigin.x;
        dragProxy.y = proxyOrigin.y;
		
		// Remember the starting location of the drag proxy so it can be
		// "snapped" back if the drop was refused.
