       if(widget_save_->params.vals.level[p] != level_last)
       {
         widget_save_->mark_changed();
+        update_cached_ = true;
         widget_save_->display();
         display_plr(p);
         display_envelope();

      if(widget_save_->params.vals.rate[p - 1] != rate_last)
      {
        widget_save_->mark_changed();
        widget_save_->display();
        display_plr(p);
        display_loop();

      gate_time_ = 0;
      release_time_ = 0;
      retrigger_ = false;

      if (update_cached_)
      {
        cached_params_ = widget_save_->params.vals;
        update_cached_ = false;
      }
    }

    if (gate_time_)
