reimplemented mvp model