public Position<T> insertNode(T value) throws NoEmptyTreeException,
			InvalidPositionException {

		if (root == null) {
			return addRoot(value);
		}

		BTPosition<T> current = checkPosition(root);
		BTPosition<T> parent;

		while (true) {
			parent = current;

			if (comp.compare(current.element(), value) > 0) {
				current = current.getLeft();

				if (current == null) { // add new node at left
					BTPosition<T> newNode = new BinaryTreeNode<T>(value, null,
							null, parent);
					parent.setLeft(newNode);
					return newNode;
				}

			} else if (comp.compare(current.element(), value) < 0) {
				current = current.getRight();

				if (current == null) { // add new node at right
					BTPosition<T> newNode = new BinaryTreeNode<T>(value, null,
							null, parent);
					parent.setRight(newNode);
					return newNode;
				}
			} else { // currentV equals value, I ignored this case, you can
						// define the case
				return null;
			}

		}
	}