separate logic, views and more