step #3. ViewModel