TODO: Refactor and write test codes.
Merge branch 'doc/todo'