cleaned it up. all subclass methods are final