diff --git a/Doc/whatsnew/2.7.rst b/Doc/whatsnew/2.7.rst
index 768ea33..4171593 100644
--- a/Doc/whatsnew/2.7.rst
+++ b/Doc/whatsnew/2.7.rst
@@ -49,9 +49,9 @@
    This saves the maintainer some effort going through the SVN logs
    when researching a change.
 
-This article explains the new features in Python 2.7.  No release
-schedule has been decided yet for 2.7; the schedule will eventually be
-described in :pep:`373`.
+This article explains the new features in Python 2.7.  The final
+release of 2.7 is currently scheduled for June 2010; the detailed
+schedule is described in :pep:`373`.
 
 .. Compare with previous release in 2 - 3 sentences here.
    add hyperlink when the documentation becomes available online.
@@ -73,6 +73,11 @@
 * The new format specifier described in :ref:`pep-0378`.
 * The :class:`memoryview` object.
 * A small subset of the :mod:`importlib` module `described below <#importlib-section>`__.
+* Float-to-string and string-to-float conversions now round their
+  results more correctly.  And :func:`repr` of a floating-point
+  number *x* returns a result that's guaranteed to round back to the
+  same number when converted back to a string.
+* The :cfunc:`PyLong_AsLongAndOverflow` C API function.
 
 One porting change: the :option:`-3` switch now automatically
 enables the :option:`-Qwarn` switch that causes warnings
@@ -237,6 +242,33 @@
   (Proposed in http://codereview.appspot.com/53094; implemented by
   Georg Brandl.)
 
+* Conversions between floating-point numbers and strings are
+  now correctly rounded on most platforms.  These conversions occur
+  in many different places: :func:`str` on
+  floats and complex numbers; the :class:`float` and :class:`complex`
+  constructors;
+  numeric formatting; serialization and
+  deserialization of floats and complex numbers using the
+  :mod:`marshal`, :mod:`pickle`
+  and :mod:`json` modules;
+  parsing of float and imaginary literals in Python code;
+  and :class:`Decimal`-to-float conversion.
+
+  Related to this, the :func:`repr` of a floating-point number *x*
+  now returns a result based on the shortest decimal string that's
+  guaranteed to round back to *x* under correct rounding (with
+  round-half-to-even rounding mode).  Previously it gave a string
+  based on rounding x to 17 decimal digits.
+
+  The rounding library responsible for this improvement works on
+  Windows, and on Unix platforms using the gcc, icc, or suncc
+  compilers.  There may be a small number of platforms where correct
+  operation of this code cannot be guaranteed, so the code is not
+  used on such systems.
+
+  Implemented by Mark Dickinson, using David Gay's :file:`dtoa.c` library;
+  :issue:`7117`.
+
 * The :meth:`str.format` method now supports automatic numbering of the replacement
   fields.  This makes using :meth:`str.format` more closely resemble using
   ``%s`` formatting::
@@ -259,6 +291,10 @@
   alignment is applied to the whole of the resulting ``1.5+3j``
   output.  (Contributed by Eric Smith; :issue:`1588`.)
 
+  The 'F' format code now always formats its output using uppercase characters,
+  so it will now produce 'INF' and 'NAN'.
+  (Contributed by Eric Smith; :issue:`3382`.)
+
 * The :func:`int` and :func:`long` types gained a ``bit_length``
   method that returns the number of bits necessary to represent
   its argument in binary::
@@ -301,6 +337,9 @@
 
   (Implemented by Mark Dickinson; :issue:`3166`.)
 
+  Integer division is also more accurate in its rounding behaviours.  (Also
+  implemented by Mark Dickinson; :issue:`1811`.)
+
 * The :class:`bytearray` type's :meth:`translate` method now accepts
   ``None`` as its first argument.  (Fixed by Georg Brandl;
   :issue:`4759`.)
@@ -315,6 +354,15 @@
   supported.  (Contributed by Alexander Belchenko and Amaury Forgeot
   d'Arc; :issue:`1616979`.)
 
+* The :class:`file` object will now set the :attr:`filename` attribute
+  on the :exc:`IOError` exception when trying to open a directory
+  on POSIX platforms.  (Noted by Jan Kaliszewski; :issue:`4764`.)
+
+* Extra parentheses in function definitions are illegal in Python 3.x,
+  meaning that you get a syntax error from ``def f((x)): pass``.  In
+  Python3-warning mode, Python 2.7 will now warn about this odd usage.
+  (Noted by James Lingard; :issue:`7362`.)
+
 .. ======================================================================
 
 
@@ -333,16 +381,16 @@
   :keyword:`with` statements, looking up the :meth:`__enter__` and
   :meth:`__exit__` methods.  (Contributed by Benjamin Peterson.)
 
-* The garbage collector now performs better when many objects are
-  being allocated without deallocating any.  A full garbage collection
-  pass is only performed when the middle generation has been collected
-  10 times and when the number of survivor objects from the middle
-  generation exceeds 10% of the number of objects in the oldest
-  generation.  The second condition was added to reduce the number
-  of full garbage collections as the number of objects on the heap grows,
-  avoiding quadratic performance when allocating very many objects.
-  (Suggested by Martin von Loewis and implemented by Antoine Pitrou;
-  :issue:`4074`.)
+* The garbage collector now performs better for one common usage
+  pattern: when many objects are being allocated without deallocating
+  any of them.  This would previously take quadratic
+  time for garbage collection, but now the number of full garbage collections
+  is reduced as the number of objects on the heap grows.
+  The new logic is to only perform a full garbage collection pass when
+  the middle generation has been collected 10 times and when the
+  number of survivor objects from the middle generation exceeds 10% of
+  the number of objects in the oldest generation.  (Suggested by Martin
+  von Loewis and implemented by Antoine Pitrou; :issue:`4074`.)
 
 * The garbage collector tries to avoid tracking simple containers
   which can't be part of a cycle. In Python 2.7, this is now true for
@@ -410,7 +458,6 @@
   conversion function that supports arbitrary bases.
   (Patch by Gawain Bolton; :issue:`6713`.)
 
-
 .. ======================================================================
 
 New and Improved Modules
@@ -488,12 +535,22 @@
   (Added by Raymond Hettinger; :issue:`1818`.)
 
   The :class:`deque` data type now exposes its maximum length as the
-  read-only :attr:`maxlen` attribute.  (Added by Raymond Hettinger.)
+  read-only :attr:`maxlen` attribute, and has a
+  :meth:`reverse` method that reverses the elements of the deque in-place.
+  (Added by Raymond Hettinger.)
+
+* The :mod:`copy` module's :func:`deepcopy` function will now
+  correctly copy bound instance methods.  (Implemented by
+  Robert Collins; :issue:`1515`.)
 
 * The :mod:`ctypes` module now always converts ``None`` to a C NULL
   pointer for arguments declared as pointers.  (Changed by Thomas
   Heller; :issue:`4606`.)
 
+* New method: the :mod:`datetime` module's :class:`timedelta` class
+  gained a :meth:`total_seconds` method that returns the number of seconds
+  in the duration.  (Contributed by Brian Quinlan; :issue:`5788`.)
+
 * New method: the :class:`Decimal` class gained a
   :meth:`from_float` class method that performs an exact conversion
   of a floating-point number to a :class:`Decimal`.
@@ -539,14 +596,24 @@
   process, but instead simply not install the failing extension.
   (Contributed by Georg Brandl; :issue:`5583`.)
 
-  Issue #7457: added a read_pkg_file method to.distutils.dist.DistributionMetadata
-  see file:///MacDev/svn.python.org/python-trunk/Doc/build/html/distutils/examples.html#reading-the-metadata
-  (:issue:`7457`, added by Tarek).
+  The :class:`distutils.dist.DistributionMetadata` class'
+  :meth:`read_pkg_file` method will read the contents of a package's
+  :file:`PKG-INFO` metadata file.  For an example of its use,
+  XXX link to  file:///MacDev/svn.python.org/python-trunk/Doc/build/html/distutils/examples.html#reading-the-metadata
+  (Contributed by Tarek Ziade; :issue:`7457`.)
 
 * The :class:`Fraction` class now accepts two rational numbers
   as arguments to its constructor.
   (Implemented by Mark Dickinson; :issue:`5812`.)
 
+* The :mod:`ftplib` module gained the ability to establish secure FTP
+  connections using TLS encapsulation of authentication as well as
+  subsequent control and data transfers.  This is provided by the new
+  :class:`ftplib.FTP_TLS` class.
+  (Contributed by Giampaolo Rodola', :issue:`2054`.)  The :meth:`storbinary`
+  method for binary uploads can now restart uploads thanks to an added
+  *rest* parameter (patch by Pablo Mouzo; :issue:`6845`.)
+
 * New function: the :mod:`gc` module's :func:`is_tracked` returns
   true if a given instance is tracked by the garbage collector, false
   otherwise. (Contributed by Antoine Pitrou; :issue:`4688`.)
@@ -627,8 +694,12 @@
   with any object literal that decodes to a list of pairs.
   (Contributed by Raymond Hettinger; :issue:`5381`.)
 
-* New functions: the :mod:`math` module now has
-  a :func:`gamma` function.
+* New functions: the :mod:`math` module gained
+  :func:`erf` and :func:`erfc` for the error function and the complementary error function,
+  :func:`expm1` which computes ``e**x - 1`` with more precision than
+  using :func:`exp` and subtracting 1,
+  :func:`gamma` for the Gamma function, and
+  :func:`lgamma` for the natural log of the Gamma function.
   (Contributed by Mark Dickinson and nirinA raseliarison; :issue:`3366`.)
 
 * The :mod:`multiprocessing` module's :class:`Manager*` classes
@@ -640,6 +711,15 @@
 * The :mod:`nntplib` module now supports IPv6 addresses.
   (Contributed by Derek Morr; :issue:`1664`.)
 
+* New functions: the :mod:`os` module wraps the following POSIX system
+  calls: :func:`getresgid` and :func:`getresuid`, which return the
+  real, effective, and saved GIDs and UIDs;
+  :func:`setresgid` and :func:`setresuid`, which set
+  real, effective, and saved GIDs and UIDs to new values;
+  :func:`initgroups`.  (GID/UID functions
+  contributed by Travis H.; :issue:`6508`.  Support for initgroups added
+  by Jean-Paul Calderone; :issue:`7333`.)
+
 * The :mod:`pydoc` module now has help for the various symbols that Python
   uses.  You can now do ``help('<<')`` or ``help('@')``, for example.
   (Contributed by David Laban; :issue:`4739`.)
@@ -728,12 +808,6 @@
   :mod:`zipfile` now supports archiving empty directories and
   extracts them correctly.  (Fixed by Kuba Wieczorek; :issue:`4710`.)
 
-* The :mod:`ftplib` module gains the ability to establish secure FTP
-  connections using TLS encapsulation of authentication as well as
-  subsequent control and data transfers.  This is provided by the new
-  :class:`ftplib.FTP_TLS` class.
-  (Contributed by Giampaolo Rodola', :issue:`2054`.)
-
 .. ======================================================================
 .. whole new modules get described in subsections here
 
@@ -855,7 +929,7 @@
 Python 3.1 includes the :mod:`importlib` package, a re-implementation
 of the logic underlying Python's :keyword:`import` statement.
 :mod:`importlib` is useful for implementors of Python interpreters and
-to user who wish to write new importers that can participate in the
+to users who wish to write new importers that can participate in the
 import process.  Python 2.7 doesn't contain the complete
 :mod:`importlib` package, but instead has a tiny subset that contains
 a single function, :func:`import_module`.
@@ -934,12 +1008,23 @@
   extensions needed to call :cfunc:`PyCode_New`, which had many
   more arguments.  (Added by Jeffrey Yasskin.)
 
+* New function: :cfunc:`PyErr_NewExceptionWithDoc` creates a new
+  exception class, just as the existing :cfunc:`PyErr_NewException` does,
+  but takes an extra ``char *`` argument containing the docstring for the
+  new exception class.  (Added by the 'lekma' user on the Python bug tracker;
+  :issue:`7033`.)
+
 * New function: :cfunc:`PyFrame_GetLineNumber` takes a frame object
   and returns the line number that the frame is currently executing.
   Previously code would need to get the index of the bytecode
   instruction currently executing, and then look up the line number
   corresponding to that address.  (Added by Jeffrey Yasskin.)
 
+* New function: :cfunc:`PyLong_AsLongAndOverflow` approximates a Python long
+  integer as a C :ctype:`long`.  If the number is too large to fit into
+  a :ctype:`long`, an *overflow* flag is set and returned to the caller.
+  (Contributed by Case Van Horsen; :issue:`7528`.)
+
 * New macros: the Python header files now define the following macros:
   :cmacro:`Py_ISALNUM`,
   :cmacro:`Py_ISALPHA`,
@@ -958,6 +1043,12 @@
 
   .. XXX these macros don't seem to be described in the c-api docs.
 
+* New format codes: the :cfunc:`PyFormat_FromString`,
+  :cfunc:`PyFormat_FromStringV`, and :cfunc:`PyErr_Format` now
+  accepts ``%lld`` and ``%llu`` format codes for displaying values of
+  C's :ctype:`long long` types.
+  (Contributed by Mark Dickinson; :issue:`7228`.)
+
 * The complicated interaction between threads and process forking has
   been changed.  Previously, the child process created by
   :func:`os.fork` might fail because the child is created with only a
@@ -992,6 +1083,12 @@
 * The build process now supports Subversion 1.7.  (Contributed by
   Arfrever Frehtes Taifersar Arahesis; :issue:`6094`.)
 
+* Compiling Python with the :option:`--with-valgrind` option will now
+  disable the pymalloc allocator, which is difficult for the Valgrind to
+  analyze correctly.  Valgrind will therefore be better at detecting
+  memory leaks and overruns. (Contributed by James Henstridge; :issue:`2422`.)
+
+
 .. ======================================================================
 
 Port-Specific Changes: Windows
@@ -1011,6 +1108,10 @@
 * The :func:`os.listdir` function now correctly fails
   for an empty path.  (Fixed by Hirokazu Yamamoto; :issue:`5913`.)
 
+* The :mod:`mimelib` module will now read the MIME database from
+  the Windows registry when initializing.
+  (Patch by Gabriel Genellina; :issue:`4969`.)
+
 .. ======================================================================
 
 Port-Specific Changes: Mac OS X
@@ -1070,6 +1171,10 @@
   affects new-style classes (derived from :class:`object`) and C extension
   types.  (:issue:`6101`.)
 
+* The :meth:`readline` method of :class:`StringIO` objects now does
+  nothing when a negative length is requested, as other file-like
+  objects do.  (:issue:`7348`).
+
 .. ======================================================================
 
 
