         }
     }
     
-    mx_internal function showModalWindow(o:PopUpData, sm:ISystemManager):void
+    private function showModalWindow(o:PopUpData, sm:ISystemManager2, sendRequest:Boolean = true):void
     {
     	const popUpStyleClient:IStyleClient = o.owner as IStyleClient;
         var duration:Number = 0;
         var alpha:Number = 0;
         
-        if (popUpStyleClient)
+        if (!isNaN(o.modalTransparencyDuration))
+            duration = o.modalTransparencyDuration;
+        else if (popUpStyleClient)
+        {
             duration = popUpStyleClient.getStyle("modalTransparencyDuration");
-        
-        if (popUpStyleClient)
+            o.modalTransparencyDuration = duration;
+        }
+        
+        if (!isNaN(o.modalTransparency))
+            alpha = o.modalTransparency;
+        else if (popUpStyleClient)
+        {
             alpha = popUpStyleClient.getStyle("modalTransparency");
-
+            o.modalTransparency = alpha;
+        }
+            
 		o.modalWindow.alpha = alpha;
 			
 	    var blurAmount:Number = 0;
 	    
-	    if (popUpStyleClient)
+        if (!isNaN(o.modalTransparencyBlur))
+            blurAmount = o.modalTransparencyBlur;
+	    else if (popUpStyleClient)
+	    {
 	    	blurAmount = popUpStyleClient.getStyle("modalTransparencyBlur");
+	    	o.modalTransparencyBlur = blurAmount;
+	    }
 
 		var transparencyColor:Number = 0xFFFFFF;
-	    if (popUpStyleClient)
+        if (!isNaN(o.modalTransparencyColor))
+            transparencyColor = o.modalTransparencyColor;
+	    else if (popUpStyleClient)
+	    {
 	    	transparencyColor = popUpStyleClient.getStyle("modalTransparencyColor");
+	    	o.modalTransparencyColor = transparencyColor;
+	    }
    
-    	showModalWindowInternal(o, duration, alpha, transparencyColor, blurAmount, sm);
+        if (sm is SystemManagerProxy)
+            sm = SystemManagerProxy(sm).systemManager;
+        var sbRoot:DisplayObject = sm.getSandboxRoot();
+
+        showModalWindowInternal(o, duration, alpha, transparencyColor, blurAmount, sm, sbRoot);
+        
+        if (sendRequest && sm.useBridge())
+        {
+            var target:IEventDispatcher;
+            var modalRequest:ModalWindowRequest = new ModalWindowRequest(ModalWindowRequest.SHOW, 
+                                                                         !o.isRemoteModalWindow && sm != sbRoot,
+                                                                         false,
+                                                                         false,
+                                                                         o.modalTransparencyDuration,
+                                                                         o.modalTransparency,
+                                                                         o.modalTransparencyColor,
+                                                                         o.modalTransparencyBlur);
+            var bridge:IEventDispatcher = sm.sandboxBridgeGroup.parentBridge; 
+            modalRequest.requestor = bridge;
+
+            if (sm == sbRoot)
+                target = sm.sandboxBridgeGroup.parentBridge;
+            else
+                target = sbRoot;
+                
+            target.dispatchEvent(modalRequest);
+        }
     }
     
     /**


		// add a placeholder for an untrusted popup if this system manager
		// is hosting the popup.
		if (sbRoot && sm == sbRoot)
		{
			request = new PopUpRequest(PopUpRequest.ADD_PLACEHOLDER, DisplayObject(window), 
									   sm.sandboxBridgeGroup.parentBridge);

    private function fadeOutDestroyEffectEndHandler(event:EffectEvent):void
    {
        effectEndHandler(event);

        const obj:DisplayObject = DisplayObject(event.effectInstance.target);

        var modalMask:DisplayObject = obj.mask;
        if (modalMask)
        {
            // modal mask is always added to the popupChildren list.
            obj.mask = null;
            sm.popUpChildren.removeChild(modalMask);
        }   

        if (obj.parent is ISystemManager)
        {
            const sm:ISystemManager = ISystemManager(obj.parent)
            if (sm.popUpChildren.contains(obj))
                sm.popUpChildren.removeChild(obj);
            else
                sm.removeChild(obj);
        }
        else
		{
			if (obj.parent)	// Mustella can already take you off stage
				obj.parent.removeChild(obj);
		}
		
    }
    
    /**
