make source object mutation optional