diff --git a/Doc/perl/l2hinit.perl b/Doc/perl/l2hinit.perl
index 2164ace..cbf1e41 100644
--- a/Doc/perl/l2hinit.perl
+++ b/Doc/perl/l2hinit.perl
@@ -26,7 +26,7 @@
 $AUTO_NAVIGATION = 0;
 
 $BODYTEXT = '';
-$CHILDLINE = "\n<p><hr>\n";
+$CHILDLINE = "\n<p></p><hr />\n";
 $VERBOSITY = 0;
 
 # default # of columns for the indexes
@@ -104,6 +104,7 @@
     if ($title) {
         if ($title =~ /\<[aA] /) {
             $title =~ s/\<[aA] /<a class="sectref" rel="$linktype" /;
+            $title =~ s/ HREF=/ href=/;
         }
         else {
             $title = "<span class=\"sectref\">$title</span>";
@@ -138,7 +139,7 @@
     }
     my $iconserver = ($ICONSERVER eq '.') ? '' : "$ICONSERVER/";
     return "<img src='$iconserver$name.$IMAGE_TYPE'\n  border='0'"
-           . " height='32'  alt='$text' width='32'>";
+           . " height='32'  alt='$text' width='32' />";
 }
 
 sub unlinkify($) {
@@ -157,6 +158,7 @@
             $s =~ s/\<tex2html_[a-z_]+_visible_mark\>/$r/;
         }
         $s =~ s/<[aA] /<a rel="$rel" title="$title" \n  /;
+        $s =~ s/ HREF=/ href=/;
         return $s;
     }
     else {
@@ -202,7 +204,7 @@
     my $toc = add_real_child_links(@_);
     $toc =~ s|\s*</[aA]>|</a>|g;
     $toc =~ s/ NAME=\"tex2html\d+\"\s*href=/ href=/gi;
-    $toc =~ s|</UL>(\s*<BR>)?|</ul>|gi;
+    $toc =~ s|</UL>(\s*<BR( /)?>)?|</ul>|gi;
     return $toc;
 }
 
@@ -227,13 +229,13 @@
 sub top_navigation_panel() {
     return "\n"
            . make_nav_panel()
-           . "<br><hr>\n";
+           . "<br /><hr />\n";
 }
 
 sub bot_navigation_panel() {
-    return "\n<p><hr>\n"
+    return "\n<p></p><hr />\n"
            . make_nav_panel()
-           . "<hr>\n"
+           . "<hr />\n"
            . get_version_text()
            . "\n";
 }
@@ -409,8 +411,8 @@
     my($closures, $reopens) = preserve_open_tags();
     anchor_label('contents', $CURRENT_FILE, $_);	# this is added
     $MY_CONTENTS_PAGE = "$CURRENT_FILE";
-    join('', "<BR>\n\\tableofchildlinks[off]", $closures
-	 , make_section_heading($toc_title, 'H2'), $toc_mark
+    join('', "<br />\n\\tableofchildlinks[off]", $closures
+	 , make_section_heading($toc_title, 'h2'), $toc_mark
 	 , $reopens, $_);
 }
 # In addition to the standard stuff, add label to allow named node files.
@@ -420,8 +422,8 @@
     $loffile = $CURRENT_FILE;
     my($closures, $reopens) = preserve_open_tags();
     anchor_label('lof', $CURRENT_FILE, $_);		# this is added
-    join('', "<BR>\n", $closures
-	 , make_section_heading($lof_title, 'H2'), $lof_mark
+    join('', "<br />\n", $closures
+	 , make_section_heading($lof_title, 'h2'), $lof_mark
 	 , $reopens, $_);
 }
 # In addition to the standard stuff, add label to allow named node files.
@@ -431,8 +433,8 @@
     $lotfile = $CURRENT_FILE;
     my($closures, $reopens) = preserve_open_tags();
     anchor_label('lot', $CURRENT_FILE, $_);		# this is added
-    join('', "<BR>\n", $closures
-	 , make_section_heading($lot_title, 'H2'), $lot_mark
+    join('', "<br />\n", $closures
+	 , make_section_heading($lot_title, 'h2'), $lot_mark
 	 , $reopens, $_);
 }
 # In addition to the standard stuff, add label to allow named node files.
@@ -473,7 +475,7 @@
     my $heading = make_section_heading($idx_title, 'h2') . $idx_mark;
     my($pre, $post) = minimize_open_tags($heading);
     anchor_label('genindex',$CURRENT_FILE,$_);		# this is added
-    return "<br>\n" . $pre . $_;
+    return "<br />\n" . $pre . $_;
 }
 
 $MODULE_INDEX_FILE = '';
@@ -484,7 +486,7 @@
     $TITLE = $idx_module_title;
     anchor_label('modindex', $CURRENT_FILE, $_);
     $MODULE_INDEX_FILE = "$CURRENT_FILE";
-    $_ = ('<p>' . make_section_heading($idx_module_title, 'h2')
+    $_ = ('<p></p>' . make_section_heading($idx_module_title, 'h2')
           . $idx_module_mark . $_);
     return $_;
 }
@@ -624,7 +626,7 @@
     $title = &purify($title,1);
     eval("\$title = ". $default_title ) unless ($title);
 
-    # allow user-modification of the <TITLE> tag; thanks Dan Young
+    # allow user-modification of the <title> tag; thanks Dan Young
     if (defined &custom_TITLE_hook) {
 	$title = &custom_TITLE_hook($title, $toc_sec_title);
     }
@@ -640,30 +642,31 @@
         $MY_PARTIAL_HEADER = join('',
             ($DOCTYPE ? $DTDcomment : ''),
             "<html>\n<head>",
-            ($BASE ? "\n<base href=\"$BASE\">" : ''),
-            "\n<link rel=\"STYLESHEET\" href=\"$STYLESHEET\" type='text/css'>",
+            ($BASE ? "\n<base href=\"$BASE\" />" : ''),
+            "\n<link rel=\"STYLESHEET\" href=\"$STYLESHEET\" type='text/css'",
+            " />",
             ($FAVORITES_ICON
-             ? ("\n<link rel=\"SHORTCUT ICON\" href=\"" . "$FAVORITES_ICON\">")
+             ? ("\n<link rel=\"SHORTCUT ICON\" href=\"$FAVORITES_ICON\" />")
              : ''),
             ($EXTERNAL_UP_LINK
              ? ("\n<link rel='start' href='" . $EXTERNAL_UP_LINK
                 . ($EXTERNAL_UP_TITLE ?
-                   "' title='$EXTERNAL_UP_TITLE'>" : "'>"))
+                   "' title='$EXTERNAL_UP_TITLE' />" : "' />"))
              : ''),
             "\n<link rel=\"first\" href=\"$FILE.html\"",
             ($t_title ? " title='$t_title'" : ''),
-            '>',
+            ' />',
             ($HAVE_TABLE_OF_CONTENTS
              ? ("\n<link rel='contents' href='$MY_CONTENTS_PAGE'"
-                . ' title="Contents">')
+                . ' title="Contents" />')
              : ''),
             ($HAVE_GENERAL_INDEX
-             ? "\n<link rel='index' href='genindex.html' title='Index'>"
+             ? "\n<link rel='index' href='genindex.html' title='Index' />"
              : ''),
             # disable for now -- Mozilla doesn't do well with multiple indexes
             # ($HAVE_MODULE_INDEX
-            #  ? '<link rel="index" href="modindex.html" title="Module Index">'
-            #    . "\n"
+            #  ? '<link rel="index" href="modindex.html" title="Module Index"'
+            #    . " />\n"
             #  : ''),
             ($INFO
              # XXX We can do this with the Python tools since the About...
@@ -671,18 +674,18 @@
              # generated node###.html page names.  Won't work with the
              # rest of the Python doc tools.
              ? ("\n<link rel='last' href='about.html'"
-                . " title='About this document...'>"
+                . " title='About this document...' />"
                 . "\n<link rel='help' href='about.html'"
-                . " title='About this document...'>")
+                . " title='About this document...' />")
              : ''),
             $more_links_mark,
             "\n",
             ($CHARSET && $HTML_VERSION ge "2.1"
              ? ('<meta http-equiv="Content-Type" content="text/html; '
-                . "charset=$CHARSET\">\n")
+                . "charset=$CHARSET\" />\n")
              : ''),
             ($AESOP_META_TYPE
-             ? "<meta name='aesop' content='$AESOP_META_TYPE'>\n" : ''));
+             ? "<meta name='aesop' content='$AESOP_META_TYPE' />\n" : ''));
     }
     if (!$charset && $CHARSET) {
         $charset = $CHARSET;
@@ -692,11 +695,20 @@
     # <meta name='description' ...> element in the document head.
     my $metatitle = "$title";
     $metatitle =~ s/^\d+(\.\d+)*\s*//;
+    $metatitle = meta_information($metatitle);
+    $metatitle =~ s/ NAME=/ name=/g;
+    $metatitle =~ s/ CONTENT=/ content=/g;
 
     join('',
          $MY_PARTIAL_HEADER,
-         &meta_information($metatitle),
+         $metatitle,
          "<title>", $title, "</title>\n</head>\n<body$body>");
 }
 
+sub replace_morelinks {
+    $more_links =~ s/ REL=/ rel=/g;
+    $more_links =~ s/ HREF=/ href=/g;
+    $_ =~ s/$more_links_mark/$more_links/e;
+}
+
 1;	# This must be the last line
diff --git a/Doc/perl/python.perl b/Doc/perl/python.perl
index 7d50e49..1f380cb 100644
--- a/Doc/perl/python.perl
+++ b/Doc/perl/python.perl
@@ -51,7 +51,7 @@
                    ? " width=\"$OFF_SITE_LINK_ICON_WIDTH\""
                    : '')
                 . " alt=\"[off-site link]\"\n"
-                . "  >");
+                . "  />");
     }
     return '';
 }
@@ -345,8 +345,8 @@
     # Save the reference
     my $nstr = gen_index_id("Python Enhancement Proposals!PEP $rfcnumber", '');
     $index{$nstr} .= make_half_href("$CURRENT_FILE#$id");
-    return ("<a class=\"rfc\" name=\"$id\"\nhref=\"$href\">PEP $rfcnumber"
-            . "$icon</a>" . $_);
+    return ("<a class=\"rfc\" name=\"$id\" id='$id'\n"
+            . "href=\"$href\">PEP $rfcnumber$icon</a>" . $_);
 }
 
 sub do_cmd_rfc{
@@ -358,8 +358,8 @@
     # Save the reference
     my $nstr = gen_index_id("RFC!RFC $rfcnumber", '');
     $index{$nstr} .= make_half_href("$CURRENT_FILE#$id");
-    return ("<a class=\"rfc\" name=\"$id\"\nhref=\"$href\">RFC $rfcnumber"
-            . "$icon</a>" . $_);
+    return ("<a class=\"rfc\" name=\"$id\" id='$id'\nhref=\"$href\">"
+            . "RFC $rfcnumber$icon</a>" . $_);
 }
 
 sub do_cmd_ulink{
@@ -394,7 +394,7 @@
     my $reason = next_argument();
     return ('<div class="versionnote">'
             . "<b>Deprecated since release $release.</b>"
-            . "\n$reason</div><p>"
+            . "\n$reason</div><p></p>"
             . $_);
 }
 
@@ -512,7 +512,7 @@
 
 sub new_link_info(){
     my $name = "l2h-" . ++$globals{'max_id'};
-    my $aname = "<a name=\"$name\">";
+    my $aname = "<a name=\"$name\" id='$name'>";
     my $ahref = gen_link($CURRENT_FILE, $name);
     return ($name, $aname, $ahref);
 }
@@ -810,7 +810,8 @@
     }
     $TokenToTargetMapping{"$CURRENT_GRAMMAR:$token"} = $target;
     return ("<tr valign=\"baseline\">\n"
-            . "    <td><code><a name=\"tok-$token\">$token</a></code></td>\n"
+            . "    <td><code><a name=\"tok-$token\" id='tok-$token'>"
+            . "$token</a></code></td>\n"
             . "    <td>&nbsp;::=&nbsp;</td>\n"
             . "    <td><code>"
             . translate_commands($defn)
@@ -962,10 +963,10 @@
                    . "\n  <span class=\"value\">$rcinfo.</span>"
                    . "\n</div>");
     }
-    return "<dl><dt>$siginfo\n<dd>"
+    return "<dl><dt>$siginfo</dt>\n<dd>"
            . $rcinfo
            . $_
-           . '</dl>';
+           . '</dd></dl>';
 }
 
 sub do_cmd_cmemberline{
@@ -976,7 +977,7 @@
     my $idx = make_str_index_entry("<tt class=\"cmember\">$name</tt>"
                                    . " ($container member)");
     $idx =~ s/ \(.*\)//;
-    return "<dt>$type <b>$idx</b>\n<dd>"
+    return "<dt>$type <b>$idx</b></dt>\n<dd>"
            . $_;
 }
 sub do_env_cmemberdesc{
@@ -987,7 +988,7 @@
     my $idx = make_str_index_entry("<tt class=\"cmember\">$name</tt>"
                                    . " ($container member)");
     $idx =~ s/ \(.*\)//;
-    return "<dl><dt>$type <b>$idx</b>\n<dd>"
+    return "<dl><dt>$type <b>$idx</b></dt>\n<dd>"
            . $_
            . '</dl>';
 }
@@ -996,7 +997,7 @@
     local($_) = @_;
     my $name = next_argument();
     my $idx = make_str_index_entry("<tt class=\"macro\">$name</tt>");
-    return "<dl><dt><b>$idx</b>\n<dd>"
+    return "<dl><dt><b>$idx</b></dt>\n<dd>"
            . $_
            . '</dl>'
 }
@@ -1009,7 +1010,8 @@
       unless $index_name;
     my($name, $aname, $ahref) = new_link_info();
     add_index_entry("<tt class=\"ctype\">$index_name</tt> (C type)", $ahref);
-    return "<dl><dt><b><tt class=\"ctype\">$aname$type_name</a></tt></b>\n<dd>"
+    return "<dl><dt><b><tt class=\"ctype\">$aname$type_name</a></tt></b></dt>"
+           . "\n<dd>"
            . $_
            . '</dl>'
 }
@@ -1021,10 +1023,10 @@
     my $idx = make_str_index_entry("<tt class=\"cdata\">$var_name</tt>"
 				   . get_indexsubitem());
     $idx =~ s/ \(.*\)//;
-    return "<dl><dt>$var_type <b>$idx</b>\n"
+    return "<dl><dt>$var_type <b>$idx</b></dt>\n"
            . '<dd>'
            . $_
-           . '</dl>';
+           . '</dd></dl>';
 }
 
 sub convert_args($){
@@ -1038,7 +1040,7 @@
     return (($first ? '<dl>' : '')
             . '<dt><table cellpadding="0" cellspacing="0"><tr valign="baseline">'
             . "\n  <td><nobr><b>$idxitem</b>(</nobr></td>"
-            . "\n  <td><var>$arglist</var>)</td></tr></table>\n<dd>");
+            . "\n  <td><var>$arglist</var>)</td></tr></table></dt>\n<dd>");
 }
 
 sub do_env_funcdesc{
@@ -1104,7 +1106,7 @@
     if ($arg_list) {
 	$stuff .= "&nbsp;&nbsp;&nbsp;&nbsp;<var>$arg_list</var>";
     }
-    return $stuff . "\n<dd>" . $_ . '</dl>';
+    return $stuff . "</dt>\n<dd>" . $_ . '</dt></dl>';
 }
 
 sub do_env_datadesc{
@@ -1112,9 +1114,9 @@
     my $dataname = next_argument();
     my $idx = make_str_index_entry("<tt>$dataname</tt>" . get_indexsubitem());
     $idx =~ s/ \(.*\)//;
-    return "<dl><dt><b>$idx</b>\n<dd>"
+    return "<dl><dt><b>$idx</b></dt>\n<dd>"
            . $_
-	   . '</dl>';
+	   . '</dd></dl>';
 }
 
 sub do_env_datadescni{
@@ -1123,7 +1125,7 @@
     if (! $STRING_INDEX_TT) {
 	$idx = "<tt>$idx</tt>";
     }
-    return "<dl><dt><b>$idx</b>\n<dd>" . $_ . '</dl>';
+    return "<dl><dt><b>$idx</b></dt>\n<dd>" . $_ . '</dd></dl>';
 }
 
 sub do_cmd_dataline{
@@ -1131,23 +1133,23 @@
     my $data_name = next_argument();
     my $idx = make_str_index_entry("<tt>$data_name</tt>" . get_indexsubitem());
     $idx =~ s/ \(.*\)//;
-    return "<dt><b>$idx</b><dd>" . $_;
+    return "<dt><b>$idx</b></dt><dd>" . $_;
 }
 
 sub do_cmd_datalineni{
     local($_) = @_;
     my $data_name = next_argument();
-    return "<dt><b><tt>$data_name</tt></b><dd>" . $_;
+    return "<dt><b><tt>$data_name</tt></b></dt><dd>" . $_;
 }
 
 sub do_env_excdesc{
     local($_) = @_;
     my $excname = next_argument();
     my $idx = make_str_index_entry("<tt class=\"exception\">$excname</tt>");
-    return ("<dl><dt><b>${TLSTART}exception$TLEND$idx</b>"
+    return ("<dl><dt><b>${TLSTART}exception$TLEND$idx</b></dt>"
             . "\n<dd>"
             . $_
-            . '</dl>');
+            . '</dd></dl>');
 }
 
 sub do_env_fulllineitems{ return do_env_itemize(@_); }
@@ -1251,7 +1253,7 @@
     my $idx = make_str_index_entry("<tt class=\"member\">$member</tt>$extra");
     $idx =~ s/ \(.*\)//;
     $idx =~ s/\(\)//;
-    return "<dl><dt><b>$idx</b>\n<dd>" . $_ . '</dl>';
+    return "<dl><dt><b>$idx</b></dt>\n<dd>" . $_ . '</dl>';
 }
 
 
@@ -1267,7 +1269,7 @@
     my $idx = make_str_index_entry("<tt class=\"member\">$member</tt>$extra");
     $idx =~ s/ \(.*\)//;
     $idx =~ s/\(\)//;
-    return "<dt><b>$idx</b><dd>" . $_;
+    return "<dt><b>$idx</b></dt><dd>" . $_;
 }
 
 
@@ -1275,9 +1277,9 @@
     local($_) = @_;
     next_optional_argument();
     my $member = next_argument();
-    return "<dl><dt><b><tt class=\"member\">$member</tt></b>\n<dd>"
+    return "<dl><dt><b><tt class=\"member\">$member</tt></b></dt>\n<dd>"
            . $_
-           . '</dl>';
+           . '</dd></dl>';
 }
 
 
@@ -1285,7 +1287,7 @@
     local($_) = @_;
     next_optional_argument();
     my $member = next_argument();
-    return "<dt><b><tt class=\"member\">$member</tt></b><dd>" . $_;
+    return "<dt><b><tt class=\"member\">$member</tt></b></dt>\n<dd>" . $_;
 }
 
 
@@ -1635,7 +1637,7 @@
 	$the_title .= "\n<p>";
 	if ($PACKAGE_VERSION) {
 	    $the_title .= ('<strong>Release '
-                           . "$PACKAGE_VERSION$RELEASE_INFO</strong><br>\n");
+                           . "$PACKAGE_VERSION$RELEASE_INFO</strong><br />\n");
         }
 	$the_title .= "<strong>$t_date</strong></p>"
     }
@@ -1643,7 +1645,7 @@
 	$the_title .= "\n<p>$t_address</p>";
     }
     else {
-        $the_title .= "\n<p>";
+        $the_title .= "\n<p></p>";
     }
     if ($t_email) {
 	$the_title .= "\n<p>$t_email</p>";
@@ -1661,7 +1663,7 @@
       if ($TITLE_PAGE_GRAPHIC_WIDTH);
     $graphic .= " height=\"$TITLE_PAGE_GRAPHIC_HEIGHT\""
       if ($TITLE_PAGE_GRAPHIC_HEIGHT);
-    $graphic .= "\n  src=\"$filename\"></td>\n";
+    $graphic .= "\n  src=\"$filename\" /></td>\n";
     return $graphic;
 }
 
@@ -1669,14 +1671,14 @@
     local($_) = @_;
     my $the_title = "\n";
     if ($EXTERNAL_UP_LINK) {
-        # This generates a <LINK> element in the wrong place (the
+        # This generates a <link> element in the wrong place (the
         # body), but I don't see any other way to get this generated
         # at all.  Browsers like Mozilla, that support navigation
         # links, can make use of this.
         $the_title .= ("<link rel='up' href='$EXTERNAL_UP_LINK'"
                        . ($EXTERNAL_UP_TITLE
                           ? " title='$EXTERNAL_UP_TITLE'" : '')
-                       . ">\n");
+                       . " />\n");
     }
     $the_title .= '<div class="titlepage">';
     if ($TITLE_PAGE_GRAPHIC) {
@@ -1897,14 +1899,14 @@
         my $icon = get_link_icon($url);
         return '<dl compact class="seetitle">'
           . "\n    <dt><em class=\"citetitle\"><a href=\"$url\""
-          . "\n        >$title$icon</a></em>"
-          . "\n    <dd>$text\n  </dl>"
+          . "\n        >$title$icon</a></em></dt>"
+          . "\n    <dd>$text</dd>\n  </dl>"
           . $_;
     }
     return '<dl compact class="seetitle">'
       . "\n    <dt><em class=\"citetitle\""
-      . "\n        >$title</em>"
-      . "\n    <dd>$text\n  </dl>"
+      . "\n        >$title</em></dt>"
+      . "\n    <dd>$text</dd>\n  </dl>"
       . $_;
 }
 
@@ -1915,15 +1917,15 @@
     my $icon = get_link_icon($url);
     return '<dl compact class="seeurl">'
       . "\n    <dt><a href=\"$url\""
-      . "\n        class=\"url\">$url$icon</a>"
-      . "\n    <dd>$text\n  </dl>"
+      . "\n        class=\"url\">$url$icon</a></dt>"
+      . "\n    <dd>$text</dd>\n  </dl>"
       . $_;
 }
 
 sub do_cmd_seetext{
     local($_) = @_;
     my $content = next_argument();
-    return '<div class="seetext"><p>' . $content . '</div>' . $_;
+    return '<div class="seetext"><p>' . $content . '</p></div>' . $_;
 }
 
 
@@ -1932,7 +1934,7 @@
 #
 
 sub do_env_definitions{
-    return "<dl class=\"definitions\">" . $_[0] . "</dl>\n";
+    return '<dl class="definitions">' . $_[0] . "</dl>\n";
 }
 
 sub do_cmd_term{
@@ -1940,7 +1942,7 @@
     my $term = next_argument();
     my($name, $aname, $ahref) = new_link_info();
     # could easily add an index entry here...
-    return "<dt><b>$aname" . $term . "</a></b>\n<dd>" . $_;
+    return "<dt><b>$aname" . $term . "</a></b></dt>\n<dd>" . $_;
 }
 
 
