     {
         super.commitProperties();
         
-		if (selectedItemChanged)
-        {
-        	// Retry applying the value in case the dataProvider is set
-            selectedItem = selectedItem;
-            selectedItemChanged = false;
-            selectedIndexChanged = false;
-        }
-
-        if (selectedIndexChanged)
-        {
-        	// Retry applying the value in case the dataProvider is set
-            selectedIndex = selectedIndex;
-            selectedIndexChanged = false;
-        }   
-        
         if (labelChanged)
 		{
 			labelChanged = false;
-			if (labelElement)
-	    	{
-	    		if (selectedItem)
-	    			labelElement.text = LabelUtil.itemToLabel(selectedItem, labelField, labelFunction);
-	    		else
-	    			labelElement.text = "";
-	    	}
-		}
-        
-        // TODO (jszeto) Add call to valueCommit after selection changed
-
-    }
-                                                
-    
-    /**
-	 *  @private
-	 */ 
-    override protected function initializeDropDown():void
-    {
-    	super.initializeDropDown();
+        	updateLabelElement();
+  		}
+    }
+    
+    /**
+ 	 *  @private
+ 	 */ 
+    override protected function dataProvider_collectionChangeHandler(event:Event):void
+    {    	
+    	super.dataProvider_collectionChangeHandler(event);
     	
-    	// TODO (jszeto) Look at SkinnableDataContainer to see pattern for passing
-    	// these values
-		dropDown.dataProvider = dataProvider;
-		dropDown.selectedIndex = selectedIndex;
-		dropDown.labelField = labelField;
-		dropDown.labelFunction = labelFunction;
-		
-		if (itemRenderer != null)
-			dropDown.itemRenderer = itemRenderer;
-	
-		if (itemRendererFunction != null)
-			dropDown.itemRendererFunction = itemRendererFunction;
-	
-		// TODO!! We force validation because when we set the selectedIndex, 
-		// the list doesn't commit the value until it calls commitProperties. 
-		// By this time, we are already listening for selection changed events.
-		//dropDown.validateNow();
-		/*dropDown.validateProperties();
-		dropDown.validateSize();*/
-	
-		// Wait for creationComplete before listening to selectionChanged events from the dropDown. 
-		//dropDown.addEventListener("creationComplete", dropDown_creationCompleteHandler);
-		//dropDown.addEventListener(IndexChangedEvent.SELECTION_CHANGED, dropDown_selectionChangedHandler);
-    }
-    
-    /**
-     *  @private 
-     */ 
-    override protected function addListenersToDropDown():void
-    {
-    	dropDown.addEventListener(IndexChangedEvent.SELECTION_CHANGED, dropDown_selectionChangedHandler);
-    }
+    	if (event is CollectionEvent)
+        {
+			labelChanged = true;
+			invalidateProperties();        	
+        }
+    }
+       
+    /**
+ 	 *  @private
+ 	 */ 
+    override protected function getCurrentSkinState():String
+    {
+		return !enabled ? "disabled" : isOpen ? "open" : "normal";
+    }   
        
     /**
 	 *  @private

     */
    override protected function partRemoved(partName:String, instance:Object):void
    {
        if (instance == dropDown)
    	{
    		dropDownInstance = null;
    	}
        
        super.partRemoved(partName, instance);
    }
    
    /**
	 *  @private
	 */ 
    override protected function destroyDropDown():void
    {
    	super.destroyDropDown();
    	
    	dropDown.removeEventListener(IndexChangedEvent.SELECTION_CHANGED, dropDown_selectionChangedHandler);
    }
    
    /**
	 *  @private
	 */
    override protected function commitDropDownData():void
    {
    	if (dropDown.selectedIndex != selectedIndex)
    	{
    		selectedIndex = dropDown.selectedIndex;
    		dispatchEvent(new Event(Event.CHANGE));
    	}
    }
        
    /**
	 *  @private
	 */
	override protected function keyDownHandler(event:KeyboardEvent) : void
	{

		//trace("DropDownList.keyDownHandler key",event.keyCode);
		if(!enabled)
            return;

		super.keyDownHandler(event);
        
        if (event.ctrlKey && event.keyCode == Keyboard.DOWN)
        {

    //  Variables
    //
    //--------------------------------------------------------------------------
	
    private var labelChanged:Boolean = false;
	
	//--------------------------------------------------------------------------
    //
