add controller abstractions