Full mvc implementation for learning purposes