In the end the best solution I found was to define EL_REFLECTED_EXPANDED_FIELD like this deferred class EL_REFLECTED_EXPANDED_FIELD [G] inherit EL_REFLECTED_FIELD EL_SHARED_ONCE_STRINGS feature -- Access value (a_object: EL_REFLECTIVE): G do enclosing_object := a_object Result := field_value (index) end feature -- Status query is_expanded: BOOLEAN do Result := True end feature -- Comparison are_equal (a_current, other: EL_REFLECTIVE): BOOLEAN do Result := value (a_current) = value (other) end feature {NONE} -- Implementation field_value (i: INTEGER): G deferred end end Then class EL_REFLECTED_BOOLEAN for example, can implement `field_value' like this: class EL_REFLECTED_BOOLEAN inherit EL_REFLECTED_EXPANDED_FIELD [BOOLEAN] rename field_value as boolean_field end It finalizes well and conforms to my original intention.