diff --git a/src/client.c b/src/client.c
index 1577b0fbaa89c56a3372b9a933185373b9b7d6e8..7098ac0835d093e67b80a3c2b87ae9d7d07da7fd 100644
--- a/src/client.c
+++ b/src/client.c
@@ -395,7 +395,12 @@ clientUpdateUrgency (Client *c)
     if ((c->wmhints) && (c->wmhints->flags & XUrgencyHint))
     {
         FLAG_SET (c->wm_flags, WM_FLAG_URGENT);
-        c->blink_timeout_id =  g_timeout_add_full (0, 500, (GtkFunction) urgent_cb, (gpointer) c, NULL);
+	if (FLAG_TEST (c->xfwm_flags, XFWM_FLAG_VISIBLE))
+	{
+            c->blink_timeout_id =  
+	        g_timeout_add_full (0, 500, (GtkFunction) urgent_cb,
+		                            (gpointer) c, NULL);
+        }
     }
     if (FLAG_TEST (c->xfwm_flags, XFWM_FLAG_SEEN_ACTIVE)
         && !FLAG_TEST (c->wm_flags, WM_FLAG_URGENT)
@@ -1642,9 +1647,6 @@ clientFrame (DisplayInfo *display_info, Window w, gboolean recapture)
         clientSetNetState (c);
     }
     
-    /* Adjust to urgency state once the window is ready */
-    clientUpdateUrgency (c);
-
     /* Window is reparented now, so we can safely release the grab 
      * on the server 
      */
@@ -1937,6 +1939,8 @@ clientShowSingle (Client * c, gboolean change_state)
         FLAG_SET (c->xfwm_flags, XFWM_FLAG_VISIBLE);
         XMapWindow (display_info->dpy, c->frame);
         XMapWindow (display_info->dpy, c->window);
+        /* Adjust to urgency state as the window is visible */
+        clientUpdateUrgency (c);
     }
     if (change_state)
     {
@@ -1994,6 +1998,8 @@ clientHideSingle (Client * c, gboolean change_state)
     {
         FLAG_UNSET (c->xfwm_flags, XFWM_FLAG_VISIBLE);
         c->ignore_unmap++;
+        /* Adjust to urgency state as the window is not visible */
+        clientUpdateUrgency (c);
     }
     if (change_state)
     {