diff --git a/Doc/perl/python.perl b/Doc/perl/python.perl
index 5c31e80..f457715 100644
--- a/Doc/perl/python.perl
+++ b/Doc/perl/python.perl
@@ -238,6 +238,23 @@
     return "<span class='manpage'><i>$page</i>($section)</span>" . $_;
 }
 
+sub get_pep_url{
+    my $rfcnum = sprintf("%04d", @_[0]);
+    return "http://python.sourceforge.net/peps/pep-$rfcnum.html";
+}
+
+sub do_cmd_pep{
+    local($_) = @_;
+    my $rfcnumber = next_argument();
+    my $id = "rfcref-" . ++$global{'max_id'};
+    my $href = get_pep_url($rfcnumber);
+    # 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</a>"
+            . $_);
+}
+
 sub get_rfc_url{
     my $rfcnum = sprintf("%04d", @_[0]);
     return "http://www.ietf.org/rfc/rfc$rfcnum.txt";
@@ -814,16 +831,24 @@
 sub do_env_fulllineitems{ return do_env_itemize(@_); }
 
 
-sub do_env_classdesc{
-    local($_) = @_;
+sub handle_classlike_descriptor{
+    local($_, $what) = @_;
     $THIS_CLASS = next_argument();
     my $arg_list = next_argument();
     $idx = make_str_index_entry(
-		"<tt class='class'>$THIS_CLASS</tt> (class in $THIS_MODULE)" );
+		"<tt class='$what'>$THIS_CLASS</tt> ($what in $THIS_MODULE)" );
     $idx =~ s/ \(.*\)//;
     return "<dl><dt><b>$idx</b> (<var>$arg_list</var>)\n<dd>" . $_ . '</dl>';
 }
 
+sub do_env_classdesc{
+    return handle_classlike_descriptor(@_[0], "class");
+}
+
+sub do_env_excclassdesc{
+    return handle_classlike_descriptor(@_[0], "exception");
+}
+
 
 sub do_env_methoddesc{
     local($_) = @_;
@@ -1269,18 +1294,18 @@
     return $id;
 }
 
-%ModuleSynopses = ('chapter' => 'SynopsisTable instance');
+# 'chapter' => 'SynopsisTable instance'
+%ModuleSynopses = ();
 
 sub get_synopsis_table($){
     my($chap) = @_;
-    my $st = $ModuleSynopses{$chap};
     my $key;
     foreach $key (keys %ModuleSynopses) {
 	if ($key eq $chap) {
 	    return $ModuleSynopses{$chap};
 	}
     }
-    $st = SynopsisTable->new();
+    my $st = SynopsisTable->new();
     $ModuleSynopses{$chap} = $st;
     return $st;
 }
@@ -1323,10 +1348,33 @@
 sub do_cmd_localmoduletable{
     local($_) = @_;
     my $chap = get_chapter_id();
+    my $st = get_synopsis_table($chap);
+    $st->set_file("$CURRENT_FILE");
     return "<tex2html-localmoduletable><$chap>\\tableofchildlinks[off]" . $_;
 }
 
 sub process_all_localmoduletables{
+    my $key;
+    my $st, $file;
+    foreach $key (keys %ModuleSynopses) {
+        $st = $ModuleSynopses{$key};
+        $file = $st->get_file();
+        if ($file) {
+            process_localmoduletables_in_file($file);
+        }
+        else {
+            print "\nsynopsis table $key has no file association";
+        }
+    }
+}
+
+sub process_localmoduletables_in_file{
+    my $file = @_[0];
+    open(MYFILE, "<$file");
+    local($_);
+    sysread(MYFILE, $_, 1024*1024);
+    close(MYFILE);
+    # need to get contents of file in $_
     while (/<tex2html-localmoduletable><(\d+)>/) {
 	my $match = $&;
 	my $chap = $1;
@@ -1334,6 +1382,9 @@
 	my $data = $st->tohtml();
 	s/$match/$data/;
     }
+    open(MYFILE,">$file");
+    print MYFILE $_;
+    close(MYFILE);
 }
 sub process_python_state{
     process_all_localmoduletables();
@@ -1371,8 +1422,8 @@
       . $_;
 }
 
-sub do_cmd_seerfc{
-    local($_) = @_;
+sub handle_rfclike_reference{
+    local($_, $what) = @_;
     my $rfcnum = next_argument();
     my $title = next_argument();
     my $text = next_argument();
@@ -1380,11 +1431,19 @@
     return '<dl compact class="seerfc">'
       . "\n    <dt><a href=\"$url\""
       . "\n        title=\"$title\""
-      . "\n        >RFC $rfcnum, <em>$title</em></a>:"
+      . "\n        >$what $rfcnum, <em>$title</em></a>:"
       . "\n    <dd>$text\n  </dl>"
       . $_;
 }
 
+sub do_cmd_seepep{
+    return handle_rfclike_reference(@_[0], "PEP");
+}
+
+sub do_cmd_seerfc{
+    return handle_rfclike_reference(@_[0], "RFC");
+}
+
 sub do_cmd_seeurl{
     local($_) = @_;
     my $url = next_argument();
