      *  Timer for doing auto-repeat.
      */
     private var autoRepeatTimer:Timer;
+    
+    /**
+     *  @private
+     *  Timer for putting the button in the down state on a delay
+     *  timer because of touch input.
+     */
+    private var mouseDownSelectTimer:Timer;
+    
+    /**
+     *  @private
+     *  Timer for putting the button in the up state.  This makes sure 
+     *  even when we have a delay to select an item and someone mouses up
+     *  before that delay, the user still gets some visual feedback that 
+     *  the button was actually selected.
+     */
+    private var mouseUpDeselectTimer:Timer;
     
     //--------------------------------------------------------------------------
     //

                    event.stopImmediatePropagation();
                else
                    clickHandler(MouseEvent(event));
//                event.preventDefault();
                return;
            }
        }

    /**
     *  @private
     */
    private function touchScrollStartHandler(event:TouchScrollEvent):void
    {
        // if we have a timer going on, let's stop it to make sure we don't
        // select the button later
        stopSelectButtonAfterDelayTimer();
        
        // cancel the rollover/clickdown on and go back to a normal state
        hovered = false;
        mouseCaptured = false;
        
        // no need to call buttonReleased() as that's only called for a 
        // successfull down and up user gesture
    }
    
    /**
