refactored with proper Mutate and Update flows