Do we really need an abstract class here?