There's a lot of logic in this controller that could be moved elsewhere, perhaps into the manager (and related classes).