diff --git a/Doc/library/abc.rst b/Doc/library/abc.rst
index 31bd896..29d37f3 100644
--- a/Doc/library/abc.rst
+++ b/Doc/library/abc.rst
@@ -132,7 +132,7 @@
    A class that has a metaclass derived from :class:`ABCMeta`
    cannot be instantiated unless all of its abstract methods and
    properties are overridden.
-   The abstract methods can be called using any of the the normal 'super' call
+   The abstract methods can be called using any of the normal 'super' call
    mechanisms.
 
    Dynamically adding abstract methods to a class, or attempting to modify the
@@ -184,6 +184,7 @@
           def setx(self, value): ...
           x = abstractproperty(getx, setx)
 
+
 .. rubric:: Footnotes
 
 .. [#] C++ programmers should note that Python's virtual base class
diff --git a/Doc/library/doctest.rst b/Doc/library/doctest.rst
index 133a506..c991495 100644
--- a/Doc/library/doctest.rst
+++ b/Doc/library/doctest.rst
@@ -905,7 +905,7 @@
 from text files and modules with doctests:
 
 
-.. function:: DocFileSuite([module_relative][, package][, setUp][, tearDown][, globs][, optionflags][, parser][, encoding])
+.. function:: DocFileSuite(*paths, [module_relative][, package][, setUp][, tearDown][, globs][, optionflags][, parser][, encoding])
 
    Convert doctest tests from one or more text files to a
    :class:`unittest.TestSuite`.
@@ -923,45 +923,47 @@
    Optional argument *module_relative* specifies how the filenames in *paths*
    should be interpreted:
 
-   * If *module_relative* is ``True`` (the default), then each filename specifies
-     an OS-independent module-relative path.  By default, this path is relative to
-     the calling module's directory; but if the *package* argument is specified, then
-     it is relative to that package.  To ensure OS-independence, each filename should
-     use ``/`` characters to separate path segments, and may not be an absolute path
-     (i.e., it may not begin with ``/``).
+   * If *module_relative* is ``True`` (the default), then each filename in
+     *paths* specifies an OS-independent module-relative path.  By default, this
+     path is relative to the calling module's directory; but if the *package*
+     argument is specified, then it is relative to that package.  To ensure
+     OS-independence, each filename should use ``/`` characters to separate path
+     segments, and may not be an absolute path (i.e., it may not begin with
+     ``/``).
 
-   * If *module_relative* is ``False``, then each filename specifies an OS-specific
-     path.  The path may be absolute or relative; relative paths are resolved with
-     respect to the current working directory.
+   * If *module_relative* is ``False``, then each filename in *paths* specifies
+     an OS-specific path.  The path may be absolute or relative; relative paths
+     are resolved with respect to the current working directory.
 
-   Optional argument *package* is a Python package or the name of a Python package
-   whose directory should be used as the base directory for module-relative
-   filenames.  If no package is specified, then the calling module's directory is
-   used as the base directory for module-relative filenames.  It is an error to
-   specify *package* if *module_relative* is ``False``.
+   Optional argument *package* is a Python package or the name of a Python
+   package whose directory should be used as the base directory for
+   module-relative filenames in *paths*.  If no package is specified, then the
+   calling module's directory is used as the base directory for module-relative
+   filenames.  It is an error to specify *package* if *module_relative* is
+   ``False``.
 
-   Optional argument *setUp* specifies a set-up function for the test suite.  This
-   is called before running the tests in each file.  The *setUp* function will be
-   passed a :class:`DocTest` object.  The setUp function can access the test
-   globals as the *globs* attribute of the test passed.
-
-   Optional argument *tearDown* specifies a tear-down function for the test suite.
-   This is called after running the tests in each file.  The *tearDown* function
+   Optional argument *setUp* specifies a set-up function for the test suite.
+   This is called before running the tests in each file.  The *setUp* function
    will be passed a :class:`DocTest` object.  The setUp function can access the
    test globals as the *globs* attribute of the test passed.
 
+   Optional argument *tearDown* specifies a tear-down function for the test
+   suite.  This is called after running the tests in each file.  The *tearDown*
+   function will be passed a :class:`DocTest` object.  The setUp function can
+   access the test globals as the *globs* attribute of the test passed.
+
    Optional argument *globs* is a dictionary containing the initial global
    variables for the tests.  A new copy of this dictionary is created for each
    test.  By default, *globs* is a new empty dictionary.
 
    Optional argument *optionflags* specifies the default doctest options for the
    tests, created by or-ing together individual option flags.  See section
-   :ref:`doctest-options`. See function :func:`set_unittest_reportflags` below for
-   a better way to set reporting options.
+   :ref:`doctest-options`. See function :func:`set_unittest_reportflags` below
+   for a better way to set reporting options.
 
-   Optional argument *parser* specifies a :class:`DocTestParser` (or subclass) that
-   should be used to extract tests from the files.  It defaults to a normal parser
-   (i.e., ``DocTestParser()``).
+   Optional argument *parser* specifies a :class:`DocTestParser` (or subclass)
+   that should be used to extract tests from the files.  It defaults to a normal
+   parser (i.e., ``DocTestParser()``).
 
    Optional argument *encoding* specifies an encoding that should be used to
    convert the file to unicode.
diff --git a/Doc/library/functions.rst b/Doc/library/functions.rst
index 7fd39b7..d9d7874 100644
--- a/Doc/library/functions.rst
+++ b/Doc/library/functions.rst
@@ -1163,9 +1163,11 @@
    Without arguments, return a dictionary corresponding to the current local symbol
    table.  With a module, class or class instance object as argument (or anything
    else that has a :attr:`__dict__` attribute), returns a dictionary corresponding
-   to the object's symbol table.  The returned dictionary should not be modified:
-   the effects on the corresponding symbol table are undefined. [#]_
+   to the object's symbol table.
 
+   .. warning::
+      The returned dictionary should not be modified:
+      the effects on the corresponding symbol table are undefined. [#]_
 
 .. function:: zip(*iterables)
 
diff --git a/Doc/library/itertools.rst b/Doc/library/itertools.rst
index dca2315..2cfc779 100644
--- a/Doc/library/itertools.rst
+++ b/Doc/library/itertools.rst
@@ -207,7 +207,7 @@
 
    Make an iterator that filters elements from *data* returning only those that
    have a corresponding element in *selectors* that evaluates to ``True``.
-   Stops when either the *data* or *selectors* iterables have been exhausted.
+   Stops when either the *data* or *selectors* iterables has been exhausted.
    Equivalent to::
 
        def compress(data, selectors):
diff --git a/Doc/library/logging.rst b/Doc/library/logging.rst
index 6e88b70..5dc4af3 100644
--- a/Doc/library/logging.rst
+++ b/Doc/library/logging.rst
@@ -2290,6 +2290,10 @@
 locks; there is one lock to serialize access to the module's shared data, and
 each handler also creates a lock to serialize access to its underlying I/O.
 
+If you are implementing asynchronous signal handlers using the :mod:`signal`
+module, you may not be able to use logging from within such handlers. This is
+because lock implementations in the :mod:`threading` module are not always
+re-entrant, and so cannot be invoked from such signal handlers.
 
 Configuration
 -------------
diff --git a/Doc/library/multiprocessing.rst b/Doc/library/multiprocessing.rst
index f3dd23e..7e828b6 100644
--- a/Doc/library/multiprocessing.rst
+++ b/Doc/library/multiprocessing.rst
@@ -1537,8 +1537,8 @@
 
    .. method:: map(func, iterable[, chunksize])
 
-      A parallel equivalent of the :func:`map` builtin function, collecting the
-      result in a list.  It blocks till the whole result is ready.
+      A parallel equivalent of the :func:`map` builtin function (it supports only
+      one *iterable* argument though).  It blocks till the result is ready.
 
       This method chops the iterable into a number of chunks which it submits to
       the process pool as separate tasks.  The (approximate) size of these
@@ -1697,6 +1697,12 @@
    *address* is the address to be used by the bound socket or named pipe of the
    listener object.
 
+   .. note::
+
+      If an address of '0.0.0.0' is used, the address will not be a connectable
+      end point on Windows. If you require a connectable end-point,
+      you should use '127.0.0.1'.
+
    *family* is the type of socket (or named pipe) to use.  This can be one of
    the strings ``'AF_INET'`` (for a TCP socket), ``'AF_UNIX'`` (for a Unix
    domain socket) or ``'AF_PIPE'`` (for a Windows named pipe).  Of these only
@@ -1839,7 +1845,7 @@
 any :class:`~multiprocessing.Process` object that the current process creates.
 This means that (by default) all processes of a multi-process program will share
 a single authentication key which can be used when setting up connections
-between the themselves.
+between themselves.
 
 Suitable authentication keys can also be generated by using :func:`os.urandom`.
 
diff --git a/Doc/library/os.path.rst b/Doc/library/os.path.rst
index 4fce263..d04fd09 100644
--- a/Doc/library/os.path.rst
+++ b/Doc/library/os.path.rst
@@ -1,11 +1,9 @@
-
 :mod:`os.path` --- Common pathname manipulations
 ================================================
 
 .. module:: os.path
    :synopsis: Operations on pathnames.
 
-
 .. index:: single: path; operations
 
 This module implements some useful functions on pathnames. To read or
@@ -31,6 +29,22 @@
    :func:`splitunc` and :func:`ismount` do handle them correctly.
 
 
+.. note::
+
+   Since different operating systems have different path name conventions, there
+   are several versions of this module in the standard library.  The
+   :mod:`os.path` module is always the path module suitable for the operating
+   system Python is running on, and therefore usable for local paths.  However,
+   you can also import and use the individual modules if you want to manipulate
+   a path that is *always* in one of the different formats.  They all have the
+   same interface:
+
+   * :mod:`posixpath` for UNIX-style paths
+   * :mod:`ntpath` for Windows paths
+   * :mod:`macpath` for old-style MacOS paths
+   * :mod:`os2emxpath` for OS/2 EMX paths
+
+
 .. function:: abspath(path)
 
    Return a normalized absolutized version of the pathname *path*. On most
@@ -189,9 +203,9 @@
 
 .. function:: normcase(path)
 
-   Normalize the case of a pathname.  On Unix and MacOSX, this returns the path unchanged; on
-   case-insensitive filesystems, it converts the path to lowercase.  On Windows, it
-   also converts forward slashes to backward slashes.
+   Normalize the case of a pathname.  On Unix and Mac OS X, this returns the
+   path unchanged; on case-insensitive filesystems, it converts the path to
+   lowercase.  On Windows, it also converts forward slashes to backward slashes.
 
 
 .. function:: normpath(path)
diff --git a/Doc/library/os.rst b/Doc/library/os.rst
index fc62b0b..c686baf 100644
--- a/Doc/library/os.rst
+++ b/Doc/library/os.rst
@@ -51,15 +51,6 @@
    ``'ce'``, ``'java'``.
 
 
-.. data:: path
-
-   The corresponding operating system dependent standard module for pathname
-   operations, such as :mod:`posixpath` or :mod:`ntpath`.  Thus, given the proper
-   imports, ``os.path.split(file)`` is equivalent to but more portable than
-   ``posixpath.split(file)``.  Note that this is also an importable module: it may
-   be imported directly as :mod:`os.path`.
-
-
 .. _os-procinfo:
 
 Process Parameters
@@ -1491,7 +1482,9 @@
    which is used to define the environment variables for the new process (they are
    used instead of the current process' environment); the functions
    :func:`spawnl`, :func:`spawnlp`, :func:`spawnv`, and :func:`spawnvp` all cause
-   the new process to inherit the environment of the current process.
+   the new process to inherit the environment of the current process.  Note that
+   keys and values in the *env* dictionary must be strings; invalid keys or
+   values will cause the function to fail, with a return value of ``127``.
 
    As an example, the following calls to :func:`spawnlp` and :func:`spawnvpe` are
    equivalent::
diff --git a/Doc/library/pdb.rst b/Doc/library/pdb.rst
index c7b34ab..63ade97 100644
--- a/Doc/library/pdb.rst
+++ b/Doc/library/pdb.rst
@@ -262,7 +262,7 @@
    full speed, only stopping at the next line in the current function.)
 
 unt(il)
-   Continue execution until the line with the the line number greater than the
+   Continue execution until the line with the line number greater than the
    current one is reached or when returning from current frame.
 
 r(eturn)
diff --git a/Doc/library/pickle.rst b/Doc/library/pickle.rst
index cd50d11..bb0da80 100644
--- a/Doc/library/pickle.rst
+++ b/Doc/library/pickle.rst
@@ -436,6 +436,14 @@
 Refer to the section :ref:`pickle-state` for more information about how to use
 the methods :meth:`__getstate__` and :meth:`__setstate__`.
 
+.. note::
+   At unpickling time, some methods like :meth:`__getattr__`,
+   :meth:`__getattribute__`, or :meth:`__setattr__` may be called upon the
+   instance.  In case those methods rely on some internal invariant being
+   true, the type should implement either :meth:`__getinitargs__` or
+   :meth:`__getnewargs__` to establish such an invariant; otherwise, neither
+   :meth:`__new__` nor :meth:`__init__` will be called.
+
 .. index::
    pair: copy; protocol
    single: __reduce__() (copy protocol)
diff --git a/Doc/library/re.rst b/Doc/library/re.rst
index 0dbd0e2..fade6ec 100644
--- a/Doc/library/re.rst
+++ b/Doc/library/re.rst
@@ -8,10 +8,9 @@
 .. sectionauthor:: Andrew M. Kuchling <amk@amk.ca>
 
 
-
-
 This module provides regular expression matching operations similar to
-those found in Perl.  The :mod:`re` module is always available.
+those found in Perl. Both patterns and strings to be searched can be
+Unicode strings as well as 8-bit strings.
 
 Both patterns and strings to be searched can be Unicode strings as well as
 8-bit strings. However, Unicode strings and 8-bit strings cannot be mixed:
@@ -47,9 +46,6 @@
       second edition of the book no longer covers Python at all, but the first
       edition covered writing good regular expression patterns in great detail.
 
-   `Kodos <http://kodos.sf.net/>`_
-      is a graphical regular expression debugger written in Python.
-
 
 .. _re-syntax:
 
@@ -241,16 +237,18 @@
 
 ``(?P<name>...)``
    Similar to regular parentheses, but the substring matched by the group is
-   accessible via the symbolic group name *name*.  Group names must be valid Python
-   identifiers, and each group name must be defined only once within a regular
-   expression.  A symbolic group is also a numbered group, just as if the group
-   were not named.  So the group named 'id' in the example below can also be
-   referenced as the numbered group 1.
+   accessible within the rest of the regular expression via the symbolic group
+   name *name*.  Group names must be valid Python identifiers, and each group
+   name must be defined only once within a regular expression.  A symbolic group
+   is also a numbered group, just as if the group were not named.  So the group
+   named ``id`` in the example below can also be referenced as the numbered group
+   ``1``.
 
    For example, if the pattern is ``(?P<id>[a-zA-Z_]\w*)``, the group can be
    referenced by its name in arguments to methods of match objects, such as
-   ``m.group('id')`` or ``m.end('id')``, and also by name in pattern text (for
-   example, ``(?P=id)``) and replacement text (such as ``\g<id>``).
+   ``m.group('id')`` or ``m.end('id')``, and also by name in the regular
+   expression itself (using ``(?P=id)``) and replacement text given to
+   ``.sub()`` (using ``\g<id>``).
 
 ``(?P=name)``
    Matches whatever text was matched by the earlier group named *name*.
diff --git a/Doc/library/shelve.rst b/Doc/library/shelve.rst
index a023504..8121004 100644
--- a/Doc/library/shelve.rst
+++ b/Doc/library/shelve.rst
@@ -141,7 +141,7 @@
 
    # as d was opened WITHOUT writeback=True, beware:
    d['xx'] = range(4)  # this works as expected, but...
-   d['xx'].append(5)   # *this doesn't!* -- d['xx'] is STILL range(4)!!!
+   d['xx'].append(5)   # *this doesn't!* -- d['xx'] is STILL range(4)!
 
    # having opened d without writeback=True, you need to code carefully:
    temp = d['xx']      # extracts the copy
diff --git a/Doc/library/socketserver.rst b/Doc/library/socketserver.rst
index f82f538..9e0e926 100644
--- a/Doc/library/socketserver.rst
+++ b/Doc/library/socketserver.rst
@@ -122,15 +122,21 @@
 Server Objects
 --------------
 
+.. class:: BaseServer
 
-.. function:: fileno()
+   This is the superclass of all Server objects in the module.  It defines the
+   interface, given below, but does not implement most of the methods, which is
+   done in subclasses.
+
+
+.. method:: BaseServer.fileno()
 
    Return an integer file descriptor for the socket on which the server is
    listening.  This function is most commonly passed to :func:`select.select`, to
    allow monitoring multiple servers in the same process.
 
 
-.. function:: handle_request()
+.. method:: BaseServer.handle_request()
 
    Process a single request.  This function calls the following methods in
    order: :meth:`get_request`, :meth:`verify_request`, and
@@ -141,30 +147,30 @@
    will return.
 
 
-.. function:: serve_forever(poll_interval=0.5)
+.. method:: BaseServer.serve_forever(poll_interval=0.5)
 
    Handle requests until an explicit :meth:`shutdown` request.  Polls for
    shutdown every *poll_interval* seconds.
 
 
-.. function:: shutdown()
+.. method:: BaseServer.shutdown()
 
    Tells the :meth:`serve_forever` loop to stop and waits until it does.
 
 
-.. data:: address_family
+.. attribute:: BaseServer.address_family
 
    The family of protocols to which the server's socket belongs.
    Common examples are :const:`socket.AF_INET` and :const:`socket.AF_UNIX`.
 
 
-.. data:: RequestHandlerClass
+.. attribute:: BaseServer.RequestHandlerClass
 
    The user-provided request handler class; an instance of this class is created
    for each request.
 
 
-.. data:: server_address
+.. attribute:: BaseServer.server_address
 
    The address on which the server is listening.  The format of addresses varies
    depending on the protocol family; see the documentation for the socket module
@@ -172,22 +178,22 @@
    the address, and an integer port number: ``('127.0.0.1', 80)``, for example.
 
 
-.. data:: socket
+.. attribute:: BaseServer.socket
 
    The socket object on which the server will listen for incoming requests.
 
+
 The server classes support the following class variables:
 
 .. XXX should class variables be covered before instance variables, or vice versa?
 
-
-.. data:: allow_reuse_address
+.. attribute:: BaseServer.allow_reuse_address
 
    Whether the server will allow the reuse of an address. This defaults to
    :const:`False`, and can be set in subclasses to change the policy.
 
 
-.. data:: request_queue_size
+.. attribute:: BaseServer.request_queue_size
 
    The size of the request queue.  If it takes a long time to process a single
    request, any requests that arrive while the server is busy are placed into a
@@ -196,17 +202,19 @@
    value is usually 5, but this can be overridden by subclasses.
 
 
-.. data:: socket_type
+.. attribute:: BaseServer.socket_type
 
    The type of socket used by the server; :const:`socket.SOCK_STREAM` and
    :const:`socket.SOCK_DGRAM` are two common values.
 
-.. data:: timeout
+
+.. attribute:: BaseServer.timeout
 
    Timeout duration, measured in seconds, or :const:`None` if no timeout is
    desired.  If :meth:`handle_request` receives no incoming requests within the
    timeout period, the :meth:`handle_timeout` method is called.
 
+
 There are various server methods that can be overridden by subclasses of base
 server classes like :class:`TCPServer`; these methods aren't useful to external
 users of the server object.
@@ -214,27 +222,27 @@
 .. XXX should the default implementations of these be documented, or should
    it be assumed that the user will look at socketserver.py?
 
-
-.. function:: finish_request()
+.. method:: BaseServer.finish_request()
 
    Actually processes the request by instantiating :attr:`RequestHandlerClass` and
    calling its :meth:`handle` method.
 
 
-.. function:: get_request()
+.. method:: BaseServer.get_request()
 
    Must accept a request from the socket, and return a 2-tuple containing the *new*
    socket object to be used to communicate with the client, and the client's
    address.
 
 
-.. function:: handle_error(request, client_address)
+.. method:: BaseServer.handle_error(request, client_address)
 
    This function is called if the :attr:`RequestHandlerClass`'s :meth:`handle`
    method raises an exception.  The default action is to print the traceback to
    standard output and continue handling further requests.
 
-.. function:: handle_timeout()
+
+.. method:: BaseServer.handle_timeout()
 
    This function is called when the :attr:`timeout` attribute has been set to a
    value other than :const:`None` and the timeout period has passed with no
@@ -242,31 +250,32 @@
    to collect the status of any child processes that have exited, while
    in threading servers this method does nothing.
 
-.. function:: process_request(request, client_address)
+
+.. method:: BaseServer.process_request(request, client_address)
 
    Calls :meth:`finish_request` to create an instance of the
    :attr:`RequestHandlerClass`.  If desired, this function can create a new process
    or thread to handle the request; the :class:`ForkingMixIn` and
    :class:`ThreadingMixIn` classes do this.
 
+
 .. Is there any point in documenting the following two functions?
    What would the purpose of overriding them be: initializing server
    instance variables, adding new network families?
 
-
-.. function:: server_activate()
+.. method:: BaseServer.server_activate()
 
    Called by the server's constructor to activate the server.  The default behavior
    just :meth:`listen`\ s to the server's socket. May be overridden.
 
 
-.. function:: server_bind()
+.. method:: BaseServer.server_bind()
 
    Called by the server's constructor to bind the socket to the desired address.
    May be overridden.
 
 
-.. function:: verify_request(request, client_address)
+.. method:: BaseServer.verify_request(request, client_address)
 
    Must return a Boolean value; if the value is :const:`True`, the request will be
    processed, and if it's :const:`False`, the request will be denied. This function
@@ -282,14 +291,14 @@
 request.
 
 
-.. function:: finish()
+.. method:: RequestHandler.finish()
 
    Called after the :meth:`handle` method to perform any clean-up actions
    required.  The default implementation does nothing.  If :meth:`setup` or
    :meth:`handle` raise an exception, this function will not be called.
 
 
-.. function:: handle()
+.. method:: RequestHandler.handle()
 
    This function must do all the work required to service a request.  The
    default implementation does nothing.  Several instance attributes are
@@ -308,7 +317,7 @@
    data or return data to the client.
 
 
-.. function:: setup()
+.. method:: RequestHandler.setup()
 
    Called before the :meth:`handle` method to perform any initialization actions
    required.  The default implementation does nothing.
diff --git a/Doc/library/ssl.rst b/Doc/library/ssl.rst
index 10c33f9..928a262 100644
--- a/Doc/library/ssl.rst
+++ b/Doc/library/ssl.rst
@@ -293,7 +293,7 @@
    If there is no certificate for the peer on the other end of the
    connection, returns ``None``.
 
-   If the the parameter ``binary_form`` is :const:`False`, and a
+   If the parameter ``binary_form`` is :const:`False`, and a
    certificate was received from the peer, this method returns a
    :class:`dict` instance.  If the certificate was not validated, the
    dict is empty.  If the certificate was validated, it returns a dict
diff --git a/Doc/library/stdtypes.rst b/Doc/library/stdtypes.rst
index a51fb75..a8c3146 100644
--- a/Doc/library/stdtypes.rst
+++ b/Doc/library/stdtypes.rst
@@ -1834,6 +1834,11 @@
 
       Equivalent to ``not key in d``.
 
+   .. describe:: iter(d)
+
+      Return an iterator over the keys of the dictionary.  This is a shortcut
+      for :meth:`iterkeys`.
+
    .. method:: clear()
 
       Remove all items from the dictionary.
@@ -1931,6 +1936,9 @@
    using :func:`zip`: ``pairs = zip(d.values(), d.keys())``.  Another way to
    create the same list is ``pairs = [(v, k) for (k, v) in d.items()]``.
 
+   Iterating views while adding or deleting entries in the dictionary will raise
+   a :exc:`RuntimeError`.
+
 .. describe:: x in dictview
 
    Return ``True`` if *x* is in the underlying dictionary's keys, values or
@@ -2666,10 +2674,26 @@
    The name of the class or type.
 
 
+The following attributes are only supported by :term:`new-style class`\ es.
+
+.. attribute:: class.__mro__
+
+   This attribute is a tuple of classes that are considered when looking for
+   base classes during method resolution.
+
+
+.. method:: class.mro()
+
+   This method can be overridden by a metaclass to customize the method
+   resolution order for its instances.  It is called at class instantiation, and
+   its result is stored in :attr:`__mro__`.
+
+
 .. method:: class.__subclasses__
 
-   All classes keep a list of weak references to their immediate subclasses.
-   This method returns a list of all those references still alive.  Example::
+   Each new-style class keeps a list of weak references to its immediate
+   subclasses.  This method returns a list of all those references still alive.
+   Example::
 
       >>> int.__subclasses__()
       [<type 'bool'>]
diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst
index c29e7fe..29f3313 100644
--- a/Doc/library/sys.rst
+++ b/Doc/library/sys.rst
@@ -780,16 +780,20 @@
           __stderr__
 
    These objects contain the original values of ``stdin``, ``stderr`` and
-   ``stdout`` at the start of the program.  They are used during finalization, and
-   could be useful to restore the actual files to known working file objects in
-   case they have been overwritten with a broken object.
+   ``stdout`` at the start of the program.  They are used during finalization,
+   and could be useful to print to the actual standard stream no matter if the
+   ``sys.std*`` object has been redirected.
 
-  .. note::
+   It can also be used to restore the actual files to known working file objects
+   in case they have been overwritten with a broken object.  However, the
+   preferred way to do this is to explicitly save the previous stream before
+   replacing it, and restore the saved object.
 
-    Under some conditions ``stdin``, ``stdout`` and ``stderr`` as well as the
-    original values ``__stdin__``, ``__stdout__`` and ``__stderr__`` can be
-    None. It is usually the case for Windows GUI apps that aren't connected to
-    a console and Python apps started with :program:`pythonw`.
+   .. note::
+       Under some conditions ``stdin``, ``stdout`` and ``stderr`` as well as the
+       original values ``__stdin__``, ``__stdout__`` and ``__stderr__`` can be
+       None. It is usually the case for Windows GUI apps that aren't connected
+       to a console and Python apps started with :program:`pythonw`.
 
 
 .. data:: tracebacklimit
diff --git a/Doc/library/threading.rst b/Doc/library/threading.rst
index 6090568..12cf2e8 100644
--- a/Doc/library/threading.rst
+++ b/Doc/library/threading.rst
@@ -676,14 +676,20 @@
 
 .. method:: Event.wait([timeout])
 
-   Block until the internal flag is true. If the internal flag is true on entry,
-   return immediately.  Otherwise, block until another thread calls :meth:`set` to
-   set the flag to true, or until the optional timeout occurs.
+   Block until the internal flag is true.  If the internal flag is true on entry,
+   return immediately.  Otherwise, block until another thread calls :meth:`set`
+   to set the flag to true, or until the optional timeout occurs.
 
    When the timeout argument is present and not ``None``, it should be a floating
    point number specifying a timeout for the operation in seconds (or fractions
    thereof).
 
+   This method returns the internal flag on exit, so it will always return
+   ``True`` except if a timeout is given and the operation times out.
+
+   .. versionchanged:: 2.7
+      Previously, the method always returned ``None``.
+
 
 .. _timer-objects:
 
diff --git a/Doc/library/tkinter.ttk.rst b/Doc/library/tkinter.ttk.rst
index de4988a..69fc1bd 100644
--- a/Doc/library/tkinter.ttk.rst
+++ b/Doc/library/tkinter.ttk.rst
@@ -249,7 +249,7 @@
 ttk.Widget
 ^^^^^^^^^^
 
-Besides the methods described below, the class :class:`ttk.Widget` supports the
+Besides the methods described below, the :class:`ttk.Widget` supports the
 methods :meth:`tkinter.Widget.cget` and :meth:`tkinter.Widget.configure`.
 
 .. class:: Widget
@@ -484,7 +484,7 @@
 
       The tab will not be displayed, but the associated window remains
       managed by the notebook and its configuration remembered. Hidden tabs
-      may be restored with the add command.
+      may be restored with the :meth:`add` command.
 
 
    .. method:: identify(x, y)
@@ -503,7 +503,7 @@
 
       Inserts a pane at the specified position.
 
-      *pos* is either the string end, an integer index, or the name of a
+      *pos* is either the string "end", an integer index, or the name of a
       managed child. If *child* is already managed by the notebook, moves it to
       the specified position.
 
@@ -523,7 +523,7 @@
 
       Query or modify the options of the specific *tab_id*.
 
-      If *kw* is not given, returns a dict of the tab option values. If
+      If *kw* is not given, returns a dictionary of the tab option values. If
       *option* is specified, returns the value of that *option*. Otherwise,
       sets the options to the corresponding values.
 
@@ -540,14 +540,14 @@
       This will extend the bindings for the toplevel window containing the
       notebook as follows:
 
-      * Control-Tab: selects the tab following the currently selected one
-      * Shift-Control-Tab: selects the tab preceding the currently selected one
+      * Control-Tab: selects the tab following the currently selected one.
+      * Shift-Control-Tab: selects the tab preceding the currently selected one.
       * Alt-K: where K is the mnemonic (underlined) character of any tab, will
         select that tab.
 
       Multiple notebooks in a single toplevel may be enabled for traversal,
       including nested notebooks. However, notebook traversal only works
-      properly if all panes have as master the notebook they are in.
+      properly if all panes have the notebook they are in as master.
 
 
 Progressbar
@@ -580,12 +580,12 @@
    +----------+---------------------------------------------------------------+
    | value    | The current value of the progress bar. In "determinate" mode, |
    |          | this represents the amount of work completed. In              |
-   |          | "indeterminate" mode, it is interpreted as modulo maximum;    |
+   |          | "indeterminate" mode, it is interpreted as modulo *maximum*;  |
    |          | that is, the progress bar completes one "cycle" when its value|
-   |          | increases by maximum.                                         |
+   |          | increases by *maximum*.                                       |
    +----------+---------------------------------------------------------------+
    | variable | A name which is linked to the option value. If specified, the |
-   |          | value of the progressbar is automatically set to the value of |
+   |          | value of the progress bar is automatically set to the value of|
    |          | this name whenever the latter is modified.                    |
    +----------+---------------------------------------------------------------+
    | phase    | Read-only option. The widget periodically increments the value|
@@ -602,14 +602,14 @@
 
    .. method:: start([interval])
 
-      Begin autoincrement mode: schedules a recurring timer even that calls
+      Begin autoincrement mode: schedules a recurring timer event that calls
       :meth:`Progressbar.step` every *interval* milliseconds. If omitted,
       *interval* defaults to 50 milliseconds.
 
 
    .. method:: step([amount])
 
-      Increments progressbar's value by *amount*.
+      Increments the progress bar's value by *amount*.
 
       *amount* defaults to 1.0 if omitted.
 
@@ -617,7 +617,7 @@
    .. method:: stop()
 
       Stop autoincrement mode: cancels any recurring timer event initiated by
-      :meth:`Progressbar.start` for this progressbar.
+      :meth:`Progressbar.start` for this progress bar.
 
 
 Separator
@@ -626,7 +626,7 @@
 The :class:`ttk.Separator` widget displays a horizontal or vertical separator
 bar.
 
-It has no other method besides the ones inherited from :class:`ttk.Widget`.
+It has no other methods besides the ones inherited from :class:`ttk.Widget`.
 
 
 Options
@@ -645,18 +645,18 @@
 Sizegrip
 --------
 
-The :class:`ttk.Sizegrip` widget (also known as grow box) allows the user to
+The :class:`ttk.Sizegrip` widget (also known as a grow box) allows the user to
 resize the containing toplevel window by pressing and dragging the grip.
 
-This widget has no specific options neither specific methods, besides the
+This widget has neither specific options nor specific methods, besides the
 ones inherited from :class:`ttk.Widget`.
 
 
 Platform-specific notes
 ^^^^^^^^^^^^^^^^^^^^^^^
 
-* On Mac OSX, toplevel windows automatically include a built-in size grip
-  by default. Adding a Sizegrip there is harmless, since the built-in
+* On MacOS X, toplevel windows automatically include a built-in size grip
+  by default. Adding a :class:`Sizegrip` is harmless, since the built-in
   grip will just mask the widget.
 
 
@@ -664,8 +664,8 @@
 ^^^^
 
 * If the containing toplevel's position was specified relative to the right
-  or bottom of the screen (e.g. ....), the Sizegrip widget will not resize
-  the window.
+  or bottom of the screen (e.g. ....), the :class:`Sizegrip` widget will
+  not resize the window.
 * This widget supports only "southeast" resizing.
 
 
@@ -678,16 +678,16 @@
 label.
 
 The order in which data values are displayed may be controlled by setting
-the widget option displaycolumns. The tree widget can also display column
+the widget option ``displaycolumns``. The tree widget can also display column
 headings. Columns may be accessed by number or symbolic names listed in the
 widget option columns. See `Column Identifiers`_.
 
 Each item is identified by an unique name. The widget will generate item IDs
 if they are not supplied by the caller. There is a distinguished root item,
-named {}. The root item itself is not displayed; its children appear at the
+named ``{}``. The root item itself is not displayed; its children appear at the
 top level of the hierarchy.
 
-Each item also has a list of tags, which can be used to associate even bindings
+Each item also has a list of tags, which can be used to associate event bindings
 with individual items and control the appearance of the item.
 
 The Treeview widget supports horizontal and vertical scrolling, according to
@@ -698,7 +698,7 @@
 Options
 ^^^^^^^
 
-This widget accepts the following specific option:
+This widget accepts the following specific options:
 
    +----------------+--------------------------------------------------------+
    | option         | description                                            |
@@ -726,8 +726,8 @@
    |                | be changed.                                            |
    |                |                                                        |
    |                | Note that the application code and tag bindings can set|
-   |                | the selection however they wish, regardless the value  |
-   |                | of this option.                                        |
+   |                | the selection however they wish, regardless of the     |
+   |                | value  of this option.                                 |
    +----------------+--------------------------------------------------------+
    | show           | A list containing zero or more of the following values,|
    |                | specifying which elements of the tree to display.      |
@@ -738,7 +738,7 @@
    |                | The default is "tree headings", i.e., show all         |
    |                | elements.                                              |
    |                |                                                        |
-   |                | **Note**: Column #0 always refer to the tree column,   |
+   |                | **Note**: Column #0 always refers to the tree column,  |
    |                | even if show="tree" is not specified.                  |
    +----------------+--------------------------------------------------------+
 
@@ -858,11 +858,11 @@
 
    .. method:: set_children(item, *newchildren)
 
-      Replaces item's child with *newchildren*.
+      Replaces *item*'s child with *newchildren*.
 
-      Children present in item that are not present in *newchildren* are
-      detached from tree. No items in *newchildren* may be an ancestor of
-      item. Note that not specifying *newchildren* results in detaching
+      Children present in *item* that are not present in *newchildren* are
+      detached from the tree. No items in *newchildren* may be an ancestor of
+      *item*. Note that not specifying *newchildren* results in detaching
       *item*'s children.
 
 
@@ -877,16 +877,16 @@
       The valid options/values are:
 
       * id
-         Returns the column name, this is a read-only option.
+         Returns the column name. This is a read-only option.
       * anchor: One of the standard Tk anchor values.
          Specifies how the text in this column should be aligned with respect
          to the cell.
       * minwidth: width
          The minimum width of the column in pixels. The treeview widget will
-         not make the column any smaller than the specified by this option when
+         not make the column any smaller than specified by this option when
          the widget is resized or the user drags a column.
       * stretch: True/False
-         Specifies wheter or not the column's width should be adjusted when
+         Specifies whether the column's width should be adjusted when
          the widget is resized.
       * width: width
          The width of the column in pixels.
@@ -912,8 +912,7 @@
 
    .. method:: exists(item)
 
-      Returns True if the specified *item* is present in the three,
-      False otherwise.
+      Returns True if the specified *item* is present in the tree.
 
 
    .. method:: focus([item=None])
@@ -942,7 +941,7 @@
       * command: callback
          A callback to be invoked when the heading label is pressed.
 
-      To configure the tree column heading, call this with column = "#0"
+      To configure the tree column heading, call this with column = "#0".
 
 
    .. method:: identify(component, x, y)
@@ -985,7 +984,7 @@
 
    .. method:: identify_element(x, y)
 
-      Returns the element at position x, y.
+      Returns the element at position *x*, *y*.
 
       Availability: Tk 8.6.
 
@@ -997,16 +996,16 @@
 
    .. method:: insert(parent, index[, iid=None[, **kw]])
 
-      Creates a new item and return the item identifier of the newly created
+      Creates a new item and returns the item identifier of the newly created
       item.
 
       *parent* is the item ID of the parent item, or the empty string to create
       a new top-level item. *index* is an integer, or the value "end",
       specifying where in the list of parent's children to insert the new item.
       If *index* is less than or equal to zero, the new node is inserted at
-      the beginning, if *index* is greater than or equal to the current number
+      the beginning; if *index* is greater than or equal to the current number
       of children, it is inserted at the end. If *iid* is specified, it is used
-      as the item identifier, *iid* must not already exist in the tree.
+      as the item identifier; *iid* must not already exist in the tree.
       Otherwise, a new unique identifier is generated.
 
       See `Item Options`_ for the list of available points.
@@ -1026,9 +1025,9 @@
 
       Moves *item* to position *index* in *parent*'s list of children.
 
-      It is illegal to move an item under one of its descendants. If index is
-      less than or equal to zero, item is moved to the beginning, if greater
-      than or equal to the number of children, it is moved to the end. If item
+      It is illegal to move an item under one of its descendants. If *index* is
+      less than or equal to zero, *item* is moved to the beginning; if greater
+      than or equal to the number of children, it is moved to the end. If *item*
       was detached it is reattached.
 
 
@@ -1101,7 +1100,7 @@
    .. method:: tag_bind(tagname[, sequence=None[, callback=None]])
 
       Bind a callback for the given event *sequence* to the tag *tagname*.
-      When an event is delivered to an item, the *callbacks* for each of the
+      When an event is delivered to an item, the callbacks for each of the
       item's tags option are called.
 
 
@@ -1119,7 +1118,7 @@
 
       If *item* is specified, returns 1 or 0 depending on whether the specified
       *item* has the given *tagname*. Otherwise, returns a list of all items
-      which have the specified tag.
+      that have the specified tag.
 
       Availability: Tk 8.6
 
@@ -1159,7 +1158,7 @@
 
    .. method:: configure(style, query_opt=None, **kw)
 
-      Query or sets the default value of the specified option(s) in *style*.
+      Query or set the default value of the specified option(s) in *style*.
 
       Each key in *kw* is an option and each value is a string identifying
       the value for that option.
@@ -1185,10 +1184,10 @@
 
       Query or sets dynamic values of the specified option(s) in *style*.
 
-      Each key in kw is an option and each value should be a list or a
-      tuple (usually) containing statespecs grouped in tuples, or list, or
-      something else of your preference. A statespec is compound of one or more
-      states and then a value.
+      Each key in *kw* is an option and each value should be a list or a
+      tuple (usually) containing statespecs grouped in tuples, lists, or
+      something else of your preference. A statespec is a compound of one
+      or more states and then a value.
 
       An example may make it more understandable::
 
@@ -1208,12 +1207,10 @@
          root.mainloop()
 
 
-      There is a thing to note in this previous short example:
-
-       * The order of the (states, value) sequences for an option does matter,
-         if you changed the order to [('active', 'blue'), ('pressed', 'red')]
-         in the foreground option, for example, you would get a blue foreground
-         when the widget were in active or pressed states.
+      Note that the order of the (states, value) sequences for an option does
+      matter, if you changed the order to ``[('active', 'blue'), ('pressed',
+      'red')]`` in the foreground option, for example, you would get a blue
+      foreground when the widget were in active or pressed states.
 
 
    .. method:: lookup(style, option[, state=None[, default=None]])
@@ -1236,13 +1233,13 @@
       Define the widget layout for given *style*. If *layoutspec* is omitted,
       return the layout specification for given style.
 
-      *layoutspec*, if specified, is expected to be a list, or some other
-      sequence type (excluding string), where each item should be a tuple and
+      *layoutspec*, if specified, is expected to be a list or some other
+      sequence type (excluding strings), where each item should be a tuple and
       the first item is the layout name and the second item should have the
       format described described in `Layouts`_.
 
-      To understand the format, check this example below (it is not intended
-      to do anything useful)::
+      To understand the format, see the following example (it is not
+      intended to do anything useful)::
 
          from tkinter import ttk
          import tkinter
@@ -1268,12 +1265,12 @@
 
    .. method:: element_create(elementname, etype, *args, **kw)
 
-      Create a new element in the current theme of given *etype* which is
+      Create a new element in the current theme, of the given *etype* which is
       expected to be either "image", "from" or "vsapi". The latter is only
       available in Tk 8.6a for Windows XP and Vista and is not described here.
 
       If "image" is used, *args* should contain the default image name followed
-      by statespec/value pairs (this is the imagespec), *kw* may have the
+      by statespec/value pairs (this is the imagespec), and *kw* may have the
       following options:
 
        * border=padding
@@ -1296,11 +1293,12 @@
           Specifies a minimum width for the element. If less than zero, the
           base image's width is used as a default.
 
-      But if "from" is used, then :meth:`element_create` will clone an existing
-      element. *args* is expected to contain a themename, which is from where
+      If "from" is used as the value of *etype*,
+      :meth:`element_create` will clone an existing
+      element. *args* is expected to contain a themename, from which
       the element will be cloned, and optionally an element to clone from.
       If this element to clone from is not specified, an empty element will
-      be used. *kw* is discarded here.
+      be used. *kw* is discarded.
 
 
    .. method:: element_names()
@@ -1334,7 +1332,7 @@
       :meth:`Style.configure`, :meth:`Style.map`, :meth:`Style.layout` and
       :meth:`Style.element_create` respectively.
 
-      As an example, lets change the Combobox for the default theme a bit::
+      As an example, let's change the Combobox for the default theme a bit::
 
          from tkinter import ttk
          import tkinter
@@ -1367,7 +1365,7 @@
 
    .. method:: theme_use([themename])
 
-      If *themename* is not given, returns the theme in use, otherwise, set
+      If *themename* is not given, returns the theme in use.  Otherwise, sets
       the current theme to *themename*, refreshes all widgets and emits a
       <<ThemeChanged>> event.
 
@@ -1375,13 +1373,14 @@
 Layouts
 ^^^^^^^
 
-A layout can be just None, if takes no options, or a dict of options specifying
-how to arrange the element. The layout mechanism uses a simplified
-version of the pack geometry manager: given an initial cavity, each element is
-allocated a parcel. Valid options/values are:
+A layout can be just None, if it takes no options, or a dict of
+options specifying how to arrange the element. The layout mechanism
+uses a simplified version of the pack geometry manager: given an
+initial cavity, each element is allocated a parcel. Valid
+options/values are:
 
  * side: whichside
-    Specifies which side of the cavity to place the the element; one of
+    Specifies which side of the cavity to place the element; one of
     top, right, bottom or left. If omitted, the element occupies the
     entire cavity.
 
diff --git a/Doc/library/urllib.request.rst b/Doc/library/urllib.request.rst
index f8cd439..fdf6c8a 100644
--- a/Doc/library/urllib.request.rst
+++ b/Doc/library/urllib.request.rst
@@ -40,7 +40,7 @@
      commonly used to determine if a redirect was followed
 
    * :meth:`info` --- return the meta-information of the page, such as headers,
-     in the form of an ``http.client.HTTPMessage`` instance (see `Quick
+     in the form of an :class:`http.client.HTTPMessage` instance (see `Quick
      Reference to HTTP Headers <http://www.cs.tut.fi/~jkorpela/http.html>`_)
 
    Raises :exc:`URLError` on errors.
diff --git a/Doc/library/webbrowser.rst b/Doc/library/webbrowser.rst
index c42283f..380080b 100644
--- a/Doc/library/webbrowser.rst
+++ b/Doc/library/webbrowser.rst
@@ -55,6 +55,10 @@
    under many window managers this will occur regardless of the setting of this
    variable).
 
+   Note that on some platforms, trying to open a filename using this function,
+   may work and start the operating system's associated program.  However, this
+   is neither supported nor portable.
+
 
 .. function:: open_new(url)
 
diff --git a/Doc/library/winreg.rst b/Doc/library/winreg.rst
index f349fdf..f42e7f2 100644
--- a/Doc/library/winreg.rst
+++ b/Doc/library/winreg.rst
@@ -39,8 +39,8 @@
 
    *key* is the predefined handle to connect to.
 
-   The return value is the handle of the opened key. If the function fails, an
-   :exc:`EnvironmentError` exception is  raised.
+   The return value is the handle of the opened key. If the function fails, a
+   :exc:`WindowsError` exception is  raised.
 
 
 .. function:: CreateKey(key, sub_key)
@@ -57,8 +57,8 @@
 
    If the key already exists, this function opens the existing key.
 
-   The return value is the handle of the opened key. If the function fails, an
-   :exc:`EnvironmentError` exception is  raised.
+   The return value is the handle of the opened key. If the function fails, a
+   :exc:`WindowsError` exception is  raised.
 
 
 .. function:: DeleteKey(key, sub_key)
@@ -74,7 +74,7 @@
    *This method can not delete keys with subkeys.*
 
    If the method succeeds, the entire key, including all of its values, is removed.
-   If the method fails, an :exc:`EnvironmentError`  exception is raised.
+   If the method fails, a :exc:`WindowsError`  exception is raised.
 
 
 .. function:: DeleteValue(key, value)
@@ -97,7 +97,7 @@
    *index* is an integer that identifies the index of the key to  retrieve.
 
    The function retrieves the name of one subkey each time it  is called.  It is
-   typically called repeatedly until an  :exc:`EnvironmentError` exception  is
+   typically called repeatedly until a  :exc:`WindowsError` exception  is
    raised, indicating, no more values are available.
 
 
@@ -111,7 +111,7 @@
    *index* is an integer that identifies the index of the value  to retrieve.
 
    The function retrieves the name of one subkey each time it is  called. It is
-   typically called repeatedly, until an  :exc:`EnvironmentError` exception is
+   typically called repeatedly, until a  :exc:`WindowsError` exception is
    raised, indicating  no more values.
 
    The result is a tuple of 3 items:
@@ -199,7 +199,7 @@
 
    The result is a new handle to the specified key.
 
-   If the function fails, :exc:`EnvironmentError` is raised.
+   If the function fails, :exc:`WindowsError` is raised.
 
 
 .. function:: OpenKeyEx()
@@ -243,9 +243,10 @@
    associated.  If this parameter is ``None`` or empty, the  function retrieves the
    value set by the :func:`SetValue` method  for the key identified by *key*.
 
-   Values in the registry have name, type, and data components. This  method
+   Values in the registry have name, type, and data components. This method
    retrieves the data for a key's first value that has a NULL name. But the
-   underlying API call doesn't return the type, Lame Lame Lame, DO NOT USE THIS!!!
+   underlying API call doesn't return the type, so always use
+   :func:`QueryValueEx` if possible.
 
 
 .. function:: QueryValueEx(key, value_name)
