modified by yuchaozhou