diff --git a/Lib/distutils/text_file.py b/Lib/distutils/text_file.py
index 7b29ef4..f22b3e9 100644
--- a/Lib/distutils/text_file.py
+++ b/Lib/distutils/text_file.py
@@ -9,18 +9,18 @@
 __revision__ = "$Id$"
 
 from types import *
-import sys, os, string, re
+import sys, os, string
 
 
 class TextFile:
 
     """Provides a file-like object that takes care of all the things you
        commonly want to do when processing a text file that has some
-       line-by-line syntax: strip comments (as long as "#" is your comment
-       character), skip blank lines, join adjacent lines by escaping the
-       newline (ie. backslash at end of line), strip leading and/or
-       trailing whitespace, and collapse internal whitespace.  All of these
-       are optional and independently controllable.
+       line-by-line syntax: strip comments (as long as "#" is your
+       comment character), skip blank lines, join adjacent lines by
+       escaping the newline (ie. backslash at end of line), strip
+       leading and/or trailing whitespace.  All of these are optional
+       and independently controllable.
 
        Provides a 'warn()' method so you can generate warning messages that
        report physical line number, even if the logical line in question
@@ -50,7 +50,7 @@
            each line before returning it
          skip_blanks [default: true}
            skip lines that are empty *after* stripping comments and
-           whitespace.  (If both lstrip_ws and rstrip_ws are true,
+           whitespace.  (If both lstrip_ws and rstrip_ws are false,
            then some lines may consist of solely whitespace: these will
            *not* be skipped, even if 'skip_blanks' is true.)
          join_lines [default: false]
@@ -59,12 +59,9 @@
            to it to form one "logical line"; if N consecutive lines end
            with a backslash, then N+1 physical lines will be joined to
            form one logical line.
-         collapse_ws [default: false]  
-           after stripping comments and whitespace and joining physical
-           lines into logical lines, all internal whitespace (strings of
-           whitespace surrounded by non-whitespace characters, and not at
-           the beginning or end of the logical line) will be collapsed
-           to a single space.
+         collapse_join [default: false]
+           strip leading whitespace from lines that are joined to their
+           predecessor; only matters if (join_lines and not lstrip_ws)
 
        Note that since 'rstrip_ws' can strip the trailing newline, the
        semantics of 'readline()' must differ from those of the builtin file
@@ -75,10 +72,10 @@
 
     default_options = { 'strip_comments': 1,
                         'skip_blanks':    1,
-                        'join_lines':     0,
                         'lstrip_ws':      0,
                         'rstrip_ws':      1,
-                        'collapse_ws':    0,
+                        'join_lines':     0,
+                        'collapse_join':  0,
                       }
 
     def __init__ (self, filename=None, file=None, **options):
@@ -219,6 +216,8 @@
                                "end-of-file")
                     return buildup_line
 
+                if self.collapse_join:
+                    line = string.lstrip (line)
                 line = buildup_line + line
 
                 # careful: pay attention to line number when incrementing it
@@ -261,10 +260,6 @@
                     buildup_line = line[0:-2] + '\n'
                     continue
 
-            # collapse internal whitespace (*after* joining lines!)
-            if self.collapse_ws:
-                line = re.sub (r'(\S)\s+(\S)', r'\1 \2', line)            
-
             # well, I guess there's some actual content there: return it
             return line
 
@@ -295,7 +290,7 @@
     test_data = """# test file
 
 line 3 \\
-continues on next line
+  continues on next line
 """
 
 
@@ -303,16 +298,21 @@
     result1 = map (lambda x: x + "\n", string.split (test_data, "\n")[0:-1])
 
     # result 2: just strip comments
-    result2 = ["\n", "\n", "line 3 \\\n", "continues on next line\n"]
+    result2 = ["\n", "\n", "line 3 \\\n", "  continues on next line\n"]
 
     # result 3: just strip blank lines
-    result3 = ["# test file\n", "line 3 \\\n", "continues on next line\n"]
+    result3 = ["# test file\n", "line 3 \\\n", "  continues on next line\n"]
 
     # result 4: default, strip comments, blank lines, and trailing whitespace
-    result4 = ["line 3 \\", "continues on next line"]
+    result4 = ["line 3 \\", "  continues on next line"]
 
-    # result 5: full processing, strip comments and blanks, plus join lines
-    result5 = ["line 3 continues on next line"]
+    # result 5: strip comments and blanks, plus join lines (but don't
+    # "collapse" joined lines
+    result5 = ["line 3   continues on next line"]
+
+    # result 6: strip comments and blanks, plus join lines (and
+    # "collapse" joined lines
+    result6 = ["line 3 continues on next line"]
 
     def test_input (count, description, file, expected_result):
         result = file.readlines ()
@@ -349,7 +349,11 @@
 
     in_file = TextFile (filename, strip_comments=1, skip_blanks=1,
                         join_lines=1, rstrip_ws=1)
-    test_input (5, "full processing", in_file, result5)
+    test_input (5, "join lines without collapsing", in_file, result5)
+
+    in_file = TextFile (filename, strip_comments=1, skip_blanks=1,
+                        join_lines=1, rstrip_ws=1, collapse_join=1)
+    test_input (6, "join lines with collapsing", in_file, result6)
 
     os.remove (filename)
     
