code: private String add(CalibrationSpec calibrationSpec) throws CloneNotSupportedException
  	{
  		calibrationSpecs.add(calibrationSpec);
  
  		/*
  		 * Add one point to the calibration curve and one new objective function
  		 */
  
  		// Create calibration product (will also create the curve if necessary)
  		calibrationProducts.add(getCalibrationProductForSpec(calibrationSpec));
  		calibrationProductsSymbols.add(calibrationSpec.symbol);
  
  		// Create parameter to calibrate
  
  		// Fetch old curve
  		Curve calibrationCurveOld = model.getCurve(calibrationSpec.calibrationCurveName);
  		if(calibrationCurveOld == null) {
  			throw new IllegalArgumentException("Calibration curve " + calibrationSpec.calibrationCurveName + " does not exist. This should not happen. Possible reason: The given calibration product does not depend on the given calibration curve.");
  		}
  
  		// Remove old curve
  		objectsToCalibrate.remove(calibrationCurveOld);
  
  		// Create and add new curve
  		double valueGuess;
  		if(DiscountCurve.class.isInstance(calibrationCurveOld)) {
  			valueGuess = 1.0;
  		}
  		else if(ForwardCurve.class.isInstance(calibrationCurveOld)) {
  			valueGuess = 0.0;
  		}
  		else {
  			valueGuess = 1.0;
  		}
  
  		// Build new curve with one additional point
  		Curve calibrationCurve = calibrationCurveOld
  				.getCloneBuilder()
  				.addPoint(calibrationSpec.calibrationTime, valueGuess, true)
  				.build();
  		model = model.addCurves(calibrationCurve);
  		objectsToCalibrate.add(calibrationCurve);
  
  		return calibrationSpec.type;
  	}
docs: Add a calibration product to the set of calibration instruments.
  
  @param calibrationSpec The spec of the calibration product.
  @throws CloneNotSupportedException Thrown if a curve could not be cloned / created.