Controller abstraction

Add abstraction level for controllers (controller class).  Added
further comments and fixed serialisation issue
Merge branch 'Controller-Abstraction'