modify by xuj