more separation of ui & logic