diff --git a/src/client.c b/src/client.c
index 97aa33ba0068d222744500181e9ce67adfa1347f..16709d5db433036592bc23c291b4ac5d31c68c39 100644
--- a/src/client.c
+++ b/src/client.c
@@ -1586,7 +1586,7 @@ clientGetUserTime (Client * c)
     if (getNetWMUserTime (display_info, c->window, &c->user_time) && (c->user_time != 0))
     {
         FLAG_SET (c->flags, CLIENT_FLAG_HAS_USER_TIME);
-        myDisplaySetLastUserTime (display_info, c->user_time);
+        myDisplayUpdateLastUserTime (display_info, c->user_time);
     }
 }
 
diff --git a/src/display.c b/src/display.c
index 7bec3515fdfea4eadd16ccfdc73d4b4c3c73ff02..68670b3e7d5a94467d67b1ee31fedb0dfacf1444 100644
--- a/src/display.c
+++ b/src/display.c
@@ -753,6 +753,18 @@ myDisplaySetLastUserTime (DisplayInfo *display, Time timestamp)
     display->last_user_time = timestamp;
 }
 
+void
+myDisplayUpdateLastUserTime (DisplayInfo *display, Time timestamp)
+{
+    g_return_if_fail (display != NULL);
+    g_return_if_fail (timestamp != (Time) 0);
+
+    if (TIMESTAMP_IS_BEFORE(display->last_user_time, timestamp))
+    {
+	display->last_user_time = timestamp;
+    }
+}
+
 gboolean
 myDisplayTestXrender (DisplayInfo *display, gdouble min_time)
 {
diff --git a/src/display.h b/src/display.h
index 29815e9c8070bd06bf2379aafa3d30772afd4a20..8ff460b7c1fd7dc56b8077c69db47cc82e3c38e9 100644
--- a/src/display.h
+++ b/src/display.h
@@ -384,6 +384,8 @@ Time                     myDisplayGetTime                       (DisplayInfo *,
 Time                     myDisplayGetLastUserTime               (DisplayInfo *);
 void                     myDisplaySetLastUserTime               (DisplayInfo *,
                                                                  Time);
+void                     myDisplayUpdateLastUserTime            (DisplayInfo *, 
+                                                                 Time);
 gboolean                 myDisplayTestXrender                   (DisplayInfo *,
                                                                  gdouble);