this class should be abstract, shouldn't it?