diff --git a/src/core/display.c b/src/core/display.c
index 90e58fd..d236ed7 100644
--- a/src/core/display.c
+++ b/src/core/display.c
@@ -4595,6 +4595,28 @@ meta_display_get_tab_list (MetaDisplay   *display,
       }
   }
 
+  // Question is should we put these first or not?
+  {
+	 GSList *tmp;
+	 MetaWindow *l_window;
+
+	 tmp = meta_display_list_windows(display);
+
+    // Go through all windows
+    while (tmp != NULL)
+      {
+         l_window=tmp->data;
+                  
+         // Check to see if it demands attention
+         if (l_window->wm_state_demands_attention) 
+           {
+             // if it does, add it to the popup
+             tab_list = g_list_prepend(tab_list, l_window);
+           }
+         tmp = tmp->next;
+       } // End while tmp3!=NULL
+  }
+
   tab_list = g_list_reverse (tab_list);
   
   return tab_list;
diff --git a/src/core/window.c b/src/core/window.c
index bcedd84..8831d07 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -8058,35 +8058,39 @@ meta_window_set_demands_attention (MetaWindow *window)
   
   /* Does the window have any other window on this workspace
    * overlapping it?
-   */
-
-  meta_window_get_outer_rect (window, &candidate_rect);
-
-  /* The stack is sorted with the top windows first. */
-  
-  while (stack != NULL && stack->data != window)
+   *
+  MetaWorkspace *workspace = window->screen->active_workspace;
+  if (workspace!=window->workspace)
     {
-      other_window = stack->data;
-      stack = stack->next;
-     
-      if (other_window->on_all_workspaces ||
-          window->on_all_workspaces ||
-          other_window->workspace == window->workspace)
-        {
-          meta_window_get_outer_rect (other_window, &other_rect);
+      /* windows on other workspaces are necessarily obscured */
+      obscured = TRUE;
+    }
+  else
+    {
+      meta_window_get_outer_rect (window, &candidate_rect);
 
-          if (meta_rectangle_overlap (&candidate_rect, &other_rect))
+      /* The stack is sorted with the top windows first. */
+      
+      while (stack != NULL && stack->data != window)
+        {
+          other_window = stack->data;
+          stack = stack->next;
+         
+          if (other_window->on_all_workspaces ||
+              window->on_all_workspaces ||
+              other_window->workspace == window->workspace)
             {
-              obscured = TRUE;
-              break;
+              meta_window_get_outer_rect (other_window, &other_rect);
+
+              if (meta_rectangle_overlap (&candidate_rect, &other_rect))
+                {
+                  obscured = TRUE;
+                  break;
+                }
             }
         }
-    }
-
-  /* If the window's in full view, there's no point setting the flag. */
+      /* If the window's in full view, there's no point setting the flag. */
   
-  if (!obscured)
-    {
       meta_topic (META_DEBUG_WINDOW_OPS,
           "Not marking %s as needing attention because it's in full view\n",
           window->desc);
