- use iterators where possible