diff --git a/CHANGELOG.md b/CHANGELOG.md
index b1f9d43..cbbdd6c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,5 @@
 ## Changes in 0.12:
+- Bug: archiver.py: convertToWrapped expects bytes (#462)
 - Bug: convertToWrapped expects a bytestring (#518)
 - Bug: don't add archived-at header to parsed message (#521)
 - Enh: Be more lenient when parsing List-Id headers (#511)
diff --git a/tools/archiver.py b/tools/archiver.py
index fa7d49a..f0e157e 100755
--- a/tools/archiver.py
+++ b/tools/archiver.py
@@ -187,7 +187,7 @@
             **kwargs
         )
 
-    def __init__(self, generator=None, parse_html=False, ignore_body=None, dump_dir=None, verbose=False):
+    def __init__(self, generator=None, parse_html=False, ignore_body=None, dump_dir=None, verbose=False, skipff=False):
 
         self.html = parse_html
         # Fall back to medium generator if nothing is set.
@@ -196,6 +196,7 @@
         self.verbose = verbose
         self.ignore_body = ignore_body
         self.dump_dir = dump_dir
+        self.skipff = skipff
 
         if parse_html:
             import html2text
@@ -355,7 +356,7 @@
         body = self.msgbody(msg)
         saved_body = None # for format=flowed
         try:
-            if 'content-type' in msg_metadata and msg_metadata['content-type'].find("flowed") != -1:
+            if not self.skipff and 'content-type' in msg_metadata and msg_metadata['content-type'].find("flowed") != -1:
                 saved_body = body # so we can redo it properly later
                 # N.B. the convertToWrapped call usually fails, because body is a generally a string here
                 # However sometimes body is bytes at this point in which case it works
@@ -644,6 +645,10 @@
                             'fail silently.')
     parser.add_argument('--generator', dest='generator',
                        help='Override the generator.')
+    parser.add_argument('--generator', dest='generator',
+                       help='Override the generator.')
+    parser.add_argument('--skipff', dest = 'skipff', action='store_true',
+                       help = 'Skip format=flowed processing (mainly for unit-testing)')
     args = parser.parse_args()
 
     if args.verbose:
diff --git a/tools/import-mbox.py b/tools/import-mbox.py
index 7bc3a4c..f2ea52c 100755
--- a/tools/import-mbox.py
+++ b/tools/import-mbox.py
@@ -123,7 +123,8 @@
 
         archie = archiver.Archiver(generator=args.generator, parse_html=args.html2text,
                                    ignore_body=args.ibody[0] if args.ibody else None,
-                                   verbose=args.verbose)            
+                                   verbose=args.verbose,
+                                   skipff=args.skipff)            
  
         while len(lists) > 0:
             self.printid("%u elements left to slurp" % len(lists))
@@ -380,6 +381,8 @@
                     help = 'Skip Mboxo processing')
 parser.add_argument('--generator', dest='generator',
                    help='Override the generator.')
+parser.add_argument('--skipff', dest = 'skipff', action='store_true',
+                    help = 'Skip format=flowed processing (mainly for unit-testing)')
 
 args = parser.parse_args()
 
