modified by zhihua