Full refactor of MVP