           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);  
+              DUINO_SSD1306::White);
+          display_changed[5] = true;
           break;
       }
 
       // mark save box
       if(main_selected)
       {
-        display->fill_rect(123, 2, 3, 3, DUINO_SSD1306::Black);
-      }
-
-      display_changed = (bool)main_selected;
+        if(saved)
+        {
+          saved = false;
+          display->fill_rect(123, 2, 3, 3, DUINO_SSD1306::Black);
+          display_changed[0] = true;
+        }
+      }
     }
 
     // display gate

    }
  }

  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);
        break;
      case 1: // top
        switch(top_selected)
        {
          case 0: // count
            display->fill_rect(37, 1, 7, 9, DUINO_SSD1306::Inverse);
            break;
          case 1: // dir/add
            display->fill_rect(46, 1, 7, 9, DUINO_SSD1306::Inverse);
            break;
          case 2: // slew
            display->fill_rect(55, 1, 20, 9, DUINO_SSD1306::Inverse);
            break;
          case 3: // gate
            display->fill_rect(77, 1, 20, 9, DUINO_SSD1306::Inverse);
            break;
          case 4: // clock
            display->fill_rect(99, 1, 19, 9, DUINO_SSD1306::Inverse);
            break;
        }
        break;
      case 2: // pitch
        display->fill_rect(16 * stage_selected, 20, 16, 15, DUINO_SSD1306::Inverse);
        break;
      case 3: // steps
        display->fill_rect(16 * stage_selected, 35, 16, 7, DUINO_SSD1306::Inverse);
        break;
      case 4: // gate
        display->fill_rect(16 * stage_selected, 42, 16, 16, DUINO_SSD1306::Inverse);
        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);
  }

  uint8_t main_selected;  // 0 - save, 1 - top, 2 - pitch, 3 - steps, 4 - gate, 5 - slew

            params.vals.stage_steps[stage_selected] = 8;
          }
          seq_values.stage_steps[stage_selected] = params.vals.stage_steps[stage_selected];
          display->fill_rect(16 * stage_selected + 1, 49, 5, 7, DUINO_SSD1306::White);
          display->draw_char(16 * stage_selected + 1, 49, '0' + params.vals.stage_steps[stage_selected],
              DUINO_SSD1306::Black);
          display_changed[4] = true;
          break;
        case 4: // gate
          params.vals.stage_gate[stage_selected] += v;
