public void removeNode(final Object key) {
		final GraphNode node = getNode(key);
		Assert.isTrue(node != null, "No node for " + key);

		succs(node).clear();
		preds(node).clear();

		if (removingNode == 0) {
			nodes.removeNodeFromMap(key);
		} else if (removingNode != 1) {
			throw new RuntimeException();
		}

		// Removing a node invalidates the orderings
		preOrder = null;
		postOrder = null;

		nodeModCount++;
		edgeModCount++;
	}