restructure + viewmodels