split into view/model