why iterator?