             }            
             case Keyboard.SPACE:
             {
-                currentRenderer = dataGroup.getElementAt(focusedIndex) as IItemRenderer;
+                currentRenderer = dataGroup.getElementAt(caretIndex) as IItemRenderer;
                 if (!currentRenderer || (currentRenderer.selected && requireSelection))
                     return;
                 currentRenderer.dispatchEvent(event);

    
    /**
     *  @private
     *  Index of currently focused child.
     */
    private var focusedIndex:int = 0;

    /**
     *  @private
     */
    private var inKeyUpHandler:Boolean;


        if (!dataProvider)
            return;

        super.keyDownHandler(event);

        var oldCaretIndex:Number = caretIndex; 
        var e:IndexChangedEvent;
        var length:int = dataProvider.length;
        switch (event.keyCode)
        {
            case Keyboard.UP:
            case Keyboard.LEFT:
            {
                currentRenderer = dataGroup.getElementAt(caretIndex) as IItemRenderer;
                if (caretIndex > 0 || arrowKeysWrapFocus)
                {
                    if (currentRenderer)
                        currentRenderer.showsCaret = false;
                    setCurrentCaretIndex((caretIndex - 1 + length) % length);
                    adjustLayering(caretIndex);
                    renderer = dataGroup.getElementAt(caretIndex) as IItemRenderer;
                    if (renderer)
                        renderer.showsCaret = true;
                    e = new IndexChangedEvent(IndexChangedEvent.CARET_CHANGE); 
                    e.oldIndex = oldCaretIndex; 
                    e.newIndex = caretIndex; 
                    dispatchEvent(e);    
                }

                event.stopPropagation();
