     /**
      *  @private
      */
+    override protected function itemInCaret(index:int, caret:Boolean):void
+    {
+        super.itemInCaret(index, caret);
+        
+        var renderer:Object = dataGroup ? dataGroup.getElementAt(index) : null;
+        
+        if (renderer is IItemRenderer)
+        {
+            IItemRenderer(renderer).caret = caret;
+        }
+    }
+    
+    /**
+     *  @private
+     */
     override public function isItemIndexSelected(index:int):Boolean
     {
         if (allowMultipleSelection && (selectedIndices != null))

        else
            currentIndex = selectedIndex;
            
        //Delegate to the layout to tell us what the next item is we should select.
	    // TODO (jszeto) At some point we should refactor this so we don't depend on layout
	    // for keyboard handling. If layout doesn't exist, then use some other keyboard handler
        var proposedSelectedIndex:int = layout.getDestinationIndex(navigationUnit, currentIndex);  

        // Note that the KeyboardEvent is canceled even if the selectedIndex doesn't
        // change because we don't want another component to start handling these
        // events when the selectedIndex reaches a limit.
        if (proposedSelectedIndex == -1)
            return;
        event.preventDefault(); 

        if (allowMultipleSelection && event.shiftKey && selectedIndices)
        {
            var newInterval:Array = []; 
            var i:int; 
            //contiguous multi-selection action - create the new selection
            //interval
            if (selectedIndex <= proposedSelectedIndex)
            {
                for (i = selectedIndex; i <= proposedSelectedIndex; i++)
                {
                    newInterval.push(i); 
                }
            }
            else 
            {
                for (i = selectedIndex; i >= proposedSelectedIndex; i--)
                {
                    newInterval.push(i); 
                }
            }
            selectedIndices = newInterval;   
            ensureItemIsVisible(proposedSelectedIndex); 
        }
        else
        {
            //simple new selection 
            selectedIndex = proposedSelectedIndex; 
            ensureItemIsVisible(proposedSelectedIndex);
        } 
    }
  
}

        //Dispatch the selectionChanged event
        var e:IndexChangedEvent = new IndexChangedEvent(IndexChangedEvent.SELECTION_CHANGED);
        e.multipleSelectionChange = true; 
        dispatchEvent(e); 
    }
    
    /**
     *  @private 
     */
    private function handleCaretChange(index:Number, focusIn:Boolean):void
    {
        var old:Number = currentCaretIndex; 
        var renderer:Object = dataGroup ? dataGroup.getElementAt(old) : null;
        if (renderer && renderer is IItemRenderer)
            renderer.caret = false;
            
        renderer = dataGroup? dataGroup.getElementAt(index) : null; 
        if (renderer && renderer is IItemRenderer)
        {
            renderer.caret = true;
            currentCaretIndex = index; 
        }
            
        var e:IndexChangedEvent = new IndexChangedEvent(IndexChangedEvent.ITEM_FOCUS_CHANGED); 
        e.oldIndex = old;
        e.newIndex = index; 
        dispatchEvent(e); 
    }
    
