# File lib/xtemplate.rb, line 136
  def dup_data(data, oids=[])
    if( oids.include?(data.id) )
      data
    else
      oids.push(data.id)
      case data
      when Hash
        data = data.dup
        data.each{|key,val| data[key] = dup_data(val,oids)}
        data
      when Array
        data = data.dup
        data.collect!{|val| dup_data(val,oids) }
        data
#      when Numeric, TrueClass, FalseClass  # immutable objects
#        data
      else
        begin
          data.dup
        rescue TypeError
          data
        end
      end
    end
  end