1. Fix many bugs; 2. Refactor the system of argument; 3. Pass all unit tests