I think that this is the expected behavior, and you would probably get the same error with an other Eiffel compiler such as Gobo. Taken by itself, the type of: ["a"] is TUPLE [STRING_8]. You can assign it to a variable of static type: TUPLE [str: READABLE_STRING_GENERAL]. But the dynamic type of the object is still TUPLE [STRING_8]. Hence the CAT-call when you try to insert a STRING_32 in this tuple object. You would get exactly the same error if you had written: class A feature str: READABLE_STRING_GENERAL assign set_str set_str (s: like str) do str := s end end class B inherit A redefine str end feature str: STRING_8 assign set_str end and then: local a: A do a := create {B} a.str := {STRING_32}"b" despite the fact that `str' is declared of type READABLE_STRING_GENERAL in class A. -- Eric Bezault