@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;
  }
@Override
  public void remove()