full mvp functionality