diff --git a/src/xercesc/validators/datatype/UnionDatatypeValidator.hpp b/src/xercesc/validators/datatype/UnionDatatypeValidator.hpp
index e82a8128cf3671171752c8fb29ecdaa207068ffd..84433c4ea633d41e37efed19c781a6ede2f3e6f6 100644
--- a/src/xercesc/validators/datatype/UnionDatatypeValidator.hpp
+++ b/src/xercesc/validators/datatype/UnionDatatypeValidator.hpp
@@ -298,8 +298,8 @@ inline bool UnionDatatypeValidator::isSubstitutableBy(const DatatypeValidator* c
         unsigned int memberSize = fMemberTypeValidators->size();
 
         for (unsigned int i=0; i < memberSize; i++) {
-
-            if (fMemberTypeValidators->elementAt(i)->getType() == DatatypeValidator::Union)
+            if ((fMemberTypeValidators->elementAt(i)->getType() == DatatypeValidator::Union) &&
+                (fMemberTypeValidators->elementAt(i) == toCheck))
                 return false;
             if (fMemberTypeValidators->elementAt(i)->isSubstitutableBy(toCheck)) {
                 return true;