diff --git a/Lib/dos-8x3/formatte.py b/Lib/dos-8x3/formatte.py
index c192e20..79be0f6 100755
--- a/Lib/dos-8x3/formatte.py
+++ b/Lib/dos-8x3/formatte.py
@@ -10,7 +10,10 @@
 
 class NullFormatter:
 
-    def __init__(self, writer): pass
+    def __init__(self, writer=None):
+	if not writer:
+	    writer = NullWriter()
+	self.writer = writer
     def end_paragraph(self, blankline): pass
     def add_line_break(self): pass
     def add_hor_rule(self, abswidth=None, percentwidth=1.0,
diff --git a/Lib/dos-8x3/mimetool.py b/Lib/dos-8x3/mimetool.py
index baf9379..eadc11a 100755
--- a/Lib/dos-8x3/mimetool.py
+++ b/Lib/dos-8x3/mimetool.py
@@ -67,6 +67,14 @@
 				return rfc822.unquote(p[n:])
 		return None
 
+	def getparamnames(self):
+		result = []
+		for p in self.plist:
+			i = string.find(p, '=')
+			if i >= 0:
+				result.append(string.lower(p[:i]))
+		return result
+
 	def getencoding(self):
 		if self.encodingheader == None:
 			return '7bit'
diff --git a/Lib/dos-8x3/para.py b/Lib/dos-8x3/para.py
index c9b3bdd..709b575 100755
--- a/Lib/dos-8x3/para.py
+++ b/Lib/dos-8x3/para.py
@@ -64,11 +64,11 @@
 		for i in range(len(self.words)):
 			word = self.words[i]
 			if type(word) == Int: continue
-			fo, te, wi, sp, st, as, de = word
-			self.words[i] = fo, te, wi, sp, 0, as, de
+			(fo, te, wi, sp, st, as, de) = word
+			self.words[i] = (fo, te, wi, sp, 0, as, de)
 			total = total + wi + sp
 		if total < tab:
-			self.words.append(None, '', 0, tab-total, 0, as, de)
+			self.words.append((None, '', 0, tab-total, 0, as, de))
 	#
 	# Make a hanging tag: tab to hang, increment indent_left by hang,
 	# and reset indent_hang to -hang
diff --git a/Lib/dos-8x3/test_str.py b/Lib/dos-8x3/test_str.py
index 5b2ddfb..6028b0d 100644
--- a/Lib/dos-8x3/test_str.py
+++ b/Lib/dos-8x3/test_str.py
@@ -6,7 +6,6 @@
 	value = f(input)
     except:
 	 value = sys.exc_type
-	 print sys.exc_value
     if value != output:
 	print f, `input`, `output`, `value`
 
diff --git a/Lib/dos-8x3/tracebac.py b/Lib/dos-8x3/tracebac.py
index 9823100..7488f15 100755
--- a/Lib/dos-8x3/tracebac.py
+++ b/Lib/dos-8x3/tracebac.py
@@ -66,7 +66,7 @@
 		line = linecache.getline(filename, lineno)
 		if line: line = string.strip(line)
 		else: line = None
-		list.append(filename, lineno, name, line)
+		list.append((filename, lineno, name, line))
 		tb = tb.tb_next
 		n = n+1
 	return list
@@ -176,7 +176,7 @@
 		line = linecache.getline(filename, lineno)
 		if line: line = string.strip(line)
 		else: line = None
-		list.append(filename, lineno, name, line)
+		list.append((filename, lineno, name, line))
 		f = f.f_back
 		n = n+1
 	list.reverse()
diff --git a/Lib/dos_8x3/formatte.py b/Lib/dos_8x3/formatte.py
index c192e20..79be0f6 100755
--- a/Lib/dos_8x3/formatte.py
+++ b/Lib/dos_8x3/formatte.py
@@ -10,7 +10,10 @@
 
 class NullFormatter:
 
-    def __init__(self, writer): pass
+    def __init__(self, writer=None):
+	if not writer:
+	    writer = NullWriter()
+	self.writer = writer
     def end_paragraph(self, blankline): pass
     def add_line_break(self): pass
     def add_hor_rule(self, abswidth=None, percentwidth=1.0,
diff --git a/Lib/dos_8x3/mimetool.py b/Lib/dos_8x3/mimetool.py
index baf9379..eadc11a 100755
--- a/Lib/dos_8x3/mimetool.py
+++ b/Lib/dos_8x3/mimetool.py
@@ -67,6 +67,14 @@
 				return rfc822.unquote(p[n:])
 		return None
 
+	def getparamnames(self):
+		result = []
+		for p in self.plist:
+			i = string.find(p, '=')
+			if i >= 0:
+				result.append(string.lower(p[:i]))
+		return result
+
 	def getencoding(self):
 		if self.encodingheader == None:
 			return '7bit'
diff --git a/Lib/dos_8x3/para.py b/Lib/dos_8x3/para.py
index c9b3bdd..709b575 100755
--- a/Lib/dos_8x3/para.py
+++ b/Lib/dos_8x3/para.py
@@ -64,11 +64,11 @@
 		for i in range(len(self.words)):
 			word = self.words[i]
 			if type(word) == Int: continue
-			fo, te, wi, sp, st, as, de = word
-			self.words[i] = fo, te, wi, sp, 0, as, de
+			(fo, te, wi, sp, st, as, de) = word
+			self.words[i] = (fo, te, wi, sp, 0, as, de)
 			total = total + wi + sp
 		if total < tab:
-			self.words.append(None, '', 0, tab-total, 0, as, de)
+			self.words.append((None, '', 0, tab-total, 0, as, de))
 	#
 	# Make a hanging tag: tab to hang, increment indent_left by hang,
 	# and reset indent_hang to -hang
diff --git a/Lib/dos_8x3/test_str.py b/Lib/dos_8x3/test_str.py
index 5b2ddfb..6028b0d 100644
--- a/Lib/dos_8x3/test_str.py
+++ b/Lib/dos_8x3/test_str.py
@@ -6,7 +6,6 @@
 	value = f(input)
     except:
 	 value = sys.exc_type
-	 print sys.exc_value
     if value != output:
 	print f, `input`, `output`, `value`
 
diff --git a/Lib/dos_8x3/tracebac.py b/Lib/dos_8x3/tracebac.py
index 9823100..7488f15 100755
--- a/Lib/dos_8x3/tracebac.py
+++ b/Lib/dos_8x3/tracebac.py
@@ -66,7 +66,7 @@
 		line = linecache.getline(filename, lineno)
 		if line: line = string.strip(line)
 		else: line = None
-		list.append(filename, lineno, name, line)
+		list.append((filename, lineno, name, line))
 		tb = tb.tb_next
 		n = n+1
 	return list
@@ -176,7 +176,7 @@
 		line = linecache.getline(filename, lineno)
 		if line: line = string.strip(line)
 		else: line = None
-		list.append(filename, lineno, name, line)
+		list.append((filename, lineno, name, line))
 		f = f.f_back
 		n = n+1
 	list.reverse()
