only update if changed