diff --git a/Demo/scripts/README b/Demo/scripts/README
index 634160b..5b5e88d 100644
--- a/Demo/scripts/README
+++ b/Demo/scripts/README
@@ -29,6 +29,7 @@
 lll.py			Find and list symbolic links in current directory
 lpwatch.py		Watch BSD line printer queues
 markov.py		Markov chain simulation of words or characters
+mboxconvvert.py		Convert MH or MMDF mailboxes to unix mailbox format
 methfix.py		Fix old method syntax def f(self, (a1, ..., aN)):
 mkreal.py		Turn a symbolic link into a real file or directory
 mpzpi.py		test mpz -- print digits of pi (compare pi.py)
diff --git a/Demo/scripts/mboxconvert.py b/Demo/scripts/mboxconvert.py
new file mode 100755
index 0000000..5567173
--- /dev/null
+++ b/Demo/scripts/mboxconvert.py
@@ -0,0 +1,113 @@
+#! /usr/local/bin/python
+
+# Convert  MH directories (1 message per file) or MMDF mailboxes (4x^A
+# delimited) to unix mailbox (From ... delimited) on stdout.
+# If -f is given, files contain one message per file (e.g. MH messages)
+
+import rfc822
+import sys
+import time
+import os
+import stat
+import getopt
+import regex
+
+def main():
+	dofile = mmdf
+	try:
+		opts, args = getopt.getopt(sys.argv[1:], 'f')
+	except getopt.error, msg:
+		sys.stderr.write('%s\n' % msg)
+		sys.exit(2)
+	for o, a in opts:
+		if o == '-f':
+			dofile = message
+	if not args:
+		args = ['-']
+	sts = 0
+	for arg in args:
+		if arg == '-' or arg == '':
+			sts = dofile(sys.stdin) or sts
+		elif os.path.isdir(arg):
+			sts = mh(arg) or sts
+		elif os.path.isfile(arg):
+			try:
+				f = open(arg)
+			except IOError, msg:
+				sys.stderr.write('%s: %s\n' % (arg, msg))
+				sts = 1
+				continue
+			sts = dofile(f) or sts
+			f.close()
+		else:
+			sys.stderr('%s: not found\n' % arg)
+			sts = 1
+	if sts:
+		sys.exit(sts)
+
+numeric = regex.compile('[1-9][0-9]*')
+
+def mh(dir):
+	sts = 0
+	msgs = os.listdir(dir)
+	for msg in msgs:
+		if numeric.match(msg) != len(msg):
+			continue
+		fn = os.path.join(dir, msg)
+		try:
+			f = open(fn)
+		except IOError, msg:
+			sys.stderr.write('%s: %s\n' % (fn, msg))
+			sts = 1
+			continue
+		sts = message(f) or sts
+	return sts
+
+def mmdf(f):
+	sts = 0
+	while 1:
+		line = f.readline()
+		if not line:
+			break
+		if line == '\1\1\1\1\n':
+			sts = message(f, line) or sts
+		else:
+			sys.stderr.write(
+				'Bad line in MMFD mailbox: %s\n' % `line`)
+	return sts
+
+def message(f, delimiter = ''):
+	sts = 0
+	# Parse RFC822 header
+	m = rfc822.Message(f)
+	# Write unix header line
+	fullname, email = m.getaddr('From')
+	tt = m.getdate('Date')
+	if tt:
+		t = time.mktime(tt)
+	else:
+		sys.stderr.write(
+			'Unparseable date: %s\n' % `m.getheader('Date')`)
+		t = os.fstat(f.fileno())[stat.ST_MTIME]
+	print 'From', email, time.ctime(t)
+	# Copy RFC822 header
+	for line in m.headers:
+		print line,
+	print
+	# Copy body
+	while 1:
+		line = f.readline()
+		if line == delimiter:
+			break
+		if not line:
+			sys.stderr.write('Unexpected EOF in message\n')
+			sts = 1
+			break
+		if line[:5] == 'From ':
+			line = '>' + line
+		print line,
+	# Print trailing newline
+	print
+	return sts
+
+main()
