Added controller abstraction