implementing more strict MVVM pattern