     private var _dragScrollTimer:Timer;
     private var _dragScrollDelta:Point;
     private var _dragScrollEvent:DragEvent;
-    mx_internal var dragScrollRegionSize:Number = 20;
+    mx_internal var dragScrollRegionSizeHorizontal:Number = 20;
+	mx_internal var dragScrollRegionSizeVertical:Number = 20;
     mx_internal var dragScrollSpeed:Number = 5;
+	mx_internal var dragScrollInitialDelay:int = 250;
     mx_internal var dragScrollInterval:int = 32;
     mx_internal var dragScrollHidesIndicator:Boolean = false;
     

        
        // Re-dispatch the event so that the drag initiator handles it as if
        // the DragProxy is dispatching in response to user input.
        var dragEvent:DragEvent = _dragScrollEvent;
        dragEvent.target.dispatchEvent(dragEvent);
    }
    
    /**

        if (!scrollRect)
            return null;

		// Make sure that the drag-scrolling regions don't overlap 
		var x:Number = dropLocation.dropPoint.x;
		var y:Number = dropLocation.dropPoint.y;
		
		var horizontalRegionSize:Number = Math.min(dragScrollRegionSizeHorizontal, layoutTarget.width/2);
		var verticalRegionSize:Number = Math.min(dragScrollRegionSizeVertical, layoutTarget.height/2);
		// Return early if the mouse is outside of the drag-scroll region.
		if (scrollRect.left + horizontalRegionSize < x && x < scrollRect.right - horizontalRegionSize &&
			scrollRect.top + verticalRegionSize < y && y < scrollRect.bottom - verticalRegionSize )
			return null;
		
		if (timeElapsed < dragScrollInitialDelay)
			return new Point(); // Return zero point to continue firing events, but not actually scroll.
		timeElapsed -= dragScrollInitialDelay;

        // Speedup based on time elapsed
        var timeSpeedUp:Number = Math.min(timeElapsed, 2000) / 2000;
