Actually follows MVC (sort of)