diff --git a/Doc/bugs.rst b/Doc/bugs.rst
index 55b3107..a9a48c7 100644
--- a/Doc/bugs.rst
+++ b/Doc/bugs.rst
@@ -38,10 +38,9 @@
 To do this, search the bug database using the search box on the top of the page.
 
 If the problem you're reporting is not already in the bug tracker, go back to
-the Python Bug Tracker.  If you don't already have a tracker account, select the
-"Register" link in the sidebar and undergo the registration procedure.
-Otherwise, if you're not logged in, enter your credentials and select "Login".
-It is not possible to submit a bug report anonymously.
+the Python Bug Tracker and log in.  If you don't already have a tracker account,
+select the "Register" link or, if you use OpenID, one of the OpenID provider
+logos in the sidebar.  It is not possible to submit a bug report anonymously.
 
 Being now logged in, you can submit a bug.  Select the "Create New" link in the
 sidebar to open the bug reporting form.
@@ -58,7 +57,8 @@
 
 Each bug report will be assigned to a developer who will determine what needs to
 be done to correct the problem.  You will receive an update each time action is
-taken on the bug.
+taken on the bug.  See http://www.python.org/dev/workflow/ for a detailed
+description of the issue workflow.
 
 
 .. seealso::
diff --git a/Doc/distutils/examples.rst b/Doc/distutils/examples.rst
index 648063b..6c27738 100644
--- a/Doc/distutils/examples.rst
+++ b/Doc/distutils/examples.rst
@@ -257,9 +257,9 @@
              (maintainer and maintainer_email) must be supplied
 
 
-If you use the reStructuredText syntax in the `long_description` field and
+If you use the reStructuredText syntax in the ``long_description`` field and
 `docutils <http://docutils.sourceforge.net/>`_ is installed you can check if
-the syntax is fine with the ``check`` command, using the `restructuredtext`
+the syntax is fine with the ``check`` command, using the ``restructuredtext``
 option.
 
 For example, if the :file:`setup.py` script is changed like this::
@@ -278,7 +278,7 @@
         url='http://example.com', long_description=desc)
 
 Where the long description is broken, ``check`` will be able to detect it
-by using the `docutils` parser::
+by using the :mod:`docutils` parser::
 
     $ pythontrunk setup.py check --restructuredtext
     running check
diff --git a/Doc/distutils/uploading.rst b/Doc/distutils/uploading.rst
index e947245..7b790b1 100644
--- a/Doc/distutils/uploading.rst
+++ b/Doc/distutils/uploading.rst
@@ -60,13 +60,13 @@
     setup(name='Distutils',
           long_description=open('README.txt'))
 
-In that case, `README.txt` is a regular reStructuredText text file located
-in the root of the package besides `setup.py`.
+In that case, :file:`README.txt` is a regular reStructuredText text file located
+in the root of the package besides :file:`setup.py`.
 
 To prevent registering broken reStructuredText content, you can use the
-:program:`rst2html` program that is provided by the `docutils` package
+:program:`rst2html` program that is provided by the :mod:`docutils` package
 and check the ``long_description`` from the command line::
 
     $ python setup.py --long-description | rst2html.py > output.html
 
-`docutils` will display a warning if there's something wrong with your syntax.
+:mod:`docutils` will display a warning if there's something wrong with your syntax.
diff --git a/Doc/glossary.rst b/Doc/glossary.rst
index 5ecf848..f1474cf 100644
--- a/Doc/glossary.rst
+++ b/Doc/glossary.rst
@@ -331,7 +331,7 @@
 
    iterator
       An object representing a stream of data.  Repeated calls to the iterator's
-      :meth:`__next__` (or passing it to the builtin function)  :func:`next`
+      :meth:`__next__` (or passing it to the built-in function :func:`next`)
       method return successive items in the stream.  When no more data are
       available a :exc:`StopIteration` exception is raised instead.  At this
       point, the iterator object is exhausted and any further calls to its
diff --git a/Doc/library/http.client.rst b/Doc/library/http.client.rst
index 0f59b9a..f8aedcc 100644
--- a/Doc/library/http.client.rst
+++ b/Doc/library/http.client.rst
@@ -486,7 +486,7 @@
 
 .. attribute:: HTTPResponse.debuglevel
 
-   A debugging hook.  If `debuglevel` is greater than zero, messages
+   A debugging hook.  If :attr:`debuglevel` is greater than zero, messages
    will be printed to stdout as the response is read and parsed.
 
 
diff --git a/Doc/library/inspect.rst b/Doc/library/inspect.rst
index 37a4f1a..cc88acf 100644
--- a/Doc/library/inspect.rst
+++ b/Doc/library/inspect.rst
@@ -387,7 +387,7 @@
 
 .. function:: getargspec(func)
 
-   Get the names and default values of a function's arguments. A
+   Get the names and default values of a Python function's arguments. A
    :term:`named tuple` ``ArgSpec(args, varargs, keywords,
    defaults)`` is returned. *args* is a list of
    the argument names. *varargs* and *varkw* are the names of the ``*`` and
@@ -402,8 +402,8 @@
 
 .. function:: getfullargspec(func)
 
-   Get the names and default values of a function's arguments.  A :term:`named
-   tuple` is returned:
+   Get the names and default values of a Python function's arguments.  A
+   :term:`named tuple` is returned:
 
    ``FullArgSpec(args, varargs, varkw, defaults, kwonlyargs, kwonlydefaults,
    annotations)``
diff --git a/Doc/library/site.rst b/Doc/library/site.rst
index 0fe63a3..bf65d17 100644
--- a/Doc/library/site.rst
+++ b/Doc/library/site.rst
@@ -117,5 +117,5 @@
    Adds a directory to sys.path and processes its pth files.
 
 
-XXX Update documentation
-XXX document python -m site --user-base --user-site
+.. XXX Update documentation
+.. XXX document python -m site --user-base --user-site
diff --git a/Doc/library/ssl.rst b/Doc/library/ssl.rst
index 5c78345..d377072 100644
--- a/Doc/library/ssl.rst
+++ b/Doc/library/ssl.rst
@@ -278,14 +278,6 @@
                 else:
                     raise
 
-.. method:: SSLSocket.unwrap()
-
-   Performs the SSL shutdown handshake, which removes the TLS layer from the
-   underlying socket, and returns the underlying socket object.  This can be
-   used to go from encrypted operation over a connection to unencrypted.  The
-   returned socket should always be used for further communication with the
-   other side of the connection, rather than the original socket
-
 .. method:: SSLSocket.getpeercert(binary_form=False)
 
    If there is no certificate for the peer on the other end of the connection,
diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst
index 619d4fb..f0e551e 100644
--- a/Doc/library/sys.rst
+++ b/Doc/library/sys.rst
@@ -359,7 +359,7 @@
    specific.
 
    If given, *default* will be returned if the object does not provide means to
-   retrieve the size.  Otherwise a `TypeError` will be raised.
+   retrieve the size.  Otherwise a :exc:`TypeError` will be raised.
 
    :func:`getsizeof` calls the object's ``__sizeof__`` method and adds an
    additional garbage collector overhead if the object is managed by the garbage
diff --git a/Doc/library/xmlrpc.server.rst b/Doc/library/xmlrpc.server.rst
index 4a391b7..3cb2c3a 100644
--- a/Doc/library/xmlrpc.server.rst
+++ b/Doc/library/xmlrpc.server.rst
@@ -136,10 +136,10 @@
    server.register_function(adder_function, 'add')
 
    # Register an instance; all the methods of the instance are
-   # published as XML-RPC methods (in this case, just 'div').
+   # published as XML-RPC methods (in this case, just 'mul').
    class MyFuncs:
-       def div(self, x, y):
-           return x // y
+       def mul(self, x, y):
+           return x * y
 
    server.register_instance(MyFuncs())
 
@@ -209,7 +209,8 @@
 Example::
 
    class MyFuncs:
-       def div(self, x, y) : return x // y
+       def mul(self, x, y):
+           return x * y
 
 
    handler = CGIXMLRPCRequestHandler()
diff --git a/Doc/tools/rstlint.py b/Doc/tools/rstlint.py
index eaaf257..e977f21 100755
--- a/Doc/tools/rstlint.py
+++ b/Doc/tools/rstlint.py
@@ -169,7 +169,6 @@
         return 2
 
     count = defaultdict(int)
-    out = sys.stdout
 
     for root, dirs, files in os.walk(path):
         # ignore subdirs controlled by svn
@@ -212,8 +211,7 @@
                 csev = checker.severity
                 if csev >= severity:
                     for lno, msg in checker(fn, lines):
-                        print('[%d] %s:%d: %s' % (csev, fn, lno, msg),
-                              file=out)
+                        print('[%d] %s:%d: %s' % (csev, fn, lno, msg))
                         count[csev] += 1
     if verbose:
         print()
diff --git a/Doc/whatsnew/2.2.rst b/Doc/whatsnew/2.2.rst
index 31e8dd0..89e4d76 100644
--- a/Doc/whatsnew/2.2.rst
+++ b/Doc/whatsnew/2.2.rst
@@ -30,7 +30,7 @@
 to the PEP for a particular new feature.
 
 
-.. seealso (now defunct)
+.. see also, now defunct
 
    http://www.unixreview.com/documents/s=1356/urm0109h/0109h.htm
       "What's So Special About Python 2.2?" is also about the new 2.2 features, and
diff --git a/Doc/whatsnew/2.6.rst b/Doc/whatsnew/2.6.rst
index c9fb5c8..00398fc 100644
--- a/Doc/whatsnew/2.6.rst
+++ b/Doc/whatsnew/2.6.rst
@@ -350,9 +350,10 @@
 
 * The code in *BLOCK* is executed.
 
-* If *BLOCK* raises an exception, the :meth:`__exit__(type, value, traceback)`
-  is called with the exception details, the same values returned by
-  :func:`sys.exc_info`.  The method's return value controls whether the exception
+* If *BLOCK* raises an exception, the context manager's :meth:`__exit__` method
+  is called with three arguments, the exception details (``type, value, traceback``,
+  the same values returned by :func:`sys.exc_info`, which can also be ``None``
+  if no exception occurred).  The method's return value controls whether an exception
   is re-raised: any false value re-raises the exception, and ``True`` will result
   in suppressing it.  You'll only rarely want to suppress the exception, because
   if you do the author of the code containing the ':keyword:`with`' statement will
@@ -463,7 +464,7 @@
    with db_transaction(db) as cursor:
        ...
 
-The :mod:`contextlib` module also has a :func:`nested(mgr1, mgr2, ...)` function
+The :mod:`contextlib` module also has a ``nested(mgr1, mgr2, ...)`` function
 that combines a number of context managers so you don't need to write nested
 ':keyword:`with`' statements.  In this example, the single ':keyword:`with`'
 statement both starts a database transaction and acquires a thread lock::
@@ -472,8 +473,9 @@
    with nested (db_transaction(db), lock) as (cursor, locked):
        ...
 
-Finally, the :func:`closing(object)` function returns *object* so that it can be
-bound to a variable, and calls ``object.close`` at the end of the block. ::
+Finally, the :func:`closing` function returns its argument so that it can be
+bound to a variable, and calls the argument's ``.close()`` method at the end
+of the block. ::
 
    import urllib, sys
    from contextlib import closing
diff --git a/Lib/test/test_fnmatch.py b/Lib/test/test_fnmatch.py
index abf8811..bde4ee8 100644
--- a/Lib/test/test_fnmatch.py
+++ b/Lib/test/test_fnmatch.py
@@ -11,13 +11,13 @@
     def tearDown(self):
         _purge()
 
-    def check_match(self, filename, pattern, should_match=1):
+    def check_match(self, filename, pattern, should_match=1, fn=fnmatch):
         if should_match:
-            self.assertTrue(fnmatch(filename, pattern),
+            self.assertTrue(fn(filename, pattern),
                          "expected %r to match pattern %r"
                          % (filename, pattern))
         else:
-            self.assertTrue(not fnmatch(filename, pattern),
+            self.assertTrue(not fn(filename, pattern),
                          "expected %r not to match pattern %r"
                          % (filename, pattern))
 
@@ -54,6 +54,11 @@
         self.assertRaises(TypeError, fnmatchcase, 'test', b'*')
         self.assertRaises(TypeError, fnmatchcase, b'test', '*')
 
+    def test_fnmatchcase(self):
+        check = self.check_match
+        check('AbC', 'abc', 0, fnmatchcase)
+        check('abc', 'AbC', 0, fnmatchcase)
+
     def test_bytes(self):
         self.check_match(b'test', b'te*')
         self.check_match(b'test\xff', b'te*\xff')
diff --git a/Lib/test/test_strftime.py b/Lib/test/test_strftime.py
index 7128fd7..5b94bbe 100755
--- a/Lib/test/test_strftime.py
+++ b/Lib/test/test_strftime.py
@@ -117,16 +117,15 @@
             try:
                 result = time.strftime(e[0], now)
             except ValueError as error:
-                print("Standard '%s' format gaver error:" % (e[0], error))
-                continue
+                self.fail("strftime '%s' format gave error: %s" % (e[0], error))
             if re.match(escapestr(e[1], self.ampm), result):
                 continue
             if not result or result[0] == '%':
-                print("Does not support standard '%s' format (%s)" % \
-                       (e[0], e[2]))
+                self.fail("strftime does not support standard '%s' format (%s)"
+                          % (e[0], e[2]))
             else:
-                print("Conflict for %s (%s):" % (e[0], e[2]))
-                print("  Expected %s, but got %s" % (e[1], result))
+                self.fail("Conflict for %s (%s): expected %s, but got %s"
+                          % (e[0], e[2], e[1], result))
 
     def strftest2(self, now):
         nowsecs = str(int(now))[:-1]
