diff --git a/src/validators/schema/SchemaValidator.cpp b/src/validators/schema/SchemaValidator.cpp
index 97acb2b313633ce5787d2b04c8534174a506e131..d1a7f51e93649a791ad9bb1ace9e1fd94f7d786b 100644
--- a/src/validators/schema/SchemaValidator.cpp
+++ b/src/validators/schema/SchemaValidator.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.24  2001/11/20 20:32:52  knoaman
+ * Bypass validating element's simple content if it's empty and element is nillable.
+ *
  * Revision 1.23  2001/11/13 13:25:08  tng
  * Deprecate function XMLValidator::checkRootElement.
  *
@@ -278,9 +281,12 @@ int SchemaValidator::checkContent (XMLElementDecl* const elemDecl
                     }
                     else {
                         // no default value, then check nillable
-                        if (fNil) {
-                            if (XMLString::compareString(value, XMLUni::fgZeroLenString))
-                                emitError(XMLValid::NilAttrNotEmpty, elemDecl->getFullName());
+                        if (!XMLString::compareString(value, XMLUni::fgZeroLenString)) {
+                            if ((((SchemaElementDecl*)elemDecl)->getMiscFlags() & SchemaSymbols::NILLABLE) == 0)
+                                fCurrentDV->validate(value);
+                        }
+                        else if (fNil) {
+                            emitError(XMLValid::NilAttrNotEmpty, elemDecl->getFullName());
                         }
                         else
                             fCurrentDV->validate(value);
diff --git a/src/validators/schema/identity/ValueStore.cpp b/src/validators/schema/identity/ValueStore.cpp
index acebb328f78d97a6fe6412fc8d2212b104f52dc0..ebaf2818cae4505d3c8ffc49e5bd3e60c0dd0d9d 100644
--- a/src/validators/schema/identity/ValueStore.cpp
+++ b/src/validators/schema/identity/ValueStore.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.2  2001/11/20 20:32:52  knoaman
+ * Bypass validating element's simple content if it's empty and element is nillable.
+ *
  * Revision 1.1  2001/11/02 14:08:40  knoaman
  * Add support for identity constraints.
  *
@@ -246,6 +249,22 @@ bool ValueStore::isDuplicateOf(DatatypeValidator* const dv1, const XMLCh* const
         return ((XMLString::compareString(val1, val2)) == 0);
     }
 
+    unsigned int val1Len = XMLString::stringLen(val1);
+    unsigned int val2Len = XMLString::stringLen(val2);
+
+    if (!val1Len && !val2Len) {
+
+        if (dv1 == dv2) {
+            return true;
+        }
+
+        return false;
+    }
+
+    if (!val1Len || !val2Len) {
+        return false;
+    }
+
     // are the validators equal?
     // As always we are obliged to compare by reference...
     if (dv1 == dv2) {