diff --git a/python_payload/apps/gay_drums/__init__.py b/python_payload/apps/gay_drums/__init__.py
index d29ba965c014479dd008b5c44c09e5da83e8df37..99d817004fc31774efe731e7e7bf2caf2aa81d8d 100644
--- a/python_payload/apps/gay_drums/__init__.py
+++ b/python_payload/apps/gay_drums/__init__.py
@@ -1,6 +1,6 @@
 import bl00mbox
-import captouch
 import leds
+import captouch
 
 from st3m.application import Application, ApplicationContext
 from st3m.input import InputState
@@ -36,7 +36,7 @@ class GayDrums(Application):
         self.seq.signals.bpm.value = 80
 
         self.track_names = ["kick", "hihat", "snare", "crash", "nya", "woof"]
-        self.ct_prev = captouch.read()
+        self.ct_prev: Optional[captouch.CaptouchState] = None
         self.track = 1
         self.blm.background_mute_override = True
         self.tap_tempo_press_counter = 0
@@ -59,7 +59,12 @@ class GayDrums(Application):
         self._redraw_background = 2
         self._group_gap = 5
         self.background_col: Color = (0, 0, 0)
-        self.highlight_col: Color = (0.15, 0.15, 0.15)
+        self.bar_col = (0.5, 0.5, 0.5)
+        self.highlight_col: Color = self.bar_col
+        self.highlight_outline: bool = True
+
+        self.draw_background_counter = 0
+        self.full_redraw_timer_ms = 0
 
     def set_bar_mode(self, mode: int) -> None:
         # TODO: figure out how to speed up re-render
@@ -128,23 +133,17 @@ class GayDrums(Application):
 
     def draw_background(self, ctx: Context, data: None) -> None:
         ctx.rgb(0, 0, 0).rectangle(-120, -120, 240, 240).fill()
-
-        # group bars
-        bar_len = 10 * (1 + self.num_samplers)
-        bar_pos = 4 * 12 + self._group_gap
-        self.ctx_draw_centered_rect(ctx, 0, 0, 1, bar_len, (0.5, 0.5, 0.5))
-        self.ctx_draw_centered_rect(ctx, bar_pos, 0, 1, bar_len, (0.5, 0.5, 0.5))
-        self.ctx_draw_centered_rect(ctx, -bar_pos, 0, 1, bar_len, (0.5, 0.5, 0.5))
+        self.draw_bars(ctx, None)
 
         ctx.font = ctx.get_font_name(1)
 
         ctx.font_size = 15
         ctx.rgb(0.6, 0.6, 0.6)
 
-        ctx.move_to(0, -85)
+        ctx.move_to(0, -80)
         ctx.text("(hold) stop")
 
-        ctx.move_to(0, -100)
+        ctx.move_to(0, -95)
         ctx.text("tap tempo")
 
         self.draw_track_name(ctx, None)
@@ -212,7 +211,6 @@ class GayDrums(Application):
 
     def draw_track_step_marker(self, ctx: Context, data: Tuple[int, int]) -> None:
         track, step = data
-        self._group_gap = 4
         rgb = self._track_col(track)
         rgbf = (rgb[0] / 256, rgb[1] / 256, rgb[2] / 256)
         y = -int(12 * (track - (self.num_samplers - 1) / 2))
@@ -223,7 +221,7 @@ class GayDrums(Application):
         x = int(-x)
         group = step // 4
         bg = self.background_col
-        if self._group_highlight_on[group]:
+        if self._group_highlight_on[group] and not self.highlight_outline:
             bg = self.highlight_col
         if trigger_state == 3:
             self.ctx_draw_centered_rect(ctx, x, y, 8, 8, rgbf)
@@ -245,58 +243,116 @@ class GayDrums(Application):
         nosy = int(posy - (sizey / 2))
         ctx.rectangle(nosx, nosy, int(sizex), int(sizey)).fill()
 
+    def draw_bars(self, ctx: Context, data: None) -> None:
+        ctx.move_to(0, 0)
+        bar_len = 10 * (1 + self.num_samplers)
+        bar_pos = 4 * 12 + self._group_gap
+        self.ctx_draw_centered_rect(ctx, 0, 0, 1, bar_len, self.bar_col)
+        self.ctx_draw_centered_rect(ctx, bar_pos, 0, 1, bar_len, self.bar_col)
+        self.ctx_draw_centered_rect(ctx, -bar_pos, 0, 1, bar_len, self.bar_col)
+
     def draw_group_highlight(self, ctx: Context, data: int) -> None:
         i = data
         col = self.background_col
         if self._group_highlight_on[i]:
             col = self.highlight_col
-        sizex = 48 + self._group_gap - 2
-        sizey = 10 * (1 + self.num_samplers)
-        posx = -int((12 * 4 + 1 + self._group_gap) * (1.5 - i))
+
+        bar_len = 10 * (1 + self.num_samplers)
+        bar_pos = 4 * 12 + self._group_gap
+
+        sizex = 4 * 12
+        sizey = bar_len
+        posx = int(bar_pos * (i - 1.5))
         posy = 0
-        self.ctx_draw_centered_rect(ctx, posx, posy, sizex, sizey, col)
 
-        for x in range(self.num_samplers):
-            for y in range(4):
-                self.draw_track_step_marker(ctx, (x, y + 4 * i))
+        if self.highlight_outline:
+            self.ctx_draw_centered_rect(
+                ctx, posx, int(sizey / 2) + 2, sizex - 2, 1, col
+            )
+            self.ctx_draw_centered_rect(
+                ctx, posx, int(-sizey / 2) - 2, sizex - 2, 1, col
+            )
+            if i == 0:
+                self.ctx_draw_centered_rect(ctx, -2 * bar_pos, 0, 1, bar_len, col)
+            if i == 3:
+                self.ctx_draw_centered_rect(ctx, 2 * bar_pos, 0, 1, bar_len, col)
+        else:
+            self.ctx_draw_centered_rect(ctx, posx, posy, sizex, sizey, col)
+            for x in range(self.num_samplers):
+                for y in range(4):
+                    self.draw_track_step_marker(ctx, (x, y + 4 * i))
 
     def draw_bpm(self, ctx: Context, data: None) -> None:
-        self.ctx_draw_centered_rect(ctx, 0, -65, 200, 22, (0, 0, 0))
+        ctx.text_align = ctx.MIDDLE
+        ctx.move_to(0, 0)
+        self.ctx_draw_centered_rect(ctx, 0, -60, 200, 24, (0, 0, 0))
         bpm = self.seq.signals.bpm.value
         ctx.font = ctx.get_font_name(1)
         ctx.font_size = 20
 
-        ctx.move_to(0, -65)
+        ctx.move_to(0, -60)
         ctx.rgb(255, 255, 255)
         ctx.text(str(bpm) + " bpm")
 
+    def draw_volume_area(self, ctx: Context, data: None) -> None:
+        ctx.move_to(0, 0)
+        bar_len = 10 * (1 + self.num_samplers)
+        self.ctx_draw_centered_rect(ctx, 0, 0, 6 * 12, bar_len, (0, 0, 0))
+        self.ctx_draw_centered_rect(ctx, 0, 0, 1, bar_len, (0.5, 0.5, 0.5))
+
+        for track in range(self.num_samplers):
+            for step in range(5, 16 - 5):
+                self.draw_track_step_marker(ctx, (track, step))
+        for i in range(1, 3):
+            self._group_highlight_redraw[i] = True
+
     def draw(self, ctx: Context) -> None:
+        ctx.text_align = ctx.MIDDLE
         if not self.init_complete:
             ctx.rgb(0, 0, 0).rectangle(-120, -120, 240, 240).fill()
 
             ctx.font = ctx.get_font_name(0)
-            ctx.text_align = ctx.MIDDLE
             ctx.font_size = 24
-            ctx.move_to(0, -10)
+            ctx.move_to(0, -40)
             ctx.rgb(0.8, 0.8, 0.8)
             if self.samples_loaded == self.samples_total:
                 ctx.text("Loading complete")
+                self.loading_text = "(drawing screen will take a sec)"
             else:
                 ctx.text("Loading samples...")
 
             ctx.font_size = 16
-            ctx.move_to(0, 10)
+            ctx.move_to(0, -20)
             ctx.text(self.loading_text)
 
+            tutorial = (
+                "how to:\n"
+                "press one of the 4 left petals\n"
+                "and one of the 4 right petals\n"
+                "at the same time to toggle\n"
+                "an event in the grid"
+            )
+            ctx.font_size = 16
+            for x, line in enumerate(tutorial.split("\n")):
+                if not x:
+                    continue
+                ctx.move_to(0, 5 + 19 * x)
+                ctx.text(line)
+
             progress = self.samples_loaded / self.samples_total
             bar_len = 120 / self.samples_total
             for x in range(self.samples_loaded):
                 rgb = self._track_col(x)
                 rgbf = (rgb[0] / 256, rgb[1] / 256, rgb[2] / 256)
                 ctx.rgb(*rgbf)
-                ctx.rectangle(x * bar_len - 60, 30, bar_len, 10).fill()
+                ctx.rectangle(x * bar_len - 60, -8, bar_len, 10).fill()
             return
 
+        if self.draw_background_counter > 0:
+            self._render_list_1 += [(self.draw_background, None)]
+            self._render_list_1 += [(self.draw_background, None)]
+            self.draw_background_counter -= 1
+
         for i in range(4):
             if self._group_highlight_redraw[i]:
                 self._group_highlight_redraw[i] = False
@@ -327,7 +383,7 @@ class GayDrums(Application):
         self.ctx_draw_centered_rect(ctx, stepx, stepy, dotsize, dotsize, (1, 1, 1))
 
     def draw_track_name(self, ctx: Context, data: None) -> None:
-        self.ctx_draw_centered_rect(ctx, 0, 60, 200, 30, self.background_col)
+        self.ctx_draw_centered_rect(ctx, 0, 60, 200, 40, self.background_col)
         ctx.font = ctx.get_font_name(1)
         ctx.text_align = ctx.MIDDLE
 
@@ -370,6 +426,18 @@ class GayDrums(Application):
     def think(self, ins: InputState, delta_ms: int) -> None:
         super().think(ins, delta_ms)
 
+        if self.full_redraw_timer_ms > 0:
+            self.full_redraw_timer_ms -= delta_ms
+            if self.full_redraw_timer_ms < 0:
+                self._render_list_1 += [(self.draw_volume_area, None)]
+
+        if self.input.buttons.os.left.pressed or self.input.buttons.os.right.pressed:
+            self.full_redraw_timer_ms = 2000
+
+        if self.ct_prev is None:
+            self.ct_prev = ins.captouch
+            return
+
         if not self.init_complete:
             try:
                 self.samples_loaded, self.loading_text = next(self.load_iter)
@@ -389,7 +457,7 @@ class GayDrums(Application):
             self.bar = st // 16
             self._group_highlight_redraw = [True] * 4
 
-        ct = captouch.read()
+        ct = ins.captouch
         for i in range(4):
             if ct.petals[6 + i].pressed:
                 if not self._group_highlight_on[i]:
@@ -456,5 +524,5 @@ class GayDrums(Application):
         self.ct_prev = ct
 
     def on_enter(self, vm: Optional[ViewManager]) -> None:
-        self._render_list_1 += [(self.draw_background, None)]
-        self._render_list_1 += [(self.draw_background, None)]  # nice
+        self.ct_prev = None
+        self.draw_background_counter = 2