some light refactoring of states and model usage

@simpulton for your review
now the complexity is here instead of in the controller. Controller shouldn't care about this stuff. I would *love* to see a test or two around this stuff.