diff --git a/python_payload/apps/demo_harmonic/__init__.py b/python_payload/apps/demo_harmonic/__init__.py
index ec52fc126baf066fa6b7e105940a47a9a42e1ab3..5f3a4f0aa15364f8b677820ae089e8e9a2de06f0 100644
--- a/python_payload/apps/demo_harmonic/__init__.py
+++ b/python_payload/apps/demo_harmonic/__init__.py
@@ -261,7 +261,7 @@ class HarmonicApp(Application):
         self.prev_captouch = [0] * 10
         self.fade = [0] * 5
         self.mode = 0
-        self._set_chord(3)
+        self._set_chord(3, force_update=True)
         self._num_modes = 3
 
         self._file_settings = None
@@ -370,9 +370,9 @@ class HarmonicApp(Application):
         self.lp.signals.reso = 2000
         self.lp.signals.gain.dB = +3
 
-    def _set_chord(self, i: int) -> None:
+    def _set_chord(self, i, force_update=False):
         hue = int(72 * (i + 0.5)) % 360
-        if i != self.chord_index:
+        if i != self.chord_index or force_update:
             self.chord_index = i
             leds.set_all_rgb(*bottom_petal_to_rgb(self.chord_index, soft=0))
             leds.update()
@@ -611,6 +611,7 @@ class HarmonicApp(Application):
             self._build_synth()
         self.blm.foreground = True
         self._load_settings()
+        self._set_chord(self.chord_index, force_update=True)
 
     def on_exit(self):
         if self.blm is not None:
diff --git a/python_payload/apps/gay_drums/__init__.py b/python_payload/apps/gay_drums/__init__.py
index a169b59b37f8bddfe425294f62df1b48661cd3bb..aafd616ff902bc6a02053ba0f55ad47b507fc85b 100644
--- a/python_payload/apps/gay_drums/__init__.py
+++ b/python_payload/apps/gay_drums/__init__.py
@@ -725,6 +725,7 @@ class GayDrums(Application):
         self.ct_prev = None
 
     def on_enter_done(self) -> None:
+        super().on_enter_done()
         # schedule one more redraw so draw_track_step_marker draws the real state
         self._render_list += [(self.draw_background, None)]
 
@@ -743,6 +744,7 @@ class GayDrums(Application):
             self.load_iter = self.iterate_loading()
         else:
             self.blm.background_mute_override = True
+        super().on_exit_done()
 
 
 # For running with `mpremote run`:
diff --git a/python_payload/apps/mandelbrot/__init__.py b/python_payload/apps/mandelbrot/__init__.py
index 0de97fb48b3be42019035e12ba80d1e51e9c0c81..68e6df8cb89cb4aaed33dcfb61a152fe0abfdbc5 100644
--- a/python_payload/apps/mandelbrot/__init__.py
+++ b/python_payload/apps/mandelbrot/__init__.py
@@ -15,6 +15,7 @@ class App(Application):
         self.yb = 1.0
 
     def on_enter_done(self):
+        super().on_enter_done()
         sys_display.set_mode(sys_display.cool | sys_display.x2)
 
     def draw(self, ctx: Context):
diff --git a/python_payload/apps/shoegaze/__init__.py b/python_payload/apps/shoegaze/__init__.py
index 718f2504332f0a8861e87ecbfb67cc932a889725..b50e39cb55de8e7c6f3f48687c13cffdf90aaf1c 100644
--- a/python_payload/apps/shoegaze/__init__.py
+++ b/python_payload/apps/shoegaze/__init__.py
@@ -45,7 +45,7 @@ class ShoegazeApp(Application):
         self._rand_rot = 0.0
         self.delay_on = True
         self.organ_on = False
-        self._set_chord(3)
+        self._set_chord(3, force_update=True)
 
     def _build_synth(self) -> None:
         if self.blm is None:
@@ -255,16 +255,18 @@ class ShoegazeApp(Application):
             self.bass_string.signals.trigger.start()
 
     def on_enter_done(self) -> None:
+        super().on_enter_done()
         if self.blm is None:
             self._build_synth()
         self.blm.foreground = True
+        self._set_chord(self.chord_index, force_update=True)
 
     def on_exit(self) -> None:
-        super().on_exit()
         if self.blm is not None:
             self.blm.clear()
             self.blm.free = True
         self.blm = None
+        super().on_exit()
 
 
 # For running with `mpremote run`:
diff --git a/python_payload/st3m/application.py b/python_payload/st3m/application.py
index 3a5354fb610710152a5dbc6ff275623a841c6b9c..4d1dc47431b35017727a4c05cc256c59f6dae48a 100644
--- a/python_payload/st3m/application.py
+++ b/python_payload/st3m/application.py
@@ -78,14 +78,21 @@ class Application(BaseView):
         if fully_exiting and self._wifi_preference is not None:
             st3m.wifi._onoff_wifi_update()
         super().on_exit()
+        # set the default graphics mode, this is a no-op if
+        # it is already set
         if fully_exiting:
-            # set the default graphics mode, this is a no-op if
-            # it is already set
             sys_display.set_mode(0)
-            # read menu led config from flash and set it
+        if fully_exiting:
+            leds.set_slew_rate(10)
+            leds.set_auto_update(1)
             led_patterns.set_menu_colors()
+
+    def on_exit_done(self):
+        fully_exiting = self.vm.direction == ViewTransitionDirection.BACKWARD
+        if fully_exiting:
             leds.set_slew_rate(10)
             leds.set_auto_update(1)
+            led_patterns.set_menu_colors()
 
     def think(self, ins: InputState, delta_ms: int) -> None:
         super().think(ins, delta_ms)