Add initial controller implementation + tests