diff --git a/Doc/library/collections.rst b/Doc/library/collections.rst
index cb3a029..2b8e279 100644
--- a/Doc/library/collections.rst
+++ b/Doc/library/collections.rst
@@ -382,7 +382,7 @@
 .. _named-tuple-factory:
 
 :func:`namedtuple` Factory Function for Tuples with Named Fields
------------------------------------------------------------------
+----------------------------------------------------------------
 
 Named tuples assign meaning to each position in a tuple and allow for more readable,
 self-documenting code.  They can be used wherever regular tuples are used, and
@@ -398,7 +398,7 @@
 
    The *fieldnames* are a single string with each fieldname separated by whitespace
    and/or commas (for example 'x y' or 'x, y').  Alternatively, the *fieldnames*
-   can be specified as a list of strings (such as ['x', 'y']).
+   can be specified with a sequence of strings (such as ['x', 'y']).
 
    Any valid Python identifier may be used for a fieldname except for names
    starting with an underscore.  Valid identifiers consist of letters, digits,
@@ -479,7 +479,7 @@
 In addition to the methods inherited from tuples, named tuples support
 three additional methods and one attribute.
 
-.. method:: namedtuple._make(iterable)
+.. method:: somenamedtuple._make(iterable)
 
    Class method that makes a new instance from an existing sequence or iterable.
 
@@ -489,7 +489,7 @@
       >>> Point._make(t)
       Point(x=11, y=22)
 
-.. method:: namedtuple._asdict()
+.. method:: somenamedtuple._asdict()
 
    Return a new dict which maps field names to their corresponding values:
 
@@ -498,7 +498,7 @@
       >>> p._asdict()
       {'x': 11, 'y': 22}
       
-.. method:: namedtuple._replace(kwargs)
+.. method:: somenamedtuple._replace(kwargs)
 
    Return a new instance of the named tuple replacing specified fields with new values:
 
@@ -509,9 +509,9 @@
       Point(x=33, y=22)
 
       >>> for partnum, record in inventory.items():
-      ...     inventory[partnum] = record._replace(price=newprices[partnum], updated=time.now())
+              inventory[partnum] = record._replace(price=newprices[partnum], timestamp=time.now())
 
-.. attribute:: namedtuple._fields
+.. attribute:: somenamedtuple._fields
 
    Tuple of strings listing the field names.  This is useful for introspection
    and for creating new named tuple types from existing named tuples.
@@ -527,9 +527,7 @@
       Pixel(x=11, y=22, red=128, green=255, blue=0)'
 
 To retrieve a field whose name is stored in a string, use the :func:`getattr`
-function:
-
-::
+function::
 
     >>> getattr(p, 'x')
     11
@@ -548,13 +546,15 @@
         @property
         def hypot(self):
             return (self.x ** 2 + self.y ** 2) ** 0.5
-        def __repr__(self):
-            return 'Point(x=%.3f, y=%.3f, hypot=%.3f)' % (self.x, self.y, self.hypot)
+        def __str__(self):
+            return 'Point: x=%6.3f y=%6.3f hypot=%6.3f' % (self.x, self.y, self.hypot)
 
-    >>> print Point(3, 4),'\n', Point(2, 5), '\n', Point(9./7, 6)
-    Point(x=3.000, y=4.000, hypot=5.000) 
-    Point(x=2.000, y=5.000, hypot=5.385) 
-    Point(x=1.286, y=6.000, hypot=6.136)
+    >>> for p in Point(3,4), Point(14,5), Point(9./7,6):
+            print p
+
+    Point: x= 3.000 y= 4.000 hypot= 5.000
+    Point: x=14.000 y= 5.000 hypot=14.866
+    Point: x= 1.286 y= 6.000 hypot= 6.136
 
 Another use for subclassing is to replace performance critcal methods with
 faster versions that bypass error-checking and localize variable access::
@@ -564,10 +564,8 @@
         def _replace(self, _map=map, **kwds):
             return self._make(_map(kwds.pop, ('x', 'y'), self))
 
-Default values can be implemented by starting with a prototype instance
-and customizing it with :meth:`_replace`:
-
-::
+Default values can be implemented by using :meth:`_replace`:: to
+customize a prototype instance::
 
     >>> Account = namedtuple('Account', 'owner balance transaction_count')
     >>> model_account = Account('<owner name>', 0.0, 0)
diff --git a/Doc/library/logging.rst b/Doc/library/logging.rst
index bf6ad71..af8c867 100644
--- a/Doc/library/logging.rst
+++ b/Doc/library/logging.rst
@@ -1118,6 +1118,52 @@
 combination of handlers you choose.
 
 
+.. _context-info:
+
+Adding contextual information to your logging output
+----------------------------------------------------
+
+Sometimes you want logging output to contain contextual information in
+addition to the parameters passed to the logging call. For example, in a
+networked application, it may be desirable to log client-specific information
+in the log (e.g. remote client's username, or IP address). Although you could
+use the *extra* parameter to achieve this, it's not always convenient to pass
+the information in this way. While it might be tempting to create
+:class:`Logger` instances on a per-connection basis, this is not a good idea
+because these instances are not garbage collected. While this is not a problem
+in practice, when the number of :class:`Logger` instances is dependent on the
+level of granularity you want to use in logging an application, it could
+be hard to manage if the number of :class:`Logger` instances becomes
+effectively unbounded.
+
+There are a number of other ways you can pass contextual information to be
+output along with logging event information.
+
+* Use an adapter class which has access to the contextual information and
+  which defines methods :meth:`debug`, :meth:`info` etc. with the same
+  signatures as used by :class:`Logger`. You instantiate the adapter with a
+  name, which will be used to create an underlying :class:`Logger` with that
+  name. In each adpater method, the passed-in message is modified to include
+  whatever contextual information you want.
+
+* Use something other than a string to pass the message. Although normally
+  the first argument to a logger method such as :meth:`debug`, :meth:`info`
+  etc. is usually a string, it can in fact be any object. This object is the
+  argument to a :func:`str()` call which is made, in
+  :meth:`LogRecord.getMessage`, to obtain the actual message string. You can
+  use this behavior to pass an instance which may be initialized with a
+  logging message, which redefines :meth:__str__ to return a modified version
+  of that message with the contextual information added.
+
+* Use a specialized :class:`Formatter` subclass to add additional information
+  to the formatted output. The subclass could, for instance, merge some thread
+  local contextual information (or contextual information obtained in some
+  other way) with the output generated by the base :class:`Formatter`.
+
+In each of these three approaches, thread locals can sometimes be a useful way
+of passing contextual information without undue coupling between different
+parts of your code.
+
 .. _network-logging:
 
 Sending and receiving logging events across a network
diff --git a/Doc/library/stdtypes.rst b/Doc/library/stdtypes.rst
index 4a1d566..22ca0f0 100644
--- a/Doc/library/stdtypes.rst
+++ b/Doc/library/stdtypes.rst
@@ -435,8 +435,9 @@
 One method needs to be defined for container objects to provide iteration
 support:
 
+.. XXX duplicated in reference/datamodel!
 
-.. method:: object.__iter__()
+.. method:: container.__iter__()
 
    Return an iterator object.  The object is required to support the iterator
    protocol described below.  If a container supports different types of
diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst
index 4182a0b..85c592e 100644
--- a/Doc/library/sys.rst
+++ b/Doc/library/sys.rst
@@ -438,6 +438,17 @@
    implement a dynamic prompt.
 
 
+.. data:: dont_write_bytecode
+
+   If this is true, Python won't try to write ``.pyc`` or ``.pyo`` files on the
+   import of source modules.  This value is initially set to ``True`` or ``False``
+   depending on the ``-B`` command line option and the ``PYTHONDONTWRITEBYTECODE``
+   environment variable, but you can set it yourself to control bytecode file
+   generation.
+
+   .. versionadded:: 2.6
+
+
 .. function:: setcheckinterval(interval)
 
    Set the interpreter's "check interval".  This integer value determines how often
diff --git a/Doc/library/urllib.rst b/Doc/library/urllib.rst
index 77eb632..4b86e88 100644
--- a/Doc/library/urllib.rst
+++ b/Doc/library/urllib.rst
@@ -1,4 +1,3 @@
-
 :mod:`urllib` --- Open arbitrary resources by URL
 =================================================
 
@@ -17,8 +16,8 @@
 instead of filenames.  Some restrictions apply --- it can only open URLs for
 reading, and no seek operations are available.
 
-It defines the following public functions:
-
+High-level interface
+--------------------
 
 .. function:: urlopen(url[, data[, proxies]])
 
@@ -174,6 +173,9 @@
    :func:`urlretrieve`.
 
 
+Utility functions
+-----------------
+
 .. function:: quote(string[, safe])
 
    Replace special characters in *string* using the ``%xx`` escape. Letters,
@@ -235,6 +237,9 @@
    to decode *path*.
 
 
+URL Opener objects
+------------------
+
 .. class:: URLopener([proxies[, **x509]])
 
    Base class for opening and reading URLs.  Unless you need to support opening
@@ -260,6 +265,48 @@
    :class:`URLopener` objects will raise an :exc:`IOError` exception if the server
    returns an error code.
 
+    .. method:: open(fullurl[, data])
+
+       Open *fullurl* using the appropriate protocol.  This method sets up cache and
+       proxy information, then calls the appropriate open method with its input
+       arguments.  If the scheme is not recognized, :meth:`open_unknown` is called.
+       The *data* argument has the same meaning as the *data* argument of
+       :func:`urlopen`.
+
+
+    .. method:: open_unknown(fullurl[, data])
+
+       Overridable interface to open unknown URL types.
+
+
+    .. method:: retrieve(url[, filename[, reporthook[, data]]])
+
+       Retrieves the contents of *url* and places it in *filename*.  The return value
+       is a tuple consisting of a local filename and either a
+       :class:`mimetools.Message` object containing the response headers (for remote
+       URLs) or ``None`` (for local URLs).  The caller must then open and read the
+       contents of *filename*.  If *filename* is not given and the URL refers to a
+       local file, the input filename is returned.  If the URL is non-local and
+       *filename* is not given, the filename is the output of :func:`tempfile.mktemp`
+       with a suffix that matches the suffix of the last path component of the input
+       URL.  If *reporthook* is given, it must be a function accepting three numeric
+       parameters.  It will be called after each chunk of data is read from the
+       network.  *reporthook* is ignored for local URLs.
+
+       If the *url* uses the :file:`http:` scheme identifier, the optional *data*
+       argument may be given to specify a ``POST`` request (normally the request type
+       is ``GET``).  The *data* argument must in standard
+       :mimetype:`application/x-www-form-urlencoded` format; see the :func:`urlencode`
+       function below.
+
+
+    .. attribute:: version
+
+       Variable that specifies the user agent of the opener object.  To get
+       :mod:`urllib` to tell servers that it is a particular user agent, set this in a
+       subclass as a class variable or in the constructor before calling the base
+       constructor.
+
 
 .. class:: FancyURLopener(...)
 
@@ -289,6 +336,18 @@
       users for the required information on the controlling terminal.  A subclass may
       override this method to support more appropriate behavior if needed.
 
+    The :class:`FancyURLopener` class offers one additional method that should be
+    overloaded to provide the appropriate behavior:
+
+    .. method:: prompt_user_passwd(host, realm)
+
+       Return information needed to authenticate the user at the given host in the
+       specified security realm.  The return value should be a tuple, ``(user,
+       password)``, which can be used for basic authentication.
+
+       The implementation prompts for this information on the terminal; an application
+       should override this method to use an appropriate interaction model in the local
+       environment.
 
 .. exception:: ContentTooShortError(msg[, content])
 
@@ -297,7 +356,9 @@
    *Content-Length* header). The :attr:`content` attribute stores the downloaded
    (and supposedly truncated) data.
 
-Restrictions:
+
+:mod:`urllib` Restrictions
+--------------------------
 
   .. index::
      pair: HTTP; protocol
@@ -358,75 +419,6 @@
   module :mod:`urlparse`.
 
 
-.. _urlopener-objs:
-
-URLopener Objects
------------------
-
-.. sectionauthor:: Skip Montanaro <skip@pobox.com>
-
-
-:class:`URLopener` and :class:`FancyURLopener` objects have the following
-attributes.
-
-
-.. method:: URLopener.open(fullurl[, data])
-
-   Open *fullurl* using the appropriate protocol.  This method sets up cache and
-   proxy information, then calls the appropriate open method with its input
-   arguments.  If the scheme is not recognized, :meth:`open_unknown` is called.
-   The *data* argument has the same meaning as the *data* argument of
-   :func:`urlopen`.
-
-
-.. method:: URLopener.open_unknown(fullurl[, data])
-
-   Overridable interface to open unknown URL types.
-
-
-.. method:: URLopener.retrieve(url[, filename[, reporthook[, data]]])
-
-   Retrieves the contents of *url* and places it in *filename*.  The return value
-   is a tuple consisting of a local filename and either a
-   :class:`mimetools.Message` object containing the response headers (for remote
-   URLs) or ``None`` (for local URLs).  The caller must then open and read the
-   contents of *filename*.  If *filename* is not given and the URL refers to a
-   local file, the input filename is returned.  If the URL is non-local and
-   *filename* is not given, the filename is the output of :func:`tempfile.mktemp`
-   with a suffix that matches the suffix of the last path component of the input
-   URL.  If *reporthook* is given, it must be a function accepting three numeric
-   parameters.  It will be called after each chunk of data is read from the
-   network.  *reporthook* is ignored for local URLs.
-
-   If the *url* uses the :file:`http:` scheme identifier, the optional *data*
-   argument may be given to specify a ``POST`` request (normally the request type
-   is ``GET``).  The *data* argument must in standard
-   :mimetype:`application/x-www-form-urlencoded` format; see the :func:`urlencode`
-   function below.
-
-
-.. attribute:: URLopener.version
-
-   Variable that specifies the user agent of the opener object.  To get
-   :mod:`urllib` to tell servers that it is a particular user agent, set this in a
-   subclass as a class variable or in the constructor before calling the base
-   constructor.
-
-The :class:`FancyURLopener` class offers one additional method that should be
-overloaded to provide the appropriate behavior:
-
-
-.. method:: FancyURLopener.prompt_user_passwd(host, realm)
-
-   Return information needed to authenticate the user at the given host in the
-   specified security realm.  The return value should be a tuple, ``(user,
-   password)``, which can be used for basic authentication.
-
-   The implementation prompts for this information on the terminal; an application
-   should override this method to use an appropriate interaction model in the local
-   environment.
-
-
 .. _urllib-examples:
 
 Examples
diff --git a/Doc/library/zipfile.rst b/Doc/library/zipfile.rst
index 7515440..f647bca 100644
--- a/Doc/library/zipfile.rst
+++ b/Doc/library/zipfile.rst
@@ -173,6 +173,27 @@
       operate independently of the  ZipFile.
 
 
+.. method:: ZipFile.extract(member[, path[, pwd]])
+
+   Extract a member from the archive to the current working directory, using its
+   full name.  Its file information is extracted as accurately as possible.
+   *path* specifies a different directory to extract to.   *member* can be a
+   filename or a :class:`ZipInfo` object.  *pwd* is the password used for
+   encrypted files.
+
+   .. versionadded:: 2.6
+
+
+.. method:: ZipFile.extractall([path[, members[, pwd]]])
+
+   Extract all members from the archive to the current working directory.  *path* 
+   specifies a different directory to extract to.  *members* is optional and must
+   be a subset of the list returned by :meth:`namelist`.  *pwd* is the password
+   used for encrypted files.
+
+   .. versionadded:: 2.6
+
+
 .. method:: ZipFile.printdir()
 
    Print a table of contents for the archive to ``sys.stdout``.
@@ -237,6 +258,13 @@
    created with mode ``'r'``  will raise a :exc:`RuntimeError`.  Calling
    :meth:`writestr` on a closed ZipFile will raise a :exc:`RuntimeError`.
 
+   .. note::
+
+      When passing a :class:`ZipInfo` instance as the *zinfo_or_acrname* parameter, 
+      the compression method used will be that specified in the *compress_type* 
+      member of the given :class:`ZipInfo` instance.  By default, the 
+      :class:`ZipInfo` constructor sets this member to :const:`ZIP_STORED`.
+
 The following data attribute is also available:
 
 
diff --git a/Doc/reference/datamodel.rst b/Doc/reference/datamodel.rst
index 92fece1..e6cba75 100644
--- a/Doc/reference/datamodel.rst
+++ b/Doc/reference/datamodel.rst
@@ -1086,7 +1086,8 @@
    :meth:`__init__` method will not be invoked.
 
    :meth:`__new__` is intended mainly to allow subclasses of immutable types (like
-   int, str, or tuple) to customize instance creation.
+   int, str, or tuple) to customize instance creation.  It is also commonly
+   overridden in custom metaclasses in order to customize class creation.
 
 
 .. method:: object.__init__(self[, ...])
@@ -1527,7 +1528,7 @@
 result of ``type(name, bases, dict)``.
 
 When the class definition is read, if *__metaclass__* is defined then the
-callable assigned to it will be called instead of :func:`type`. The allows
+callable assigned to it will be called instead of :func:`type`. This allows
 classes or functions to be written which monitor or alter the class creation
 process:
 
@@ -1536,7 +1537,21 @@
 * Returning an instance of another class -- essentially performing the role of a
   factory function.
 
-.. XXX needs to be updated for the "new metaclasses" PEP
+These steps will have to be performed in the metaclass's :meth:`__new__` method
+-- :meth:`type.__new__` can then be called from this method to create a class
+with different properties.  This example adds a new element to the class
+dictionary before creating the class::
+
+  class metacls(type):
+      def __new__(mcs, name, bases, dict):
+          dict['foo'] = 'metacls was here'
+          return type.__new__(mcs, name, bases, dict)
+
+You can of course also override other class methods (or add new methods); for
+example defining a custom :meth:`__call__` method in the metaclass allows custom
+behavior when the class is called, e.g. not always creating a new instance.
+
+
 .. data:: __metaclass__
 
    This variable can be any callable accepting arguments for ``name``, ``bases``,
diff --git a/Doc/using/cmdline.rst b/Doc/using/cmdline.rst
index 3fe405a..ba3e1c9 100644
--- a/Doc/using/cmdline.rst
+++ b/Doc/using/cmdline.rst
@@ -142,6 +142,14 @@
    option is given twice (:option:`-bb`).
 
 
+.. cmdoption:: -B
+
+   If given, Python won't try to write ``.pyc`` or ``.pyo`` files on the
+   import of source modules.  See also :envvar:`PYTHONDONTWRITEBYTECODE`.
+
+   .. versionadded:: 2.6
+
+
 .. cmdoption:: -d
 
    Turn on parser debugging output (for wizards only, depending on compilation
@@ -284,6 +292,8 @@
 Environment variables
 ---------------------
 
+These environment variables influence Python's behavior.
+
 .. envvar:: PYTHONHOME
    
    Change the location of the standard Python libraries.  By default, the
@@ -299,7 +309,7 @@
 
 .. envvar:: PYTHONPATH
 
-   Augments the default search path for module files.  The format is the same as
+   Augment the default search path for module files.  The format is the same as
    the shell's :envvar:`PATH`: one or more directory pathnames separated by
    colons.  Non-existent directories are silently ignored.
    
@@ -349,6 +359,9 @@
    If this is set to a non-empty string it is equivalent to specifying the
    :option:`-i` option.
 
+   This variable can also be modified by Python code using :data:`os.environ`
+   to force inspect mode on program termination.
+
 
 .. envvar:: PYTHONUNBUFFERED
    
@@ -368,3 +381,43 @@
    If this is set, Python ignores case in :keyword:`import` statements.  This
    only works on Windows.
 
+
+.. envvar:: PYTHONDONTWRITEBYTECODE
+
+   If this is set, Python won't try to write ``.pyc`` or ``.pyo`` files on the
+   import of source modules.
+
+   .. versionadded:: 2.6
+
+
+.. envvar:: PYTHONEXECUTABLE
+
+   If this environment variable is set, ``sys.argv[0]`` will be set to its
+   value instead of the value got through the C runtime.  Only works on
+   MacOS X.
+
+
+Debug-mode variables
+~~~~~~~~~~~~~~~~~~~~
+
+Setting these variables only has an effect in a debug build of Python, that is,
+if Python was configured with the :option:`--with-pydebug` build option.
+
+.. envvar:: PYTHONTHREADDEBUG
+
+   If set, Python will print debug threading debug info.
+
+   .. versionchanged:: 2.6
+      Previously, this variable was called ``THREADDEBUG``.
+
+.. envvar:: PYTHONDUMPREFS
+
+   If set, Python will dump objects and reference counts still alive after
+   shutting down the interpreter.
+
+
+.. envvar:: PYTHONMALLOCSTATS
+
+   If set, Python will print memory allocation statistics every time a new
+   object arena is created, and on shutdown.
+
diff --git a/Include/pydebug.h b/Include/pydebug.h
index 756f1e6..279e360 100644
--- a/Include/pydebug.h
+++ b/Include/pydebug.h
@@ -17,6 +17,7 @@
 PyAPI_DATA(int) Py_TabcheckFlag;
 PyAPI_DATA(int) Py_IgnoreEnvironmentFlag;
 PyAPI_DATA(int) Py_DivisionWarningFlag;
+PyAPI_DATA(int) Py_DontWriteBytecodeFlag;
 
 /* this is a wrapper around getenv() that pays attention to
    Py_IgnoreEnvironmentFlag.  It should be used for getting variables like
diff --git a/Lib/collections.py b/Lib/collections.py
index 884c91f..2f0d038 100644
--- a/Lib/collections.py
+++ b/Lib/collections.py
@@ -119,10 +119,11 @@
         @property
         def hypot(self):
             return (self.x ** 2 + self.y ** 2) ** 0.5
-        def __repr__(self):
-            return 'Point(x=%.3f, y=%.3f, hypot=%.3f)' % (self.x, self.y, self.hypot)
+        def __str__(self):
+            return 'Point: x=%6.3f y=%6.3f hypot=%6.3f' % (self.x, self.y, self.hypot)
 
-    print(Point(3, 4),'\n', Point(2, 5), '\n', Point(9./7, 6))
+    for p in Point(3,4), Point(14,5), Point(9./7,6):
+        print (p)
 
     class Point(namedtuple('Point', 'x y')):
         'Point class with optimized _make() and _replace() without error-checking'
diff --git a/Lib/test/output/test_cProfile b/Lib/test/output/test_cProfile
index 7561bcb..1221c63 100644
--- a/Lib/test/output/test_cProfile
+++ b/Lib/test/output/test_cProfile
@@ -5,7 +5,7 @@
 
    ncalls  tottime  percall  cumtime  percall filename:lineno(function)
         1    0.000    0.000    1.000    1.000 <string>:1(<module>)
-        2    0.000    0.000    0.000    0.000 io.py:1212(flush)
+        2    0.000    0.000    0.000    0.000 io.py:1213(flush)
         1    0.000    0.000    0.000    0.000 io.py:269(flush)
         1    0.000    0.000    0.000    0.000 io.py:656(closed)
         1    0.000    0.000    0.000    0.000 io.py:874(flush)
@@ -30,7 +30,7 @@
 Function                                          called...
                                                       ncalls  tottime  cumtime
 <string>:1(<module>)                              ->       1    0.270    1.000  test_cProfile.py:30(testfunc)
-io.py:1212(flush)                                 ->       1    0.000    0.000  io.py:269(flush)
+io.py:1213(flush)                                 ->       1    0.000    0.000  io.py:269(flush)
                                                            1    0.000    0.000  io.py:874(flush)
 io.py:269(flush)                                  -> 
 io.py:656(closed)                                 -> 
@@ -53,7 +53,7 @@
 test_cProfile.py:93(helper2)                      ->       8    0.064    0.080  test_cProfile.py:103(subhelper)
                                                            8    0.000    0.008  {hasattr}
 {exec}                                            ->       1    0.000    1.000  <string>:1(<module>)
-                                                           2    0.000    0.000  io.py:1212(flush)
+                                                           2    0.000    0.000  io.py:1213(flush)
 {hasattr}                                         ->      12    0.012    0.012  test_cProfile.py:115(__getattr__)
 {method 'append' of 'list' objects}               -> 
 {method 'disable' of '_lsprof.Profiler' objects}  -> 
@@ -65,10 +65,10 @@
 Function                                          was called by...
                                                       ncalls  tottime  cumtime
 <string>:1(<module>)                              <-       1    0.000    1.000  {exec}
-io.py:1212(flush)                                 <-       2    0.000    0.000  {exec}
-io.py:269(flush)                                  <-       1    0.000    0.000  io.py:1212(flush)
+io.py:1213(flush)                                 <-       2    0.000    0.000  {exec}
+io.py:269(flush)                                  <-       1    0.000    0.000  io.py:1213(flush)
 io.py:656(closed)                                 <-       1    0.000    0.000  io.py:874(flush)
-io.py:874(flush)                                  <-       1    0.000    0.000  io.py:1212(flush)
+io.py:874(flush)                                  <-       1    0.000    0.000  io.py:1213(flush)
 test_cProfile.py:103(subhelper)                   <-       8    0.064    0.080  test_cProfile.py:93(helper2)
 test_cProfile.py:115(__getattr__)                 <-      16    0.016    0.016  test_cProfile.py:103(subhelper)
                                                           12    0.012    0.012  {hasattr}
diff --git a/Lib/test/output/test_profile b/Lib/test/output/test_profile
index f5e7160..0582611 100644
--- a/Lib/test/output/test_profile
+++ b/Lib/test/output/test_profile
@@ -10,7 +10,7 @@
        12    0.000    0.000    0.012    0.001 :0(hasattr)
         1    0.000    0.000    0.000    0.000 :0(setprofile)
         1    0.000    0.000    1.000    1.000 <string>:1(<module>)
-        2    0.000    0.000    0.000    0.000 io.py:1212(flush)
+        2    0.000    0.000    0.000    0.000 io.py:1213(flush)
         1    0.000    0.000    0.000    0.000 io.py:269(flush)
         1    0.000    0.000    0.000    0.000 io.py:656(closed)
         1    0.000    0.000    0.000    0.000 io.py:874(flush)
@@ -33,11 +33,11 @@
 :0(append)                            -> 
 :0(exc_info)                          -> 
 :0(exec)                              -> <string>:1(<module>)(1)    1.000
-                                         io.py:1212(flush)(2)    0.000
+                                         io.py:1213(flush)(2)    0.000
 :0(hasattr)                           -> test_profile.py:115(__getattr__)(12)    0.028
 :0(setprofile)                        -> 
 <string>:1(<module>)                  -> test_profile.py:30(testfunc)(1)    1.000
-io.py:1212(flush)                     -> io.py:269(flush)(1)    0.000
+io.py:1213(flush)                     -> io.py:269(flush)(1)    0.000
                                          io.py:874(flush)(1)    0.000
 io.py:269(flush)                      -> 
 io.py:656(closed)                     -> 
@@ -74,10 +74,10 @@
                                          test_profile.py:93(helper2)(8)    0.400
 :0(setprofile)                        <- profile:0(testfunc())(1)    1.000
 <string>:1(<module>)                  <- :0(exec)(1)    1.000
-io.py:1212(flush)                     <- :0(exec)(2)    1.000
-io.py:269(flush)                      <- io.py:1212(flush)(1)    0.000
+io.py:1213(flush)                     <- :0(exec)(2)    1.000
+io.py:269(flush)                      <- io.py:1213(flush)(1)    0.000
 io.py:656(closed)                     <- io.py:874(flush)(1)    0.000
-io.py:874(flush)                      <- io.py:1212(flush)(1)    0.000
+io.py:874(flush)                      <- io.py:1213(flush)(1)    0.000
 profile:0(profiler)                   <- 
 profile:0(testfunc())                 <- profile:0(profiler)(1)    0.000
 test_profile.py:103(subhelper)        <- test_profile.py:93(helper2)(8)    0.400
diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
index facf9fd..bc31620 100644
--- a/Lib/test/test_socket.py
+++ b/Lib/test/test_socket.py
@@ -1215,7 +1215,7 @@
         tests.append(TestLinuxAbstractNamespace)
     if isTipcAvailable():
         tests.append(TIPCTest)
-    tests.append(TIPCThreadableTest)
+        tests.append(TIPCThreadableTest)
 
     thread_info = test_support.threading_setup()
     test_support.run_unittest(*tests)
diff --git a/Lib/test/test_zipfile.py b/Lib/test/test_zipfile.py
index ee8150e..7e401da 100644
--- a/Lib/test/test_zipfile.py
+++ b/Lib/test/test_zipfile.py
@@ -14,6 +14,11 @@
 TESTFN2 = TESTFN + "2"
 FIXEDTEST_SIZE = 1000
 
+SMALL_TEST_DATA = [('_ziptest1', '1q2w3e4r5t'),
+                   ('ziptest2dir/_ziptest2', 'qawsedrftg'),
+                   ('/ziptest2dir/ziptest3dir/_ziptest3', 'azsxdcfvgb'),
+                   ('ziptest2dir/ziptest3dir/ziptest4dir/_ziptest3', '6y7u8i9o0p')]
+
 class TestsWithSourceFile(unittest.TestCase):
     def setUp(self):
         self.line_gen = (bytes("Zipfile test line %d. random float: %f" %
@@ -289,6 +294,57 @@
         self.assertRaises(RuntimeError, zipf.write, TESTFN)
         zipf.close()
 
+    def testExtract(self):
+        zipfp = zipfile.ZipFile(TESTFN2, "w", zipfile.ZIP_STORED)
+        for fpath, fdata in SMALL_TEST_DATA:
+            zipfp.writestr(fpath, fdata)
+        zipfp.close()
+
+        zipfp = zipfile.ZipFile(TESTFN2, "r")
+        for fpath, fdata in SMALL_TEST_DATA:
+            writtenfile = zipfp.extract(fpath)
+
+            # make sure it was written to the right place
+            if os.path.isabs(fpath):
+                correctfile = os.path.join(os.getcwd(), fpath[1:])
+            else:
+                correctfile = os.path.join(os.getcwd(), fpath)
+
+            self.assertEqual(writtenfile, correctfile)
+
+            # make sure correct data is in correct file
+            self.assertEqual(fdata.encode(), open(writtenfile, "rb").read())
+
+            os.remove(writtenfile)
+
+        zipfp.close()
+
+        # remove the test file subdirectories
+        shutil.rmtree(os.path.join(os.getcwd(), 'ziptest2dir'))
+
+    def testExtractAll(self):
+        zipfp = zipfile.ZipFile(TESTFN2, "w", zipfile.ZIP_STORED)
+        for fpath, fdata in SMALL_TEST_DATA:
+            zipfp.writestr(fpath, fdata)
+        zipfp.close()
+
+        zipfp = zipfile.ZipFile(TESTFN2, "r")
+        zipfp.extractall()
+        for fpath, fdata in SMALL_TEST_DATA:
+            if os.path.isabs(fpath):
+                outfile = os.path.join(os.getcwd(), fpath[1:])
+            else:
+                outfile = os.path.join(os.getcwd(), fpath)
+
+            self.assertEqual(fdata.encode(), open(outfile, "rb").read())
+
+            os.remove(outfile)
+
+        zipfp.close()
+
+        # remove the test file subdirectories
+        shutil.rmtree(os.path.join(os.getcwd(), 'ziptest2dir'))
+
     def tearDown(self):
         os.remove(TESTFN)
         os.remove(TESTFN2)
diff --git a/Lib/zipfile.py b/Lib/zipfile.py
index b274682..2d308c3 100644
--- a/Lib/zipfile.py
+++ b/Lib/zipfile.py
@@ -3,7 +3,7 @@
 
 XXX references to utf-8 need further investigation.
 """
-import struct, os, time, sys
+import struct, os, time, sys, shutil
 import binascii, io
 
 try:
@@ -817,6 +817,62 @@
             zef.set_univ_newlines(True)
         return zef
 
+    def extract(self, member, path=None, pwd=None):
+        """Extract a member from the archive to the current working directory,
+           using its full name. Its file information is extracted as accurately
+           as possible. `member' may be a filename or a ZipInfo object. You can
+           specify a different directory using `path'.
+        """
+        if not isinstance(member, ZipInfo):
+            member = self.getinfo(member)
+
+        if path is None:
+            path = os.getcwd()
+
+        return self._extract_member(member, path, pwd)
+
+    def extractall(self, path=None, members=None, pwd=None):
+        """Extract all members from the archive to the current working
+           directory. `path' specifies a different directory to extract to.
+           `members' is optional and must be a subset of the list returned
+           by namelist().
+        """
+        if members is None:
+            members = self.namelist()
+
+        for zipinfo in members:
+            self.extract(zipinfo, path, pwd)
+
+    def _extract_member(self, member, targetpath, pwd):
+        """Extract the ZipInfo object 'member' to a physical
+           file on the path targetpath.
+        """
+        # build the destination pathname, replacing
+        # forward slashes to platform specific separators.
+        if targetpath[-1:] == "/":
+            targetpath = targetpath[:-1]
+
+        # don't include leading "/" from file name if present
+        if os.path.isabs(member.filename):
+            targetpath = os.path.join(targetpath, member.filename[1:])
+        else:
+            targetpath = os.path.join(targetpath, member.filename)
+
+        targetpath = os.path.normpath(targetpath)
+
+        # Create all upper directories if necessary.
+        upperdirs = os.path.dirname(targetpath)
+        if upperdirs and not os.path.exists(upperdirs):
+            os.makedirs(upperdirs)
+
+        source = self.open(member.filename, pwd=pwd)
+        target = open(targetpath, "wb")
+        shutil.copyfileobj(source, target)
+        source.close()
+        target.close()
+
+        return targetpath
+
     def _writecheck(self, zinfo):
         """Check for errors before writing a file to the archive."""
         if zinfo.filename in self.NameToInfo:
diff --git a/Misc/NEWS b/Misc/NEWS
index 8a77060..34690da 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,8 +12,20 @@
 Core and Builtins
 -----------------
 
+<<<<<<< .working
 - Issue #1762972: __file__ points to the source file instead of the pyc/pyo
   file if the py file exists.
+=======
+- Patch #1668: renamed THREADDEBUG envvar to PYTHONTHREADDEBUG.
+
+- Patch #602345: Add -B command line option, PYTHONDONTWRITEBYTECODE envvar
+  and sys.dont_write_bytecode attribute. All these can be set to forbid Python
+  to attempt to write compiled bytecode files.
+
+- Improve some exception messages when Windows fails to load an extension
+  module. Now we get for example '%1 is not a valid Win32 application' instead
+  of 'error code 193'.
+>>>>>>> .merge-right.r59840
 
 - Issue #1393: object_richcompare() returns NotImplemented instead of
   False if the objects aren't equal, to give the other side a chance.
@@ -44,6 +56,890 @@
   of PyString.
 
 
+<<<<<<< .working
+=======
+- 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 #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.
+
+- Py_ssize_t fields work in structmember when HAVE_LONG_LONG is not defined.
+
+- PEP 3123: Provide forward compatibility with Python 3.0, while keeping
+  backwards compatibility. Add Py_Refcnt, Py_Type, Py_Size, and
+  PyVarObject_HEAD_INIT.
+
+- Patch #1673759: add a missing overflow check when formatting floats
+  with %G.
+
+- Patch #1733960: Allow T_LONGLONG to accept ints.
+
+- T_PYSSIZET can now be used in PyMemberDef lists for Py_ssize_t members.
+
+- 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
+
+- Bug #1637022: Prefix AST symbols with _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.
+
+- Fix some leftovers from the conversion from int to Py_ssize_t
+  (relevant to strings and sequences of more than 2**31 items).
+
+- 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.
+
+- Make _PyGILState_NoteThreadState() static, it was not used anywhere
+  outside of pystate.c and should not be necessary.
+
+- 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.
+
+Library
+-------
+
+- 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.
+
+- 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).
+
+>>>>>>> .merge-right.r59840
 Extension Modules
 -----------------
 
diff --git a/Modules/main.c b/Modules/main.c
index a8cbbfe..87462a0 100644
--- a/Modules/main.c
+++ b/Modules/main.c
@@ -44,7 +44,7 @@
 static int  orig_argc;
 
 /* command line options */
-#define BASE_OPTS "bc:dEhim:OStuvVW:xX?"
+#define BASE_OPTS "bBc:dEhim:OStuvVW:xX?"
 
 #define PROGRAM_OPTS BASE_OPTS
 
@@ -57,9 +57,10 @@
 Options and arguments (and corresponding environment variables):\n\
 -b     : issue warnings about str(bytes_instance), str(buffer_instance)\n\
          and comparing bytes/buffer with str. (-bb: issue errors)\n\
+-B     : don't write .py[co] files on import; also PYTHONDONTWRITEBYTECODE=x\n\
 -c cmd : program passed in as string (terminates option list)\n\
 -d     : debug output from parser; also PYTHONDEBUG=x\n\
--E     : ignore environment variables (such as PYTHONPATH)\n\
+-E     : ignore PYTHON* environment variables (such as PYTHONPATH)\n\
 -h     : print this help message and exit (also --help)\n\
 ";
 static char *usage_2 = "\
@@ -88,6 +89,8 @@
 PYTHONSTARTUP: file executed on interactive startup (no default)\n\
 PYTHONPATH   : '%c'-separated list of directories prefixed to the\n\
                default module search path.  The result is sys.path.\n\
+";
+static char *usage_5 = "\
 PYTHONHOME   : alternate <prefix> directory (or <prefix>%c<exec_prefix>).\n\
                The default module search path uses %s.\n\
 PYTHONCASEOK : ignore case in 'import' statements (Windows).\n\
@@ -106,7 +109,8 @@
 		fprintf(f, usage_1);
 		fprintf(f, usage_2);
 		fprintf(f, usage_3);
-		fprintf(f, usage_4, DELIM, DELIM, PYTHONHOMEHELP);
+		fprintf(f, usage_4, DELIM);
+		fprintf(f, usage_5, DELIM, PYTHONHOMEHELP);
 	}
 #if defined(__VMS)
 	if (exitcode == 0) {
@@ -313,6 +317,10 @@
 			Py_OptimizeFlag++;
 			break;
 
+		case 'B':
+			Py_DontWriteBytecodeFlag++;
+			break;
+
 		case 'S':
 			Py_NoSiteFlag++;
 			break;
diff --git a/Python/import.c b/Python/import.c
index f342143..6500f23 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -954,8 +954,11 @@
 		if (Py_VerboseFlag)
 			PySys_WriteStderr("import %s # from %s\n",
 				name, pathname);
-		if (cpathname)
-			write_compiled_module(co, cpathname, mtime);
+		if (cpathname) {
+			PyObject *ro = PySys_GetObject("dont_write_bytecode");
+			if (ro == NULL || !PyObject_IsTrue(ro))
+				write_compiled_module(co, cpathname, mtime);
+		}
 	}
 	m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, pathname);
 	Py_DECREF(co);
@@ -1604,7 +1607,7 @@
 	FILEFINDBUF3 ffbuf;
 	APIRET rc;
 
-	if (getenv("PYTHONCASEOK") != NULL)
+	if (Py_GETENV("PYTHONCASEOK") != NULL)
 		return 1;
 
 	rc = DosFindFirst(buf,
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index faacb44..9b72908 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -76,6 +76,7 @@
 int Py_InspectFlag; /* Needed to determine whether to exit at SystemError */
 int Py_NoSiteFlag; /* Suppress 'import site' */
 int Py_BytesWarningFlag; /* Warn on str(bytes) and str(buffer) */
+int Py_DontWriteBytecodeFlag; /* Suppress writing bytecode files (*.py[co]) */
 int Py_UseClassExceptionsFlag = 1; /* Needed by bltinmodule.c: deprecated */
 int Py_FrozenFlag; /* Needed by getpath.c */
 int Py_IgnoreEnvironmentFlag; /* e.g. PYTHONPATH, PYTHONHOME */
@@ -176,6 +177,8 @@
 		Py_VerboseFlag = add_flag(Py_VerboseFlag, p);
 	if ((p = Py_GETENV("PYTHONOPTIMIZE")) && *p != '\0')
 		Py_OptimizeFlag = add_flag(Py_OptimizeFlag, p);
+	if ((p = Py_GETENV("PYTHONDONTWRITEBYTECODE")) && *p != '\0')
+		Py_DontWriteBytecodeFlag = add_flag(Py_DontWriteBytecodeFlag, p);
 
 	interp = PyInterpreterState_New();
 	if (interp == NULL)
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index d6befa4..35834ae 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -1041,6 +1041,9 @@
 	v = Py_BuildValue("(UUU)", "CPython", branch, svn_revision);
 	PyDict_SetItemString(sysdict, "subversion", v);
 	Py_XDECREF(v);
+        PyDict_SetItemString(sysdict, "dont_write_bytecode",
+                             v = PyBool_FromLong(Py_DontWriteBytecodeFlag));
+        Py_XDECREF(v);
 	/*
 	 * These release level checks are mutually exclusive and cover
 	 * the field, so don't get too fancy with the pre-processor!
diff --git a/Python/thread.c b/Python/thread.c
index de4fa05..f2da8c6 100644
--- a/Python/thread.c
+++ b/Python/thread.c
@@ -79,7 +79,7 @@
 PyThread_init_thread(void)
 {
 #ifdef Py_DEBUG
-	char *p = getenv("THREADDEBUG");
+	char *p = Py_GETENV("PYTHONTHREADDEBUG");
 
 	if (p) {
 		if (*p)
