@Override
  public Object put(CycSymbol parameterName, Object value) {
    // @Hack if the value is :UNKNOWN the parameter will not be set and it is assumed that 
    // Cyc uses its own default for that particular parameter
    if (value instanceof CycSymbol && ((CycSymbol) value).toString().equals(":UNKNOWN")) {
      return null;
    }
    if (":PROBLEM-STORE".equals(parameterName.toString())) {
      if (value instanceof CycList || value instanceof CycSymbol || value instanceof Integer) {
        return map.put(parameterName, value);
      } else if (CycObjectFactory.nil.equals(value)) {
        return map.put(parameterName, value);
      } else {
        throw new RuntimeException("Got invalid value " + value + " (" + value.getClass().getSimpleName() + ")"
                + " for parameter " + parameterName);
      }
    }
    InferenceParameter param = getInferenceParameter(parameterName);
    value = param.canonicalizeValue(value);
    if (!param.isValidValue(value)) {
      throw new RuntimeException("Got invalid value " + value + " for parameter " + parameterName);
    }
    return map.put(parameterName, value);
  }