diff --git a/gracedb/api/v1/events/views.py b/gracedb/api/v1/events/views.py
index b6c6b8a39b4333996f1bffbdfdc81d4d467101a3..f2fab2b528caec0f9fbf4288f344747e6a2dc83a 100644
--- a/gracedb/api/v1/events/views.py
+++ b/gracedb/api/v1/events/views.py
@@ -617,7 +617,7 @@ class EventDetail(InheritPermissionsAPIView):
         #for chunk in f.chunks():
         #    fdest.write(chunk)
         #fdest.close()
-        shutil.copyfileobj(f, fdest)
+        shutil.copyfileobj(f, fdest.file)
         fdest.close()
 
         # Extract Info from uploaded data
diff --git a/gracedb/api/v1/superevents/views.py b/gracedb/api/v1/superevents/views.py
index 2575d53aff2f0332a3790d86e1fdb4a1b665f1cd..be85aa3ad700080a5c661bea25b1e8244f0b45c2 100644
--- a/gracedb/api/v1/superevents/views.py
+++ b/gracedb/api/v1/superevents/views.py
@@ -15,7 +15,7 @@ from rest_framework.views import APIView
 
 from core.file_utils import get_file_list
 from core.http import check_and_serve_file
-from core.vfile import VersionedFile, FileVersionError, FileVersionNameError
+from core.vfile import FileVersionError, FileVersionNameError
 from events.models import Event, Label
 from events.view_utils import reverse as gracedb_reverse
 from ligoauth.utils import is_internal
diff --git a/gracedb/core/vfile.py b/gracedb/core/vfile.py
index c451e6b7fafb834f908a1b61b7e2bb6f339a8051..5a878672216f00adf3d0514767a474c8dc8d3bb2 100644
--- a/gracedb/core/vfile.py
+++ b/gracedb/core/vfile.py
@@ -24,7 +24,7 @@ class FileVersionNameError(Exception):
     pass
 
 
-class VersionedFile(file):
+class VersionedFile(object):
     """
     Open a versioned file.
 
@@ -74,7 +74,7 @@ class VersionedFile(file):
             # one scoped inside of this __init__). But I'm reluctant to mess with
             # Brian's code too much.
             self.version = version
-            file.__init__(self, actual_name, *args, **kwargs)
+            self.file = open(actual_name, *args, **kwargs)
 
         # Otherwise...
 
@@ -124,7 +124,7 @@ class VersionedFile(file):
                         os.O_WRONLY | os.O_CREAT | os.O_EXCL,
                         0o644)
                 # re-open
-                file.__init__(self, actual_name, *args, **kwargs)
+                self.file = open(actual_name, *args, **kwargs)
                 # lose fd we used to ensure file creation.
                 os.close(fd)
                 break
@@ -208,6 +208,13 @@ class VersionedFile(file):
         return [int(f.split(',')[1])
                 for f in os.listdir(d) if f.startswith(name + ',')]
 
+    def write(self, s):
+        self.file.write(s)
+
+    @property
+    def closed(self):
+        return self.file.closed
+
     def close(self):
         if self.writing:
             # no need to update symlink if we were only reading.
@@ -215,13 +222,13 @@ class VersionedFile(file):
             # file -- trying to discover the lastest version fails
             # painfully. (max(known_versions()) => max([]))
             self._repoint_symlink()
-        if not self.closed:
-            file.close(self)
+        if not self.file.closed:
+            self.file.close()
 
     def __del__(self):
         # XXX file does not have a __del__ method.  Should we?
-        if not self.closed:
-            self.close()
+        if not self.file.closed:
+            self.file.close()
 
     @staticmethod
     def guess_mimetype(filename):
diff --git a/gracedb/events/serialize.py b/gracedb/events/serialize.py
index 56831a079483a4f7b8763ed42ef5b8d618e40fff..9551517ceb8b49bdc7208205f33a12d95e8bd839 100644
--- a/gracedb/events/serialize.py
+++ b/gracedb/events/serialize.py
@@ -89,7 +89,7 @@ def write_output_files(root_dir, xmldoc, log_content, \
   """
 
   f = VersionedFile(root_dir+'/'+xml_fname,'w')
-  xmldoc.write(f)
+  xmldoc.write(f.file)
   f.close()
 
   f = VersionedFile(root_dir+'/'+log_fname,'w')