tidy viewmodel constructor