revised by wangjingyao