support external state change that can fail