         // Only if down state has changed, do we need to do something
         if (_downEventFired != isCurrentlyDown)
         {
-            if (isCurrentlyDown)
+            if (isCurrentlyDown && hasEventListener(FlexEvent.BUTTON_DOWN))
                 dispatchEvent(new FlexEvent(FlexEvent.BUTTON_DOWN));
             
             _downEventFired = isCurrentlyDown;

    {
        if (!enabled)
            return false;

        if (_keepDown)
            return true;

        if (keyboardPressed)
            return true;

        if (!enabled)
            return "disabled";
        
        if (isDown() || _keepDown)
            return "down";
        
        // if interactionMode == InteractionMode.TOUCH, then we have no over state
