public MultipleCurrencyCommoditySensitivity presentValueSecondOrderCurveSensitivity(
     final ForwardCommodityCashSettle forward, final CommodityProviderInterface multicurve) {
   ArgumentChecker.notNull(forward, "Coupon");
   ArgumentChecker.notNull(multicurve, "Curves");
   final double fwd =
       multicurve.getForwardValue(forward.getUnderlying(), forward.getSettlementTime());
   final double df = multicurve.getDiscountFactor(forward.getCurrency(), forward.getPaymentTime());
   // Backward sweep
   final double pvBar = 1.0;
   final double forwardBar = forward.getNotional() * df * pvBar;
   final double dfBar = forward.getNotional() * (fwd - forward.getRate()) * pvBar;
   final Map<String, List<DoublesPair>> mapDsc = new HashMap<>();
   final List<DoublesPair> listDiscounting = new ArrayList<>();
   listDiscounting.add(
       DoublesPair.of(
           forward.getPaymentTime(),
           forward.getPaymentTime() * forward.getPaymentTime() * df * dfBar));
   mapDsc.put(multicurve.getName(forward.getCurrency()), listDiscounting);
   final Map<String, List<DoublesPair>> mapFwd = new HashMap<>();
   final List<DoublesPair> listForward = new ArrayList<>();
   listForward.add(
       DoublesPair.of(forward.getPaymentTime(), -2. * forward.getPaymentTime() * forwardBar));
   mapFwd.put(multicurve.getName(forward.getUnderlying()), listForward);
   return MultipleCurrencyCommoditySensitivity.of(
       forward.getCurrency(), CommoditySensitivity.of(mapDsc, mapFwd));
 }