diff --git a/src/xercesc/validators/schema/TraverseSchema.cpp b/src/xercesc/validators/schema/TraverseSchema.cpp
index a9dcd3ce194d0d6d949fa9018259ba77ccf8330c..0df08ccbc8bdfe72eb0cee0ec9c1577a9c3cf07d 100644
--- a/src/xercesc/validators/schema/TraverseSchema.cpp
+++ b/src/xercesc/validators/schema/TraverseSchema.cpp
@@ -8413,9 +8413,18 @@ TraverseSchema::checkTypesOK(const SchemaElementDecl* const derivedElemDecl,
         }
     }
 
-    for (; rInfo && rInfo != bInfo; rInfo = rInfo->getBaseComplexTypeInfo());
+    if (rInfo == bInfo)
+        return;
+
+    for (; rInfo && rInfo != bInfo; rInfo = rInfo->getBaseComplexTypeInfo()) {
+        if (rInfo->getDerivedBy() != SchemaSymbols::RESTRICTION) {
+
+            rInfo = 0;
+            break;
+        }
+    }
 
-    if (rInfo == 0 || rInfo->getDerivedBy() != SchemaSymbols::RESTRICTION) {
+    if (!rInfo) {
         ThrowXML1(RuntimeException, XMLExcepts::PD_NameTypeOK5, derivedElemName);
     }
 }