with data iterator