hasChanges observable extension in place