>R> alias old_new Hash.new > If you give this syntax you give also the possibility to write : > alias Hash.new Array.new Yes, i see the problem. [discussion on anonymous classes] Thank you for your succinct and very illuminating examples. I appreciate it. I think I've finally got what is going on: 1. Use the class << X ... end notation to define singleton methods. Since singleton methods are associated -only- with a -single- object (class or instance) the behind the scenes mechanism is (now) quite logical: 2. How the singleton methods are associated with X depends on what X is: . if X is an existing class then the methods just get added to X as class methods (naturally, no need for an anonymous class). . if X is an instance, since the only way we can associate methods with instances is thru their parent class, an anonymous class is created (if it doesn't exist already) and the methods are added as instance methods. [We need the new anonymous class parent as adding the new methods to the existing parent would obviously make it available to all instances.] If X is a class that already exists the methods just get added to that class. Hence for redefining the behavior of Hash.new (which is what started me on this trail) rather than: class Hash class << self ... end end One could have avoided the 'self' and just said: class << Hash - redefine new - end I'm enlightened. Thank you. Raja