open class Root { val target = SimpleObjectProperty() val otherData = SimpleStringProperty() } class Strung : Root() { val moreOtherData = SimpleStringProperty() } class Trail : Root() { val moreDifferentOtherData = SimpleStringProperty() } open class RootModel> : ItemViewModel() { val target = bind { item?.target } // This is the only failing call val otherData = bind { item?.otherData } } class StrungModel : RootModel() { val moreOtherData = bind { item?.moreOtherData } } class TrailModel : RootModel() { val moreDifferentOtherData = bind { item?.moreDifferentOtherData } }