diff --git a/Doc/library/functions.rst b/Doc/library/functions.rst
index 582abbf..def6ae6 100644
--- a/Doc/library/functions.rst
+++ b/Doc/library/functions.rst
@@ -325,15 +325,15 @@
    < abs(b)``.
 
 
-.. function:: enumerate(sequence)
+.. function:: enumerate(sequence[, start=0])
 
    Return an enumerate object. *sequence* must be a sequence, an
    :term:`iterator`, or some other object which supports iteration.  The
    :meth:`__next__` method of the iterator returned by :func:`enumerate` returns a
-   tuple containing a count (from zero) and the corresponding value obtained
-   from iterating over *iterable*.  :func:`enumerate` is useful for obtaining an
-   indexed series: ``(0, seq[0])``, ``(1, seq[1])``, ``(2, seq[2])``, .... For
-   example:
+   tuple containing a count (from *start* which defaults to 0) and the
+   corresponding value obtained from iterating over *iterable*.
+   :func:`enumerate` is useful for obtaining an indexed series: ``(0, seq[0])``,
+   ``(1, seq[1])``, ``(2, seq[2])``, .... For example:
 
       >>> for i, season in enumerate(['Spring', 'Summer', 'Fall', 'Winter')]:
       ...     print(i, season)
diff --git a/Doc/whatsnew/2.6.rst b/Doc/whatsnew/2.6.rst
index c39c80a..31ea41d 100644
--- a/Doc/whatsnew/2.6.rst
+++ b/Doc/whatsnew/2.6.rst
@@ -1466,13 +1466,86 @@
 As usual, Python's standard library received a number of enhancements and bug
 fixes.  Here's a partial list of the most notable changes, sorted alphabetically
 by module name. Consult the :file:`Misc/NEWS` file in the source tree for a more
-complete list of changes, or look through the CVS logs for all the details.
+complete list of changes, or look through the Subversion logs for all the
+details.
 
-* (3.0-warning mode) The :mod:`audiodev` module is being deprecated,
-  and has been removed from Python 3.0, so importing it now triggers a
-  warning.  The module hasn't been maintained for several versions,
-  and is written against an outdated sound interface for SunOS and
-  IRIX.
+* (3.0-warning mode) Python 3.0 will feature a reorganized standard 
+  library; many outdated modules are being dropped,
+  and some modules are being renamed or moved into packages. 
+  Python 2.6 running in 3.0-warning mode will warn about these modules 
+  when they are imported.
+  The list of deprecated modules is:
+  :mod:`_builtinSuites`,
+  :mod:`aepack`,
+  :mod:`aetools`,
+  :mod:`aetypes`,
+  :mod:`applesingle`,
+  :mod:`appletrawmain`,
+  :mod:`appletrunner`,
+  :mod:`argvemulator`,
+  :mod:`Audio_mac`,
+  :mod:`audiodev`,
+  :mod:`autoGIL`,
+  :mod:`bgenlocations`,
+  :mod:`buildtools`,
+  :mod:`bundlebuilder`,
+  :mod:`Canvas`,
+  :mod:`Carbon`,
+  :mod:`cfmfile`,
+  :mod:`CodeWarrior`,
+  :mod:`ColorPicker`,
+  :mod:`compiler`,
+  :mod:`cd`,
+  :mod:`cddb`,
+  :mod:`cdplayer`,
+  :mod:`CL` and :mod:`cl`,
+  :mod:`cd`,
+  :mod:`cd`,
+  :mod:`dircache`,
+  :mod:`dl`,
+  :mod:`EasyDialogs`,
+  :mod:`Explorer`,
+  :mod:`Finder`,
+  :mod:`FrameWork`,
+  :mod:`findertools`,
+  :mod:`fpformat`,
+  :mod:`gensuitemodule`,
+  :mod:`ic`,
+  :mod:`icglue`,
+  :mod:`icopen`,
+  :mod:`ihooks`,
+  :mod:`imageop`,
+  :mod:`linuxaudiodev`,
+  :mod:`macerrors`,
+  :mod:`MacOS`,
+  :mod:`macostools`,
+  :mod:`macresource`,
+  :mod:`mhlib`,
+  :mod:`MiniAEFrame`,
+  :mod:`multifile`,
+  :mod:`Nav`,
+  :mod:`Netscape`,
+  :mod:`new`,
+  :mod:`OSATerminology`,
+  :mod:`pimp`,
+  :mod:`PixMapWrapper`,
+  :mod:`popen2`,
+  :mod:`pure`,
+  :mod:`StdSuites`,
+  :mod:`sv`,
+  :mod:`SystemEvents`,
+  :mod:`Terminal`,
+  :mod:`terminalcommand`,
+  :mod:`test.testall`,
+  :mod:`toaiff`,
+  :mod:`videoreader`.
+
+  The modules that have been renamed are:
+
+  * :mod:`ConfigParser` has become :mod:`configparser`.
+  * :mod:`copy_reg` has become :mod:`copyreg`.
+  * :mod:`SocketServer` has become :mod:`socketserver`.
+  * :mod:`Queue` has become :mod:`queue`.
 
 * The :mod:`bsddb.dbshelve` module now uses the highest pickling protocol
   available, instead of restricting itself to protocol 1.
@@ -1755,9 +1828,6 @@
   the forward search.
   (Contributed by John Lenton.)
 
-* (3.0-warning mode) The :mod:`new` module has been removed from
-  Python 3.0.  Importing it therefore triggers a warning message.
-
 * The :mod:`operator` module gained a 
   :func:`methodcaller` function that takes a name and an optional 
   set of arguments, returning a callable that will call 
diff --git a/Lib/bsddb/test/test_lock.py b/Lib/bsddb/test/test_lock.py
index 973bc42..402d147 100644
--- a/Lib/bsddb/test/test_lock.py
+++ b/Lib/bsddb/test/test_lock.py
@@ -94,15 +94,55 @@
         for t in threads:
             t.join()
 
-    def test03_set_timeout(self):
-        # test that the set_timeout call works
-        if hasattr(self.env, 'set_timeout'):
-            self.env.set_timeout(0, db.DB_SET_LOCK_TIMEOUT)
-            self.env.set_timeout(0, db.DB_SET_TXN_TIMEOUT)
-            self.env.set_timeout(123456, db.DB_SET_LOCK_TIMEOUT)
-            self.env.set_timeout(7890123, db.DB_SET_TXN_TIMEOUT)
+    def _DISABLED_test03_lock_timeout(self):
+        # Disabled as this test crashes the python interpreter built in
+        # debug mode with:
+        #  Fatal Python error: UNREF invalid object
+        # the error occurs as marked below.
+        self.env.set_timeout(0, db.DB_SET_LOCK_TIMEOUT)
+        self.env.set_timeout(0, db.DB_SET_TXN_TIMEOUT)
+        self.env.set_timeout(123456, db.DB_SET_LOCK_TIMEOUT)
+        self.env.set_timeout(7890123, db.DB_SET_TXN_TIMEOUT)
 
-    def theThread(self, sleepTime, lockType):
+        def deadlock_detection() :
+            while not deadlock_detection.end :
+                deadlock_detection.count = \
+                    self.env.lock_detect(db.DB_LOCK_EXPIRE)
+                if deadlock_detection.count :
+                    while not deadlock_detection.end :
+                        pass
+                    break
+                time.sleep(0.01)
+
+        deadlock_detection.end=False
+        deadlock_detection.count=0
+        t=Thread(target=deadlock_detection)
+        t.setDaemon(True)
+        t.start()
+        self.env.set_timeout(100000, db.DB_SET_LOCK_TIMEOUT)
+        anID = self.env.lock_id()
+        anID2 = self.env.lock_id()
+        self.assertNotEqual(anID, anID2)
+        lock = self.env.lock_get(anID, "shared lock", db.DB_LOCK_WRITE)
+        start_time=time.time()
+        # FIXME: I see the UNREF crash as the interpreter trys to exit
+        # from this call to lock_get.
+        self.assertRaises(db.DBLockNotGrantedError,
+                self.env.lock_get,anID2, "shared lock", db.DB_LOCK_READ)
+        end_time=time.time()
+        deadlock_detection.end=True
+        self.assertTrue((end_time-start_time) >= 0.1)
+        self.env.lock_put(lock)
+        t.join()
+
+        if db.version() >= (4,0):
+            self.env.lock_id_free(anID)
+            self.env.lock_id_free(anID2)
+
+        if db.version() >= (4,6):
+            self.assertTrue(deadlock_detection.count>0)
+
+    def theThread(self, lockType):
         name = currentThread().getName()
         if lockType ==  db.DB_LOCK_WRITE:
             lt = "write"
diff --git a/Lib/distutils/config.py b/Lib/distutils/config.py
index a625aec..6ffccaa 100644
--- a/Lib/distutils/config.py
+++ b/Lib/distutils/config.py
@@ -7,7 +7,7 @@
 import sys
 from configparser import ConfigParser
 
-from distutils.core import Command
+from distutils.cmd import Command
 
 DEFAULT_PYPIRC = """\
 [pypirc]
diff --git a/Lib/test/test_enumerate.py b/Lib/test/test_enumerate.py
index 08229bf..8cebf44 100644
--- a/Lib/test/test_enumerate.py
+++ b/Lib/test/test_enumerate.py
@@ -100,7 +100,8 @@
     def test_argumentcheck(self):
         self.assertRaises(TypeError, self.enum) # no arguments
         self.assertRaises(TypeError, self.enum, 1) # wrong type (not iterable)
-        self.assertRaises(TypeError, self.enum, 'abc', 2) # too many arguments
+        self.assertRaises(TypeError, self.enum, 'abc', 'a') # wrong type
+        self.assertRaises(TypeError, self.enum, 'abc', 2, 3) # too many arguments
 
     def test_tuple_reuse(self):
         # Tests an implementation detail where tuple is reused
@@ -196,6 +197,19 @@
         self.assertEqual(rc, sys.getrefcount(r))
 
 
+class TestStart(EnumerateTestCase):
+
+    enum = lambda i: enumerate(i, start=11)
+    seq, res = 'abc', [(1, 'a'), (2, 'b'), (3, 'c')]
+
+
+class TestLongStart(EnumerateTestCase):
+
+    enum = lambda i: enumerate(i, start=sys.maxsize+1)
+    seq, res = 'abc', [(sys.maxsize+1,'a'), (sys.maxsize+2,'b'),
+                       (sys.maxsize+3,'c')]
+
+
 def test_main(verbose=None):
     testclasses = (EnumerateTestCase, SubclassTestCase, TestEmpty, TestBig,
                    TestReversed)
diff --git a/Lib/test/test_generators.py b/Lib/test/test_generators.py
index 992126f..e27eadd 100644
--- a/Lib/test/test_generators.py
+++ b/Lib/test/test_generators.py
@@ -917,6 +917,17 @@
 >>> g.gi_code is f.__code__
 True
 
+
+Test the __name__ attribute and the repr()
+
+>>> def f():
+...    yield 5
+...
+>>> g = f()
+>>> g.__name__
+'f'
+>>> repr(g)  # doctest: +ELLIPSIS
+'<f generator object at ...>'
 """
 
 # conjoin is a simple backtracking generator, named in honor of Icon's
diff --git a/Lib/test/test_genexps.py b/Lib/test/test_genexps.py
index 46f7ab8..c8abbcc 100644
--- a/Lib/test/test_genexps.py
+++ b/Lib/test/test_genexps.py
@@ -92,7 +92,7 @@
 Verify that parenthesis are required when used as a keyword argument value
 
     >>> dict(a = (i for i in range(10))) #doctest: +ELLIPSIS
-    {'a': <generator object at ...>}
+    {'a': <<genexpr> generator object at ...>}
 
 Verify early binding for the outermost for-expression
 
diff --git a/Lib/test/test_platform.py b/Lib/test/test_platform.py
index 22307cd..fced4d0 100644
--- a/Lib/test/test_platform.py
+++ b/Lib/test/test_platform.py
@@ -1,7 +1,9 @@
+import sys
 import unittest
-from test import test_support
 import platform
 
+from test import test_support
+
 class PlatformTest(unittest.TestCase):
     def test_architecture(self):
         res = platform.architecture()
@@ -49,26 +51,35 @@
 
     def test_uname(self):
         res = platform.uname()
+        self.assert_(any(res))
 
     def test_java_ver(self):
         res = platform.java_ver()
+        if sys.platform == 'java':
+            self.assert_(all(res))
 
     def test_win32_ver(self):
         res = platform.win32_ver()
 
     def test_mac_ver(self):
         res = platform.mac_ver()
+        try:
+            import gestalt
+        except ImportError: pass
+        else:
+            if sys.platform == 'darwin':
+                self.assert_(all(res))
 
     def test_dist(self):
         res = platform.dist()
 
     def test_libc_ver(self):
-        from sys import executable
         import os
-        if os.path.isdir(executable) and os.path.exists(executable+'.exe'):
+        if os.path.isdir(sys.executable) and \
+           os.path.exists(sys.executable+'.exe'):
             # Cygwin horror
             executable = executable + '.exe'
-        res = platform.libc_ver(executable)
+        res = platform.libc_ver(sys.executable)
 
 def test_main():
     test_support.run_unittest(
diff --git a/Lib/test/test_site.py b/Lib/test/test_site.py
index 329df4b..a13751c 100644
--- a/Lib/test/test_site.py
+++ b/Lib/test/test_site.py
@@ -36,7 +36,7 @@
         """Save a copy of sys.path"""
         self.sys_path = sys.path[:]
 
-
+    def tearDown(self):
         """Restore sys.path"""
         sys.path = self.sys_path
 
@@ -256,13 +256,8 @@
             else:
                 self.fail("sitecustomize not imported automatically")
 
-
-
-
 def test_main():
     run_unittest(HelperFunctionsTests, ImportSideEffectTests)
 
-
-
 if __name__ == "__main__":
     test_main()
diff --git a/Lib/test/test_warnings.py b/Lib/test/test_warnings.py
index fa2297c..7b512ef 100644
--- a/Lib/test/test_warnings.py
+++ b/Lib/test/test_warnings.py
@@ -396,6 +396,7 @@
             self.assertRaises(TypeError, self.module.warn, "Warning!")
         finally:
             self.module.showwarning = old_showwarning
+            self.module.resetwarnings()
 
     def test_show_warning_output(self):
         # With showarning() missing, make sure that output is okay.
diff --git a/Makefile.pre.in b/Makefile.pre.in
index b82bd5e..3b96df7 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
@@ -812,9 +812,10 @@
 		test/decimaltestdata \
 		encodings \
 		email email/mime email/test email/test/data \
+		json json/tests \
 		sqlite3 sqlite3/test \
 		logging bsddb bsddb/test csv wsgiref \
-		lib2to3 lib2to3/fixes lib2to3/pgen2 \
+		lib2to3 lib2to3/fixes lib2to3/pgen2 lib2to3/tests \
 		ctypes ctypes/test ctypes/macholib idlelib idlelib/Icons \
 		distutils distutils/command distutils/tests $(XMLLIBSUBDIRS) \
 		setuptools setuptools/command setuptools/tests setuptools.egg-info \
diff --git a/Misc/NEWS b/Misc/NEWS
index 2dbd2fd..6eb022d 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -17,6 +17,15 @@
   "s#" code already does.  The "z" code was corrected as well.
 
 - Issue 2801: fix bug in the float.is_integer method where a ValueError
+
+- Issue #2863: generators now have a ``gen.__name__`` attribute that equals
+  ``gen.gi_code.co_name``, like ``func.__name___`` that equals
+  ``func.func_code.co_name``.  The repr() of a generator now also contains
+  this name.
+
+- Issue #2831: enumerate() now has a ``start`` argument.
+
+- Issue #2801: fix bug in the float.is_integer method where a ValueError
   was sometimes incorrectly raised.
 
 - The --with-toolbox-glue option (and the associated pymactoolbox.h) have been
diff --git "a/Misc/TextMate/Python-Dev.tmbundle/Snippets/2 to 3 - Module Deletion \050docs\051.tmSnippet" "b/Misc/TextMate/Python-Dev.tmbundle/Snippets/2 to 3 - Module Deletion \050docs\051.tmSnippet"
new file mode 100644
index 0000000..5de8bae
--- /dev/null
+++ "b/Misc/TextMate/Python-Dev.tmbundle/Snippets/2 to 3 - Module Deletion \050docs\051.tmSnippet"
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>content</key>
+	<string>.. deprecated:: 2.6
+   The :mod:\`${1}\` module has been deprecated for removal in Python 3.0.
+${0}</string>
+	<key>name</key>
+	<string>2 to 3 - Module Deletion (docs)</string>
+	<key>tabTrigger</key>
+	<string>2to3docdel</string>
+	<key>uuid</key>
+	<string>0568410D-EAF1-4AF3-B6DE-8AF133A91821</string>
+</dict>
+</plist>
diff --git a/Misc/TextMate/Python-Dev.tmbundle/info.plist b/Misc/TextMate/Python-Dev.tmbundle/info.plist
index 644bc7e..0510d5d 100644
--- a/Misc/TextMate/Python-Dev.tmbundle/info.plist
+++ b/Misc/TextMate/Python-Dev.tmbundle/info.plist
@@ -7,6 +7,7 @@
 		<key>items</key>
 		<array>
 			<string>9519C22B-6AB8-41A1-94F6-079E0B45C147</string>
+			<string>0568410D-EAF1-4AF3-B6DE-8AF133A91821</string>
 			<string>------------------------------------</string>
 			<string>B545BB1B-A8E1-426C-B50A-426E78B96D38</string>
 			<string>6EF151E5-7149-4F82-8796-0CC40FE589FA</string>
@@ -23,6 +24,7 @@
 	<key>ordering</key>
 	<array>
 		<string>9519C22B-6AB8-41A1-94F6-079E0B45C147</string>
+		<string>0568410D-EAF1-4AF3-B6DE-8AF133A91821</string>
 		<string>B545BB1B-A8E1-426C-B50A-426E78B96D38</string>
 		<string>6EF151E5-7149-4F82-8796-0CC40FE589FA</string>
 		<string>FD25A8DC-22DC-4ED4-B222-B943C8A9117D</string>
diff --git a/Objects/enumobject.c b/Objects/enumobject.c
index 5a08e6d..08c7c09 100644
--- a/Objects/enumobject.c
+++ b/Objects/enumobject.c
@@ -15,18 +15,29 @@
 {
 	enumobject *en;
 	PyObject *seq = NULL;
-	static char *kwlist[] = {"sequence", 0};
+	PyObject *start = NULL;
+	static char *kwlist[] = {"sequence", "start", 0};
 
-	if (!PyArg_ParseTupleAndKeywords(args, kwds, "O:enumerate", kwlist,
-					 &seq))
+	if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:enumerate", kwlist,
+					 &seq, &start))
 		return NULL;
 
 	en = (enumobject *)type->tp_alloc(type, 0);
 	if (en == NULL)
 		return NULL;
-	en->en_index = 0;
+	if (start) {
+		start = PyNumber_Index(start);
+		if (start == NULL) {
+			Py_DECREF(en);
+			return NULL;
+		}
+		en->en_index = LONG_MAX;
+		en->en_longindex = start;
+	} else {
+		en->en_index = 0;
+		en->en_longindex = NULL;
+	}
 	en->en_sit = PyObject_GetIter(seq);
-	en->en_longindex = NULL;
 	if (en->en_sit == NULL) {
 		Py_DECREF(en);
 		return NULL;
diff --git a/Objects/genobject.c b/Objects/genobject.c
index 5897867..c76bcb6 100644
--- a/Objects/genobject.c
+++ b/Objects/genobject.c
@@ -282,6 +282,33 @@
 }
 
 
+static PyObject *
+gen_repr(PyGenObject *gen)
+{
+	return PyUnicode_FromFormat("<%S generator object at %p>",
+				    ((PyCodeObject *)gen->gi_code)->co_name,
+				    gen);
+}
+
+
+static PyObject *
+gen_get_name(PyGenObject *gen)
+{
+	PyObject *name = ((PyCodeObject *)gen->gi_code)->co_name;
+	Py_INCREF(name);
+	return name;
+}
+
+
+PyDoc_STRVAR(gen__name__doc__,
+"Return the name of the generator's associated code object.");
+
+static PyGetSetDef gen_getsetlist[] = {
+	{"__name__", (getter)gen_get_name, NULL, NULL, gen__name__doc__},
+	{NULL}
+};
+
+
 static PyMemberDef gen_memberlist[] = {
 	{"gi_frame",	T_OBJECT, offsetof(PyGenObject, gi_frame),	READONLY},
 	{"gi_running",	T_INT,    offsetof(PyGenObject, gi_running),	READONLY},
@@ -307,7 +334,7 @@
 	0, 					/* tp_getattr */
 	0,					/* tp_setattr */
 	0,					/* tp_compare */
-	0,					/* tp_repr */
+	(reprfunc)gen_repr,			/* tp_repr */
 	0,					/* tp_as_number */
 	0,					/* tp_as_sequence */
 	0,					/* tp_as_mapping */
@@ -327,7 +354,7 @@
 	(iternextfunc)gen_iternext,		/* tp_iternext */
 	gen_methods,				/* tp_methods */
 	gen_memberlist,				/* tp_members */
-	0,					/* tp_getset */
+	gen_getsetlist,				/* tp_getset */
 	0,					/* tp_base */
 	0,					/* tp_dict */
 
diff --git a/Python/_warnings.c b/Python/_warnings.c
index 12b1021..8ccd4bb 100644
--- a/Python/_warnings.c
+++ b/Python/_warnings.c
@@ -408,8 +408,10 @@
                 /* A proper implementation of warnings.showwarning() should
                     have at least two default arguments. */
                 if ((defaults == NULL) || (PyTuple_Size(defaults) < 2)) {
-                    if (PyErr_WarnEx(PyExc_DeprecationWarning, msg, 1) < 0)
+                    if (PyErr_WarnEx(PyExc_DeprecationWarning, msg, 1) < 0) {
+                        Py_DECREF(show_fxn);
                         goto cleanup;
+                    }
                 }
                 res = PyObject_CallFunctionObjArgs(show_fxn, message, category,
                                                     filename, lineno_obj,
diff --git a/Python/compile.c b/Python/compile.c
index 94a2715..6cc5c4a 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -2984,7 +2984,7 @@
 {
 	static identifier name;
 	if (!name) {
-		name = PyUnicode_FromString("<genexp>");
+		name = PyUnicode_FromString("<genexpr>");
 		if (!name)
 			return 0;
 	}
