         if (listData)
         {
             // see if we need to change state.  This is the only invalidation method guaranteed to be
-            // called.  We set up the renderers properties here so no matter what validation method gets
-            // called first, the properties are set up accordingly.
+            // called. 
             var listBase:mx.controls.listClasses.ListBase = mx.controls.listClasses.ListBase(listData.owner);
             if (listBase)
             {
-                showsCaret = listBase.isItemShowingCaret(data);
-                selected = listBase.isItemSelected(data);
-                super.hovered = listBase.isItemHighlighted(data);
+                if (showsCaret != listBase.isItemShowingCaret(data) ||
+                    selected != listBase.isItemSelected(data) ||
+                    super.hovered != listBase.isItemHighlighted(data))
+                {
+                    rendererStateChanged = true;
+                    invalidateProperties();
+                }
             }
         }
 

     */ 
    override protected function commitProperties():void
    {
        if (listData)
        {
            // make sure itemIndex is correct before the base class does any computation
            // based on it
            var listBase:mx.controls.listClasses.ListBase = mx.controls.listClasses.ListBase(listData.owner);
            itemIndex = listData.rowIndex + listBase.verticalScrollPosition;
        }

        super.commitProperties();
    }


        focusEnabled = false;
    }
    
    //--------------------------------------------------------------------------
    //
    //  Variables
    //
    //--------------------------------------------------------------------------
    
    /**
     *  @private
     *  Flag to help us determine if we need to validate renderer state during
     *  commitProperties.
     */
    private var rendererStateChanged:Boolean;
    
    //----------------------------------
    //  listData
    //----------------------------------
