As discussed on IRC, the `initiate` function should not silently handle upgrades, the call model is expected to check what is the current state, to know if it has to use `initiate` or `upgrade`.