diff --git a/ChangeLog b/ChangeLog
index aee4573..2a85f96 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+Fri Oct 10 16:08:02 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+	* HTMLparser.c c14n.c catalog.c error.c globals.c parser.c
+	  parserInternals.c relaxng.c valid.c xinclude.c xmlIO.c xmlregexp.c
+	  xmlschemas.c xpath.c xpointer.c include/libxml/globals.h
+	  include/libxml/parser.h include/libxml/valid.h 
+	  include/libxml/xmlerror.h: Setting up the framework for structured
+	  error reporting, touches a lot of modules, but little code now
+	  the error handling trail has been cleaned up.
+
 Fri Oct 10 14:29:42 CEST 2003 Daniel Veillard <daniel@veillard.com>
 
 	* c14n.c include/libxml/xmlerror.h: converted the C14N module too
diff --git a/HTMLparser.c b/HTMLparser.c
index 3ee37a4..68c54cb 100644
--- a/HTMLparser.c
+++ b/HTMLparser.c
@@ -79,12 +79,12 @@
         ctxt->disableSAX = 1;
     }
     if (extra)
-        __xmlRaiseError(NULL, NULL, ctxt, NULL, XML_FROM_PARSER,
+        __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER,
                         XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, extra,
                         NULL, NULL, 0, 0,
                         "Memory allocation failed : %s\n", extra);
     else
-        __xmlRaiseError(NULL, NULL, ctxt, NULL, XML_FROM_PARSER,
+        __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER,
                         XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, NULL,
                         NULL, NULL, 0, 0, "Memory allocation failed\n");
 }
@@ -104,7 +104,7 @@
              const char *msg, const xmlChar *str1, const xmlChar *str2)
 {
     ctxt->errNo = error;
-    __xmlRaiseError(NULL, NULL, ctxt, NULL, XML_FROM_HTML, error,
+    __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_HTML, error,
                     XML_ERR_ERROR, NULL, 0,
 		    (const char *) str1, (const char *) str2,
 		    NULL, 0, 0,
@@ -126,7 +126,7 @@
              const char *msg, int val)
 {
     ctxt->errNo = error;
-    __xmlRaiseError(NULL, NULL, ctxt, NULL, XML_FROM_HTML, error,
+    __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_HTML, error,
                     XML_ERR_ERROR, NULL, 0, NULL, NULL,
 		    NULL, val, 0, msg, val);
     ctxt->wellFormed = 0;
diff --git a/c14n.c b/c14n.c
index a8030fa..01c46b1 100644
--- a/c14n.c
+++ b/c14n.c
@@ -132,7 +132,7 @@
 static void
 xmlC14NErrMemory(const char *extra)
 {
-    __xmlRaiseError(NULL, NULL, NULL, NULL, XML_FROM_C14N,
+    __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_C14N,
 		    XML_ERR_NO_MEMORY, XML_ERR_ERROR, NULL, 0, extra,
 		    NULL, NULL, 0, 0,
 		    "Memory allocation failed : %s\n", extra);
@@ -154,7 +154,7 @@
 {
     if (ctxt != NULL)
         ctxt->error = error;
-    __xmlRaiseError(NULL, NULL,
+    __xmlRaiseError(NULL, NULL, NULL,
 		    ctxt, node, XML_FROM_C14N, error,
 		    XML_ERR_ERROR, NULL, 0,
 		    NULL, NULL, NULL, 0, 0, msg);
@@ -1490,7 +1490,7 @@
               int exclusive, xmlChar ** inclusive_ns_prefixes,
               int with_comments, xmlOutputBufferPtr buf)
 {
-    xmlC14NCtxPtr ctx;
+    xmlC14NCtxPtr ctx = NULL;
 
     if ((doc == NULL) || (buf == NULL)) {
 #ifdef DEBUG_C14N
diff --git a/catalog.c b/catalog.c
index c013c97..06dbb52 100644
--- a/catalog.c
+++ b/catalog.c
@@ -197,7 +197,7 @@
 static void
 xmlCatalogErrMemory(const char *extra)
 {
-    __xmlRaiseError(NULL, NULL, NULL, NULL, XML_FROM_CATALOG,
+    __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_CATALOG,
                     XML_ERR_NO_MEMORY, XML_ERR_ERROR, NULL, 0,
 		    extra, NULL, NULL, 0, 0,
 		    "Memory allocation failed : %s\n", extra);
@@ -217,7 +217,7 @@
                const char *msg, const xmlChar *str1, const xmlChar *str2,
 	       const xmlChar *str3)
 {
-    __xmlRaiseError(NULL, NULL, catal, node, XML_FROM_CATALOG,
+    __xmlRaiseError(NULL, NULL, NULL, catal, node, XML_FROM_CATALOG,
                     error, XML_ERR_ERROR, NULL, 0,
 		    (const char *) str1, (const char *) str2,
 		    (const char *) str3, 0, 0,
diff --git a/error.c b/error.c
index fcc0fdd..e450f1f 100644
--- a/error.c
+++ b/error.c
@@ -112,6 +112,23 @@
 	xmlGenericError = xmlGenericErrorDefaultFunc;
 }
 
+/**
+ * xmlSetStructuredErrorFunc:
+ * @ctx:  the new error handling context
+ * @handler:  the new handler function
+ *
+ * Function to reset the handler and the error context for out of
+ * context structured error messages.
+ * This simply means that @handler will be called for subsequent
+ * error messages while not parsing nor validating. And @ctx will
+ * be passed as first argument to @handler
+ */
+void
+xmlSetStructuredErrorFunc(void *ctx, xmlStructuredErrorFunc handler) {
+    xmlGenericErrorContext = ctx;
+    xmlStructuredError = handler;
+}
+
 /************************************************************************
  * 									*
  * 			Handling of parsing errors			*
@@ -392,7 +409,8 @@
 
 /**
  * __xmlRaiseError:
- * @channel: the callback channel
+ * @channel: the structured callback channel
+ * @channel: the old callback channel
  * @data: the callback data
  * @ctx: the parser context or NULL
  * @ctx: the parser context or NULL
@@ -414,7 +432,8 @@
  * error callback handler
  */
 void
-__xmlRaiseError(xmlGenericErrorFunc channel, void *data, void *ctx,
+__xmlRaiseError(xmlStructuredErrorFunc schannel,
+              xmlGenericErrorFunc channel, void *data, void *ctx,
               void *nod, int domain, int code, xmlErrorLevel level,
               const char *file, int line, const char *str1,
               const char *str2, const char *str3, int int1, int int2,
@@ -431,6 +450,9 @@
         (domain == XML_FROM_DTD) || (domain == XML_FROM_NAMESPACE) ||
 	(domain == XML_FROM_IO)) {
 	ctxt = (xmlParserCtxtPtr) ctx;
+	if ((schannel == NULL) && (ctxt != NULL) && (ctxt->sax != NULL) &&
+	    (ctxt->sax->initialized == XML_SAX2_MAGIC))
+	    schannel = ctxt->sax->serror;
     }
     if (code == XML_ERR_OK)
         return;
@@ -512,9 +534,16 @@
 	    channel = ctxt->sax->error;
 	data = ctxt->userData;
     } else if (channel == NULL) {
-	channel = xmlGenericError;
+        if (xmlStructuredError != NULL)
+	    schannel = xmlStructuredError;
+	else
+	    channel = xmlGenericError;
 	data = xmlGenericErrorContext;
     }
+    if (schannel != NULL) {
+        schannel(data, to);
+	return;
+    }
     if (channel == NULL)
         return;
 
@@ -546,16 +575,16 @@
 
     if (code == XML_ERR_NO_MEMORY) {
 	if (extra)
-	    __xmlRaiseError(NULL, NULL, NULL, node, domain,
+	    __xmlRaiseError(NULL, NULL, NULL, NULL, node, domain,
 			    XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, extra,
 			    NULL, NULL, 0, 0,
 			    "Memory allocation failed : %s\n", extra);
 	else
-	    __xmlRaiseError(NULL, NULL, NULL, node, domain,
+	    __xmlRaiseError(NULL, NULL, NULL, NULL, node, domain,
 			    XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, NULL,
 			    NULL, NULL, 0, 0, "Memory allocation failed\n");
     } else {
-	__xmlRaiseError(NULL, NULL, NULL, node, domain,
+	__xmlRaiseError(NULL, NULL, NULL, NULL, node, domain,
 			code, XML_ERR_ERROR, NULL, 0, extra,
 			NULL, NULL, 0, 0, msg, extra);
     }
diff --git a/globals.c b/globals.c
index fd61cf4..8de87e4 100644
--- a/globals.c
+++ b/globals.c
@@ -136,6 +136,7 @@
 #undef	xmlDefaultSAXLocator
 #undef	xmlDoValidityCheckingDefaultValue
 #undef	xmlGenericError
+#undef	xmlStructuredError
 #undef	xmlGenericErrorContext
 #undef	xmlGetWarningsDefaultValue
 #undef	xmlIndentTreeOutput
@@ -288,6 +289,13 @@
 xmlGenericErrorFunc xmlGenericError = xmlGenericErrorDefaultFunc;
 static xmlGenericErrorFunc xmlGenericErrorThrDef = xmlGenericErrorDefaultFunc;
 /**
+ * xmlStructuredError:
+ *
+ * Global setting: function used for structured error callbacks
+ */
+xmlStructuredErrorFunc xmlStructuredError = NULL;
+static xmlStructuredErrorFunc xmlStructuredErrorThrDef = NULL;
+/**
  * xmlGenericErrorContext:
  *
  * Global setting passed to generic error callbacks
@@ -523,6 +531,7 @@
         xmlSubstituteEntitiesDefaultValueThrDef;
 
     gs->xmlGenericError = xmlGenericErrorThrDef;
+    gs->xmlStructuredError = xmlStructuredErrorThrDef;
     gs->xmlGenericErrorContext = xmlGenericErrorContextThrDef;
     gs->xmlRegisterNodeDefaultValue = xmlRegisterNodeDefaultValueThrDef;
     gs->xmlDeregisterNodeDefaultValue = xmlDeregisterNodeDefaultValueThrDef;
@@ -542,6 +551,14 @@
     xmlMutexUnlock(xmlThrDefMutex);
 }
 
+void
+xmlThrDefSetStructuredErrorFunc(void *ctx, xmlStructuredErrorFunc handler) {
+    xmlMutexLock(xmlThrDefMutex);
+    xmlGenericErrorContextThrDef = ctx;
+    xmlStructuredErrorThrDef = handler;
+    xmlMutexUnlock(xmlThrDefMutex);
+}
+
 /**
  * xmlRegisterNodeDefault:
  * @func: function pointer to the new RegisterNodeFunc
@@ -736,6 +753,15 @@
 	return (&xmlGetGlobalState()->xmlGenericError);
 }
 
+#undef	xmlStructuredError
+xmlStructuredErrorFunc *
+__xmlStructuredError(void) {
+    if (IS_MAIN_THREAD)
+	return (&xmlStructuredError);
+    else
+	return (&xmlGetGlobalState()->xmlStructuredError);
+}
+
 #undef	xmlGenericErrorContext
 void * *
 __xmlGenericErrorContext(void) {
diff --git a/include/libxml/globals.h b/include/libxml/globals.h
index f380db1..733632c 100644
--- a/include/libxml/globals.h
+++ b/include/libxml/globals.h
@@ -42,6 +42,7 @@
 #undef	xmlDoValidityCheckingDefaultValue
 #undef	xmlFree
 #undef	xmlGenericError
+#undef	xmlStructuredError
 #undef	xmlGenericErrorContext
 #undef	xmlGetWarningsDefaultValue
 #undef	xmlIndentTreeOutput
@@ -82,6 +83,7 @@
 	xmlReallocFunc xmlRealloc;
 
 	xmlGenericErrorFunc xmlGenericError;
+	xmlStructuredErrorFunc xmlStructuredError;
 	void *xmlGenericErrorContext;
 
 	int oldXMLWDcompatibility;
@@ -121,6 +123,8 @@
 
 XMLPUBFUN void XMLCALL xmlThrDefSetGenericErrorFunc(void *ctx, xmlGenericErrorFunc handler);
 
+XMLPUBFUN void XMLCALL xmlThrDefSetStructuredErrorFunc(void *ctx, xmlStructuredErrorFunc handler);
+
 XMLPUBFUN xmlRegisterNodeFunc XMLCALL xmlRegisterNodeDefault(xmlRegisterNodeFunc func);
 XMLPUBFUN xmlRegisterNodeFunc XMLCALL xmlThrDefRegisterNodeDefault(xmlRegisterNodeFunc func);
 XMLPUBFUN xmlDeregisterNodeFunc XMLCALL xmlDeregisterNodeDefault(xmlDeregisterNodeFunc func);
@@ -279,6 +283,14 @@
 XMLPUBVAR xmlGenericErrorFunc xmlGenericError;
 #endif
 
+XMLPUBFUN xmlStructuredErrorFunc * XMLCALL __xmlStructuredError(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlStructuredError \
+(*(__xmlStructuredError()))
+#else
+XMLPUBVAR xmlStructuredErrorFunc xmlStructuredError;
+#endif
+
 XMLPUBFUN void * * XMLCALL __xmlGenericErrorContext(void);
 #ifdef LIBXML_THREAD_ENABLED
 #define xmlGenericErrorContext \
diff --git a/include/libxml/parser.h b/include/libxml/parser.h
index 70ee4b7..9da48cb 100644
--- a/include/libxml/parser.h
+++ b/include/libxml/parser.h
@@ -716,6 +716,7 @@
     void *_private;
     startElementNsSAX2Func startElementNs;
     endElementNsSAX2Func endElementNs;
+    xmlStructuredErrorFunc serror;
 };
 
 /*
diff --git a/include/libxml/valid.h b/include/libxml/valid.h
index cb7ff2c..07b4f8f 100644
--- a/include/libxml/valid.h
+++ b/include/libxml/valid.h
@@ -11,6 +11,7 @@
 #define __XML_VALID_H__
 
 #include <libxml/xmlversion.h>
+#include <libxml/xmlerror.h>
 #include <libxml/tree.h>
 #include <libxml/list.h>
 #include <libxml/xmlautomata.h>
@@ -86,6 +87,8 @@
     void                     *am;
     void                  *state;
 #endif
+
+    xmlStructuredErrorFunc serror;   /* structured error reporting capability */
 };
 
 /*
diff --git a/include/libxml/xmlerror.h b/include/libxml/xmlerror.h
index 8f03403..8510a80 100644
--- a/include/libxml/xmlerror.h
+++ b/include/libxml/xmlerror.h
@@ -580,6 +580,9 @@
 XMLPUBFUN void XMLCALL	
     initGenericErrorDefaultFunc	(xmlGenericErrorFunc *handler);
 
+XMLPUBFUN void XMLCALL	
+    xmlSetStructuredErrorFunc	(void *ctx,
+				 xmlStructuredErrorFunc handler);
 /*
  * Default message routines used by SAX and Valid context for error
  * and warning reporting.
@@ -627,7 +630,8 @@
  * Internal callback reporting routine
  */
 XMLPUBFUN void XMLCALL 
-    __xmlRaiseError		(xmlGenericErrorFunc channel,
+    __xmlRaiseError		(xmlStructuredErrorFunc schannel,
+    				 xmlGenericErrorFunc channel,
     				 void *data,
                                  void *ctx,
     				 void *node,
diff --git a/parser.c b/parser.c
index 656e4bd..69a9c4c 100644
--- a/parser.c
+++ b/parser.c
@@ -142,12 +142,12 @@
 {
     ctxt->errNo = XML_ERR_ATTRIBUTE_REDEFINED;
     if (prefix == NULL)
-        __xmlRaiseError(NULL, NULL, ctxt, NULL, XML_FROM_PARSER,
+        __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER,
                         ctxt->errNo, XML_ERR_FATAL, NULL, 0,
                         (const char *) localname, NULL, NULL, 0, 0,
                         "Attribute %s redefined\n", localname);
     else
-        __xmlRaiseError(NULL, NULL, ctxt, NULL, XML_FROM_PARSER,
+        __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER,
                         ctxt->errNo, XML_ERR_FATAL, NULL, 0,
                         (const char *) prefix, (const char *) localname,
                         NULL, 0, 0, "Attribute %s:%s redefined\n", prefix,
@@ -350,7 +350,7 @@
             errmsg = "Unregistered error message\n";
     }
     ctxt->errNo = error;
-    __xmlRaiseError(NULL, NULL, ctxt, NULL, XML_FROM_PARSER, error,
+    __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER, error,
                     XML_ERR_FATAL, NULL, 0, info, NULL, NULL, 0, 0, errmsg,
                     info);
     ctxt->wellFormed = 0;
@@ -371,7 +371,7 @@
                const char *msg)
 {
     ctxt->errNo = error;
-    __xmlRaiseError(NULL, NULL, ctxt, NULL, XML_FROM_PARSER, error,
+    __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER, error,
                     XML_ERR_FATAL, NULL, 0, NULL, NULL, NULL, 0, 0, msg);
     ctxt->wellFormed = 0;
     if (ctxt->recovery == 0)
@@ -393,7 +393,9 @@
               const char *msg, const xmlChar *str1, const xmlChar *str2)
 {
     ctxt->errNo = error;
-    __xmlRaiseError((ctxt->sax) ? ctxt->sax->warning : NULL, ctxt->userData,
+    __xmlRaiseError((ctxt->sax) ? ctxt->sax->serror : NULL,
+                    (ctxt->sax) ? ctxt->sax->warning : NULL,
+                    ctxt->userData,
                     ctxt, NULL, XML_FROM_PARSER, error,
                     XML_ERR_WARNING, NULL, 0,
 		    (const char *) str1, (const char *) str2, NULL, 0, 0,
@@ -414,7 +416,8 @@
               const char *msg, const xmlChar *str1)
 {
     ctxt->errNo = error;
-    __xmlRaiseError(ctxt->vctxt.error, ctxt->vctxt.userData,
+    __xmlRaiseError(ctxt->vctxt.serror,
+                    ctxt->vctxt.error, ctxt->vctxt.userData,
                     ctxt, NULL, XML_FROM_DTD, error,
                     XML_ERR_ERROR, NULL, 0, (const char *) str1,
 		    NULL, NULL, 0, 0,
@@ -436,7 +439,7 @@
                   const char *msg, int val)
 {
     ctxt->errNo = error;
-    __xmlRaiseError(NULL, NULL,
+    __xmlRaiseError(NULL, NULL, NULL,
                     ctxt, NULL, XML_FROM_PARSER, error, XML_ERR_FATAL,
                     NULL, 0, NULL, NULL, NULL, val, 0, msg, val);
     ctxt->wellFormed = 0;
@@ -461,7 +464,7 @@
 		  const xmlChar *str2)
 {
     ctxt->errNo = error;
-    __xmlRaiseError(NULL, NULL,
+    __xmlRaiseError(NULL, NULL, NULL,
                     ctxt, NULL, XML_FROM_PARSER, error, XML_ERR_FATAL,
                     NULL, 0, (const char *) str1, (const char *) str2,
 		    NULL, val, 0, msg, str1, val, str2);
@@ -484,7 +487,7 @@
                   const char *msg, const xmlChar * val)
 {
     ctxt->errNo = error;
-    __xmlRaiseError(NULL, NULL, ctxt, NULL,
+    __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL,
                     XML_FROM_PARSER, error, XML_ERR_FATAL,
                     NULL, 0, (const char *) val, NULL, NULL, 0, 0, msg,
                     val);
@@ -507,7 +510,7 @@
                   const char *msg, const xmlChar * val)
 {
     ctxt->errNo = error;
-    __xmlRaiseError(NULL, NULL, ctxt, NULL,
+    __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL,
                     XML_FROM_PARSER, error, XML_ERR_ERROR,
                     NULL, 0, (const char *) val, NULL, NULL, 0, 0, msg,
                     val);
@@ -530,7 +533,7 @@
          const xmlChar * info3)
 {
     ctxt->errNo = error;
-    __xmlRaiseError(NULL, NULL, ctxt, NULL, XML_FROM_NAMESPACE, error,
+    __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_NAMESPACE, error,
                     XML_ERR_ERROR, NULL, 0, (const char *) info1,
                     (const char *) info2, (const char *) info3, 0, 0, msg,
                     info1, info2, info3);
diff --git a/parserInternals.c b/parserInternals.c
index ccc5eed..562c578 100644
--- a/parserInternals.c
+++ b/parserInternals.c
@@ -110,12 +110,12 @@
         ctxt->disableSAX = 1;
     }
     if (extra)
-        __xmlRaiseError(NULL, NULL, ctxt, NULL, XML_FROM_PARSER,
+        __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER,
                         XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, extra,
                         NULL, NULL, 0, 0,
                         "Memory allocation failed : %s\n", extra);
     else
-        __xmlRaiseError(NULL, NULL, ctxt, NULL, XML_FROM_PARSER,
+        __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER,
                         XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, NULL,
                         NULL, NULL, 0, 0, "Memory allocation failed\n");
 }
@@ -136,7 +136,7 @@
 {
     if (ctxt != NULL)
         ctxt->errNo = error;
-    __xmlRaiseError(NULL, NULL,
+    __xmlRaiseError(NULL, NULL, NULL,
                     ctxt, NULL, XML_FROM_PARSER, error, XML_ERR_FATAL,
                     NULL, 0, (const char *) str1, (const char *) str2,
                     NULL, 0, 0, msg, str1, str2);
@@ -160,7 +160,7 @@
 {
     if (ctxt != NULL)
         ctxt->errNo = XML_ERR_INTERNAL_ERROR;
-    __xmlRaiseError(NULL, NULL,
+    __xmlRaiseError(NULL, NULL, NULL,
                     ctxt, NULL, XML_FROM_PARSER, XML_ERR_INTERNAL_ERROR,
                     XML_ERR_FATAL, NULL, 0, (const char *) str, NULL, NULL,
                     0, 0, msg, str);
@@ -186,7 +186,7 @@
 {
     if (ctxt != NULL)
         ctxt->errNo = error;
-    __xmlRaiseError(NULL, NULL,
+    __xmlRaiseError(NULL, NULL, NULL,
                     ctxt, NULL, XML_FROM_PARSER, error, XML_ERR_FATAL,
                     NULL, 0, NULL, NULL, NULL, val, 0, msg, val);
     if (ctxt != NULL) {
diff --git a/relaxng.c b/relaxng.c
index c6e577d..0330bec 100644
--- a/relaxng.c
+++ b/relaxng.c
@@ -202,6 +202,7 @@
     void *userData;             /* user specific data block */
     xmlRelaxNGValidityErrorFunc error;  /* the callback in case of errors */
     xmlRelaxNGValidityWarningFunc warning;      /* the callback in case of warning */
+    xmlStructuredErrorFunc serror;
     xmlRelaxNGValidErr err;
 
     xmlRelaxNGPtr schema;       /* The schema in use */
@@ -342,6 +343,7 @@
     void *userData;             /* user specific data block */
     xmlRelaxNGValidityErrorFunc error;  /* the callback in case of errors */
     xmlRelaxNGValidityWarningFunc warning;      /* the callback in case of warning */
+    xmlStructuredErrorFunc serror;
     int nbErrors;               /* number of errors in validation */
 
     xmlRelaxNGPtr schema;       /* The schema in use */
@@ -425,6 +427,7 @@
 static void
 xmlRngPErrMemory(xmlRelaxNGParserCtxtPtr ctxt, const char *extra)
 {
+    xmlStructuredErrorFunc schannel = NULL;
     xmlGenericErrorFunc channel = NULL;
     void *data = NULL;
 
@@ -432,15 +435,16 @@
         channel = ctxt->error;
         data = ctxt->userData;
         ctxt->nbErrors++;
+        schannel = ctxt->serror;
     }
     if (extra)
-        __xmlRaiseError(channel, data,
+        __xmlRaiseError(schannel, channel, data,
                         NULL, NULL, XML_FROM_RELAXNGP,
                         XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, extra,
                         NULL, NULL, 0, 0,
                         "Memory allocation failed : %s\n", extra);
     else
-        __xmlRaiseError(channel, data,
+        __xmlRaiseError(schannel, channel, data,
                         NULL, NULL, XML_FROM_RELAXNGP,
                         XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, NULL,
                         NULL, NULL, 0, 0, "Memory allocation failed\n");
@@ -456,6 +460,7 @@
 static void
 xmlRngVErrMemory(xmlRelaxNGValidCtxtPtr ctxt, const char *extra)
 {
+    xmlStructuredErrorFunc schannel = NULL;
     xmlGenericErrorFunc channel = NULL;
     void *data = NULL;
 
@@ -463,15 +468,16 @@
         channel = ctxt->error;
         data = ctxt->userData;
         ctxt->nbErrors++;
+        schannel = ctxt->serror;
     }
     if (extra)
-        __xmlRaiseError(channel, data,
+        __xmlRaiseError(schannel, channel, data,
                         NULL, NULL, XML_FROM_RELAXNGV,
                         XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, extra,
                         NULL, NULL, 0, 0,
                         "Memory allocation failed : %s\n", extra);
     else
-        __xmlRaiseError(channel, data,
+        __xmlRaiseError(schannel, channel, data,
                         NULL, NULL, XML_FROM_RELAXNGV,
                         XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, NULL,
                         NULL, NULL, 0, 0, "Memory allocation failed\n");
@@ -492,6 +498,7 @@
 xmlRngPErr(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node, int error,
            const char *msg, const xmlChar * str1, const xmlChar * str2)
 {
+    xmlStructuredErrorFunc schannel = NULL;
     xmlGenericErrorFunc channel = NULL;
     void *data = NULL;
 
@@ -499,8 +506,9 @@
         channel = ctxt->error;
         data = ctxt->userData;
         ctxt->nbErrors++;
+        schannel = ctxt->serror;
     }
-    __xmlRaiseError(channel, data,
+    __xmlRaiseError(schannel, channel, data,
                     NULL, node, XML_FROM_RELAXNGP,
                     error, XML_ERR_ERROR, NULL, 0,
                     (const char *) str1, (const char *) str2, NULL, 0, 0,
@@ -522,6 +530,7 @@
 xmlRngVErr(xmlRelaxNGValidCtxtPtr ctxt, xmlNodePtr node, int error,
            const char *msg, const xmlChar * str1, const xmlChar * str2)
 {
+    xmlStructuredErrorFunc schannel = NULL;
     xmlGenericErrorFunc channel = NULL;
     void *data = NULL;
 
@@ -529,8 +538,9 @@
         channel = ctxt->error;
         data = ctxt->userData;
         ctxt->nbErrors++;
+        schannel = ctxt->serror;
     }
-    __xmlRaiseError(channel, data,
+    __xmlRaiseError(schannel, channel, data,
                     NULL, node, XML_FROM_RELAXNGV,
                     error, XML_ERR_ERROR, NULL, 0,
                     (const char *) str1, (const char *) str2, NULL, 0, 0,
diff --git a/valid.c b/valid.c
index 34f93df..bec4f9a 100644
--- a/valid.c
+++ b/valid.c
@@ -53,6 +53,7 @@
 static void
 xmlVErrMemory(xmlValidCtxtPtr ctxt, const char *extra)
 {
+    xmlStructuredErrorFunc schannel = NULL;
     xmlGenericErrorFunc channel = NULL;
     xmlParserCtxtPtr pctxt = NULL;
     void *data = NULL;
@@ -61,14 +62,15 @@
         channel = ctxt->error;
         data = ctxt->userData;
 	pctxt = ctxt->userData;
+        schannel = ctxt->serror;
     }
     if (extra)
-        __xmlRaiseError(channel, data,
+        __xmlRaiseError(schannel, channel, data,
                         pctxt, NULL, XML_FROM_DTD, XML_ERR_NO_MEMORY,
                         XML_ERR_FATAL, NULL, 0, extra, NULL, NULL, 0, 0,
                         "Memory allocation failed : %s\n", extra);
     else
-        __xmlRaiseError(channel, data,
+        __xmlRaiseError(schannel, channel, data,
                         pctxt, NULL, XML_FROM_DTD, XML_ERR_NO_MEMORY,
                         XML_ERR_FATAL, NULL, 0, NULL, NULL, NULL, 0, 0,
                         "Memory allocation failed\n");
@@ -86,22 +88,24 @@
 xmlErrValid(xmlValidCtxtPtr ctxt ATTRIBUTE_UNUSED, xmlParserErrors error,
             const char *msg, const char *extra)
 {
+    xmlStructuredErrorFunc schannel = NULL;
     xmlGenericErrorFunc channel = NULL;
     xmlParserCtxtPtr pctxt = NULL;
     void *data = NULL;
 
     if (ctxt != NULL) {
         channel = ctxt->error;
+        schannel = ctxt->serror;
         data = ctxt->userData;
 	pctxt = ctxt->userData;
     }
     if (extra)
-        __xmlRaiseError(channel, data,
+        __xmlRaiseError(schannel, channel, data,
                         pctxt, NULL, XML_FROM_DTD, error,
                         XML_ERR_ERROR, NULL, 0, extra, NULL, NULL, 0, 0,
                         msg, extra);
     else
-        __xmlRaiseError(channel, data,
+        __xmlRaiseError(schannel, channel, data,
                         pctxt, NULL, XML_FROM_DTD, error,
                         XML_ERR_ERROR, NULL, 0, NULL, NULL, NULL, 0, 0,
                         msg);
@@ -124,6 +128,7 @@
                 const char *msg, const xmlChar * str1,
                 int int2, const xmlChar * str3)
 {
+    xmlStructuredErrorFunc schannel = NULL;
     xmlGenericErrorFunc channel = NULL;
     xmlParserCtxtPtr pctxt = NULL;
     void *data = NULL;
@@ -132,8 +137,9 @@
         channel = ctxt->error;
         data = ctxt->userData;
 	pctxt = ctxt->userData;
+	pctxt = ctxt->userData;
     }
-    __xmlRaiseError(channel, data, pctxt, node, XML_FROM_DTD, error,
+    __xmlRaiseError(schannel, channel, data, pctxt, node, XML_FROM_DTD, error,
                     XML_ERR_ERROR, NULL, 0,
                     (const char *) str1,
                     (const char *) str3,
@@ -156,6 +162,7 @@
                 const char *msg, const xmlChar * str1,
                 const xmlChar * str2, const xmlChar * str3)
 {
+    xmlStructuredErrorFunc schannel = NULL;
     xmlGenericErrorFunc channel = NULL;
     xmlParserCtxtPtr pctxt = NULL;
     void *data = NULL;
@@ -164,8 +171,9 @@
         channel = ctxt->error;
         data = ctxt->userData;
 	pctxt = ctxt->userData;
+	pctxt = ctxt->userData;
     }
-    __xmlRaiseError(channel, data, pctxt, node, XML_FROM_DTD, error,
+    __xmlRaiseError(schannel, channel, data, pctxt, node, XML_FROM_DTD, error,
                     XML_ERR_ERROR, NULL, 0,
                     (const char *) str1,
                     (const char *) str1,
@@ -188,6 +196,7 @@
                 const char *msg, const xmlChar * str1,
                 const xmlChar * str2, const xmlChar * str3)
 {
+    xmlStructuredErrorFunc schannel = NULL;
     xmlGenericErrorFunc channel = NULL;
     xmlParserCtxtPtr pctxt = NULL;
     void *data = NULL;
@@ -196,8 +205,9 @@
         channel = ctxt->error;
         data = ctxt->userData;
 	pctxt = ctxt->userData;
+	pctxt = ctxt->userData;
     }
-    __xmlRaiseError(channel, data, pctxt, node, XML_FROM_DTD, error,
+    __xmlRaiseError(schannel, channel, data, pctxt, node, XML_FROM_DTD, error,
                     XML_ERR_WARNING, NULL, 0,
                     (const char *) str1,
                     (const char *) str1,
diff --git a/xinclude.c b/xinclude.c
index 04d827f..c992b58 100644
--- a/xinclude.c
+++ b/xinclude.c
@@ -112,7 +112,7 @@
 {
     if (ctxt != NULL)
 	ctxt->nbErrors++;
-    __xmlRaiseError(NULL, NULL, ctxt, node, XML_FROM_XINCLUDE,
+    __xmlRaiseError(NULL, NULL, NULL, ctxt, node, XML_FROM_XINCLUDE,
                     XML_ERR_NO_MEMORY, XML_ERR_ERROR, NULL, 0,
 		    extra, NULL, NULL, 0, 0,
 		    "Memory allocation failed : %s\n", extra);
@@ -133,7 +133,7 @@
 {
     if (ctxt != NULL)
 	ctxt->nbErrors++;
-    __xmlRaiseError(NULL, NULL, ctxt, node, XML_FROM_XINCLUDE,
+    __xmlRaiseError(NULL, NULL, NULL, ctxt, node, XML_FROM_XINCLUDE,
                     error, XML_ERR_ERROR, NULL, 0,
 		    (const char *) extra, NULL, NULL, 0, 0,
 		    msg, (const char *) extra);
diff --git a/xmlIO.c b/xmlIO.c
index 6642a59..41a7d9c 100644
--- a/xmlIO.c
+++ b/xmlIO.c
@@ -350,6 +350,7 @@
 static void
 xmlLoaderErr(xmlParserCtxtPtr ctxt, const char *msg, const char *filename)
 {
+    xmlStructuredErrorFunc schannel = NULL;
     xmlGenericErrorFunc channel = NULL;
     void *data = NULL;
     xmlErrorLevel level = XML_ERR_ERROR;
@@ -362,9 +363,10 @@
 	    channel = ctxt->sax->warning;
 	    level = XML_ERR_WARNING;
 	}
+	schannel = ctxt->sax->serror;
 	data = ctxt->userData;
     }
-    __xmlRaiseError(channel, data, ctxt, NULL, XML_FROM_IO,
+    __xmlRaiseError(schannel, channel, data, ctxt, NULL, XML_FROM_IO,
                     XML_IO_LOAD_ERROR, level, NULL, 0,
 		    filename, NULL, NULL, 0, 0,
 		    msg, filename);
diff --git a/xmlregexp.c b/xmlregexp.c
index dd8e464..76635fe 100644
--- a/xmlregexp.c
+++ b/xmlregexp.c
@@ -331,7 +331,7 @@
         regexp = (const char *) ctxt->string;
 	ctxt->error = XML_ERR_NO_MEMORY;
     }
-    __xmlRaiseError(NULL, NULL, NULL, NULL, XML_FROM_REGEXP,
+    __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_REGEXP,
 		    XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, extra,
 		    regexp, NULL, 0, 0,
 		    "Memory allocation failed : %s\n", extra);
@@ -354,7 +354,7 @@
 	idx = ctxt->cur - ctxt->string;
 	ctxt->error = XML_REGEXP_COMPILE_ERROR;
     }
-    __xmlRaiseError(NULL, NULL, NULL, NULL, XML_FROM_REGEXP,
+    __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_REGEXP,
 		    XML_REGEXP_COMPILE_ERROR, XML_ERR_FATAL, NULL, 0, extra,
 		    regexp, NULL, idx, 0,
 		    "failed to compile: %s\n", extra);
diff --git a/xmlschemas.c b/xmlschemas.c
index 234c7e7..76c41af 100644
--- a/xmlschemas.c
+++ b/xmlschemas.c
@@ -65,6 +65,7 @@
     xmlSchemaValidityWarningFunc warning;       /* the callback in case of warning */
     xmlSchemaValidError err;
     int nberrors;
+    xmlStructuredErrorFunc serror;
 
     xmlSchemaPtr schema;        /* The schema in use */
     xmlChar *container;         /* the current element, group, ... */
@@ -106,6 +107,7 @@
     void *userData;             /* user specific data block */
     xmlSchemaValidityErrorFunc error;   /* the callback in case of errors */
     xmlSchemaValidityWarningFunc warning;       /* the callback in case of warning */
+    xmlStructuredErrorFunc serror;
 
     xmlSchemaPtr schema;        /* The schema in use */
     xmlDocPtr doc;
@@ -180,14 +182,16 @@
               const char *msg, const xmlChar * str1, const xmlChar * str2)
 {
     xmlGenericErrorFunc channel = NULL;
+    xmlStructuredErrorFunc schannel = NULL;
     void *data = NULL;
 
     if (ctxt != NULL) {
         ctxt->nberrors++;
         channel = ctxt->error;
         data = ctxt->userData;
+	schannel = ctxt->serror;
     }
-    __xmlRaiseError(channel, data, ctxt, node, XML_FROM_SCHEMASP,
+    __xmlRaiseError(schannel, channel, data, ctxt, node, XML_FROM_SCHEMASP,
                     error, XML_ERR_ERROR, NULL, 0,
                     (const char *) str1, (const char *) str2, NULL, 0, 0,
                     msg, str1, str2);
@@ -252,6 +256,7 @@
                const char *msg, const xmlChar *str1, const xmlChar *str2,
 	       const xmlChar *str3)
 {
+    xmlStructuredErrorFunc schannel = NULL;
     xmlGenericErrorFunc channel = NULL;
     void *data = NULL;
 
@@ -259,11 +264,12 @@
         ctxt->nberrors++;
 	ctxt->err = error;
         channel = ctxt->error;
+        schannel = ctxt->serror;
         data = ctxt->userData;
     }
     /* reajust to global error numbers */
     error += XML_SCHEMAV_NOROOT - XML_SCHEMAS_ERR_NOROOT;
-    __xmlRaiseError(channel, data, ctxt, node, XML_FROM_SCHEMASV,
+    __xmlRaiseError(schannel, channel, data, ctxt, node, XML_FROM_SCHEMASV,
                     error, XML_ERR_ERROR, NULL, 0,
                     (const char *) str1, (const char *) str2,
 		    (const char *) str3, 0, 0,
@@ -284,6 +290,7 @@
 xmlSchemaVErr(xmlSchemaValidCtxtPtr ctxt, xmlNodePtr node, int error,
               const char *msg, const xmlChar * str1, const xmlChar * str2)
 {
+    xmlStructuredErrorFunc schannel = NULL;
     xmlGenericErrorFunc channel = NULL;
     void *data = NULL;
 
@@ -292,10 +299,11 @@
 	ctxt->err = error;
         channel = ctxt->error;
         data = ctxt->userData;
+        schannel = ctxt->serror;
     }
     /* reajust to global error numbers */
     error += XML_SCHEMAV_NOROOT - XML_SCHEMAS_ERR_NOROOT;
-    __xmlRaiseError(channel, data, ctxt, node, XML_FROM_SCHEMASV,
+    __xmlRaiseError(schannel, channel, data, ctxt, node, XML_FROM_SCHEMASV,
                     error, XML_ERR_ERROR, NULL, 0,
                     (const char *) str1, (const char *) str2, NULL, 0, 0,
                     msg, str1, str2);
diff --git a/xpath.c b/xpath.c
index 1775c2e..90312db 100644
--- a/xpath.c
+++ b/xpath.c
@@ -230,13 +230,13 @@
 	    ctxt->error(ctxt->userData, &ctxt->lastError);
     } else {
         if (extra)
-            __xmlRaiseError(NULL, NULL,
+            __xmlRaiseError(NULL, NULL, NULL,
                             NULL, NULL, XML_FROM_XPATH,
                             XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0,
                             extra, NULL, NULL, 0, 0,
                             "Memory allocation failed : %s\n", extra);
         else
-            __xmlRaiseError(NULL, NULL,
+            __xmlRaiseError(NULL, NULL, NULL,
                             NULL, NULL, XML_FROM_XPATH,
                             XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0,
                             NULL, NULL, NULL, 0, 0,
@@ -278,7 +278,7 @@
     if (ctxt != NULL)
         ctxt->error = error;
     if ((ctxt == NULL) || (ctxt->context == NULL)) {
-	__xmlRaiseError(NULL, NULL,
+	__xmlRaiseError(NULL, NULL, NULL,
 			NULL, NULL, XML_FROM_XPATH,
 			error + XML_XPATH_EXPRESSION_OK - XPATH_EXPRESSION_OK,
 			XML_ERR_ERROR, NULL, 0,
@@ -297,7 +297,7 @@
 	ctxt->context->error(ctxt->context->userData,
 	                     &ctxt->context->lastError);
     } else {
-	__xmlRaiseError(NULL, NULL,
+	__xmlRaiseError(NULL, NULL, NULL,
 			NULL, ctxt->context->debugNode, XML_FROM_XPATH,
 			error + XML_XPATH_EXPRESSION_OK - XPATH_EXPRESSION_OK,
 			XML_ERR_ERROR, NULL, 0,
diff --git a/xpointer.c b/xpointer.c
index 3ef5acf..e215153 100644
--- a/xpointer.c
+++ b/xpointer.c
@@ -72,7 +72,7 @@
 static void
 xmlXPtrErrMemory(const char *extra)
 {
-    __xmlRaiseError(NULL, NULL, NULL, NULL, XML_FROM_XPOINTER,
+    __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_XPOINTER,
 		    XML_ERR_NO_MEMORY, XML_ERR_ERROR, NULL, 0, extra,
 		    NULL, NULL, 0, 0,
 		    "Memory allocation failed : %s\n", extra);
@@ -92,7 +92,7 @@
     if (ctxt != NULL)
         ctxt->error = error;
     if ((ctxt == NULL) || (ctxt->context == NULL)) {
-	__xmlRaiseError(NULL, NULL,
+	__xmlRaiseError(NULL, NULL, NULL,
 			NULL, NULL, XML_FROM_XPOINTER, error,
 			XML_ERR_ERROR, NULL, 0,
 			(const char *) extra, NULL, NULL, 0, 0,
@@ -109,7 +109,7 @@
 	ctxt->context->error(ctxt->context->userData,
 	                     &ctxt->context->lastError);
     } else {
-	__xmlRaiseError(NULL, NULL,
+	__xmlRaiseError(NULL, NULL, NULL,
 			NULL, ctxt->context->debugNode, XML_FROM_XPOINTER,
 			error, XML_ERR_ERROR, NULL, 0,
 			(const char *) extra, (const char *) ctxt->base, NULL,
