         // only if successfully sized and positioned
         _dropIndicator.visible = false;
 
+        // Check for drag scrolling
+        var dragScrollElapsedTime:int = 0;
+        if (_dragScrollTimer)
+            dragScrollElapsedTime = _dragScrollTimer.currentCount * _dragScrollTimer.delay;
+
+        _dragScrollDelta = calculateDragScrollDelta(dropLocation,
+                                                    dragScrollInterval,
+                                                    dragScrollElapsedTime);
+        if (_dragScrollDelta)
+        {
+            // Update the drag-scroll event
+            _dragScrollEvent = dropLocation.dragEvent;
+
+            if (!dragScrollingInProgress())
+            {
+                // Creates a timer, immediately updates the scroll position
+                // based on _dragScrollDelta and redispatches the event.
+                startDragScrolling();
+                return;
+            }
+            else
+            {
+                if (dragScrollHidesIndicator)
+                    return;
+            }
+        }
+        else
+            stopDragScrolling();
+
+        // Show the drop indicator
         var bounds:Rectangle = calculateDropIndicatorBounds(dropLocation);
         if (!bounds)
             return;

    {
        return null;
    }
}
}

    //  Drop methods
    //
    //--------------------------------------------------------------------------

    private var _dragScrollTimer:Timer;
    private var _dragScrollDelta:Point;
    private var _dragScrollEvent:DragEvent;
    mx_internal var dragScrollRegionSize:Number = 20;
    mx_internal var dragScrollSpeed:Number = 5;
    mx_internal var dragScrollInterval:int = 32;
    mx_internal var dragScrollHidesIndicator:Boolean = false;
    
    /**
     *  Calculates the <code>LayoutDragEventDropLocation</code> for
     *  the specified <code>dragEvent</code>.
