             excludeBounds = UIComponent(exclude).getVisibleRect(DisplayObject(sm));
         else 
             excludeBounds = DisplayObject(exclude).getBounds(DisplayObject(sm));
+        
+        // apply excludeRect to the result
+        if (excludeRect)
+        {
+            var pt:Point = new Point(excludeRect.x, excludeRect.y);
+            pt = DisplayObject(sm).globalToLocal(pt);
+            var rect:Rectangle = new Rectangle(pt.x, pt.y, excludeRect.width, excludeRect.height);
+            excludeBounds = excludeBounds.intersection(rect);
+        }
         
         mask.graphics.clear();
         mask.graphics.beginFill(0x000000);

     */
    private static function dispatchMouseDownOutsideEvent(owner:DisplayObject, evt:MouseEvent):void
    {
        if (!owner)
            return;
            
        const event:MouseEvent = new FlexMouseEvent(FlexMouseEvent.MOUSE_DOWN_OUTSIDE);
        const pt:Point = owner.globalToLocal(new Point(evt.stageX, evt.stageY));
        event.localX = pt.x;

     */
    private static function nonmodalMouseWheelOutsideHandler(owner:DisplayObject, evt:MouseEvent):void
    {
        // shapeFlag is false here for performance reasons
        if (owner.hitTestPoint(evt.stageX, evt.stageY, true))
        {
