relax interface
add util method
separate iterator code from iterable.
refactoring-rename