diff --git a/Doc/about.rst b/Doc/about.rst
index d3ce2dd..a5adf07 100644
--- a/Doc/about.rst
+++ b/Doc/about.rst
@@ -18,8 +18,8 @@
 
 * Fred L. Drake, Jr., the creator of the original Python documentation toolset
   and writer of much of the content;
-* the `docutils <http://docutils.sf.net/>`_ project for creating
-  reStructuredText and the docutils suite;
+* the `Docutils <http://docutils.sf.net/>`_ project for creating
+  reStructuredText and the Docutils suite;
 * Fredrik Lundh for his `Alternative Python Reference
   <http://effbot.org/zone/pyref.htm>`_ project from which Sphinx got many good
   ideas.
diff --git a/Doc/bugs.rst b/Doc/bugs.rst
index 9abe50c..9977abd 100644
--- a/Doc/bugs.rst
+++ b/Doc/bugs.rst
@@ -37,7 +37,7 @@
 "Type" field, select the type of your problem; also select the "Component" and
 "Versions" to which the bug relates.
 
-In the "Change Note" field, describe the problem in detail, including what you
+In the "Comment" field, describe the problem in detail, including what you
 expected to happen and what did happen.  Be sure to include whether any
 extension modules were involved, and what hardware and software platform you
 were using (including version information as appropriate).
diff --git a/Doc/c-api/long.rst b/Doc/c-api/long.rst
index d83a8fe..b0debe3 100644
--- a/Doc/c-api/long.rst
+++ b/Doc/c-api/long.rst
@@ -52,14 +52,14 @@
 
 .. cfunction:: PyObject* PyLong_FromSsize_t(Py_ssize_t v)
 
-   Return a new :ctype:`PyLongObject` object with a value of *v*, or *NULL*
-   on failure.
+   Return a new :ctype:`PyLongObject` object from a C :ctype:`Py_ssize_t`, or
+   *NULL* on failure.
 
 
 .. cfunction:: PyObject* PyLong_FromSize_t(size_t v)
 
-   Return a new :ctype:`PyLongObject` object with a value of *v*, or *NULL*
-   on failure.
+   Return a new :ctype:`PyLongObject` object from a C :ctype:`size_t`, or
+   *NULL* on failure.
 
 
 .. cfunction:: PyObject* PyLong_FromLongLong(PY_LONG_LONG v)
@@ -127,6 +127,17 @@
    If an exception is set because of type errors, also return -1.
 
 
+.. cfunction:: Py_ssize_t PyLong_AsSsize_t(PyObject *pylong)
+
+   .. index::
+      single: PY_SSIZE_T_MAX
+      single: OverflowError (built-in exception)
+
+   Return a C :ctype:`Py_ssize_t` representation of the contents of *pylong*.  If
+   *pylong* is greater than :const:`PY_SSIZE_T_MAX`, an :exc:`OverflowError` is raised
+   and ``-1`` will be returned.
+
+
 .. cfunction:: unsigned long PyLong_AsUnsignedLong(PyObject *pylong)
 
    .. index::
diff --git a/Doc/c-api/number.rst b/Doc/c-api/number.rst
index 6c73bfa..187fe73 100644
--- a/Doc/c-api/number.rst
+++ b/Doc/c-api/number.rst
@@ -259,6 +259,17 @@
    TypeError exception raised on failure.
 
 
+.. cfunction:: PyObject* PyNumber_ToBase(PyObject *n, int base)
+
+   Returns the the integer *n* converted to *base* as a string with a base
+   marker of ``'0b'``, ``'0o'``, or ``'0x'`` if appended applicable.  When
+   *base* is not 2, 8, 10, or 16, the format is ``'x#num'`` where x is the
+   base. If *n* is not an int object, it is converted with
+   :cfunc:`PyNumber_Index` first.
+
+   .. versionadded:: 2.6
+
+
 .. cfunction:: Py_ssize_t PyNumber_AsSsize_t(PyObject *o, PyObject *exc)
 
    Returns *o* converted to a Py_ssize_t value if *o* can be interpreted as an
diff --git a/Doc/distutils/builtdist.rst b/Doc/distutils/builtdist.rst
index cd2bd81..c4b8dbf 100644
--- a/Doc/distutils/builtdist.rst
+++ b/Doc/distutils/builtdist.rst
@@ -426,6 +426,13 @@
    also the configuration.  For details refer to Microsoft's documentation of the
    :cfunc:`SHGetSpecialFolderPath` function.
 
+Vista User Access Control (UAC)
+===============================
+
+Starting with Python 2.6, bdist_wininst supports a :option:`--user-access-control`
+option.  The default is 'none' (meaning no UAC handling is done), and other
+valid values are 'auto' (meaning prompt for UAC elevation if Python was
+installed for all users) and 'force' (meaning always prompt for elevation)
 
 .. function:: create_shortcut(target, description, filename[, arguments[, workdir[, iconpath[, iconindex]]]])
 
@@ -437,5 +444,3 @@
    and *iconindex* is the index of the icon in the file *iconpath*.  Again, for
    details consult the Microsoft documentation for the :class:`IShellLink`
    interface.
-
-
diff --git a/Doc/library/carbon.rst b/Doc/library/carbon.rst
index ecaf3bb..886fa82 100644
--- a/Doc/library/carbon.rst
+++ b/Doc/library/carbon.rst
@@ -70,7 +70,7 @@
 
 .. module:: Carbon.CG
    :platform: Mac
-   :synopsis: Interface to the Component Manager.
+   :synopsis: Interface to Core Graphics.
 
 
 
diff --git a/Doc/library/ctypes.rst b/Doc/library/ctypes.rst
index 8d38050..6968f42 100644
--- a/Doc/library/ctypes.rst
+++ b/Doc/library/ctypes.rst
@@ -1948,6 +1948,28 @@
    exact, they are methods of the :term:`metaclass`):
 
 
+   .. method:: _CData.from_buffer(source[, offset])
+
+      This method returns a ctypes instance that shares the buffer of
+      the ``source`` object.  The ``source`` object must support the
+      writeable buffer interface.  The optional ``offset`` parameter
+      specifies an offset into the source buffer in bytes; the default
+      is zero.  If the source buffer is not large enough a ValueError
+      is raised.
+
+      .. versionadded:: 2.6
+
+   .. method:: _CData.from_buffer_copy(source[, offset])
+
+      This method creates a ctypes instance, the buffer is copied from
+      the source object buffer which must be readable.  The optional
+      ``offset`` parameter specifies an offset into the source buffer
+      in bytes; the default is zero.  If the source buffer is not
+      large enough a ValueError is raised.
+
+      .. versionadded:: 2.6
+
+
    .. method:: from_address(address)
 
       This method returns a ctypes type instance using the memory specified by
diff --git a/Doc/library/getpass.rst b/Doc/library/getpass.rst
index bd384b4..91c811b 100644
--- a/Doc/library/getpass.rst
+++ b/Doc/library/getpass.rst
@@ -14,11 +14,27 @@
 
    Prompt the user for a password without echoing.  The user is prompted using the
    string *prompt*, which defaults to ``'Password: '``. On Unix, the prompt is
-   written to the file-like object *stream*, which defaults to ``sys.stdout`` (this
-   argument is ignored on Windows).
+   written to the file-like object *stream*.  *stream* defaults to the
+   controlling terminal (/dev/tty) or if that is unavailable to ``sys.stderr``
+   (this argument is ignored on Windows).
+
+   If echo free input is unavailable getpass() falls back to printing
+   a warning message to *stream* and reading from ``sys.stdin`` and
+   issuing a :exc:`GetPassWarning`.
 
    Availability: Macintosh, Unix, Windows.
 
+   .. versionchanged:: 2.6
+      On Unix it defaults to using /dev/tty before falling back
+      to ``sys.stdin`` and ``sys.stderr``.
+   .. note::
+      If you call getpass from within IDLE, the input may be done in the
+      terminal you launched IDLE from rather than the idle window itself.
+
+.. exception:: GetPassWarning
+
+   A :exc:`UserWarning` subclass issued when password input may be echoed.
+
 
 .. function:: getuser()
 
diff --git a/Doc/library/io.rst b/Doc/library/io.rst
index d0f82a3..d80d265 100644
--- a/Doc/library/io.rst
+++ b/Doc/library/io.rst
@@ -222,7 +222,7 @@
 
    .. method:: fileno()
 
-      Return the underlying file descriptor (an integer) of the stream, if it
+      Return the underlying file descriptor (an integer) of the stream if it
       exists.  An :exc:`IOError` is raised if the IO object does not use a file
       descriptor.
 
@@ -233,18 +233,18 @@
 
    .. method:: isatty()
 
-      Returns ``True`` if the stream is interactive (i.e., connected to
+      Return ``True`` if the stream is interactive (i.e., connected to
       a terminal/tty device).
 
    .. method:: readable()
 
-      Returns ``True`` if the stream can be read from.  If False,
-      :meth:`read` will raise :exc:`IOError`.
+      Return ``True`` if the stream can be read from.  If False, :meth:`read`
+      will raise :exc:`IOError`.
 
    .. method:: readline([limit])
 
-      Reads and returns one line from the stream.  If *limit* is
-      specified, at most *limit* bytes will be read.
+      Read and return one line from the stream.  If *limit* is specified, at
+      most *limit* bytes will be read.
 
       The line terminator is always ``b'\n'`` for binary files; for text files,
       the *newlines* argument to :func:`open` can be used to select the line
@@ -252,9 +252,9 @@
 
    .. method:: readlines([hint])
 
-      Returns a list of lines from the stream.  *hint* can be specified to
-      control the number of lines read: no more lines will be read if the total
-      size (in bytes/characters) of all lines so far exceeds *hint*.
+      Read and return a list of lines from the stream.  *hint* can be specified
+      to control the number of lines read: no more lines will be read if the
+      total size (in bytes/characters) of all lines so far exceeds *hint*.
 
    .. method:: seek(offset[, whence])
 
@@ -266,33 +266,32 @@
       * ``1`` -- current stream position; *offset* may be negative
       * ``2`` -- end of the stream; *offset* is usually negative
 
-      Returns the new absolute position.
+      Return the new absolute position.
 
    .. method:: seekable()
 
-      Returns ``True`` if the stream supports random access.  If
-      ``False``, :meth:`seek`, :meth:`tell` and :meth:`truncate` will
-      raise :exc:`IOError`.
+      Return ``True`` if the stream supports random access.  If ``False``,
+      :meth:`seek`, :meth:`tell` and :meth:`truncate` will raise :exc:`IOError`.
 
    .. method:: tell()
 
-      Returns the current stream position.
+      Return the current stream position.
 
    .. method:: truncate([size])
 
-      Truncates the file to at most *size* bytes.  *size* defaults to the current
+      Truncate the file to at most *size* bytes.  *size* defaults to the current
       file position, as returned by :meth:`tell`.
 
    .. method:: writable()
 
-      Returns ``True`` if the stream supports writing.  If ``False``,
+      Return ``True`` if the stream supports writing.  If ``False``,
       :meth:`write` and :meth:`truncate` will raise :exc:`IOError`.
 
    .. method:: writelines(lines)
 
-      Writes a list of lines to the stream.  Line separators are not
-      added, so it is usual for each of the lines provided to have a
-      line separator at the end.
+      Write a list of lines to the stream.  Line separators are not added, so it
+      is usual for each of the lines provided to have a line separator at the
+      end.
 
 
 .. class:: RawIOBase
@@ -305,27 +304,26 @@
 
    .. method:: read([n])
 
-      Reads and returns all the bytes from the stream until EOF, or if *n* is
-      specified, up to *n* bytes.  An empty bytes object is returned on EOF;
-      ``None`` is returned if the object is set not to block and has no data to
-      read.
+      Read and return all the bytes from the stream until EOF, or if *n* is
+      specified, up to *n* bytes.  Only one system call is ever made.  An empty
+      bytes object is returned on EOF; ``None`` is returned if the object is set
+      not to block and has no data to read.
 
    .. method:: readall()
 
-      Reads and returns all the bytes from the stream until EOF, using
-      multiple calls to the stream if necessary.
+      Read and return all the bytes from the stream until EOF, using multiple
+      calls to the stream if necessary.
 
    .. method:: readinto(b)
 
-      Reads up to len(b) bytes into bytearray *b* and returns the number
-      of bytes read.
+      Read up to len(b) bytes into bytearray *b* and return the number of bytes
+      read.
 
    .. method:: write(b)
 
-      Writes the given bytes or bytearray object, *b*, to the underlying
-      raw stream and returns the number of bytes written (never less
-      than ``len(b)``, since if the write fails an :exc:`IOError` will
-      be raised).
+      Write the given bytes or bytearray object, *b*, to the underlying raw
+      stream and return the number of bytes written (This is never less than
+      ``len(b)``, since if the write fails, an :exc:`IOError` will be raised).
 
 
 Raw File I/O
@@ -352,22 +350,21 @@
 
    .. attribute:: name
 
-      The file name.
+      The file name.  This is the file descriptor of the file when no name is
+      given in the constructor.
 
    .. method:: read([n])
 
-      Reads and returns at most *n* bytes.  Only one system call is made, so
-      it is possible that less data than was requested is returned. Call
-      :func:`len` on the returned bytes object to see how many bytes
-      were actually returned (In non-blocking mode, ``None`` is returned
-      when no data is available.)
+      Read and return at most *n* bytes.  Only one system call is made, so it is
+      possible that less data than was requested is returned.  Use :func:`len`
+      on the returned bytes object to see how many bytes were actually returned.
+      (In non-blocking mode, ``None`` is returned when no data is available.)
 
    .. method:: readall()
 
-      Reads and returns the entire file's contents in a single bytes
-      object.  As much as immediately available is returned in
-      non-blocking mode.  If the EOF has been reached, ``b''`` is
-      returned.
+      Read and return the entire file's contents in a single bytes object.  As
+      much as immediately available is returned in non-blocking mode.  If the
+      EOF has been reached, ``b''`` is returned.
 
    .. method:: write(b)
 
@@ -405,7 +402,7 @@
 
    .. method:: read([n])
 
-      Reads and returns up to *n* bytes.  If the argument is omitted, ``None``, or
+      Read and return up to *n* bytes.  If the argument is omitted, ``None``, or
       negative, data is read and returned until EOF is reached.  An empty bytes
       object is returned if the stream is already at EOF.
 
@@ -420,7 +417,7 @@
 
    .. method:: readinto(b)
 
-      Reads up to len(b) bytes into bytearray *b* and returns the number of bytes
+      Read up to len(b) bytes into bytearray *b* and return the number of bytes
       read.
 
       Like :meth:`read`, multiple reads may be issued to the underlying raw
@@ -431,10 +428,9 @@
 
    .. method:: write(b)
 
-      Writes the given bytes or bytearray object, *b*, to the underlying
-      raw stream and returns the number of bytes written (never less than
-      ``len(b)``, since if the write fails an :exc:`IOError` will
-      be raised).
+      Write the given bytes or bytearray object, *b*, to the underlying raw
+      stream and return the number of bytes written (never less than ``len(b)``,
+      since if the write fails an :exc:`IOError` will be raised).
 
       A :exc:`BlockingIOError` is raised if the buffer is full, and the
       underlying raw stream cannot accept more data at the moment.
@@ -452,8 +448,7 @@
 
    .. method:: getvalue()
 
-      Returns a bytes object containing the entire contents of the
-      buffer.
+      Return ``bytes`` containing the entire contents of the buffer.
 
    .. method:: read1()
 
@@ -461,8 +456,8 @@
 
    .. method:: truncate([size])
 
-      Truncates the buffer to at most *size* bytes.  *size* defaults to the current
-      stream position, as returned by :meth:`tell`.
+      Truncate the buffer to at most *size* bytes.  *size* defaults to the
+      current stream position, as returned by :meth:`tell`.
 
 
 .. class:: BufferedReader(raw[, buffer_size])
@@ -479,20 +474,20 @@
 
    .. method:: peek([n])
 
-      Returns 1 (or *n* if specified) bytes from a buffer without
-      advancing the position.  Only a single read on the raw stream is done to
-      satisfy the call. The number of bytes returned may be less than
-      requested since at most all the buffer's bytes from the current
-      position to the end are returned.
+      Return 1 (or *n* if specified) bytes from a buffer without advancing the
+      position.  Only a single read on the raw stream is done to satisfy the
+      call. The number of bytes returned may be less than requested since at
+      most all the buffer's bytes from the current position to the end are
+      returned.
 
    .. method:: read([n])
 
-      Reads and returns *n* bytes, or if *n* is not given or negative, until EOF
+      Read and return *n* bytes, or if *n* is not given or negative, until EOF
       or if the read call would block in non-blocking mode.
 
    .. method:: read1(n)
 
-      Reads and returns up to *n* bytes with only one call on the raw stream.  If
+      Read and return up to *n* bytes with only one call on the raw stream.  If
       at least one byte is buffered, only buffered bytes are returned.
       Otherwise, one raw stream read call is made.
 
@@ -517,9 +512,9 @@
 
    .. method:: write(b)
 
-      Writes the bytes or bytearray object, *b*, onto the raw stream and
-      returns the number of bytes written.  A :exc:`BlockingIOError` is
-      raised when the raw stream blocks.
+      Write the bytes or bytearray object, *b*, onto the raw stream and return
+      the number of bytes written.  A :exc:`BlockingIOError` is raised when the
+      raw stream blocks.
 
 
 .. class:: BufferedRWPair(reader, writer[, buffer_size[, max_buffer_size]])
@@ -576,18 +571,18 @@
 
    .. method:: read(n)
 
-      Reads and returns at most *n* characters from the stream as a
-      single :class:`str`.  If *n* is negative or ``None``, reads to EOF.
+      Read and return at most *n* characters from the stream as a single
+      :class:`str`.  If *n* is negative or ``None``, reads to EOF.
 
    .. method:: readline()
 
-      Reads until newline or EOF and returns a single :class:`str`.  If
-      the stream is already at EOF, an empty string is returned.
+      Read until newline or EOF and return a single ``str``.  If the stream is
+      already at EOF, an empty string is returned.
 
    .. method:: write(s)
 
-      Writes the string *s* to the stream and returns the number of
-      characters written.
+      Write the string *s* to the stream and return the number of characters
+      written.
 
 
 .. class:: TextIOWrapper(buffer[, encoding[, errors[, newline[, line_buffering]]]])
@@ -646,7 +641,7 @@
 
    .. method:: getvalue()
 
-      Returns a :class:`str` containing the entire contents of the buffer.
+      Return a ``str`` containing the entire contents of the buffer.
 
 
 .. class:: IncrementalNewlineDecoder
diff --git a/Doc/library/optparse.rst b/Doc/library/optparse.rst
index 7903ae8..3bdfab4 100644
--- a/Doc/library/optparse.rst
+++ b/Doc/library/optparse.rst
@@ -1633,7 +1633,7 @@
 
    [...]
    parser.add_option("-c", "--callback",
-                     action="callback", callback=varargs)
+                     action="callback", callback=vararg_callback)
 
 The main weakness with this particular implementation is that negative numbers
 in the arguments following ``"-c"`` will be interpreted as further options
diff --git a/Doc/library/pkgutil.rst b/Doc/library/pkgutil.rst
index 72daa84..48d53e3 100644
--- a/Doc/library/pkgutil.rst
+++ b/Doc/library/pkgutil.rst
@@ -42,13 +42,13 @@
 
    Get a resource from a package.
 
-   This is a wrapper round the PEP 302 loader :func:`get_data` API. The package
+   This is a wrapper for the PEP 302 loader :func:`get_data` API. The package
    argument should be the name of a package, in standard module format
    (foo.bar). The resource argument should be in the form of a relative
    filename, using ``/`` as the path separator. The parent directory name
    ``..`` is not allowed, and nor is a rooted name (starting with a ``/``).
 
-   The function returns a binary string, which is the contents of the
+   The function returns a binary string that is the contents of the
    specified resource.
 
    For packages located in the filesystem, which have already been imported,
diff --git a/Doc/library/pyclbr.rst b/Doc/library/pyclbr.rst
index 788c60c..a5d8494 100644
--- a/Doc/library/pyclbr.rst
+++ b/Doc/library/pyclbr.rst
@@ -7,75 +7,75 @@
 .. sectionauthor:: Fred L. Drake, Jr. <fdrake@acm.org>
 
 
-The :mod:`pyclbr` can be used to determine some limited information about the
-classes, methods and top-level functions defined in a module.  The information
-provided is sufficient to implement a traditional three-pane class browser.  The
-information is extracted from the source code rather than by importing the
-module, so this module is safe to use with untrusted source code.  This
-restriction makes it impossible to use this module with modules not implemented
-in Python, including many standard and optional extension modules.
+The :mod:`pyclbr` module can be used to determine some limited information
+about the classes, methods and top-level functions defined in a module.  The
+information provided is sufficient to implement a traditional three-pane
+class browser.  The information is extracted from the source code rather
+than by importing the module, so this module is safe to use with untrusted
+code.  This restriction makes it impossible to use this module with modules
+not implemented in Python, including all standard and optional extension
+modules.
 
 
-.. function:: readmodule(module[, path])
+.. function:: readmodule(module[, path=None])
 
-   Read a module and return a dictionary mapping class names to class descriptor
-   objects.  The parameter *module* should be the name of a module as a string;
-   it may be the name of a module within a package.  The *path* parameter should
-   be a sequence, and is used to augment the value of ``sys.path``, which is
-   used to locate module source code.
-
-   .. The 'inpackage' parameter appears to be for internal use only....
+   Read a module and return a dictionary mapping class names to class
+   descriptor objects.  The parameter *module* should be the name of a
+   module as a string; it may be the name of a module within a package.  The
+   *path* parameter should be a sequence, and is used to augment the value
+   of ``sys.path``, which is used to locate module source code.
 
 
-.. function:: readmodule_ex(module[, path])
+.. function:: readmodule_ex(module[, path=None])
 
-   Like :func:`readmodule`, but the returned dictionary, in addition to mapping
-   class names to class descriptor objects, also maps top-level function names to
-   function descriptor objects.  Moreover, if the module being read is a package,
-   the key ``'__path__'`` in the returned dictionary has as its value a list which
-   contains the package search path.
-
-   .. The 'inpackage' parameter appears to be for internal use only....
+   Like :func:`readmodule`, but the returned dictionary, in addition to
+   mapping class names to class descriptor objects, also maps top-level
+   function names to function descriptor objects.  Moreover, if the module
+   being read is a package, the key ``'__path__'`` in the returned
+   dictionary has as its value a list which contains the package search
+   path.
 
 
 .. _pyclbr-class-objects:
 
-Class Descriptor Objects
-------------------------
+Class Objects
+-------------
 
-The class descriptor objects used as values in the dictionary returned by
-:func:`readmodule` and :func:`readmodule_ex` provide the following data members:
+The :class:`Class` objects used as values in the dictionary returned by
+:func:`readmodule` and :func:`readmodule_ex` provide the following data
+members:
 
 
-.. attribute:: class_descriptor.module
+.. attribute:: Class.module
 
    The name of the module defining the class described by the class descriptor.
 
 
-.. attribute:: class_descriptor.name
+.. attribute:: Class.name
 
    The name of the class.
 
 
-.. attribute:: class_descriptor.super
+.. attribute:: Class.super
 
-   A list of class descriptors which describe the immediate base classes of the
-   class being described.  Classes which are named as superclasses but which are
-   not discoverable by :func:`readmodule` are listed as a string with the class
-   name instead of class descriptors.
+   A list of :class:`Class` objects which describe the immediate base
+   classes of the class being described.  Classes which are named as
+   superclasses but which are not discoverable by :func:`readmodule` are
+   listed as a string with the class name instead of as :class:`Class`
+   objects.
 
 
-.. attribute:: class_descriptor.methods
+.. attribute:: Class.methods
 
    A dictionary mapping method names to line numbers.
 
 
-.. attribute:: class_descriptor.file
+.. attribute:: Class.file
 
    Name of the file containing the ``class`` statement defining the class.
 
 
-.. attribute:: class_descriptor.lineno
+.. attribute:: Class.lineno
 
    The line number of the ``class`` statement within the file named by
    :attr:`file`.
@@ -83,30 +83,31 @@
 
 .. _pyclbr-function-objects:
 
-Function Descriptor Objects
----------------------------
+Function Objects
+----------------
 
-The function descriptor objects used as values in the dictionary returned by
+The :class:`Function` objects used as values in the dictionary returned by
 :func:`readmodule_ex` provide the following data members:
 
 
-.. attribute:: function_descriptor.module
+.. attribute:: Function.module
 
    The name of the module defining the function described by the function
    descriptor.
 
 
-.. attribute:: function_descriptor.name
+.. attribute:: Function.name
 
    The name of the function.
 
 
-.. attribute:: function_descriptor.file
+.. attribute:: Function.file
 
    Name of the file containing the ``def`` statement defining the function.
 
 
-.. attribute:: function_descriptor.lineno
+.. attribute:: Function.lineno
 
-   The line number of the ``def`` statement within the file named by :attr:`file`.
+   The line number of the ``def`` statement within the file named by
+   :attr:`file`.
 
diff --git a/Doc/library/robotparser.rst b/Doc/library/robotparser.rst
index b3a9a60..cce7966 100644
--- a/Doc/library/robotparser.rst
+++ b/Doc/library/robotparser.rst
@@ -3,7 +3,8 @@
 =============================================
 
 .. module:: robotparser
-   :synopsis: Loads a robots.txt file and answers questions about fetchability of other URLs.
+   :synopsis: Loads a robots.txt file and answers questions about
+              fetchability of other URLs.
 .. sectionauthor:: Skip Montanaro <skip@pobox.com>
 
 
@@ -21,8 +22,8 @@
 
 .. class:: RobotFileParser()
 
-   This class provides a set of methods to read, parse and answer questions about a
-   single :file:`robots.txt` file.
+   This class provides a set of methods to read, parse and answer questions
+   about a single :file:`robots.txt` file.
 
 
    .. method:: set_url(url)
@@ -42,20 +43,22 @@
 
    .. method:: can_fetch(useragent, url)
 
-      Returns ``True`` if the *useragent* is allowed to fetch the *url* according to
-      the rules contained in the parsed :file:`robots.txt` file.
+      Returns ``True`` if the *useragent* is allowed to fetch the *url*
+      according to the rules contained in the parsed :file:`robots.txt`
+      file.
 
 
    .. method:: mtime()
 
-      Returns the time the ``robots.txt`` file was last fetched.  This is useful for
-      long-running web spiders that need to check for new ``robots.txt`` files
-      periodically.
+      Returns the time the ``robots.txt`` file was last fetched.  This is
+      useful for long-running web spiders that need to check for new
+      ``robots.txt`` files periodically.
 
 
    .. method:: modified()
 
-      Sets the time the ``robots.txt`` file was last fetched to the current time.
+      Sets the time the ``robots.txt`` file was last fetched to the current
+      time.
 
 The following example demonstrates basic use of the RobotFileParser class. ::
 
diff --git a/Doc/library/simplehttpserver.rst b/Doc/library/simplehttpserver.rst
index 2f1af89..7d99681 100644
--- a/Doc/library/simplehttpserver.rst
+++ b/Doc/library/simplehttpserver.rst
@@ -7,39 +7,40 @@
 .. sectionauthor:: Moshe Zadka <moshez@zadka.site.co.il>
 
 
-The :mod:`SimpleHTTPServer` module defines a request-handler class,
-interface-compatible with :class:`BaseHTTPServer.BaseHTTPRequestHandler`, that
-serves files only from a base directory.
+The :mod:`SimpleHTTPServer` module defines a single class,
+:class:`SimpleHTTPRequestHandler`, which is interface-compatible with
+:class:`BaseHTTPServer.BaseHTTPRequestHandler`.
 
 The :mod:`SimpleHTTPServer` module defines the following class:
 
 
 .. class:: SimpleHTTPRequestHandler(request, client_address, server)
 
-   This class is used to serve files from the current directory and below, directly
+   This class serves files from the current directory and below, directly
    mapping the directory structure to HTTP requests.
 
    A lot of the work, such as parsing the request, is done by the base class
    :class:`BaseHTTPServer.BaseHTTPRequestHandler`.  This class implements the
    :func:`do_GET` and :func:`do_HEAD` functions.
 
-   The :class:`SimpleHTTPRequestHandler` defines the following member variables:
+   The following are defined as class-level attributes of
+   :class:`SimpleHTTPRequestHandler`:
 
 
    .. attribute:: server_version
 
-      This will be ``"SimpleHTTP/" + __version__``, where ``__version__`` is
-      defined in the module.
+   This will be ``"SimpleHTTP/" + __version__``, where ``__version__`` is
+   defined at the module level.
 
 
    .. attribute:: extensions_map
 
-      A dictionary mapping suffixes into MIME types. The default is signified by
-      an empty string, and is considered to be ``application/octet-stream``. The
-      mapping is used case-insensitively, and so should contain only lower-cased
-      keys.
+      A dictionary mapping suffixes into MIME types. The default is
+      signified by an empty string, and is considered to be
+      ``application/octet-stream``. The mapping is used case-insensitively,
+      and so should contain only lower-cased keys.
 
-   The :class:`SimpleHTTPRequestHandler` defines the following methods:
+   The :class:`SimpleHTTPRequestHandler` class defines the following methods:
 
 
    .. method:: do_HEAD()
diff --git a/Doc/library/socket.rst b/Doc/library/socket.rst
index 971e316..2f89758 100644
--- a/Doc/library/socket.rst
+++ b/Doc/library/socket.rst
@@ -765,7 +765,7 @@
    # Echo server program
    import socket
 
-   HOST = ''                 # Symbolic name meaning the local host
+   HOST = ''                 # Symbolic name meaning all available interfaces
    PORT = 50007              # Arbitrary non-privileged port
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind((HOST, PORT))
diff --git a/Doc/library/sqlite3.rst b/Doc/library/sqlite3.rst
index bf9b186..baf12e8 100644
--- a/Doc/library/sqlite3.rst
+++ b/Doc/library/sqlite3.rst
@@ -112,10 +112,11 @@
    :func:`connect` function.
 
    Setting it makes the :mod:`sqlite3` module parse the declared type for each
-   column it returns.  It will parse out the first word of the declared type, i. e.
-   for "integer primary key", it will parse out "integer". Then for that column, it
-   will look into the converters dictionary and use the converter function
-   registered for that type there.  Converter names are case-sensitive!
+   column it returns.  It will parse out the first word of the declared type,
+   i. e.  for "integer primary key", it will parse out "integer", or for
+   "number(10)" it will parse out "number". Then for that column, it will look
+   into the converters dictionary and use the converter function registered for
+   that type there.
 
 
 .. data:: PARSE_COLNAMES
@@ -654,10 +655,6 @@
    Converter functions **always** get called with a string, no matter under which
    data type you sent the value to SQLite.
 
-.. note::
-
-   Converter names are looked up in a case-sensitive manner.
-
 ::
 
    def convert_point(s):
diff --git a/Doc/library/subprocess.rst b/Doc/library/subprocess.rst
index 25aa008..b08b4ef 100644
--- a/Doc/library/subprocess.rst
+++ b/Doc/library/subprocess.rst
@@ -216,7 +216,7 @@
 .. method:: Popen.terminate()
 
    Stop the child. On Posix OSs the method sends SIGTERM to the
-   child. On Windows the Win32 API function TerminateProcess is called
+   child. On Windows the Win32 API function :cfunc:`TerminateProcess` is called
    to stop the child.
 
 
diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst
index 9963dbd..f66899c 100644
--- a/Doc/library/sys.rst
+++ b/Doc/library/sys.rst
@@ -379,17 +379,17 @@
 
    *platform* may be one of the following values:
 
-   +-----------------------------------------+-----------------------+
-   | Constant                                | Platform              |
-   +=========================================+=======================+
-   | :const:`0 (VER_PLATFORM_WIN32s)`        | Win32s on Windows 3.1 |
-   +-----------------------------------------+-----------------------+
-   | :const:`1 (VER_PLATFORM_WIN32_WINDOWS)` | Windows 95/98/ME      |
-   +-----------------------------------------+-----------------------+
-   | :const:`2 (VER_PLATFORM_WIN32_NT)`      | Windows NT/2000/XP    |
-   +-----------------------------------------+-----------------------+
-   | :const:`3 (VER_PLATFORM_WIN32_CE)`      | Windows CE            |
-   +-----------------------------------------+-----------------------+
+   +-----------------------------------------+-------------------------+
+   | Constant                                | Platform                |
+   +=========================================+=========================+
+   | :const:`0 (VER_PLATFORM_WIN32s)`        | Win32s on Windows 3.1   |
+   +-----------------------------------------+-------------------------+
+   | :const:`1 (VER_PLATFORM_WIN32_WINDOWS)` | Windows 95/98/ME        |
+   +-----------------------------------------+-------------------------+
+   | :const:`2 (VER_PLATFORM_WIN32_NT)`      | Windows NT/2000/XP/x64  |
+   +-----------------------------------------+-------------------------+
+   | :const:`3 (VER_PLATFORM_WIN32_CE)`      | Windows CE              |
+   +-----------------------------------------+-------------------------+
 
    This function wraps the Win32 :cfunc:`GetVersionEx` function; see the Microsoft
    documentation for more information about these fields.
diff --git a/Doc/library/tempfile.rst b/Doc/library/tempfile.rst
index cc3318f..4de9236 100644
--- a/Doc/library/tempfile.rst
+++ b/Doc/library/tempfile.rst
@@ -23,147 +23,155 @@
 no longer contain the process ID; instead a string of six random characters is
 used.
 
-Also, all the user-callable functions now take additional arguments which allow
-direct control over the location and name of temporary files.  It is no longer
-necessary to use the global *tempdir* and *template* variables.  To maintain
-backward compatibility, the argument order is somewhat odd; it is recommended to
-use keyword arguments for clarity.
+Also, all the user-callable functions now take additional arguments which
+allow direct control over the location and name of temporary files.  It is
+no longer necessary to use the global *tempdir* and *template* variables.
+To maintain backward compatibility, the argument order is somewhat odd; it
+is recommended to use keyword arguments for clarity.
 
 The module defines the following user-callable functions:
 
 
-.. function:: TemporaryFile([mode='w+b'[, bufsize=-1[, suffix[, prefix[, dir]]]]])
+.. function:: TemporaryFile([mode='w+b'[, bufsize=-1[, suffix=''[, prefix='tmp'[, dir=None]]]]])
 
-   Return a file-like object that can be used as a temporary storage
-   area.  The file is created using :func:`mkstemp`. It will be destroyed as soon
+   Return a file-like object that can be used as a temporary storage area.
+   The file is created using :func:`mkstemp`. It will be destroyed as soon
    as it is closed (including an implicit close when the object is garbage
-   collected).  Under Unix, the directory entry for the file is removed immediately
-   after the file is created.  Other platforms do not support this; your code
-   should not rely on a temporary file created using this function having or not
-   having a visible name in the file system.
+   collected).  Under Unix, the directory entry for the file is removed
+   immediately after the file is created.  Other platforms do not support
+   this; your code should not rely on a temporary file created using this
+   function having or not having a visible name in the file system.
 
-   The *mode* parameter defaults to ``'w+b'`` so that the file created can be read
-   and written without being closed.  Binary mode is used so that it behaves
-   consistently on all platforms without regard for the data that is stored.
-   *bufsize* defaults to ``-1``, meaning that the operating system default is used.
+   The *mode* parameter defaults to ``'w+b'`` so that the file created can
+   be read and written without being closed.  Binary mode is used so that it
+   behaves consistently on all platforms without regard for the data that is
+   stored.  *bufsize* defaults to ``-1``, meaning that the operating system
+   default is used.
 
    The *dir*, *prefix* and *suffix* parameters are passed to :func:`mkstemp`.
 
    The returned object is a true file object on POSIX platforms.  On other
    platforms, it is a file-like object whose :attr:`file` attribute is the
-   underlying true file object. This file-like object can be used in a :keyword:`with`
-   statement, just like a normal file.
-
-
-.. function:: NamedTemporaryFile([mode='w+b'[, bufsize=-1[, suffix[, prefix[, dir[, delete]]]]]])
-
-   This function operates exactly as :func:`TemporaryFile` does, except that the
-   file is guaranteed to have a visible name in the file system (on Unix, the
-   directory entry is not unlinked).  That name can be retrieved from the
-   :attr:`name` member of the file object.  Whether the name can be used to open
-   the file a second time, while the named temporary file is still open, varies
-   across platforms (it can be so used on Unix; it cannot on Windows NT or later).
-   If *delete* is true (the default), the file is deleted as soon as it is closed.
-   The returned object is always a file-like object whose :attr:`file` attribute
-   is the underlying true file object. This file-like object can be used in a :keyword:`with`
-   statement, just like a normal file.
-
-
-.. function:: SpooledTemporaryFile([max_size=0, [mode='w+b'[, bufsize=-1[, suffix[, prefix[, dir]]]]]])
-
-   This function operates exactly as :func:`TemporaryFile` does, except that data
-   is spooled in memory until the file size exceeds *max_size*, or until the file's
-   :func:`fileno` method is called, at which point the contents are written to disk
-   and operation proceeds as with :func:`TemporaryFile`.
-
-   The resulting file has one additional method, :func:`rollover`, which causes the
-   file to roll over to an on-disk file regardless of its size.
-
-   The returned object is a file-like object whose :attr:`_file` attribute
-   is either a :class:`StringIO` object or a true file object, depending on
-   whether :func:`rollover` has been called. This file-like object can be used in a
+   underlying true file object. This file-like object can be used in a
    :keyword:`with` statement, just like a normal file.
 
 
-.. function:: mkstemp([suffix[, prefix[, dir[, text]]]])
+.. function:: NamedTemporaryFile([mode='w+b'[, bufsize=-1[, suffix=''[, prefix='tmp'[, dir=None[, delete=True]]]]]])
 
-   Creates a temporary file in the most secure manner possible.  There are no
-   race conditions in the file's creation, assuming that the platform properly
-   implements the :const:`os.O_EXCL` flag for :func:`os.open`.  The file is
-   readable and writable only by the creating user ID.  If the platform uses
-   permission bits to indicate whether a file is executable, the file is
-   executable by no one.  The file descriptor is not inherited by child
-   processes.
-
-   Unlike :func:`TemporaryFile`, the user of :func:`mkstemp` is responsible for
-   deleting the temporary file when done with it.
-
-   If *suffix* is specified, the file name will end with that suffix, otherwise
-   there will be no suffix.  :func:`mkstemp` does not put a dot between the file
-   name and the suffix; if you need one, put it at the beginning of *suffix*.
-
-   If *prefix* is specified, the file name will begin with that prefix; otherwise,
-   a default prefix is used.
-
-   If *dir* is specified, the file will be created in that directory; otherwise,
-   a default directory is used.  The default directory is chosen from a
-   platform-dependent list, but the user of the application can control the
-   directory location by setting the *TMPDIR*, *TEMP* or *TMP* environment
-   variables.  There is thus no guarantee that the generated filename will have
-   any nice properties, such as not requiring quoting when passed to external
-   commands via ``os.popen()``.
-
-   If *text* is specified, it indicates whether to open the file in binary mode
-   (the default) or text mode.  On some platforms, this makes no difference.
-
-   :func:`mkstemp` returns a tuple containing an OS-level handle to an open file
-   (as would be returned by :func:`os.open`) and the absolute pathname of that
-   file, in that order.
+   This function operates exactly as :func:`TemporaryFile` does, except that
+   the file is guaranteed to have a visible name in the file system (on
+   Unix, the directory entry is not unlinked).  That name can be retrieved
+   from the :attr:`name` member of the file object.  Whether the name can be
+   used to open the file a second time, while the named temporary file is
+   still open, varies across platforms (it can be so used on Unix; it cannot
+   on Windows NT or later).  If *delete* is true (the default), the file is
+   deleted as soon as it is closed.
+   The returned object is always a file-like object whose :attr:`file`
+   attribute is the underlying true file object. This file-like object can
+   be used in a :keyword:`with` statement, just like a normal file.
 
 
-.. function:: mkdtemp([suffix[, prefix[, dir]]])
+.. function:: SpooledTemporaryFile([max_size=0, [mode='w+b'[, bufsize=-1[, suffix=''[, prefix='tmp'[, dir=None]]]]]])
 
-   Creates a temporary directory in the most secure manner possible. There are no
-   race conditions in the directory's creation.  The directory is readable,
-   writable, and searchable only by the creating user ID.
+   This function operates exactly as :func:`TemporaryFile` does, except that
+   data is spooled in memory until the file size exceeds *max_size*, or
+   until the file's :func:`fileno` method is called, at which point the
+   contents are written to disk and operation proceeds as with
+   :func:`TemporaryFile`.
 
-   The user of :func:`mkdtemp` is responsible for deleting the temporary directory
-   and its contents when done with it.
+   The resulting file has one additional method, :func:`rollover`, which
+   causes the file to roll over to an on-disk file regardless of its size.
 
-   The *prefix*, *suffix*, and *dir* arguments are the same as for :func:`mkstemp`.
+   The returned object is a file-like object whose :attr:`_file` attribute
+   is either a :class:`StringIO` object or a true file object, depending on
+   whether :func:`rollover` has been called. This file-like object can be
+   used in a :keyword:`with` statement, just like a normal file.
+
+
+.. function:: mkstemp([suffix=''[, prefix='tmp'[, dir=None[, text=False]]]])
+
+   Creates a temporary file in the most secure manner possible.  There are
+   no race conditions in the file's creation, assuming that the platform
+   properly implements the :const:`os.O_EXCL` flag for :func:`os.open`.  The
+   file is readable and writable only by the creating user ID.  If the
+   platform uses permission bits to indicate whether a file is executable,
+   the file is executable by no one.  The file descriptor is not inherited
+   by child processes.
+
+   Unlike :func:`TemporaryFile`, the user of :func:`mkstemp` is responsible
+   for deleting the temporary file when done with it.
+
+   If *suffix* is specified, the file name will end with that suffix,
+   otherwise there will be no suffix.  :func:`mkstemp` does not put a dot
+   between the file name and the suffix; if you need one, put it at the
+   beginning of *suffix*.
+
+   If *prefix* is specified, the file name will begin with that prefix;
+   otherwise, a default prefix is used.
+
+   If *dir* is specified, the file will be created in that directory;
+   otherwise, a default directory is used.  The default directory is chosen
+   from a platform-dependent list, but the user of the application can
+   control the directory location by setting the *TMPDIR*, *TEMP* or *TMP*
+   environment variables.  There is thus no guarantee that the generated
+   filename will have any nice properties, such as not requiring quoting
+   when passed to external commands via ``os.popen()``.
+
+   If *text* is specified, it indicates whether to open the file in binary
+   mode (the default) or text mode.  On some platforms, this makes no
+   difference.
+
+   :func:`mkstemp` returns a tuple containing an OS-level handle to an open
+   file (as would be returned by :func:`os.open`) and the absolute pathname
+   of that file, in that order.
+
+
+.. function:: mkdtemp([suffix=''[, prefix='tmp'[, dir=None]]])
+
+   Creates a temporary directory in the most secure manner possible. There
+   are no race conditions in the directory's creation.  The directory is
+   readable, writable, and searchable only by the creating user ID.
+
+   The user of :func:`mkdtemp` is responsible for deleting the temporary
+   directory and its contents when done with it.
+
+   The *prefix*, *suffix*, and *dir* arguments are the same as for
+   :func:`mkstemp`.
 
    :func:`mkdtemp` returns the absolute pathname of the new directory.
 
 
-.. function:: mktemp([suffix[, prefix[, dir]]])
+.. function:: mktemp([suffix=''[, prefix='tmp'[, dir=None]]])
 
    .. deprecated:: 2.3
       Use :func:`mkstemp` instead.
 
-   Return an absolute pathname of a file that did not exist at the time the call is
-   made.  The *prefix*, *suffix*, and *dir* arguments are the same as for
-   :func:`mkstemp`.
+   Return an absolute pathname of a file that did not exist at the time the
+   call is made.  The *prefix*, *suffix*, and *dir* arguments are the same
+   as for :func:`mkstemp`.
 
    .. warning::
 
-      Use of this function may introduce a security hole in your program.  By the time
-      you get around to doing anything with the file name it returns, someone else may
-      have beaten you to the punch.
+      Use of this function may introduce a security hole in your program.
+      By the time you get around to doing anything with the file name it
+      returns, someone else may have beaten you to the punch.
 
-The module uses two global variables that tell it how to construct a temporary
-name.  They are initialized at the first call to any of the functions above.
-The caller may change them, but this is discouraged; use the appropriate
-function arguments, instead.
+The module uses two global variables that tell it how to construct a
+temporary name.  They are initialized at the first call to any of the
+functions above.  The caller may change them, but this is discouraged; use
+the appropriate function arguments, instead.
 
 
 .. data:: tempdir
 
-   When set to a value other than ``None``, this variable defines the default value
-   for the *dir* argument to all the functions defined in this module.
+   When set to a value other than ``None``, this variable defines the
+   default value for the *dir* argument to all the functions defined in this
+   module.
 
-   If ``tempdir`` is unset or ``None`` at any call to any of the above functions,
-   Python searches a standard list of directories and sets *tempdir* to the first
-   one which the calling user can create files in.  The list is:
+   If ``tempdir`` is unset or ``None`` at any call to any of the above
+   functions, Python searches a standard list of directories and sets
+   *tempdir* to the first one which the calling user can create files in.
+   The list is:
 
    #. The directory named by the :envvar:`TMPDIR` environment variable.
 
diff --git a/Doc/library/unittest.rst b/Doc/library/unittest.rst
index 8188e70..5efcc32 100644
--- a/Doc/library/unittest.rst
+++ b/Doc/library/unittest.rst
@@ -260,7 +260,6 @@
 Often, many small test cases will use the same fixture.  In this case, we would
 end up subclassing :class:`SimpleWidgetTestCase` into many small one-method
 classes such as :class:`DefaultWidgetSizeTestCase`.  This is time-consuming and
-
 discouraging, so in the same vein as JUnit, :mod:`unittest` provides a simpler
 mechanism::
 
diff --git a/Doc/library/xmlrpclib.rst b/Doc/library/xmlrpclib.rst
index 3f0bf3b..dd6a0cc 100644
--- a/Doc/library/xmlrpclib.rst
+++ b/Doc/library/xmlrpclib.rst
@@ -111,6 +111,14 @@
    `XML-RPC Introspection <http://xmlrpc-c.sourceforge.net/introspection.html>`_
       Describes the XML-RPC protocol extension for introspection.
 
+   `XML-RPC Specification <http://www.xmlrpc.com/spec>`_
+      The official specification.
+
+   `Unofficial XML-RPC Errata <http://effbot.org/zone/xmlrpc-errata.htm>`_
+      Fredrik Lundh's "unofficial errata, intended to clarify certain
+      details in the XML-RPC specification, as well as hint at
+      'best practices' to use when designing your own XML-RPC
+      implementations."
 
 .. _serverproxy-objects:
 
@@ -280,6 +288,11 @@
 
    Write the XML-RPC base 64 encoding of this binary item to the out stream object.
 
+   The encoded data will have newlines every 76 characters as per
+   `RFC 2045 section 6.8 <http://tools.ietf.org/html/rfc2045#section-6.8>`_,
+   which was the de facto standard base64 specification when the
+   XML-RPC spec was written.
+
 It also supports certain of Python's built-in operators through a
 :meth:`__cmp__` method.
 
diff --git a/Doc/reference/expressions.rst b/Doc/reference/expressions.rst
index ac3c90f..a5e858b 100644
--- a/Doc/reference/expressions.rst
+++ b/Doc/reference/expressions.rst
@@ -651,6 +651,14 @@
 raised.  Otherwise, the list of filled slots is used as the argument list for
 the call.
 
+.. note::
+   
+   An implementation may provide builtin functions whose positional parameters do
+   not have names, even if they are 'named' for the purpose of documentation, and
+   which therefore cannot be supplied by keyword.  In CPython, this is the case for
+   functions implemented in C that use :cfunc:`PyArg_ParseTuple` to parse their
+   arguments.
+
 If there are more positional arguments than there are formal parameter slots, a
 :exc:`TypeError` exception is raised, unless a formal parameter using the syntax
 ``*identifier`` is present; in this case, that formal parameter receives a tuple
diff --git a/Doc/tools/sphinxext/indexcontent.html b/Doc/tools/sphinxext/indexcontent.html
index 67a9eaf..c10da38 100644
--- a/Doc/tools/sphinxext/indexcontent.html
+++ b/Doc/tools/sphinxext/indexcontent.html
@@ -3,28 +3,28 @@
   <p><strong>Parts of the documentation:</strong></p>
   <table class="contentstable" align="center"><tr>
     <td width="50%">
-      <p class="biglink"><a class="biglink" href="{{ pathto("whatsnew/" + version) }}">What's new in Python {{ version }}?</a><br>
+      <p class="biglink"><a class="biglink" href="{{ pathto("whatsnew/" + version) }}">What's new in Python {{ version }}?</a><br/>
          <span class="linkdescr">changes since previous major release</span></p>
-      <p class="biglink"><a class="biglink" href="{{ pathto("tutorial/index") }}">Tutorial</a><br>
+      <p class="biglink"><a class="biglink" href="{{ pathto("tutorial/index") }}">Tutorial</a><br/>
          <span class="linkdescr">start here</span></p>
-      <p class="biglink"><a class="biglink" href="{{ pathto("using/index") }}">Using Python</a><br>
+      <p class="biglink"><a class="biglink" href="{{ pathto("using/index") }}">Using Python</a><br/>
          <span class="linkdescr">how to use Python on different platforms</span></p>
-      <p class="biglink"><a class="biglink" href="{{ pathto("reference/index") }}">Language Reference</a><br>
+      <p class="biglink"><a class="biglink" href="{{ pathto("reference/index") }}">Language Reference</a><br/>
          <span class="linkdescr">describes syntax and language elements</span></p>
-      <p class="biglink"><a class="biglink" href="{{ pathto("library/index") }}">Library Reference</a><br>
+      <p class="biglink"><a class="biglink" href="{{ pathto("library/index") }}">Library Reference</a><br/>
          <span class="linkdescr">keep this under your pillow</span></p>
-      <p class="biglink"><a class="biglink" href="{{ pathto("howto/index") }}">Python HOWTOs</a><br>
+      <p class="biglink"><a class="biglink" href="{{ pathto("howto/index") }}">Python HOWTOs</a><br/>
          <span class="linkdescr">in-depth documents on specific topics</span></p>
     </td><td width="50%">
-      <p class="biglink"><a class="biglink" href="{{ pathto("extending/index") }}">Extending and Embedding</a><br>
+      <p class="biglink"><a class="biglink" href="{{ pathto("extending/index") }}">Extending and Embedding</a><br/>
          <span class="linkdescr">tutorial for C/C++ programmers</span></p>
-      <p class="biglink"><a class="biglink" href="{{ pathto("c-api/index") }}">Python/C API</a><br>
+      <p class="biglink"><a class="biglink" href="{{ pathto("c-api/index") }}">Python/C API</a><br/>
          <span class="linkdescr">reference for C/C++ programmers</span></p>
-      <p class="biglink"><a class="biglink" href="{{ pathto("install/index") }}">Installing Python Modules</a><br>
+      <p class="biglink"><a class="biglink" href="{{ pathto("install/index") }}">Installing Python Modules</a><br/>
          <span class="linkdescr">information for installers &amp; sys-admins</span></p>
-      <p class="biglink"><a class="biglink" href="{{ pathto("distutils/index") }}">Distributing Python Modules</a><br>
+      <p class="biglink"><a class="biglink" href="{{ pathto("distutils/index") }}">Distributing Python Modules</a><br/>
          <span class="linkdescr">sharing modules with others</span></p>
-      <p class="biglink"><a class="biglink" href="{{ pathto("documenting/index") }}">Documenting Python</a><br>
+      <p class="biglink"><a class="biglink" href="{{ pathto("documenting/index") }}">Documenting Python</a><br/>
          <span class="linkdescr">guide for documentation authors</span></p>
     </td></tr>
   </table>
@@ -32,16 +32,16 @@
   <p><strong>Indices and tables:</strong></p>
   <table class="contentstable" align="center"><tr>
     <td width="50%">
-      <p class="biglink"><a class="biglink" href="{{ pathto("modindex") }}">Global Module Index</a><br>
+      <p class="biglink"><a class="biglink" href="{{ pathto("modindex") }}">Global Module Index</a><br/>
          <span class="linkdescr">quick access to all modules</span></p>
-      <p class="biglink"><a class="biglink" href="{{ pathto("genindex") }}">General Index</a><br>
+      <p class="biglink"><a class="biglink" href="{{ pathto("genindex") }}">General Index</a><br/>
          <span class="linkdescr">all functions, classes, terms</span></p>
-      <p class="biglink"><a class="biglink" href="{{ pathto("glossary") }}">Glossary</a><br>
+      <p class="biglink"><a class="biglink" href="{{ pathto("glossary") }}">Glossary</a><br/>
          <span class="linkdescr">the most important terms explained</span></p>
     </td><td width="50%">
-      <p class="biglink"><a class="biglink" href="{{ pathto("search") }}">Search page</a><br>
+      <p class="biglink"><a class="biglink" href="{{ pathto("search") }}">Search page</a><br/>
          <span class="linkdescr">search this documentation</span></p>
-      <p class="biglink"><a class="biglink" href="{{ pathto("contents") }}">Complete Table of Contents</a><br>
+      <p class="biglink"><a class="biglink" href="{{ pathto("contents") }}">Complete Table of Contents</a><br/>
          <span class="linkdescr">lists all sections and subsections</span></p>
     </td></tr>
   </table>
diff --git a/Doc/using/cmdline.rst b/Doc/using/cmdline.rst
index a94c3e7..ca6126a 100644
--- a/Doc/using/cmdline.rst
+++ b/Doc/using/cmdline.rst
@@ -28,20 +28,25 @@
     python myscript.py
 
 
+.. _using-on-interface-options:
+
 Interface options
 ~~~~~~~~~~~~~~~~~
 
-The interpreter interface resembles that of the UNIX shell:
+The interpreter interface resembles that of the UNIX shell, but provides some
+additional methods of invocation:
 
 * When called with standard input connected to a tty device, it prompts for
   commands and executes them until an EOF (an end-of-file character, you can
   produce that with *Ctrl-D* on UNIX or *Ctrl-Z, Enter* on Windows) is read.
 * When called with a file name argument or with a file as standard input, it
   reads and executes a script from that file.
+* When called with a directory name argument, it reads and executes an
+  appropriately named script from that directory.
 * When called with ``-c command``, it executes the Python statement(s) given as
   *command*.  Here *command* may contain multiple statements separated by
   newlines. Leading whitespace is significant in Python statements!
-* When called with ``-m module-name``, the given module is searched on the
+* When called with ``-m module-name``, the given module is located on the
   Python module path and executed as a script.
 
 In non-interactive mode, the entire input is parsed before it is executed.
@@ -58,25 +63,31 @@
    normal module code.
    
    If this option is given, the first element of :data:`sys.argv` will be
-   ``"-c"``.
+   ``"-c"`` and the current directory will be added to the start of
+   :data:`sys.path` (allowing modules in that directory to be imported as top
+   level modules).
 
 
 .. cmdoption:: -m <module-name>
 
-   Search :data:`sys.path` for the named module and run the corresponding module
-   file as if it were executed with ``python modulefile.py`` as a script.
+   Search :data:`sys.path` for the named module and execute its contents as
+   the :mod:`__main__` module.
    
    Since the argument is a *module* name, you must not give a file extension
-   (``.py``).  However, the ``module-name`` does not have to be a valid Python
-   identifer (e.g. you can use a file name including a hyphen).
+   (``.py``).  The ``module-name`` should be a valid Python module name, but
+   the implementation may not always enforce this (e.g. it may allow you to
+   use a name that includes a hyphen).
 
    .. note::
 
       This option cannot be used with builtin modules and extension modules
-      written in C, since they do not have Python module files.
+      written in C, since they do not have Python module files. However, it
+      can still be used for precompiled modules, even if the original source
+      file is not available.
    
    If this option is given, the first element of :data:`sys.argv` will be the
-   full path to the module file.
+   full path to the module file. As with the :option:`-c` option, the current
+   directory will be added to the start of :data:`sys.path`.
    
    Many standard library modules contain code that is invoked on their execution
    as a script.  An example is the :mod:`timeit` module::
@@ -91,30 +102,46 @@
       :pep:`338` -- Executing modules as scripts
 
 
-.. describe:: <script>
-
-   Execute the Python code contained in *script*, which must be an (absolute or
-   relative) file name.
-
-   If this option is given, the first element of :data:`sys.argv` will be the
-   script file name as given on the command line.
-
-
 .. describe:: -
 
    Read commands from standard input (:data:`sys.stdin`).  If standard input is
    a terminal, :option:`-i` is implied.
 
    If this option is given, the first element of :data:`sys.argv` will be
-   ``"-"``.
+   ``"-"`` and the current directory will be added to the start of
+   :data:`sys.path`.
+
+
+.. describe:: <script>
+
+   Execute the Python code contained in *script*, which must be a filesystem
+   path (absolute or relative) referring to either a Python file, a directory
+   containing a ``__main__.py`` file, or a zipfile containing a
+   ``__main__.py`` file.
+
+   If this option is given, the first element of :data:`sys.argv` will be the
+   script name as given on the command line.
+
+   If the script name refers directly to a Python file, the directory
+   containing that file is added to the start of :data:`sys.path`, and the
+   file is executed as the :mod:`__main__` module.
+
+   If the script name refers to a directory or zipfile, the script name is
+   added to the start of :data:`sys.path` and the ``__main__.py`` file in
+   that location is executed as the :mod:`__main__` module.
+
+   .. versionchanged:: 2.5
+      Directories and zipfiles containing a ``__main__.py`` file at the top
+      level are now considered valid Python scripts.
+
+If no interface option is given, :option:`-i` is implied, ``sys.argv[0]`` is
+an empty string (``""``) and the current directory will be added to the
+start of :data:`sys.path`.
 
    .. seealso:: 
       :ref:`tut-invoking`
 
 
-If no script name is given, ``sys.argv[0]`` is an empty string (``""``).
-
-
 Generic options
 ~~~~~~~~~~~~~~~
 
@@ -276,6 +303,7 @@
    thus equivalent to an omitted line number.
 
    .. seealso::
+      :mod:`warnings` -- the warnings module
 
       :pep:`230` -- Warning framework
 
@@ -313,14 +341,19 @@
    the shell's :envvar:`PATH`: one or more directory pathnames separated by
    :data:`os.pathsep` (e.g. colons on Unix or semicolons on Windows).
    Non-existent directories are silently ignored.
+
+   In addition to normal directories, individual :envvar:`PYTHONPATH` entries
+   may refer to zipfiles containing pure Python modules (in either source or
+   compiled form). Extension modules cannot be imported from zipfiles.
    
    The default search path is installation dependent, but generally begins with
    :file:`{prefix}/lib/python{version}`` (see :envvar:`PYTHONHOME` above).  It
    is *always* appended to :envvar:`PYTHONPATH`.
    
-   If a script argument is given, the directory containing the script is
-   inserted in the path in front of :envvar:`PYTHONPATH`.  The search path can
-   be manipulated from within a Python program as the variable :data:`sys.path`.
+   An additional directory will be inserted in the search path in front of
+   :envvar:`PYTHONPATH` as described above under
+   :ref:`using-on-interface-options`. The search path can be manipulated from
+   within a Python program as the variable :data:`sys.path`.
 
 
 .. envvar:: PYTHONSTARTUP
@@ -406,7 +439,7 @@
 
 .. envvar:: PYTHONTHREADDEBUG
 
-   If set, Python will print debug threading debug info.
+   If set, Python will print threading debug info.
 
    .. versionchanged:: 2.6
       Previously, this variable was called ``THREADDEBUG``.
diff --git a/Doc/whatsnew/2.6.rst b/Doc/whatsnew/2.6.rst
index eb5d4b2..9c4a877 100644
--- a/Doc/whatsnew/2.6.rst
+++ b/Doc/whatsnew/2.6.rst
@@ -119,7 +119,7 @@
 underwent two significant changes: the developer group 
 switched from SourceForge's issue tracker to a customized 
 Roundup installation, and the documentation was converted from
-LaTeX to reStructured Text.
+LaTeX to reStructuredText.
 
 
 New Issue Tracker: Roundup
@@ -137,7 +137,7 @@
 <http://www.atlassian.com/software/jira/>`__, 
 `Launchpad <http://www.launchpad.net>`__, 
 `Roundup <http://roundup.sourceforge.net/>`__, and 
-Trac <http://trac.edgewall.org/>`__.  
+`Trac <http://trac.edgewall.org/>`__.  
 The committee eventually settled on Jira
 and Roundup as the two candidates.  Jira is a commercial product that
 offers a no-cost hosted instance to free-software projects; Roundup 
@@ -171,7 +171,7 @@
     Roundup downloads and documentation.
 
 
-New Documentation Format: ReStructured Text Using Sphinx
+New Documentation Format: reStructuredText Using Sphinx
 -----------------------------------------------------------
 
 Since the Python project's inception around 1989, the documentation
@@ -195,7 +195,7 @@
 During the 2.6 development cycle, Georg Brandl put a substantial
 effort into building a new toolchain for processing the documentation.
 The resulting package is called Sphinx, and is available from
-http://sphinx.pocoo.org/.  The input format is reStructured Text, a
+http://sphinx.pocoo.org/.  The input format is reStructuredText, a
 markup commonly used in the Python community that supports custom
 extensions and directives.  Sphinx concentrates on HTML output,
 producing attractively styled and modern HTML, though printed output
@@ -211,7 +211,7 @@
      Documentation and code for the Sphinx toolchain.
 
    `Docutils <http://docutils.sf.net>`__
-     The underlying reStructured Text parser and toolset.
+     The underlying reStructuredText parser and toolset.
 
 
 PEP 343: The 'with' statement
@@ -734,7 +734,8 @@
 
 There's also a ``__future__`` import that causes all string literals
 to become Unicode strings.  This means that ``\u`` escape sequences 
-can be used to include Unicode characters.
+can be used to include Unicode characters::
+
 
     from __future__ import unicode_literals
 
@@ -744,6 +745,7 @@
     print len(s)               # 12 Unicode characters
 
 
+
 .. seealso::
 
    :pep:`3112` - Bytes literals in Python 3000
@@ -1383,6 +1385,11 @@
 Optimizations
 -------------
 
+* The :mod:`warnings` module has been rewritten in C.  This makes
+  it possible to invoke warnings from the parser, and may also
+  make the interpreter's startup faster.
+  (Contributed by Neal Norwitz and Brett Cannon; :issue:`1631171`.)
+
 * Type objects now have a cache of methods that can reduce
   the amount of work required to find the correct method implementation
   for a particular class; once cached, the interpreter doesn't need to
@@ -1401,7 +1408,7 @@
   built-in types.  This speeds up checking if an object is a subclass of one of
   these types.  (Contributed by Neal Norwitz.)
 
-* Unicode strings now uses faster code for detecting
+* Unicode strings now use faster code for detecting
   whitespace and line breaks; this speeds up the :meth:`split` method 
   by about 25% and :meth:`splitlines` by 35%.
   (Contributed by Antoine Pitrou.)  Memory usage is reduced
@@ -1801,6 +1808,24 @@
   opcodes, returning a shorter pickle that contains the same data structure.
   (Contributed by Raymond Hettinger.)
 
+* A :func:`get_data` function was added to the :mod:`pkgutil`
+  module that returns the contents of resource files included
+  with an installed Python package.  For example::
+
+    >>> import pkgutil
+    >>> pkgutil.get_data('test', 'exception_hierarchy.txt')
+    'BaseException
+     +-- SystemExit
+     +-- KeyboardInterrupt
+     +-- GeneratorExit
+     +-- Exception
+          +-- StopIteration
+          +-- StandardError
+     ...'
+    >>> 
+
+  (Contributed by Paul Moore; :issue:`2439`.)
+
 * New functions in the :mod:`posix` module: :func:`chflags` and :func:`lchflags`
   are wrappers for the corresponding system calls (where they're available).
   Constants for the flag values are defined in the :mod:`stat` module; some
@@ -1934,6 +1959,13 @@
 * The :mod:`struct` module now supports the C99 :ctype:`_Bool` type,
   using the format character ``'?'``. 
   (Contributed by David Remahl.)
+
+* The :class:`Popen` objects provided by the :mod:`subprocess` module
+  now have :meth:`terminate`, :meth:`kill`, and :meth:`send_signal` methods.
+  On Windows, :meth:`send_signal` only supports the :const:`SIGTERM`
+  signal, and all these methods are aliases for the Win32 API function
+  :cfunc:`TerminateProcess`.  
+  (Contributed by Christian Heimes.)
  
 * A new variable in the :mod:`sys` module,
   :attr:`float_info`, is an object
@@ -2088,6 +2120,14 @@
   information.  (Contributed by Alan McIntyre as part of his 
   project for Google's Summer of Code 2007.)
 
+* The :mod:`xmlrpclib` module no longer automatically converts
+  :class:`datetime.date` and :class:`datetime.time` to the 
+  :class:`xmlrpclib.DateTime` type; the conversion semantics were
+  not necessarily correct for all applications.  Code using
+  :mod:`xmlrpclib` should convert :class:`date` and :class:`time` 
+  instances. (:issue:`1330538`)  The code can also handle 
+  dates before 1900.  (Contributed by Ralf Schmitt; :issue:`2014`.)
+
 * The :mod:`zipfile` module's :class:`ZipFile` class now has 
   :meth:`extract` and :meth:`extractall` methods that will unpack 
   a single file or all the files in the archive to the current directory, or 
@@ -2120,17 +2160,12 @@
 
 To use the new module, first you must create a TCP connection in the
 usual way and then pass it to the :func:`ssl.wrap_socket` function.
-XXX describe parameters.
-
-XXX Can specify if certificate is required, and obtain certificate info
-by calling getpeercert method.
-
-XXX Certain features require the OpenSSL package to be installed, notably
-  the 'openssl' binary.
+It's possible to specify whether a certificate is required, and to
+obtain certificate info by calling the :meth:`getpeercert` method.
 
 .. seealso::
 
-   SSL module documentation.
+   The documentation for the :mod:`ssl` module.
 
 
 .. ======================================================================
@@ -2271,12 +2306,22 @@
   have been updated.
   (Contributed by Brett Cannon.)
 
+  Another new target, "make profile-opt", compiles a Python binary
+  using GCC's profile-guided optimization.  It compiles Python with
+  profiling enabled, runs the test suite to obtain a set of profiling
+  results, and then compiles using these results for optimization.
+  (Contributed by Gregory P. Smith.)
+
+
 .. ======================================================================
 
 
 Port-Specific Changes: Windows
 -----------------------------------
 
+* The support for Windows 95, 98, ME and NT4 has been dropped.
+  Python 2.6 requires at least Windows 2000 SP4.
+
 * The :mod:`msvcrt` module now supports 
   both the normal and wide char variants of the console I/O
   API.  The :func:`getwch` function reads a keypress and returns a Unicode 
