separate iterator, replace Queue with List