old_state is now passed to change_state block