1. resetting the source code on each iteration rather than continuing execution, 2. resetting the instruction pointer to 0 each iteration, 3. passing the “phase” on every iteration rather than just the very first time