diff --git a/buffyboard/main.c b/buffyboard/main.c
index 26054f3cce0e44832534f7b05aefd7b69a76377c..1fb634f038609f8ca156e91b89652535a7ac3628 100644
--- a/buffyboard/main.c
+++ b/buffyboard/main.c
@@ -284,7 +284,8 @@ int main(int argc, char *argv[]) {
 
     /* Periodically run timer / task handler */
     while(1) {
-        lv_timer_periodic_handler();
+        uint32_t time_till_next = lv_timer_handler();
+        usleep(time_till_next * 1000);
     }
 
     return 0;
diff --git a/unl0kr/main.c b/unl0kr/main.c
index e711e44e712e24a1786647e92179ab9ac81cae9c..02da2f33bd4550cfed7669ba06ce378e7a28869c 100644
--- a/unl0kr/main.c
+++ b/unl0kr/main.c
@@ -591,7 +591,8 @@ int main(int argc, char *argv[]) {
     uint32_t timeout = conf_opts.general.timeout * 1000; /* ms */
     while(1) {
         if (!timeout || lv_disp_get_inactive_time(NULL) < timeout) {
-            lv_timer_periodic_handler();
+            uint32_t time_till_next = lv_timer_handler();
+            usleep(time_till_next * 1000);
         } else if (timeout) {
             shutdown();
         }