         }
         
         // if we are not the sandbox root, dispatch the message to the sandbox root.
-        if (sm != sbRoot)
+        if (this != sbRoot)
         {
-            var forwardRequest:Boolean = false;
-
             // convert exclude component into a rectangle and forward to parent bridge.
             if (request.type == SWFBridgeRequest.CREATE_MODAL_WINDOW_REQUEST ||
                 request.type == SWFBridgeRequest.SHOW_MODAL_WINDOW_REQUEST)
             {
-                var exclude:ISWFLoader = sm.swfBridgeGroup.getChildBridgeProvider(request.requestor) 
+                var exclude:ISWFLoader = swfBridgeGroup.getChildBridgeProvider(request.requestor) 
                                                  as ISWFLoader;
-                var excludeRect:Rectangle = ISWFLoader(exclude).getVisibleApplicationRect();
-                request.data.excludeRect = excludeRect;
-                forwardRequest = true;
+                
+                // find the rectangle of the area to exclude                                                 
+                if (exclude)
+                {                    
+                    var excludeRect:Rectangle = ISWFLoader(exclude).getVisibleApplicationRect();
+                    request.data.excludeRect = excludeRect;
+
+                    // If the area to exclude is not contain by our document then it is in a 
+                    // pop up. From this point for set the useExclude flag to false to 
+                    // tell our parent not to exclude use from their modal window, only
+                    // the excludeRect we have just calculated.
+                    if (!DisplayObjectContainer(document).contains(DisplayObject(exclude)))
+                        request.data.useExclude = false;  // keep the existing excludeRect
+                }
             }
-            else if (request.type == SWFBridgeRequest.HIDE_MODAL_WINDOW_REQUEST)
-                forwardRequest = true;
                 
-            if (forwardRequest)
-            {
-                bridge = sm.swfBridgeGroup.parentBridge;
-                request.requestor = bridge;
-         
-                // The HIDE request does not need to be processed by each
-                // application, so dispatch it directly to the sandbox root.       
-                if (request.type == SWFBridgeRequest.HIDE_MODAL_WINDOW_REQUEST)
-                    sbRoot.dispatchEvent(request);
-                else 
-                    bridge.dispatchEvent(request);
-                return false;
-            }
+            bridge = swfBridgeGroup.parentBridge;
+            request.requestor = bridge;
+     
+            // The HIDE request does not need to be processed by each
+            // application, so dispatch it directly to the sandbox root.       
+            if (request.type == SWFBridgeRequest.HIDE_MODAL_WINDOW_REQUEST)
+                sbRoot.dispatchEvent(request);
+            else 
+                bridge.dispatchEvent(request);
+            return false;
         }
 
         // skip aftering sending the message over a bridge.

	 */
	private var mouseCatcher:Sprite;
	
	//----------------------------------
	//  applicationIndex
	//----------------------------------

			var actualType:String = EventUtil.sandboxMouseEventMap[type];
			if (actualType)
			{
                if (getSandboxRoot() == this && eventProxy)
                    super.removeEventListener(actualType, eventProxy.marshalListener,
                            useCapture);
				if (!SystemManagerGlobals.changingListenersInOtherSystemManagers)
