     }
   }
 
-  void display_steps(int16_t x, int16_t y, int8_t steps, DUINO_SSD1306::SSD1306Color color)
-  {
-    // draw center line
-    display->draw_hline(x + 1, y + 3, 14, color);
-
-    // draw top pips
-    for(uint8_t i = 0; i < 4; ++i)
-    {
-      if(i + 1 > steps)
-      {
-        break;
-      }
-      display->fill_rect(x + 1 + i * 4, y + 1, 2, 2, color);
-    }
-
-    // draw bottom pips
-    for(uint8_t i = 0; i < 4; ++i)
-    {
-      if(i + 5 > steps)
-      {
-        break;
-      }
-      display->fill_rect(x + 13 - i * 4, y + 4, 2, 2, color);
-    }
-  }
-
   void invert_current_selection()
   {
     switch(main_selected)
     {
       case 0: // save
         display->fill_rect(121, 0, 7, 7, DUINO_SSD1306::Inverse);
+        display_changed[0] = true;
         break;
       case 1: // top
         switch(top_selected)
         {
           case 0: // count
-            display->fill_rect(37, 1, 7, 9, DUINO_SSD1306::Inverse);
+            display->fill_rect(9, 11, 7, 9, DUINO_SSD1306::Inverse);
             break;
           case 1: // dir/add
-            display->fill_rect(46, 1, 7, 9, DUINO_SSD1306::Inverse);
+            display->fill_rect(21, 11, 7, 9, DUINO_SSD1306::Inverse);
             break;
           case 2: // slew
-            display->fill_rect(55, 1, 20, 9, DUINO_SSD1306::Inverse);
+            display->fill_rect(58, 11, 20, 9, DUINO_SSD1306::Inverse);
             break;
           case 3: // gate
-            display->fill_rect(77, 1, 20, 9, DUINO_SSD1306::Inverse);
+            display->fill_rect(83, 11, 20, 9, DUINO_SSD1306::Inverse);
             break;
           case 4: // clock
-            display->fill_rect(99, 1, 19, 9, DUINO_SSD1306::Inverse);
+            display->fill_rect(108, 11, 19, 9, DUINO_SSD1306::Inverse);
             break;
         }
+        display_changed[1] = true;
         break;
       case 2: // pitch
-        display->fill_rect(16 * stage_selected, 20, 16, 15, DUINO_SSD1306::Inverse);
+        display->fill_rect(16 * stage_selected, 32, 16, 15, DUINO_SSD1306::Inverse);
+        display_changed[3] = true;
         break;
       case 3: // steps
-        display->fill_rect(16 * stage_selected, 35, 16, 7, DUINO_SSD1306::Inverse);
+        display->fill_rect(16 * stage_selected, 48, 7, 9, DUINO_SSD1306::Inverse);
+        display_changed[4] = true;
         break;
       case 4: // gate
-        display->fill_rect(16 * stage_selected, 42, 16, 16, DUINO_SSD1306::Inverse);
+        display->fill_rect(16 * stage_selected + 7, 48, 9, 9, DUINO_SSD1306::Inverse);
+        display_changed[4] = true;
         break;
       case 5: // slew
         display->fill_rect(16 * stage_selected, 58, 16, 6, DUINO_SSD1306::Inverse);
-        break;
-    }
-  }
-
-  void display_gate(uint8_t stage)
-  {
-    display->fill_rect(16 * stage + 6, 12, 4, 4, DUINO_SSD1306::White);
-  }
-
-  void clear_gate()
-  {
-    display->fill_rect(6, 12, 116, 4, DUINO_SSD1306::Black);
+        display_changed[5] = true;
+        break;
+    }
+  }
+
+  void display_gate(uint8_t stage, DUINO_SSD1306::SSD1306Color color)
+  {
+    display->fill_rect(16 * stage + 6, 26, 4, 4, color);
   }
 
   uint8_t main_selected;  // 0 - save, 1 - top, 2 - pitch, 3 - steps, 4 - gate, 5 - slew

  bool last_gate;
  uint8_t last_stage;

  bool display_changed, gate_changed;

  struct DU_SEQ_Parameter_Values {
    int8_t stage_pitch[8];

          seq_values.stage_slew[stage_selected] = (bool)((params.vals.stage_slew >> stage_selected) & 1);
          display->fill_rect(16 * stage_selected + 1, 59, 14, 4, DUINO_SSD1306::Black);
          display->fill_rect(16 * stage_selected + 2 + 6 * (~(params.vals.stage_slew >> stage_selected) & 1), 60, 6, 2,
              DUINO_SSD1306::White);
          display_changed[5] = true;
          break;
      }

      // mark save box
      if(main_selected)
      {
        if(saved)
        {
          saved = false;
          display->fill_rect(123, 2, 3, 3, DUINO_SSD1306::Black);
          display_changed[0] = true;
        }
      }
    }

    // display gate
