diff --git a/gracedb/admin.py b/gracedb/admin.py
index 5ece5c4d9c1e8e95e7c4e910ce49a26183030096..7e36d454e8d2ad5b3a2c1897a2a1bd103bf5505a 100644
--- a/gracedb/admin.py
+++ b/gracedb/admin.py
@@ -1,6 +1,6 @@
 
 from models import Event, EventLog, User, Group
-from models import Label, Labelling, Slot, Tag
+from models import Label, Labelling, Tag
 from django.contrib import admin
 
 class EventAdmin(admin.ModelAdmin):
@@ -30,9 +30,6 @@ class LabellingAdmin(admin.ModelAdmin):
     list_display = [ 'event', 'label', 'creator' ]
     search_fields = [ 'event__id', 'label__name', 'creator__name' ]
 
-class SlotAdmin(admin.ModelAdmin):
-    list_display = [ 'event', 'name', 'value' ]
-
 class TagAdmin(admin.ModelAdmin):
     list_display = [ 'name', 'displayName' ]
     filter_vertical = [ 'eventlogs' ]
@@ -43,5 +40,4 @@ admin.site.register(User, UserAdmin)
 admin.site.register(Group)
 admin.site.register(Label, LabelAdmin)
 admin.site.register(Labelling, LabellingAdmin)
-admin.site.register(Slot, SlotAdmin)
 admin.site.register(Tag, TagAdmin)
diff --git a/gracedb/api.py b/gracedb/api.py
index 8130843b67473d8ae1afe47a02990e429e45549d..f1b75c85287b33894a5b269f46156bf78f780ae0 100644
--- a/gracedb/api.py
+++ b/gracedb/api.py
@@ -8,7 +8,7 @@ from django.conf import settings
 
 import json
 
-from gracedb.models import Event, Group, EventLog, Slot, Tag
+from gracedb.models import Event, Group, EventLog, Tag
 from gracedb.views import create_label
 from translator import handle_uploaded_data
 
@@ -117,11 +117,6 @@ def eventToDict(event, columns=None, request=None):
             "self"  : reverse("event-detail", args=[graceid], request=request),
             "tags"  : reverse("eventtag-list", args=[graceid], request=request),
             }
-    # XXX Jam the slots in here? Could just have a list of slot names instead of
-    # all these links.  But the links might be useful??
-    rv['slots'] = {}
-    for slot in Slot.objects.filter(event=event).order_by('name'):
-        rv['slots'][slot.name] = reverse("slot", args=[graceid, slot.name], request=request)
     return rv
 
 
@@ -854,10 +849,6 @@ class GracedbRoot(APIView):
         labels = labels.replace("G1200", "{graceid}")
         labels = labels.replace("thelabel", "{label}")
 
-        slot = reverse("slot", args=["G1200", "slotname"], request=request)
-        slot = slot.replace("G1200", "{graceid}")
-        slot = slot.replace("slotname", "{slotname}")
-
         taglist = reverse("eventlogtag-list", args=["G1200", "0"], request=request)
         taglist = taglist.replace("G1200", "{graceid}")
         taglist = taglist.replace("0", "{n}")
@@ -875,7 +866,6 @@ class GracedbRoot(APIView):
                 "event-label-template" : labels,
                 "files-template" : files,
                 "filemeta-template" : filemeta,
-                "slot-template" : slot,
                 "tag-template" : tag,
                 "taglist-template" : taglist,
                 }
@@ -1104,120 +1094,3 @@ class FileMeta(APIView):
     permission_classes = (IsAuthenticated,)
     pass
 
-#==================================================================
-# Slots
-
-class EventSlot(APIView):
-    """A slot associated with an event.  
-    """
-
-    # Get the value of a slot.  This will be a filename. 
-    def get(self, request, graceid, slotname):
-        try:
-            event = Event.getByGraceid(graceid)
-        except Event.DoesNotExist:
-            # XXX Real error message.
-            return Response("Event does not exist.",
-                    status=status.HTTP_404_NOT_FOUND)
-
-        if not slotname:
-            return Response(dict([(s.name, s.value)
-                for s in Slot.objects.filter(event=event)]))
-
-        try:
-            slot = Slot.objects.filter(event=event).filter(name=slotname)[0]
-        except:
-            # Okay, no slot yet.  Probably want an error message.
-            # Try looking for files that contain the slot name.
-            return Response("No slot.  Search based on slotname not implemented yet.",
-                    status=status.HTTP_404_NOT_FOUND)
-        filename = slot.value
-        rv = {}
-        rv['value'] = filename
-        return Response(rv)
-
-    # Create a slot.  The slot's value will be a filename.
-    # This file is assumed to have already been uploaded.
-    def put(self, request, graceid, slotname):
-        try:
-            event = Event.getByGraceid(graceid)
-        except Event.DoesNotExist:
-            # XXX Real error message.
-            return Response("Event does not exist.",
-                    status=status.HTTP_404_NOT_FOUND)
-        filename = request.DATA.get('filename')
-        # Interestingly, the None object seems to be converted to a string
-        # when encoded in the HTTP request body.  Hence the 'None' string 
-        # below.  If somebody intentionally named a file 'None', then 
-        # they deserve to get this error message.
-        if filename=='' or filename=='None' or filename==None:
-            return Response("Please submit a filename or upload a file.",
-                    status=status.HTTP_400_BAD_REQUEST)
-
-        # UGLY hack to deal with /private vs /general dirs
-        general = False
-        tmpFilename = filename
-        if filename.startswith("general/"):
-            tmpFilename = filename[len("general/"):]
-            general = True
-        filepath = os.path.join(event.datadir(general), tmpFilename)
-
-        # Check for existence of the file.
-        if not os.path.exists(filepath):
-           return Response("No slot created because file does not exist",
-                    status=status.HTTP_404_NOT_FOUND)
-        # Check for existence of the slot.  If it exists, simply update the
-        # existing slot.
-        try:
-            slot = Slot.objects.filter(event=event).filter(name=slotname)[0]
-            slot.value = filename
-            slot.save()
-            # Create a log entry to document the slot update.
-            msg = "Updated slot %s with file " % slotname
-            logentry = EventLog(event=event,
-                               issuer=request.ligouser,
-                               filename=tmpFilename,
-                               comment=msg)
-            logentry.save()
-        except:
-            # Create the slot.
-            slot = Slot(event=event,name=slotname,value=filename)
-            slot.save()
-            # Create a log entry to document the slot creation.
-            msg = "Created slot %s with file " % slotname
-            logentry = EventLog(event=event,
-                               issuer=request.ligouser,
-                               filename=tmpFilename,
-                               comment=msg)
-            logentry.save()
-
-        return Response("Slot created or updated.",status=status.HTTP_201_CREATED)
-
-    # Delete a slot.
-    def delete(self, request, graceid, slotname):
-        try:
-            event = Event.getByGraceid(graceid)
-        except Event.DoesNotExist:
-            # XXX Real error message.
-            return Response("Event does not exist.",
-                    status=status.HTTP_404_NOT_FOUND)
-
-        # Gotta find the poor devil before we can delete him.
-        try:
-            slot = Slot.objects.filter(event=event).filter(name=slotname)[0]
-        except:
-            # Okay, no slot yet.  Probably want an error message.
-            # Try looking for files that contain the slot name.
-            return Response("No such slot.",
-                    status=status.HTTP_404_NOT_FOUND)
-
-        slot.delete()
-        # Create a log entry to document the slot destruction.
-        msg = "Deleted slot %s " % slotname
-        logentry = EventLog(event=event,
-                           issuer=request.ligouser,
-                           comment=msg)
-        logentry.save()
-
-        return Response("Slot deleted.",status=status.HTTP_200_OK)
-
diff --git a/gracedb/migrations/0003_auto__del_slot__del_unique_slot_event_name.py b/gracedb/migrations/0003_auto__del_slot__del_unique_slot_event_name.py
new file mode 100644
index 0000000000000000000000000000000000000000..066c22bff6271796213757f1de8e4df130409556
--- /dev/null
+++ b/gracedb/migrations/0003_auto__del_slot__del_unique_slot_event_name.py
@@ -0,0 +1,136 @@
+# -*- coding: utf-8 -*-
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+    def forwards(self, orm):
+        # Removing unique constraint on 'Slot', fields ['event', 'name']
+        db.delete_unique('gracedb_slot', ['event_id', 'name'])
+
+        # Deleting model 'Slot'
+        db.delete_table('gracedb_slot')
+
+
+    def backwards(self, orm):
+        # Adding model 'Slot'
+        db.create_table('gracedb_slot', (
+            ('value', self.gf('django.db.models.fields.CharField')(max_length=100)),
+            ('event', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['gracedb.Event'])),
+            ('name', self.gf('django.db.models.fields.CharField')(max_length=100)),
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+        ))
+        db.send_create_signal('gracedb', ['Slot'])
+
+        # Adding unique constraint on 'Slot', fields ['event', 'name']
+        db.create_unique('gracedb_slot', ['event_id', 'name'])
+
+
+    models = {
+        'gracedb.approval': {
+            'Meta': {'object_name': 'Approval'},
+            'approvedEvent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['gracedb.Event']"}),
+            'approver': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['gracedb.User']"}),
+            'approvingCollaboration': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+        },
+        'gracedb.coincinspiralevent': {
+            'Meta': {'ordering': "['-id']", 'object_name': 'CoincInspiralEvent', '_ormbases': ['gracedb.Event']},
+            'combined_far': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
+            'end_time': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}),
+            'end_time_ns': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}),
+            'event_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['gracedb.Event']", 'unique': 'True', 'primary_key': 'True'}),
+            'false_alarm_rate': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
+            'ifos': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '20'}),
+            'mass': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
+            'mchirp': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
+            'minimum_duration': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
+            'snr': ('django.db.models.fields.FloatField', [], {'null': 'True'})
+        },
+        'gracedb.event': {
+            'Meta': {'ordering': "['-id']", 'object_name': 'Event'},
+            'analysisType': ('django.db.models.fields.CharField', [], {'max_length': '20'}),
+            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'far': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
+            'gpstime': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}),
+            'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['gracedb.Group']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'instruments': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '20'}),
+            'labels': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['gracedb.Label']", 'through': "orm['gracedb.Labelling']", 'symmetrical': 'False'}),
+            'likelihood': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
+            'nevents': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}),
+            'submitter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['gracedb.User']"}),
+            'uid': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '20'})
+        },
+        'gracedb.eventlog': {
+            'Meta': {'ordering': "['-created']", 'object_name': 'EventLog'},
+            'comment': ('django.db.models.fields.TextField', [], {}),
+            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['gracedb.Event']"}),
+            'filename': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '100'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'issuer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['gracedb.User']"})
+        },
+        'gracedb.group': {
+            'Meta': {'object_name': 'Group'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'managers': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['gracedb.User']", 'symmetrical': 'False'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '20'})
+        },
+        'gracedb.label': {
+            'Meta': {'object_name': 'Label'},
+            'defaultColor': ('django.db.models.fields.CharField', [], {'default': "'black'", 'max_length': '20'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '20'})
+        },
+        'gracedb.labelling': {
+            'Meta': {'object_name': 'Labelling'},
+            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'creator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['gracedb.User']"}),
+            'event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['gracedb.Event']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['gracedb.Label']"})
+        },
+        'gracedb.multiburstevent': {
+            'Meta': {'ordering': "['-id']", 'object_name': 'MultiBurstEvent', '_ormbases': ['gracedb.Event']},
+            'amplitude': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
+            'bandwidth': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
+            'central_freq': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
+            'confidence': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
+            'duration': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
+            'event_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['gracedb.Event']", 'unique': 'True', 'primary_key': 'True'}),
+            'false_alarm_rate': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
+            'ifos': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '20'}),
+            'ligo_angle': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
+            'ligo_angle_sig': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
+            'ligo_axis_dec': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
+            'ligo_axis_ra': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
+            'peak_time': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}),
+            'peak_time_ns': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}),
+            'snr': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
+            'start_time': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}),
+            'start_time_ns': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'})
+        },
+        'gracedb.tag': {
+            'Meta': {'object_name': 'Tag'},
+            'displayName': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}),
+            'eventlogs': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['gracedb.EventLog']", 'symmetrical': 'False'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+        },
+        'gracedb.user': {
+            'Meta': {'ordering': "['name']", 'object_name': 'User'},
+            'dn': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'principal': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'unixid': ('django.db.models.fields.CharField', [], {'max_length': '25'})
+        }
+    }
+
+    complete_apps = ['gracedb']
\ No newline at end of file
diff --git a/gracedb/models.py b/gracedb/models.py
index cb6dd80b22c8531ae596407d6e70f3a68df6994c..e7c3afea9911fd1fd5ef80f43b0e404ada77f659 100644
--- a/gracedb/models.py
+++ b/gracedb/models.py
@@ -271,7 +271,7 @@ class MultiBurstEvent(Event):
 
 ## Tags (user-defined log message attributes)
 class Tag(models.Model):
-    """Slot Model"""
+    """Tag Model"""
     # XXX Does the tag need to have a submitter column?
     # No, because creating a tag will generate a log message.
     # For the same reason, a timstamp is not necessary.
@@ -291,23 +291,4 @@ class Tag(models.Model):
 #         # set of log messages in the event with the set of log 
 #         # messages in the tag.
 #         eventlist = [log.event for log in self.eventlogs.all()]
-#         return list(set(eventlist))
-   
-
-## XXX Get rid of the slots.  Probably.
-class Slot(models.Model):
-    """Slot Model"""
-    # Does the slot need to have a submitter column?
-    class Meta:
-        unique_together = (('event', 'name'))
-    event = models.ForeignKey(Event)
-    name  = models.CharField(max_length=100)
-    value = models.CharField(max_length=100)
-
-    # In case the slot value is not a filename, this will just return None.
-    def fileurl(self):
-        if self.value:
-            return reverse('file', args=[self.event.graceid(), self.value])
-        else:
-            return None
 
diff --git a/gracedb/templatetags/slot.py b/gracedb/templatetags/slot.py
deleted file mode 100644
index 63e7b16827c8d94711d2563cde26fb788f473ebd..0000000000000000000000000000000000000000
--- a/gracedb/templatetags/slot.py
+++ /dev/null
@@ -1,21 +0,0 @@
-
-from django import template
-from django.utils.encoding import force_unicode
-from django.utils.safestring import mark_safe
-from ..models import Slot, EventLog
-register = template.Library()
-
-@register.filter("slot")
-def slot(event,name=None):
-    if event is None:
-        return None
-    try:
-        if name:
-            return Slot.objects.filter(event=event).filter(name__exact=name)[0]
-        else:
-            return Slot.objects.filter(event=event)
-    except:
-        # Either there is no such slot or something went wrong.
-        # In either case, we want the template to just ignore it.
-        return None
-
diff --git a/gracedb/urls_rest.py b/gracedb/urls_rest.py
index e8a48236b573361cee398e64227eac6263dd7aaf..828bfec477bde347f8b5592539e343a79e6f9209 100644
--- a/gracedb/urls_rest.py
+++ b/gracedb/urls_rest.py
@@ -9,7 +9,6 @@ from gracedb.api import TagList
 # from gracedb.api import TagDetail
 from gracedb.api import EventTagList, EventTagDetail
 from gracedb.api import EventLogTagList, EventLogTagDetail
-from gracedb.api import EventSlot
 from gracedb.api import Files, FileMeta
 from gracedb.api import EventNeighbors, EventLabel
 
@@ -59,11 +58,6 @@ urlpatterns = patterns('gracedb.api',
     url (r'^events/(?P<graceid>\w[\d]+)/labels/(?P<label>.+)?$',
         EventLabel.as_view(), name="labels"),
 
-    # Event Slots
-    # events/{graceid}/slot/[{slotname}]
-    url (r'^events/(?P<graceid>[GEHT]\d+)/slot/(?P<slotname>.+)?$',
-        EventSlot.as_view(), name="slot"),
-
     # Event Neighbors
     # events/{graceid}/neighbors/[?delta=(N|(N,N))]
     url (r'^events/(?P<graceid>\w[\d]+)/neighbors/$',