Making controller more abstract
Adding required dependencies
Adding docs