         // though, so the popup whose focus manager is getting removed needs to
         // be explicitly skipped when determining the new topmost form.
         var removedForm:Object = event.relatedObject;
+        updateWatchedForms(removedForm);
         updateProxyImageForTopmostForm(removedForm);
+    }
+    
+    private function form_moveHandler(event:MoveEvent):void
+    {
+        updateProxyImageForTopmostForm();
+    }
+    
+    private function form_resizeHandler(event:ResizeEvent):void
+    {
+        updateProxyImageForTopmostForm();
     }
     
     private function stageText_changeHandler(event:Event):void

        {
            if (stageText.stage)
            {
                // We calculate the parent's concatenated matrix to deal with
                // issues in the runtime where the concatenated matrix of the
                // parent is out of sync.  See SDK-31538.
                var m:Matrix = MatrixUtil.getConcatenatedMatrix(parent, stage);
                var globalTopLeft:Point = m.transformPoint(localViewPort.topLeft);
                
                // Transform the bottom-right corner of the local rect
                // instead of setting width/height to account for any
                // transformations applied to ancestor objects.
                var globalBottomRight:Point = m.transformPoint(localViewPort.bottomRight);
                var globalRect:Rectangle = new Rectangle();
                
                // StageText can't deal with upside-down or mirrored rectangles
                // or non-integer values. Fix those here.
                globalRect.x = Math.floor(Math.min(globalTopLeft.x, globalBottomRight.x));
                globalRect.y = Math.floor(Math.min(globalTopLeft.y, globalBottomRight.y));
                globalRect.width = Math.ceil(Math.abs(globalBottomRight.x - globalTopLeft.x));
                globalRect.height = Math.ceil(Math.abs(globalBottomRight.y - globalTopLeft.y));
                
                if (stageText.viewPort != globalRect)
                {

            -1;
    }
    
    private function getGlobalViewPort():Rectangle
    {
        // We calculate the parent's concatenated matrix to deal with
        // issues in the runtime where the concatenated matrix of the
        // parent is out of sync.  See SDK-31538.
        var m:Matrix = MatrixUtil.getConcatenatedMatrix(parent, stage);
        var globalTopLeft:Point = m.transformPoint(localViewPort.topLeft);
        
        // Transform the bottom-right corner of the local rect
        // instead of setting width/height to account for any
        // transformations applied to ancestor objects.
        var globalBottomRight:Point = m.transformPoint(localViewPort.bottomRight);
        var globalRect:Rectangle = new Rectangle();
        
        // StageText can't deal with upside-down or mirrored rectangles
        // or non-integer values. Fix those here.
        globalRect.x = Math.floor(Math.min(globalTopLeft.x, globalBottomRight.x));
        globalRect.y = Math.floor(Math.min(globalTopLeft.y, globalBottomRight.y));
        globalRect.width = Math.ceil(Math.abs(globalBottomRight.x - globalTopLeft.x));
        globalRect.height = Math.ceil(Math.abs(globalBottomRight.y - globalTopLeft.y));

        return globalRect;
    }
    
    private function hasOverlappingForm():Boolean
    {
        if (!localViewPort || !parent || !stageText || !awm)
            return false;
        
        var globalRect:Rectangle = getGlobalViewPort();
        var result:Boolean = false;
        
        for each (var otherForm:Object in awm.forms)
        {
            var otherFormDisplayObj:DisplayObject = otherForm as DisplayObject;
            
            if (otherFormDisplayObj && 
                (!otherForm.hasOwnProperty("focusManager") || otherForm.focusManager != focusManager))
            {
                var formGlobalRect:Rectangle = otherFormDisplayObj.getBounds(stage);
                
                if (formGlobalRect.intersects(globalRect))
                {
                    result = true;
                    break;
                }
            }
        }
        
        return result;
    }
    
    /**
     *  Determine whether the given form is an application. This is the same
     *  check as is used by ActiveWindowManager.
