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
