unified iterator