docs: @Override
  	public RandomVariableInterface getValue(double evaluationTime, LIBORModelMonteCarloSimulationInterface model) throws CalculationException {
  		RandomVariableInterface values						= model.getRandomVariableForConstant(0.0);
  
  		RandomVariableInterface notional					= model.getRandomVariableForConstant(1.0);
  		for(int period=0; period<fixingDates.length; period++)
  		{
  			double fixingDate		= fixingDates[period];
  			double paymentDate		= paymentDates[period];
  			double swaprate 		= swaprates[period];
  			double periodLength		= paymentDate - fixingDate;
  
  			if(paymentDate < evaluationTime) {
  				continue;
  			}
  
  			// Get random variables
  			RandomVariableInterface index	= floatIndex != null ? floatIndex.getValue(fixingDate, model) : model.getLIBOR(fixingDate, fixingDate, paymentDate);
  			RandomVariableInterface payoff	= index.sub(swaprate).mult(periodLength).mult(notional);
  			if(!isPayFix) {
  				payoff = payoff.mult(-1.0);
  			}
  
  			RandomVariableInterface numeraire				= model.getNumeraire(paymentDate);
  			RandomVariableInterface monteCarloProbabilities	= model.getMonteCarloWeights(paymentDate);
  			payoff = payoff.div(numeraire).mult(monteCarloProbabilities);
  
  			values = values.add(payoff);
  
  			notional = notional.mult(swaprate*periodLength);
  		}
  
  		RandomVariableInterface	numeraireAtEvalTime					= model.getNumeraire(evaluationTime);
  		RandomVariableInterface	monteCarloProbabilitiesAtEvalTime	= model.getMonteCarloWeights(evaluationTime);
  		values = values.mult(numeraireAtEvalTime).div(monteCarloProbabilitiesAtEvalTime);
  
  		return values;
  	}