diff --git a/lib/rdl/types/nominal.rb b/lib/rdl/types/nominal.rb
index <HASH>..<HASH> 100644
--- a/lib/rdl/types/nominal.rb
+++ b/lib/rdl/types/nominal.rb
@@ -55,7 +55,7 @@ module RDL::Type
       t = RDL::Util.rdl_type obj
       return t <= self if t
       return true if obj.nil?
-      return obj.class.ancestors.member?(klass)
+      return obj.is_a? klass
     end
     
     def instantiate(inst)
diff --git a/lib/rdl/types/singleton.rb b/lib/rdl/types/singleton.rb
index <HASH>..<HASH> 100644
--- a/lib/rdl/types/singleton.rb
+++ b/lib/rdl/types/singleton.rb
@@ -46,7 +46,7 @@ module RDL::Type
       other.instance_of?(TopType) ||
         (other.instance_of?(SingletonType) && other.val == @val) ||
         (other.instance_of?(NominalType) && @val.class == other.klass) ||
-        (other.instance_of?(NominalType) && @val.class.ancestors.member?(other.klass))
+        (other.instance_of?(NominalType) && @val.is_a?(other.klass))
     end
 
     def member?(obj, *args)
Use is_a? instead of messing around with ancestors