 	private function initHandler(event:Event):void
 	{
 		// we can still be the top level root if we can access our
-		// parent and get a positive response to the query
+		// parent and get a positive response to the query or
+		// or there is not a listener for the new application event
+		// that SWFLoader always adds. 
 		if (!isStageRoot)
 		{
 			if (root.loaderInfo.parentAllowsChild)
 			{
 				try
 				{
-					if (!parent.dispatchEvent(new Event("mx.managers.SystemManager.isBootstrapRoot", false, true)))
+                    if (!parent.dispatchEvent(new Event("mx.managers.SystemManager.isBootstrapRoot", false, true)) ||
+                        !root.loaderInfo.sharedEvents.hasEventListener(SWFBridgeEvent.BRIDGE_NEW_APPLICATION))
 						isBootstrapRoot = true;
 				}
 				catch (e:Error)


		// every SM has to have this listener in case it is the SM for some child AD that contains a manager
		// and the parent ADs don't have that manager.
		getSandboxRoot().addEventListener(InterManagerRequest.INIT_MANAGER_REQUEST, initManagerHandler, false, 0, true);
		// once managers get initialized, they bounce things off the sandbox root
		if (getSandboxRoot() == this)
		{
			addEventListener(InterManagerRequest.SYSTEM_MANAGER_REQUEST, systemManagerHandler);
			addEventListener(InterManagerRequest.DRAG_MANAGER_REQUEST, multiWindowRedispatcher);

            // test to see if parent is a Bootstrap
            if (parent && !parent.dispatchEvent(new Event("mx.managers.SystemManager.isBootstrapRoot", false, true)))
                return this;
  			var lastParent:DisplayObject = this;
			while (parent)
			{
				if (parent is Stage)
