Feature/abstract controller

closes #15