Actually, now I think about it, there is probably no need for iterators here. There is unlikely to be any memory or processing time issue. So soco.all_groups, all_zones, visible_zones etc can just return a set of SoCo instances.  I will change to this ..