else if ( currentMouseWindow )
     {
         currentMouseWindow->ScreenToClient( &wxevent.m_x , &wxevent.m_y ) ;
+        wxWindow *currentMouseWindowParent = currentMouseWindow->GetParent();
         
         wxevent.SetEventObject( currentMouseWindow ) ;
 
     #endif
                     HandleControlClick( (ControlRef) currentMouseWindow->GetHandle() , clickLocation ,
                         modifiers , (ControlActionUPP ) -1 ) ;
+                        
+                    // We need to handle the rare case that the control to
+                    // which the currentMouseWindow points gets deleted as
+                    // a reaction to HandleControlClick. This would lead to
+                    // a crash in the update cursor code below.
+                    if (!currentMouseWindowParent->GetChildren().Find( currentMouseWindow ))
+                        currentMouseWindow = NULL;
                 }
                 result = noErr ;
             }
         {
             cursorTarget = cursorTarget->GetParent() ;
             if ( cursorTarget )
-                cursorPoint += cursorTarget->GetPosition() ;
+                cursorPoint += cursorTarget->GetPosition();
         }
 
     } // else if ( currentMouseWindow )