      *  @playerversion AIR 1.1
      *  @productversion Flex 3
      */
-    protected function addDragData(ds:Object):void // actually a DragSource
-    {
-        ds.addHandler(copySelectedItems, "items");
-    }
+    protected function addDragData(dragSource:Object):void // actually a DragSource
+    {
+		// The Hallo drag drop data format
+		dragSource.addHandler(copySelectedItems, "items");
+		
+		// The Spark drag drop data format
+		dragSource.addHandler(copySelectedItemsForDragDrop, "orderedItems");
+
+		// Calculate the index of the focus item within the vector
+		// of ordered items returned for the "orderedItems" format.
+		var caretIndex:int = 0;
+		var draggedIndices:Array = selectedIndices;
+		var count:int = draggedIndices.length;
+		for (var i:int = 0; i < count; i++)
+		{
+			if (mouseDownIndex > draggedIndices[i])
+				caretIndex++;
+		}
+		dragSource.addData(caretIndex, "orderedItemsCaretIndex");
+    }
+	
+	/**
+	 *  @private
+	 */
+	private function copySelectedItemsForDragDrop():Vector.<Object>
+	{
+		// Copy the vector so that we don't modify the original
+		// since selectedIndices returns a reference.
+		var draggedIndices:Array = selectedIndices.slice(0, selectedIndices.length);
+		var result:Vector.<Object> = new Vector.<Object>(draggedIndices.length);
+		
+		// Sort in the order of the data source
+		draggedIndices.sort();
+		
+		// Copy the items
+		var count:int = draggedIndices.length;
+		for (var i:int = 0; i < count; i++)
+			result[i] = dataProvider.getItemAt(draggedIndices[i]);  
+		return result;
+	}
 
     /**
      *  Returns the index where the dropped items should be added 

    mx_internal var bSelectOnRelease:Boolean;
    
    private var mouseDownItem:IListItemRenderer;

    mx_internal var bSelectionChanged:Boolean = false;
    mx_internal var bSelectedIndexChanged:Boolean = false;

    protected function mouseUpHandler(event:MouseEvent):void
    {
        mouseDownPoint = null;
		mouseDownIndex = -1;
        //trace("mouseUp");
        var item:IListItemRenderer = mouseEventToItemRenderer(event);
        var pt:Point = itemRendererToIndices(item);
