private Program applyMutations(Program offspring) throws InvalidProgramException {
		int numberOfMutationOps = mutationsOps.size();
		for (Mutation m : mutationsOps) {
			if (m instanceof KineticRateAlterationForProgram1 || m instanceof InsertionForProgramImpl || 
					m instanceof DeletionForProgramImpl ||
					randomizer.nextDouble() < mutationProbability) {
				offspring = m.mutate(offspring);
			}
		}
		return offspring;
	}