Fair enough. My reasons for this loop are:

 * the previous code(IIRC) only attempted to do one of several approaches (the new one allows you to attempt one, then decide it didn't do what you wanted, and keep trying for other methods);
 * the new code allows for easy re-ordering, just by changing the constante the 'l:process_stage' variable is compared against;
 * the new code allows for more code to be easily added in the 'if l:processed_flag' section -- not that I needed anything so far, but it allows for common code, too (for example, you could flag something from more than one stage and do it at the bottom of the loop -- *then* decide the value of l:processed_flag, for example). It's all about easing future fixes (which I assumed will happen at some point :-) );