diff --git a/Doc/lib/lib.tex b/Doc/lib/lib.tex
index 20f65df..d8cb2de 100644
--- a/Doc/lib/lib.tex
+++ b/Doc/lib/lib.tex
@@ -124,7 +124,6 @@
 \input{libmath}
 \input{libcmath}
 \input{librandom}
-\input{libwhrandom}
 \input{libbisect}
 \input{libcollections}
 \input{libheapq}
@@ -354,7 +353,6 @@
 %\input{libcmpcache}
 %\input{libcmp}
 %\input{libni}
-%\input{librand}
 %\input{libregex}
 %\input{libregsub}
 
diff --git a/Doc/lib/librand.tex b/Doc/lib/librand.tex
deleted file mode 100644
index 9b2c685..0000000
--- a/Doc/lib/librand.tex
+++ /dev/null
@@ -1,31 +0,0 @@
-\section{\module{rand} ---
-         None}
-\declaremodule{standard}{rand}
-
-\modulesynopsis{None}
-
-
-The \code{rand} module simulates the C library's \code{rand()}
-interface, though the results aren't necessarily compatible with any
-given library's implementation.  While still supported for
-compatibility, the \code{rand} module is now considered obsolete; if
-possible, use the \code{whrandom} module instead.
-
-
-\begin{funcdesc}{choice}{seq}
-Returns a random element from the sequence \var{seq}.
-\end{funcdesc}
-
-\begin{funcdesc}{rand}{}
-Return a random integer between 0 and 32767, inclusive.
-\end{funcdesc}
-
-\begin{funcdesc}{srand}{seed}
-Set a starting seed value for the random number generator; \var{seed}
-can be an arbitrary integer. 
-\end{funcdesc}
-
-\begin{seealso}
-  \seemodule{random}{Python's interface to random number generators.}
-  \seemodule{whrandom}{The random number generator used by default.}
-\end{seealso}
diff --git a/Doc/lib/libwhrandom.tex b/Doc/lib/libwhrandom.tex
deleted file mode 100644
index c5df0ef..0000000
--- a/Doc/lib/libwhrandom.tex
+++ /dev/null
@@ -1,74 +0,0 @@
-\section{\module{whrandom} ---
-         Pseudo-random number generator}
-
-\declaremodule{standard}{whrandom}
-\modulesynopsis{Floating point pseudo-random number generator.}
-
-\deprecated{2.1}{Use \refmodule{random} instead.}
-
-\note{This module was an implementation detail of the
-\refmodule{random} module in releases of Python prior to 2.1.  It is
-no longer used.  Please do not use this module directly; use
-\refmodule{random} instead.}
-
-This module implements a Wichmann-Hill pseudo-random number generator
-class that is also named \class{whrandom}.  Instances of the
-\class{whrandom} class conform to the Random Number Generator
-interface described in section \ref{rng-objects}.  They also offer the 
-following method, specific to the Wichmann-Hill algorithm:
-
-\begin{methoddesc}[whrandom]{seed}{\optional{x, y, z}}
-  Initializes the random number generator from the integers \var{x},
-  \var{y} and \var{z}.  When the module is first imported, the random
-  number is initialized using values derived from the current time.
-  If \var{x}, \var{y}, and \var{z} are either omitted or \code{0}, the 
-  seed will be computed from the current system time.  If one or two
-  of the parameters are \code{0}, but not all three, the zero values
-  are replaced by ones.  This causes some apparently different seeds
-  to be equal, with the corresponding result on the pseudo-random
-  series produced by the generator.
-\end{methoddesc}
-
-\begin{funcdesc}{choice}{seq}
-Chooses a random element from the non-empty sequence \var{seq} and returns it.
-\end{funcdesc}
-
-\begin{funcdesc}{randint}{a, b}
-Returns a random integer \var{N} such that \code{\var{a}<=\var{N}<=\var{b}}.
-\end{funcdesc}
-
-\begin{funcdesc}{random}{}
-Returns the next random floating point number in the range [0.0 ... 1.0).
-\end{funcdesc}
-
-\begin{funcdesc}{seed}{x, y, z}
-Initializes the random number generator from the integers \var{x},
-\var{y} and \var{z}.  When the module is first imported, the random
-number is initialized using values derived from the current time.
-\end{funcdesc}
-
-\begin{funcdesc}{uniform}{a, b}
-Returns a random real number \var{N} such that \code{\var{a}<=\var{N}<\var{b}}.
-\end{funcdesc}
-
-When imported, the \module{whrandom} module also creates an instance of
-the \class{whrandom} class, and makes the methods of that instance
-available at the module level.  Therefore one can write either 
-\code{N = whrandom.random()} or:
-
-\begin{verbatim}
-generator = whrandom.whrandom()
-N = generator.random()
-\end{verbatim}
-
-Note that using separate instances of the generator leads to
-independent sequences of pseudo-random numbers.
-
-\begin{seealso}
-  \seemodule{random}{Generators for various random distributions and
-                     documentation for the Random Number Generator
-                     interface.}
-  \seetext{Wichmann, B. A. \& Hill, I. D., ``Algorithm AS 183: 
-           An efficient and portable pseudo-random number generator'',
-           \citetitle{Applied Statistics} 31 (1982) 188-190.}
-\end{seealso}
diff --git a/Doc/tut/tut.tex b/Doc/tut/tut.tex
index aae2763..03efeb1 100644
--- a/Doc/tut/tut.tex
+++ b/Doc/tut/tut.tex
@@ -4653,7 +4653,7 @@
 and complex ways. While date and time arithmetic is supported, the
 focus of the implementation is on efficient member extraction for
 output formatting and manipulation.  The module also supports objects
-that are time zone aware.
+that are timezone aware.
 
 \begin{verbatim}
 # dates are easily constructed and formatted
@@ -4777,7 +4777,7 @@
 \item The \ulink{\module{xmlrpclib}}{../lib/module-xmlrpclib.html} and
   \ulink{\module{SimpleXMLRPCServer}}{../lib/module-SimpleXMLRPCServer.html}
   modules make implementing remote procedure calls into an almost trivial task.
-  Despite the names, no direct knowledge or handling of XML is needed.
+  Despite the modules names, no direct knowledge or handling of XML is needed.
 \item The \ulink{\module{email}}{../lib/module-email.html} package is a library
   for managing email messages, including MIME and other RFC 2822-based message
   documents. Unlike \module{smptlib} and \module{poplib} which actually send
@@ -4805,9 +4805,9 @@
 
 \section{Output Formatting\label{output-formatting}}
 
-The \ulink{\module{repr}}{../lib/module-repr.html} module provides an
-version of \function{repr()} for abbreviated displays of large or deeply
-nested containers:
+The \ulink{\module{repr}}{../lib/module-repr.html} module provides a
+version of \function{repr()} customized for abbreviated displays of large
+or deeply nested containers:
 
 \begin{verbatim}
     >>> import repr   
@@ -5097,7 +5097,7 @@
 
 The \ulink{\module{array}}{../lib/module-array.html} module provides an
 \class{array()} object that is like a list that stores only homogenous
-data but stores it more compactly.  The following example shows an array
+data and stores it more compactly.  The following example shows an array
 of numbers stored as two byte unsigned binary numbers (typecode
 \code{"H"}) rather than the usual 16 bytes per entry for regular lists
 of python int objects:
diff --git a/Lib/whrandom.py b/Lib/whrandom.py
deleted file mode 100644
index bc0d1a4..0000000
--- a/Lib/whrandom.py
+++ /dev/null
@@ -1,144 +0,0 @@
-"""Wichman-Hill random number generator.
-
-Wichmann, B. A. & Hill, I. D. (1982)
-Algorithm AS 183:
-An efficient and portable pseudo-random number generator
-Applied Statistics 31 (1982) 188-190
-
-see also:
-        Correction to Algorithm AS 183
-        Applied Statistics 33 (1984) 123
-
-        McLeod, A. I. (1985)
-        A remark on Algorithm AS 183
-        Applied Statistics 34 (1985),198-200
-
-
-USE:
-whrandom.random()       yields double precision random numbers
-                        uniformly distributed between 0 and 1.
-
-whrandom.seed(x, y, z)  must be called before whrandom.random()
-                        to seed the generator
-
-There is also an interface to create multiple independent
-random generators, and to choose from other ranges.
-
-
-
-Multi-threading note: the random number generator used here is not
-thread-safe; it is possible that nearly simultaneous calls in
-different theads return the same random value.  To avoid this, you
-have to use a lock around all calls.  (I didn't want to slow this
-down in the serial case by using a lock here.)
-"""
-
-import warnings
-warnings.warn("the whrandom module is deprecated; please use the random module",
-              DeprecationWarning)
-
-# Translated by Guido van Rossum from C source provided by
-# Adrian Baddeley.
-
-
-class whrandom:
-    def __init__(self, x = 0, y = 0, z = 0):
-        """Initialize an instance.
-        Without arguments, initialize from current time.
-        With arguments (x, y, z), initialize from them."""
-        self.seed(x, y, z)
-
-    def seed(self, x = 0, y = 0, z = 0):
-        """Set the seed from (x, y, z).
-        These must be integers in the range [0, 256)."""
-        if not type(x) == type(y) == type(z) == type(0):
-            raise TypeError, 'seeds must be integers'
-        if not (0 <= x < 256 and 0 <= y < 256 and 0 <= z < 256):
-            raise ValueError, 'seeds must be in range(0, 256)'
-        if 0 == x == y == z:
-            # Initialize from current time
-            import time
-            t = long(time.time() * 256)
-            t = int((t&0xffffff) ^ (t>>24))
-            t, x = divmod(t, 256)
-            t, y = divmod(t, 256)
-            t, z = divmod(t, 256)
-        # Zero is a poor seed, so substitute 1
-        self._seed = (x or 1, y or 1, z or 1)
-
-    def random(self):
-        """Get the next random number in the range [0.0, 1.0)."""
-        # This part is thread-unsafe:
-        # BEGIN CRITICAL SECTION
-        x, y, z = self._seed
-        #
-        x = (171 * x) % 30269
-        y = (172 * y) % 30307
-        z = (170 * z) % 30323
-        #
-        self._seed = x, y, z
-        # END CRITICAL SECTION
-        #
-        return (x/30269.0 + y/30307.0 + z/30323.0) % 1.0
-
-    def uniform(self, a, b):
-        """Get a random number in the range [a, b)."""
-        return a + (b-a) * self.random()
-
-    def randint(self, a, b):
-        """Get a random integer in the range [a, b] including
-        both end points.
-
-        (Deprecated; use randrange below.)"""
-        return self.randrange(a, b+1)
-
-    def choice(self, seq):
-        """Choose a random element from a non-empty sequence."""
-        return seq[int(self.random() * len(seq))]
-
-    def randrange(self, start, stop=None, step=1, int=int, default=None):
-        """Choose a random item from range(start, stop[, step]).
-
-        This fixes the problem with randint() which includes the
-        endpoint; in Python this is usually not what you want.
-        Do not supply the 'int' and 'default' arguments."""
-        # This code is a bit messy to make it fast for the
-        # common case while still doing adequate error checking
-        istart = int(start)
-        if istart != start:
-            raise ValueError, "non-integer arg 1 for randrange()"
-        if stop is default:
-            if istart > 0:
-                return int(self.random() * istart)
-            raise ValueError, "empty range for randrange()"
-        istop = int(stop)
-        if istop != stop:
-            raise ValueError, "non-integer stop for randrange()"
-        if step == 1:
-            if istart < istop:
-                return istart + int(self.random() *
-                                   (istop - istart))
-            raise ValueError, "empty range for randrange()"
-        istep = int(step)
-        if istep != step:
-            raise ValueError, "non-integer step for randrange()"
-        if istep > 0:
-            n = (istop - istart + istep - 1) / istep
-        elif istep < 0:
-            n = (istop - istart + istep + 1) / istep
-        else:
-            raise ValueError, "zero step for randrange()"
-
-        if n <= 0:
-            raise ValueError, "empty range for randrange()"
-        return istart + istep*int(self.random() * n)
-
-
-# Initialize from the current time
-_inst = whrandom()
-seed = _inst.seed
-random = _inst.random
-uniform = _inst.uniform
-randint = _inst.randint
-choice = _inst.choice
-randrange = _inst.randrange
diff --git a/Misc/NEWS b/Misc/NEWS
index 32da2f7..43289c9 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -21,6 +21,8 @@
 Library
 -------
 
+- the deprecated whrandom module was removed.  Use the random module instead.
+
 - heapq.nsmallest() and heapq.nlargest() now support key= arguments with
   the same meaning as in list.sort().
 
