add many features.
rearrange the whole project.