Also deprecated the old Tester class, which is no longer used by anything
except internal tests.
diff --git a/Lib/doctest.py b/Lib/doctest.py
index bf39e38..3eb904e 100644
--- a/Lib/doctest.py
+++ b/Lib/doctest.py
@@ -377,7 +377,6 @@
     Return true iff base begins with an (at least one) underscore, but
     does not both begin and end with (at least) two underscores.
 
-    >>> import warnings
     >>> warnings.filterwarnings("ignore", "is_private", DeprecationWarning,
     ...                         "doctest", 0)
     >>> is_private("a.b", "my_func")
@@ -397,7 +396,7 @@
     """
     warnings.warn("is_private is deprecated; it wasn't useful; "
                   "examine DocTestFinder.find() lists instead",
-                  DeprecationWarning)
+                  DeprecationWarning, stacklevel=2)
     return base[:1] == "_" and not base[:2] == "__" == base[-2:]
 
 def _extract_future_flags(globs):
@@ -1866,6 +1865,10 @@
 class Tester:
     def __init__(self, mod=None, globs=None, verbose=None,
                  isprivate=None, optionflags=0):
+
+        warnings.warn("class Tester is deprecated; "
+                      "use class doctest.DocTestRunner instead",
+                      DeprecationWarning, stacklevel=2)
         if mod is None and globs is None:
             raise TypeError("Tester.__init__: must specify mod or globs")
         if mod is not None and not _ismodule(mod):
@@ -2403,6 +2406,8 @@
 #            }
 
 def test1(): r"""
+>>> warnings.filterwarnings("ignore", "class Tester", DeprecationWarning,
+...                         "doctest", 0)
 >>> from doctest import Tester
 >>> t = Tester(globs={'x': 42}, verbose=0)
 >>> t.runstring(r'''
@@ -2437,6 +2442,8 @@
 """
 
 def test2(): r"""
+        >>> warnings.filterwarnings("ignore", "class Tester",
+        ...                         DeprecationWarning, "doctest", 0)
         >>> t = Tester(globs={}, verbose=1)
         >>> test = r'''
         ...    # just an example
@@ -2456,6 +2463,8 @@
         (0, 2)
 """
 def test3(): r"""
+        >>> warnings.filterwarnings("ignore", "class Tester",
+        ...                         DeprecationWarning, "doctest", 0)
         >>> t = Tester(globs={}, verbose=0)
         >>> def _f():
         ...     '''Trivial docstring example.
@@ -2490,6 +2499,8 @@
 
         Tests that objects outside m1 are excluded:
 
+        >>> warnings.filterwarnings("ignore", "class Tester",
+        ...                         DeprecationWarning, "doctest", 0)
         >>> t = Tester(globs={}, verbose=0)
         >>> t.rundict(m1.__dict__, "rundict_test", m1)  # f2 and g2 and h2 skipped
         (0, 4)
diff --git a/Misc/NEWS b/Misc/NEWS
index 7550076..5759f35 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,11 +12,11 @@
 Core and builtins
 -----------------
 
-Subclasses of string can no longer be interned.  The semantics of
-interning were not clear here -- a subclass could be mutable, for
-example -- and had bugs.  Explicitly interning a subclass of string
-via intern() will raise a TypeError.  Internal operations that attempt
-to intern a string subclass will have no effect.
+- Subclasses of string can no longer be interned.  The semantics of
+  interning were not clear here -- a subclass could be mutable, for
+  example -- and had bugs.  Explicitly interning a subclass of string
+  via intern() will raise a TypeError.  Internal operations that attempt
+  to intern a string subclass will have no effect.
 
 Extension modules
 -----------------
@@ -24,6 +24,21 @@
 Library
 -------
 
+- doctest refactoring continued.  See the docs for details.  As part of
+  this effort, some old and little- (never?) used features are now
+  deprecated:  the Tester class, the module is_private() function, and the
+  isprivate argument to testmod().  The Tester class supplied a feeble
+  "by hand" way to combine multiple doctests, if you knew exactly what
+  you were doing.  The newer doctest features for unittest integration
+  already did a better job of that, are stronger now than ever, and the
+  new DocTestRunner class is a saner foundation if you want to do it by
+  hand.  The "private name" filtering gimmick was a mistake from the
+  start, and testmod() changed long ago to ignore it by default.  If
+  you want to filter out tests, the new DocTestFinder class can be used
+  to return a list of all doctests, and you can filter that list by
+  any computable criteria before passing it to a DocTestRunner instance.
+
+
 Tools/Demos
 -----------