retain previous state, even on errors