update_with function