     widget_loop_->attach_scroll_callback(loop_scroll_callback);
     widget_repeat_ = new DUINO_DisplayWidget(115, 11, 13, 9, DUINO_Widget::Full);
     widget_repeat_->attach_scroll_callback(repeat_scroll_callback);
-    // TODO: widgets points
-    // TODO: attach points callbacks
     container_loop_repeat_ = new DUINO_WidgetContainer<2>(DUINO_Widget::Click);
     container_loop_repeat_->attach_child(widget_loop_, 0);
     container_loop_repeat_->attach_child(widget_repeat_, 1);
     container_points_ = new DUINO_WidgetContainer<8>(DUINO_Widget::Click);
-    // TODO: attach widgets points
+    for(uint8_t i  = 0; i < 8; ++i)
+    {
+      widgets_points_[i] = new DU_VSEG_PointWidget((i + 1) / 2, i & 1);
+      widgets_points_[i]->attach_invert_callback(points_invert_callback);
+      container_points_->attach_child(widgets_points_[i], i);
+      container_points_->attach_scroll_callback_array(points_scroll_callback);
+    }
     container_outer_ = new DUINO_WidgetContainer<3>(DUINO_Widget::DoubleClick, 1);
     container_outer_->attach_child(widget_save_, 0);
     container_outer_->attach_child(container_loop_repeat_, 1);

  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)
