refactored mvp