The first version is roughly completed. 

The first version is roughly completed. 
Please deal with this pull request before doing further updates.