more sensible iteration