diff -u OLD/keybindings.c src/keybindings.c
--- OLD/keybindings.c	2006-01-20 17:03:55.000000000 -0500
+++ src/keybindings.c	2006-02-04 00:36:20.924193656 -0500
@@ -2317,10 +2317,6 @@
                                           keysym,
                                           display->grab_mask);
 
-  /* FIXME weird side effect here is that you can use the Escape
-   * key while tabbing, or the tab key while escaping
-   */
-  
   popup_not_showing = FALSE;
   key_used = FALSE;
   backward = FALSE;
@@ -2350,7 +2346,14 @@
     default:
       break;
     }
-  
+
+  if (popup_not_showing == meta_ui_tab_popup_has_window (screen->tab_popup))
+    {
+      /* We started out with alt-Tab and now they've pressed alt-Esc,
+       * or vice versa. This is probably a good reason to end the grab. */
+      return FALSE;
+    }
+
   if (key_used)
     {
       Window      prev_xwindow;
@@ -2370,7 +2373,7 @@
         meta_ui_tab_popup_backward (screen->tab_popup);
       else
         meta_ui_tab_popup_forward (screen->tab_popup);
-      
+
       if (popup_not_showing)
         {
           /* We can't actually change window focus, due to the grab.
diff -u OLD/tabpopup.c src/tabpopup.c
--- OLD/tabpopup.c	2006-01-20 17:03:55.000000000 -0500
+++ src/tabpopup.c	2006-02-04 00:38:07.278025416 -0500
@@ -923,3 +923,10 @@
   return TRUE;
 }
 
+gboolean
+meta_ui_tab_popup_has_window (MetaTabPopup *popup)
+{
+  return GTK_WIDGET_VISIBLE(popup->window);
+}
+
+
diff -u OLD/tabpopup.h src/tabpopup.h
--- OLD/tabpopup.h	2005-11-19 09:58:50.000000000 -0500
+++ src/tabpopup.h	2006-02-04 00:19:55.664975824 -0500
@@ -60,6 +60,7 @@
 void            meta_ui_tab_popup_select       (MetaTabPopup       *popup,
                                                 MetaTabEntryKey     key);
 
+gboolean        meta_ui_tab_popup_has_window   (MetaTabPopup       *popup);
 
 #endif
 
