more classical inheritance pattern