diff --git a/Tools/PyJobTransforms/python/trfExe.py b/Tools/PyJobTransforms/python/trfExe.py
index d8bfa657f4d1ab94fff99aca97e448032f12d15a..87d7bce4fa8c3bb74f731754b70308e8885b6378 100755
--- a/Tools/PyJobTransforms/python/trfExe.py
+++ b/Tools/PyJobTransforms/python/trfExe.py
@@ -658,7 +658,6 @@ class scriptExecutor(transformExecutor):
 
         try:
             p = subprocess.Popen(self._cmd, shell = False, stdout = subprocess.PIPE, stderr = subprocess.STDOUT, bufsize = 1)
-            
             if self._memMonitor:
                 try:
                     self._memSummaryFile = 'mem.summary.' + self._name + '.json'
@@ -1885,12 +1884,23 @@ class archiveExecutor(scriptExecutor):
                 elif self.conf.argdict['compressionType'] == 'none':
                     pass
         elif self._exe == 'zip':
-            self._cmd = [self._exe]
-            if 'compressionLevel' in self.conf.argdict:
-                self._cmd.append(self.conf.argdict['compressionLevel'])
-            self._cmd.extend([self.conf.argdict['outputArchFile'].value[0]])
-            if '.' not in self.conf.argdict['outputArchFile'].value[0]:
-                errmsg = 'Output filename must end in ".", ".zip" or ".anyname" '
-                raise trfExceptions.TransformExecutionException(trfExit.nameToCode('TRF_OUTPUT_FILE_ERROR'), errmsg)
-        self._cmd.extend(self.conf.argdict['inputDataFile'].value)
+            self._cmd = ['python']
+            try:
+                with open('zip_wrapper.py', 'w') as zip_wrapper:
+                    print >> zip_wrapper, "import zipfile"
+                    print >> zip_wrapper, "zf = zipfile.ZipFile('{}', mode='w', allowZip64=True)".format(self.conf.argdict['outputArchFile'].value[0])
+                    print >> zip_wrapper, "for f in {}:".format(self.conf.argdict['inputDataFile'].value)
+                    print >> zip_wrapper, "   print 'Zipping file {}'.format(f)"
+                    print >> zip_wrapper, "   zf.write(f, compress_type=zipfile.ZIP_STORED)"
+                    print >> zip_wrapper, "zf.close()"
+                os.chmod('zip_wrapper.py', 0755)
+            except (IOError, OSError) as e:
+                errMsg = 'error writing zip wrapper {fileName}: {error}'.format(fileName = 'zip_wrapper.py',
+                    error = e
+                )
+                msg.error(errMsg)
+                raise trfExceptions.TransformExecutionException(trfExit.nameToCode('TRF_EXEC_SETUP_WRAPPER'),
+                    errMsg
+                )
+        self._cmd.append('zip_wrapper.py')
         super(archiveExecutor, self).preExecute(input=input, output=output)
diff --git a/Tools/PyJobTransforms/scripts/Archive_tf.py b/Tools/PyJobTransforms/scripts/Archive_tf.py
index d8afd52958ddd7775b8d0785ed5bfb65837ea599..d943496b1ce796faaed3df4ec6883c29e51e5376 100755
--- a/Tools/PyJobTransforms/scripts/Archive_tf.py
+++ b/Tools/PyJobTransforms/scripts/Archive_tf.py
@@ -46,7 +46,6 @@ def addMyArgs(parser):
     # Use arggroup to get these arguments in their own sub-section (of --help)
     parser.defineArgGroup('Archive_tf', 'Archive transform options')
     parser.defineArgGroup('Tar archiver', 'Options')
-    parser.defineArgGroup('Zip archiver', 'Options')
     parser.add_argument('--exe', group='Archive_tf',
                         help='Archiving command. Default is zip', choices=['zip', 'tar'],
                         default='zip')
@@ -59,9 +58,6 @@ def addMyArgs(parser):
     parser.add_argument('--compressionType', group='Tar archiver',
                         help='Underlying compression type of tar. Default is none', choices=['gzip', 'bzip2', 'none'],
                         default='none')
-    parser.add_argument('--compressionLevel', group='Zip archiver',
-                        help='Compression level of zip. Default is -0', choices=['-0', '-1', '-2', '-3',  '-4',  '-5', '-6', '-7', '-8', '-9'],
-                        default='-0')
 
 if __name__ == '__main__':
     main()