     {
         var ownerVisualElement:IVisualElement = owner as IVisualElement;
 
-        if (!arrow || (arrowDirection == ArrowDirection.NONE))
+        // Sanity check to verify owner is still on the display list. If not,
+        // leave the arrow in the current position.
+        if (!arrow || !ownerVisualElement ||
+            (arrowDirection == ArrowDirection.NONE) ||
+            (!ownerVisualElement.parent))
             return;
 
         var isStartPosition:Boolean = false;

            
            return;
        }
        
        // Do not change the actual position if the owner has been removed
        if (!owner || !owner.parent)
            return;

        var ownerBounds:Rectangle = owner.getBounds(systemManager.getSandboxRoot());


    {
        super.commitProperties();
        
        // Do not commit position changes if closed (no owner) or owner was 
        // removed from the display list.
        if (!owner || !owner.parent)
            return;
        
        // Compute actual positions when using AUTO
        commitAutoPosition();
        
