diff --git a/Doc/c-api/tuple.rst b/Doc/c-api/tuple.rst
index c0e53fb..245a355 100644
--- a/Doc/c-api/tuple.rst
+++ b/Doc/c-api/tuple.rst
@@ -106,6 +106,6 @@
    ``*p`` is destroyed.  On failure, returns ``-1`` and sets ``*p`` to *NULL*, and
    raises :exc:`MemoryError` or :exc:`SystemError`.
 
-.. cfunction:: int PyMethod_ClearFreeList(void)
+.. cfunction:: int PyTuple_ClearFreeList(void)
 
    Clear the free list. Return the total number of freed items.
diff --git a/Doc/library/inspect.rst b/Doc/library/inspect.rst
index 5daa496..03ee17f 100644
--- a/Doc/library/inspect.rst
+++ b/Doc/library/inspect.rst
@@ -26,7 +26,7 @@
 -----------------
 
 The :func:`getmembers` function retrieves the members of an object such as a
-class or module. The eleven functions whose names begin with "is" are mainly
+class or module. The fifteen functions whose names begin with "is" are mainly
 provided as convenient choices for the second argument to :func:`getmembers`.
 They also help you determine when you can expect to find the following special
 attributes:
@@ -229,6 +229,16 @@
    Return true if the object is a Python function or unnamed (:term:`lambda`) function.
 
 
+.. function:: isgeneratorfunction(object)
+
+   Return true if the object is a Python generator function.
+
+
+.. function:: isgenerator(object)
+
+   Return true if the object is a generator.
+
+
 .. function:: istraceback(object)
 
    Return true if the object is a traceback.
diff --git a/Lib/SimpleHTTPServer.py b/Lib/SimpleHTTPServer.py
index a1f25be..eea3243 100644
--- a/Lib/SimpleHTTPServer.py
+++ b/Lib/SimpleHTTPServer.py
@@ -143,7 +143,8 @@
 
         """
         # abandon query parameters
-        path = urlparse.urlparse(path)[2]
+        path = path.split('?',1)[0]
+        path = path.split('#',1)[0]
         path = posixpath.normpath(urllib.unquote(path))
         words = path.split('/')
         words = filter(None, words)
diff --git a/Lib/inspect.py b/Lib/inspect.py
index 074754f..ddd7529 100644
--- a/Lib/inspect.py
+++ b/Lib/inspect.py
@@ -7,8 +7,9 @@
 
 Here are some of the useful functions provided by this module:
 
-    ismodule(), isclass(), ismethod(), isfunction(), istraceback(),
-        isframe(), iscode(), isbuiltin(), isroutine() - check object types
+    ismodule(), isclass(), ismethod(), isfunction(), isgeneratorfunction(),
+        isgenerator(), istraceback(), isframe(), iscode(), isbuiltin(),
+        isroutine() - check object types
     getmembers() - get members of an object that satisfy a given condition
 
     getfile(), getsourcefile(), getsource() - find an object's source code
@@ -29,9 +30,20 @@
 __author__ = 'Ka-Ping Yee <ping@lfw.org>'
 __date__ = '1 Jan 2001'
 
-import sys, os, types, re, dis, imp, tokenize, linecache
+import sys
+import os
+import types
+import string
+import re
+import dis
+import imp
+import tokenize
+import linecache
 from operator import attrgetter
 from collections import namedtuple
+# These constants are from Include/code.h.
+CO_OPTIMIZED, CO_NEWLOCALS, CO_VARARGS, CO_VARKEYWORDS = 0x1, 0x2, 0x4, 0x8
+CO_NESTED, CO_GENERATOR, CO_NOFREE = 0x10, 0x20, 0x40
 
 # ----------------------------------------------------------- type-checking
 def ismodule(object):
@@ -137,6 +149,33 @@
         __kwdefaults__  dict of keyword only parameters with defaults"""
     return isinstance(object, types.FunctionType)
 
+def isgeneratorfunction(object):
+    """Return true if the object is a user-defined generator function.
+
+    Generator function objects provides same attributes as functions.
+
+    See isfunction.__doc__ for attributes listing."""
+    if (isfunction(object) or ismethod(object)) and \
+        object.__code__.co_flags & CO_GENERATOR:
+        return True
+
+def isgenerator(object):
+    """Return true if the object is a generator.
+
+    Generator objects provide these attributes:
+        __iter__        defined to support interation over container
+        close           raises a new GeneratorExit exception inside the
+                        generator to terminate the iteration
+        gi_code         code object
+        gi_frame        frame object or possibly None once the generator has
+                        been exhausted
+        gi_running      set to 1 when generator is executing, 0 otherwise
+        next            return the next item from the container
+        send            resumes the generator and "sends" a value that becomes
+                        the result of the current yield-expression
+        throw           used to raise an exception inside the generator"""
+    return isinstance(object, types.GeneratorType)
+
 def istraceback(object):
     """Return true if the object is a traceback.
 
@@ -198,6 +237,10 @@
             or ismethod(object)
             or ismethoddescriptor(object))
 
+def isgenerator(object):
+    """Return true if the object is a generator object."""
+    return isinstance(object, types.GeneratorType)
+
 def getmembers(object, predicate=None):
     """Return all members of an object as (name, value) pairs sorted by name.
     Optionally, only return members that satisfy a given predicate."""
@@ -670,9 +713,6 @@
     return walktree(roots, children, None)
 
 # ------------------------------------------------ argument list extraction
-# These constants are from Python's compile.h.
-CO_OPTIMIZED, CO_NEWLOCALS, CO_VARARGS, CO_VARKEYWORDS = 1, 2, 4, 8
-
 Arguments = namedtuple('Arguments', 'args, varargs, varkw')
 
 def getargs(co):
diff --git a/Lib/pydoc.py b/Lib/pydoc.py
index c6ec68e..fbad574 100755
--- a/Lib/pydoc.py
+++ b/Lib/pydoc.py
@@ -660,7 +660,7 @@
             contents = self.multicolumn(
                 modules, lambda t: self.modulelink(t[1]))
             result = result + self.bigsection(
-                'Modules', '#fffff', '#aa55cc', contents)
+                'Modules', '#ffffff', '#aa55cc', contents)
 
         if classes:
             classlist = [value for (key, value) in classes]
diff --git a/Lib/test/test_SimpleHTTPServer.py b/Lib/test/test_SimpleHTTPServer.py
new file mode 100644
index 0000000..9d3ad16
--- /dev/null
+++ b/Lib/test/test_SimpleHTTPServer.py
@@ -0,0 +1,41 @@
+"""
+These tests only check url parsing for now.
+We don't want to require the 'network' resource.
+"""
+
+import os, unittest
+from SimpleHTTPServer import SimpleHTTPRequestHandler
+from test import test_support
+
+
+class SocketlessRequestHandler (SimpleHTTPRequestHandler):
+    def __init__(self):
+        pass
+
+class SimpleHTTPRequestHandlerTestCase(unittest.TestCase):
+    """ Test url parsing """
+    def setUp (self):
+        self.translated = os.getcwd()
+        self.translated = os.path.join(self.translated, 'filename')
+        self.handler = SocketlessRequestHandler ()
+
+    def test_queryArguments (self):
+        path = self.handler.translate_path ('/filename')
+        self.assertEquals (path, self.translated)
+        path = self.handler.translate_path ('/filename?foo=bar')
+        self.assertEquals (path, self.translated)
+        path = self.handler.translate_path ('/filename?a=b&spam=eggs#zot')
+        self.assertEquals (path, self.translated)
+
+    def test_startWithDoubleSlash (self):
+        path = self.handler.translate_path ('//filename')
+        self.assertEquals (path, self.translated)
+        path = self.handler.translate_path ('//filename?foo=bar')
+        self.assertEquals (path, self.translated)
+
+
+def test_main():
+    test_support.run_unittest(SimpleHTTPRequestHandlerTestCase)
+
+if __name__ == "__main__":
+    test_main()
diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py
index 75e66ed..35a3b06 100644
--- a/Lib/test/test_inspect.py
+++ b/Lib/test/test_inspect.py
@@ -13,10 +13,10 @@
 
 # Functions tested in this suite:
 # ismodule, isclass, ismethod, isfunction, istraceback, isframe, iscode,
-# isbuiltin, isroutine, getmembers, getdoc, getfile, getmodule,
-# getsourcefile, getcomments, getsource, getclasstree, getargspec,
-# getargvalues, formatargspec, formatargvalues, currentframe, stack, trace
-# isdatadescriptor
+# isbuiltin, isroutine, isgenerator, isgeneratorfunction, getmembers,
+# getdoc, getfile, getmodule, getsourcefile, getcomments, getsource,
+# getclasstree, getargspec, getargvalues, formatargspec, formatargvalues,
+# currentframe, stack, trace, isdatadescriptor
 
 modfile = mod.__file__
 if modfile.endswith(('c', 'o')):
@@ -41,23 +41,33 @@
 class IsTestBase(unittest.TestCase):
     predicates = set([inspect.isbuiltin, inspect.isclass, inspect.iscode,
                       inspect.isframe, inspect.isfunction, inspect.ismethod,
-                      inspect.ismodule, inspect.istraceback])
+                      inspect.ismodule, inspect.istraceback,
+                      inspect.isgenerator, inspect.isgeneratorfunction])
 
     def istest(self, predicate, exp):
         obj = eval(exp)
         self.failUnless(predicate(obj), '%s(%s)' % (predicate.__name__, exp))
 
         for other in self.predicates - set([predicate]):
+            if predicate == inspect.isgeneratorfunction and\
+               other == inspect.isfunction:
+                continue
             self.failIf(other(obj), 'not %s(%s)' % (other.__name__, exp))
 
+def generator_function_example(self):
+    for i in range(2):
+        yield i
+
 class TestPredicates(IsTestBase):
-    def test_thirteen(self):
+    def test_fifteen(self):
         count = len([x for x in dir(inspect) if x.startswith('is')])
-        # Doc/lib/libinspect.tex claims there are 13 such functions
-        expected = 13
+        # This test is here for remember you to update Doc/library/inspect.rst
+        # which claims there are 15 such functions
+        expected = 15
         err_msg = "There are %d (not %d) is* functions" % (count, expected)
         self.assertEqual(count, expected, err_msg)
 
+
     def test_excluding_predicates(self):
         self.istest(inspect.isbuiltin, 'sys.exit')
         self.istest(inspect.isbuiltin, '[].append')
@@ -70,6 +80,8 @@
         self.istest(inspect.ismodule, 'mod')
         self.istest(inspect.istraceback, 'tb')
         self.istest(inspect.isdatadescriptor, 'collections.defaultdict.default_factory')
+        self.istest(inspect.isgenerator, '(x for x in range(2))')
+        self.istest(inspect.isgeneratorfunction, 'generator_function_example')
         if hasattr(types, 'GetSetDescriptorType'):
             self.istest(inspect.isgetsetdescriptor,
                         'type(tb.tb_frame).f_locals')
diff --git a/Lib/test/test_mmap.py b/Lib/test/test_mmap.py
index 08f60f8..fdd75ab 100644
--- a/Lib/test/test_mmap.py
+++ b/Lib/test/test_mmap.py
@@ -435,6 +435,11 @@
         self.assertRaises(TypeError, m.write, "foo")
 
 
+    def test_error(self):
+        self.assert_(issubclass(mmap.error, EnvironmentError))
+        self.assert_("mmap.error" in str(mmap.error))
+
+
 def test_main():
     run_unittest(MmapTests)
 
diff --git a/Lib/test/test_types.py b/Lib/test/test_types.py
index 0014323..f82fe30 100644
--- a/Lib/test/test_types.py
+++ b/Lib/test/test_types.py
@@ -63,15 +63,15 @@
 
         try: 5 / 0
         except ZeroDivisionError: pass
-        else: self.fail("5 / 0L didn't raise ZeroDivisionError")
+        else: self.fail("5 / 0 didn't raise ZeroDivisionError")
 
         try: 5 // 0
         except ZeroDivisionError: pass
-        else: self.fail("5 // 0L didn't raise ZeroDivisionError")
+        else: self.fail("5 // 0 didn't raise ZeroDivisionError")
 
         try: 5 % 0
         except ZeroDivisionError: pass
-        else: self.fail("5 % 0L didn't raise ZeroDivisionError")
+        else: self.fail("5 % 0 didn't raise ZeroDivisionError")
 
     def test_numeric_types(self):
         if 0 != 0 or 0 != 0.0 or 0 != 0.0: self.fail('mixed comparisons')
@@ -80,7 +80,7 @@
             self.fail('int/long/float value not equal')
         # calling built-in types without argument must return 0
         if int() != 0: self.fail('int() does not return 0')
-        if int() != 0: self.fail('long() does not return 0L')
+        if int() != 0: self.fail('long() does not return 0')
         if float() != 0.0: self.fail('float() does not return 0.0')
         if int(1.9) == 1 == int(1.1) and int(-1.1) == -1 == int(-1.9): pass
         else: self.fail('int() does not round properly')
@@ -203,6 +203,251 @@
         self.assertRaises(TypeError, type, 1, 2)
         self.assertRaises(TypeError, type, 1, 2, 3, 4)
 
+    def test_int__format__(self):
+        def test(i, format_spec, result):
+            # just make sure I'm not accidentally checking longs
+            assert type(i) == int
+            assert type(format_spec) == str
+            self.assertEqual(i.__format__(format_spec), result)
+
+        test(123456789, 'd', '123456789')
+        test(123456789, 'd', '123456789')
+
+        test(1, 'c', '\01')
+
+        # sign and aligning are interdependent
+        test(1, "-", '1')
+        test(-1, "-", '-1')
+        test(1, "-3", '  1')
+        test(-1, "-3", ' -1')
+        test(1, "+3", ' +1')
+        test(-1, "+3", ' -1')
+        test(1, " 3", '  1')
+        test(-1, " 3", ' -1')
+        test(1, " ", ' 1')
+        test(-1, " ", '-1')
+
+        # hex
+        test(3, "x", "3")
+        test(3, "X", "3")
+        test(1234, "x", "4d2")
+        test(-1234, "x", "-4d2")
+        test(1234, "8x", "     4d2")
+        test(-1234, "8x", "    -4d2")
+        test(1234, "x", "4d2")
+        test(-1234, "x", "-4d2")
+        test(-3, "x", "-3")
+        test(-3, "X", "-3")
+        test(int('be', 16), "x", "be")
+        test(int('be', 16), "X", "BE")
+        test(-int('be', 16), "x", "-be")
+        test(-int('be', 16), "X", "-BE")
+
+        # octal
+        test(3, "o", "3")
+        test(-3, "o", "-3")
+        test(65, "o", "101")
+        test(-65, "o", "-101")
+        test(1234, "o", "2322")
+        test(-1234, "o", "-2322")
+        test(1234, "-o", "2322")
+        test(-1234, "-o", "-2322")
+        test(1234, " o", " 2322")
+        test(-1234, " o", "-2322")
+        test(1234, "+o", "+2322")
+        test(-1234, "+o", "-2322")
+
+        # binary
+        test(3, "b", "11")
+        test(-3, "b", "-11")
+        test(1234, "b", "10011010010")
+        test(-1234, "b", "-10011010010")
+        test(1234, "-b", "10011010010")
+        test(-1234, "-b", "-10011010010")
+        test(1234, " b", " 10011010010")
+        test(-1234, " b", "-10011010010")
+        test(1234, "+b", "+10011010010")
+        test(-1234, "+b", "-10011010010")
+
+        # make sure these are errors
+
+        # precision disallowed
+        self.assertRaises(ValueError, 3 .__format__, "1.3")
+        # sign not allowed with 'c'
+        self.assertRaises(ValueError, 3 .__format__, "+c")
+        # format spec must be string
+        self.assertRaises(TypeError, 3 .__format__, None)
+        self.assertRaises(TypeError, 3 .__format__, 0)
+
+        # ensure that only int and float type specifiers work
+        for format_spec in ([chr(x) for x in range(ord('a'), ord('z')+1)] +
+                            [chr(x) for x in range(ord('A'), ord('Z')+1)]):
+            if not format_spec in 'bcdoxXeEfFgGn%':
+                self.assertRaises(ValueError, 0 .__format__, format_spec)
+                self.assertRaises(ValueError, 1 .__format__, format_spec)
+                self.assertRaises(ValueError, (-1) .__format__, format_spec)
+
+        # ensure that float type specifiers work; format converts
+        #  the int to a float
+        for format_spec in 'eEfFgGn%':
+            for value in [0, 1, -1, 100, -100, 1234567890, -1234567890]:
+                self.assertEqual(value.__format__(format_spec),
+                                 float(value).__format__(format_spec))
+
+    def test_long__format__(self):
+        def test(i, format_spec, result):
+            # make sure we're not accidentally checking ints
+            assert type(i) == int
+            assert type(format_spec) == str
+            self.assertEqual(i.__format__(format_spec), result)
+
+        test(10**100, 'd', '1' + '0' * 100)
+        test(10**100+100, 'd', '1' + '0' * 97 + '100')
+
+        test(123456789, 'd', '123456789')
+        test(123456789, 'd', '123456789')
+
+        # sign and aligning are interdependent
+        test(1, "-", '1')
+        test(-1, "-", '-1')
+        test(1, "-3", '  1')
+        test(-1, "-3", ' -1')
+        test(1, "+3", ' +1')
+        test(-1, "+3", ' -1')
+        test(1, " 3", '  1')
+        test(-1, " 3", ' -1')
+        test(1, " ", ' 1')
+        test(-1, " ", '-1')
+
+        test(1, 'c', '\01')
+
+        # hex
+        test(3, "x", "3")
+        test(3, "X", "3")
+        test(1234, "x", "4d2")
+        test(-1234, "x", "-4d2")
+        test(1234, "8x", "     4d2")
+        test(-1234, "8x", "    -4d2")
+        test(1234, "x", "4d2")
+        test(-1234, "x", "-4d2")
+        test(-3, "x", "-3")
+        test(-3, "X", "-3")
+
+        # octal
+        test(3, "o", "3")
+        test(-3, "o", "-3")
+        test(65, "o", "101")
+        test(-65, "o", "-101")
+        test(1234, "o", "2322")
+        test(-1234, "o", "-2322")
+        test(1234, "-o", "2322")
+        test(-1234, "-o", "-2322")
+        test(1234, " o", " 2322")
+        test(-1234, " o", "-2322")
+        test(1234, "+o", "+2322")
+        test(-1234, "+o", "-2322")
+
+        # binary
+        test(3, "b", "11")
+        test(-3, "b", "-11")
+        test(1234, "b", "10011010010")
+        test(-1234, "b", "-10011010010")
+        test(1234, "-b", "10011010010")
+        test(-1234, "-b", "-10011010010")
+        test(1234, " b", " 10011010010")
+        test(-1234, " b", "-10011010010")
+        test(1234, "+b", "+10011010010")
+        test(-1234, "+b", "-10011010010")
+
+        # make sure these are errors
+
+        # precision disallowed
+        self.assertRaises(ValueError, 3 .__format__, "1.3")
+        # sign not allowed with 'c'
+        self.assertRaises(ValueError, 3 .__format__, "+c")
+        # format spec must be string
+        self.assertRaises(TypeError, 3 .__format__, None)
+        self.assertRaises(TypeError, 3 .__format__, 0)
+
+        # ensure that only int and float type specifiers work
+        for format_spec in ([chr(x) for x in range(ord('a'), ord('z')+1)] +
+                            [chr(x) for x in range(ord('A'), ord('Z')+1)]):
+            if not format_spec in 'bcdoxXeEfFgGn%':
+                self.assertRaises(ValueError, 0 .__format__, format_spec)
+                self.assertRaises(ValueError, 1 .__format__, format_spec)
+                self.assertRaises(ValueError, (-1) .__format__, format_spec)
+
+        # ensure that float type specifiers work; format converts
+        #  the long to a float
+        for format_spec in 'eEfFgGn%':
+            for value in [0, 1, -1, 100, -100, 1234567890, -1234567890]:
+                self.assertEqual(value.__format__(format_spec),
+                                 float(value).__format__(format_spec))
+
+    def test_float__format__(self):
+        # these should be rewritten to use both format(x, spec) and
+        # x.__format__(spec)
+
+        def test(f, format_spec, result):
+            assert type(f) == float
+            assert type(format_spec) == str
+            self.assertEqual(f.__format__(format_spec), result)
+
+        test(0.0, 'f', '0.000000')
+
+        # the default is 'g', except for empty format spec
+        test(0.0, '', '0.0')
+        test(0.01, '', '0.01')
+        test(0.01, 'g', '0.01')
+
+        test( 1.0, ' g', ' 1')
+        test(-1.0, ' g', '-1')
+        test( 1.0, '+g', '+1')
+        test(-1.0, '+g', '-1')
+        test(1.1234e200, 'g', '1.1234e+200')
+        test(1.1234e200, 'G', '1.1234E+200')
+
+
+        test(1.0, 'f', '1.000000')
+
+        test(-1.0, 'f', '-1.000000')
+
+        test( 1.0, ' f', ' 1.000000')
+        test(-1.0, ' f', '-1.000000')
+        test( 1.0, '+f', '+1.000000')
+        test(-1.0, '+f', '-1.000000')
+        test(1.1234e200, 'f', '1.1234e+200')
+        test(1.1234e200, 'F', '1.1234e+200')
+
+        # temporarily removed.  see issue 1600
+ #       test( 1.0, 'e', '1.000000e+00')
+ #       test(-1.0, 'e', '-1.000000e+00')
+ #       test( 1.0, 'E', '1.000000E+00')
+ #       test(-1.0, 'E', '-1.000000E+00')
+ #       test(1.1234e20, 'e', '1.123400e+20')
+ #       test(1.1234e20, 'E', '1.123400E+20')
+
+        # % formatting
+        test(-1.0, '%', '-100.000000%')
+
+        # format spec must be string
+        self.assertRaises(TypeError, 3.0.__format__, None)
+        self.assertRaises(TypeError, 3.0.__format__, 0)
+
+        # other format specifiers shouldn't work on floats,
+        #  in particular int specifiers
+        for format_spec in ([chr(x) for x in range(ord('a'), ord('z')+1)] +
+                            [chr(x) for x in range(ord('A'), ord('Z')+1)]):
+            if not format_spec in 'eEfFgGn%':
+                self.assertRaises(ValueError, format, 0.0, format_spec)
+                self.assertRaises(ValueError, format, 1.0, format_spec)
+                self.assertRaises(ValueError, format, -1.0, format_spec)
+                self.assertRaises(ValueError, format, 1e100, format_spec)
+                self.assertRaises(ValueError, format, -1e100, format_spec)
+                self.assertRaises(ValueError, format, 1e-100, format_spec)
+                self.assertRaises(ValueError, format, -1e-100, format_spec)
+
+
 def test_main():
     run_unittest(TypesTests)
 
diff --git a/Misc/NEWS b/Misc/NEWS
index 9025aa4..4341444 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -97,18 +97,1570 @@
   of PyString.
 
 
+<<<<<<< .working
+=======
+- Issue #1402: Fix a crash on exit, when another thread is still running, and
+  if the deallocation of its frames somehow calls the PyGILState_Ensure() /
+  PyGILState_Release() functions.
+
+- Expose the Py_Py3kWarningFlag as sys.py3kwarning.
+
+- Issue #1445: Fix a SystemError when accessing the ``cell_contents``
+  attribute of an empty cell object.
+
+- Issue #1460: The utf-7 incremental decoder did not accept truncated input.
+  It now correctly saves its state between chunks of data.
+
+- Patch #1739468: Directories and zipfiles containing a __main__.py file can
+  now be directly executed by passing their name to the interpreter. The
+  directory/zipfile is automatically inserted as the first entry in sys.path.
+
+- Issue #1265: Fix a problem with sys.settrace, if the tracing function uses a
+  generator expression when at the same time the executed code is closing a
+  paused generator.
+
+- sets and frozensets now have an isdisjoint() method.
+
+- optimize the performance of builtin.sum().
+
+- Fix warnings found by the new version of the Coverity checker.
+
+- The enumerate() builtin function is no longer bounded to sequences smaller
+  than LONG_MAX.  Formerly, it raised an OverflowError.  Now, automatically
+  shifts from ints to longs.
+
+- Issue #1686386: Tuple's tp_repr did not take into account the possibility of
+  having a self-referential tuple, which is possible from C code.  Nor did
+  object's tp_str consider that a type's tp_str could do something that could
+  lead to an inifinite recursion.  Py_ReprEnter() and Py_EnterRecursiveCall(),
+  respectively, fixed the issues.
+
+- Issue #1164: It was possible to trigger deadlock when using the 'print'
+  statement to write to a file since the GIL was not released as needed.  Now
+  PyObject_Print() does the right thing along with various tp_print
+  implementations of the built-in types and those in the collections module.
+
+- Issue #1147: Exceptions were directly allowing string exceptions in their
+  throw() method even though string exceptions no longer allowed.
+
+- Issue #1096: Prevent a segfault from getting the repr of a very deeply nested
+  list by using the recursion counter.
+
+- Issue #1202533: Fix infinite recursion calls triggered by calls to
+  PyObject_Call() never calling back out to Python code to trigger recursion
+  depth updates/checks.  Required the creation of a static RuntimeError
+  instance in case normalizing an exception put the recursion check value past
+  its limit.  Fixes crashers infinite_rec_(1|2|4|5).py.
+
+- Patch #1031213: Decode source line in SyntaxErrors back to its original source
+  encoding.
+
+- Patch #1673759: add a missing overflow check when formatting floats
+  with %G.
+
+- Prevent expandtabs() on string and unicode objects from causing a segfault
+  when a large width is passed on 32-bit platforms.
+
+- Bug #1733488: Fix compilation of bufferobject.c on AIX.
+
+- Bug #1722485: remove docstrings again when running with -OO.
+
+- Add new attribute names for function objects.  All the func_* become
+  __*__ attributes.  (Some already existed, e.g., __doc__ and __name__.)
+
+- Add -3 option to the interpreter to warn about features that are
+  deprecated and will be changed/removed in Python 3.0.
+
+- Patch #1686487: you can now pass any mapping after '**' in function
+  calls.
+
+- except clauses may now be spelled either "except E, target:" or
+  "except E as target:". This is to provide forwards compatibility with
+  Python 3.0.
+
+- Deprecate BaseException.message as per PEP 352.
+
+- Bug #1303614: don't expose object's __dict__ when the dict is
+  inherited from a builtin base.
+
+- When __slots__ are set to a unicode string, make it work the same as
+  setting a plain string, ie don't expand to single letter identifiers.
+
+- Request #1191699:  Slices can now be pickled.
+
+- Request #1193128:  str.translate() now allows a None argument for
+  translations that only remove characters without re-mapping the
+  remaining characters.
+
+- Patch #1682205: a TypeError while unpacking an iterable is no longer
+  masked by a generic one with the message "unpack non-sequence".
+
+- Remove unused file Python/fmod.c.
+
+- Bug #1683368: The object.__init__() and object.__new__() methods are
+  now stricter in rejecting excess arguments.  The only time when
+  either allows excess arguments is when it is not overridden and the
+  other one is.  For backwards compatibility, when both are
+  overridden, it is a deprecation warning (for now; maybe a Py3k
+  warning later).  Also, type.__init__() insists on the same signature
+  as supported by type.__new__().
+
+- Patch #1675423: PyComplex_AsCComplex() now tries to convert an object
+  to complex using its __complex__() method before falling back to the
+  __float__() method. Therefore, the functions in the cmath module now
+  can operate on objects that define a __complex__() method.
+
+- Patch #1623563: allow __class__ assignment for classes with __slots__.
+  The old and the new class are still required to have the same slot names.
+
+- Patch #1642547: Fix an error/crash when encountering syntax errors in
+  complex if statements.
+
+- Patch #1462488: Python no longer segfaults when ``object.__reduce_ex__()``
+  is called with an object that is faking its type.
+
+- Patch #1680015: Don't modify __slots__ tuple if it contains an unicode
+  name.
+
+- Patch #1444529: the builtin compile() now accepts keyword arguments.
+
+- Bug #1678647: write a newline after printing an exception in any
+  case, even when converting the value to a string failed.
+
+- The dir() function has been extended to call the __dir__() method on
+  its argument, if it exists. If not, it will work like before. This allows
+  customizing the output of dir() in the presence of a __getattr__().
+
+- Patch #922167: Python no longer segfaults when faced with infinitely
+  self-recursive reload() calls (as reported by bug #742342).
+
+- Patch #1675981: remove unreachable code from ``type.__new__()`` method.
+
+- Patch #1491866: change the complex() constructor to allow parthensized
+  forms. This means complex(repr(x)) now works instead of raising a
+  ValueError.
+
+- Patch #703779: unset __file__ in __main__ after running a file. This
+  makes the filenames the warning module prints much more sensible when
+  a PYTHONSTARTUP file is used.
+
+- Variant of patch #697613: don't exit the interpreter on a SystemExit
+  exception if the -i command line option or PYTHONINSPECT environment
+  variable is given, but break into the interactive interpreter just like
+  on other exceptions or normal program exit.
+
+- Patch #1638879: don't accept strings with embedded NUL bytes in long().
+
+- Bug #1674503: close the file opened by execfile() in an error condition.
+
+- Patch #1674228: when assigning a slice (old-style), check for the
+  sq_ass_slice instead of the sq_slice slot.
+
+- When printing an unraisable error, don't print exceptions. before the name.
+  This duplicates the behavior whening normally printing exceptions.
+
+- Bug #1653736: Properly discard third argument to slot_nb_inplace_power.
+
+- PEP 352: Raising a string exception now triggers a TypeError.  Attempting to
+  catch a string exception raises DeprecationWarning.
+
+- Bug #1377858: Fix the segfaulting of the interpreter when an object created
+  a weakref on itself during a __del__ call for new-style classes (classic
+  classes still have the bug).
+
+- Bug #1579370: Make PyTraceBack_Here use the current thread, not the
+  frame's thread state.
+
+- patch #1630975: Fix crash when replacing sys.stdout in sitecustomize.py
+
+- Prevent seg fault on shutdown which could occur if an object
+  raised a warning.
+
+- Bug #1566280: Explicitly invoke threading._shutdown from Py_Main,
+  to avoid relying on atexit.
+
+- Bug #1590891: random.randrange don't return correct value for big number
+
+- Patch #1586791: Better exception messages for some operations on strings,
+  tuples and lists.
+
+- Bug #1067760: Deprecate passing floats to file.seek.
+
+- Bug #1591996: Correctly forward exception in instance_contains().
+
+- Bug #1588287: fix invalid assertion for `1,2` in debug builds.
+
+- Bug #1576657: when setting a KeyError for a tuple key, make sure that
+  the tuple isn't used as the "exception arguments tuple".
+
+- Bug #1565514, SystemError not raised on too many nested blocks.
+
+- Bug #1576174: WindowsError now displays the windows error code
+  again, no longer the posix error code.
+
+- Patch #1549049: Support long values in structmember, issue warnings
+  if the assigned value for structmember fields gets truncated.
+
+- Update the peephole optimizer to remove more dead code (jumps after returns)
+  and inline unconditional jumps to returns.
+
+- Bug #1545497: when given an explicit base, int() did ignore NULs
+  embedded in the string to convert.
+
+- Bug #1569998: break inside a try statement (outside a loop) is now
+  recognized and rejected.
+
+- list.pop(x) accepts any object x following the __index__ protocol.
+
+- A number of places, including integer negation and absolute value,
+  were fixed to not rely on undefined behaviour of the C compiler
+  anymore.
+
+- Bug #1566800: make sure that EnvironmentError can be called with any
+  number of arguments, as was the case in Python 2.4.
+
+- Patch #1567691: super() and new.instancemethod() now don't accept
+  keyword arguments any more (previously they accepted them, but didn't
+  use them).
+
+- Fix a bug in the parser's future statement handling that led to "with"
+  not being recognized as a keyword after, e.g., this statement:
+  from __future__ import division, with_statement
+
+- Bug #1557232: fix seg fault with def f((((x)))) and def f(((x),)).
+
+- Fix %zd string formatting on Mac OS X so it prints negative numbers.
+
+- Allow exception instances to be directly sliced again.
+
+- Bug #1551432: Exceptions do not define an explicit __unicode__ method.  This
+  allows calling unicode() on exceptions classes directly to succeed.
+
+- Bug #1542051: Exceptions now correctly call PyObject_GC_UnTrack.
+  Also make sure that every exception class has __module__ set to
+  'exceptions'.
+
+- Bug #1550983: emit better error messages for erroneous relative
+  imports (if not in package and if beyond toplevel package).
+
+- Overflow checking code in integer division ran afoul of new gcc
+  optimizations.  Changed to be more standard-conforming.
+
+- Patch #1542451: disallow continue anywhere under a finally.
+
+- Patch #1546288: fix seg fault in dict_equal due to ref counting bug.
+
+- The return tuple from str.rpartition(sep) is (tail, sep, head) where
+  head is the original string if sep was not found.
+
+- Bug #1520864: unpacking singleton tuples in list comprehensions and
+  generator expressions (x for x, in ... ) works again.  Fixing this problem
+  required changing the .pyc magic number.  This means that .pyc files
+  generated before 2.5c2 will be regenerated.
+
+- ``with`` and ``as`` are now keywords.
+
+- Bug #1664966: Fix crash in exec if Unicode filename can't be decoded.
+
+- Issue #1537: Changed GeneratorExit's base class from Exception to
+  BaseException.
+
+- Fix Issue #1703448: A joined thread could show up in the
+  threading.enumerate() list after the join() for a brief period until
+  it actually exited.
+
+
+Library
+-------
+
+- Issue #1916. Added isgenerator() and isgeneratorfunction() to inspect.py.
+
+- #1224: Fixed bad url parsing when path begins with double slash.
+
+- ctypes instances that are not or do not contain pointers can now be
+  pickled.
+
+- Patch #1966: Break infinite loop in httplib when the servers
+  implements the chunked encoding incorrectly.
+
+- Rename rational.py to fractions.py and the rational.Rational class
+  to fractions.Fraction, to avoid the name clash with the abstract
+  base class numbers.Rational.  See discussion in issue #1682.
+
+- The pickletools module now provides an optimize() function
+  that eliminates unused PUT opcodes from a pickle string.
+
+- #2021: Allow tempfile.NamedTemporaryFile and SpooledTemporaryFile
+  to be used in with statements by correctly supporting the context
+  management protocol.
+
+- #1979: Add rich comparisons to Decimal, and make Decimal comparisons
+  involving a NaN follow the IEEE 754 standard.
+
+- #2004: tarfile.py: Use mode 0700 for temporary directories and default
+  permissions for missing directories.
+
+- #175006: The debugger used to skip the condition of a "while" statement
+  after the first iteration. Now it correctly steps on the expression, and
+  breakpoints on the "while" statement are honored on each loop.
+
+- #1765140: add an optional delay argument to FileHandler and its
+  subclasses. Defaults to false (existing behaviour), but if true,
+  defers opening the file until the first call to emit().
+
+- The pprint module now supports sets and frozensets.
+
+- #1221598: add optional callbacks to ftplib.FTP's storbinary() and
+  storlines() methods.  (Contributed by Phil Schwartz)
+
+- #1715: include sub-extension modules in pydoc's text output.
+
+- #1836: fix an off-by-one bug in TimedRotatingHandler's rollover
+  time calculation.
+
+- #1021: fix a bug to allow basicConfig to accept NOTSET as a level.
+
+- #932563: add LoggerAdapter convenience class to make it easier to add
+  contextual information in logging output.
+
+- #1760556: fix a bug to avoid FileHandler throwing an exception in
+  flush().
+
+- Bug #1530959: distutils' build command now uses different build directory
+  when building extension modules against versions of Python compiled
+  with ``--with-pydebug``.
+
+- #1555501: move plistlib from plat-mac directory to general library.
+
+- #1269: fix a bug in pstats.add_callers() and add a unit test file for
+  pstats.
+
+- #1669: don't allow shutil.rmtree() to be called on a symlink to a
+  directory.
+
+- #1664522: in urllib, don't read non-existing directories in ftp mode,
+  returning a 0-byte file -- raise an IOError instead.
+
+- #856047: respect the ``no_proxy`` environment variable when using the
+  ``http_proxy`` etc. environment variables in urllib.
+
+- #1178141: add a getcode() method to the addinfourls that urllib.open()
+  returns so that you can retrieve the HTTP status code.
+
+- Issue #1003: Fix zipfile decryption check, it would fail zip files
+  with extended local headers.
+
+- #1189216: Fix the zipfile module to work on archives with headers
+  past the 2**31 byte boundary.
+
+- #1336: fix a race condition in subprocess.Popen if the garbage
+  collector kicked in at the wrong time that would cause the process
+  to hang when the child wrote to stderr.
+
+- #1146: fix how textwrap breaks a long word that would start in the
+  last column of a line.
+
+- #1693149: trace.py --ignore-module - accept multiple comma-separated
+  modules to be given.
+
+- #1822: MIMEMultipart.is_multipart() behaves correctly for a just-created
+  (and empty) instance. Thanks Jonathan Share.
+
+- #1861: Added an attribute to the sched module which returns an ordered
+  list of upcoming events (displayed as named tuples).
+
+- #1837: The queue module now also supports a LIFO queue and a priority queue.
+
+- Patch #1048820: Add insert-mode editing to curses.textpad.Textbox
+  (patch by Stefan Wehr).  Also, fix an off-by-one bug in
+  Textbox.gather().
+
+- Issue #1831: ctypes now raises a TypeError if conflicting positional
+  and named arguments are passed to a Structure or Union initializer.
+  When too many positional arguments are passed, also a TypeError is
+  raised instead of a ValueError.
+
+- Convert the internal ctypes array type cache to a WeakValueDict so
+  that array types do not live longer than needed.
+
+- Issue #1786: pdb should use its own stdin/stdout around an exec call
+  and when creating a recursive instance.
+
+- Issue #1698398 Zipfile.printdir() crashed because the format string
+  expected a tuple type of length six instead of time.struct_time object.
+
+- Issue #1780: The Decimal constructor now accepts arbitrary leading
+  and trailing whitespace when constructing from a string.
+  Context.create_decimal no longer accepts trailing newlines.
+
+- Decimal.as_tuple(), difflib.find_longest_match() and inspect functions
+  that returned a tuple now return a named tuple.
+
+- Doctest now returns results as a named tuple for readability:
+      (0, 7) --> TestResults(failed=0, attempted=7)
+
+- Issue #846388. re.match is interruptible now, which is particularly
+  good for long regular expression matches.
+
+- pyexpat, patch #1137: allow setting buffer_size attribute
+  on Parser objects to set the character data buffer size.
+
+- Issue #1757: The hash of a Decimal instance is no longer affected by
+  the current context.
+
+- Patch #467924: add ZipFile.extract() and ZipFile.extractall() in the
+  zipfile module.
+
+- Issue #1646: Make socket support the TIPC protocol.
+
+- Bug #1742: return os.curdir from os.path.relpath() if both arguments are
+  equal instead of raising an exception.
+
+- Patch #1637: fix urlparse for URLs like 'http://x.com?arg=/foo'.
+
+- Patch #1698: allow '@' in username parsed by urlparse.py.
+
+- Issue #1735: TarFile.extractall() now correctly sets directory permissions
+  and times.
+
+- Bug #1713: posixpath.ismount() claims symlink to a mountpoint is a mountpoint.
+
+- Bug #1687: Fxed plistlib.py restricts <integer> to Python int when writing
+
+- Issue #1700: Regular expression inline flags incorrectly handle certain
+  unicode characters.
+
+- Issue #1689: PEP 3141, numeric abstract base classes.
+
+- Tk issue #1851526: Return results from Python callbacks to Tcl as
+  Tcl objects.
+
+- Issue #1642: Fix segfault in ctypes when trying to delete attributes.
+
+- Issue #1727780: Support loading pickles of random.Random objects created
+  on 32-bit systems on 64-bit systems, and vice versa. As a consequence
+  of the change, Random pickles created by Python 2.6 cannot be loaded
+  in Python 2.5.
+
+- Issue #1455: The distutils package now supports VS 2005 and VS 2008 for
+  both the msvccompiler and cygwincompiler.
+
+- Issue #1531: tarfile.py: Read fileobj from the current offset, do not
+  seek to the start.
+
+- Issue #1534: Added a dictionary sys.float_info with information about the
+  internal floating point type to the sys module.
+
+- Issue 1429818: patch for trace and doctest modules so they play nicely
+  together.
+
+- doctest made a bad assumption that a package's __loader__.get_data()
+  method used universal newlines.
+
+- Issue #1705170: contextlib.contextmanager was still swallowing
+  StopIteration in some cases. This should no longer happen.
+
+- Issue #1292: On alpha, arm, ppc, and s390 linux systems the
+  --with-system-ffi configure option defaults to "yes".
+
+- IN module for FreeBSD 8 is added and preexisting FreeBSD 6 and 7
+  files are updated.
+
+- Issues #1181, #1287: unsetenv() is now called when the os.environ.pop()
+  and os.environ.clear() methods are used.
+
+- ctypes will now work correctly on 32-bit systems when Python is
+  configured with --with-system-ffi.
+
+- Patch #1203: ctypes now does work on OS X when Python is built with
+  --disable-toolbox-glue.
+
+- collections.deque() now supports a "maxlen" argument.
+
+- itertools.count() is no longer bounded to LONG_MAX.  Formerly, it raised
+  an OverflowError.  Now, automatically shifts from ints to longs.
+
+- Patch #1541463: optimize performance of cgi.FieldStorage operations.
+
+- Decimal is fully updated to the latest Decimal Specification (v1.66).
+
+- Bug #1153: repr.repr() now doesn't require set and dictionary items
+  to be orderable to properly represent them.
+
+- A 'c_longdouble' type was added to the ctypes module.
+
+- Bug #1709599: Run test_1565150 only if the file system is NTFS.
+
+- When encountering a password-protected robots.txt file the RobotFileParser
+  no longer prompts interactively for a username and password (bug 813986).
+
+- TarFile.__init__() no longer fails if no name argument is passed and
+  the fileobj argument has no usable name attribute (e.g. StringIO).
+
+- The functools module now provides 'reduce', for forward compatibility
+  with Python 3000.
+
+- Server-side SSL support and cert verification added, by Bill Janssen.
+
+- socket.ssl deprecated; use new ssl module instead.
+
+- uuid creation is now threadsafe.
+
+- EUC-KR codec now handles the cheot-ga-keut composed make-up hangul
+  syllables.
+
+- GB18030 codec now can encode additional two-byte characters that
+  are missing in GBK.
+
+- Add new codecs for UTF-32, UTF-32-LE and UTF-32-BE.
+
+- Bug #1704793: Return UTF-16 pair if unicodedata.lookup cannot
+  represent the result in a single character.
+
+- Bug #978833: Close https sockets by releasing the _ssl object.
+
+- Change location of the package index to pypi.python.org/pypi
+
+- Bug #1701409: Fix a segfault in printing ctypes.c_char_p and
+  ctypes.c_wchar_p when they point to an invalid location.  As a
+  sideeffect the representation of these instances has changed.
+
+- tarfile.py: Added "exclude" keyword argument to TarFile.add().
+
+- Bug #1734723: Fix repr.Repr() so it doesn't ignore the maxtuple attribute.
+
+- The urlopen function of urllib2 now has an optional timeout parameter (note
+  that it actually works with HTTP, HTTPS, FTP and FTPS connections).
+
+- In ftplib, the FTP.ntransfercmd method, when in passive mode, now uses
+  the socket.create_connection function, using the timeout specified at
+  connection time.
+
+- Bug #1728403: Fix a bug that CJKCodecs StreamReader hangs when it
+  reads a file that ends with incomplete sequence and sizehint argument
+  for .read() is specified.
+
+- Bug #1730389: Change time.strptime() to use ``\s+`` instead of ``\s*`` when
+  matching spaces in the specified format argument.
+
+- SF 1668596/1720897: distutils now copies data files
+  even if package_dir is empty.
+
+- sha now raises a DeprecationWarning upon import.
+
+- md5 now raises a DeprecationWarning upon import.
+
+- Issue1385: The hmac module now computes the correct hmac when using hashes
+  with a block size other than 64 bytes (such as sha384 and sha512).
+
+- mimify now raises a DeprecationWarning upon import.
+
+- MimeWriter now raises a DeprecationWarning upon import.
+
+- tarfile.py: Improved unicode support. Unicode input names are now
+  officially supported. Added "errors" argument to the TarFile class.
+
+- urllib.ftpwrapper class now accepts an optional timeout.
+
+- shlex.split() now has an optional "posix" parameter.
+
+- The posixfile module now raises a DeprecationWarning.
+
+- Remove the gopherlib module.  This also leads to the removal of gopher
+  support in urllib/urllib2.
+
+- Fix bug in marshal where bad data would cause a segfault due to
+  lack of an infinite recursion check.
+
+- Removed plat-freebsd2 and plat-freebsd3 directories (and IN.py in
+  the directories).
+
+- HTML-escape the plain traceback in cgitb's HTML output, to prevent
+  the traceback inadvertently or maliciously closing the comment and
+  injecting HTML into the error page.
+
+- The popen2 module and os.popen* are deprecated.  Use the subprocess module.
+
+- Added an optional credentials argument to SMTPHandler, for use with SMTP
+  servers which require authentication.
+
+- Patch #1695948: Added optional timeout parameter to SocketHandler.
+
+- Bug #1652788: Minor fix for currentframe.
+
+- Patch #1598415: Added WatchedFileHandler to better support external
+  log file rotation using e.g. newsyslog or logrotate. This handler is
+  only useful in Unix/Linux environments.
+
+- Bug #1706381: Specifying the SWIG option "-c++" in the setup.py file
+  (as opposed to the command line) will now write file names ending in
+  ".cpp" too.
+
+- As specified in RFC 2616, an HTTP response like 2xx indicates that
+  the client's request was successfully received, understood, and accepted.
+  Now in these cases no error is raised in urllib (issue #1177) and urllib2.
+
+- Bug #1290505: time.strptime's internal cache of locale information is now
+  properly recreated when the locale is changed.
+
+- Patch #1685563: remove (don't add) duplicate paths in distutils.MSVCCompiler.
+
+- Added a timeout parameter to the constructor of other protocols
+  (telnetlib, ftplib, smtplib and poplib). This is second part of the
+  work started with create_connection() and timeout in httplib, and
+  closes patch #723312.
+
+- Patch #1676823: Added create_connection() to socket.py, which may be
+  called with a timeout, and use it from httplib (whose HTTPConnection
+  and HTTPSConnection now accept an optional timeout).
+
+- Bug #978833: Revert r50844, as it broke _socketobject.dup.
+
+- Bug #1675967: re patterns pickled with Python 2.4 and earlier can
+  now be unpickled with Python 2.5 and newer.
+
+- Patch #1630118: add a SpooledTemporaryFile class to tempfile.py.
+
+- Patch #1273829: os.walk() now has a "followlinks" parameter. If set to
+  True (which is not the default), it visits symlinks pointing to
+  directories.
+
+- Bug #1681228: the webbrowser module now correctly uses the default
+  GNOME or KDE browser, depending on whether there is a session of one
+  of those present. Also, it tries the Windows default browser before
+  trying Mozilla variants.
+
+- Patch #1339796: add a relpath() function to os.path.
+
+- Patch #1681153: the wave module now closes a file object it opened if
+  initialization failed.
+
+- Bug #767111: fix long-standing bug in urllib which caused an
+  AttributeError instead of an IOError when the server's response didn't
+  contain a valid HTTP status line.
+
+- Patch #957650: "%var%" environment variable references are now properly
+  expanded in ntpath.expandvars(), also "~user" home directory references
+  are recognized and handled on Windows.
+
+- Patch #1429539: pdb now correctly initializes the __main__ module for
+  the debugged script, which means that imports from __main__ work
+  correctly now.
+
+- The nonobvious commands.getstatus() function is now deprecated.
+
+- Patch #1393667: pdb now has a "run" command which restarts the debugged
+  Python program, optionally with different arguments.
+
+- Patch #1649190: Adding support for _Bool to ctypes as c_bool.
+
+- Patch #1530482: add pydoc.render_doc() which returns the documentation
+  for a thing instead of paging it to stdout, which pydoc.doc() does.
+
+- Patch #1533909: the timeit module now accepts callables in addition to
+  strings for the code to time and the setup code. Also added two
+  convenience functions for instantiating a Timer and calling its methods.
+
+- Patch #1537850: tempfile.NamedTemporaryFile now has a "delete" parameter
+  which can be set to False to prevent the default delete-on-close
+  behavior.
+
+- Patch #1581073: add a flag to textwrap that prevents the dropping of
+  whitespace while wrapping.
+
+- Patch #1603688: ConfigParser.SafeConfigParser now checks values that
+  are set for invalid interpolation sequences that would lead to errors
+  on reading back those values.
+
+- Added support for the POSIX.1-2001 (pax) format to tarfile.py. Extended
+  and cleaned up the test suite. Added a new testtar.tar.
+
+- Patch #1449244: Support Unicode strings in
+  email.message.Message.{set_charset,get_content_charset}.
+
+- Patch #1542681: add entries for "with", "as" and "CONTEXTMANAGERS" to
+  pydoc's help keywords.
+
+- Patch #1555098: use str.join() instead of repeated string
+  concatenation in robotparser.
+
+- Patch #1635454: the csv.DictWriter class now includes the offending
+  field names in its exception message if you try to write a record with
+  a dictionary containing fields not in the CSV field names list.
+
+- Patch #1668100: urllib2 now correctly raises URLError instead of
+  OSError if accessing a local file via the file:// protocol fails.
+
+- Patch #1677862: Require a space or tab after import in .pth files.
+
+- Patch #1192590: Fix pdb's "ignore" and "condition" commands so they trap
+  the IndexError caused by passing in an invalid breakpoint number.
+
+- Patch #1599845: Add an option to disable the implicit calls to server_bind()
+  and server_activate() in the constructors for TCPServer, SimpleXMLRPCServer
+  and DocXMLRPCServer.
+
+- Bug #1531963: Make SocketServer.TCPServer's server_address always
+  be equal to calling getsockname() on the server's socket. Fixed by
+  patch #1545011.
+
+- Patch #742598: Add .timeout attribute to SocketServer that calls
+  .handle_timeout() when no requests are received.
+
+- Bug #1651235: When a tuple was passed to a ctypes function call,
+  Python would crash instead of raising an error.
+
+- Bug #1646630: ctypes.string_at(buf, 0) and ctypes.wstring_at(buf, 0)
+  returned string up to the first NUL character.
+
+- Patch #957003: Implement smtplib.LMTP.
+
+- Patch #1481079: add support for HTTP_REFERER to CGIHTTPServer.
+
+- Patch #1675424: Added tests for uncovered code in the zipfile module.
+  The KeyError raised by Zipfile.getinfo for nonexistent names now has
+  a descriptive message.
+
+- Bug #1115886: os.path.splitext('.cshrc') gives now ('.cshrc', '').
+
+- unittest now verifies more of its assumptions. In particular, TestCase
+  and TestSuite subclasses (not instances) are no longer accepted in
+  TestSuite.addTest(). This should cause no incompatibility since it
+  never made sense with ordinary subclasses -- the failure just occurred
+  later, with a more cumbersome exception.
+
+- Patch #787789: allow to pass custom TestRunner instances to unittest's
+  main() function.
+
+- Patches #1550273, #1550272: fix a few bugs in unittest and add a
+  comprehensive test suite for the module.
+
+- Patch #1001604: glob.glob() now returns unicode filenames if it was
+  given a unicode argument and os.listdir() returns unicode filenames.
+
+- Patch #1673619: setup.py identifies extension modules it doesn't know how
+  to build and those it knows how to build but that fail to build.
+
+- Patch #912410: Replace HTML entity references for attribute values
+  in HTMLParser.
+
+- Patch #1663234: you can now run doctest on test files and modules
+  using "python -m doctest [-v] filename ...".
+
+- Patch #1121142: Implement ZipFile.open.
+
+- Taught setup.py how to locate Berkeley DB on Macs using MacPorts.
+
+- Added heapq.merge() for merging sorted input streams.
+
+- Added collections.namedtuple() for assigning field names to tuples.
+
+- Added itertools.izip_longest().
+
+- Have the encoding package's search function dynamically import using absolute
+  import semantics.
+
+- Patch #1647484: Renamed GzipFile's filename attribute to name.
+
+- Patch #1517891: Mode 'a' for ZipFile now creates the file if it
+  doesn't exist.
+
+- Patch #698833: Support file decryption in zipfile.
+
+- Patch #685268: Consider a package's __path__ in imputil.
+
+- Patch 1463026: Support default namespace in XMLGenerator.
+
+- Patch 1571379: Make trace's --ignore-dir facility work in the face of
+  relative directory names.
+
+- Bug #1600860: Search for shared python library in LIBDIR,
+  not lib/python/config, on "linux" and "gnu" systems.
+
+- Patch #1652681: tarfile.py: create nonexistent files in append mode and
+  allow appending to empty files.
+
+- Bug #1124861: Automatically create pipes if GetStdHandle fails in
+  subprocess.
+
+- Patch #1634778: add missing encoding aliases for iso8859_15 and
+  iso8859_16.
+
+- Patch #1638243: the compiler package is now able to correctly compile
+  a with statement; previously, executing code containing a with statement
+  compiled by the compiler package crashed the interpreter.
+
+- Bug #1643943: Fix time.strptime's support for the %U directive.
+
+- Patch #1507247: tarfile.py: use current umask for intermediate
+  directories.
+
+- Patch #1627441: close sockets properly in urllib2.
+
+- Bug #494589: make ntpath.expandvars behave according to its docstring.
+
+- Changed platform module API python_version_tuple() to actually
+  return a tuple (it used to return a list).
+
+- Added new platform module APIs python_branch(), python_revision(),
+  python_implementation() and linux_distribution().
+
+- Added support for IronPython and Jython to the platform module.
+
+- The sets module has been deprecated.  Use the built-in set/frozenset types
+  instead.
+
+- Bug #1610795: make ctypes.util.find_library work on BSD systems.
+
+- Fixes for 64-bit Windows: In ctypes.wintypes, correct the
+  definitions of HANDLE, WPARAM, LPARAM data types.  Make
+  parameterless foreign function calls work.
+
+- The version number of the ctypes package changed to "1.1.0".
+
+- Bug #1627575: logging: Added _open() method to FileHandler which can
+  be used to reopen files. The FileHandler instance now saves the
+  encoding (which can be None) in an attribute called "encoding".
+
+- Bug #411881: logging.handlers: bare except clause removed from
+  SMTPHandler.emit. Now, only ImportError is trapped.
+
+- Bug #411881: logging.handlers: bare except clause removed from
+  SocketHandler.createSocket. Now, only socket.error is trapped.
+
+- Bug #411881: logging: bare except clause removed from LogRecord.__init__.
+  Now, only ValueError, TypeError and AttributeError are trapped.
+
+- Patch #1504073: Fix tarfile.open() for mode "r" with a fileobj argument.
+
+- Patch #1182394 from Shane Holloway: speed up HMAC.hexdigest.
+
+- Patch #1262036: Prevent TarFiles from being added to themselves under
+  certain conditions.
+
+- Patch #1230446: tarfile.py: fix ExFileObject so that read() and tell()
+  work correctly together with readline().
+
+- Patch #1484695: The tarfile module now raises a HeaderError exception
+  if a buffer given to frombuf() is invalid.
+
+- Bug #1503765: Fix a problem in logging.config with spaces in comma-
+  separated lists read from logging config files.
+
+- Patch #1604907: Fix problems in logging.handlers caused at logging shutdown
+  when syslog handlers fail to initialize because of syslogd problems.
+
+- Patch #1608267: fix a race condition in os.makedirs() if the directory
+  to be created is already there.
+
+- Patch #1610437: fix a tarfile bug with long filename headers.
+
+- Patch #1371075: Make ConfigParser accept optional dict type
+  for ordering, sorting, etc.
+
+- Bug #1563807: _ctypes built on AIX fails with ld ffi error.
+
+- Bug #1598620: A ctypes Structure cannot contain itself.
+
+- Patch #1070046: Marshal new-style objects like InstanceType
+  in xmlrpclib.
+
+- cStringIO.truncate(-1) now raises an IOError, like StringIO and
+  regular files.
+
+- Patch #1472877: Fix Tix subwidget name resolution.
+
+- Patch #1594554: Always close a tkSimpleDialog on ok(), even
+  if an exception occurs.
+
+- Patch #1538878: Don't make tkSimpleDialog dialogs transient if
+  the parent window is withdrawn.
+
+- Bug #1597824: return the registered function from atexit.register()
+  to facilitate usage as a decorator.
+
+- Patch #1360200: Use unmangled_version RPM spec field to deal with
+  file name mangling.
+
+- Patch #1359217: Process 2xx response in an ftplib transfer
+  that precedes an 1xx response.
+
+- Patch #1355023: support whence argument for GzipFile.seek.
+
+- Patch #1065257: Support passing open files as body in
+  HTTPConnection.request().
+
+- Bug #1569790: mailbox.py: Maildir.get_folder() and MH.get_folder()
+  weren't passing the message factory on to newly created Maildir/MH
+  objects.
+
+- Patch #1514543: mailbox.py: In the Maildir class, report errors if there's
+  a filename clash instead of possibly losing a message.  (Patch by David
+  Watson.)
+
+- Patch #1514544: Try to ensure that messages/indexes have been physically
+  written to disk after calling .flush() or .close(). (Patch by David
+  Watson.)
+
+- Patch #1592250: Add elidge argument to Tkinter.Text.search.
+
+- Patch #838546: Make terminal become controlling in pty.fork()
+
+- Patch #1351744: Add askyesnocancel helper for tkMessageBox.
+
+- Patch #1060577: Extract list of RPM files from spec file in
+  bdist_rpm
+
+- Bug #1586613: fix zlib and bz2 codecs' incremental en/decoders.
+
+- Patch #1583880: fix tarfile's problems with long names and posix/
+  GNU modes.
+
+- Bug #1586448: the compiler module now emits the same bytecode for
+  list comprehensions as the builtin compiler, using the LIST_APPEND
+  opcode.
+
+- Fix codecs.EncodedFile which did not use file_encoding in 2.5.0, and
+  fix all codecs file wrappers to work correctly with the "with"
+  statement (bug #1586513).
+
+- Lib/modulefinder.py now handles absolute and relative imports
+  correctly.
+
+- Patch #1567274: Support SMTP over TLS.
+
+- Patch #1560695: Add .note.GNU-stack to ctypes' sysv.S so that
+  ctypes isn't considered as requiring executable stacks.
+
+- ctypes callback functions only support 'fundamental' data types as
+  result type.  Raise an error when something else is used.  This is a
+  partial fix for Bug #1574584.
+
+- Fix turtle so that time.sleep is imported for the entire library.  Allows
+  the demo2 function to be executed on its own instead of only when the
+  module is run as a script.
+
+- Bug #813342: Start the IDLE subprocess with -Qnew if the parent
+  is started with that option.
+
+- Bug #1565150: Fix subsecond processing for os.utime on Windows.
+
+- Support for MSVC 8 was added to bdist_wininst.
+
+- Bug #1446043: correctly raise a LookupError if an encoding name given
+  to encodings.search_function() contains a dot.
+
+- Bug #1560617: in pyclbr, return full module name not only for classes,
+  but also for functions.
+
+- Bug #1457823: cgi.(Sv)FormContentDict's constructor now takes
+  keep_blank_values and strict_parsing keyword arguments.
+
+- Bug #1566602: correct failure of posixpath unittest when $HOME ends
+  with a slash.
+
+- Bug #1565661: in webbrowser, split() the command for the default
+  GNOME browser in case it is a command with args.
+
+- Made the error message for time.strptime when the data data and format do
+  match be more clear.
+
+- Fix a bug in traceback.format_exception_only() that led to an error
+  being raised when print_exc() was called without an exception set.
+  In version 2.4, this printed "None", restored that behavior.
+
+- Make webbrowser.BackgroundBrowser usable in Windows (it wasn't because
+  the close_fds arg to subprocess.Popen is not supported).
+
+- Reverted patch #1504333 to sgmllib because it introduced an infinite loop.
+
+- Patch #1553314: Fix the inspect.py slowdown that was hurting IPython & SAGE
+  by adding smarter caching in inspect.getmodule()
+
+- Fix missing import of the types module in logging.config.
+
+- Patch #1550886: Fix decimal module context management implementation
+  to match the localcontext() example from PEP 343.
+
+- Bug #1545341: The 'classifier' keyword argument to the Distutils setup()
+  function now accepts tuples as well as lists.
+
+- Bug #1541863: uuid.uuid1 failed to generate unique identifiers
+  on systems with low clock resolution.
+
+- Bug #1531862: Do not close standard file descriptors in subprocess.
+
+- idle: Honor the "Cancel" action in the save dialog (Debian bug #299092).
+
+- Fix utf-8-sig incremental decoder, which didn't recognise a BOM when the
+  first chunk fed to the decoder started with a BOM, but was longer than 3 bytes.
+
+- The implementation of UnicodeError objects has been simplified (start and end
+  attributes are now stored directly as Py_ssize_t members).
+
+- Issue829951: In the smtplib module, SMTP.starttls() now complies with
+  RFC 3207 and forgets any knowledge obtained from the server not obtained
+  from the TLS negotiation itself.  Patch contributed by Bill Fenner.
+
+- Issue1339: The smtplib.SMTP class has been refactored a bit such
+  that the SMTP.starttls() caller no longer needs to call ehlo()
+  beforehand.  SMTP.starttls() now raises an exception of the server
+  does not claim to support starttls.  Adds the SMTP.ehlo_or_helo_if_needed()
+  method.  Patch contributed by Bill Fenner.
+
+
+>>>>>>> .merge-right.r60891
 Extension Modules
 -----------------
 
 <<<<<<< .working
+<<<<<<< .working
 - Issue #1762972: Readded the reload() function as imp.reload()
 =======
+=======
+- #2112: mmap.error is now a subclass of EnvironmentError and not a
+  direct EnvironmentError
+
+>>>>>>> .merge-right.r60878
 - Bug #2111: mmap segfaults when trying to write a block opened with PROT_READ
 
 - #2063: correct order of utime and stime in os.times() result on Windows.
 >>>>>>> .merge-right.r60845
 
 
+<<<<<<< .working
+=======
+- Updated ``big5hkscs`` codec to the HKSCS revision of 2004.
+
+- #1940: make it possible to use curses.filter() before curses.initscr()
+  as the documentation says.
+
+- Backport of _fileio module from Python 3.0.
+
+- #1087741: mmap.mmap is now a class, not a factory function. It is also
+  subclassable now.
+
+- Patch #1648: added ``sys.getprofile()`` and ``sys.gettrace()``.
+
+- Patch #1663329: added ``os.closerange()`` function to quickly close a range
+  of file descriptors without considering errors.
+
+- Patch 976880: ``mmap`` objects now have an ``rfind`` method that
+  works as expected.  ``mmap.find`` also takes an optional ``end``
+  parameter.
+
+- _winreg's HKEY object has gained __enter__ and __exit__ methods to support
+  the context manager protocol.  The _winreg module also gained a new function
+  ``ExpandEnvironmentStrings`` to expand REG_EXPAND_SZ keys.
+
+- itertools.starmap() now accepts any iterable input. Previously, it required
+  the function inputs to be tuples.
+
+- Issue #1646: Make socket support TIPC. The socket module now has support
+  for TIPC under Linux, see http://tipc.sf.net/ for more information.
+
+- Added interface for Windows' WSAIoctl to socket object and added an example
+  for a simple network sniffer.
+
+- Bug #1301: Bad assert in _tkinter fixed.
+
+- Added bdist_wininst executable for VS 2008.
+
+- Bug #1604: collections.deque.__init__(iterable) now clears any prior contents
+  before adding elements from the iterable.  This fix brings the behavior into
+  line with that for list.__init__().
+
+- Added wide char functions to msvcrt module: getwch, getwche, putwch and
+  ungetwch. The functions accept or return unicode.
+
+- os.access now returns True on Windows for any existing directory.
+
+- Added warnpy3k function to the warnings module.
+
+- Marshal.dumps() now expects exact type matches for int, long, float, complex,
+  tuple, list, dict, set, and frozenset.  Formerly, it would silently miscode
+  subclasses of those types.  Now, it raises a ValueError instead.
+
+- Patch #1388440: Add set_completion_display_matches_hook and
+  get_completion_type to readline.
+
+- Bug #1649098: Avoid declaration of zero-sized array declaration in
+  structure.
+
+- Removed the rgbimg module; been deprecated since Python 2.5.
+
+- Bug #1721309: prevent bsddb module from freeing random memory.
+
+- Bug #1233: fix bsddb.dbshelve.DBShelf append method to work as
+  intended for RECNO databases.
+
+- pybsddb.sf.net Bug #477182: Load the database flags at database open
+  time so that opening a database previously created with the DB_DUP or
+  DB_DUPSORT flag set will keep the proper behavior on subsequent opens.
+  Specifically: dictionary assignment to a DB object will replace all
+  values for a given key when the database allows duplicate values.
+  DB users should use DB.put(k, v) when they want to store duplicates; not
+  DB[k] = v.
+
+- Add the bsddb.db.DBEnv.lock_id_free method.
+
+- Bug #1686475: Support stat'ing open files on Windows again.
+
+- Patch #1185447: binascii.b2a_qp() now correctly quotes binary characters
+  with ASCII value less than 32. Also, it correctly quotes dots only if
+  they occur on a single line, as opposed to the previous behavior of
+  quoting dots if they are the second character of any line.
+
+- Bug #1622896: fix a rare corner case where the bz2 module raised an
+  error in spite of a succesful compression.
+
+- Patch #1654417: make operator.{get,set,del}slice use the full range
+  of Py_ssize_t.
+
+- Patch #1646728: datetime.fromtimestamp fails with negative
+  fractional times.  With unittest.
+
+- Patch #1490190: posixmodule now includes os.chflags() and os.lchflags()
+  functions on platforms where the underlying system calls are available.
+
+- Patch #1494140: Add documentation for the new struct.Struct object.
+
+- Patch #1432399: Support the HCI protocol for bluetooth sockets
+
+- Patch #1657276: Make NETLINK_DNRTMSG conditional.
+
+- Bug #1653736: Complain about keyword arguments to time.isoformat.
+
+- Bug #1486663: don't reject keyword arguments for subclasses of builtin
+  types.
+
+- Patch #1610575: The struct module now supports the 't' code, for
+  C99 _Bool.
+
+- Patch #1635058: ensure that htonl and friends never accept or
+  return negative numbers, per the underlying C implementation.
+
+- Patch #1544279: Improve thread-safety of the socket module by moving
+  the sock_addr_t storage out of the socket object.
+
+- Patch #1019808: fix bug that causes an incorrect error to be returned
+  when a socket timeout is set and a connection attempt fails.
+
+- Speed up function calls into the math module.
+
+- Bug #1588217: don't parse "= " as a soft line break in binascii's
+  a2b_qp() function, instead leave it in the string as quopri.decode()
+  does.
+
+- Bug #1599782: Fix segfault on bsddb.db.DB().type().
+
+- Bug #1567666: Emulate GetFileAttributesExA for Win95.
+
+- Patch #1576166: Support os.utime for directories on Windows NT+.
+
+- Patch #1572724: fix typo ('=' instead of '==') in _msi.c.
+
+- Bug #1572832: fix a bug in ISO-2022 codecs which may cause segfault
+  when encoding non-BMP unicode characters.
+
+- Bug #1556784: allow format strings longer than 127 characters in
+  datetime's strftime function.
+
+- Fix itertools.count(n) to work with negative numbers again.
+
+- RLIMIT_SBSIZE was added to the resource module where available.
+
+- Bug #1551427: fix a wrong NULL pointer check in the win32 version
+  of os.urandom().
+
+- Bug #1548092: fix curses.tparm seg fault on invalid input.
+
+- Patch #1114: fix curses module compilation on 64-bit AIX, & possibly
+  other 64-bit LP64 platforms where attr_t is not the same size as a long.
+  (Contributed by Luke Mewburn.)
+
+- Bug #1550714: fix SystemError from itertools.tee on negative value for n.
+
+- Fixed a few bugs on cjkcodecs:
+  - gbk and gb18030 codec now handle U+30FB KATAKANA MIDDLE DOT correctly.
+  - iso2022_jp_2 codec now encodes into G0 for KS X 1001, GB2312
+    codepoints to conform the standard.
+  - iso2022_jp_3 and iso2022_jp_2004 codec can encode JIS X 0213:2
+    codepoints now.
+
+- Bug #1552726: in readline.c, avoid repeatedly polling in interactive
+  mode by only placing a timeout on the select() if an input hook has
+  been defined.  This prevents an interactive Python from waking up 10
+  times per second.  Patch by Richard Boulton.
+
+- fixed a bug with bsddb.DB.stat: the flags and txn keyword arguments
+  were transposed.
+
+- Added support for linking the bsddb module against BerkeleyDB 4.5.x
+  and 4.6.x.
+
+- Bug #1633621: if curses.resizeterm() or curses.resize_term() is called,
+  update _curses.LINES, _curses.COLS, curses.LINES and curses.COLS.
+
+- Fix an off-by-one bug in locale.strxfrm().
+
+- Fix libffi configure for hppa*-*-linux* | parisc*-*-linux*.
+
+- Build using system ffi library on arm*-linux*.
+
+- Bug #1372: zlibmodule.c: int overflow in PyZlib_decompress
+
+- bsddb module: Fix memory leak when using database cursors on
+  databases without a DBEnv.
+
+Tests
+-----
+
+- Refactor test_logging to use doctest.
+
+- Refactor test_profile and test_cprofile to use the same code to profile.
+
+- Make test_runpy reentrant by fixing _check_module to clear out any module
+  being tested.  Was causing an error by __import__ doing a reload on the
+  second run and thus suppressing bytecode recreation.
+
+- Capture socket connection resets and timeouts in test_socket_ssl and
+  test_urllib2net and raise test.test_support.ResourceDenied.
+
+- Patch #1559413: Fix test_cmd_line if sys.executable contains a space.
+
+- Added test.test_support.TransientResource which is a context manager to
+  surround calls to resources that are not guaranteed to work even if
+  test.test_support.requires says that the resource should exist.
+
+- Added a test for slicing of an exception.
+
+- Added test.test_support.EnvironmentVarGuard.  It's a class that provides a
+  context manager so that one can temporarily set or unset environment
+  variables.
+
+- Added some tests for modulefinder.
+
+- Converted test_imp to use unittest.
+
+- Fix bsddb test_basics.test06_Transactions to check the version
+  number properly.
+
+- test.test_support.catch_warning is a new context manager that can be used
+  to catch the warnings issued by the warning framework.
+
+
+Tools
+-----
+
+- Tools/scripts/reindent.py now creates the backup file using shutil.copy
+  to preserve user/group and permissions. Added also a --nobackup option
+  to not create the backup if the user is concerned regarding this.  Check
+  issue 1050828 for more details.
+
+- Tools/scripts/win_add2path.py was added. The simple script modifes the
+  PATH environment var of the HKCU tree and adds the python bin and script
+  directory.
+
+- Tools/18n/pygettext.py was added to the list of scripts installed by
+  Tools/scripts/setup.py (tracker item 642309).
+
+- Added IronPython and Jython support to pybench (part of which
+  was patch #1563844)
+
+- Made some minor changes to pybench output to allow the user
+  to see which Python version is running pybench
+
+- Added support for the new platform module feature
+  platform.python_implementation(); this will now be saved
+  in the benchmark pickle
+
+
+Documentation
+-------------
+
+- RFE #1765140: Updated documentation on FileHandler and subclasses to
+  include new optional delay argument.
+
+- Bug #932563: Added section on getting contextual information into logging
+  output, and added documentation for the new LoggerAdapter class.
+
+- Bug #1295: Added information about caching of formatted exception
+  information in the LogRecord by Formatter.format().
+
+- Bug #1637365: add subsection about "__name__ == __main__" to the
+  Python tutorial.
+
+- Patch #1698768: updated the "using Python on the Mac" intro.
+
+- Bug #1569057: Document that calling file.next() when the file is open for
+  writing is undefined.
+
+- Patch #1489771: the syntax rules in Python Reference Manual were
+  updated to reflect the current Python syntax.
+
+- Patch #1686451: Fix return type for
+  PySequence_{Count,Index,Fast_GET_SIZE}.
+
+- Patch #1679379: add documentation for fnmatch.translate().
+
+- Bug #1629566: clarify the docs on the return values of parsedate()
+  and parsedate_tz() in email.utils and rfc822.
+
+- Patch #1671450: add a section about subclassing builtin types to the
+  "extending and embedding" tutorial.
+
+- Bug #1629125: fix wrong data type (int -> Py_ssize_t) in PyDict_Next
+  docs.
+
+- Bug #1565919: document set types in the Language Reference.
+
+- Bug #1546052: clarify that PyString_FromString(AndSize) copies the
+  string pointed to by its parameter.
+
+- Bug #1566663: remove obsolete example from datetime docs.
+
+- Bug #1541682: Fix example in the "Refcount details" API docs.
+  Additionally, remove a faulty example showing PySequence_SetItem applied
+  to a newly created list object and add notes that this isn't a good idea.
+
+
+Tools/Demos
+-----------
+
+- Patch #1552024: add decorator support to unparse.py demo script.
+
+- Make auto-generated python.vim file list built-ins and exceptions in
+  alphatbetical order.  Makes output more deterministic and easier to tell if
+  the file is stale or not.
+
+- Bug #1546372: Fixed small bugglet in pybench that caused a missing
+  file not to get reported properly.
+
+
+Build
+-----
+
+- Have the search path for building extensions follow the declared order in
+  $CPPFLAGS and $LDFLAGS when adding directories from those environment
+  variables.
+
+- Bug #1983: Added a check to pyport to verify that sizeof(pid_t) is
+  smaller or equal sizeof(long).
+
+- Bug #1234: Fixed semaphore errors on AIX 5.2
+
+- Issue #1726: Remove Python/atof.c from PCBuild/pythoncore.vcproj
+
+- Removed PCbuild8/ directory and added a new build directory for VS 2005
+  based on the VS 2008 build directory to PC/VS8.0. The script
+  PCbuild/vs8to9.py was added to sync changes from PCbuild to PC/VS8.0.
+
+- Moved PCbuild/ directory for VS 2003 to PC/VS7.1 and renamed PCBuild9/
+  directory to PCBuild/.
+
+- Bug #1699: Define _BSD_SOURCE only on OpenBSD.
+
+- Bug #1608: use -fwrapv when GCC supports it.  This is important,
+  newer GCC versions may optimize away overflow buffer overflow checks
+  without this option!
+
+- Patch #1418: Make the AC_REPLACE_FUNCS object files actually work.
+
+- Add a FAST_LOOPS build option that speeds-up looping by trading away
+  periodic threadstate and signal checking in tight loops.  By default,
+  this option is turned-off.  It should only be enabled in debugged,
+  performance critical applications.
+
+- Patch #786737: Allow building in a tree of symlinks pointing to
+  a readonly source.
+
+- Bug #1737210: Change Manufacturer of Windows installer to PSF.
+
+- Bug #1746880: Correctly install DLLs into system32 folder on Win64.
+
+- Define _BSD_SOURCE, to get access to POSIX extensions on OpenBSD 4.1+.
+
+- Stop supporting AtheOS and cause a build error in configure for the platform.
+
+- Bug #1655392: don't add -L/usr/lib/pythonX.Y/config to the LDFLAGS
+  returned by python-config if Python was built with --enable-shared
+  because that prevented the shared library from being used.
+
+- Patch #1569798: fix a bug in distutils when building Python from a
+  directory within sys.exec_prefix.
+
+- Bug #1675511: Use -Kpic instead of -xcode=pic32 on Solaris/x86.
+
+- Disable _XOPEN_SOURCE on NetBSD 1.x.
+
+- configure now checks whether gcc supports the PyArg_ParseTuple format
+  attribute.
+
+- Bug #1578513: Cross compilation was broken by a change to configure.
+  Repair so that it's back to how it was in 2.4.3.
+
+- Patch #1576954: Update VC6 build directory; remove redundant
+  files in VC7.
+
+- Bug #1568842: Fix test for uintptr_t.
+
+- Patch #1540470, for OpenBSD 4.0.
+
+- Fix build failure on kfreebsd and on the hurd.
+
+- Fix the build of the library reference in info format.
+
+- Allow Emacs 22 for building the documentation in info format.
+
+- Makefile.pre.in(buildbottest): Run an optional script pybuildbot.identify
+  to include some information about the build environment.
+
+
+C API
+-----
+
+- Unified naming convention for free lists and their limits. All free lists
+  in Object/ are named ``free_list``, the counter ``numfree`` and the upper
+  limit is a macro ``PyName_MAXFREELIST`` inside an #ifndef block.
+
+- ``PySet_Add()`` can now modify a newly created frozenset.  Similarly to
+  ``PyTuple_SetItem``, it can be used to populate a brand new frozenset; but 
+  it does not steal a reference to the added item.
+
+- Added ``PySet_Check()`` and ``PyFrozenSet_Check()`` to the set API. 
+
+- Backport of PyUnicode_FromString(), _FromStringAndSize(), _Format and
+  _FormatV from Python 3.0. Made PyLong_AsSsize_t and PyLong_FromSsize_t
+  public functions.
+
+- Patch #1720595: add T_BOOL to the range of structmember types.
+
+- Issue #1534: Added ``PyFloat_GetMax()``, ``PyFloat_GetMin()`` and
+  ``PyFloat_GetInfo()`` to the float API.
+
+- Issue #1521: On 64bit platforms, using PyArgs_ParseTuple with the t# of w#
+  format code incorrectly truncated the length to an int, even when
+  PY_SSIZE_T_CLEAN is set.  The str.decode method used to return incorrect
+  results with huge strings.
+
+- Issue #1629: Renamed Py_Size, Py_Type and Py_Refcnt to Py_SIZE, Py_TYPE
+  and Py_REFCNT.
+
+- PEP 3123: Provide forward compatibility with Python 3.0, while keeping
+  backwards compatibility. Add Py_Refcnt, Py_Type, Py_Size, and
+  PyVarObject_HEAD_INIT.
+
+- Py_ssize_t fields work in structmember when HAVE_LONG_LONG is not defined.
+
+- Patch #1733960: Allow T_LONGLONG to accept ints.
+
+- T_PYSSIZET can now be used in PyMemberDef lists for Py_ssize_t members.
+
+- Added a new API function ``PyImport_ImportModuleNoBlock``.
+
+- Bug #1637022: Prefix AST symbols with _Py_.
+
+- Fix some leftovers from the conversion from int to Py_ssize_t
+  (relevant to strings and sequences of more than 2**31 items).
+
+- Make _PyGILState_NoteThreadState() static, it was not used anywhere
+  outside of pystate.c and should not be necessary.
+
+- ``PyImport_Import`` and ``PyImport_ImportModule`` now always do absolute
+  imports. In earlier versions they might have used relative imports under
+  some conditions.
+
+- Added case insensitive comparison methods ``PyOS_stricmp(char*, char*)``
+  and ``PyOS_strnicmp(char*, char*, Py_ssize_t)``.
+
+- Bug #1542693: remove semi-colon at end of PyImport_ImportModuleEx macro
+  so it can be used as an expression.
+
+
+Windows
+-------
+
+- Patch #1706: Drop support for Win9x, WinME and NT4. Python now requires 
+  Windows 2000 or greater. The _WINVER and NTDDI_VERSION macros are set to
+  Win2k for x86/32bit builds and WinXP for AMD64 builds.
+
+- Conditionalize definition of _CRT_SECURE_NO_DEPRECATE
+  and _CRT_NONSTDC_NO_DEPRECATE.
+
+- Bug #1216: Restore support for Visual Studio 2002.
+
+
+Mac
+---
+
+- cfmfile now raises a DeprecationWarning.
+
+- buildtools now raises a DeprecationWarning.
+
+- Removed the macfs module.  It had been deprecated since Python 2.5.  This
+  lead to the deprecation of macostools.touched() as it relied solely on macfs
+  and was a no-op under OS X.
+
+
+What's New in Python 2.5 release candidate 1?
+=============================================
+
+*Release date: 17-AUG-2006*
+
+Core and builtins
+-----------------
+
+- Unicode objects will no longer raise an exception when being
+  compared equal or unequal to a string and a UnicodeDecodeError
+  exception occurs, e.g. as result of a decoding failure.
+
+  Instead, the equal (==) and unequal (!=) comparison operators will
+  now issue a UnicodeWarning and interpret the two objects as
+  unequal. The UnicodeWarning can be filtered as desired using
+  the warning framework, e.g. silenced completely, turned into an
+  exception, logged, etc.
+
+  Note that compare operators other than equal and unequal will still
+  raise UnicodeDecodeError exceptions as they've always done.
+
+- Fix segfault when doing string formatting on subclasses of long.
+
+- Fix bug related to __len__ functions using values > 2**32 on 64-bit machines
+  with new-style classes.
+
+- Fix bug related to __len__ functions returning negative values with
+  classic classes.
+
+- Patch #1538606, Fix __index__() clipping.  There were some problems
+  discovered with the API and how integers that didn't fit into Py_ssize_t
+  were handled.  This patch attempts to provide enough alternatives
+  to effectively use __index__.
+
+- Bug #1536021: __hash__ may now return long int; the final hash
+  value is obtained by invoking hash on the long int.
+
+- Bug #1536786: buffer comparison could emit a RuntimeWarning.
+
+- Bug #1535165: fixed a segfault in input() and raw_input() when
+  sys.stdin is closed.
+
+- On Windows, the PyErr_Warn function is now exported from
+  the Python dll again.
+
+- Bug #1191458: tracing over for loops now produces a line event
+  on each iteration.  Fixing this problem required changing the .pyc
+  magic number.  This means that .pyc files generated before 2.5c1
+  will be regenerated.
+
+- Bug #1333982: string/number constants were inappropriately stored
+  in the byte code and co_consts even if they were not used, ie
+  immediately popped off the stack.
+
+- Fixed a reference-counting problem in property().
+
+
+>>>>>>> .merge-right.r60878
 Library
 -------
 
diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c
index b77dda5..469c531 100644
--- a/Modules/mmapmodule.c
+++ b/Modules/mmapmodule.c
@@ -1326,7 +1326,10 @@
 	dict = PyModule_GetDict(module);
 	if (!dict)
 		return;
-	mmap_module_error = PyExc_EnvironmentError;
+	mmap_module_error = PyErr_NewException("mmap.error",
+		PyExc_EnvironmentError , NULL);
+	if (mmap_module_error == NULL)
+		return;
 	PyDict_SetItemString(dict, "error", mmap_module_error);
 	PyDict_SetItemString(dict, "mmap", (PyObject*) &mmap_object_type);
 #ifdef PROT_EXEC
diff --git a/PC/VC6/pythoncore.dsp b/PC/VC6/pythoncore.dsp
index 858619c..9c815c6 100644
--- a/PC/VC6/pythoncore.dsp
+++ b/PC/VC6/pythoncore.dsp
@@ -125,6 +125,10 @@
 # End Source File
 # Begin Source File
 
+SOURCE=..\..\Modules\_collectionsmodule.c
+# End Source File
+# Begin Source File
+
 SOURCE=..\..\Modules\_csv.c
 # End Source File
 # Begin Source File
@@ -349,6 +353,14 @@
 # End Source File
 # Begin Source File
 
+SOURCE=..\..\Python\formatter_string.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\Python\formatter_unicode.c
+# End Source File
+# Begin Source File
+
 SOURCE=..\..\Objects\frameobject.c
 # End Source File
 # Begin Source File
diff --git a/PC/VS7.1/pythoncore.vcproj b/PC/VS7.1/pythoncore.vcproj
index a7a0f04..e252981 100644
--- a/PC/VS7.1/pythoncore.vcproj
+++ b/PC/VS7.1/pythoncore.vcproj
@@ -515,6 +515,9 @@
 			RelativePath="..\..\Objects\floatobject.c">
 		</File>
 		<File
+			RelativePath="..\..\Python\formatter_unicode.c">
+		</File>
+		<File
 			RelativePath="..\..\Objects\frameobject.c">
 		</File>
 		<File
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index 2ceea2e..6af7aec 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -1899,8 +1899,14 @@
 		   not enough space left on the stack */
 		alloca(PYOS_STACK_MARGIN * sizeof(void*));
 		return 0;
-	} __except (EXCEPTION_EXECUTE_HANDLER) {
-		/* just ignore all errors */
+	} __except (GetExceptionCode() == STATUS_STACK_OVERFLOW ?
+		        EXCEPTION_EXECUTE_HANDLER : 
+		        EXCEPTION_CONTINUE_SEARCH) {
+		int errcode = _resetstkoflw();
+		if (errcode)
+		{
+			Py_FatalError("Could not reset the stack!");
+		}
 	}
 	return 1;
 }
diff --git a/Tools/scripts/reindent.py b/Tools/scripts/reindent.py
index 33ee4b7..11cb30a 100755
--- a/Tools/scripts/reindent.py
+++ b/Tools/scripts/reindent.py
@@ -4,10 +4,11 @@
 
 """reindent [-d][-r][-v] [ path ... ]
 
--d (--dryrun)  Dry run.  Analyze, but don't make any changes to, files.
--r (--recurse) Recurse.  Search for all .py files in subdirectories too.
--v (--verbose) Verbose.  Print informative msgs; else no output.
--h (--help)    Help.     Print this usage information and exit.
+-d (--dryrun)   Dry run.   Analyze, but don't make any changes to, files.
+-r (--recurse)  Recurse.   Search for all .py files in subdirectories too.
+-n (--nobackup) No backup. Does not make a ".bak" file before reindenting.
+-v (--verbose)  Verbose.   Print informative msgs; else no output.
+-h (--help)     Help.      Print this usage information and exit.
 
 Change Python (.py) files to use 4-space indents and no hard tab characters.
 Also trim excess spaces and tabs from ends of lines, and remove empty lines
@@ -31,17 +32,23 @@
 The hard part of reindenting is figuring out what to do with comment
 lines.  So long as the input files get a clean bill of health from
 tabnanny.py, reindent should do a good job.
+
+The backup file is a copy of the one that is being reindented. The ".bak"
+file is generated with shutil.copy(), but some corner cases regarding
+user/group and permissions could leave the backup file more readable that
+you'd prefer. You can always use the --nobackup option to prevent this.
 """
 
 __version__ = "1"
 
 import tokenize
-import os
+import os, shutil
 import sys
 
-verbose = 0
-recurse = 0
-dryrun  = 0
+verbose    = 0
+recurse    = 0
+dryrun     = 0
+makebackup = True
 
 def usage(msg=None):
     if msg is not None:
@@ -57,10 +64,10 @@
 
 def main():
     import getopt
-    global verbose, recurse, dryrun
+    global verbose, recurse, dryrun, makebackup
     try:
-        opts, args = getopt.getopt(sys.argv[1:], "drvh",
-                                   ["dryrun", "recurse", "verbose", "help"])
+        opts, args = getopt.getopt(sys.argv[1:], "drnvh",
+                        ["dryrun", "recurse", "nobackup", "verbose", "help"])
     except getopt.error as msg:
         usage(msg)
         return
@@ -69,6 +76,8 @@
             dryrun += 1
         elif o in ('-r', '--recurse'):
             recurse += 1
+        elif o in ('-n', '--nobackup'):
+            makebackup = False
         elif o in ('-v', '--verbose'):
             verbose += 1
         elif o in ('-h', '--help'):
@@ -112,11 +121,10 @@
                 print("But this is a dry run, so leaving it alone.")
         if not dryrun:
             bak = file + ".bak"
-            if os.path.exists(bak):
-                os.remove(bak)
-            os.rename(file, bak)
-            if verbose:
-                print("renamed", file, "to", bak)
+            if makebackup:
+                shutil.copyfile(file, bak)
+                if verbose:
+                    print("backed up", file, "to", bak)
             f = open(file, "w")
             r.write(f)
             f.close()
