The view model made more generic