diff --git a/Doc/howto/urllib2.rst b/Doc/howto/urllib2.rst
index 858c9b1..f8f4a2b 100644
--- a/Doc/howto/urllib2.rst
+++ b/Doc/howto/urllib2.rst
@@ -541,7 +541,9 @@
 .. note::
 
     Currently ``urllib2`` *does not* support fetching of ``https``
-    locations through a proxy. This can be a problem.
+    locations through a proxy.  However, this can be enabled by extending
+    urllib2 as shown in the recipe [#]_.
+
 
 Sockets and Layers
 ==================
@@ -596,3 +598,6 @@
        is set to use the proxy, which urllib2 picks up on. In order to test
        scripts with a localhost server, I have to prevent urllib2 from using
        the proxy.
+.. [#] urllib2 opener for SSL proxy (CONNECT method): `ASPN Cookbook Recipe 
+       <http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/456195>`_.
+ 
diff --git a/Doc/lib/libstringio.tex b/Doc/lib/libstringio.tex
index 2431251..73ff0e4 100644
--- a/Doc/lib/libstringio.tex
+++ b/Doc/lib/libstringio.tex
@@ -78,6 +78,10 @@
 module, those provided by this module are not able to accept Unicode
 strings that cannot be encoded as plain \ASCII{} strings.
 
+Calling \function{StringIO()} with a Unicode string parameter populates
+the object with the buffer representation of the Unicode string, instead of
+encoding the string.
+
 Another difference from the \refmodule{StringIO} module is that calling
 \function{StringIO()} with a string parameter creates a read-only object.
 Unlike an object created without a string parameter, it does not have
diff --git a/Doc/tut/tut.tex b/Doc/tut/tut.tex
index a322eb5..74468b1 100644
--- a/Doc/tut/tut.tex
+++ b/Doc/tut/tut.tex
@@ -2942,15 +2942,14 @@
 statement looks for a top-level module with the given name.
 
 When packages are structured into subpackages (as with the
-\module{sound} package in the example), there's no shortcut to refer
-to submodules of sibling packages - the full name of the subpackage
-must be used.  For example, if the module
-\module{sound.filters.vocoder} needs to use the \module{echo} module
-in the \module{sound.effects} package, it can use \code{from
-sound.effects import echo}.
+\module{sound} package in the example), you can use absolute
+imports to refer to submodules of siblings packages.
+For example, if the module \module{sound.filters.vocoder} needs to
+use the \module{echo} module in the \module{sound.effects} package,
+it can use \code{from sound.effects import echo}.
 
 Starting with Python 2.5, in addition to the implicit relative imports
-described above, you can write explicit relative imports with the
+described above, you can also write explicit relative imports with the
 \code{from module import name} form of import statement. These explicit
 relative imports use leading dots to indicate the current and parent
 packages involved in the relative import. From the \module{surround}
diff --git a/Lib/idlelib/run.py b/Lib/idlelib/run.py
index c1bc8eb..7914d20 100644
--- a/Lib/idlelib/run.py
+++ b/Lib/idlelib/run.py
@@ -193,14 +193,16 @@
     """XXX How to do this now?"""
 
 def exit():
-    """Exit subprocess, possibly after first deleting sys.exitfunc
+    """Exit subprocess, possibly after first clearing exit functions.
 
     If config-main.cfg/.def 'General' 'delete-exitfunc' is True, then any
-    sys.exitfunc will be removed before exiting.  (VPython support)
+    functions registered with atexit will be removed before exiting.
+    (VPython support)
 
     """
     if no_exitfunc:
-        del sys.exitfunc
+        import atexit
+        atexit._clear()
     sys.exit(0)
 
 class MyRPCServer(rpc.RPCServer):
diff --git a/Lib/sgmllib.py b/Lib/sgmllib.py
index 987b65e..ce5807b 100644
--- a/Lib/sgmllib.py
+++ b/Lib/sgmllib.py
@@ -428,7 +428,7 @@
         if replacement is None:
             self.unknown_entityref(name)
         else:
-            self.handle_data(self.convert_entityref(name))
+            self.handle_data(replacement)
 
     # Example -- handle data, should be overridden
     def handle_data(self, data):
diff --git a/Lib/test/test_dictcomps.py b/Lib/test/test_dictcomps.py
new file mode 100644
index 0000000..9af9e48
--- /dev/null
+++ b/Lib/test/test_dictcomps.py
@@ -0,0 +1,54 @@
+
+doctests = """
+
+    >>> k = "old value"
+    >>> { k: None for k in range(10) }
+    {0: None, 1: None, 2: None, 3: None, 4: None, 5: None, 6: None, 7: None, 8: None, 9: None}
+    >>> k
+    'old value'
+
+    >>> { k: k+10 for k in range(10) }
+    {0: 10, 1: 11, 2: 12, 3: 13, 4: 14, 5: 15, 6: 16, 7: 17, 8: 18, 9: 19}
+
+    >>> g = "Global variable"
+    >>> { k: g for k in range(10) }
+    {0: 'Global variable', 1: 'Global variable', 2: 'Global variable', 3: 'Global variable', 4: 'Global variable', 5: 'Global variable', 6: 'Global variable', 7: 'Global variable', 8: 'Global variable', 9: 'Global variable'}
+
+    >>> { k: v for k in range(10) for v in range(10) if k == v }
+    {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9}
+
+    >>> { k: v for v in range(10) for k in range(v*9, v*10) }
+    {9: 1, 18: 2, 19: 2, 27: 3, 28: 3, 29: 3, 36: 4, 37: 4, 38: 4, 39: 4, 45: 5, 46: 5, 47: 5, 48: 5, 49: 5, 54: 6, 55: 6, 56: 6, 57: 6, 58: 6, 59: 6, 63: 7, 64: 7, 65: 7, 66: 7, 67: 7, 68: 7, 69: 7, 72: 8, 73: 8, 74: 8, 75: 8, 76: 8, 77: 8, 78: 8, 79: 8, 81: 9, 82: 9, 83: 9, 84: 9, 85: 9, 86: 9, 87: 9, 88: 9, 89: 9}
+
+    >>> { x: y for y, x in ((1, 2), (3, 4)) } = 5 # doctest: +IGNORE_EXCEPTION_DETAIL
+    Traceback (most recent call last):
+       ...
+    SyntaxError: ...
+
+    >>> { x: y for y, x in ((1, 2), (3, 4)) } += 5 # doctest: +IGNORE_EXCEPTION_DETAIL
+    Traceback (most recent call last):
+       ...
+    SyntaxError: ...
+
+"""
+
+__test__ = {'doctests' : doctests}
+
+def test_main(verbose=None):
+    import sys
+    from test import test_support
+    from test import test_dictcomps
+    test_support.run_doctest(test_dictcomps, verbose)
+
+    # verify reference counting
+    if verbose and hasattr(sys, "gettotalrefcount"):
+        import gc
+        counts = [None] * 5
+        for i in range(len(counts)):
+            test_support.run_doctest(test_dictcomps, verbose)
+            gc.collect()
+            counts[i] = sys.gettotalrefcount()
+        print(counts)
+
+if __name__ == "__main__":
+    test_main(verbose=True)
diff --git a/Modules/cStringIO.c b/Modules/cStringIO.c
index 16d4173..9b39703 100644
--- a/Modules/cStringIO.c
+++ b/Modules/cStringIO.c
@@ -664,8 +664,11 @@
   char *buf;
   Py_ssize_t size;
 
-  if (PyObject_AsCharBuffer(s, (const char **)&buf, &size) != 0)
-      return NULL;
+  if (PyObject_AsReadBuffer(s, (const void **)&buf, &size)) {
+    PyErr_Format(PyExc_TypeError, "expected read buffer, %.200s found",
+                 s->ob_type->tp_name);
+    return NULL;
+  }
 
   self = PyObject_New(Iobject, &Itype);
   if (!self) return NULL;
diff --git a/Python/ast.c b/Python/ast.c
index 5426c02..b1b697f 100644
--- a/Python/ast.c
+++ b/Python/ast.c
@@ -3112,6 +3112,7 @@
     return v;
 }
 
+#ifdef Py_USING_UNICODE
 static PyObject *
 decode_unicode(const char *s, size_t len, int rawmode, const char *encoding)
 {
@@ -3174,6 +3175,7 @@
     Py_XDECREF(u);
     return v;
 }
+#endif
 
 /* s is a Python string literal, including the bracketing quote characters,
  * and r &/or u prefixes (if any), and embedded escape sequences (if any).
