complete iterator pattern