better subclassing