Reluctantly, rehabilitate doctest.master.
diff --git a/Lib/doctest.py b/Lib/doctest.py
index 5d371d2..3a8496f 100644
--- a/Lib/doctest.py
+++ b/Lib/doctest.py
@@ -1531,6 +1531,20 @@
             print "Test passed."
         return totalf, totalt
 
+    #/////////////////////////////////////////////////////////////////
+    # Backward compatibility cruft to maintain doctest.master.
+    #/////////////////////////////////////////////////////////////////
+    def merge(self, other):
+        d = self._name2ft
+        for name, (f, t) in other._name2ft.items():
+            if name in d:
+                print "*** DocTestRunner.merge: '" + name + "' in both" \
+                    " testers; summing outcomes."
+                f2, t2 = d[name]
+                f = f + f2
+                t = t + t2
+            d[name] = f, t
+
 class OutputChecker:
     """
     A class used to check the whether the actual output from a doctest
@@ -1810,6 +1824,10 @@
 ######################################################################
 # These should be backwards compatible.
 
+# For backward compatibility, a global instance of a DocTestRunner
+# class, updated by testmod.
+master = None
+
 def testmod(m=None, name=None, globs=None, verbose=None, isprivate=None,
             report=True, optionflags=0, extraglobs=None,
             raise_on_error=False):
@@ -1883,6 +1901,8 @@
     displaying a summary.  Invoke doctest.master.summarize(verbose)
     when you're done fiddling.
     """
+    global master
+
     if isprivate is not None:
         warnings.warn("the isprivate argument is deprecated; "
                       "examine DocTestFinder.find() lists instead",
@@ -1917,6 +1937,11 @@
     if report:
         runner.summarize()
 
+    if master is None:
+        master = runner
+    else:
+        master.merge(runner)
+
     return runner.failures, runner.tries
 
 def run_docstring_examples(f, globs, verbose=False, name="NoName",
@@ -2007,15 +2032,7 @@
         return self.testrunner.summarize(verbose)
 
     def merge(self, other):
-        d = self.testrunner._name2ft
-        for name, (f, t) in other.testrunner._name2ft.items():
-            if name in d:
-                print "*** Tester.merge: '" + name + "' in both" \
-                    " testers; summing outcomes."
-                f2, t2 = d[name]
-                f = f + f2
-                t = t + t2
-            d[name] = f, t
+        self.testrunner.merge(other.testrunner)
 
 ######################################################################
 ## 8. Unittest Support
diff --git a/Misc/NEWS b/Misc/NEWS
index af0d1f2..2a19853 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -22,9 +22,10 @@
 Library
 -------
 
-- bdist_rpm now supports command line options --force-arch, 
-  {pre,post}-install,  {pre,post}-uninstall, and 
+- bdist_rpm now supports command line options --force-arch,
+  {pre,post}-install,  {pre,post}-uninstall, and
   {prep,build,install,clean,verify}-script.
+
 - SF patch #998993: The UTF-8 and the UTF-16 stateful decoders now support
   decoding incomplete input (when the input stream is temporarily exhausted).
   ``codecs.StreamReader`` now implements buffering, which enables proper
@@ -34,6 +35,13 @@
   ``codecs.StreamReader.readlines()`` have a new argument ``keepends``.
   Trailing "\n"s will be stripped from the lines if ``keepends`` is false.
 
+- ``doctest.master was`` put back in, and ``doctest.testmod()`` once again
+  updates it.  This isn't good, because every ``testmod()`` call
+  contributes to bloating the "hidden" state of ``doctest.master``, but
+  some old code apparently relies on it.  For now, all we can do is
+  encourage people to stitch doctests together via doctest's unittest
+  integration features instead.  It would help if those were documented.
+
 Build
 -----
 
@@ -85,7 +93,7 @@
 Core and builtins
 -----------------
 
-- SF patch #1007189: ``from ... import ...`` statements now allow the name 
+- SF patch #1007189: ``from ... import ...`` statements now allow the name
   list to be surrounded by parentheses.
 
 - Some speedups for long arithmetic, thanks to Trevor Perrin.  Gradeschool
@@ -152,14 +160,14 @@
 - Added CurrentByteIndex, CurrentColumnNumber, CurrentLineNumber
   members to xml.parsers.expat.XMLParser object.
 
-- The mpz, rotor, and xreadlines modules, all deprecated in earlier 
+- The mpz, rotor, and xreadlines modules, all deprecated in earlier
   versions of Python, have now been removed.
 
 Library
 -------
 
 - Patch #934356: if a module defines __all__, believe that rather than using
-  heuristics for filtering out imported names. 
+  heuristics for filtering out imported names.
 
 - Patch #941486: added os.path.lexists(), which returns True for broken
   symlinks, unlike os.path.exists().
@@ -330,10 +338,10 @@
 
 - PEP-0318, Function Decorators have been added to the language. These are
   implemented using the Java-style @decorator syntax, like so::
-     
+
      @staticmethod
      def foo(bar):
-  
+
   (The PEP needs to be updated to reflect the current state)
 
 - When importing a module M raises an exception, Python no longer leaves M