modified by YHJ, the first time