public static void promote(Node currentNode, JoeTree tree, OutlineLayoutManager layout) {
		Node parent = currentNode.getParent();
		
		if (parent.isRoot()) {
			return;
		}

		// Put the Undoable onto the UndoQueue
		Node targetNode = parent.getParent();
		int targetIndex = parent.currentIndex() + 1;
		
		CompoundUndoableMove undoable = new CompoundUndoableMove(parent, targetNode);

		JoeNodeList nodeList = tree.getSelectedNodes();
		int moveCount = 0;
		for (int i = nodeList.size() - 1; i >= 0; i--) {
			// Record the Insert in the undoable
			Node nodeToMove = nodeList.get(i);

			// Abort if node is not moveable
			if (!nodeToMove.isMoveable()) {
				continue;
			}
		
			undoable.addPrimitive(new PrimitiveUndoableMove(undoable, nodeToMove, nodeToMove.currentIndex(), targetIndex));
			moveCount++;
		}
		
		if (!undoable.isEmpty()) {
			if (moveCount == 1) {
				undoable.setName("Promote Node");
			} else {
				undoable.setName(new StringBuffer().append("Promote ").append(moveCount).append(" Nodes").toString());
			}
			tree.getDocument().getUndoQueue().add(undoable);
			undoable.redo();
		}
	}