     {
     	super.initializeDropDown();
     	
+    	// TODO (jszeto) Look at FxDataContainer to see pattern for passing
+    	// these values
 		dropDown.dataProvider = dataProvider;
 		dropDown.selectedIndex = selectedIndex;
+		dropDown.labelField = labelField;
+		dropDown.labelFunction = labelFunction;
+		
 		if (itemRenderer)
 			dropDown.itemRenderer = itemRenderer;
+	
+		if (itemRendererFunction)
+			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.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);
+		//dropDown.addEventListener(IndexChangedEvent.SELECTION_CHANGED, dropDown_selectionChangedHandler);
+    }
+    
+    /**
+     *  @private 
+     */ 
+    override protected function addListenersToDropDown():void
+    {
+    	dropDown.addEventListener(IndexChangedEvent.SELECTION_CHANGED, dropDown_selectionChangedHandler);
     }
        
     /**

    public function get selectedItem():Object
    {
    	// TODO (jszeto) Return _selectedItem first if it hasn't been committed yet
        return dataProvider.getItemAt(selectedIndex);
    }

    /**
     *  @private
     */
    public function set selectedItem(data:Object):void
    {
    	// TODO (jszeto) Tie this in with selectedIndex
        _selectedItem = data;
        invalidateProperties();
    }
    
 	//--------------------------------------------------------------------------

    {
        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
