@Override
  @RequiresXsrfCheck
  protected String doExecute() throws Exception {
    // Find all possibly affected issues.
    final List<GenericValue> associatedProjects = getConfigScheme().getAssociatedProjects();
    if ((associatedProjects != null) && !associatedProjects.isEmpty()) {
      final List<Long> projectIds = GenericValueUtils.transformToLongIdsList(associatedProjects);
      final Collection<Option> obseleteOptions =
          CollectionUtils.subtract(getOriginalOptions(), getNewOptions());
      if ((obseleteOptions != null) && !obseleteOptions.isEmpty()) {
        final List<String> obseleteOptionIds = new ArrayList<String>(obseleteOptions.size());
        for (final Option option : obseleteOptions) {
          obseleteOptionIds.add(option.getId());
        }

        final Query query = getQuery(projectIds, obseleteOptionIds);
        final SearchResults searchResults =
            searchProvider.search(query, getLoggedInUser(), PagerFilter.getUnlimitedFilter());
        final List affectedIssues = searchResults.getIssues();
        if ((affectedIssues != null) && !affectedIssues.isEmpty()) {
          // Prepare for Update
          configScheme =
              new FieldConfigScheme.Builder(getConfigScheme())
                  .setName(getName())
                  .setDescription(getDescription())
                  .toFieldConfigScheme();
          final List<String> optionIds = new ArrayList<String>(Arrays.asList(getSelectedOptions()));

          return migrateIssues(this, affectedIssues, optionIds);
        }
      }
    }

    return super.doExecute();
  }