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()
