 
 void loop_scroll_callback(int delta) { function->widget_loop_scroll_callback(delta); }
 void repeat_scroll_callback(int delta) { function->widget_repeat_scroll_callback(delta); }
-// TODO: define points callbacks
+void points_scroll_callback(uint8_t selected, int delta) { function->widgets_points_scroll_callback(selected, delta); }
+void points_invert_callback(uint8_t p) { function->widgets_points_invert_callback(p); }
 
 void setup()
 {

  DUINO_SaveWidget<ParameterValues> * widget_save_;
  DUINO_DisplayWidget * widget_loop_;
  DUINO_DisplayWidget * widget_repeat_;
  DUINO_Widget * widgets_points_[8];

  volatile bool gate_, retrigger_;
};

    Display.draw_char(79, 0, 'R', DUINO_SH1106::White);
    Display.draw_pixel(86, 1, DUINO_SH1106::White);
    Display.draw_pixel(86, 5, DUINO_SH1106::White);

    uint8_t i;
    
    // display level
    int8_t level = widget_save_->params.vals.level[p];
    if (level)
    {
      i = 0;
      while (level)
      {
        Display.draw_char(70 - 6 * i, 0, '0' + level % 10, DUINO_SH1106::White);
        level /= 10;
        i++;
      }
    }
    else
    {
      Display.draw_char(70, 0, '0', DUINO_SH1106::White);
    }

    // display rate
    uint16_t rate = rate_to_ms(p);
    if (rate)
    {
      i = 0;
      while (rate)
      {
        Display.draw_char(113 - 6 * i, 0, '0' + rate % 10, DUINO_SH1106::White);
        rate /= 10;
        i++;
      }
    }
    else
    {
      Display.draw_char(113, 0, '0', DUINO_SH1106::White);
    }

    if (update)
