diff --git a/valid.c b/valid.c
index cbfa5e0..f29db62 100644
--- a/valid.c
+++ b/valid.c
@@ -1686,11 +1686,21 @@
  *				Refs					*
  *									*
  ************************************************************************/
-typedef struct xmlRemove_t 
+typedef struct xmlRemoveMemo_t 
 {
 	xmlListPtr l;
 	xmlAttrPtr ap;
-} xmlRemove;
+} xmlRemoveMemo;
+
+typedef xmlRemoveMemo *xmlRemoveMemoPtr;
+
+typedef struct xmlValidateMemo_t 
+{
+    xmlValidCtxtPtr ctxt;
+    const xmlChar *name;
+} xmlValidateMemo;
+
+typedef xmlValidateMemo *xmlValidateMemoPtr;
 
 /**
  * xmlCreateRefTable:
@@ -1744,8 +1754,8 @@
 xmlWalkRemoveRef(const void *data, const void *user)
 {
 	xmlAttrPtr attr0 = ((xmlRefPtr)data)->attr;
-	xmlAttrPtr attr1 = ((xmlRemove *)user)->ap;
-	xmlListPtr ref_list = ((xmlRemove *)user)->l;
+	xmlAttrPtr attr1 = ((xmlRemoveMemoPtr)user)->ap;
+	xmlListPtr ref_list = ((xmlRemoveMemoPtr)user)->l;
 
 	if (attr0 == attr1) { /* Matched: remove and terminate walk */
 		xmlListRemoveFirst(ref_list, (void *)data);
@@ -1895,7 +1905,7 @@
 	xmlListPtr ref_list;
 	xmlRefTablePtr table;
 	xmlChar *ID;
-	xmlRemove target;
+	xmlRemoveMemo target;
 
 	if (doc == NULL) return(-1);
 	if (attr == NULL) return(-1);
@@ -3667,9 +3677,15 @@
     return(ret);
 }
 
-
+/**
+ * xmlValidateRef:
+ * @ref:   A reference to be validated
+ * @ctxt:  Validation context
+ * @name:  Name of ID we are searching for
+ *
+ */
 void
-xmlValidateCheckRefCallback(xmlRefPtr ref, xmlValidCtxtPtr ctxt,
+xmlValidateRef(xmlRefPtr ref, xmlValidCtxtPtr ctxt,
 	                   const xmlChar *name) {
     xmlAttrPtr id;
     xmlAttrPtr attr;
@@ -3718,6 +3734,42 @@
 }
 
 /**
+ * xmlWalkValidateList:
+ * @data:  Contents of current link
+ * @user:  Value supplied by the user
+ *
+ * Return 0 to abort the walk or 1 to continue
+ */
+static int
+xmlWalkValidateList(const void *data, const void *user)
+{
+	xmlValidateMemoPtr memo = (xmlValidateMemoPtr)user;
+	xmlValidateRef((xmlRefPtr)data, memo->ctxt, memo->name);
+	return 1;
+}
+
+/**
+ * xmlValidateCheckRefCallback:
+ * @ref_list:  List of references
+ * @ctxt:  Validation context
+ * @name:  Name of ID we are searching for
+ *
+ */
+static void
+xmlValidateCheckRefCallback(xmlListPtr ref_list, xmlValidCtxtPtr ctxt,
+	                   const xmlChar *name) {
+    xmlValidateMemo memo;
+
+    if (ref_list == NULL)
+	return;
+    memo.ctxt = ctxt;
+    memo.name = name;
+
+    xmlListWalk(ref_list, xmlWalkValidateList, &memo);
+    
+}
+
+/**
  * xmlValidateDocumentFinal:
  * @ctxt:  the validation context
  * @doc:  a document instance
