pluggable iterator