introduced transitionAfterSave() to avoid leaking an observer