diff --git a/Doc/tools/mksourcepkg b/Doc/tools/mksourcepkg
index 260ae6d..098bed2 100755
--- a/Doc/tools/mksourcepkg
+++ b/Doc/tools/mksourcepkg
@@ -21,12 +21,17 @@
 import getopt
 import glob
 import os
+import re
 import shutil
 import sys
 import tempfile
 
+import cvsinfo
+
 
 quiet = 0
+rx = re.compile(r":ext:(?:[a-zA-Z0-9]+)@cvs\.([a-zA-Z0-9]+).sourceforge.net:"
+                r"/cvsroot/\1")
 
 
 def main():
@@ -70,33 +75,47 @@
           cvstag = args[1]
      tempdir = tempfile.mktemp()
      os.mkdir(tempdir)
-     os.mkdir(os.path.join(tempdir, "Python-%s" % release))
-     docdir = os.path.join(tempdir, "Python-%s" % release, "Doc")
-     os.mkdir(docdir)
-     mydir = os.getcwd()
+     pkgdir = os.path.join(tempdir, "Python-" + release)
+     os.mkdir(pkgdir)
+     pwd = os.getcwd()
+     mydir = os.path.abspath(os.path.dirname(sys.argv[0]))
+     info = cvsinfo.RepositoryInfo(mydir)
+     cvsroot = info.get_cvsroot()
+     m = rx.match(cvsroot)
+     if m:
+          # If this is an authenticated SourceForge repository, convert to
+          # anonymous usage for the export/checkout, since that avoids the
+          # SSH overhead.
+          group = m.group(1)
+          cvsroot = ":pserver:anonymous@cvs.%s.sourceforge.net:/cvsroot/%s" \
+                    % (group, group)
+          # For some reason, SourceForge/CVS doesn't seem to care that we
+          # might not have done a "cvs login" to the anonymous server.
+          # That avoids a lot of painful gunk here.
+     os.chdir(pkgdir)
+     if not quiet:
+          print "--- current directory is:", pkgdir
      if cvstag:
-          run("cvs export -r %s -d %s/Python-%s/Doc python/dist/src/Doc"
-              % (cvstag, tempdir, release))
+          run("cvs -d%s export -r %s -d Doc python/dist/src/Doc"
+              % (cvsroot, cvstag))
      else:
-          run("cvs checkout -d %s/Python-%s/Doc python/dist/src/Doc"
-              % (tempdir, release))
+          run("cvs -Q -d%s checkout -d Doc python/dist/src/Doc" % cvsroot)
           # remove CVS directories
-          os.chdir("%s/Python-%s" % (tempdir, release))
           for p in ('*/CVS', '*/*/CVS', '*/*/*/CVS'):
                map(shutil.rmtree, glob.glob(p))
-          os.chdir(mydir)
      if tools:
-          archive = "tools-" + release
+          archive = "doctools-" + release
           # we don't want the actual documents in this case:
-          for d in ("api", "doc", "ext", "lib", "mac", "ref", "tut"):
-               shutil.rmtree(os.path.join(docdir, d))
+          for d in ("api", "dist", "doc", "ext", "inst",
+                    "lib", "mac", "ref", "tut"):
+               shutil.rmtree(os.path.join(os.path.join(pkgdir, "Doc"), d))
      else:
           archive = "latex-" + release
 
      # XXX should also remove the .cvsignore files at this point
 
      os.chdir(tempdir)
-     archive = os.path.join(mydir, archive)
+     archive = os.path.join(pwd, archive)
      for format in formats:
           if format == "bzip2":
                run("tar cf - Python-%s | bzip2 -9 >%s.tar.bz2"
@@ -111,7 +130,7 @@
                    % (archive, release))
 
      # clean up the work area:
-     os.chdir(mydir)
+     os.chdir(pwd)
      shutil.rmtree(tempdir)
 
 
@@ -119,7 +138,7 @@
      if quiet < 2:
           print "+++", cmd
      if quiet:
-          cmd = "(%s) >/dev/null" % cmd
+          cmd = "%s >/dev/null" % cmd
      rc = os.system(cmd)
      if rc:
           sys.exit(rc)
