align modified by xincheng