diff --git a/python_payload/st3m/run.py b/python_payload/st3m/run.py
index fb953514920daabe0a10e2e33a8bb96dc0b620e4..ae95af878e7c75c2230e780b6ba68307883dc988 100644
--- a/python_payload/st3m/run.py
+++ b/python_payload/st3m/run.py
@@ -56,11 +56,11 @@ def _make_bundle_menu(bundles: List[BundleMetadata], kind: str) -> SimpleMenu:
     return SimpleMenu(entries)
 
 
-def _make_compositor(reactor: Reactor, r: Responder) -> overlays.Compositor:
+def _make_compositor(reactor: Reactor, vm: ViewManager) -> overlays.Compositor:
     """
     Set up top-level compositor (for combining viewmanager with overlays).
     """
-    compositor = overlays.Compositor(r)
+    compositor = overlays.Compositor(vm)
 
     volume = overlays.OverlayVolume()
     compositor.add_overlay(volume)
diff --git a/python_payload/st3m/ui/elements/overlays.py b/python_payload/st3m/ui/elements/overlays.py
index a5db8189e87b8110332b8fb72e5788022c151023..83f9780b1cbf356002ffde874f6bd0a3c6b0a733 100644
--- a/python_payload/st3m/ui/elements/overlays.py
+++ b/python_payload/st3m/ui/elements/overlays.py
@@ -9,6 +9,7 @@ etc.
 from st3m import Responder, InputState, Reactor
 from st3m.goose import Dict, Enum, List, ABCBase, abstractmethod, Optional
 from st3m.utils import tau
+from st3m.ui.view import ViewManager
 from ctx import Context
 
 import math
@@ -43,11 +44,11 @@ class Overlay(Responder):
 
 class Compositor(Responder):
     """
-    A Compositor blends together some main Responder (usually a ViewManager)
-    alongside with active Overlays. Overlays can be enabled/disabled by kind.
+    A Compositor blends together some ViewManager alongside with active
+    Overlays. Overlays can be enabled/disabled by kind.
     """
 
-    def __init__(self, main: Responder):
+    def __init__(self, main: ViewManager):
         self.main = main
         self.overlays: Dict[OverlayKind, List[Responder]] = {}
         self.enabled: Dict[OverlayKind, bool] = {
@@ -61,6 +62,8 @@ class Compositor(Responder):
         for kind in _all_kinds:
             if not self.enabled.get(kind, False):
                 continue
+            if kind == OverlayKind.Indicators and not self.main.wants_icons():
+                continue
             for overlay in self.overlays.get(kind, []):
                 res.append(overlay)
         return res
diff --git a/python_payload/st3m/ui/menu.py b/python_payload/st3m/ui/menu.py
index 66c82ca9db515cdc2ace886b42cbdd94ec285093..efcc8c59207115210d1e6b826dad8839b2d8f63d 100644
--- a/python_payload/st3m/ui/menu.py
+++ b/python_payload/st3m/ui/menu.py
@@ -211,3 +211,6 @@ class MenuController(BaseView):
         Automatically called on canonical user input.
         """
         self._items[self._scroll_controller.target_position()].press(self.vm)
+
+    def show_icons(self) -> bool:
+        return True
diff --git a/python_payload/st3m/ui/view.py b/python_payload/st3m/ui/view.py
index b3d8ba013a94d279779bb2580e9f34aa9f53981c..90aef9e57492e998a05d4510f10ce39410cd4f17 100644
--- a/python_payload/st3m/ui/view.py
+++ b/python_payload/st3m/ui/view.py
@@ -25,6 +25,13 @@ class View(Responder):
         """
         pass
 
+    def show_icons(self) -> bool:
+        """
+        View should return True if it accepts having system icons drawn on top
+        if it.
+        """
+        return False
+
 
 class BaseView(View):
     """
@@ -229,3 +236,12 @@ class ViewManager(Responder):
             return
         r = self._history.pop()
         self.replace(r, override_vt)
+
+    def wants_icons(self) -> bool:
+        """
+        Returns true if the current active view wants icon to be drawn on top of it.
+        """
+        if self._incoming is not None:
+            return self._incoming.show_icons()
+        else:
+            return True