private void fineAdd(FineNode<T> curr, T t) {
		if (curr != root) {
			if (curr.getParent() != root) {
				curr.getParent().getParent().unlock();
			}
			curr.lock();
		}
		try {
			switch (t.compareTo(curr.getValue())) {
			case -1:
				fineInternalAddLeft(curr, t);
				break;
			case 1:
				fineInternalAddRight(curr, t);
				break;
			case 0:
				fineInternalAddLeft(curr, t);
				break;
			}
		} finally {
			if (curr.getLock().isHeldByCurrentThread()) {
				curr.unlock();
			}
		}
	}