void moveForwardTo(int newPos) {
		System.out.println("moving tracks to " + newPos);
		if (newPos - 1 >= reference.length)
			throw new RuntimeException("New position is beyond the reference: " + newPos);

		if (newPos < position)
			throw new RuntimeException("Cannot shift to smaller position on the reference.");

		if (newPos > reference.length - bases.length + 1)
			newPos = reference.length - bases.length + 1;

		if (newPos == position)
			return;

		System.arraycopy(reference, newPos - 1, bases, 0, Math.min(bases.length, reference.length - newPos + 1));

		if (newPos > position && position + bases.length - newPos > 0) {
			for (int i = 0; i < coverage.length; i++) {
				if (i + newPos - position < coverage.length) {
					coverage[i] = coverage[i + newPos - position];
					mismatches[i] = mismatches[i + newPos - position];
				} else {
					coverage[i] = 0;
					mismatches[i] = 0;
				}
			}
		} else {
			Arrays.fill(coverage, (short) 0);
			Arrays.fill(mismatches, (short) 0);
		}

		this.position = newPos;
	}