improved ViewportIterator