add abstract controller