Hello, Having some trouble with REXML, but this post is not (primarily) about that. REXML-2.7.1 informs me that it cannot modify a frozen object. The culprit is an attribute with a value of "lym<II", and rexml does a copy = input.clone and copy.gsub!() to do entity replacement. My problem: who froze that string. To detect that, I put the following at the start of the program: $GGG = File.open('/tmp/freeze', 'a') module Kernel alias o_freeze freeze def freeze $GGG.puts "Freeze #{self.class}:#{self.object_id} #{self}\n" $GGG.puts caller(0) $GGG.flush o_freeze end end and in rexml/text.rb a begin..rescue TypeError ... end to print the object_id of the frozen string. It never showed up in /tmp/freeze. My question: how can REXML, which is pure ruby, freeze something without it showing up in the file produced by the above trap? Is there another way of freezing that bypasses Kernel#freeze ? Cheers, Han Holl PS REXML-3.1.1 doesn't produce this error message, so it's not urgent, but I am curious.