diff --git a/Lib/cgitb.py b/Lib/cgitb.py
index b005511..ad56df2 100644
--- a/Lib/cgitb.py
+++ b/Lib/cgitb.py
@@ -19,13 +19,19 @@
 for you, call cgitb.handler().  The optional argument to handler() is a
 3-item tuple (etype, evalue, etb) just like the value of sys.exc_info().
 The default handler displays output as HTML.
+
 """
-
-__author__ = 'Ka-Ping Yee'
-
-__version__ = '$Revision$'
-
+import inspect
+import keyword
+import linecache
+import os
+import pydoc
 import sys
+import tempfile
+import time
+import tokenize
+import traceback
+import types
 
 def reset():
     """Return a string that resets the CGI and browser to a known state."""
@@ -74,7 +80,6 @@
 
 def scanvars(reader, frame, locals):
     """Scan one logical line of Python and look up values of variables used."""
-    import tokenize, keyword
     vars, lasttoken, parent, prefix, value = [], None, None, '', __UNDEF__
     for ttype, token, start, end, line in tokenize.generate_tokens(reader):
         if ttype == tokenize.NEWLINE: break
@@ -96,8 +101,6 @@
 
 def html(einfo, context=5):
     """Return a nice HTML document describing a given traceback."""
-    import os, time, traceback, linecache, inspect, pydoc
-
     etype, evalue, etb = einfo
     if isinstance(etype, type):
         etype = etype.__name__
@@ -173,7 +176,6 @@
         value = pydoc.html.repr(getattr(evalue, name))
         exception.append('\n<br>%s%s&nbsp;=\n%s' % (indent, name, value))
 
-    import traceback
     return head + ''.join(frames) + ''.join(exception) + '''
 
 
@@ -188,8 +190,6 @@
 
 def text(einfo, context=5):
     """Return a plain text document describing a given traceback."""
-    import os, time, traceback, linecache, inspect, pydoc
-
     etype, evalue, etb = einfo
     if isinstance(etype, type):
         etype = etype.__name__
@@ -245,7 +245,6 @@
         value = pydoc.text.repr(getattr(evalue, name))
         exception.append('\n%s%s = %s' % (" "*4, name, value))
 
-    import traceback
     return head + ''.join(frames) + ''.join(exception) + '''
 
 The above is a description of an error in a Python program.  Here is
@@ -278,7 +277,6 @@
         try:
             doc = formatter(info, self.context)
         except:                         # just in case something goes wrong
-            import traceback
             doc = ''.join(traceback.format_exception(*info))
             plain = True
 
@@ -292,7 +290,6 @@
             self.file.write('<p>A problem occurred in a Python script.\n')
 
         if self.logdir is not None:
-            import os, tempfile
             suffix = ['.txt', '.html'][self.format=="html"]
             (fd, path) = tempfile.mkstemp(suffix=suffix, dir=self.logdir)
             try:
diff --git a/Misc/NEWS b/Misc/NEWS
index 4a90ba5..524a79c 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -286,6 +286,10 @@
 Library
 -------
 
+- Issue #1665206 (partially): Move imports in cgitb to the top of the module
+  instead of performing them in functions. Helps prevent import deadlocking in
+  threads.
+
 - Issue #2522: locale.format now checks its first argument to ensure it has
   been passed only one pattern, avoiding mysterious errors where it appeared
   that it was failing to do localization.
