diff --git a/Lib/email/Iterators.py b/Lib/email/Iterators.py
index 3ecd632..2572c20 100644
--- a/Lib/email/Iterators.py
+++ b/Lib/email/Iterators.py
@@ -1,25 +1,67 @@
-# Copyright (C) 2001,2002 Python Software Foundation
-# Author: barry@zope.com (Barry Warsaw)
+# Copyright (C) 2001-2004 Python Software Foundation
+# Author: Barry Warsaw <barry@python.org>
 
 """Various types of useful iterators and generators.
 """
 
 import sys
-
-try:
-    from email._compat22 import body_line_iterator, typed_subpart_iterator
-except SyntaxError:
-    # Python 2.1 doesn't have generators
-    from email._compat21 import body_line_iterator, typed_subpart_iterator
+from cStringIO import StringIO
 
 
 
-def _structure(msg, fp=None, level=0):
+# This function will become a method of the Message class
+def walk(self):
+    """Walk over the message tree, yielding each subpart.
+
+    The walk is performed in depth-first order.  This method is a
+    generator.
+    """
+    yield self
+    if self.is_multipart():
+        for subpart in self.get_payload():
+            for subsubpart in subpart.walk():
+                yield subsubpart
+
+
+
+# These two functions are imported into the Iterators.py interface module.
+# The Python 2.2 version uses generators for efficiency.
+def body_line_iterator(msg, decode=False):
+    """Iterate over the parts, returning string payloads line-by-line.
+
+    Optional decode (default False) is passed through to .get_payload().
+    """
+    for subpart in msg.walk():
+        payload = subpart.get_payload(decode=decode)
+        if isinstance(payload, basestring):
+            for line in StringIO(payload):
+                yield line
+
+
+def typed_subpart_iterator(msg, maintype='text', subtype=None):
+    """Iterate over the subparts with a given MIME type.
+
+    Use `maintype' as the main MIME type to match against; this defaults to
+    "text".  Optional `subtype' is the MIME subtype to match against; if
+    omitted, only the main type is matched.
+    """
+    for subpart in msg.walk():
+        if subpart.get_content_maintype() == maintype:
+            if subtype is None or subpart.get_content_subtype() == subtype:
+                yield subpart
+
+
+
+def _structure(msg, fp=None, level=0, include_default=False):
     """A handy debugging aid"""
     if fp is None:
         fp = sys.stdout
     tab = ' ' * (level * 4)
-    print >> fp, tab + msg.get_content_type()
+    print >> fp, tab + msg.get_content_type(),
+    if include_default:
+        print '[%s]' % msg.get_default_type()
+    else:
+        print
     if msg.is_multipart():
         for subpart in msg.get_payload():
-            _structure(subpart, fp, level+1)
+            _structure(subpart, fp, level+1, include_default)
