Refactored as an MVC app.