diff --git a/server/timer.c b/server/timer.c
index ffa4b0354bddae765d362b300e85bca0275366c6..05c0e81afd68c363c17c140af3dba28dae8ef7d9 100644
--- a/server/timer.c
+++ b/server/timer.c
@@ -164,8 +164,7 @@ static int set_timer( struct timer *timer, timeout_t expire, unsigned int period
         period = 0;  /* period doesn't make any sense for a manual timer */
         timer->signaled = 0;
     }
-    if (expire > 0 && expire < current_time) expire = current_time;
-    timer->when     = expire;
+    timer->when     = (expire <= 0) ? current_time - expire : max( expire, current_time );
     timer->period   = period;
     timer->callback = callback;
     timer->arg      = arg;