update by zj back