always return a promise from save and update isSaving