implement subclass