diff --git a/src/xercesc/validators/schema/TraverseSchema.cpp b/src/xercesc/validators/schema/TraverseSchema.cpp
index 344d1c96e2eb9356a8246bc263b6f15500aae45e..3ee0d5e335da5667f5529d7bea9cbbfa9d676388 100644
--- a/src/xercesc/validators/schema/TraverseSchema.cpp
+++ b/src/xercesc/validators/schema/TraverseSchema.cpp
@@ -3710,9 +3710,21 @@ void TraverseSchema::traverseSimpleContentDecl(const XMLCh* const typeName,
     const XMLCh* prefix = getPrefix(baseName);
     const XMLCh* localPart = getLocalPart(baseName);
     const XMLCh* uri = resolvePrefixToURI(simpleContent, prefix);
-    DatatypeValidator* baseValidator = getDatatypeValidator(uri, localPart);
 
-    if (baseValidator != 0) {
+    // check for 'anyType'
+    if (XMLString::equals(uri, SchemaSymbols::fgURI_SCHEMAFORSCHEMA)
+        && XMLString::equals(localPart, SchemaSymbols::fgATTVAL_ANYTYPE)) {
+
+        reportSchemaError(simpleContent, XMLUni::fgXMLErrDomain, XMLErrs::InvalidSimpleContentBase, baseName);
+        throw TraverseSchema::InvalidComplexTypeInfo;
+    }
+
+    processBaseTypeInfo(simpleContent, baseName, localPart, uri, typeInfo);
+
+    ComplexTypeInfo* baseTypeInfo = typeInfo->getBaseComplexTypeInfo();
+    DatatypeValidator* baseValidator = typeInfo->getBaseDatatypeValidator();
+
+    if (baseValidator != 0 && baseTypeInfo == 0) {
 
         // check that the simpleType does not preclude derivation by extension
         if ((baseValidator->getFinalSet() & SchemaSymbols::XSD_EXTENSION) == typeInfo->getDerivedBy()) {
@@ -3722,25 +3734,16 @@ void TraverseSchema::traverseSimpleContentDecl(const XMLCh* const typeName,
             throw TraverseSchema::InvalidComplexTypeInfo;
         }
 
-        typeInfo->setBaseComplexTypeInfo(0);
-        typeInfo->setBaseDatatypeValidator(baseValidator);
-    }
-    else {
-
-        // check for 'anyType'
-        if (XMLString::equals(uri, SchemaSymbols::fgURI_SCHEMAFORSCHEMA)
-            && XMLString::equals(localPart, SchemaSymbols::fgATTVAL_ANYTYPE)) {
+        //Schema Spec: 5.11: Complex Type Definition Properties Correct: 2
+        if (typeInfo->getDerivedBy() == SchemaSymbols::XSD_RESTRICTION) {
 
-            reportSchemaError(simpleContent, XMLUni::fgXMLErrDomain, XMLErrs::InvalidSimpleContentBase, baseName);
+            reportSchemaError(simpleContent, XMLUni::fgXMLErrDomain, XMLErrs::InvalidComplexTypeBase, baseName);
             throw TraverseSchema::InvalidComplexTypeInfo;
         }
-
-        processBaseTypeInfo(simpleContent, baseName, localPart, uri, typeInfo);
     }
 
     // check that the base isn't a complex type with complex content
     // and that derivation method is not included in 'final'
-    ComplexTypeInfo* baseTypeInfo = typeInfo->getBaseComplexTypeInfo();
     bool simpleTypeRequired = false;
 
     if (baseTypeInfo) {
@@ -3771,15 +3774,8 @@ void TraverseSchema::traverseSimpleContentDecl(const XMLCh* const typeName,
     // -----------------------------------------------------------------------
     if (typeInfo->getDerivedBy() == SchemaSymbols::XSD_RESTRICTION) {
 
-        //Schema Spec: 5.11: Complex Type Definition Properties Correct: 2
-        if (typeInfo->getBaseDatatypeValidator() != 0) {
-
-            reportSchemaError(simpleContent, XMLUni::fgXMLErrDomain, XMLErrs::InvalidComplexTypeBase, baseName);
-            throw TraverseSchema::InvalidComplexTypeInfo;
-        }
-        else {
-           typeInfo->setBaseDatatypeValidator(baseTypeInfo->getDatatypeValidator());
-        }
+        if(baseTypeInfo)
+            typeInfo->setBaseDatatypeValidator(baseTypeInfo->getDatatypeValidator());
 
         if (content != 0) {
 
diff --git a/tests/src/XSTSHarness/regression/XERCESC-697/base.xsd b/tests/src/XSTSHarness/regression/XERCESC-697/base.xsd
new file mode 100644
index 0000000000000000000000000000000000000000..b90a2be037881ef06157fa7b1e6f4fa46a6755fe
--- /dev/null
+++ b/tests/src/XSTSHarness/regression/XERCESC-697/base.xsd
@@ -0,0 +1,27 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+	<xsd:complexType name="AddressType" abstract="true">
+		<xsd:simpleContent>
+			<xsd:extension base="xsd:string">
+			</xsd:extension>
+		</xsd:simpleContent>
+	</xsd:complexType>
+	<xsd:complexType name="MyAddressType">
+		<xsd:simpleContent>
+			<xsd:restriction base="AddressType">
+				<xsd:enumeration value="BillingAddress"/>
+				<xsd:enumeration value="DataBackupStorageAddress"/>
+				<xsd:enumeration value="DuplicateRecordsAddress"/>
+				<xsd:enumeration value="FurthestTerminalAddress"/>
+				<xsd:enumeration value="GaragingAddress"/>
+				<xsd:enumeration value="MailingAddress"/>
+				<xsd:enumeration value="PointOfDepartureAddress"/>
+				<xsd:enumeration value="PointOfDestinationAddress"/>
+				<xsd:enumeration value="PreviousAddress"/>
+				<xsd:enumeration value="ShippingAddress"/>
+				<xsd:enumeration value="SoftwareBackupStorageAddress"/>
+				<xsd:enumeration value="StreetAddress"/>
+			</xsd:restriction>
+		</xsd:simpleContent>
+	</xsd:complexType>
+</xsd:schema>
\ No newline at end of file
diff --git a/tests/src/XSTSHarness/regression/XERCESC-697/redefined.xml b/tests/src/XSTSHarness/regression/XERCESC-697/redefined.xml
new file mode 100644
index 0000000000000000000000000000000000000000..746588cc81edb45270676c9dd5915757e8160292
--- /dev/null
+++ b/tests/src/XSTSHarness/regression/XERCESC-697/redefined.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="redefined.xsd">StreetAddress</root>
diff --git a/tests/src/XSTSHarness/regression/XERCESC-697/redefined.xsd b/tests/src/XSTSHarness/regression/XERCESC-697/redefined.xsd
new file mode 100644
index 0000000000000000000000000000000000000000..33ae077fd757b6168dfe1650e5d03c599998fd07
--- /dev/null
+++ b/tests/src/XSTSHarness/regression/XERCESC-697/redefined.xsd
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+	<xsd:redefine schemaLocation="base.xsd">
+		<xsd:complexType name="MyAddressType">
+			<xsd:simpleContent>
+				<xsd:restriction base="MyAddressType">
+					<xsd:enumeration value="BillingAddress"/>
+					<xsd:enumeration value="GaragingAddress"/>
+					<xsd:enumeration value="MailingAddress"/>
+					<xsd:enumeration value="StreetAddress"/>
+				</xsd:restriction>
+			</xsd:simpleContent>
+		</xsd:complexType>
+	</xsd:redefine>
+	<xsd:element name="root" type="MyAddressType"/>
+</xsd:schema>
\ No newline at end of file
diff --git a/tests/src/XSTSHarness/regression/Xerces.testSet b/tests/src/XSTSHarness/regression/Xerces.testSet
index cdf11e44e10f96a1d2f09bde2a661b107be3c69c..c7b2a1d4bdab8c9e94598581ca68cae31ca2a869 100644
--- a/tests/src/XSTSHarness/regression/Xerces.testSet
+++ b/tests/src/XSTSHarness/regression/Xerces.testSet
@@ -86,7 +86,23 @@
 			<current status="accepted" date="2008-02-13"/>
 		</instanceTest>
 	</testGroup>
-	<testGroup name="XERCESC-711">
+  <testGroup name="XERCESC-697">
+    <annotation>
+      <documentation>Incorrect Schema Validation Failure When Redefining Complex Type with Simple Content</documentation>
+    </annotation>
+    <documentationReference xlink:href="https://issues.apache.org/jira/browse/XERCESC-697"/>
+    <schemaTest name="XERCESC-697">
+      <schemaDocument xlink:href="./XERCESC-697/redefined.xsd"/>
+      <expected validity="valid"/>
+      <current status="accepted" date="2009-08-10"/>
+    </schemaTest>
+    <instanceTest name="XERCESC-697">
+      <instanceDocument xlink:href="./XERCESC-697/redefined.xml"/>
+      <expected validity="valid"/>
+      <current status="accepted" date="2009-08-10"/>
+    </instanceTest>
+  </testGroup>
+  <testGroup name="XERCESC-711">
 		<annotation>
 			<documentation>Validator doesn't enforce xsd:key</documentation>
 		</annotation>