http://techiworks.com/iterator-pattern/