Refactored abstractController