diff -r -u metacity-2.8.6-old/src/bell.c metacity-2.8.6/src/bell.c
--- metacity-2.8.6-old/src/bell.c	2004-09-18 11:54:31.000000000 -0400
+++ metacity-2.8.6/src/bell.c	2004-11-09 14:21:00.685629560 -0500
@@ -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 -r -u metacity-2.8.6-old/src/bell.h metacity-2.8.6/src/bell.h
--- metacity-2.8.6-old/src/bell.h	2003-04-29 18:07:47.000000000 -0400
+++ metacity-2.8.6/src/bell.h	2004-11-09 14:21:00.686629408 -0500
@@ -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 -r -u metacity-2.8.6-old/src/window-props.c metacity-2.8.6/src/window-props.c
--- metacity-2.8.6-old/src/window-props.c	2004-06-24 11:47:05.000000000 -0400
+++ metacity-2.8.6/src/window-props.c	2004-11-09 14:21:00.705626520 -0500
@@ -23,6 +23,7 @@
 #include "window-props.h"
 #include "xprops.h"
 #include "frame.h"
+#include "bell.h"
 #include "group.h"
 #include <X11/Xatom.h>
 
@@ -784,12 +785,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;
@@ -813,11 +817,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)
@@ -828,6 +837,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 -r -u metacity-2.8.6-old/src/window.h metacity-2.8.6/src/window.h
--- metacity-2.8.6-old/src/window.h	2004-08-30 02:14:25.000000000 -0400
+++ metacity-2.8.6/src/window.h	2004-11-09 14:21:40.210620848 -0500
@@ -256,6 +256,9 @@
   /* if TRUE we have a grab on the focus click buttons */
   guint have_focus_click_grab : 1;
 
+  /* window is marked urgent */
+  guint is_urgent : 1;
+
   /* if TRUE, application is buggy and SYNC resizing is turned off */
   guint disable_sync : 1;
 
