avoid using UNIVERSAL::isa