Commit by Xincheng a lot of modification