 
     /**
      *  @private
-     *  Redraw whenever added to the stage to ensure the calculations
-     *  in updateSkinDisplayList() are correct.
-     */
-    private function addedToStageHandler(event:Event):void
+     */
+    private function arrow_resizeHandler(event:Event):void
     {
         updateSkinDisplayList();
     }
-
-    /**
-     *  @private
-     */
-    private function arrow_resizeHandler(event:Event):void
-    {
-        updateSkinDisplayList();
-    }
     
     /**
      *  @private
      */
     private function owner_removedFromStage(event:Event):void
     {
-        if (isOpen)
-            close();
+        if (!isOpen)
+            return;
+        
+        // Hide the callout immediately instead of waiting for the skin
+        // state to transition to "closed"
+        visible = false;
+        
+        close();
     }
     
     /**

            }
            else if (isLandscape)
            {
                // favor horizontal before/after in landscape
                useVertical = !canFitHorizontal;
            }
            else
            {
                // favor vertical before/after in portrait
                useVertical = canFitVertical;
            }


                    adjustedPosition = CalloutPosition.END;
                break;
            // case CalloutPosition.MIDDLE:
            // Nudge instead of flipping
        }
        
        // Return null to revert the adjusted position
        // Otherwise, return the incoming position
        if (revert)
            return (adjustedPosition) ? null : position;
        
        // Adjusted position or null if the callout already fits
        return adjustedPosition;
    }
    
