refactored MVP