improve sub-class constructor