     mx_internal var doingWholesaleChanges:Boolean = false;
     
     //----------------------------------
+    //  caretItem
+    //---------------------------------- 
+
+    /**
+     *  @private
+     *  This private variable differs from selectedItem in that
+     *  the value is not computed, it's cached each time setCurrentCaretIndex() is called.  
+     *  It's used by List/dataProviderRefreshed() to provide a little scroll position and 
+     *  selection/caret stability after a dataProvider refresh.
+     */
+    mx_internal var caretItem:* = undefined;
+    
+    //----------------------------------
     //  labelField
     //----------------------------------
 

            }
            else if (ce.kind == CollectionEventKind.REFRESH)
            {
                setSelectedIndex(NO_SELECTION, false);
                setCurrentCaretIndex(NO_CARET);
            }
            else if (ce.kind == CollectionEventKind.REPLACE ||
                ce.kind == CollectionEventKind.MOVE)

            // the selected index backing variable.
            adjustSelection(selectedIndex - 1);
        }
    }
    
    /**
     *  @private
     *  Default response to dataProvider refresh events: clear the selection and caret.
     */
    mx_internal function dataProviderRefreshed():void
    {
        setSelectedIndex(NO_SELECTION, false);
        setCurrentCaretIndex(NO_CARET);
    }
    
    /**
