Virtual methods are working so the amount of boilerplate has been reduced!