public static void moveRightText(OutlinerCellRendererImpl textArea, JoeTree tree, OutlineLayoutManager layout) {
		Node currentNode = textArea.node;

		if (textArea.getCaretPosition() == textArea.getText().length()) {
			// Get Next Node
			Node nextNode = tree.getNextNode(currentNode);
			if (nextNode == null) {
				tree.setCursorPosition(tree.getCursorPosition()); // Makes sure we reset the mark
				return;
			}
		
			// Update Preferred Caret Position
			tree.getDocument().setPreferredCaretPosition(0);
	
			// Record the EditingNode and CursorPosition
			tree.setEditingNode(nextNode);
			tree.setCursorPosition(0);
	
			// Clear Text Selection
			textArea.setCaretPosition(0);
			textArea.moveCaretPosition(0);
	
			// Redraw and Set Focus
			if (nextNode.isVisible()) {
				layout.setFocus(nextNode,OutlineLayoutManager.TEXT);
			} else {
				layout.draw(nextNode,OutlineLayoutManager.TEXT);
			}
		} else {
			// Update Preferred Caret Position
			tree.getDocument().setPreferredCaretPosition(textArea.getCaretPosition() + 1);
	
			// Record the CursorPosition only since the EditingNode should not have changed
			int newCaretPosition = textArea.getCaretPosition() + 1;
			textArea.setCaretPosition(newCaretPosition);
			textArea.moveCaretPosition(newCaretPosition);
			tree.setCursorPosition(newCaretPosition);
	
			// Redraw and Set Focus if this node is currently offscreen
			if (!currentNode.isVisible()) {
				layout.draw(currentNode,OutlineLayoutManager.TEXT);
			}
		}
		
		// Freeze Undo Editing
		UndoableEdit.freezeUndoEdit(currentNode);
	}