diff --git a/twisted/scripts/tap2rpm.py b/twisted/scripts/tap2rpm.py
index 735f391..1132fe9 100755
--- a/twisted/scripts/tap2rpm.py
+++ b/twisted/scripts/tap2rpm.py
@@ -6,6 +6,8 @@
 import sys, os, shutil, time, glob
 import subprocess
 import tempfile
+import tarfile
+from StringIO import StringIO
 
 from twisted.python import usage, log
 from twisted.scripts import tap2deb
@@ -221,19 +223,42 @@ def run(options=None):
     source_dir = os.path.join(tmp_dir, directory)
     os.makedirs(source_dir)
 
-    #  populate source directory
+    #  create source tar
     tarfile_name = source_dir + '.tar.gz'
     tarfile_basename = os.path.basename(tarfile_name)
-    tap2deb.save_to_file(os.path.join(source_dir, '%s.spec' % rpm_file),
-                                      specFileData % vars())
-    tap2deb.save_to_file(os.path.join(source_dir, '%s.init' % rpm_file),
-                                      initFileData % vars())
-    shutil.copy(tap_file, source_dir)
+    tarHandle = tarfile.open(tarfile_name, "w:gz")
+
+    sourceDirInfo = tarfile.TarInfo(directory)
+    sourceDirInfo.type = tarfile.DIRTYPE
+    sourceDirInfo.mode = 0755
+    tarHandle.addfile(sourceDirInfo)
+
+    specFileInfo = tarfile.TarInfo(
+            os.path.join(directory, '%s.spec' % rpm_file))
+    specFileInfo.type = tarfile.REGTYPE
+    specFileInfo.mode = 0644
+    specFileRealData = specFileData % vars()
+    specFileInfo.size = len(specFileRealData)
+    tarHandle.addfile(specFileInfo, StringIO(specFileRealData))
+
+    initFileInfo = tarfile.TarInfo(
+            os.path.join(directory, '%s.init' % rpm_file))
+    initFileInfo.type = tarfile.REGTYPE
+    initFileInfo.mode = 0755
+    initFileRealData = initFileData % vars()
+    initFileInfo.size = len(initFileRealData)
+    tarHandle.addfile(initFileInfo, StringIO(initFileRealData))
+
+    tapFileHandle = open(tap_file, 'rb')
+    tapFileInfo = tarHandle.gettarinfo(
+            arcname=os.path.join(directory, os.path.basename(tap_file)),
+            fileobj=tapFileHandle,
+        )
+    tapFileInfo.mode = 0644
+    tarHandle.addfile(tapFileInfo, tapFileHandle)
+
+    tarHandle.close()
 
-    #  create source tar
-    os.system('cd "%(tmp_dir)s"; tar cfz "%(tarfile_name)s" "%(directory)s"'
-              % vars())
-    
     print "Checking content of tarball %r before we hand it to rpmbuild..." % (
             tarfile_name)
     os.system('tar tzvf "%(tarfile_name)s"' % vars())
@@ -245,8 +270,7 @@ def run(options=None):
             "-vv",
             "--define", "_topdir %s" % (tmp_dir,),
             "-ta", tarfile_name,
-               ])
-    #       ], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+        ], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
     stdout, _ = job.communicate()
 
     # If there was a problem, show people what it was.
