abstracted the controller base class