iterative routine