saved original element instead of cloned one (so that views can clean correctly after applying a view model)
clumped in the same function for simplicity
added an option replace that replaces the value on the target object without merging.