First of all, the original code isn't terrible IMO. It's pretty understandable and there's nothing inherently bad in it. Then if you dislike it, building up on @Ewan's idea to use a list but removing his somewhat unnatural `foreach break` pattern: while not conditions.head.check() { conditions.next() } conditions.head.alert() Now adapt this in your language of choice, make each element of the list an object, a tuple, whatever, and you're good. EDIT: looks like it isn't as clear I thought, so let me explain further. `conditions` is an ordered list of some sort; `head` is the current element being investigated - at the beginning it is the first element of the list, and each time `next()` is called it becomes the following one; `check()` and `alert()` are the `checkConditionX()` and `addAlert(X)` from the OP.