                 caretRowIndex = _dataProvider.length - 1;
             if (_columns && caretColumnIndex >= _columns.length)
                 caretColumnIndex =  _columns.length - 1;
+
+            caretSelectedItem = 
+                _dataProvider && _caretRowIndex >= 0 ?
+                _dataProvider.getItemAt(_caretRowIndex) : null;
+
             dispatchCaretChangeEvent();
-            caretChanged = false;
-        }
+            caretChanged = false;        
+         }
     }
     
     /**

                validateNow();
            else
                break;  // fixed row heights, and we're only scrolling vertically
        }
        while(!isCellVisible(rowIndex, columnIndex))
        
        // At this point we've only ensured that the requested cell is at least 
        // partially visible.  Ensure that it's completely visible.

    
    /**
     *  @private
     *  Cache the dataItem that goes with the caretRowIndex so we can find the
     *  rowIndex of the caret after a collection refresh event.
     */    
    private var caretSelectedItem:Object = null;
    
    /**
     *  @private
     *  True while updateDisplayList is running.  Use to disable invalidateSize(),
     *  invalidateDisplayList() here and in the GridLayer class.
     */
