diff -u metacity/src/bell.c /usr/src/metacity/src/bell.c
--- metacity/src/bell.c	2003-06-11 13:55:28.000000000 -0400
+++ /usr/src/metacity/src/bell.c	2003-08-21 00:19:35.000000000 -0400
@@ -127,6 +127,19 @@
       meta_bell_unflash_frame, window->frame, NULL);
 }
 
+gboolean 
+meta_bell_flash_window_frame_multiple (gpointer data)
+{
+  MetaWindow *window = (MetaWindow *) data;
+  if(window->frame == NULL)
+   return FALSE;
+
+  window->frame->is_flashing = (window->is_urgent ? !(window->frame->is_flashing) : 0);
+  meta_frame_queue_draw (window->frame);
+
+  return (window->is_urgent);
+}
+  
 static void
 meta_bell_flash_frame (MetaDisplay *display, 
 		       XkbAnyEvent *xkb_ev)
diff -u metacity/src/bell.h /usr/src/metacity/src/bell.h
--- metacity/src/bell.h	2003-04-29 18:07:47.000000000 -0400
+++ /usr/src/metacity/src/bell.h	2003-08-20 23:53:39.000000000 -0400
@@ -33,3 +33,4 @@
 gboolean meta_bell_init (MetaDisplay *display);
 void meta_bell_shutdown (MetaDisplay *display);
 void meta_bell_notify_frame_destroy (MetaFrame *frame);
+gboolean meta_bell_flash_window_frame_multiple (gpointer data);
diff -u metacity/src/run-metacity.sh /usr/src/metacity/src/run-metacity.sh
--- metacity/src/run-metacity.sh	2002-11-12 23:11:52.000000000 -0500
+++ /usr/src/metacity/src/run-metacity.sh	2003-08-20 23:11:40.000000000 -0400
@@ -97,13 +97,10 @@
       DISPLAY=$CLIENT_DISPLAY xmodmap ~/.Xmodmap
   fi
  
-  usleep 50000
-
+  #usleep 50000
+  sleep 1 
   for I in `seq 0 $MAX_SCREEN`; do
       DISPLAY=$CLIENT_DISPLAY.$I xsetroot -solid royalblue3
   done
 fi
-
-if test -z "$ONLY_SETUP"; then
   METACITY_VERBOSE=1 METACITY_USE_LOGFILE=1 METACITY_DEBUG_BUTTON_GRABS=1 exec $DEBUG ./metacity $OPTIONS
-fi
diff -u metacity/src/window-props.c /usr/src/metacity/src/window-props.c
--- metacity/src/window-props.c	2003-06-25 23:09:37.000000000 -0400
+++ /usr/src/metacity/src/window-props.c	2003-08-21 01:44:18.000000000 -0400
@@ -23,6 +23,7 @@
 #include "window-props.h"
 #include "xprops.h"
 #include "frame.h"
+#include "bell.h"
 #include "group.h"
 #include <X11/Xatom.h>
 
@@ -759,12 +760,15 @@
                  MetaPropValue *value)
 {
   Window old_group_leader;
+  guint old_is_urgent;
   
   old_group_leader = window->xgroup_leader;
-  
+  old_is_urgent = window->is_urgent;
+
   /* Fill in defaults */
   window->input = TRUE;
   window->initially_iconic = FALSE;
+  window->is_urgent = FALSE;
   window->xgroup_leader = None;
   window->wm_hints_pixmap = None;
   window->wm_hints_mask = None;
@@ -788,11 +792,16 @@
       if (hints->flags & IconMaskHint)
         window->wm_hints_mask = hints->icon_mask;
       
-      meta_verbose ("Read WM_HINTS input: %d iconic: %d group leader: 0x%lx pixmap: 0x%lx mask: 0x%lx\n",
+      if (hints->flags & XUrgencyHint) {
+        meta_verbose ("URGENT! %s\n", window->desc);
+        window->is_urgent = TRUE;
+     }
+      meta_verbose ("Read WM_HINTS input: %d iconic: %d group leader: 0x%lx pixmap: 0x%lx mask: 0x%lx urgent: %d\n",
                     window->input, window->initially_iconic,
                     window->xgroup_leader,
                     window->wm_hints_pixmap,
-                    window->wm_hints_mask);
+                    window->wm_hints_mask,
+		    window->is_urgent);
     }
 
   if (window->xgroup_leader != old_group_leader)
@@ -803,6 +812,22 @@
       meta_window_group_leader_changed (window);
     }
 
+  if ((window->is_urgent != old_is_urgent) && (window->frame))
+    {
+      meta_verbose ("Window %s changes its urgent'ness to %u\n",
+                    window->desc, window->is_urgent);
+
+      if(window->is_urgent)
+      	g_timeout_add_full (G_PRIORITY_DEFAULT_IDLE, 1000,
+                    meta_bell_flash_window_frame_multiple,
+		    window, NULL);
+      else
+      {
+        window->frame->is_flashing = 0;
+        meta_frame_queue_draw (window->frame);
+      }
+
+     }
   meta_icon_cache_property_changed (&window->icon_cache,
                                     window->display,
                                     XA_WM_HINTS);
diff -u metacity/src/window.c /usr/src/metacity/src/window.c
--- metacity/src/window.c	2003-08-15 18:09:55.000000000 -0400
+++ /usr/src/metacity/src/window.c	2003-08-21 00:20:23.000000000 -0400
@@ -920,7 +920,7 @@
   meta_window_unqueue_move_resize (window);
   meta_window_unqueue_update_icon (window);
   meta_window_free_delete_dialog (window);
-  
+
   tmp = window->workspaces;
   while (tmp != NULL)
     {
diff -u metacity/src/window.h /usr/src/metacity/src/window.h
--- metacity/src/window.h	2003-06-27 10:49:56.000000000 -0400
+++ /usr/src/metacity/src/window.h	2003-08-20 23:42:45.000000000 -0400
@@ -240,6 +240,9 @@
   /* if TRUE, window was maximized at start of current grab op */
   guint shaken_loose : 1;
 
+  /* window is marked urgent */
+  guint is_urgent : 1;
+
 #ifdef HAVE_XSYNC
   /* XSync update counter */
   XSyncCounter update_counter;
