                 event.stopPropagation();
             }
         }
-        else if (event.keyCode == Keyboard.UP ||
+        else 
+        {
+        	//trace("DropDownList.keyDownHandler arrow key isOpen",isOpen);
+        	// TODO (jszeto) Check if we need dataGroup skin during this event
+        	super.list_keyDownHandler(event);
+        }
+        
+        /*
+        if (event.keyCode == Keyboard.UP ||
                 event.keyCode == Keyboard.DOWN ||
                 event.keyCode == Keyboard.LEFT ||
                 event.keyCode == Keyboard.RIGHT ||
                 event.keyCode == Keyboard.PAGE_UP ||
                 event.keyCode == Keyboard.PAGE_DOWN)
-        {
-        	//trace("DropDownList.keyDownHandler arrow key isOpen",isOpen);
-        	
+        {	
         	if (isOpen)
         	{
         		// TODO (jszeto) Clean this up once we have List support for 

    //--------------------------------------------------------------------------
	
	//----------------------------------
    //  collection
    //----------------------------------
	
	/**
     *  The ICollectionView of items this component displays.  
     *  
     *  @langversion 3.0
     *  @playerversion Flash 9
     *  @playerversion AIR 1.1
     *  @productversion Flex 3
     */
    protected var collection:ICollectionView;

	//----------------------------------
    //  dataProvider
    //----------------------------------
	
	// TODO (jszeto) Add logic to handle the IList changed events
	
	private var dataProviderChanged:Boolean = false;
	private var _dataProvider:IList;
	
	/**
	 *  The set of items this component displays.
	 * 
	 *  <p>Setting this property will adjust the <code>selectedIndex</code>
     *  property (and therefore the <code>selectedItem</code> property) if 
     *  the <code>selectedIndex</code> property has not otherwise been set. 
     *  If there is no <code>prompt</code> property, the <code>selectedIndex</code>
     *  property will be set to 0; otherwise it will remain at -1,
     *  the index used for the prompt string.  
     *  If the <code>selectedIndex</code> property has been set and
     *  it is out of range of the new data provider, unexpected behavior is
     *  likely to occur.</p> 
     * 
     *  @default null
	 *  
	 *  @langversion 3.0
	 *  @playerversion Flash 10
	 *  @playerversion AIR 1.5
	 *  @productversion Flex 4
	 */ 
	public function get dataProvider():IList
	{
		return _dataProvider;
	}
	
	public function set dataProvider(value:IList):void
	{
		if (_dataProvider != value)
		{
			_dataProvider = value;
			
			if (_dataProvider)
			{
				// TODO (jszeto) Change to match List implementation
				collection = new ListCollectionView(IList(value));
				collection.addEventListener(CollectionEvent.COLLECTION_CHANGE, collection_changeHandler, false, 0, true);
				iterator = collection.createCursor();
				dataProviderChanged = true;		
				
				var event:CollectionEvent =
			            new CollectionEvent(CollectionEvent.COLLECTION_CHANGE);
		        event.kind = CollectionEventKind.RESET;
		        collection_changeHandler(event);
		  	}
		  	
		  	invalidateProperties();
		}
	}
	
    //----------------------------------
    //  itemRenderer
    //----------------------------------
    
    private var _itemRenderer:IFactory;
    
    /**
     *  @copy spark.components.DataGroup#itemRenderer
     *  
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    public function get itemRenderer():IFactory
    {
        return _itemRenderer;
    }
    
    /**
     *  @private
     */
    public function set itemRenderer(value:IFactory):void
    {
        if (value != _itemRenderer)
        {
        	_itemRenderer = value;
        }
    }
    
    //----------------------------------
    //  itemRendererFunction
    //----------------------------------
    
    private var _itemRendererFunction:Function;
    
    /**
     *  @copy spark.components.DataGroup#itemRendererFunction
     *  
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    public function get itemRendererFunction():Function
    {
        return _itemRendererFunction;
    }
    
    /**
     *  @private
     */
    public function set itemRendererFunction(value:Function):void
    {
        if (value != _itemRendererFunction)
        {
        	_itemRendererFunction = value;
        }
    }
    
    //----------------------------------
    //  iterator
    //----------------------------------
    
    /**
     *  The main IViewCursor used to fetch items from the
     *  dataProvider and pass the items to the renderers.
     *  At the end of any sequence of code, it must always be positioned
     *  at the topmost visible item on screen.
     *  
     *  @langversion 3.0
     *  @playerversion Flash 9
     *  @playerversion AIR 1.1
     *  @productversion Flex 3
     */
    protected var iterator:IViewCursor;
    
    //----------------------------------
    //  labelField
    //----------------------------------
	private var _labelField:String = "label"; 
   
    /**
     *  The name of the field in the data provider items to display as the label.
     
     * @default "label"
     *  
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    public function get labelField():String
    {
    	return _labelField;
    }
    
    public function set labelField(value:String):void
    {
    	if (value != _labelField)
    	{
    		_labelField = value;
    		labelChanged = true;
    		invalidateProperties();
    	}
    }
    
    //----------------------------------
    //  labelField
    //----------------------------------
    private var _labelFunction:Function; 
    
    /**
     *  A user-supplied function to run on each item to determine its label.
     * 
     *  The method signature for labelFunction should be:
     *  <pre>myLabelFunction(item:Object):String</pre> 
     *
     *  @default null
     *  
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    public function get labelFunction():Function
    {
    	return _labelFunction;
    }
    
    /**
     *  @private
     */
    public function set labelFunction(value:Function):void
    {
    	if (value != _labelFunction)
    	{
    		_labelFunction = value;
    		labelChanged = true;
    		invalidateProperties();
    	}
    }

	//----------------------------------
    //  prompt
    //----------------------------------

    private var promptChanged:Boolean = false;
    private var _prompt:String;

    /**
     *  The prompt for the FxComboBox control. A prompt is
     *  a String that is displayed in the TextInput portion of the
     *  FxComboBox when <code>selectedIndex</code> = -1.  It is usually
     *  a String like "Select one...".  If there is no
     *  prompt, the FxComboBox control sets <code>selectedIndex</code> to 0
     *  and displays the first item in the <code>dataProvider</code>.
     *  
     *  @langversion 3.0

    //
    //--------------------------------------------------------------------------
    
	 /**
 	 *  Called when the buttonDown event is dispatched. This function opens or closes
 	 *  the dropDown depending upon the dropDown state. 
 	 *  
 	 *  @langversion 3.0
 	 *  @playerversion Flash 10
 	 *  @playerversion AIR 1.5
 	 *  @productversion Flex 4
 	 */ 
    protected function buttonDownHandler(event:Event):void
    {
    	//trace("DropDownBase.buttonDownHandler ", isOpen ? "[CLOSE]" : "[OPEN]");
        if (isOpen)
            closeDropDown(true);
        else
            openDropDown();
    }
    
    /**
     *  Called when the systemManager receives a mouseDown event. In the base class 
     *  implementation, this closes the dropDown.  
     *  
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */     
    protected function systemManager_mouseDownHandler(event:MouseEvent):void
    {
    	// TODO (jszeto) Make marshall plan compliant
    	// TODO (jszeto) Figure a better way to handle this
     	if ((dataGroup && !dataGroup.hitTestPoint(event.stageX, event.stageY)) &&
     	    (button && !button.hitTestPoint(event.stageX, event.stageY)))
        {
        	//trace("DropDownBase.systemManager_mouseDownHandler  [CLOSE]");
            closeDropDown(true);
        }
    }

}
}