only update changed fields