@Override
	public void remove() {
		current.remove();
		// if our next move was to go down, we can't.
		// we can go along, or up.
		descending = null;
		if (current.hasNext() || ascending != null) {
			// we have a next element, or our next move was up anyway.
			return;
		}
		// our next move was going to be down, or accross, but those are not
		// possible any more, need to check up.
		// our next will be up.
		while (ssize > 0) {
			@SuppressWarnings("unchecked")
			final Iterator<Content> subit = (Iterator<Content>)stack[--ssize];
			stack[ssize] = null;
			ascending = subit;
			if (ascending.hasNext()) {
				return;
			}
		}
		ascending = null;
		hasnext = false;
	}