diff --git a/Lib/email/Utils.py b/Lib/email/Utils.py
index a409e16..3a4bbc8 100644
--- a/Lib/email/Utils.py
+++ b/Lib/email/Utils.py
@@ -1,17 +1,16 @@
-# Copyright (C) 2001,2002 Python Software Foundation
-# Author: barry@zope.com (Barry Warsaw)
+# Copyright (C) 2001-2004 Python Software Foundation
+# Author: barry@python.org (Barry Warsaw)
 
-"""Miscellaneous utilities.
-"""
+"""Miscellaneous utilities."""
 
-import time
-import socket
-import re
-import random
 import os
+import re
+import time
+import base64
+import random
+import socket
 import warnings
 from cStringIO import StringIO
-from types import ListType
 
 from email._parseaddr import quote
 from email._parseaddr import AddressList as _AddressList
@@ -21,30 +20,7 @@
 from email._parseaddr import parsedate as _parsedate
 from email._parseaddr import parsedate_tz as _parsedate_tz
 
-try:
-    True, False
-except NameError:
-    True = 1
-    False = 0
-
-try:
-    from quopri import decodestring as _qdecode
-except ImportError:
-    # Python 2.1 doesn't have quopri.decodestring()
-    def _qdecode(s):
-        import quopri as _quopri
-
-        if not s:
-            return s
-        infp = StringIO(s)
-        outfp = StringIO()
-        _quopri.decode(infp, outfp)
-        value = outfp.getvalue()
-        if not s.endswith('\n') and value.endswith('\n'):
-            return value[:-1]
-        return value
-
-import base64
+from quopri import decodestring as _qdecode
 
 # Intrapackage imports
 from email.Encoders import _bencode, _qencode
@@ -140,7 +116,7 @@
     # Intra-package import here to avoid circular import problems.
     from email.Header import decode_header
     L = decode_header(s)
-    if not isinstance(L, ListType):
+    if not isinstance(L, list):
         # s wasn't decoded
         return s
 
diff --git a/Lib/email/__init__.py b/Lib/email/__init__.py
index e45dadc..74b9b73 100644
--- a/Lib/email/__init__.py
+++ b/Lib/email/__init__.py
@@ -1,10 +1,9 @@
-# Copyright (C) 2001,2002 Python Software Foundation
-# Author: barry@zope.com (Barry Warsaw)
+# Copyright (C) 2001-2004 Python Software Foundation
+# Author: barry@python.org (Barry Warsaw)
 
-"""A package for parsing, handling, and generating email messages.
-"""
+"""A package for parsing, handling, and generating email messages."""
 
-__version__ = '2.5.5'
+__version__ = '3.0a0'
 
 __all__ = [
     'base64MIME',
@@ -29,12 +28,6 @@
     'message_from_file',
     ]
 
-try:
-    True, False
-except NameError:
-    True = 1
-    False = 0
-
 
 
 # Some convenience routines.  Don't import Parser and Message as side-effects
@@ -51,6 +44,7 @@
         _class = Message
     return Parser(_class, strict=strict).parsestr(s)
 
+
 def message_from_file(fp, _class=None, strict=False):
     """Read a file and parse its contents into a Message object model.
 
@@ -61,12 +55,3 @@
         from email.Message import Message
         _class = Message
     return Parser(_class, strict=strict).parse(fp)
-
-
-
-# Patch encodings.aliases to recognize 'ansi_x3.4_1968' which isn't a standard
-# alias in Python 2.1.3, but is used by the email package test suite.
-from encodings.aliases import aliases # The aliases dictionary
-if not aliases.has_key('ansi_x3.4_1968'):
-    aliases['ansi_x3.4_1968'] = 'ascii'
-del aliases # Not needed any more
diff --git a/Lib/email/_parseaddr.py b/Lib/email/_parseaddr.py
index 5cb75e6..167eb3f 100644
--- a/Lib/email/_parseaddr.py
+++ b/Lib/email/_parseaddr.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002 Python Software Foundation
+# Copyright (C) 2002-2004 Python Software Foundation
 
 """Email address parsing code.
 
@@ -6,13 +6,6 @@
 """
 
 import time
-from types import TupleType
-
-try:
-    True, False
-except NameError:
-    True = 1
-    False = 0
 
 SPACE = ' '
 EMPTYSTRING = ''
@@ -130,7 +123,7 @@
 def parsedate(data):
     """Convert a time string to a time tuple."""
     t = parsedate_tz(data)
-    if isinstance(t, TupleType):
+    if isinstance(t, tuple):
         return t[:9]
     else:
         return t
diff --git a/Lib/email/base64MIME.py b/Lib/email/base64MIME.py
index a247773..af85949 100644
--- a/Lib/email/base64MIME.py
+++ b/Lib/email/base64MIME.py
@@ -27,13 +27,6 @@
 from binascii import b2a_base64, a2b_base64
 from email.Utils import fix_eols
 
-try:
-    from email._compat22 import _floordiv
-except SyntaxError:
-    # Python 2.1 spells integer division differently
-    from email._compat21 import _floordiv
-
-
 CRLF = '\r\n'
 NL = '\n'
 EMPTYSTRING = ''
@@ -41,12 +34,6 @@
 # See also Charset.py
 MISC_LEN = 7
 
-try:
-    True, False
-except NameError:
-    True = 1
-    False = 0
-
 
 
 # Helpers
@@ -100,7 +87,7 @@
     # length, after the RFC chrome is added in.
     base64ed = []
     max_encoded = maxlinelen - len(charset) - MISC_LEN
-    max_unencoded = _floordiv(max_encoded * 3, 4)
+    max_unencoded = max_encoded * 3 // 4
 
     for i in range(0, len(header), max_unencoded):
         base64ed.append(b2a_base64(header[i:i+max_unencoded]))
@@ -141,7 +128,7 @@
         s = fix_eols(s)
 
     encvec = []
-    max_unencoded = _floordiv(maxlinelen * 3, 4)
+    max_unencoded = maxlinelen * 3 // 4
     for i in range(0, len(s), max_unencoded):
         # BAW: should encode() inherit b2a_base64()'s dubious behavior in
         # adding a newline to the encoded string?
diff --git a/Lib/email/quopriMIME.py b/Lib/email/quopriMIME.py
index 67369b5..2802bc2 100644
--- a/Lib/email/quopriMIME.py
+++ b/Lib/email/quopriMIME.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2001,2002 Python Software Foundation
+# Copyright (C) 2001-2004 Python Software Foundation
 # Author: che@debian.org (Ben Gertzfield)
 
 """Quoted-printable content transfer encoding per RFCs 2045-2047.
@@ -38,12 +38,6 @@
 hqre = re.compile(r'[^-a-zA-Z0-9!*+/ ]')
 bqre = re.compile(r'[^ !-<>-~\t]')
 
-try:
-    True, False
-except NameError:
-    True = 1
-    False = 0
-
 
 
 # Helpers
