diff --git a/python_payload/st3m/run.py b/python_payload/st3m/run.py
index ef1378d9e61b1d8ee6cbe831afeec36bf2af6808..776adff98a66f9336bc5d0efdacd169f318d58cd 100644
--- a/python_payload/st3m/run.py
+++ b/python_payload/st3m/run.py
@@ -95,6 +95,15 @@ def _make_compositor(reactor: Reactor, vm: ViewManager) -> overlays.Compositor:
     settings.onoff_debug_touch.subscribe(_onoff_debug_touch_update)
     compositor.add_overlay(debug_touch)
 
+    # Tie compositor's icon visibility to setting.
+    def _onoff_show_tray_update() -> None:
+        compositor.enabled[
+            overlays.OverlayKind.Indicators
+        ] = settings.onoff_show_tray.value
+
+    _onoff_show_tray_update()
+    settings.onoff_show_tray.subscribe(_onoff_show_tray_update)
+
     # Add icon tray.
     compositor.add_overlay(overlays.IconTray())
     return compositor
diff --git a/python_payload/st3m/settings.py b/python_payload/st3m/settings.py
index 8ac39d3e29784aa42f1ce3043f506b080c348857..b4ee85a9b6416ed3ebaf77615dbbed79f79ac4b3 100644
--- a/python_payload/st3m/settings.py
+++ b/python_payload/st3m/settings.py
@@ -297,8 +297,10 @@ onoff_camp_wifi = OnOffTunable("Connect Camp WiFi", "system.camp_wifi_enabled",
 onoff_button_swap = OnOffTunable("Swap Buttons", "system.swap_buttons", False)
 onoff_debug = OnOffTunable("Debug Overlay", "system.debug", False)
 onoff_debug_touch = OnOffTunable("Touch Overlay", "system.debug_touch", False)
+onoff_show_tray = OnOffTunable("Show Icons", "system.show_icons", True)
 all_settings: List[UnaryTunable] = [
     onoff_camp_wifi,
+    onoff_show_tray,
     onoff_button_swap,
     onoff_debug,
     onoff_debug_touch,