done with internal iterator