implement lots of controller features