maybe I'm missing something obvious... I've defined a '===' operator for my class, but it doesn't seem to get called by case. Here's the code: class StateType attr_accessor :state def initialize(*states) @states = states @state = states[0] end def ===(state) puts "StateType::===" @state == state end def assign(state) raise "Not a valid state: #{state}" unless @states.include? state @state = state end def <<(state) assign(state) end end def what(s) case s when :start "START" when :wash "WASH" when :rinse "RINSE" when :spin "SPIN" when :stop "STOP" else "DUNNO" end end #this returns true: fsmt === :start #=> prints "StateType::===" what(fsmt) #=> returns "DUNNO" (and "StateType::===" is not printed) What gives? Phil