 				if (!SystemManagerGlobals.changingListenersInOtherSystemManagers)
 					addEventListenerToOtherSystemManagers(type, otherSystemManagerMouseListener, useCapture, priority, useWeakReference)
 				if (systemManager.getSandboxRoot() == systemManager)
+                {
                     Object(systemManager).$addEventListener(actualType, eventProxy.marshalListener,
                             useCapture, priority, useWeakReference);
+                    if (actualType == MouseEvent.MOUSE_UP)
+                    {
+                        try
+                        {
+                            if (systemManager.stage)
+                                systemManager.stage.addEventListener(Event.MOUSE_LEAVE, eventProxy.marshalListener,
+                                    useCapture, priority, useWeakReference);
+                            else
+                                Object(systemManager).$addEventListener(Event.MOUSE_LEAVE, eventProxy.marshalListener,
+                                    useCapture, priority, useWeakReference);
+                        }
+                        catch (e:SecurityError)
+                        {
+                            Object(systemManager).$addEventListener(Event.MOUSE_LEAVE, eventProxy.marshalListener,
+                                useCapture, priority, useWeakReference);
+                        }
+                    }
+                }
 				
 				// Set useCapture to false because we will never see an event 
 				// marshalled in the capture phase.

                    if (systemManager.isTopLevelRoot() &&
                       (actualType == MouseEvent.MOUSE_UP || actualType == MouseEvent.MOUSE_MOVE))
                    {
                        systemManager.stage.removeEventListener(actualType, eventProxy.marshalListener);
                    }

                    Object(systemManager).$removeEventListener(actualType, eventProxy.marshalListener, true);
                }
            }

                    if (systemManager.isTopLevelRoot() &&
                       (actualType == MouseEvent.MOUSE_UP || actualType == MouseEvent.MOUSE_MOVE))
				    {
                        if (systemManager.stage)
				            systemManager.stage.addEventListener(actualType, eventProxy.marshalListener,
                                false, request.priority, request.useWeakReference);
				    }

                    Object(systemManager).$addEventListener(actualType, eventProxy.marshalListener,
