diff --git a/gracedb/superevents/utils.py b/gracedb/superevents/utils.py
index 5beeaf0012a6fd1eb54c429ae076aaece177eba8..658097aca5badcdafd4854935400a22125548a61 100644
--- a/gracedb/superevents/utils.py
+++ b/gracedb/superevents/utils.py
@@ -4,11 +4,10 @@ from .buildVOEvent import construct_voevent_file
 from .models import Superevent, Log, Labelling, EMObservation, EMFootprint, \
     VOEvent, Signoff
 from .shortcuts import is_superevent
-from .models import Superevent, Log, Labelling, EMObservation, EMFootprint
-from events.models import Event, EventLog, Tag
+from events.models import Event, EventLog, Tag, Label
 from events.permission_utils import assign_default_perms
 from events.shortcuts import is_event
-from core.vfile import VersionedFile
+from core.vfile import create_versioned_file
 from alerts.superevent_utils import issue_alert_for_superevent_creation, \
     issue_alert_for_superevent_log, \
     issue_alert_for_superevent_label_creation, \
@@ -160,10 +159,12 @@ def update_superevent(superevent, updater, issue_alert=True, **kwargs):
 
 
 def create_log(issuer, comment, event_or_superevent, filename="",
-    data_file=None, tags=[], issue_alert=False, autogenerated=False):
+    data_file=None, tags=[], file_version=None, issue_alert=False,
+    autogenerated=False):
     """
     Assume data have already been validated by a form or serializer.
     tags should be a list of Tag objects (??)
+    data_file should be an in-memory file type
     """
 
     # Initial dictionary for log creation
@@ -172,6 +173,9 @@ def create_log(issuer, comment, event_or_superevent, filename="",
         'comment': comment,
         'filename': filename,
     }
+    if file_version is not None:
+        log_dict['file_version'] = file_version
+
     if is_superevent(event_or_superevent):
         log_dict['superevent'] = event_or_superevent
         LogModel = Log
@@ -188,17 +192,14 @@ def create_log(issuer, comment, event_or_superevent, filename="",
     # Create log object
     log = LogModel.objects.create(**log_dict)
 
-    # Create data file
+    # Create versioned file
     if data_file:
-        filepath = os.path.join(event_or_superevent.datadir, filename)
-        fdest = VersionedFile(filepath, 'w')
-        for chunk in data_file.chunks():
-            fdest.write(chunk)
-        fdest.close()
+        version = create_versioned_file(filename, event_or_superevent.datadir,
+            data_file)
 
         # Update file_version
-        log.file_version = fdest.version
-        log.save()
+        log.file_version = version
+        log.save(update_fields=['file_version'])
 
     # Add tags to log messages
     for t in tags:
@@ -231,7 +232,7 @@ def add_tag_to_log(log, tag, user, add_log_message=True, issue_alert=False):
     # Create log message to record tag addition?
     log_for_tag_addition = None
     if add_log_message:
-        comment = 'Tagged message {N}: {tag_name}'.format(N=log.N,
+        comment = 'Tagged message {N}: {tag_name}.'.format(N=log.N,
             tag_name=tag.name)
         event_or_superevent = get_log_parent(log)
         log_for_tag_addition = create_log(user, comment, event_or_superevent,
@@ -249,8 +250,8 @@ def remove_tag_from_log(log, tag, user, add_log_message=True,
     # Create log message to record tag removal?
     log_for_tag_removal = None
     if add_log_message:
-        comment = 'Removed tag {tag_name} from message {N}'.format(
-            N=log.N, tag_name=tag.name),
+        comment = 'Removed tag {tag_name} from message {N}.'.format(
+            N=log.N, tag_name=tag.name)
         event_or_superevent = get_log_parent(log)
         log_for_tag_removal = create_log(user, comment, event_or_superevent,
             issue_alert=issue_alert, autogenerated=True)
@@ -397,13 +398,14 @@ def get_or_create_tags(tag_name_list, display_name_list=[]):
 
 # TODO: add permissions checking?
 # TODO: move this somewhere else?
-def get_superevent_by_date_id_or_404(request, superevent_id):
+def get_superevent_by_date_id_or_404(request, superevent_id, queryset=None):
 
     filter_kwargs = Superevent.get_filter_kwargs_for_date_id_lookup(
         superevent_id)
 
     # TODO: filter queryset for user here
-    queryset = Superevent.objects.all()
+    if queryset is None:
+        queryset = Superevent.objects.all()
 
     return get_object_or_404(queryset, **filter_kwargs)