public void markComplete(CompileUnit cu) {
		synchronized (previous) {
			String key = cu.key();
			if (this.hasRun.containsKey(key)) {
				error.writeline("Command: " + key + " has already run!");
			}
			this.hasRun.put(key, cu);
			if (!readyForMarking || !this.toRun.containsKey(key)
					|| cu.getPhase() != this) {
				if (!readyForMarking) {
					error.writeline(
							"Not yet ready for marking!");
				}
				if (cu.getPhase() != this) {
					error.writeline(
							"Compile unit attributed to incorrect phase: "
									+ phaseName() + " but belongs to "
									+ cu.getPhase().phaseName());
				}
				new Exception("Unable to remove command: " + key
						+ "\nfrom module: " + phaseMgr.getModule().getName()
						+ "\nCommand did: " + cu.getCommand()[0]
						+ "\nOur module: " + phaseMgr.getModule().getName()
						+ "\nThread ID: " + Thread.currentThread().getId()
						+ "\nCurrent phase " + phaseName()).printStackTrace();

				printPreviousPhases();

				Build.panic("", 9001);
			}
			this.toRun.remove(cu.key());
			if (this.toRun.isEmpty()) {
				switchPhase();
			}
		}
	}