abstract controller classes