I remember why this is a trait and not an abstract class, it's because making it an abstract class throws off the specialization