      *  @playerversion AIR 1.5
      *  @productversion Flex 4
      */
-    protected function addDragData(dragSource:DragSource):void
-    {
-        dragSource.addHandler(copySelectedItemsForDragDrop, "sourceOrderedItems");
+    public function addDragData(dragSource:DragSource):void
+    {
+        dragSource.addHandler(copySelectedItemsForDragDrop, "orderedItems");
         
         // Calculate the index of the focus item within the vector
         // of ordered items returned for the "sourceOrderedItems" format.
-        var focusIndex:int = 0;
+        var caretIndex:int = 0;
         var draggedIndices:Vector.<int> = selectedIndices;
         var count:int = draggedIndices.length;
         for (var i:int = 0; i < count; i++)
         {
             if (mouseDownIndex > draggedIndices[i])
-                focusIndex++;
-        }
-        dragSource.addData(focusIndex, "sourceOrderedItemsFocus");
-    }
-    
+                caretIndex++;
+        }
+        dragSource.addData(caretIndex, "orderedItemsCaretIndex");
+    }
+
     /**
      *  @private.
      */
-    private function copySelectedItemsForDragDrop():Array
-    {
-        var result:Array = [];
-        var draggedIndices:Vector.<int> = selectedIndices;
-        // Copy the vector so that we don't modify the original as 
-        // selectedIndices returns a reference.
-        draggedIndices = draggedIndices.slice(0, draggedIndices.length);
-        if (draggedIndices)
-        {
-            draggedIndices.sort(compareValues);
-            var count:int = draggedIndices.length;
-            for (var i:int = 0; i < count; i++)
-                result.push(dataProvider.getItemAt(draggedIndices[i]));  
-        }
+    private function copySelectedItemsForDragDrop():Vector.<Object>
+    {
+        // Copy the vector so that we don't modify the original
+        // since selectedIndices returns a reference.
+        var draggedIndices:Vector.<int> = selectedIndices.slice(0, selectedIndices.length);
+        var result:Vector.<Object> = new Vector.<Object>(draggedIndices.length);
+
+        // Sort in the order of the data source
+        draggedIndices.sort(compareValues);
+        
+        // Copy the items
+        var count:int = draggedIndices.length;
+        for (var i:int = 0; i < count; i++)
+            result[i] = dataProvider.getItemAt(draggedIndices[i]);  
         return result;
     }
     

    
    /**
     *  Handles <code>DragEvent.DRAG_COMPLETE</code> events.  This method
     *  removes the item from the data provider.
     *
     *  @param event The DragEvent object.
     *  

import spark.core.NavigationUnit;
import spark.events.IndexChangeEvent;
import spark.events.RendererExistenceEvent;

use namespace mx_internal;  //ListBase and List share selection properties that are mx_internal

