use self.class so inheritance can override