small refactor to add a presenter to make life easier to test.  added small viewmodel to encapsulate viewstate and to keep that separate from our domain model