diff --git a/python_payload/st3m/event.py b/python_payload/st3m/event.py
index 99982163815297e78a2ba67fc003918076e02ea6..50ae27b10d564b0db6c025fdae7208ec16589b55 100644
--- a/python_payload/st3m/event.py
+++ b/python_payload/st3m/event.py
@@ -73,7 +73,7 @@ class Engine:
                 self.next_timed.trigger({"ticks_ms": now, "ticks_delay": -diff})
                 self.next_timed = None
 
-    def _handle_input(self):
+    def _handle_input(self, delta):
         input_state = []
 
         # buttons
@@ -108,6 +108,7 @@ class Engine:
 
             # update for all
             entry["ticks_ms"] = time.ticks_ms()
+            entry["delta"] = delta
 
             if entry["value"] != last_entry["value"]:
                 # update only when value changed
@@ -132,16 +133,16 @@ class Engine:
         if self.foreground_app:
             self.foreground_app.tick()
 
-    def _handle_draw(self):
+    def _handle_draw(self, ctx):
         if self.foreground_app:
-            self.foreground_app.draw()
+            self.foreground_app.draw(ctx)
         if self.active_menu:
-            self.active_menu.draw()
+            self.active_menu.draw(ctx)
         hardware.display_update()
 
-    def _eventloop_single(self):
+    def _eventloop_single(self, delta):
         self._handle_timed()
-        self._handle_input()
+        self._handle_input(delta)
         self._handle_userloop()
 
     def eventloop(self):
@@ -150,15 +151,21 @@ class Engine:
             log.warning("eventloop already running, doing nothing")
             return
         self.is_running = True
+        ctx = hardware.get_ctx()
         last_draw = 0
+        last_eventloop = None
         while self.is_running:
-            self._eventloop_single()
             now = time.ticks_ms()
+            if last_eventloop is not None:
+                delta = now - last_eventloop
+                self._eventloop_single(delta / 1000.0)
+            last_eventloop = now
+
             diff = time.ticks_diff(now, last_draw)
             # print("diff:",diff)
             if diff > 10:
                 # print("eventloop draw")
-                self._handle_draw()
+                self._handle_draw(ctx)
                 last_draw = time.ticks_ms()
 
             # self.deadline = time.ticks_add(time.ticks_ms(),ms)
diff --git a/python_payload/st3m/menu.py b/python_payload/st3m/menu.py
index 203810339f60f92ec27741135e9270fef4fe98a7..cd475fa25512cbc038a4b8ccd121ea50219d5fc9 100644
--- a/python_payload/st3m/menu.py
+++ b/python_payload/st3m/menu.py
@@ -230,10 +230,10 @@ def on_scroll(d):
         return
 
     if d["index"] == 0:  # right button
-        active_menu.scroll_app(d["value"])
+        active_menu.scroll_app(d["value"] * 10.0 * d["delta"])
 
     else:  # index=1, #left button
-        active_menu.scroll_menu(d["value"])
+        active_menu.scroll_menu(d["value"] * 10.0 * d["delta"])
 
 
 def on_scroll_captouch(d):