diff --git a/Doc/library/socket.rst b/Doc/library/socket.rst
index 2f89758..5640919 100644
--- a/Doc/library/socket.rst
+++ b/Doc/library/socket.rst
@@ -803,7 +803,7 @@
    import socket
    import sys
 
-   HOST = ''                 # Symbolic name meaning the local host
+   HOST = ''                 # Symbolic name meaning all available interfaces
    PORT = 50007              # Arbitrary non-privileged port
    s = None
    for res in socket.getaddrinfo(HOST, PORT, socket.AF_UNSPEC, socket.SOCK_STREAM, 0, socket.AI_PASSIVE):
diff --git a/Doc/whatsnew/2.6.rst b/Doc/whatsnew/2.6.rst
index 9c4a877..8bd0c19 100644
--- a/Doc/whatsnew/2.6.rst
+++ b/Doc/whatsnew/2.6.rst
@@ -1692,7 +1692,7 @@
 
   ``permutations(iter[, r])`` returns all the permutations of length *r* of
   the iterable's elements.  If *r* is not specified, it will default to the 
-  number of elements produced by the iterable.
+  number of elements produced by the iterable. ::
 
     itertools.permutations([1,2,3,4], 2) ->
       [(1, 2), (1, 3), (1, 4), 
diff --git a/Lib/io.py b/Lib/io.py
index a308ac4..3172554 100644
--- a/Lib/io.py
+++ b/Lib/io.py
@@ -77,8 +77,9 @@
 
 def open(file, mode="r", buffering=None, encoding=None, errors=None,
          newline=None, closefd=True):
-    r"""Open file and return a stream. If the file cannot be opened, an
-    IOError is raised.
+
+    r"""Open file and return a stream. If the file cannot be opened, an IOError is
+    raised.
 
     file is either a string giving the name (and the path if the file
     isn't in the current working directory) of the file to be opened or an
@@ -325,7 +326,7 @@
     ### Positioning ###
 
     def seek(self, pos: int, whence: int = 0) -> int:
-        """seek(pos: int, whence: int = 0) -> int.  Change stream position.
+        """Change stream position.
 
         Change the stream position to byte offset offset. offset is
         interpreted relative to the position indicated by whence.  Values
@@ -340,21 +341,21 @@
         self._unsupported("seek")
 
     def tell(self) -> int:
-        """tell() -> int.  Return current stream position."""
+        """Return current stream position."""
         return self.seek(0, 1)
 
     def truncate(self, pos: int = None) -> int:
-        """truncate(pos: int = None) -> int. Truncate file to pos bytes.
+        """Truncate file to size bytes.
 
-        Pos defaults to the current IO position as reported by tell().
-        Returns the new size.
+        Size defaults to the current IO position as reported by tell().  Return
+        the new size.
         """
         self._unsupported("truncate")
 
     ### Flush and close ###
 
     def flush(self) -> None:
-        """flush() -> None.  Flushes write buffers, if applicable.
+        """Flush write buffers, if applicable.
 
         This is not implemented for read-only and non-blocking streams.
         """
@@ -363,7 +364,7 @@
     __closed = False
 
     def close(self) -> None:
-        """close() -> None.  Flushes and closes the IO object.
+        """Flush and close the IO object.
 
         This method has no effect if the file is already closed.
         """
@@ -389,7 +390,7 @@
     ### Inquiries ###
 
     def seekable(self) -> bool:
-        """seekable() -> bool.  Return whether object supports random access.
+        """Return whether object supports random access.
 
         If False, seek(), tell() and truncate() will raise IOError.
         This method may need to do a test seek().
@@ -405,7 +406,7 @@
 
 
     def readable(self) -> bool:
-        """readable() -> bool.  Return whether object was opened for reading.
+        """Return whether object was opened for reading.
 
         If False, read() will raise IOError.
         """
@@ -419,7 +420,7 @@
                           if msg is None else msg)
 
     def writable(self) -> bool:
-        """writable() -> bool.  Return whether object was opened for writing.
+        """Return whether object was opened for writing.
 
         If False, write() and truncate() will raise IOError.
         """
@@ -463,14 +464,16 @@
     # XXX Should these be present even if unimplemented?
 
     def fileno(self) -> int:
-        """fileno() -> int.  Returns underlying file descriptor if one exists.
+        """Returns underlying file descriptor if one exists.
 
-        Raises IOError if the IO object does not use a file descriptor.
+        An IOError is raised if the IO object does not use a file descriptor.
         """
         self._unsupported("fileno")
 
     def isatty(self) -> bool:
-        """isatty() -> int.  Returns whether this is an 'interactive' stream.
+        """Return whether this is an 'interactive' stream.
+
+        Return False if it can't be determined.
         """
         self._checkClosed()
         return False
@@ -478,8 +481,7 @@
     ### Readline[s] and writelines ###
 
     def readline(self, limit: int = -1) -> bytes:
-        r"""readline(limit: int = -1) -> bytes Read and return a line from the
-        stream.
+        r"""Read and return a line from the stream.
 
         If limit is specified, at most limit bytes will be read.
 
@@ -523,7 +525,7 @@
         return line
 
     def readlines(self, hint=None):
-        """readlines(hint=None) -> list Return a list of lines from the stream.
+        """Return a list of lines from the stream.
 
         hint can be specified to control the number of lines read: no more
         lines will be read if the total size (in bytes/characters) of all
@@ -561,7 +563,7 @@
     # a subclass doesn't implement either.)
 
     def read(self, n: int = -1) -> bytes:
-        """read(n: int) -> bytes.  Read and return up to n bytes.
+        """Read and return up to n bytes.
 
         Returns an empty bytes object on EOF, or None if the object is
         set not to block and has no data to read.
@@ -576,7 +578,7 @@
         return bytes(b)
 
     def readall(self):
-        """readall() -> bytes.  Read until EOF, using multiple read() calls."""
+        """Read until EOF, using multiple read() call."""
         res = bytearray()
         while True:
             data = self.read(DEFAULT_BUFFER_SIZE)
@@ -586,7 +588,7 @@
         return bytes(res)
 
     def readinto(self, b: bytearray) -> int:
-        """readinto(b: bytearray) -> int.  Read up to len(b) bytes into b.
+        """Read up to len(b) bytes into b.
 
         Returns number of bytes read (0 for EOF), or None if the object
         is set not to block as has no data to read.
@@ -594,7 +596,7 @@
         self._unsupported("readinto")
 
     def write(self, b: bytes) -> int:
-        """write(b: bytes) -> int.  Write the given buffer to the IO stream.
+        """Write the given buffer to the IO stream.
 
         Returns the number of bytes written, which may be less than len(b).
         """
@@ -642,7 +644,7 @@
     """
 
     def read(self, n: int = None) -> bytes:
-        """read(n: int = None) -> bytes.  Read and return up to n bytes.
+        """Read and return up to n bytes.
 
         If the argument is omitted, None, or negative, reads and
         returns all data until EOF.
@@ -662,7 +664,7 @@
         self._unsupported("read")
 
     def readinto(self, b: bytearray) -> int:
-        """readinto(b: bytearray) -> int.  Read up to len(b) bytes into b.
+        """Read up to len(b) bytes into b.
 
         Like read(), this may issue multiple reads to the underlying raw
         stream, unless the latter is 'interactive'.
@@ -685,9 +687,9 @@
         return n
 
     def write(self, b: bytes) -> int:
-        """write(b: bytes) -> int.  Write the given buffer to the IO stream.
+        """Write the given buffer to the IO stream.
 
-        Returns the number of bytes written, which is never less than
+        Return the number of bytes written, which is never less than
         len(b).
 
         Raises BlockingIOError if the buffer is full and the
@@ -775,7 +777,7 @@
         self._pos = 0
 
     def getvalue(self):
-        """getvalue() -> bytes Return the bytes value (contents) of the buffer
+        """Return the bytes value (contents) of the buffer
         """
         return bytes(self._buffer)
 
@@ -929,9 +931,7 @@
 
 class BufferedWriter(_BufferedIOMixin):
 
-    """BufferedWriter(raw[, buffer_size[, max_buffer_size]])
-
-    A buffer for a writeable sequential RawIO object.
+    """A buffer for a writeable sequential RawIO object.
 
     The constructor creates a BufferedWriter for the given writeable raw
     stream. If the buffer_size is not given, it defaults to
@@ -1069,9 +1069,7 @@
 
 class BufferedRandom(BufferedWriter, BufferedReader):
 
-    """BufferedRandom(raw[, buffer_size[, max_buffer_size]])
-
-    A buffered interface to random access streams.
+    """A buffered interface to random access streams.
 
     The constructor creates a reader and writer for a seekable stream,
     raw, given in the first argument. If the buffer_size is omitted it
@@ -1134,7 +1132,7 @@
     """
 
     def read(self, n: int = -1) -> str:
-        """read(n: int = -1) -> str.  Read at most n characters from stream.
+        """Read at most n characters from stream.
 
         Read from underlying buffer until we have n characters or we hit EOF.
         If n is negative or omitted, read until EOF.
@@ -1142,11 +1140,11 @@
         self._unsupported("read")
 
     def write(self, s: str) -> int:
-        """write(s: str) -> int.  Write string s to stream."""
+        """Write string s to stream."""
         self._unsupported("write")
 
     def truncate(self, pos: int = None) -> int:
-        """truncate(pos: int = None) -> int.  Truncate size to pos."""
+        """Truncate size to pos."""
         self.flush()
         if pos is None:
             pos = self.tell()
@@ -1154,7 +1152,7 @@
         return self.buffer.truncate()
 
     def readline(self) -> str:
-        """readline() -> str.  Read until newline or EOF.
+        """Read until newline or EOF.
 
         Returns an empty string if EOF is hit immediately.
         """
@@ -1167,8 +1165,7 @@
 
     @property
     def newlines(self):
-        """newlines -> None | str | tuple of str. Line endings translated
-        so far.
+        """Line endings translated so far.
 
         Only line endings translated during reading are considered.
 
@@ -1258,9 +1255,7 @@
 
 class TextIOWrapper(TextIOBase):
 
-    r"""TextIOWrapper(buffer[, encoding[, errors[, newline[, line_buffering]]]])
-
-    Character and line based layer over a BufferedIOBase object, buffer.
+    r"""Character and line based layer over a BufferedIOBase object, buffer.
 
     encoding gives the name of the encoding that the stream will be
     decoded or encoded with. It defaults to locale.getpreferredencoding.
@@ -1718,9 +1713,7 @@
         return self._decoder.newlines if self._decoder else None
 
 class StringIO(TextIOWrapper):
-    """StringIO([initial_value[, encoding, [errors, [newline]]]])
-
-    An in-memory stream for text. The initial_value argument sets the
+    """An in-memory stream for text. The initial_value argument sets the
     value of object. The other arguments are like those of TextIOWrapper's
     constructor.
     """
diff --git a/Lib/os.py b/Lib/os.py
index 82b4027..97334f8 100644
--- a/Lib/os.py
+++ b/Lib/os.py
@@ -251,8 +251,9 @@
 
     Example:
 
+    import os
     from os.path import join, getsize
-    for root, dirs, files in walk('python/Lib/email'):
+    for root, dirs, files in os.walk('python/Lib/email'):
         print root, "consumes",
         print sum([getsize(join(root, name)) for name in files]),
         print "bytes in", len(files), "non-directory files"
diff --git a/Lib/test/test_warnings.py b/Lib/test/test_warnings.py
index f8e760d..945dbb3 100644
--- a/Lib/test/test_warnings.py
+++ b/Lib/test/test_warnings.py
@@ -225,6 +225,8 @@
                 self.assertEqual(os.path.basename(w.filename), "test_warnings.py")
                 warning_tests.outer("spam6", stacklevel=2)
                 self.assertEqual(os.path.basename(w.filename), "warning_tests.py")
+                warning_tests.outer("spam6.5", stacklevel=3)
+                self.assertEqual(os.path.basename(w.filename), "test_warnings.py")
 
                 warning_tests.inner("spam7", stacklevel=9999)
                 self.assertEqual(os.path.basename(w.filename), "sys")
diff --git a/Lib/urllib2.py b/Lib/urllib2.py
index 465aa5e..f87d364 100644
--- a/Lib/urllib2.py
+++ b/Lib/urllib2.py
@@ -964,6 +964,8 @@
         return base
 
     def get_algorithm_impls(self, algorithm):
+        # algorithm should be case-insensitive according to RFC2617
+        algorithm = algorithm.upper()
         # lambdas assume digest modules are imported at the top level
         if algorithm == 'MD5':
             H = lambda x: hashlib.md5(x.encode("ascii")).hexdigest()
diff --git a/Python/_warnings.c b/Python/_warnings.c
index c84bd85..d03b452 100644
--- a/Python/_warnings.c
+++ b/Python/_warnings.c
@@ -415,10 +415,8 @@
 
     /* Setup globals and lineno. */
     PyFrameObject *f = PyThreadState_GET()->frame;
-    while (--stack_level > 0 && f != NULL) {
+    while (--stack_level > 0 && f != NULL)
         f = f->f_back;
-        --stack_level;
-    }
 
     if (f == NULL) {
         globals = PyThreadState_Get()->interp->sysdict;
