 					super.addEventListener(actualType, eventProxy.marshalListener,
 							eventObj.useCapture, eventObj.priority, eventObj.useWeakReference);
 			}
-			// trace("<<eventListenerRequestHandler", this, eventObj.userType);
-		}
+			// trace("<<eventListenerRequestHandler ADD ", this, eventObj.userType);
+		}
+		else if (event.type == EventListenerRequest.REMOVE)
+        {
+            // trace(">>eventListenerRequestHandler REMOVE ", this, eventObj.userType);
+            actualType = EventUtil.marshalMouseEventMap[eventObj.userType];
+            if (actualType)
+            {
+                removeEventListenerFromSandboxes(eventObj.userType, sandboxMouseListener,
+                            eventObj.useCapture, event.target as IEventDispatcher);
+                if (getSandboxRoot() == this)
+                    super.removeEventListener(actualType, eventProxy.marshalListener,
+                            eventObj.useCapture);
+            }
+            // trace("<<eventListenerRequestHandler REMOVE ", this, eventObj.userType);
+        }		
 	}
 }
 

	/**
	 * request the parent to remove an event listener.
	 */	
	private function removeEventListenerFromSandboxes(type:String, listener:Function, useCapture:Boolean = false):void 
	{
		// trace(">>removeEventListenerToSandboxes", this, type);
		var request:EventListenerRequest = new EventListenerRequest(EventListenerRequest.REMOVE,

			if (sm.topLevelSystemManager)
				sm = ISystemManager2(sm.topLevelSystemManager);
			var parent:DisplayObject = DisplayObject(sm).parent;
            if (parent is Stage)
                return DisplayObject(sm);
            // 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 = parent;
			while (parent)
			{
				if (parent is Stage)
