public boolean doT2(FlowBlock succ) {
		/*
		 * check if this successor has only this block as predecessor. if the
		 * predecessor is not unique, return false.
		 */
		if (succ.predecessors.size() != 1 || succ.predecessors.get(0) != this)
			return false;

		checkConsistent();
		succ.checkConsistent();

		if ((GlobalOptions.debuggingFlags & GlobalOptions.DEBUG_ANALYZE) != 0)
			GlobalOptions.err.println("T2([" + addr + "," + getNextAddr()
					+ "],[" + succ.addr + "," + succ.getNextAddr() + "])");

		SuccessorInfo succInfo = (SuccessorInfo) successors.remove(succ);

		/* Update the in/out-Vectors now */
		updateInOut(succ, succInfo);
		if ((GlobalOptions.debuggingFlags & GlobalOptions.DEBUG_FLOW) != 0)
			GlobalOptions.err.println("before Resolve: " + this);

		/*
		 * Try to eliminate as many jumps as possible.
		 */
		Jump jumps = resolveSomeJumps(succInfo.jumps, succ);
		if ((GlobalOptions.debuggingFlags & GlobalOptions.DEBUG_FLOW) != 0)
			GlobalOptions.err.println("before Remaining: " + this);
		resolveRemaining(jumps);
		if ((GlobalOptions.debuggingFlags & GlobalOptions.DEBUG_FLOW) != 0)
			GlobalOptions.err.println("after Resolve: " + this);

		/*
		 * Now unify the blocks.
		 */
		lastModified = lastModified.appendBlock(succ.block);
		mergeSuccessors(succ);

		/* This will also set last modified to the new correct value. */
		doTransformations();

		/* Set addr and length to correct value and update nextByAddr */
		mergeAddr(succ);

		/* T2 transformation succeeded */
		checkConsistent();
		return true;
	}