diff --git a/src/xercesc/internal/IGXMLScanner2.cpp b/src/xercesc/internal/IGXMLScanner2.cpp
index 06d6c3f468ecda50cbae8e73082fd1f0a7dc6930..dd04941ffa70dcf1c556085bffd946929b3c1beb 100644
--- a/src/xercesc/internal/IGXMLScanner2.cpp
+++ b/src/xercesc/internal/IGXMLScanner2.cpp
@@ -2031,6 +2031,12 @@ void IGXMLScanner::scanCDSection()
                     fContent.append(bbCData.getRawBuffer(), bbCData.getLen());
             }
 
+            // tell the schema validation about the character data for checkContent later
+            if (fValidate && fSchemaValidator)
+            {           
+                    fSchemaValidator->setDatatypeBuffer(bbCData.getRawBuffer());
+            }
+
             // If we have a doc handler, call it
             if (fDocHandler)
             {
diff --git a/src/xercesc/internal/SGXMLScanner.cpp b/src/xercesc/internal/SGXMLScanner.cpp
index bb2db591bdaadfaf9bbe7e2a43945a6db4c1326a..a0d8ab8bde73adf7e09e1fd2b89dd401e1653c73 100644
--- a/src/xercesc/internal/SGXMLScanner.cpp
+++ b/src/xercesc/internal/SGXMLScanner.cpp
@@ -3534,6 +3534,12 @@ void SGXMLScanner::scanCDSection()
             if (fMatcherStack->getMatcherCount())
                 fContent.append(bbCData.getRawBuffer(), bbCData.getLen());
 
+            // tell the schema validation about the character data for checkContent later
+            if (fValidate && fSchemaValidator)
+            {           
+                    fSchemaValidator->setDatatypeBuffer(bbCData.getRawBuffer());
+            }
+
             // If we have a doc handler, call it
             if (fDocHandler)
             {