Return promises from save() and associated fixes