docs: private void doGenerateIncrements() {
  		if(increments != null) {
  			return;	// Nothing to do
  		}
  
  		// Create random number sequence generator
  		MersenneTwister mersenneTwister = new MersenneTwister(seed);
  
  		// Allocate memory
  		double[][][] incrementsArray = new double[timeDiscretization.getNumberOfTimeSteps()][jumpIntensities.length][numberOfPaths];
  
  		// Pre-calculate Poisson distributions
  		PoissonDistribution[][] poissonDistribution = new PoissonDistribution[timeDiscretization.getNumberOfTimeSteps()][jumpIntensities.length];
  		for(int timeIndex=0; timeIndex<timeDiscretization.getNumberOfTimeSteps(); timeIndex++) {
  			for(int factorIndex=0; factorIndex<jumpIntensities.length; factorIndex++) {
  				poissonDistribution[timeIndex][factorIndex] = new PoissonDistribution(timeDiscretization.getTimeStep(timeIndex)*jumpIntensities[factorIndex]);
  			}
  		}
  
  
  		/*
  		 * Generate independent increments.
  		 *
  		 * The inner loop goes over time and factors.
  		 * MersenneTwister is known to generate "independent" increments in 623 dimensions.
  		 * Since we want to generate independent streams (paths), the loop over path is the outer loop.
  		 */
  		for(int pathIndex=0; pathIndex<numberOfPaths; pathIndex++) {
  			for(int timeIndex=0; timeIndex<timeDiscretization.getNumberOfTimeSteps(); timeIndex++) {
  				for(int factorIndex=0; factorIndex<jumpIntensities.length; factorIndex++) {
  					double uniformIncrement = mersenneTwister.nextDouble();
  					double numberOfJumps = poissonDistribution[timeIndex][factorIndex].inverseCumulativeDistribution(uniformIncrement);
  
  					incrementsArray[timeIndex][factorIndex][pathIndex] = numberOfJumps;
  				}
  			}
  		}
  
  		// Allocate memory for RandomVariable wrapper objects.
  		increments = new RandomVariableInterface[timeDiscretization.getNumberOfTimeSteps()][jumpIntensities.length];
  
  		// Wrap the values in RandomVariable objects
  		for(int timeIndex=0; timeIndex<timeDiscretization.getNumberOfTimeSteps(); timeIndex++) {
  			double time = timeDiscretization.getTime(timeIndex+1);
  			for(int factor=0; factor<jumpIntensities.length; factor++) {
  				increments[timeIndex][factor] =
  						randomVariableFactory.createRandomVariable(time, incrementsArray[timeIndex][factor]);
  			}
  		}
  	}