implement viewmodels