diff -u libwnck-2.6.0.1/libwnck/tasklist.c libwnck-2.6.0.1-new/libwnck/tasklist.c
--- libwnck-2.6.0.1/libwnck/tasklist.c	2003-12-10 03:31:36.000000000 -0800
+++ libwnck-2.6.0.1-new/libwnck/tasklist.c	2004-11-05 21:24:41.734166576 -0800
@@ -55,6 +55,7 @@
 
 typedef struct _WnckTask        WnckTask;
 typedef struct _WnckTaskClass   WnckTaskClass;
+typedef struct _WnckTaskWindow	WnckTaskWindow;
 
 #define MINI_ICON_SIZE 16
 #define DEFAULT_GROUPING_LIMIT 80
@@ -119,6 +120,12 @@
   GObjectClass parent_class;
 };
 
+struct _WnckTaskWindow
+{
+  WnckTasklist *tasklist;
+  WnckWindow *window;
+};
+
 struct _WnckTasklistPrivate
 {
   WnckScreen *screen;
@@ -170,6 +177,7 @@
 };
 
 
+static gboolean urgent_timeout_callback(gpointer data);
 static void wnck_task_init        (WnckTask      *task);
 static void wnck_task_class_init  (WnckTaskClass *klass);
 static void wnck_task_finalize    (GObject       *object);
@@ -2162,6 +2170,7 @@
 {
   WnckTasklist *tasklist = WNCK_TASKLIST (data);
 
+  GtkRcStyle *style;
   if (changed_mask & WNCK_WINDOW_STATE_SKIP_TASKLIST)
     {
       wnck_tasklist_update_lists  (tasklist);
@@ -2188,7 +2197,36 @@
 	    wnck_task_update_visible_state (class_group_task);
 	}
     }
-    
+  
+  if (changed_mask & WNCK_WINDOW_STATE_URGENT) 
+  {
+    WnckTask *win_task;
+    WnckTaskWindow *taskwin;
+
+    win_task = g_hash_table_lookup(tasklist->priv->win_hash, window);
+
+    if (win_task)
+    {
+      if(new_state & WNCK_WINDOW_STATE_URGENT)
+      {
+        taskwin = g_new0 (WnckTaskWindow, 1);
+        taskwin->tasklist = tasklist;
+        taskwin->window = window;
+
+        g_timeout_add(1000, urgent_timeout_callback, taskwin);
+      }
+      else
+      {
+        style = gtk_widget_get_modifier_style (win_task->button);
+        style->color_flags[GTK_STATE_NORMAL] = 0;
+        gtk_widget_modify_style (win_task->button, style);
+        style = gtk_widget_get_modifier_style (win_task->label);
+        style->color_flags[GTK_STATE_NORMAL] = 0;
+        gtk_widget_modify_style(win_task->label, style);
+      }
+    }
+  }
+  
 }
 
 static void
@@ -2647,9 +2685,9 @@
 #define STARTUP_TIMEOUT 15000
 
 static gboolean
-sequence_timeout_callback (void *user_data)
+sequence_timeout_callback (gpointer data)
 {
-  WnckTasklist *tasklist = user_data;
+  WnckTasklist *tasklist = (WnckTasklist *)data;
   GList *tmp;
   GTimeVal now;
   long tv_sec, tv_usec;
@@ -2693,6 +2731,65 @@
     return TRUE;
 }
 
+static gboolean
+urgent_timeout_callback (gpointer data)
+{
+  WnckTaskWindow *taskwin = (WnckTaskWindow *) data;
+  WnckTask *task;
+  GtkStyle *style;
+  GtkRcStyle *mod;
+  GdkColor c;
+  WnckWindowState state;
+
+  task = (g_hash_table_lookup (taskwin->tasklist->priv->win_hash,
+         taskwin->window));
+ 
+  if(task == NULL)
+  {
+    g_free(taskwin);
+    return FALSE;
+  }
+
+  state = wnck_window_get_state (task->window);
+ 
+  if(state & WNCK_WINDOW_STATE_URGENT)
+  {
+    style = gtk_widget_get_style (task->button);
+    mod = gtk_widget_get_modifier_style (task->button);
+    c = style->bg[GTK_STATE_PRELIGHT];
+    if(mod->color_flags[GTK_STATE_NORMAL] & GTK_RC_BG)
+    {
+      mod->color_flags[GTK_STATE_NORMAL] &= ~(GTK_RC_BG);
+      gtk_widget_modify_style(task->button, mod);
+    }
+    else
+    {
+      mod->color_flags[GTK_STATE_NORMAL] |= GTK_RC_BG;
+      mod->bg[GTK_STATE_NORMAL] = c;
+      gtk_widget_modify_style(task->button, mod);
+    }
+
+    style = gtk_widget_get_style (task->label);
+    mod = gtk_widget_get_modifier_style (task->label);
+    c = style->fg[GTK_STATE_PRELIGHT];
+
+    if(mod->color_flags[GTK_STATE_NORMAL] & GTK_RC_FG)
+    {
+      mod->color_flags[GTK_STATE_NORMAL] &= ~(GTK_RC_FG);
+      gtk_widget_modify_style(task->label, mod);
+    }
+    else
+    {
+      mod->color_flags[GTK_STATE_NORMAL] |= GTK_RC_FG;
+      mod->fg[GTK_STATE_NORMAL] = c;
+      gtk_widget_modify_style(task->label, mod);
+    }
+
+  }
+  
+  return (state & WNCK_WINDOW_STATE_URGENT);
+}
+
 static void
 wnck_tasklist_sn_event (SnMonitorEvent *event,
                         void           *user_data)
diff -u libwnck-2.6.0.1/libwnck/window.c libwnck-2.6.0.1-new/libwnck/window.c
--- libwnck-2.6.0.1/libwnck/window.c	2004-02-03 01:54:33.000000000 -0800
+++ libwnck-2.6.0.1-new/libwnck/window.c	2004-11-05 21:37:36.298414912 -0800
@@ -46,7 +46,8 @@
     ((window)->priv->skip_taskbar        << 5) |        \
     ((window)->priv->is_sticky           << 6) |        \
     ((window)->priv->is_hidden           << 7) |        \
-    ((window)->priv->is_fullscreen       << 8) )
+    ((window)->priv->is_fullscreen       << 8) |	\
+    ((window)->priv->is_urgent           << 9) )
 
 struct _WnckWindowPrivate
 {
@@ -97,6 +98,7 @@
   guint is_sticky : 1;
   guint is_hidden : 1;
   guint is_fullscreen : 1;
+  guint is_urgent : 1;
 
   /* _NET_WM_STATE_HIDDEN doesn't map directly into an
    * externally-visible state (it determines the WM_STATE
@@ -122,6 +124,7 @@
   guint need_update_transient_for : 1;
   guint need_update_startup_id : 1;
   guint need_update_wmclass : 1;
+  guint need_update_wmhints : 1;
 };
 
 enum {
@@ -395,6 +398,7 @@
   window->priv->need_update_transient_for = TRUE;
   window->priv->need_update_startup_id = TRUE;
   window->priv->need_update_wmclass = TRUE;
+  window->priv->need_update_wmhints = TRUE;
   force_update_now (window);
 
   return window;
@@ -1461,14 +1465,18 @@
   else if (xevent->xproperty.atom ==
            _wnck_atom_get ("_NET_WM_ICON") ||
            xevent->xproperty.atom ==
-           _wnck_atom_get ("KWM_WIN_ICON") ||
-           xevent->xproperty.atom ==
-           _wnck_atom_get ("WM_HINTS"))
+           _wnck_atom_get ("KWM_WIN_ICON"))
     {
       _wnck_icon_cache_property_changed (window->priv->icon_cache,
                                          xevent->xproperty.atom);
       queue_update (window);
     }
+  else if (xevent->xproperty.atom ==
+           _wnck_atom_get ("WM_HINTS"))
+    {
+      window->priv->need_update_wmhints = TRUE;
+      queue_update(window);
+    }
 }
 
 void
@@ -1927,6 +1935,17 @@
 }
 
 static void
+update_wmhints (WnckWindow * window)
+{
+  gboolean retval;
+  if (!window->priv->need_update_wmhints)
+    return;
+  window->priv->need_update_wmhints = FALSE;
+  retval = _wnck_read_hints(window->priv->xwindow);
+  window->priv->is_urgent = (retval ? 1 : 0);
+}
+
+static void
 force_update_now (WnckWindow *window)
 {
   WnckWindowState old_state;
@@ -1981,6 +2000,7 @@
 
   update_startup_id (window);    /* no side effects */
   update_wmclass (window);
+  update_wmhints (window);
   update_transient_for (window); /* wintype needs this to be first */
   update_wintype (window);
   update_wm_state (window);
diff -u libwnck-2.6.0.1/libwnck/window.h libwnck-2.6.0.1-new/libwnck/window.h
--- libwnck-2.6.0.1/libwnck/window.h	2003-12-10 03:31:37.000000000 -0800
+++ libwnck-2.6.0.1-new/libwnck/window.h	2004-11-05 21:39:01.684434264 -0800
@@ -42,7 +42,8 @@
   WNCK_WINDOW_STATE_SKIP_TASKLIST          = 1 << 5,
   WNCK_WINDOW_STATE_STICKY                 = 1 << 6,
   WNCK_WINDOW_STATE_HIDDEN                 = 1 << 7,
-  WNCK_WINDOW_STATE_FULLSCREEN             = 1 << 8
+  WNCK_WINDOW_STATE_FULLSCREEN             = 1 << 8,
+  WNCK_WINDOW_STATE_URGENT                 = 1 << 9
 } WnckWindowState;
 
 typedef enum
diff -u libwnck-2.6.0.1/libwnck/xutils.c libwnck-2.6.0.1-new/libwnck/xutils.c
--- libwnck-2.6.0.1/libwnck/xutils.c	2003-08-28 09:13:32.000000000 -0700
+++ libwnck-2.6.0.1-new/libwnck/xutils.c	2004-11-05 21:43:51.362396520 -0800
@@ -1970,6 +1970,25 @@
 }
 
 gboolean
+_wnck_read_hints (Window xwindow)
+{
+  XWMHints *hints;
+  gboolean retval;
+  retval = FALSE;
+  _wnck_error_trap_push ();
+  hints = XGetWMHints (gdk_display, xwindow);
+  _wnck_error_trap_pop ();
+  if (hints)
+    {
+      retval = (hints->flags & XUrgencyHint);
+      XFree(hints);
+      hints = NULL;
+    }
+  
+  return retval;
+}
+
+gboolean
 _wnck_read_icons (Window         xwindow,
                   WnckIconCache *icon_cache,
                   GdkPixbuf    **iconp,
diff -u libwnck-2.6.0.1/libwnck/xutils.h libwnck-2.6.0.1-new/libwnck/xutils.h
--- libwnck-2.6.0.1/libwnck/xutils.h	2003-04-03 22:50:10.000000000 -0800
+++ libwnck-2.6.0.1-new/libwnck/xutils.h	2004-11-05 21:46:00.304794296 -0800
@@ -137,6 +137,7 @@
 void           _wnck_icon_cache_set_want_fallback    (WnckIconCache *icon_cache,
                                                       gboolean       setting);
 gboolean       _wnck_icon_cache_get_is_fallback      (WnckIconCache *icon_cache);
+gboolean       _wnck_read_hints                      (Window xwindow);
 
 gboolean _wnck_read_icons         (Window          xwindow,
                                    WnckIconCache  *icon_cache,
