I think that this is now well outside the scope of the original topic, so I will briefly say that implementing a semantically appropriate #eql? and #hash on your class is the way to make them behave as expected when used as hash keys and with methods like Array#&, honoring the principle of least surprise. It is as normal (and useful) as implementing #== for simple comparisons. I hope that other Rubyists that may stumble upon this thread will take Robert's FUD with a grain of salt and will feel free to determine the usefulness and any potential dangers of implementing #eql? and #hash -- along with other Ruby idioms like #each (for Enumerable) and #<=> (for Comparable) -- on their own. An ounce of critical thinking is better than a pound of dogma. -- Rein Henrichs http://puppetlabs.com http://reinh.com