diff --git a/Lib/email/mime/nonmultipart.py b/Lib/email/mime/nonmultipart.py
index dd280b5..fc3b9eb 100644
--- a/Lib/email/mime/nonmultipart.py
+++ b/Lib/email/mime/nonmultipart.py
@@ -14,13 +14,9 @@
 class MIMENonMultipart(MIMEBase):
     """Base class for MIME multipart/* type messages."""
 
-    __pychecker__ = 'unusednames=payload'
-
     def attach(self, payload):
         # The public API prohibits attaching multiple subparts to MIMEBase
         # derived subtypes since none of them are, by definition, of content
         # type multipart/*
         raise errors.MultipartConversionError(
             'Cannot attach additional subparts to non-multipart/*')
-
-    del __pychecker__
diff --git a/Lib/pydoc.py b/Lib/pydoc.py
index 6475dec..fe439c2 100755
--- a/Lib/pydoc.py
+++ b/Lib/pydoc.py
@@ -54,6 +54,7 @@
 
 import sys, imp, os, re, inspect, builtins, pkgutil
 from reprlib import Repr
+from traceback import extract_tb as _extract_tb
 try:
     from collections import deque
 except ImportError:
@@ -292,9 +293,9 @@
         elif exc is SyntaxError:
             # A SyntaxError occurred before we could execute the module.
             raise ErrorDuringImport(value.filename, info)
-        elif exc is ImportError and \
-             str(value).lower().split()[:2] == ['no', 'module']:
-            # The module was not found.
+        elif exc is ImportError and _extract_tb(tb)[-1][2]=='safeimport':
+            # The import error occurred directly in this function,
+            # which means there is no such module in the path.
             return None
         else:
             # Some other error occurred during the importing process.
diff --git a/Lib/test/test_coding.py b/Lib/test/test_coding.py
index 51873b4..9d368c5 100644
--- a/Lib/test/test_coding.py
+++ b/Lib/test/test_coding.py
@@ -49,6 +49,18 @@
             unlink(TESTFN+".pyc")
             sys.path.pop(0)
 
+    def test_error_from_string(self):
+        # See http://bugs.python.org/issue6289
+        input = "# coding: ascii\n\N{SNOWMAN}".encode('utf-8')
+        try:
+            compile(input, "<string>", "exec")
+        except SyntaxError as e:
+            expected = "'ascii' codec can't decode byte 0xe2 in position 16: " \
+                "ordinal not in range(128)"
+            self.assertTrue(str(e).startswith(expected))
+        else:
+            self.fail("didn't raise")
+
 def test_main():
     test.support.run_unittest(CodingTest)
 
diff --git a/Lib/test/test_extcall.py b/Lib/test/test_extcall.py
index 7ed0e2e..f1fff0a 100644
--- a/Lib/test/test_extcall.py
+++ b/Lib/test/test_extcall.py
@@ -243,6 +243,24 @@
       ...
     TypeError: id() takes no keyword arguments
 
+A corner case of keyword dictionary items being deleted during
+the function call setup. See <http://bugs.python.org/issue2016>.
+
+    >>> class Name(str):
+    ...     def __eq__(self, other):
+    ...         try:
+    ...              del x[self]
+    ...         except KeyError:
+    ...              pass
+    ...         return str.__eq__(self, other)
+    ...     def __hash__(self):
+    ...         return str.__hash__(self)
+
+    >>> x = {Name("a"):1, Name("b"):2}
+    >>> def f(a, b):
+    ...     print(a,b)
+    >>> f(**x)
+    1 2
 """
 
 from test import support
diff --git a/Lib/test/test_pydoc.py b/Lib/test/test_pydoc.py
index 03b3539..00a2ada 100644
--- a/Lib/test/test_pydoc.py
+++ b/Lib/test/test_pydoc.py
@@ -1,5 +1,6 @@
 import sys
 import os
+import os.path
 import difflib
 import subprocess
 import re
@@ -7,6 +8,8 @@
 import inspect
 import unittest
 import test.support
+from contextlib import contextmanager
+from test.support import TESTFN, forget, rmtree, EnvironmentVarGuard
 
 from test import pydoc_mod
 
@@ -183,6 +186,9 @@
 # output pattern for missing module
 missing_pattern = "no Python documentation found for '%s'"
 
+# output pattern for module with bad imports
+badimport_pattern = "problem in %s - ImportError: No module named %s"
+
 def run_pydoc(module_name, *args):
     """
     Runs pydoc on the specified module. Returns the stripped
@@ -254,6 +260,42 @@
         self.assertEqual(expected, result,
             "documentation for missing module found")
 
+    def test_badimport(self):
+        # This tests the fix for issue 5230, where if pydoc found the module
+        # but the module had an internal import error pydoc would report no doc
+        # found.
+        modname = 'testmod_xyzzy'
+        testpairs = (
+            ('i_am_not_here', 'i_am_not_here'),
+            ('test.i_am_not_here_either', 'i_am_not_here_either'),
+            ('test.i_am_not_here.neither_am_i', 'i_am_not_here.neither_am_i'),
+            ('i_am_not_here.{}'.format(modname), 'i_am_not_here.{}'.format(modname)),
+            ('test.{}'.format(modname), modname),
+            )
+
+        @contextmanager
+        def newdirinpath(dir):
+            os.mkdir(dir)
+            sys.path.insert(0, dir)
+            yield
+            sys.path.pop(0)
+            rmtree(dir)
+
+        with newdirinpath(TESTFN), EnvironmentVarGuard() as env:
+            env['PYTHONPATH'] = TESTFN
+            fullmodname = os.path.join(TESTFN, modname)
+            sourcefn = fullmodname + os.extsep + "py"
+            for importstring, expectedinmsg in testpairs:
+                f = open(sourcefn, 'w')
+                f.write("import {}\n".format(importstring))
+                f.close()
+                try:
+                    result = run_pydoc(modname).decode("ascii")
+                finally:
+                    forget(modname)
+                expected = badimport_pattern % (modname, expectedinmsg)
+                self.assertEqual(expected, result)
+
     def test_input_strip(self):
         missing_module = " test.i_am_not_here "
         result = str(run_pydoc(missing_module), 'ascii')
diff --git a/Lib/xml/sax/expatreader.py b/Lib/xml/sax/expatreader.py
index 26b05c3..c9fc894 100644
--- a/Lib/xml/sax/expatreader.py
+++ b/Lib/xml/sax/expatreader.py
@@ -407,8 +407,8 @@
 # ---
 
 if __name__ == "__main__":
-    import xml.sax
+    import xml.sax.saxutils
     p = create_parser()
-    p.setContentHandler(xml.sax.XMLGenerator())
+    p.setContentHandler(xml.sax.saxutils.XMLGenerator())
     p.setErrorHandler(xml.sax.ErrorHandler())
-    p.parse("../../../hamlet.xml")
+    p.parse("http://www.ibiblio.org/xml/examples/shakespeare/hamlet.xml")
