closer to complete MVVM