added peekableiterator