      */
     mx_internal var dispatchChangeAfterSelection:Boolean = false;
     
+    /**
+     *  @private
+     *  Used to keep track of whether selection transitions should play 
+     *  in the updateRenderer() code.  See turnOnSelectionTransitionsForOneFrame()
+     */
+    private var allowSelectionTransitions:Boolean = false;
+    
+    /**
+     *  @private
+     *  Used to keep track of whether caret transitions should play 
+     *  in the updateRenderer() code.  See turnOnCaretTransitionsForOneFrame()
+     */
+    private var allowCaretTransitions:Boolean = false;
+    
+    /**
+     *  @private
+     *  Used to keep track of whether we are in updateRenderer().  This is 
+     *  so we know that any calls to itemSelected() and itemShowingCaret(), 
+     *  are called based on a user-action (either interaction or programattic) 
+     *  and not through item renderer recycling.
+     */
+    private var inUpdateRenderer:Boolean;
+    
     //--------------------------------------------------------------------------
     //
     //  Overridden properties

     */
    protected function itemSelected(index:int, selected:Boolean):void
    {
        // Subclasses must override this method to display the selection.
    }
    

     */
    protected function itemShowingCaret(index:int, showsCaret:Boolean):void
    {
        // if this method is called from anywhere besides the updateRenderer(), 
        // then we want transitions for caret to play.  This way if it's called 
        // from the keyDown handler or through 
        // commitProperties(), transitions will be enabled for it.
        if (!inUpdateRenderer)
            turnOnCaretTransitionsForOneFrame();
        
        // Subclasses must override this method to display the caret.
    }
    
