split out the MVC properly. may be over-egged. we'll see.