with iterator