always use 'i' as iterator