update by zj