iterative version commited