The viewmodel layer (FIXME: write docs)