diff --git a/ChangeLog b/ChangeLog
index fe932ad..800d971 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Wed Jun 20 15:38:59 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+	* valid.c: fixed a bug found when post validating an entity ref
+	* xmllint.c: added --loaddtd and sligly changed --postvalid to
+	  activate it too
+
 Tue Jun 19 20:03:40 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
 
 	* tree.c xinclude.c xpointer.c: bug #56402 exposed a number of
diff --git a/valid.c b/valid.c
index e9049e0..217fd45 100644
--- a/valid.c
+++ b/valid.c
@@ -4205,6 +4205,13 @@
 
     CHECK_DTD;
 
+    /*
+     * Entities references have to be handled separately
+     */
+    if (elem->type == XML_ENTITY_REF_NODE) {
+	return(1);
+    }
+
     ret &= xmlValidateOneElement(ctxt, doc, elem);
     attr = elem->properties;
     while(attr != NULL) {
diff --git a/xmllint.c b/xmllint.c
index e159ec6..aff1a04 100644
--- a/xmllint.c
+++ b/xmllint.c
@@ -94,6 +94,7 @@
 #ifdef LIBXML_XINCLUDE_ENABLED
 static int xinclude = 0;
 #endif
+static int loaddtd = 0;
 static int progresult = 0;
 static int timing = 0;
 static int generate = 0;
@@ -752,13 +753,70 @@
     }
 }
 
+/************************************************************************
+ * 									*
+ * 			Usage and Main					*
+ * 									*
+ ************************************************************************/
+
+static void usage(const char *name) {
+    printf("Usage : %s [options] XMLfiles ...\n", name);
+    printf("\tParse the XML files and output the result of the parsing\n");
+    printf("\t--version : display the version of the XML library used\n");
+#ifdef LIBXML_DEBUG_ENABLED
+    printf("\t--debug : dump a debug tree of the in-memory document\n");
+    printf("\t--shell : run a navigating shell\n");
+    printf("\t--debugent : debug the entities defined in the document\n");
+#endif
+    printf("\t--copy : used to test the internal copy implementation\n");
+    printf("\t--recover : output what was parsable on broken XML documents\n");
+    printf("\t--noent : substitute entity references by their value\n");
+    printf("\t--noout : don't output the result tree\n");
+    printf("\t--htmlout : output results as HTML\n");
+    printf("\t--nowarp : do not put HTML doc wrapper\n");
+    printf("\t--valid : validate the document in addition to std well-formed check\n");
+    printf("\t--postvalid : do a posteriori validation, i.e after parsing\n");
+    printf("\t--dtdvalid URL : do a posteriori validation against a given DTD\n");
+    printf("\t--timing : print some timings\n");
+    printf("\t--repeat : repeat 100 times, for timing or profiling\n");
+    printf("\t--insert : ad-hoc test for valid insertions\n");
+    printf("\t--compress : turn on gzip compression of output\n");
+#ifdef LIBXML_HTML_ENABLED
+    printf("\t--html : use the HTML parser\n");
+#endif
+    printf("\t--push : use the push mode of the parser\n");
+#ifdef HAVE_SYS_MMAN_H
+    printf("\t--memory : parse from memory\n");
+#endif
+    printf("\t--nowarning : do not emit warnings from parser/validator\n");
+    printf("\t--noblanks : drop (ignorable?) blanks spaces\n");
+    printf("\t--testIO : test user I/O support\n");
+    printf("\t--encode encoding : output in the given encoding\n");
+#ifdef LIBXML_CATALOG_ENABLED
+    printf("\t--catalogs : use the catalogs from $SGML_CATALOG_FILES\n");
+#endif
+    printf("\t--auto : generate a small doc on the fly\n");
+#ifdef LIBXML_XINCLUDE_ENABLED
+    printf("\t--xinclude : do XInclude processing\n");
+    printf("\t--loaddtd : fetch external Dtd\n");
+#endif
+}
 int
 main(int argc, char **argv) {
     int i, count;
     int files = 0;
 
+    if (argc <= 1) {
+	usage(argv[0]);
+	return(1);
+    }
     LIBXML_TEST_VERSION
     for (i = 1; i < argc ; i++) {
+	if (!strcmp(argv[i], "-"))
+	    break;
+
+	if (argv[i][0] != '-')
+	    continue;
 #ifdef LIBXML_DEBUG_ENABLED
 	if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug")))
 	    debug++;
@@ -795,16 +853,21 @@
 	else if ((!strcmp(argv[i], "-nowrap")) ||
 	         (!strcmp(argv[i], "--nowrap")))
 	    nowrap++;
+	else if ((!strcmp(argv[i], "-loaddtd")) ||
+	         (!strcmp(argv[i], "--loaddtd")))
+	    loaddtd++;
 	else if ((!strcmp(argv[i], "-valid")) ||
 	         (!strcmp(argv[i], "--valid")))
 	    valid++;
 	else if ((!strcmp(argv[i], "-postvalid")) ||
-	         (!strcmp(argv[i], "--postvalid")))
+	         (!strcmp(argv[i], "--postvalid"))) {
 	    postvalid++;
-	else if ((!strcmp(argv[i], "-dtdvalid")) ||
+	    loaddtd++;
+	} else if ((!strcmp(argv[i], "-dtdvalid")) ||
 	         (!strcmp(argv[i], "--dtdvalid"))) {
 	    i++;
 	    dtdvalid = argv[i];
+	    loaddtd++;
         }
 	else if ((!strcmp(argv[i], "-insert")) ||
 	         (!strcmp(argv[i], "--insert")))
@@ -882,8 +945,13 @@
 	         (!strcmp(argv[i], "--noblanks"))) {
 	     noblanks++;
 	     xmlKeepBlanksDefault(0);
-        }
+	} else {
+	    fprintf(stderr, "Unknown option %s\n", argv[i]);
+	    usage(argv[0]);
+	    return(1);
+	}
     }
+    if (loaddtd != 0) xmlLoadExtDtdDefaultValue = 6; /* fetch DTDs by default */
     if (noent != 0) xmlSubstituteEntitiesDefault(1);
     if (valid != 0) xmlDoValidityCheckingDefaultValue = 1;
     if ((htmlout) && (!nowrap)) {
@@ -935,46 +1003,7 @@
 	xmlGenericError(xmlGenericErrorContext, "</body></html>\n");
     }
     if ((files == 0) && (!generate)) {
-	printf("Usage : %s [options] XMLfiles ...\n",
-	       argv[0]);
-	printf("\tParse the XML files and output the result of the parsing\n");
-	printf("\t--version : display the version of the XML library used\n");
-#ifdef LIBXML_DEBUG_ENABLED
-	printf("\t--debug : dump a debug tree of the in-memory document\n");
-	printf("\t--shell : run a navigating shell\n");
-	printf("\t--debugent : debug the entities defined in the document\n");
-#endif
-	printf("\t--copy : used to test the internal copy implementation\n");
-	printf("\t--recover : output what was parsable on broken XML documents\n");
-	printf("\t--noent : substitute entity references by their value\n");
-	printf("\t--noout : don't output the result tree\n");
-	printf("\t--htmlout : output results as HTML\n");
-	printf("\t--nowarp : do not put HTML doc wrapper\n");
-	printf("\t--valid : validate the document in addition to std well-formed check\n");
-	printf("\t--postvalid : do a posteriori validation, i.e after parsing\n");
-	printf("\t--dtdvalid URL : do a posteriori validation against a given DTD\n");
-	printf("\t--timing : print some timings\n");
-	printf("\t--repeat : repeat 100 times, for timing or profiling\n");
-	printf("\t--insert : ad-hoc test for valid insertions\n");
-	printf("\t--compress : turn on gzip compression of output\n");
-#ifdef LIBXML_HTML_ENABLED
-	printf("\t--html : use the HTML parser\n");
-#endif
-	printf("\t--push : use the push mode of the parser\n");
-#ifdef HAVE_SYS_MMAN_H
-	printf("\t--memory : parse from memory\n");
-#endif
-	printf("\t--nowarning : do not emit warnings from parser/validator\n");
-	printf("\t--noblanks : drop (ignorable?) blanks spaces\n");
-	printf("\t--testIO : test user I/O support\n");
-	printf("\t--encode encoding : output in the given encoding\n");
-#ifdef LIBXML_CATALOG_ENABLED
-	printf("\t--catalogs : use the catalogs from $SGML_CATALOG_FILES\n");
-#endif
-	printf("\t--auto : generate a small doc on the fly\n");
-#ifdef LIBXML_XINCLUDE_ENABLED
-	printf("\t--xinclude : do XInclude processing\n");
-#endif
+	usage(argv[0]);
     }
     xmlCleanupParser();
     xmlMemoryDump();
