modify by zuoyan