adding initial controller abstraction