add an abstract controller