diff --git a/ChangeLog b/ChangeLog
index 522015d..0fbc0eb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Thu Feb 27 22:28:40 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+	* check-xsddata-test-suite.py: give more infos
+	* relaxng.c: fix a bug reported by Sebastian Rahtz and
+	  REF->DEF in attribute values.
+
 Thu Feb 27 21:09:32 CET 2003 Daniel Veillard <daniel@veillard.com>
 
 	* check-xsddata-test-suite.py test/xsdtest/xsdtest.xml
diff --git a/check-xsddata-test-suite.py b/check-xsddata-test-suite.py
index b0c63e1..ffe944a 100755
--- a/check-xsddata-test-suite.py
+++ b/check-xsddata-test-suite.py
@@ -293,13 +293,12 @@
 def handle_testSuite(node, level = 0):
     global nb_schemas_tests, nb_schemas_success, nb_schemas_failed
     global nb_instances_tests, nb_instances_success, nb_instances_failed
-    if level >= 1:
-	old_schemas_tests = nb_schemas_tests
-	old_schemas_success = nb_schemas_success
-	old_schemas_failed = nb_schemas_failed
-	old_instances_tests = nb_instances_tests
-	old_instances_success = nb_instances_success
-	old_instances_failed = nb_instances_failed
+    old_schemas_tests = nb_schemas_tests
+    old_schemas_success = nb_schemas_success
+    old_schemas_failed = nb_schemas_failed
+    old_instances_tests = nb_instances_tests
+    old_instances_success = nb_instances_success
+    old_instances_failed = nb_instances_failed
 
     docs = node.xpathEval('documentation')
     authors = node.xpathEval('author')
@@ -312,33 +311,22 @@
 	    for author in authors:
 	        msg = msg + author.content + " "
 	print msg
-    sections = node.xpathEval('section')
-    if sections != [] and level <= 0:
-        msg = ""
-        for section in sections:
-	    msg = msg + section.content + " "
-        print "Tests for section %s" % (msg)
     for test in node.xpathEval('testCase'):
         handle_testCase(test)
     for test in node.xpathEval('testSuite'):
         handle_testSuite(test, level + 1)
 	        
-
-    if level >= 1 and sections != []:
-        msg = ""
-        for section in sections:
-	    msg = msg + section.content + " "
-        print "Result of tests for section %s" % (msg)
-        if nb_schemas_tests != old_schemas_tests:
-	    print "found %d test schemas: %d success %d failures" % (
-		  nb_schemas_tests - old_schemas_tests,
-		  nb_schemas_success - old_schemas_success,
-		  nb_schemas_failed - old_schemas_failed)
-	if nb_instances_tests != old_instances_tests:
-	    print "found %d test instances: %d success %d failures" % (
-		  nb_instances_tests - old_instances_tests,
-		  nb_instances_success - old_instances_success,
-		  nb_instances_failed - old_instances_failed)
+    print "Result of tests for %s" % (node.xpathEval('string(documentation)'))
+    if nb_schemas_tests != old_schemas_tests:
+	print "found %d test schemas: %d success %d failures" % (
+	      nb_schemas_tests - old_schemas_tests,
+	      nb_schemas_success - old_schemas_success,
+	      nb_schemas_failed - old_schemas_failed)
+    if nb_instances_tests != old_instances_tests:
+	print "found %d test instances: %d success %d failures" % (
+	      nb_instances_tests - old_instances_tests,
+	      nb_instances_success - old_instances_success,
+	      nb_instances_failed - old_instances_failed)
 #
 # Parse the conf file
 #
diff --git a/relaxng.c b/relaxng.c
index ff11f3e..018c1c7 100644
--- a/relaxng.c
+++ b/relaxng.c
@@ -4370,12 +4370,6 @@
 		"Found forbidden pattern list//ref\n");
 		ctxt->nbErrors++;
 	    }
-	    if (flags & XML_RELAXNG_IN_ATTRIBUTE) {
-		if (ctxt->error != NULL)
-		    ctxt->error(ctxt->userData,
-			"Found forbidden pattern attribute//ref\n");
-		ctxt->nbErrors++;
-	    }
 	    if (flags & XML_RELAXNG_IN_DATAEXCEPT) {
 		if (ctxt->error != NULL)
 		    ctxt->error(ctxt->userData,
@@ -4415,6 +4409,12 @@
 		"Found forbidden pattern attribute//element(ref)\n");
 		ctxt->nbErrors++;
 	    }
+	    if (flags & XML_RELAXNG_IN_ATTRIBUTE) {
+		if (ctxt->error != NULL)
+		    ctxt->error(ctxt->userData,
+			"Found forbidden pattern attribute//element(ref)\n");
+		ctxt->nbErrors++;
+	    }
 	    /*
 	     * reset since in the simple form elements are only child
 	     * of grammar/define
@@ -6258,6 +6258,7 @@
 	    }
 	    break;
 	}
+        case XML_RELAXNG_DEF:
         case XML_RELAXNG_GROUP: {
 	    xmlRelaxNGDefinePtr list;
 
@@ -6273,6 +6274,10 @@
 	    }
 	    break;
 	}
+        case XML_RELAXNG_REF:
+        case XML_RELAXNG_PARENTREF:
+	    ret = xmlRelaxNGValidateValue(ctxt, define->content);
+	    break;
 	default:
 	    TODO
 	    ret = -1;
