void iterateSeqChange(String inputFile, OutputFormatter outputFormatter) {
		SnpEffectPredictor snpEffectPredictor = config.getSnpEffectPredictor();

		// Create an input file iterator
		VariantFileIterator seqChangeFileIterator;
		if (inputFormat == InputFormat.BED) seqChangeFileIterator = new BedFileIterator(inputFile, config.getGenome());
		else throw new RuntimeException("Cannot create SeqChange file iterator on input format '" + inputFormat + "'");

		//---
		// Iterate over input file
		//---
		for (Variant seqChange : seqChangeFileIterator) {
			try {
				countInputLines++;

				countVariants += seqChange.getChangeOptionCount();
				if (verbose && (countVariants % SHOW_EVERY == 0)) Timer.showStdErr("\t" + countVariants + " variants");

				// Does it pass the filter? => Analyze

				// Skip if there are filter intervals and they are not matched
				if ((filterIntervals != null) && (filterIntervals.stab(seqChange).size() <= 0)) continue;

				// Perform basic statistics about this seqChange
				if (createSummary) seqChangeStats.sample(seqChange);

				// Calculate effects
				ChangeEffects changeEffects = snpEffectPredictor.seqChangeEffect(seqChange);

				// Create new 'section'
				outputFormatter.startSection(seqChange);

				// Show results
				for (ChangeEffect changeEffect : changeEffects) {
					changeEffectResutStats.sample(changeEffect); // Perform basic statistics about this result
					outputFormatter.add(changeEffect);
					countEffects++;
				}

				// Finish up this section
				outputFormatter.printSection(seqChange);
			} catch (Throwable t) {
				totalErrs++;
				error(t, "Error while processing variant (line " + seqChangeFileIterator.getLineNum() + ") :\n\t" + seqChange + "\n" + t);
			}
		}

		// Close file iterator (not really needed, but just in case)
		seqChangeFileIterator.close();
	}