docs: private void doGenerateVarianceGammaIncrements() {
  		if(varianceGammaIncrements != null) {
  			return;
  		}
  
  		myGammaProcess =
  				new GammaProcess(timeDiscretization,numberOfFactors,numberOfPaths,seed,1/nu,nu);
  
  		myBrownianMotion =
  				new BrownianMotionLazyInit(timeDiscretization,numberOfFactors,numberOfPaths,seed+1);
  
  		varianceGammaIncrements = new RandomVariable[timeDiscretization.getNumberOfTimeSteps()][numberOfFactors];
  
  		/*
  		 * Generate variance gamma distributed independent increments.
  		 *
  		 * Since we already have a Brownian motion and a Gamma process at our disposal,
  		 * we are simply combining them.
  		 */
  		for(int timeIndex = 0; timeIndex < timeDiscretization.getNumberOfTimeSteps(); timeIndex++) {
  
  			// Generate uncorrelated Gamma distributed increment
  			for(int factor=0; factor<numberOfFactors; factor++) {
  				varianceGammaIncrements[timeIndex][factor] =
  						(myGammaProcess.getIncrement(timeIndex, factor).mult(theta))
  						.add((myGammaProcess.getIncrement(timeIndex, factor)).sqrt()
  								.mult(myBrownianMotion.getBrownianIncrement(timeIndex,factor)
  										.mult(sigma/Math.sqrt(timeDiscretization.getTimeStep(timeIndex)))));
  			}
  		}
  
  	}