diff --git a/src/boards/Tock/rtc-board.c b/src/boards/Tock/rtc-board.c
index 6e53e93e8..59b2e2a39 100644
--- a/src/boards/Tock/rtc-board.c
+++ b/src/boards/Tock/rtc-board.c
@@ -20,6 +20,7 @@
 
 #include "libtock/timer.h"
 #include "libtock/alarm.h"
+#include "libtock/read_only_state.h"
 
 // MCU Wake Up Time
 #define MIN_ALARM_DELAY                             3 // in ticks
@@ -41,6 +42,8 @@ typedef struct
     uint32_t        Time;         // Reference time
 }RtcTimerContext_t;
 
+void* read_only_state_buffer = NULL;
+
 static tock_timer_t timer;
 static uint32_t alarm_set_time = 0;
 
@@ -61,6 +64,9 @@ static RtcTimerContext_t RtcTimerContext;
 
 void RtcInit( void )
 {
+    read_only_state_buffer = malloc(READ_ONLY_STATEBUFFER_LEN);
+
+    read_only_state_allocate_region(read_only_state_buffer, READ_ONLY_STATEBUFFER_LEN);
 }
 
 uint32_t RtcSetTimerContext( void )
@@ -152,18 +158,24 @@ void RtcStartAlarm( uint32_t timeout )
 
 uint32_t RtcGetTimerValue( void )
 {
-    uint32_t now;
-    alarm_internal_read(&now);
-
-    return now;
+    if (read_only_state_buffer == NULL) {
+        uint32_t now;
+        alarm_internal_read(&now);
+        return now;
+    } else {
+        return read_only_state_get_ticks(read_only_state_buffer);
+    }
 }
 
 uint32_t RtcGetTimerElapsedTime( void )
 {
-    uint32_t now;
-    alarm_internal_read(&now);
-
-    return now - alarm_set_time;
+    if (read_only_state_buffer == NULL) {
+        uint32_t now;
+        alarm_internal_read(&now);
+        return now - alarm_set_time;
+    } else {
+        return read_only_state_get_ticks(read_only_state_buffer) - alarm_set_time;
+    }
 }
 
 uint32_t RtcGetCalendarTime( uint16_t *milliseconds )