private void configureOnChangeHandler() {
    final ScheduleEditor localThis = this;

    ICallback<IChangeHandler> handler =
        new ICallback<IChangeHandler>() {
          @Override
          public void onHandle(IChangeHandler o) {
            localThis.changeHandler();
          }
        };

    ChangeHandler changeHandler =
        new ChangeHandler() {
          @Override
          public void onChange(ChangeEvent event) {
            localThis.changeHandler();
          }
        };

    ClickHandler clickHandler =
        new ClickHandler() {

          @Override
          public void onClick(ClickEvent event) {
            localThis.changeHandler();
          }
        };

    scheduleCombo.addChangeHandler(changeHandler);
    runOnceEditor.setOnChangeHandler(handler);
    recurrenceEditor.setOnChangeHandler(handler);
    cronEditor.setOnChangeHandler(handler);

    if (daysListBox != null) {
      this.daysListBox.addChangeHandler(changeHandler);
    }
    if (hoursListBox != null) {
      this.hoursListBox.addChangeHandler(changeHandler);
    }
    if (minutesListBox != null) {
      this.minutesListBox.addChangeHandler(changeHandler);
    }

    if (this.startTimePicker != null) {
      startTimePicker.setOnChangeHandler(handler);
    }
    if (this.blockoutEndTimePicker != null) {
      this.blockoutEndTimePicker.setOnChangeHandler(handler);
    }

    if (this.durationRadioButton != null) {
      this.durationRadioButton.addClickHandler(clickHandler);
    }
    if (this.endTimeRadioButton != null) {
      this.endTimeRadioButton.addClickHandler(clickHandler);
    }
  }