docs: @Override
  	public RandomVariable getValue(double evaluationTime, LIBORModelMonteCarloSimulationModel model) throws CalculationException {
  
  		double evaluationTimeUnderlying = Math.max(evaluationTime, exerciseDate);
  
  		RandomVariable underlyingValues	= underlying.getValue(evaluationTimeUnderlying, model);
  		RandomVariable indexValues			= index.getValue(exerciseDate, model);
  
  		// Make index measurable w.r.t time exerciseDate
  		if(indexValues.getFiltrationTime() > exerciseDate && exerciseDate > evaluationTime) {
  			MonteCarloConditionalExpectationRegression condExpEstimator = new MonteCarloConditionalExpectationRegression(getRegressionBasisFunctions(exerciseDate, model));
  
  			// Calculate cond. expectation.
  			indexValues         = condExpEstimator.getConditionalExpectation(indexValues);
  		}
  
  		// Form product
  		underlyingValues = underlyingValues.mult(indexValues);
  
  		// Discount to evaluation time if necessary
  		if(evaluationTime != evaluationTimeUnderlying) {
  			RandomVariable	numeraireAtEval			= model.getNumeraire(evaluationTime);
  			RandomVariable	numeraire				= model.getNumeraire(evaluationTimeUnderlying);
  			underlyingValues = underlyingValues.div(numeraire).mult(numeraireAtEval);
  		}
  
  		// Return values
  		return underlyingValues;
  	}