@Override
	public void insertNext(T i, T j) {
		if (j.getParent() != null)
			throw new PromiscuousItemException(j, i.getParent());
		if ((j.getNext() != null) || (j.getPrev() != null))
			throw new PromiscuousItemException(j);

		if (i == null) {
			// insert as head
			j.setPrev(null);
			j.setNext(_firstItem);
			j.setParent(this);

			if (_firstItem != null) {
				_firstItem.setPrev(j);
				_firstItem = j;
			} else {
				_firstItem = _lastItem = j;
			}

			++size;
		} else {
			if (i.getParent() != this)
				throw new PromiscuousItemException(i, i.getParent());
			T next = i.getNext();
			if (next == null) {
				if (i != _lastItem)
					throw new VirginItemException(i);
				_lastItem = j;
			} else
				next.setPrev(j);
			j.setNext(next);
			i.setNext(j);
			j.setPrev(i);
			j.setParent(this);

			++size;
		}
	}