better inheritance model