using iterators to reduce memory use