Converted some abstract classes to traits to allow them to be mixed together