docs: public double convertFromTo(AnalyticModel model, double optionMaturity, double optionStrike, double value, QuotingConvention fromQuotingConvention, QuotingConvention toQuotingConvention) {
  
  		if(fromQuotingConvention.equals(toQuotingConvention)) {
  			return value;
  		}
  
  		if(getDiscountCurve() == null) {
  			throw new IllegalArgumentException("Missing discount curve. Conversion of QuotingConvention requires forward curve and discount curve to be set.");
  		}
  		if(getForwardCurve() == null) {
  			throw new IllegalArgumentException("Missing forward curve. Conversion of QuotingConvention requires forward curve and discount curve to be set.");
  		}
  
  		double periodStart = optionMaturity;
  		double periodEnd = periodStart + getForwardCurve().getPaymentOffset(periodStart);
  
  		double forward = getForwardCurve().getForward(model, periodStart);
  
  		double daycountFraction;
  		if(getDaycountConvention() != null) {
  			LocalDate startDate = referenceDate.plusDays((int)Math.round(periodStart*365));
  			LocalDate endDate   = referenceDate.plusDays((int)Math.round(periodEnd*365));
  			daycountFraction = getDaycountConvention().getDaycountFraction(startDate, endDate);
  		}
  		else {
  			daycountFraction = getForwardCurve().getPaymentOffset(periodStart);
  		}
  
  		double payoffUnit = getDiscountCurve().getDiscountFactor(optionMaturity+getForwardCurve().getPaymentOffset(optionMaturity)) * daycountFraction;
  
  		if(toQuotingConvention.equals(QuotingConvention.PRICE) && fromQuotingConvention.equals(QuotingConvention.VOLATILITYLOGNORMAL)) {
  			return AnalyticFormulas.blackScholesGeneralizedOptionValue(forward, value, optionMaturity, optionStrike, payoffUnit);
  		}
  		else if(toQuotingConvention.equals(QuotingConvention.PRICE) && fromQuotingConvention.equals(QuotingConvention.VOLATILITYNORMAL)) {
  			return AnalyticFormulas.bachelierOptionValue(forward, value, optionMaturity, optionStrike, payoffUnit);
  		}
  		else if(toQuotingConvention.equals(QuotingConvention.VOLATILITYLOGNORMAL) && fromQuotingConvention.equals(QuotingConvention.PRICE)) {
  			return AnalyticFormulas.blackScholesOptionImpliedVolatility(forward, optionMaturity, optionStrike, payoffUnit, value);
  		}
  		else if(toQuotingConvention.equals(QuotingConvention.VOLATILITYNORMAL) && fromQuotingConvention.equals(QuotingConvention.PRICE)) {
  			return AnalyticFormulas.bachelierOptionImpliedVolatility(forward, optionMaturity, optionStrike, payoffUnit, value);
  		}
  		else {
  			return convertFromTo(model, optionMaturity, optionStrike, convertFromTo(model, optionMaturity, optionStrike, value, fromQuotingConvention, QuotingConvention.PRICE), QuotingConvention.PRICE, toQuotingConvention);
  		}
  	}