         _allowMultipleSelection = value; 
     }
     
+    //----------------------------------
+    //  dragEnabled
+    //----------------------------------
+    
+    /**
+     *  @private
+     *  Storage for the dragEnabled property.
+     */
+    private var _dragEnabled:Boolean = false;
+    
+    [Inspectable(defaultValue="false")]
+    
+    /**
+     *  A flag that indicates whether you can drag items out of
+     *  this control and drop them on other controls.
+     *  If <code>true</code>, dragging is enabled for the control.
+     *  If the <code>dropEnabled</code> property is also <code>true</code>,
+     *  you can drag items and drop them within this control
+     *  to reorder the items.
+     *
+     *  @default false
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 1.5
+     *  @productversion Flex 4
+     */
+    public function get dragEnabled():Boolean
+    {
+        return _dragEnabled;
+    }
+    
+    /**
+     *  @private
+     */
+    public function set dragEnabled(value:Boolean):void
+    {
+        if (value == _dragEnabled)
+            return;
+        _dragEnabled = value;
+        
+        if (_dragEnabled)
+        {
+            addEventListener(DragEvent.DRAG_START, dragStartHandler, false, EventPriority.DEFAULT_HANDLER);
+            addEventListener(DragEvent.DRAG_COMPLETE, dragCompleteHandler, false, EventPriority.DEFAULT_HANDLER);
+        }
+        else
+        {
+            removeEventListener(DragEvent.DRAG_START, dragStartHandler, false);
+            removeEventListener(DragEvent.DRAG_COMPLETE, dragCompleteHandler, false);
+        }
+        
+        if (dataGroup)
+        {
+            // FIXME (egeorgie): Figure out a more efficient way to iterate through the item renderers.
+            var count:int = dataGroup.numElements;
+            for (var i:int = 0; i < count; i++)
+            {
+                var renderer:IItemRenderer = dataGroup.getElementAt(i) as IItemRenderer;
+                if (renderer)
+                {
+                    if (_dragEnabled)
+                        renderer.addEventListener(MouseEvent.MOUSE_DOWN, item_mouseDownHandler);
+                    else
+                        renderer.removeEventListener(MouseEvent.MOUSE_DOWN, item_mouseDownHandler);
+                }
+            }
+        }
+    }
+    
+    //----------------------------------
+    //  dragMoveEnabled
+    //----------------------------------
+    
+    /**
+     *  @private
+     *  Storage for the dragMoveEnabled property.
+     */
+    private var _dragMoveEnabled:Boolean = false;
+    
+    [Inspectable(defaultValue="false")]
+    
+    /**
+     *  A flag that indicates whether items can be moved instead
+     *  of just copied from the control as part of a drag-and-drop
+     *  operation.
+     *  If <code>true</code>, and the <code>dragEnabled</code> property
+     *  is <code>true</code>, items can be moved.
+     *  Often the data provider cannot or should not have items removed
+     *  from it, so a MOVE operation should not be allowed during
+     *  drag-and-drop.
+     *
+     *  @default false
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 1.5
+     *  @productversion Flex 4
+     */
+    public function get dragMoveEnabled():Boolean
+    {
+        return _dragMoveEnabled;
+    }
+    
+    /**
+     *  @private
+     */
+    public function set dragMoveEnabled(value:Boolean):void
+    {
+        _dragMoveEnabled = value;
+    }
+
+    //----------------------------------
+    //  selectedIndices
+    //----------------------------------
+    
     /**
      *  @private
      *  Internal storage for the selectedIndices property and invalidation variables.

        useVirtualLayout = true;
    }
    
    //----------------------------------
    //  scroller
    //----------------------------------

        var index:int = event.index;
        var renderer:Object = event.renderer;
        
        if (!renderer)
            return;
        
        renderer.removeEventListener(MouseEvent.CLICK, item_clickHandler);
        if (dragEnabled)
            renderer.removeEventListener(MouseEvent.MOUSE_DOWN, item_mouseDownHandler);
    }
    
    /**
