private void onePass() {
		boolean changed;
		do {
			changed = false;
			for (ANode n : nodes.values()) {
				final int row = n.getRow();
				if (row == Integer.MIN_VALUE) {
					continue;
				}
				for (Map.Entry<ANode, ALink> ent : directChildren.get(n).entrySet()) {
					final ANode child = ent.getKey();
					final int diffHeight = ent.getValue().getDiffHeight();
					if (child.getRow() == Integer.MIN_VALUE || child.getRow() < row + diffHeight) {
						child.setRow(row + diffHeight);
						changed = true;
					}
				}
			}
		} while (changed);
	}