generalized Controller