This is all a semantic problem. Different people have different interpretations of what "range" really means. Personally I think a range is fundamentally a continuous construct; a discrete "range" should really be called a set or an enum. I use ranges almost exclusively with numeric or time values and I would expect (1..3).include?(2.5) to be true. It is strings that are the weird exception, not integers. Then there's also some ambiguity in the naming of the methods. To me, "include?" and "cover?" sound like they express continuous behavior but "member?" does sound like it expresses discrete behavior. Since this is open to interpretation, I would suggest like David that the behavior should remain backward compatible. Besides, it's always possible to test for discrete membership by converting to enum. Oh I just thought of an interesting case; given that 2.hash != 2.0.hash then by using set semantics shouldn't (1..3).include?(2.0) return false? -- Daniel