diff --git a/ChangeLog b/ChangeLog
index 3489ded..8012ecb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Mon May 12 11:23:27 EDT 2003 Daniel Veillard <daniel@veillard.com>
+
+	* xmllint.c: added --schema option to run WXS schema validation
+	* xmlschemas.c xmlschemastypes.c include/libxml/schemasInternals.h:
+	  tried to improve error reporting in the Schema code, some cleanup
+	  too.
+
 Sun May 11 16:13:20 EDT 2003 Daniel Veillard <daniel@veillard.com>
 
 	* xmlschemas.c: fixed some problems in the handling of errors,
diff --git a/include/libxml/schemasInternals.h b/include/libxml/schemasInternals.h
index fb1f7ee..54e8fb3 100644
--- a/include/libxml/schemasInternals.h
+++ b/include/libxml/schemasInternals.h
@@ -116,6 +116,7 @@
     int occurs;
     xmlChar *defValue;
     xmlSchemaTypePtr subtypes;
+    xmlNodePtr node;
 };
 
 /**
@@ -136,6 +137,7 @@
     xmlSchemaAnnotPtr annot;
 
     xmlSchemaAttributePtr attributes;
+    xmlNodePtr node;
 };
 
 
diff --git a/result/schemas/attr0_0_0.err b/result/schemas/attr0_0_0.err
index d4a3b55..e69de29 100644
--- a/result/schemas/attr0_0_0.err
+++ b/result/schemas/attr0_0_0.err
@@ -1 +0,0 @@
-Unimplemented block at xmlschemastypes.c:1742
diff --git a/xmllint.c b/xmllint.c
index 46b0373..9fedb4f 100644
--- a/xmllint.c
+++ b/xmllint.c
@@ -86,6 +86,7 @@
 #include <libxml/xmlreader.h>
 #ifdef LIBXML_SCHEMAS_ENABLED
 #include <libxml/relaxng.h>
+#include <libxml/xmlschemas.h>
 #endif
 
 #ifndef XML_XML_DEFAULT_CATALOG
@@ -108,6 +109,8 @@
 #ifdef LIBXML_SCHEMAS_ENABLED
 static char * relaxng = NULL;
 static xmlRelaxNGPtr relaxngschemas = NULL;
+static char * schema = NULL;
+static xmlSchemaPtr wxschemas = NULL;
 #endif
 static int repeat = 0;
 static int insert = 0;
@@ -1139,6 +1142,32 @@
 	if ((timing) && (!repeat)) {
 	    endTimer("Validating");
 	}
+    } else if (wxschemas != NULL) {
+	xmlSchemaValidCtxtPtr ctxt;
+	int ret;
+
+	if ((timing) && (!repeat)) {
+	    startTimer();
+	}
+
+	ctxt = xmlSchemaNewValidCtxt(wxschemas);
+	xmlSchemaSetValidErrors(ctxt,
+		(xmlSchemaValidityErrorFunc) fprintf,
+		(xmlSchemaValidityWarningFunc) fprintf,
+		stderr);
+	ret = xmlSchemaValidateDoc(ctxt, doc);
+	if (ret == 0) {
+	    printf("%s validates\n", filename);
+	} else if (ret > 0) {
+	    printf("%s fails to validate\n", filename);
+	} else {
+	    printf("%s validation generated an internal error\n",
+		   filename);
+	}
+	xmlSchemaFreeValidCtxt(ctxt);
+	if ((timing) && (!repeat)) {
+	    endTimer("Validating");
+	}
 #endif
     }
 
@@ -1275,6 +1304,7 @@
     printf("\t--chkregister : verify the node registration code\n");
 #ifdef LIBXML_SCHEMAS_ENABLED
     printf("\t--relaxng schema : do RelaxNG validation against the schema\n");
+    printf("\t--schema schema : do validation against the WXS schema\n");
 #endif
     printf("\nLibxml project home page: http://xmlsoft.org/\n");
     printf("To report bugs or get some help check: http://xmlsoft.org/bugs.html\n");
@@ -1477,6 +1507,11 @@
 	    i++;
 	    relaxng = argv[i];
 	    noent++;
+	} else if ((!strcmp(argv[i], "-schema")) ||
+	         (!strcmp(argv[i], "--schema"))) {
+	    i++;
+	    schema = argv[i];
+	    noent++;
 #endif
 	} else {
 	    fprintf(stderr, "Unknown option %s\n", argv[i]);
@@ -1555,6 +1590,27 @@
 	if (timing) {
 	    endTimer("Compiling the schemas");
 	}
+    } else if ((schema != NULL) && (stream == 0)) {
+	xmlSchemaParserCtxtPtr ctxt;
+
+	if (timing) {
+	    startTimer();
+	}
+	ctxt = xmlSchemaNewParserCtxt(schema);
+	xmlSchemaSetParserErrors(ctxt,
+		(xmlSchemaValidityErrorFunc) fprintf,
+		(xmlSchemaValidityWarningFunc) fprintf,
+		stderr);
+	wxschemas = xmlSchemaParse(ctxt);
+	if (wxschemas == NULL) {
+	    xmlGenericError(xmlGenericErrorContext,
+		    "WXS schema %s failed to compile\n", schema);
+	    schema = NULL;
+	}
+	xmlSchemaFreeParserCtxt(ctxt);
+	if (timing) {
+	    endTimer("Compiling the schemas");
+	}
     }
 #endif
     for (i = 1; i < argc ; i++) {
@@ -1578,6 +1634,11 @@
 	    i++;
 	    continue;
         }
+	if ((!strcmp(argv[i], "-schema")) ||
+	         (!strcmp(argv[i], "--schema"))) {
+	    i++;
+	    continue;
+        }
 	if ((timing) && (repeat))
 	    startTimer();
 	/* Remember file names.  "-" means stdin.  <sven@zen.org> */
@@ -1611,6 +1672,8 @@
 #ifdef LIBXML_SCHEMAS_ENABLED
     if (relaxngschemas != NULL)
 	xmlRelaxNGFree(relaxngschemas);
+    if (wxschemas != NULL)
+	xmlSchemaFree(wxschemas);
     xmlRelaxNGCleanupTypes();
 #endif
     xmlCleanupParser();
diff --git a/xmlschemas.c b/xmlschemas.c
index 0f02f21..f2049af 100644
--- a/xmlschemas.c
+++ b/xmlschemas.c
@@ -60,6 +60,7 @@
     xmlSchemaValidityErrorFunc error;	/* the callback in case of errors */
     xmlSchemaValidityWarningFunc warning;/* the callback in case of warning */
     xmlSchemaValidError err;
+    int	                nberrors;
 
     xmlSchemaPtr       schema;        /* The schema in use */
     xmlChar 	      *container;     /* the current element, group, ... */
@@ -111,6 +112,7 @@
 
     xmlDocPtr               myDoc;
     int                     err;
+    int                     nberrors;
 
     xmlNodePtr              node;
     xmlNodePtr              cur;
@@ -156,6 +158,7 @@
 
     ret = (xmlSchemaPtr) xmlMalloc(sizeof(xmlSchema));
     if (ret == NULL) {
+        ctxt->nberrors++;
         if ((ctxt != NULL) && (ctxt->error != NULL))
             ctxt->error(ctxt->userData, "Out of memory\n");
         return (NULL);
@@ -202,6 +205,7 @@
 
     ret = (xmlSchemaAnnotPtr) xmlMalloc(sizeof(xmlSchemaAnnot));
     if (ret == NULL) {
+        ctxt->nberrors++;
         if ((ctxt != NULL) && (ctxt->error != NULL))
             ctxt->error(ctxt->userData, "Out of memory\n");
         return (NULL);
@@ -819,6 +823,7 @@
 
     ret = (xmlSchemaNotationPtr) xmlMalloc(sizeof(xmlSchemaNotation));
     if (ret == NULL) {
+        ctxt->nberrors++;
         if ((ctxt != NULL) && (ctxt->error != NULL))
             ctxt->error(ctxt->userData, "Out of memory\n");
         return (NULL);
@@ -828,6 +833,7 @@
     val = xmlHashAddEntry2(schema->notaDecl, name, schema->targetNamespace,
                            ret);
     if (val != 0) {
+        ctxt->nberrors++;
         if ((ctxt != NULL) && (ctxt->error != NULL))
             ctxt->error(ctxt->userData, "Could not add notation %s\n",
                         name);
@@ -868,6 +874,7 @@
 
     ret = (xmlSchemaAttributePtr) xmlMalloc(sizeof(xmlSchemaAttribute));
     if (ret == NULL) {
+        ctxt->nberrors++;
         if ((ctxt != NULL) && (ctxt->error != NULL))
             ctxt->error(ctxt->userData, "Out of memory\n");
         return (NULL);
@@ -877,6 +884,7 @@
     val = xmlHashAddEntry3(schema->attrDecl, name,
 	                   schema->targetNamespace, ctxt->container, ret);
     if (val != 0) {
+        ctxt->nberrors++;
         if ((ctxt != NULL) && (ctxt->error != NULL))
             ctxt->error(ctxt->userData, "Could not add attribute %s\n",
                         name);
@@ -914,6 +922,7 @@
 
     ret = (xmlSchemaAttributeGroupPtr) xmlMalloc(sizeof(xmlSchemaAttributeGroup));
     if (ret == NULL) {
+        ctxt->nberrors++;
         if ((ctxt != NULL) && (ctxt->error != NULL))
             ctxt->error(ctxt->userData, "Out of memory\n");
         return (NULL);
@@ -923,6 +932,7 @@
     val = xmlHashAddEntry3(schema->attrgrpDecl, name,
 	                   schema->targetNamespace, ctxt->container, ret);
     if (val != 0) {
+        ctxt->nberrors++;
         if ((ctxt != NULL) && (ctxt->error != NULL))
             ctxt->error(ctxt->userData, "Could not add attribute group %s\n",
                         name);
@@ -962,6 +972,7 @@
 
     ret = (xmlSchemaElementPtr) xmlMalloc(sizeof(xmlSchemaElement));
     if (ret == NULL) {
+        ctxt->nberrors++;
         if ((ctxt != NULL) && (ctxt->error != NULL))
             ctxt->error(ctxt->userData, "Out of memory\n");
         return (NULL);
@@ -977,6 +988,7 @@
 	val = xmlHashAddEntry3(schema->elemDecl, name, (xmlChar *) buf,
 			       namespace, ret);
 	if (val != 0) {
+	    ctxt->nberrors++;
 	    if ((ctxt != NULL) && (ctxt->error != NULL))
 		ctxt->error(ctxt->userData, "Could not add element %s\n",
 			    name);
@@ -1016,6 +1028,7 @@
 
     ret = (xmlSchemaTypePtr) xmlMalloc(sizeof(xmlSchemaType));
     if (ret == NULL) {
+        ctxt->nberrors++;
         if ((ctxt != NULL) && (ctxt->error != NULL))
             ctxt->error(ctxt->userData, "Out of memory\n");
         return (NULL);
@@ -1025,6 +1038,7 @@
     val = xmlHashAddEntry2(schema->typeDecl, name, schema->targetNamespace,
                            ret);
     if (val != 0) {
+        ctxt->nberrors++;
         if ((ctxt != NULL) && (ctxt->error != NULL))
             ctxt->error(ctxt->userData, "Could not add type %s\n", name);
         xmlFree((char *) ret->name);
@@ -1076,6 +1090,7 @@
 
     ns = xmlSearchNs(node->doc, node, prefix);
     if (ns == NULL) {
+	ctxt->nberrors++;
 	xmlSchemaErrorContext(ctxt, NULL, node, NULL);
         if ((ctxt != NULL) && (ctxt->error != NULL))
             ctxt->error(ctxt->userData,
@@ -1119,6 +1134,7 @@
     }
     while (IS_BLANK(*cur)) cur++;
     if (*cur != 0) {
+        ctxt->nberrors++;
 	xmlSchemaErrorContext(ctxt, NULL, node, NULL);
         if ((ctxt != NULL) && (ctxt->error != NULL))
             ctxt->error(ctxt->userData, "invalid value for minOccurs: %s\n",
@@ -1156,6 +1172,7 @@
     }
     while (IS_BLANK(*cur)) cur++;
     if (*cur != 0) {
+        ctxt->nberrors++;
 	xmlSchemaErrorContext(ctxt, NULL, node, NULL);
         if ((ctxt != NULL) && (ctxt->error != NULL))
             ctxt->error(ctxt->userData, "invalid value for minOccurs: %s\n",
@@ -1193,6 +1210,7 @@
     else if (xmlStrEqual(val, BAD_CAST"false"))
 	def = 0;
     else {
+        ctxt->nberrors++;
 	xmlSchemaErrorContext(ctxt, NULL, node, NULL);
         if ((ctxt != NULL) && (ctxt->error != NULL))
             ctxt->error(ctxt->userData,
@@ -1350,6 +1368,7 @@
     facet->node = node;
     value = xmlGetProp(node, (const xmlChar *) "value");
     if (value == NULL) {
+        ctxt->nberrors++;
 	xmlSchemaErrorContext(ctxt, schema, node, child);
         if ((ctxt != NULL) && (ctxt->error != NULL))
             ctxt->error(ctxt->userData, "Facet %s has no value\n", node->name);
@@ -1381,6 +1400,7 @@
     } else if (IS_SCHEMA(node, "minLength")) {
         facet->type = XML_SCHEMA_FACET_MINLENGTH;
     } else {
+        ctxt->nberrors++;
 	xmlSchemaErrorContext(ctxt, schema, node, child);
         if ((ctxt != NULL) && (ctxt->error != NULL))
             ctxt->error(ctxt->userData, "Unknown facet type %s\n", node->name);
@@ -1396,6 +1416,7 @@
 	child = child->next;
     }
     if (child != NULL) {
+        ctxt->nberrors++;
 	xmlSchemaErrorContext(ctxt, schema, node, child);
 	if ((ctxt != NULL) && (ctxt->error != NULL))
 	    ctxt->error(ctxt->userData,
@@ -1441,6 +1462,7 @@
 	child = child->next;
     }
     if (child != NULL) {
+        ctxt->nberrors++;
 	xmlSchemaErrorContext(ctxt, schema, node, child);
 	if ((ctxt != NULL) && (ctxt->error != NULL))
 	    ctxt->error(ctxt->userData,
@@ -1473,6 +1495,7 @@
         return (NULL);
     name = xmlGetProp(node, (const xmlChar *) "name");
     if (name == NULL) {
+        ctxt->nberrors++;
 	xmlSchemaErrorContext(ctxt, schema, node, child);
         if ((ctxt != NULL) && (ctxt->error != NULL))
             ctxt->error(ctxt->userData, "Notation has no name\n");
@@ -1489,6 +1512,7 @@
 	child = child->next;
     }
     if (child != NULL) {
+        ctxt->nberrors++;
 	xmlSchemaErrorContext(ctxt, schema, node, child);
 	if ((ctxt != NULL) && (ctxt->error != NULL))
 	    ctxt->error(ctxt->userData,
@@ -1537,6 +1561,7 @@
     } else if (xmlStrEqual(processContents, (const xmlChar *)"lax")) {
 	ret->occurs = XML_SCHEMAS_ANYATTR_LAX;
     } else {
+        ctxt->nberrors++;
 	xmlSchemaErrorContext(ctxt, schema, node, child);
 	if ((ctxt != NULL) && (ctxt->error != NULL))
 	    ctxt->error(ctxt->userData,
@@ -1553,6 +1578,7 @@
 	child = child->next;
     }
     if (child != NULL) {
+        ctxt->nberrors++;
 	xmlSchemaErrorContext(ctxt, schema, node, child);
 	if ((ctxt != NULL) && (ctxt->error != NULL))
 	    ctxt->error(ctxt->userData,
@@ -1592,6 +1618,7 @@
 
 	ref = xmlGetQNameProp(ctxt, node, "ref", &refNs);
 	if (ref == NULL) {
+	    ctxt->nberrors++;
 	    xmlSchemaErrorContext(ctxt, schema, node, child);
 	    if ((ctxt != NULL) && (ctxt->error != NULL))
 		ctxt->error(ctxt->userData, "Attribute has no name nor ref\n");
@@ -1611,6 +1638,7 @@
     ret->ref = ref;
     ret->refNs = refNs;
     ret->typeName = xmlGetQNameProp(ctxt, node, "type", &(ret->typeNs));
+    ret->node = node;
     child = node->children;
     if (IS_SCHEMA(child, "annotation")) {
 	ret->annot = xmlSchemaParseAnnotation(ctxt, schema, child);
@@ -1621,6 +1649,7 @@
 	child = child->next;
     }
     if (child != NULL) {
+        ctxt->nberrors++;
 	xmlSchemaErrorContext(ctxt, schema, node, child);
 	if ((ctxt != NULL) && (ctxt->error != NULL))
 	    ctxt->error(ctxt->userData,
@@ -1661,6 +1690,7 @@
 
 	ref = xmlGetQNameProp(ctxt, node, "ref", &refNs);
 	if (ref == NULL) {
+	    ctxt->nberrors++;
 	    xmlSchemaErrorContext(ctxt, schema, node, child);
 	    if ((ctxt != NULL) && (ctxt->error != NULL))
 		ctxt->error(ctxt->userData,
@@ -1670,6 +1700,7 @@
 	snprintf(buf, 99, "anonattrgroup%d", ctxt->counter++ + 1);
 	name = xmlStrdup((xmlChar *) buf);
 	if (name == NULL) {
+	    ctxt->nberrors++;
 	    if ((ctxt != NULL) && (ctxt->error != NULL))
 		ctxt->error(ctxt->userData,
 			"out of memory\n");
@@ -1686,6 +1717,7 @@
     ret->ref = ref;
     ret->refNs = refNs;
     ret->type = XML_SCHEMA_TYPE_ATTRIBUTEGROUP;
+    ret->node = node;
     child = node->children;
     ctxt->container = name;
     if (IS_SCHEMA(child, "annotation")) {
@@ -1717,6 +1749,7 @@
 	child = child->next;
     }
     if (child != NULL) {
+        ctxt->nberrors++;
 	xmlSchemaErrorContext(ctxt, schema, node, child);
 	if ((ctxt != NULL) && (ctxt->error != NULL))
 	    ctxt->error(ctxt->userData,
@@ -1759,6 +1792,7 @@
 
 	ref = xmlGetQNameProp(ctxt, node, "ref", &refNs);
 	if (ref == NULL) {
+	    ctxt->nberrors++;
 	    xmlSchemaErrorContext(ctxt, schema, node, child);
 	    if ((ctxt != NULL) && (ctxt->error != NULL))
 		ctxt->error(ctxt->userData, "Element has no name nor ref\n");
@@ -1805,6 +1839,7 @@
     
     ret->value = xmlGetProp(node, BAD_CAST "default");
     if ((ret->value != NULL) && (fixed != NULL)) {
+        ctxt->nberrors++;
 	xmlSchemaErrorContext(ctxt, schema, node, child);
 	ctxt->error(ctxt->userData,
 		    "Element %s has both default and fixed\n",
@@ -1834,6 +1869,7 @@
 	child = child->next;
     }
     if (child != NULL) {
+        ctxt->nberrors++;
 	xmlSchemaErrorContext(ctxt, schema, node, child);
 	if ((ctxt != NULL) && (ctxt->error != NULL))
 	    ctxt->error(ctxt->userData,
@@ -1900,6 +1936,7 @@
 	child = child->next;
     }
     if (child != NULL) {
+        ctxt->nberrors++;
 	xmlSchemaErrorContext(ctxt, schema, node, child);
 	if ((ctxt != NULL) && (ctxt->error != NULL))
 	    ctxt->error(ctxt->userData,
@@ -1954,6 +1991,7 @@
 	type->subtypes = subtype;
     }
     if (child != NULL) {
+        ctxt->nberrors++;
 	xmlSchemaErrorContext(ctxt, schema, node, child);
 	if ((ctxt != NULL) && (ctxt->error != NULL))
 	    ctxt->error(ctxt->userData,
@@ -1994,6 +2032,7 @@
 	name = xmlStrdup((xmlChar *) buf);
     }
     if (name == NULL) {
+        ctxt->nberrors++;
 	xmlSchemaErrorContext(ctxt, schema, node, child);
         if ((ctxt != NULL) && (ctxt->error != NULL))
             ctxt->error(ctxt->userData, "simpleType has no name\n");
@@ -2028,6 +2067,7 @@
     }
     type->subtypes = subtype;
     if (child != NULL) {
+        ctxt->nberrors++;
 	xmlSchemaErrorContext(ctxt, schema, node, child);
 	if ((ctxt != NULL) && (ctxt->error != NULL))
 	    ctxt->error(ctxt->userData,
@@ -2069,6 +2109,7 @@
 
 	ref = xmlGetQNameProp(ctxt, node, "ref", &refNs);
 	if (ref == NULL) {
+	    ctxt->nberrors++;
 	    xmlSchemaErrorContext(ctxt, schema, node, child);
 	    if ((ctxt != NULL) && (ctxt->error != NULL))
 		ctxt->error(ctxt->userData, "Group has no name nor ref\n");
@@ -2109,6 +2150,7 @@
     if (subtype != NULL)
 	type->subtypes = subtype;
     if (child != NULL) {
+        ctxt->nberrors++;
 	xmlSchemaErrorContext(ctxt, schema, node, child);
 	if ((ctxt != NULL) && (ctxt->error != NULL))
 	    ctxt->error(ctxt->userData,
@@ -2174,6 +2216,7 @@
 	child = child->next;
     }
     if (child != NULL) {
+        ctxt->nberrors++;
 	xmlSchemaErrorContext(ctxt, schema, node, child);
 	if ((ctxt != NULL) && (ctxt->error != NULL))
 	    ctxt->error(ctxt->userData,
@@ -2213,6 +2256,7 @@
     if (namespace != NULL) {
 	check = xmlParseURI((const char *) namespace);
 	if (check == NULL) {
+	    ctxt->nberrors++;
 	    xmlSchemaErrorContext(ctxt, schema, node, child);
 	    if ((ctxt != NULL) && (ctxt->error != NULL))
 		ctxt->error(ctxt->userData,
@@ -2228,6 +2272,7 @@
     if (schemaLocation != NULL) {
 	check = xmlParseURI((const char *) schemaLocation);
 	if (check == NULL) {
+	    ctxt->nberrors++;
 	    xmlSchemaErrorContext(ctxt, schema, node, child);
 	    if ((ctxt != NULL) && (ctxt->error != NULL))
 		ctxt->error(ctxt->userData,
@@ -2244,6 +2289,7 @@
     if (schema->schemasImports == NULL) {
 	schema->schemasImports = xmlHashCreate(10);
 	if (schema->schemasImports == NULL) {
+	    ctxt->nberrors++;
 	    xmlSchemaErrorContext(ctxt, schema, node, child);
 	    if ((ctxt != NULL) && (ctxt->error != NULL))
 		ctxt->error(ctxt->userData,
@@ -2261,6 +2307,7 @@
 	if (schemaLocation != NULL) {
 	    if (previous != NULL) {
 		if (!xmlStrEqual(schemaLocation, previous)) {
+		    ctxt->nberrors++;
 		    xmlSchemaErrorContext(ctxt, schema, node, child);
 		    if ((ctxt != NULL) && (ctxt->error != NULL))
 			ctxt->error(ctxt->userData,
@@ -2277,6 +2324,7 @@
 	if (schemaLocation != NULL) {
 	    if (previous != NULL) {
 		if (!xmlStrEqual(schemaLocation, previous)) {
+		    ctxt->nberrors++;
 		    xmlSchemaErrorContext(ctxt, schema, node, child);
 		    if ((ctxt != NULL) && (ctxt->error != NULL))
 			ctxt->error(ctxt->userData,
@@ -2298,6 +2346,7 @@
 	child = child->next;
     }
     if (child != NULL) {
+        ctxt->nberrors++;
 	xmlSchemaErrorContext(ctxt, schema, node, child);
 	if ((ctxt != NULL) && (ctxt->error != NULL))
 	    ctxt->error(ctxt->userData,
@@ -2377,6 +2426,7 @@
 	child = child->next;
     }
     if (child != NULL) {
+        ctxt->nberrors++;
 	xmlSchemaErrorContext(ctxt, schema, node, child);
 	if ((ctxt != NULL) && (ctxt->error != NULL))
 	    ctxt->error(ctxt->userData,
@@ -2457,6 +2507,7 @@
 	child = child->next;
     }
     if (child != NULL) {
+        ctxt->nberrors++;
 	xmlSchemaErrorContext(ctxt, schema, node, child);
 	if ((ctxt != NULL) && (ctxt->error != NULL))
 	    ctxt->error(ctxt->userData,
@@ -2503,6 +2554,7 @@
     type->id = xmlGetProp(node, BAD_CAST "id");
     type->base = xmlGetQNameProp(ctxt, node, "base", &(type->baseNs));
     if ((!simple) && (type->base == NULL)) {
+        ctxt->nberrors++;
 	xmlSchemaErrorContext(ctxt, schema, node, child);
 	if ((ctxt != NULL) && (ctxt->error != NULL))
 	    ctxt->error(ctxt->userData,
@@ -2575,6 +2627,7 @@
     }
     child = xmlSchemaParseAttrDecls(ctxt, schema, child, type);
     if (child != NULL) {
+        ctxt->nberrors++;
 	xmlSchemaErrorContext(ctxt, schema, node, child);
 	if ((ctxt != NULL) && (ctxt->error != NULL))
 	    ctxt->error(ctxt->userData,
@@ -2621,6 +2674,7 @@
 
     type->base = xmlGetQNameProp(ctxt, node, "base", &(type->baseNs));
     if (type->base == NULL) {
+        ctxt->nberrors++;
 	xmlSchemaErrorContext(ctxt, schema, node, child);
 	if ((ctxt != NULL) && (ctxt->error != NULL))
 	    ctxt->error(ctxt->userData,
@@ -2651,6 +2705,7 @@
 	type->subtypes = subtype;
     child = xmlSchemaParseAttrDecls(ctxt, schema, child, type);
     if (child != NULL) {
+        ctxt->nberrors++;
 	xmlSchemaErrorContext(ctxt, schema, node, child);
 	if ((ctxt != NULL) && (ctxt->error != NULL))
 	    ctxt->error(ctxt->userData,
@@ -2709,6 +2764,7 @@
     }
     type->subtypes = subtype;
     if (child != NULL) {
+        ctxt->nberrors++;
 	xmlSchemaErrorContext(ctxt, schema, node, child);
 	if ((ctxt != NULL) && (ctxt->error != NULL))
 	    ctxt->error(ctxt->userData,
@@ -2766,6 +2822,7 @@
     }
     type->subtypes = subtype;
     if (child != NULL) {
+        ctxt->nberrors++;
 	xmlSchemaErrorContext(ctxt, schema, node, child);
 	if ((ctxt != NULL) && (ctxt->error != NULL))
 	    ctxt->error(ctxt->userData,
@@ -2807,6 +2864,7 @@
 	name = xmlStrdup((xmlChar *) buf);
     }
     if (name == NULL) {
+        ctxt->nberrors++;
 	xmlSchemaErrorContext(ctxt, schema, node, child);
         if ((ctxt != NULL) && (ctxt->error != NULL))
             ctxt->error(ctxt->userData, "complexType has no name\n");
@@ -2854,6 +2912,7 @@
 	child = xmlSchemaParseAttrDecls(ctxt, schema, child, type);
     }
     if (child != NULL) {
+        ctxt->nberrors++;
 	xmlSchemaErrorContext(ctxt, schema, node, child);
 	if ((ctxt != NULL) && (ctxt->error != NULL))
 	    ctxt->error(ctxt->userData,
@@ -2884,10 +2943,13 @@
     xmlSchemaAnnotPtr annot;
     xmlNodePtr child = NULL;
     xmlChar *val;
+    int nberrors;
 
     if ((ctxt == NULL) || (node == NULL))
         return (NULL);
 
+    nberrors = ctxt->nberrors;
+    ctxt->nberrors = 0;
     if (IS_SCHEMA(node, "schema")) {
         schema = xmlSchemaNewSchema(ctxt);
 	if (schema == NULL)
@@ -2900,6 +2962,7 @@
 	    if (xmlStrEqual(val, BAD_CAST "qualified"))
 		schema->flags |= XML_SCHEMAS_QUALIF_ELEM;
 	    else if (!xmlStrEqual(val, BAD_CAST "unqualified")) {
+	        ctxt->nberrors++;
 		xmlSchemaErrorContext(ctxt, schema, node, child);
 		if ((ctxt != NULL) && (ctxt->error != NULL)) {
 		    ctxt->error(ctxt->userData,
@@ -2914,6 +2977,7 @@
 	    if (xmlStrEqual(val, BAD_CAST "qualified"))
 		schema->flags |= XML_SCHEMAS_QUALIF_ATTR;
 	    else if (!xmlStrEqual(val, BAD_CAST "unqualified")) {
+	        ctxt->nberrors++;
 		xmlSchemaErrorContext(ctxt, schema, node, child);
 		if ((ctxt != NULL) && (ctxt->error != NULL)) {
 		    ctxt->error(ctxt->userData,
@@ -2967,6 +3031,7 @@
 		xmlSchemaParseNotation(ctxt, schema, child);
 		child = child->next;
 	    } else {
+	        ctxt->nberrors++;
 		xmlSchemaErrorContext(ctxt, schema, node, child);
 		if ((ctxt != NULL) && (ctxt->error != NULL))
 		    ctxt->error(ctxt->userData,
@@ -2984,6 +3049,13 @@
             }
         }
     }
+    if (ctxt->nberrors != 0) {
+        if (schema != NULL) {
+	    xmlSchemaFree(schema);
+	    schema = NULL;
+	}
+    }
+    ctxt->nberrors = nberrors;
 #ifdef DEBUG
     if (schema == NULL)
         xmlGenericError(xmlGenericErrorContext,
@@ -3472,6 +3544,7 @@
 	xmlSchemaElementPtr elemDecl;
 
 	if (elem->subtypes != NULL) {
+	    ctxt->nberrors++;
 	    xmlSchemaErrorContext(ctxt, NULL, elem->node, NULL);
 	    if ((ctxt != NULL) && (ctxt->error != NULL))
 		ctxt->error(ctxt->userData,
@@ -3483,6 +3556,8 @@
 				  elem->ref, elem->refNs);
 
         if (elemDecl == NULL) {
+	    ctxt->nberrors++;
+	    xmlSchemaErrorContext(ctxt, NULL, elem->node, NULL);
 	    if ((ctxt != NULL) && (ctxt->error != NULL))
 		ctxt->error(ctxt->userData,
 			    "Schemas: element %s ref to %s not found\n",
@@ -3494,6 +3569,7 @@
 	xmlSchemaTypePtr typeDecl;
 
 	if (elem->subtypes != NULL) {
+	    ctxt->nberrors++;
 	    xmlSchemaErrorContext(ctxt, NULL, elem->node, NULL);
 	    if ((ctxt != NULL) && (ctxt->error != NULL))
 		ctxt->error(ctxt->userData,
@@ -3505,6 +3581,8 @@
 		                    elem->namedTypeNs);
 
         if (typeDecl == NULL) {
+	    ctxt->nberrors++;
+	    xmlSchemaErrorContext(ctxt, NULL, elem->node, NULL);
 	    if ((ctxt != NULL) && (ctxt->error != NULL))
 		ctxt->error(ctxt->userData,
 			    "Schemas: element %s type %s not found\n",
@@ -3549,6 +3627,7 @@
 		    baseType = xmlSchemaGetType(ctxt->schema, typeDecl->base,
 						typeDecl->baseNs);
 		    if (baseType == NULL) {
+		        ctxt->nberrors++;
 			if ((ctxt != NULL) && (ctxt->error != NULL))
 			    ctxt->error(ctxt->userData,
 				"Schemas: type %s base type %s not found\n",
@@ -3584,6 +3663,7 @@
 		    baseType = xmlSchemaGetType(ctxt->schema, typeDecl->base,
 						typeDecl->baseNs);
 		    if (baseType == NULL) {
+		        ctxt->nberrors++;
 			if ((ctxt != NULL) && (ctxt->error != NULL))
 			    ctxt->error(ctxt->userData,
 				"Schemas: type %s base type %s not found\n",
@@ -3611,6 +3691,7 @@
 		base = xmlSchemaGetType(ctxt->schema, typeDecl->base,
 					typeDecl->baseNs);
 		if (base == NULL) {
+		    ctxt->nberrors++;
 		    xmlSchemaErrorContext(ctxt, NULL, typeDecl->node, NULL);
 		    if ((ctxt != NULL) && (ctxt->error != NULL))
 			ctxt->error(ctxt->userData,
@@ -3777,6 +3858,7 @@
 	    if (facet->val == NULL) {
 		/* error code */
 		if (ctxt != NULL) {
+		    ctxt->nberrors++;
 		    xmlSchemaErrorContext(ctxt, NULL,
 			    facet->node, NULL);
 		    ctxt->error(ctxt->userData,
@@ -3803,6 +3885,7 @@
 					 facet->value);
 	    if (tmp != 0) {
 		if (ctxt != NULL) {
+		    ctxt->nberrors++;
 		    xmlSchemaErrorContext(ctxt, NULL,
 			    facet->node, NULL);
 		    ctxt->error(ctxt->userData,
@@ -3819,6 +3902,7 @@
 	    if (facet->regexp == NULL) {
 		/* error code */
 		if (ctxt != NULL) {
+		    ctxt->nberrors++;
 		    ctxt->error(ctxt->userData,
 		"Schemas: type %s facet regexp %s invalid\n",
 				name, facet->value);
@@ -3839,6 +3923,7 @@
 	    if (tmp != 0) {
 		/* error code */
 		if (ctxt != NULL) {
+		    ctxt->nberrors++;
 		    xmlSchemaErrorContext(ctxt, NULL,
 			    facet->node, NULL);
 		    ctxt->error(ctxt->userData,
@@ -3860,6 +3945,7 @@
 		facet->whitespace = XML_SCHEMAS_FACET_COLLAPSE;
 	    } else {
 		if (ctxt != NULL) {
+		    ctxt->nberrors++;
 		    xmlSchemaErrorContext(ctxt, NULL,
 			    facet->node, NULL);
 		    ctxt->error(ctxt->userData,
@@ -3923,6 +4009,8 @@
 	ref = xmlHashLookup2(ctxt->schema->attrgrpDecl, attrgrpDecl->ref,
 		             attrgrpDecl->refNs);
 	if (ref == NULL) {
+	    ctxt->nberrors++;
+	    xmlSchemaErrorContext(ctxt, NULL, attrgrpDecl->node, NULL);
 	    if ((ctxt != NULL) && (ctxt->error != NULL))
 		ctxt->error(ctxt->userData,
 		    "Schemas: attribute group %s reference %s not found\n",
@@ -3932,6 +4020,8 @@
 	xmlSchemaAttrGrpFixup(ref, ctxt, NULL);
 	attrgrpDecl->attributes = ref->attributes;
     } else {
+        ctxt->nberrors++;
+	xmlSchemaErrorContext(ctxt, NULL, attrgrpDecl->node, NULL);
 	if ((ctxt != NULL) && (ctxt->error != NULL))
 	    ctxt->error(ctxt->userData,
 		"Schemas: attribute %s has no attributes nor reference\n",
@@ -3962,6 +4052,8 @@
 	type = xmlSchemaGetType(ctxt->schema, attrDecl->typeName,
 				    attrDecl->typeNs);
 	if (type == NULL) {
+	    ctxt->nberrors++;
+	    xmlSchemaErrorContext(ctxt, NULL, attrDecl->node, NULL);
 	    if ((ctxt != NULL) && (ctxt->error != NULL))
 		ctxt->error(ctxt->userData,
 		    "Schemas: attribute %s type %s not found\n",
@@ -3974,6 +4066,8 @@
 	ref = xmlHashLookup2(ctxt->schema->attrDecl, attrDecl->ref,
 		             attrDecl->refNs);
 	if (ref == NULL) {
+	    ctxt->nberrors++;
+	    xmlSchemaErrorContext(ctxt, NULL, attrDecl->node, NULL);
 	    if ((ctxt != NULL) && (ctxt->error != NULL))
 		ctxt->error(ctxt->userData,
 		    "Schemas: attribute %s reference %s not found\n",
@@ -3983,6 +4077,8 @@
 	xmlSchemaAttrFixup(ref, ctxt, NULL);
 	attrDecl->subtypes = ref->subtypes;
     } else {
+	ctxt->nberrors++;
+	xmlSchemaErrorContext(ctxt, NULL, attrDecl->node, NULL);
 	if ((ctxt != NULL) && (ctxt->error != NULL))
 	    ctxt->error(ctxt->userData,
 		"Schemas: attribute %s has no type nor reference\n",
@@ -4007,12 +4103,15 @@
     xmlSchemaPtr ret = NULL;
     xmlDocPtr doc;
     xmlNodePtr root, cur, delete;
+    int nberrors;
 
     xmlSchemaInitTypes();
 
     if (ctxt == NULL)
         return (NULL);
 
+    nberrors = ctxt->nberrors;
+    ctxt->nberrors = 0;
     ctxt->counter = 0;
     ctxt->container = NULL;
 
@@ -4022,6 +4121,7 @@
     if (ctxt->URL != NULL) {
 	doc = xmlParseFile((const char *) ctxt->URL);
 	if (doc == NULL) {
+	    ctxt->nberrors++;
 	    if (ctxt->error != NULL)
 		ctxt->error(ctxt->userData,
 			    "xmlSchemaParse: could not load %s\n", ctxt->URL);
@@ -4030,6 +4130,7 @@
     } else if (ctxt->buffer != NULL) {
 	doc = xmlParseMemory(ctxt->buffer, ctxt->size);
 	if (doc == NULL) {
+	    ctxt->nberrors++;
 	    if (ctxt->error != NULL)
 		ctxt->error(ctxt->userData,
 			    "xmlSchemaParse: could not parse schemas\n");
@@ -4038,6 +4139,7 @@
 	doc->URL = xmlStrdup(BAD_CAST "in_memory_buffer");
 	ctxt->URL = xmlStrdup(BAD_CAST "in_memory_buffer");
     } else {
+        ctxt->nberrors++;
 	if (ctxt->error != NULL)
 	    ctxt->error(ctxt->userData,
 			"xmlSchemaParse: nothing to parse\n");
@@ -4049,6 +4151,7 @@
      */
     root = xmlDocGetRootElement(doc);
     if (root == NULL) {
+        ctxt->nberrors++;
         if (ctxt->error != NULL)
             ctxt->error(ctxt->userData, "xmlSchemaParse: %s is empty\n",
                         ctxt->URL);
@@ -4156,6 +4259,10 @@
      */
     xmlHashScan(ret->attrgrpDecl, (xmlHashScanner) xmlSchemaAttrGrpFixup, ctxt);
 
+    if (ctxt->nberrors != 0) {
+        xmlSchemaFree(ret);
+	ret = NULL;
+    }
     return (ret);
 }
  
@@ -4262,6 +4369,7 @@
 
         if (tmp != 0) {
             ret = tmp;
+	    ctxt->nberrors++;
             if (ctxt->error != NULL)
 	        ctxt->error(ctxt->userData,
 	             "Failed to validate type with facet %s\n",
@@ -4312,6 +4420,7 @@
 	ret = xmlSchemaValPredefTypeNode(type, value, &(ctxt->value),
 	                                 ctxt->cur);
         if (ret != 0) {
+	    ctxt->nberrors++;
             if (ctxt->error != NULL)
 	        ctxt->error(ctxt->userData,
 		        "Failed to validate basic type %s\n", type->name);
@@ -4353,6 +4462,7 @@
 	base = type->subtypes;
 	if (base == NULL) {
 	    ctxt->err = XML_SCHEMAS_ERR_INTERNAL;
+	    ctxt->nberrors++;
 	    if (ctxt->error != NULL) {
 		xmlSchemaErrorContext(NULL, ctxt->schema, type->node, NULL);
 		ctxt->error(ctxt->userData,
@@ -4455,6 +4565,7 @@
 	if (ctxt->attr[i].state == XML_SCHEMAS_ATTR_UNKNOWN) {
 	    ret = 1;
 	    ctxt->err = XML_SCHEMAS_ERR_ATTRUNKNOWN;
+	    ctxt->nberrors++;
 	    if (ctxt->error != NULL)
 		ctxt->error(ctxt->userData,
 		"Attribute %s on %s is unknown\n",
@@ -4627,6 +4738,7 @@
     type = ctxt->type;
 
     if ((ctxt == NULL) || (type == NULL)) {
+        ctxt->nberrors++;
         ctxt->err = XML_SCHEMAS_ERR_INTERNAL;
         if (ctxt->error != NULL)
             ctxt->error(ctxt->userData,
@@ -4639,6 +4751,7 @@
      */
     ret = xmlSchemaValidateCheckNodeList(child);
     if (ret < 0) {
+        ctxt->nberrors++;
         ctxt->err = XML_SCHEMAS_ERR_INTERNAL;
         if (ctxt->error != NULL)
             ctxt->error(ctxt->userData,
@@ -4646,6 +4759,7 @@
                         node->name);
         return (-1);
     } else if (ret == 0) {
+        ctxt->nberrors++;
         ctxt->err = XML_SCHEMAS_ERR_NOTSIMPLE;
         if (ctxt->error != NULL)
             ctxt->error(ctxt->userData,
@@ -4681,6 +4795,7 @@
     type = ctxt->type;
 
     if ((ctxt == NULL) || (type == NULL)) {
+        ctxt->nberrors++;
 	ctxt->err = XML_SCHEMAS_ERR_INTERNAL;
 	if (ctxt->error != NULL)
 	    ctxt->error(ctxt->userData,
@@ -4693,6 +4808,7 @@
      */
     ret = xmlSchemaValidateCheckNodeList(child);
     if (ret < 0) {
+        ctxt->nberrors++;
 	ctxt->err = XML_SCHEMAS_ERR_INTERNAL;
 	if (ctxt->error != NULL)
 	    ctxt->error(ctxt->userData,
@@ -4700,6 +4816,7 @@
 			node->name);
 	return(-1);
     } else if (ret == 0) {
+        ctxt->nberrors++;
 	ctxt->err = XML_SCHEMAS_ERR_NOTSIMPLE;
 	if (ctxt->error != NULL)
 	    ctxt->error(ctxt->userData,
@@ -4719,6 +4836,7 @@
 	     (!xmlStrEqual(attr->name, BAD_CAST"schemasLocation")) &&
 	     (!xmlStrEqual(attr->name, BAD_CAST"noNamespaceSchemaLocation")))) {
 	    ctxt->err = XML_SCHEMAS_ERR_INVALIDATTR;
+	    ctxt->nberrors++;
 	    if (ctxt->error != NULL)
 		ctxt->error(ctxt->userData,
 			"Element %s: attribute %s should not be present\n",
@@ -4758,6 +4876,7 @@
     type = ctxt->type;
 
     if ((ctxt == NULL) || (type == NULL)) {
+	ctxt->nberrors++;
 	ctxt->err = XML_SCHEMAS_ERR_INTERNAL;
 	if (ctxt->error != NULL)
 	    ctxt->error(ctxt->userData,
@@ -4767,6 +4886,7 @@
     }
     if (child == NULL) {
 	if (type->minOccurs > 0) {
+	    ctxt->nberrors++;
 	    ctxt->err = XML_SCHEMAS_ERR_MISSING;
 	    if (ctxt->error != NULL)
 		ctxt->error(ctxt->userData,
@@ -4780,6 +4900,7 @@
      * Verify the element matches
      */
     if (!xmlStrEqual(child->name, type->name)) {
+	ctxt->nberrors++;
 	ctxt->err = XML_SCHEMAS_ERR_WRONGELEM;
 	if (ctxt->error != NULL)
 	    ctxt->error(ctxt->userData,
@@ -4818,11 +4939,13 @@
 		"====> %s : %d\n", node->name, ret);
 #endif
 	if (ret == 0) {
+	    ctxt->nberrors++;
 	    ctxt->err = XML_SCHEMAS_ERR_ELEMCONT;
 	    if (ctxt->error != NULL)
 		ctxt->error(ctxt->userData, "Element %s content check failed\n",
 			    node->name);
 	} else if (ret < 0) {
+	    ctxt->nberrors++;
 	    ctxt->err = XML_SCHEMAS_ERR_ELEMCONT;
 	    if (ctxt->error != NULL)
 		ctxt->error(ctxt->userData, "Element %s content check failure\n",
@@ -4871,6 +4994,7 @@
     type = ctxt->type;
 
     if ((ctxt == NULL) || (type == NULL)) {
+	ctxt->nberrors++;
 	ctxt->err = XML_SCHEMAS_ERR_INTERNAL;
 	if (ctxt->error != NULL)
 	    ctxt->error(ctxt->userData,
@@ -4896,6 +5020,7 @@
 	        TODO
 		break;
 	    case XML_ELEMENT_NODE:
+		ctxt->nberrors++;
 		ctxt->err = XML_SCHEMAS_ERR_INVALIDELEM;
 		if (ctxt->error != NULL)
 		    ctxt->error(ctxt->userData,
@@ -4916,6 +5041,7 @@
 #ifdef LIBXML_DOCB_ENABLED
             case XML_DOCB_DOCUMENT_NODE:
 #endif
+		ctxt->nberrors++;
 		ctxt->err = XML_SCHEMAS_ERR_INVALIDELEM;
 		if (ctxt->error != NULL)
 		    ctxt->error(ctxt->userData,
@@ -4938,6 +5064,7 @@
     if (value != NULL)
 	xmlFree(value);
     if (ret != 0) {
+	ctxt->nberrors++;
         if (ctxt->error != NULL)
 	    ctxt->error(ctxt->userData,
 		    "Element %s: failed to validate basic type %s\n",
@@ -4972,6 +5099,7 @@
     switch (type->contentType) {
 	case XML_SCHEMA_CONTENT_EMPTY:
 	    if (child != NULL) {
+		ctxt->nberrors++;
 		if (ctxt->error != NULL)
 		    ctxt->error(ctxt->userData,
 			    "Element %s is supposed to be empty\n",
@@ -5076,6 +5204,7 @@
 	     */
 	    if (decl->ref != NULL) {
 		if (decl->refDecl == NULL) {
+		    ctxt->nberrors++;
 		    ctxt->err = XML_SCHEMAS_ERR_INTERNAL;
 		    if (ctxt->error != NULL)
 			ctxt->error(ctxt->userData,
@@ -5211,6 +5340,7 @@
      * 3.3.4 : 2
      */
     if (elemDecl->flags & XML_SCHEMAS_ELEM_ABSTRACT) {
+        ctxt->nberrors++;
 	ctxt->err = XML_SCHEMAS_ERR_ISABSTRACT;
         if (ctxt->error != NULL)
             ctxt->error(ctxt->userData, "Element %s is abstract\n", elem->name);
@@ -5224,6 +5354,7 @@
 	/* 3.3.4: 3.2 */
 	if (xmlStrEqual(nil, BAD_CAST "true")) {
 	    if (elem->children != NULL) {
+		ctxt->nberrors++;
 		ctxt->err = XML_SCHEMAS_ERR_NOTEMPTY;
 		if (ctxt->error != NULL)
 		    ctxt->error(ctxt->userData, "Element %s is not empty\n",
@@ -5232,6 +5363,7 @@
 	    }
 	    if ((elemDecl->flags & XML_SCHEMAS_ELEM_FIXED) &&
 		(elemDecl->value != NULL)) {
+		ctxt->nberrors++;
 		ctxt->err = XML_SCHEMAS_ERR_HAVEDEFAULT;
 		if (ctxt->error != NULL)
 		    ctxt->error(ctxt->userData,
@@ -5244,6 +5376,7 @@
 	/* 3.3.4: 3.1 */
 	if (nil != NULL) {
 	    ctxt->err = XML_SCHEMAS_ERR_NOTNILLABLE;
+	    ctxt->nberrors++;
 	    if (ctxt->error != NULL)
 		ctxt->error(ctxt->userData,
 			"Element %s with xs:nil but not nillable\n",
@@ -5321,6 +5454,7 @@
 	    }
 	    ctxt->cur = (xmlNodePtr) attributes;
 	    if (attributes->subtypes == NULL) {
+	        ctxt->nberrors++;
 		ctxt->err = XML_SCHEMAS_ERR_INTERNAL;
 		if (ctxt->error != NULL)
 		    ctxt->error(ctxt->userData,
@@ -5332,6 +5466,7 @@
 	    ret = xmlSchemaValidateSimpleValue(ctxt, attributes->subtypes,
 					       value);
 	    if (ret != 0) {
+	        ctxt->nberrors++;
 		ctxt->err = XML_SCHEMAS_ERR_ATTRINVALID;
 		if (ctxt->error != NULL)
 		    ctxt->error(ctxt->userData,
@@ -5374,6 +5509,7 @@
      * 3.3.4 : 1
      */
     if (elemDecl == NULL) {
+        ctxt->nberrors++;
 	ctxt->err = XML_SCHEMAS_ERR_UNDECLAREDELEM;
         if (ctxt->error != NULL)
             ctxt->error(ctxt->userData, "Element %s not declared\n",
@@ -5381,6 +5517,7 @@
 	return(ctxt->err);
     }
     if (elemDecl->subtypes == NULL) {
+        ctxt->nberrors++;
 	ctxt->err = XML_SCHEMAS_ERR_NOTYPE;
         if (ctxt->error != NULL)
             ctxt->error(ctxt->userData, "Element %s has no type\n",
@@ -5415,11 +5552,13 @@
 #endif
 	if (ret == 0) {
 	    ctxt->err = XML_SCHEMAS_ERR_ELEMCONT;
+	    ctxt->nberrors++;
 	    if (ctxt->error != NULL)
 		ctxt->error(ctxt->userData, "Element %s content check failed\n",
 			    elem->name);
 	} else if (ret < 0) {
 	    ctxt->err = XML_SCHEMAS_ERR_ELEMCONT;
+	    ctxt->nberrors++;
 	    if (ctxt->error != NULL)
 		ctxt->error(ctxt->userData, "Element %s content check failed\n",
 			    elem->name);
@@ -5460,6 +5599,7 @@
     root = xmlDocGetRootElement(doc);
     if (root == NULL) {
 	ctxt->err = XML_SCHEMAS_ERR_NOROOT;
+	ctxt->nberrors++;
         if (ctxt->error != NULL)
             ctxt->error(ctxt->userData, "document has no root\n");
         return(ctxt->err);
@@ -5472,11 +5612,13 @@
 		root->name, NULL, NULL);
     if (elemDecl == NULL) {
 	ctxt->err = XML_SCHEMAS_ERR_UNDECLAREDELEM;
+	ctxt->nberrors++;
         if (ctxt->error != NULL)
             ctxt->error(ctxt->userData, "Element %s not declared\n",
                         root->name);
     } else if ((elemDecl->flags & XML_SCHEMAS_ELEM_TOPLEVEL) == 0) {
 	ctxt->err = XML_SCHEMAS_ERR_NOTTOPLEVEL;
+	ctxt->nberrors++;
         if (ctxt->error != NULL)
             ctxt->error(ctxt->userData, "Root element %s not toplevel\n",
                         root->name);
diff --git a/xmlschemastypes.c b/xmlschemastypes.c
index 831721a..44ecab9 100644
--- a/xmlschemastypes.c
+++ b/xmlschemastypes.c
@@ -1739,7 +1739,13 @@
         case XML_SCHEMAS_ID:
 	    ret = xmlValidateNCName(value, 1);
 	    if ((ret == 0) && (val != NULL)) {
-		TODO;
+		v = xmlSchemaNewValue(XML_SCHEMAS_ID);
+		if (v != NULL) {
+		    v->value.str = xmlStrdup(value);
+		    *val = v;
+		} else {
+		    goto error;
+		}
 	    }
 	    if ((ret == 0) && (node != NULL) &&
 		(node->type == XML_ATTRIBUTE_NODE)) {
