final double sigma = _data.getVolatility(t, _definition.getStrike());
final double variance = sigma * sigma;
final double s = _data.getSpot();
final double sUp = s + EPS;
final double sDown = s - EPS;
final VolatilitySurface upSurface = new VolatilitySurface(ConstantDoublesSurface.from(Math.sqrt(variance + EPS)));
final VolatilitySurface downSurface = new VolatilitySurface(ConstantDoublesSurface.from(Math.sqrt(variance - EPS)));
final S dataUp1Up2 = (S) _data.withVolatilitySurface(upSurface).withSpot(sUp);
final S dataUp1Down2 = (S) _data.withVolatilitySurface(upSurface).withSpot(sDown);
final S dataDown1Up2 = (S) _data.withVolatilitySurface(downSurface).withSpot(sUp);
final S dataDown1Down2 = (S) _data.withVolatilitySurface(downSurface).withSpot(sDown);
return _data.getSpot() * getMixedSecondDerivative(dataUp1Up2, dataUp1Down2, dataDown1Up2, dataDown1Down2);