Hi, First thanks a lot for this answer > > Object is a class > (Object) is a metaclass OK > > B> What really confuses me is that I don't understand why there are two > B> class instances for each > B> of this core class: > rb_cObject--> rb_singleton_class_new(rb_cClass) > rb_cModule--> rb_singleton_class_new(rb_singleton_class_new(rb_cClass)) > > rb_cClass--> rb_singleton_class_new(rb_singleton_class_new(rb_singleton_class > B> _new(rb_cClass))) according to the code > > This is not this. I replace () with Meta > > * +------------------+ > * | | > * Object---->Meta-Object | > * ^ ^ ^ ^ | > * | | | | | > * | | +-----+ +---------+ | > * | | | | | > * | +-----------+ | | > * | | | | | > * +------+ | Module--->Meta-Module > * | | ^ ^ | > * OtherClass-->Meta-OC | | | > * | | | > * Class---->Meta-Class > * ^ | > * | | > * +----------------+ > > horizontal arrow give the relation Class,Metaclass > vertical arrow give the inheritance hierachy > > This mean that Object is the root of the system what confused me is that I was expecting something more on this lines. Object---->Meta-Object---------------------+ ^ ^ | | | | | | | | | | | +-----------+ | | | | +------+ Module--->Meta-Module----+ | | ^ | | OtherClass-->Meta-OC | | | | | | | | Class---->Meta-Class | | | ^ | | | | | | | | +----------+----------------+----+----+ Benoit