diff --git a/sched/timer_gettime.c b/sched/timer_gettime.c
index 91a5a60d0f..26499555c5 100644
--- a/sched/timer_gettime.c
+++ b/sched/timer_gettime.c
@@ -114,7 +114,7 @@ int timer_gettime(timer_t timerid, FAR struct itimerspec *value)
   /* Convert that to a struct timespec and return it */
 
   (void)clock_ticks2time(ticks, &value->it_value);
-  (void)clock_ticks2time(timer->pt_delay, &value->it_interval);
+  (void)clock_ticks2time(timer->pt_last, &value->it_interval);
   return OK;
 }
 
diff --git a/sched/timer_internal.h b/sched/timer_internal.h
index 1c1e8ec540..604adbc8ef 100644
--- a/sched/timer_internal.h
+++ b/sched/timer_internal.h
@@ -65,6 +65,7 @@ struct posix_timer_s
   ubyte           pt_signo;        /* Notification signal */
   pid_t           pt_owner;        /* Creator of timer */
   int             pt_delay;        /* If non-zero, used to reset repetitive timers */
+  int             pt_last;         /* Last value used to set watchdog */
   WDOG_ID         pt_wdog;         /* The watchdog that provides the timing */
   union sigval    pt_value;        /* Data passed with notification */
 };
diff --git a/sched/timer_settime.c b/sched/timer_settime.c
index fda730f9bc..29796a5933 100644
--- a/sched/timer_settime.c
+++ b/sched/timer_settime.c
@@ -139,6 +139,7 @@ static void inline timer_restart(FAR struct posix_timer_s *timer, uint32 itimer)
 
   if (timer->pt_delay)
     {
+      timer->pt_last = timer->pt_delay;
       (void)wd_start(timer->pt_wdog, timer->pt_delay, timer_timeout, 1, itimer);
     }
 }
@@ -353,6 +354,7 @@ int timer_settime(timer_t timerid, int flags, FAR const struct itimerspec *value
 
   if (delay > 0)
     {
+      timer->pt_last = delay;
       ret = wd_start(timer->pt_wdog, timer->pt_delay, timer_timeout, 1, (uint32)timer);
     }