ViewModel is now made more generic