iterator pattern added