To clarify what I wrote: > You want a "become" method: > > d = LogLine.new(...) > old_id = d.id > puts d.class => LogLine > d.become(LogLine_Subclass) > puts d.class => LogLine_Subclass > puts (d.id == old_id) => true This idea of a become method was inspired by, but is not identical to Smalltalk's become: anObject method. The proposed become method just changes the class of its receiver, it does not replace all existing references to the reciever with references to the argument object, as the Smalltalk version does. Tobias