rework simulate to work as iterators