         _caretIndex = value;
         
         if (caretIndex != CUSTOM_SELECTED_ITEM)
-            itemShowingCaret(caretIndex, true);
+        {
+            itemShowingCaret(_caretIndex, true);
+            
+            // Track the caretItem (often the same as the selectedItem), so that
+            // if the dataProvider is refreshed, we can relocate the caretIndex.
+            
+            const validIndex:Boolean = dataProvider && (_caretIndex >= 0) && (_caretIndex < dataProvider.length);
+            caretItem = (validIndex) ? dataProvider.getItemAt(_caretIndex) : undefined;
+        }
     }
     
     /**

            }
            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);
    }
    
    /**
