code: private QueryTerm findNext() {
  		//Walk down first branch
  		if (askFirstA[askFirstD]) {
  			while (currentNode.firstTerm() == null) {
  				//remember that we already walked down the first branch
  				askFirstD++;
  				currentNode = currentNode.firstNode();
  			}
  			askFirstA[askFirstD] = false;
  			return currentNode.firstTerm();
  		} 
  
  		//do we have a second branch?
  		if (currentNode.isUnary()) {
  			return findUpwards();
  		}
  
  		//walk down second branch
  		if (currentNode.secondTerm() != null) {
  			//dirty hack
  			if (currentNode.secondTerm() != nextElement) {
  				return currentNode.secondTerm();
  			}
  			//else: we have been here before!
  			//walk back up
  			return findUpwards();
  		} else {
  			currentNode = currentNode.secondNode();
  			askFirstD++;
  			return findNext();
  		}
  	}
docs: Also, ASK nur setzen wenn ich hoch komme?
  runter: true-> first;  false second;
  hoch: true-> nextSecond; false-> nextUP