 		}
     }
     
+    /**
+     *  @private
+     * 
+     * Handles the mouse leaving the stage; hides the custom cursor and restores the system cursor.
+     */
+    private function mouseOutHandler(event:MouseEvent):void
+    {
+        // relatedObject==null implies the mouse left the stage.
+        // this also fires when you are returning from a context menu click.
+        //
+        // it sometimes fires after you drag off the stage, and back to the stage quickly,
+        // and let go of the button -- this seems like a player bug
+        if ((event.relatedObject == null) && (cursorList.length > 0))
+        {
+            //trace("mouseOutHandler", event);
+            
+            // this will get unset in mouseMoveHandler (since that fires when
+            // the mouse returns/glides over the stage)
+            customCursorLeftStage = true;
+            hideCursor();
+            Mouse.show();
+        }
+    }
+
     /**
      *  @private
      */

                        DisplayObjectContainer(currentCursor).mouseChildren = false;
                    cursorHolder.addChild(currentCursor);
                    
                    if (!listenForContextMenu)
                    {
                    	app = systemManager.document as InteractiveObject;
                    	if (app && app.contextMenu)
                    	{
                    		app.contextMenu.addEventListener(ContextMenuEvent.MENU_SELECT, contextMenu_menuSelectHandler);
                    		listenForContextMenu = true;
                    	}
                    	sm = systemManager as InteractiveObject;
                    	if (sm && sm.contextMenu)
                    {
                    		sm.contextMenu.addEventListener(ContextMenuEvent.MENU_SELECT, contextMenu_menuSelectHandler);
                    		listenForContextMenu = true;
                    	}     	
                    }
					var pt:Point;
                    // make sure systemManager is not other implementation of ISystemManager
                    if (systemManager is SystemManager)

                                     xOffset:Number = 0,
                                     yOffset:Number = 0):int 
    {
        if (initialized && !cursorHolder)
		{
			var me:InterManagerRequest = new InterManagerRequest(InterManagerRequest.CURSOR_MANAGER_REQUEST);
