Refactored to MVVM
Some integration test and some more unit tests are written (18 passing)