Most of the MVVM stuff done