new OO approach with controller