@Override
 public void addParam(final String key, final String value) {
   // adding underscore parameters is still supported for backward compatibility.
   if (key != null && key.startsWith(MODULE)) {
     StrategySettings settings =
         getStrategySettings(
             Id.create(key.substring(MODULE.length()), StrategySettings.class), true);
     settings.setStrategyName(value);
   } else if (key != null && key.startsWith(MODULE_PROBABILITY)) {
     StrategySettings settings =
         getStrategySettings(
             Id.create(key.substring(MODULE_PROBABILITY.length()), StrategySettings.class), true);
     settings.setWeight(Double.parseDouble(value));
   } else if (key != null && key.startsWith(MODULE_DISABLE_AFTER_ITERATION)) {
     StrategySettings settings =
         getStrategySettings(
             Id.create(
                 key.substring(MODULE_DISABLE_AFTER_ITERATION.length()), StrategySettings.class),
             true);
     settings.setDisableAfter(Integer.parseInt(value));
   } else if (key != null && key.startsWith(MODULE_EXE_PATH)) {
     StrategySettings settings =
         getStrategySettings(
             Id.create(key.substring(MODULE_EXE_PATH.length()), StrategySettings.class), true);
     settings.setExePath(value);
   } else if (key != null && key.startsWith(MODULE_SUBPOPULATION)) {
     StrategySettings settings =
         getStrategySettings(
             Id.create(key.substring(MODULE_SUBPOPULATION.length()), StrategySettings.class),
             true);
     settings.setSubpopulation(value);
   } else {
     delegate.addParam(key, value);
   }
 }
  private StrategySettings getStrategySettings(
      final Id<StrategySettings> index, final boolean createIfMissing) {
    StrategySettings settings = null;

    // should be in a map, but it is difficult to keep consistency with the
    // delegate...
    for (StrategySettings s : getStrategySettings()) {
      if (!s.getId().equals(index)) continue;
      if (settings != null) throw new IllegalStateException("several settings with id " + index);
      settings = s;
    }

    if (settings == null && createIfMissing) {
      settings = new StrategySettings(index);
      addStrategySettings(settings);
    }

    return settings;
  }