update by xiaoyl