             case Keyboard.SPACE:
             {
                 inKeyUpHandler = true;
-                const renderer:IItemRenderer = getItemRenderer(caretIndex) as IItemRenderer;
-                if (renderer && ((!renderer.selected && requireSelection) || !requireSelection))
-                    renderer.dispatchEvent(event);
+                
+                // Need to check pressedIndex for NaN for the case when key up
+                // happens on an already selected renderer and under the condition
+                // that requireSelection=true.
+                if (!isNaN(pressedIndex))
+                {
+                    // Dispatch key up to the previously pressed item in case focus was lost
+                    // through other interaction (e.g. mouse clicks, etc...)
+                    const renderer:IItemRenderer = getItemRenderer(pressedIndex) as IItemRenderer;
+                    if (renderer && ((!renderer.selected && requireSelection) || !requireSelection))
+                    {
+                        renderer.dispatchEvent(event);
+                        pressedIndex = NaN;
+                    }
+                }
                 inKeyUpHandler = false;
                 break;
             }            

    
    /**
     *  @private
     */
    override protected function commitProperties():void
    {

        
        if (!enabled || !dataGroup || event.isDefaultPrevented())
            return;
        
        // Block input if space bar is being held down.
        if (!isNaN(pressedIndex))
        {
            event.preventDefault();
            return;
        }
        
        super.keyDownHandler(event);
        
