diff --git a/clive/__private/ui/app.py b/clive/__private/ui/app.py
index b4c9dc41585cd5ebb47aca2ec01d7a3cae72bb22..7c067ca069f5e2fce1cd4e65776ff77840e7c159 100644
--- a/clive/__private/ui/app.py
+++ b/clive/__private/ui/app.py
@@ -14,7 +14,7 @@ from textual.await_complete import AwaitComplete
 from textual.binding import Binding
 from textual.notifications import Notification, Notify, SeverityLevel
 from textual.reactive import var
-from textual.worker import WorkerCancelled
+from textual.worker import NoActiveWorker, WorkerCancelled, get_current_worker
 
 from clive.__private.core.async_guard import AsyncGuard
 from clive.__private.core.constants.terminal import TERMINAL_HEIGHT, TERMINAL_WIDTH
@@ -435,6 +435,10 @@ class Clive(App[int]):
         self.pause_refresh_node_data_interval()
         self.pause_refresh_alarms_data_interval()
         self.pause_refresh_beekeeper_wallet_lock_status_interval()
+
+        # There might be ongoing workers that should be cancelled (e.g. DynamicWidget update)
+        self._cancel_workers_except_current()
+
         self.world.node.cached.clear()
         await self.switch_mode_with_reset("unlock")
         await self.world.switch_profile(None)
@@ -445,3 +449,13 @@ class Clive(App[int]):
         self.resume_refresh_node_data_interval()
         self.resume_refresh_alarms_data_interval()
         self.resume_refresh_beekeeper_wallet_lock_status_interval()
+
+    def _cancel_workers_except_current(self) -> None:
+        try:
+            current_worker = get_current_worker()
+        except NoActiveWorker:
+            current_worker = None
+
+        for worker in self.workers:
+            if worker != current_worker:
+                worker.cancel()