change design for iterator