diff --git a/Doc/perl/python.perl b/Doc/perl/python.perl
index ae0d7b1..98603c7 100644
--- a/Doc/perl/python.perl
+++ b/Doc/perl/python.perl
@@ -8,6 +8,8 @@
 
 package main;
 
+use File::Basename;
+
 
 sub next_argument{
     my $param;
@@ -23,6 +25,30 @@
     return $param;
 }
 
+sub make_icon_filename($){
+    my($myname, $mydir, $myext) = fileparse(@_[0], '\..*');
+    chop $mydir;
+    if ($mydir eq '.') {
+        $mydir = $ICONSERVER;
+    }
+    $myext = ".$IMAGE_TYPE"
+      unless $myext;
+    return "$mydir$dd$myname$myext";
+}
+
+$OFF_SITE_LINK_ICON = '';
+
+sub get_link_icon($){
+    my $url = @_[0];
+    if ($OFF_SITE_LINK_ICON && ($url =~ /^[-a-zA-Z0-9.]+:/)) {
+        # absolute URL; assume it points off-site
+        my $icon = make_icon_filename($OFF_SITE_LINK_ICON);
+        return (" <img src='$icon'\n"
+                . "  height='12' width='15' border='0' alt='[off-site link]'\n"
+                . "  >");
+    }
+    return '';
+}
 
 # This is a fairly simple hack; it supports \let when it is used to create
 # (or redefine) a macro to exactly be some other macro: \let\newname=\oldname.
@@ -211,8 +237,9 @@
 sub do_cmd_newsgroup{
     local($_) = @_;
     my $newsgroup = next_argument();
+    my $icon = get_link_icon("news:$newsgroup");
     my $stuff = "<span class='newsgroup'><a href='news:$newsgroup'>"
-      . "$newsgroup</a></span>";
+      . "$newsgroup$icon</a></span>";
     return $stuff . $_;
 }
 
@@ -233,8 +260,9 @@
     # use the URL as both text and hyperlink
     local($_) = @_;
     my $url = next_argument();
+    my $icon = get_link_icon($url);
     $url =~ s/~/&#126;/g;
-    return "<a class=\"url\" href=\"$url\">$url</a>" . $_;
+    return "<a class=\"url\" href=\"$url\">$url$icon</a>" . $_;
 }
 
 sub do_cmd_manpage{
@@ -255,11 +283,12 @@
     my $rfcnumber = next_argument();
     my $id = "rfcref-" . ++$global{'max_id'};
     my $href = get_pep_url($rfcnumber);
+    my $icon = get_link_icon($href);
     # 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>"
-            . $_);
+    return ("<a class=\"rfc\" name=\"$id\"\nhref=\"$href\">PEP $rfcnumber"
+            . "$icon</a>" . $_);
 }
 
 sub get_rfc_url{
@@ -272,23 +301,25 @@
     my $rfcnumber = next_argument();
     my $id = "rfcref-" . ++$global{'max_id'};
     my $href = get_rfc_url($rfcnumber);
+    my $icon = get_link_icon($href);
     # 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</a>"
-            . $_);
+    return ("<a class=\"rfc\" name=\"$id\"\nhref=\"$href\">RFC $rfcnumber"
+            . "$icon</a>" . $_);
 }
 
 sub do_cmd_citetitle{
     local($_) = @_;
     my $url = next_optional_argument();
     my $title = next_argument();
+    my $icon = get_link_icon($url);
     my $repl = '';
     if ($url) {
         $repl = ("<em class='citetitle'><a\n"
                  . " href='$url'\n"
                  . " title='$title'\n"
-                 . " >$title</a></em>");
+                 . " >$title$icon</a></em>");
     }
     else {
         $repl = "<em class='citetitle'\n >$title</em>";
@@ -632,7 +663,6 @@
 sub load_refcounts{
     $REFCOUNTS_LOADED = 1;
 
-    use File::Basename;
     my $myname, $mydir, $myext;
     ($myname, $mydir, $myext) = fileparse(__FILE__, '\..*');
     chop $mydir;			# remove trailing '/'
@@ -1253,16 +1283,8 @@
     return $the_title;
 }
 
-use File::Basename;
-
 sub make_my_titlegraphic() {
-    my($myname, $mydir, $myext) = fileparse($TITLE_PAGE_GRAPHIC, '\..*');
-    chop $mydir;
-    if ($mydir eq '.') {
-        $mydir = $ICONSERVER;
-    }
-    $myext = ".$IMAGE_TYPE"
-      unless $myext;
+    my $filename = make_icon_filename($TITLE_PAGE_GRAPHIC);
     my $graphic = "<td class=\"titlegraphic\"";
     $graphic .= " width=\"$TITLE_PAGE_GRAPHIC_COLWIDTH\""
       if ($TITLE_PAGE_GRAPHIC_COLWIDTH);
@@ -1454,10 +1476,11 @@
     my $title = next_argument();
     my $text = next_argument();
     my $url = get_rfc_url($rfcnum);
+    my $icon = get_link_icon($url);
     return '<dl compact class="seerfc">'
       . "\n    <dt><a href=\"$url\""
       . "\n        title=\"$title\""
-      . "\n        >$what $rfcnum, <em>$title</em></a>:"
+      . "\n        >$what $rfcnum, <em>$title</em>$icon</a>:"
       . "\n    <dd>$text\n  </dl>"
       . $_;
 }
@@ -1475,10 +1498,11 @@
     my $url = next_optional_argument();
     my $title = next_argument();
     my $text = next_argument();
+    my $icon = get_link_icon($url);
     if ($url) {
         return '<dl compact class="seetitle">'
           . "\n    <dt><em class=\"citetitle\"><a href=\"$url\""
-          . "\n        class=\"url\">$title</a></em>"
+          . "\n        >$title$icon</a></em>"
           . "\n    <dd>$text\n  </dl>"
           . $_;
     }
@@ -1493,9 +1517,10 @@
     local($_) = @_;
     my $url = next_argument();
     my $text = next_argument();
+    my $icon = get_link_icon($url);
     return '<dl compact class="seeurl">'
       . "\n    <dt><a href=\"$url\""
-      . "\n        class=\"url\">$url</a>"
+      . "\n        class=\"url\">$url$icon</a>"
       . "\n    <dd>$text\n  </dl>"
       . $_;
 }
