Issue #5 and don't merge the pull request before

Sorry about the issue #3 to issue #5 pull requests. Actually, these 3 branches are coupled. And I can't make them totally separate. So I think the best way to deal with it is just merge this pull request issue #5. And I may report some thing about the test tomorrow.