ch 4 revisions to generalize controller