re-implement the RunIterator