diff --git a/gracedb/superevents/models.py b/gracedb/superevents/models.py
index 2b6098a95b04d018d794f97ef5a5fee36b03212e..a3477ca245f7f90318ab332779662717f357d8ac 100644
--- a/gracedb/superevents/models.py
+++ b/gracedb/superevents/models.py
@@ -307,6 +307,9 @@ class Superevent(CleanSaveModel, ModelToDictMixin, AutoIncrementModel):
     def __unicode__(self):
         return self.superevent_id
 
+    class PreferredEventRemovalError(Exception):
+        # To be raised when an attempt is made to remove the preferred event.
+        pass
 
 class Log(CleanSaveModel, LogBase, AutoIncrementModel):
     """
diff --git a/gracedb/superevents/utils.py b/gracedb/superevents/utils.py
index 36152d4a1bbe51dd89611bceade7df3ff84dbe5b..16777701f69413be317acff809c551a55020cda0 100644
--- a/gracedb/superevents/utils.py
+++ b/gracedb/superevents/utils.py
@@ -281,16 +281,18 @@ def add_event_to_superevent(superevent, event, user, add_event_log=True,
 def remove_event_from_superevent(superevent, event, user, add_event_log=True,
     add_superevent_log=True, issue_event_alert=True,
     issue_superevent_alert=True):
+    """
+    This function should be within a try-except block to catch exceptions and
+    convert them to the appropriate response.
+    """
+    # Throw error if this is the preferred event
+    if event == superevent.preferred_event:
+        raise Superevent.PreferredEventRemovalError("Can't remove a "
+            "superevent's preferred event without setting a new one.")
 
     # Remove event from superevent
     superevent.events.remove(event)
 
-    # Handle case where the event is also the preferred event for the
-    # superevent
-    if (hasattr(event, 'superevent_preferred_for') and 
-        event.superevent_preferred_for == superevent):
-        superevent.preferred_event = None
-
     # Create superevent log message to record event removal?
     if add_superevent_log:
         # Record event removal in superevent logs