more abstract class goodness