diff --git a/Lib/dos-8x3/exceptio.py b/Lib/dos-8x3/exceptio.py
index 12da416..2963c04 100644
--- a/Lib/dos-8x3/exceptio.py
+++ b/Lib/dos-8x3/exceptio.py
@@ -60,6 +60,7 @@
 """
 
 class Exception:
+    """Proposed base class for all exceptions."""
     def __init__(self, *args):
         self.args = args
 
@@ -75,9 +76,11 @@
         return self.args[i]
 
 class StandardError(Exception):
+    """Base class for all standard Python exceptions."""
     pass
 
 class SyntaxError(StandardError):
+    """Invalid syntax."""
     filename = lineno = offset = text = None
     msg = ""
     def __init__(self, *args):
@@ -94,8 +97,7 @@
         return str(self.msg)
 
 class EnvironmentError(StandardError):
-    """Base class for exceptions that occur outside the Python system.
-    Primarily used as a base class for OSError and IOError."""
+    """Base class for I/O related errors."""
     def __init__(self, *args):
         self.args = args
         self.errno = None
@@ -126,70 +128,94 @@
             return StandardError.__str__(self)
 
 class IOError(EnvironmentError):
+    """I/O operation failed."""
     pass
 
 class OSError(EnvironmentError):
-    """Used by the posix module."""
+    """OS system call failed."""
     pass
 
 class RuntimeError(StandardError):
+    """Unspecified run-time error."""
     pass
 
 class NotImplementedError(RuntimeError):
+    """Method or function hasn't been implemented yet."""
     pass
 
 class SystemError(StandardError):
+    """Internal error in the Python interpreter.
+
+    Please report this to the Python maintainer, along with the traceback,
+    the Python version, and the hardware/OS platform and version."""
     pass
 
 class EOFError(StandardError):
+    """Read beyond end of file."""
     pass
 
 class ImportError(StandardError):
+    """Import can't find module, or can't find name in module."""
     pass
 
 class TypeError(StandardError):
+    """Inappropriate argument type."""
     pass
 
 class ValueError(StandardError):
+    """Inappropriate argument value (of correct type)."""
     pass
 
 class KeyboardInterrupt(StandardError):
+    """Program interrupted by user."""
     pass
 
 class AssertionError(StandardError):
+    """Assertion failed."""
     pass
 
 class ArithmeticError(StandardError):
+    """Base class for arithmetic errors."""
     pass
 
 class OverflowError(ArithmeticError):
+    """Result too large to be represented."""
     pass
 
 class FloatingPointError(ArithmeticError):
+    """Floating point operation failed."""
     pass
 
 class ZeroDivisionError(ArithmeticError):
+    """Second argument to a division or modulo operation was zero."""
     pass
 
 class LookupError(StandardError):
+    """Base class for lookup errors."""
     pass
 
 class IndexError(LookupError):
+    """Sequence index out of range."""
     pass
 
 class KeyError(LookupError):
+    """Mapping key not found."""
     pass
 
 class AttributeError(StandardError):
+    """Attribute not found."""
     pass
 
 class NameError(StandardError):
+    """Name not found locally or globally."""
     pass
 
 class MemoryError(StandardError):
+    """Out of memory."""
     pass
 
 class SystemExit(Exception):
+    """Request to exit from the interpreter."""
     def __init__(self, *args):
         self.args = args
         if len(args) == 0:
diff --git a/Lib/dos-8x3/formatte.py b/Lib/dos-8x3/formatte.py
index a3e82a4..4b340d5 100755
--- a/Lib/dos-8x3/formatte.py
+++ b/Lib/dos-8x3/formatte.py
@@ -331,7 +331,7 @@
         self.atbreak = 0
 
     def send_paragraph(self, blankline):
-        self.file.write('\n' + '\n'*blankline)
+        self.file.write('\n'*blankline)
         self.col = 0
         self.atbreak = 0
 
diff --git a/Lib/dos-8x3/telnetli.py b/Lib/dos-8x3/telnetli.py
index 8cf372e..efb2b40 100644
--- a/Lib/dos-8x3/telnetli.py
+++ b/Lib/dos-8x3/telnetli.py
@@ -376,6 +376,9 @@
 
     def interact(self):
         """Interaction function, emulates a very dumb telnet client."""
+        if sys.platform == "win32":
+            self.mt_interact()
+            return
         while 1:
             rfd, wfd, xfd = select.select([self, sys.stdin], [], [])
             if self in rfd:
@@ -393,6 +396,29 @@
                     break
                 self.write(line)
 
+    def mt_interact(self):
+        """Multithreaded version of interact()."""
+        import thread
+        thread.start_new_thread(self.listener, ())
+        while 1:
+            line = sys.stdin.readline()
+            if not line:
+                break
+            self.write(line)
+
+    def listener(self):
+        """Helper for mt_interact() -- this executes in the other thread."""
+        while 1:
+            try:
+                data = self.read_eager()
+            except EOFError:
+                print '*** Connection closed by remote host ***'
+                return
+            if data:
+                sys.stdout.write(data)
+            else:
+                sys.stdout.flush()
+
     def expect(self, list, timeout=None):
         """Read until one from a list of a regular expressions matches.
 
diff --git a/Lib/dos-8x3/test_rfc.py b/Lib/dos-8x3/test_rfc.py
new file mode 100644
index 0000000..b8ae8c7
--- /dev/null
+++ b/Lib/dos-8x3/test_rfc.py
@@ -0,0 +1,82 @@
+from test_support import verbose
+import rfc822, sys
+try:
+    from cStringIO import StringIO
+except ImportError:
+    from StringIO import StringIO
+
+def test(msg, results):
+    fp = StringIO()
+    fp.write(msg)
+    fp.seek(0)
+    m = rfc822.Message(fp)
+    i = 0
+    for n, a in m.getaddrlist('to') + m.getaddrlist('cc'):
+        if verbose:
+            print 'name:', repr(n), 'addr:', repr(a)
+        try:
+            mn, ma = results[i][0], results[i][1]
+        except IndexError:
+            print 'extra parsed address:', repr(n), repr(a)
+            continue
+        i = i + 1
+        if mn == n and ma == a:
+            if verbose:
+                print '    [matched]'
+        else:
+            if verbose:
+                print '    [no match]'
+            print 'not found:', repr(n), repr(a)
+
+test('''Date:    Wed, 13 Jan 1999 23:57:35 -0500
+From:    Guido van Rossum <guido@CNRI.Reston.VA.US>
+To:      "Guido van
+	 : Rossum" <guido@python.org>
+Subject: test2
+
+test2
+''', [('Guido van\n	 : Rossum', 'guido@python.org')])
+
+test('''From: Barry <bwarsaw@python.org
+To: guido@python.org (Guido: the Barbarian)
+Subject: nonsense
+
+test''', [('Guido: the Barbarian', 'guido@python.org'),
+          ])
+
+test('''From: Barry <bwarsaw@python.org
+To: guido@python.org (Guido: the Barbarian)
+Cc: "Guido: the Madman" <guido@python.org>
+
+test''', [('Guido: the Barbarian', 'guido@python.org'),
+          ('Guido: the Madman', 'guido@python.org')
+          ])
+
+test('''To: "The monster with
+     the very long name: Guido" <guido@python.org>
+
+test''', [('The monster with\n     the very long name: Guido',
+           'guido@python.org')])
+
+test('''To: "Amit J. Patel" <amitp@Theory.Stanford.EDU>
+CC: Mike Fletcher <mfletch@vrtelecom.com>,
+        "'string-sig@python.org'" <string-sig@python.org>
+Cc: fooz@bat.com, bart@toof.com
+Cc: goit@lip.com
+
+test''', [('Amit J. Patel', 'amitp@Theory.Stanford.EDU'),
+          ('Mike Fletcher', 'mfletch@vrtelecom.com'),
+          ("'string-sig@python.org'", 'string-sig@python.org'),
+          ('', 'fooz@bat.com'),
+          ('', 'bart@toof.com'),
+          ('', 'goit@lip.com'),
+          ])
+
+# This one is just twisted.  I don't know what the proper result should be,
+# but it shouldn't be to infloop, which is what used to happen!
+test('''To: <[smtp:dd47@mail.xxx.edu]_at_hmhq@hdq-mdm1-imgout.companay.com>
+
+test''', [('', ''),
+          ('', 'dd47@mail.xxx.edu'),
+          ('', '_at_hmhq@hdq-mdm1-imgout.companay.com')
+          ])
diff --git a/Lib/dos-8x3/userlist.py b/Lib/dos-8x3/userlist.py
index 1d5065f..93e4a7e 100755
--- a/Lib/dos-8x3/userlist.py
+++ b/Lib/dos-8x3/userlist.py
@@ -49,3 +49,4 @@
 	def index(self, item): return self.data.index(item)
 	def reverse(self): self.data.reverse()
 	def sort(self, *args): apply(self.data.sort, args)
+	def extend(self, list): self.data.extend(list)
