final double swapRate = parRateCal.visitFixedCouponSwap(cmsCoupon.getUnderlyingSwap(), curves);
final String fundingCurveName = cmsCoupon.getFundingCurveName();
final YieldAndDiscountCurve fundingCurve = curves.getCurve(fundingCurveName);
final double paymentTime = cmsCoupon.getPaymentTime();
final double paymentDiscountFactor = fundingCurve.getDiscountFactor(paymentTime);
final ParRateCurveSensitivityCalculator parRateSensCal = ParRateCurveSensitivityCalculator.getInstance();
final InterestRateCurveSensitivity swapRateSens = new InterestRateCurveSensitivity(cmsCoupon.getUnderlyingSwap().accept(parRateSensCal, curves));
final InterestRateCurveSensitivity payDFSens = new InterestRateCurveSensitivity(PresentValueCurveSensitivityCalculator.discountFactorSensitivity(fundingCurveName, fundingCurve, paymentTime));
InterestRateCurveSensitivity result = swapRateSens.multipliedBy(paymentDiscountFactor);
result = result.plus(payDFSens.multipliedBy(swapRate));
result = result.multipliedBy(cmsCoupon.getNotional() * cmsCoupon.getPaymentYearFraction());