modify by longxi