Update controller methods to be all virtual

Fix #596