diff --git a/gracedb/api.py b/gracedb/api.py
index 01d7e25897d8182e48b598c79cc058fc8f66550f..1a070cfed562bc81e94707ecb64d65a694fcd97f 100644
--- a/gracedb/api.py
+++ b/gracedb/api.py
@@ -116,6 +116,11 @@ def eventToDict(event, columns=None, request=None):
             "labels" : reverse("labels", args=[graceid], request=request),
             "self"  : reverse("event-detail", 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
 
 
@@ -827,9 +832,6 @@ class EventSlot(APIView):
             return Response("No slot.  Search based on slotname not implemented yet.",
                     status=status.HTTP_404_NOT_FOUND)
         filename = slot.value
-        dirPrefix = settings.GRACEDB_DATA_DIR
-        eventDir = os.path.join(dirPrefix, event.graceid())
-        filename = os.path.join(eventDir, "private", filename)
         rv = {}
         rv['value'] = filename
         return Response(rv)
@@ -843,8 +845,6 @@ class EventSlot(APIView):
             # XXX Real error message.
             return Response("Event does not exist.",
                     status=status.HTTP_404_NOT_FOUND)
-        dirPrefix = settings.GRACEDB_DATA_DIR
-        eventDir = os.path.join(dirPrefix, event.graceid())
         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 
@@ -853,15 +853,29 @@ class EventSlot(APIView):
         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
+        if filename.startswith("general/"):
+            tmpFilename = filename[len("general/"):]
+            general = True
+        filepath = os.path.join(event.datadir(general), tmpFilename)
+
         # Check for existence of the file.
-        filePath = os.path.join(eventDir, "private", filename)
-        if not os.path.exists(filePath):
+        if not os.path.exists(filepath):
            return Response("No slot created because file does not exist",
                     status=status.HTTP_404_NOT_FOUND)
-        # Create the slot.
-        slot = Slot(event=event,name=slotname,value=filename)
-        slot.save()
-        return Response("Slot created.",status=status.HTTP_201_CREATED)
+        # 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()
+        except:
+            # Create the slot.
+            slot = Slot(event=event,name=slotname,value=filename)
+            slot.save()
+        return Response("Slot created or updated.",status=status.HTTP_201_CREATED)
 
     # Delete a slot.
     def delete(self, request, graceid, slotname):
diff --git a/gracedb/models.py b/gracedb/models.py
index 9da94cab5a7d535297165b364a9b0cb01a35a3ef..0b19353a4dfea6dd0c4605ee295f3fa133c92ffc 100644
--- a/gracedb/models.py
+++ b/gracedb/models.py
@@ -248,3 +248,11 @@ class Slot(models.Model):
     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
index fff26f11fd6e5ae918006c7d32e561a213a7f9b7..63e7b16827c8d94711d2563cde26fb788f473ebd 100644
--- a/gracedb/templatetags/slot.py
+++ b/gracedb/templatetags/slot.py
@@ -6,13 +6,16 @@ from ..models import Slot, EventLog
 register = template.Library()
 
 @register.filter("slot")
-def slot(event,slotname):
+def slot(event,name=None):
     if event is None:
-        return mark_safe("")
+        return None
     try:
-        slot = Slot.objects.filter(event=event).filter(name=slotname)[0]
-        out = slot.value
+        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
-    return mark_safe(out)
 
diff --git a/templates/gracedb/event_detail.html b/templates/gracedb/event_detail.html
index b97ae597c4174ac9b16327efb54a2aed21cae1bc..aa948a79a168fe73d48dd8b6cf076b6596e425c4 100644
--- a/templates/gracedb/event_detail.html
+++ b/templates/gracedb/event_detail.html
@@ -2,6 +2,7 @@
 {% load timeutil %}
 {% load scientific %}
 {% load sanitize_html %}
+{% load slot %}
 
 {% block title %}View {{ object.graceid }}{% endblock %}
 {% block heading %}{% endblock %}
@@ -159,6 +160,8 @@
 <table>
 <tr><td valign="top">
 
+<h3> Basic Info </h3>
+
 <table class="event">
     {% if skyalert_authorized  %}
         <tr><td colspan="4">
@@ -206,6 +209,11 @@
 
 </table>
 
+{# Analysis-specific attributes #}
+{% block analysis_specific %}
+{# This block is empty in the base event_detail template #}
+{% endblock %}
+
 {% if nearby %}
     <p/>
     <h3>Neighbors</h3>
@@ -307,5 +315,15 @@
     <br/>
 {% endif %}
 
+<p/>
+<h3>Available Slots</h3>
+{% if not object|slot %}
+    None.
+{% else %}
+    {% for slot in object|slot %}
+    <a href="{{slot.fileurl}}">{{ slot.name }}</a> <br/>
+    {% endfor %}
+{% endif %}
+
 </td></tr></table>
 {% endblock %}
diff --git a/templates/gracedb/event_detail_CWB.html b/templates/gracedb/event_detail_CWB.html
new file mode 100644
index 0000000000000000000000000000000000000000..e91ae26ad951849a519617374f223b5a543d31ee
--- /dev/null
+++ b/templates/gracedb/event_detail_CWB.html
@@ -0,0 +1,47 @@
+{% extends "gracedb/event_detail.html" %}
+
+{%load scientific %}
+
+{# Analysis-specific attributes for a cWB event#}
+{% block analysis_specific %}
+<p/>
+<h3>Analysis-Specific Attributes</h3>
+
+<table> <tbody>
+    <tr>
+        <td>  <table class="event"> <tbody>
+                    <!-- Note:  commenting out ifos so that we'll have a multiple of three --> 
+                    <!-- attributes. If you want, you can uncomment and re-introduce the   -->
+                    <!-- two funny little padding rows down below.   Or not.               -->
+                    <!-- <tr> <th> ifos </th> <td> {{object.ifos}} </td> </tr> -->
+                    <tr> <th> start_time </th> <td> {{object.start_time}} </td> </tr>
+                    <tr> <th> start_time_ns </th> <td> {{object.start_time_ns}} </td> </tr>
+                    <tr> <th> duration </th> <td> {{object.duration|scientific}} </td> </tr>
+                    <tr> <th> peak_time </th> <td> {{object.peak_time}} </td> </tr>
+                    <tr> <th> peak_time_ns </th> <td> {{object.peak_time_ns}} </td> </tr>
+              </tbody></table>
+        </td>
+
+        <td>  <table class="event"> <tbody>
+                    <tr> <th> central_freq </th> <td> {{object.central_freq|floatformat:"-4"}} </td> </tr>
+                    <tr> <th> bandwidth </th> <td> {{object.bandwidth|floatformat:"-4"}} </td> </tr>
+                    <tr> <th> amplitude </th> <td> {{object.amplitude|scientific}} </td> </tr>
+                    <tr> <th> snr </th> <td> {{object.snr|floatformat:"-4"}} </td> </tr>
+                    <tr> <th> confidence </th> <td> {{object.confidence|scientific}} </td> </tr>
+                    <!-- <tr> <th> <div style="min-height:16px"> </div></th> <td> </td> </tr> -->
+              </tbody></table>
+        </td>
+
+        <td>  <table class="event"> <tbody>
+                    <tr> <th> false_alarm_rate </th> <td> {{object.false_alarm_rate|scientific}} </td> </tr>
+                    <tr> <th> ligo_axis_ra </th> <td> {{object.ligo_axis_ra|floatformat:"-4"}} </td> </tr>
+                    <tr> <th> ligo_axis_dec </th> <td> {{object.ligo_axis_dec|floatformat:"-4"}} </td> </tr>
+                    <tr> <th> ligo_angle </th> <td> {{object.ligo_angle}} </td> </tr>
+                    <tr> <th> ligo_angle_sig </th> <td> {{object.ligo_angle_sig}} </td></tr>
+                    <!-- <tr> <th> <div style="min-height:16px"> </div> </th> <td> </td> </tr> -->
+              </tbody></table>
+        </td>
+    </tr>
+</tbody> </table> 
+
+{% endblock %}
diff --git a/templates/gracedb/event_detail_HM.html b/templates/gracedb/event_detail_HM.html
new file mode 100644
index 0000000000000000000000000000000000000000..735c28dbfddfa175ac660ea6cb8204d642bd3fec
--- /dev/null
+++ b/templates/gracedb/event_detail_HM.html
@@ -0,0 +1,10 @@
+{% extends "gracedb/event_detail.html" %}
+
+{# Analysis-specific attributes for a LowMass event#}
+{% block analysis_specific %}
+ <p/>
+<h3>Analysis-specific attributes</h3>
+
+
+
+{% endblock %}
diff --git a/templates/gracedb/event_detail_LM.html b/templates/gracedb/event_detail_LM.html
new file mode 100644
index 0000000000000000000000000000000000000000..3a1e4dfeb5f7e217b731968383b5563e42ce6fc5
--- /dev/null
+++ b/templates/gracedb/event_detail_LM.html
@@ -0,0 +1,34 @@
+{% extends "gracedb/event_detail.html" %}
+
+{% load scientific %}
+
+{# Analysis-specific attributes for an LM event#}
+{% block analysis_specific %}
+<p/>
+<h3>Analysis-Specific Attributes</h3>
+
+<table> <tbody>
+    <tr>
+        <td>  <table class="event"> <tbody>
+                    <tr> <th> ifos </th> <td> {{object.ifos}} </td> </tr> 
+                    <tr> <th> end_time </th> <td> {{object.end_time}} </td> </tr>
+                    <tr> <th> end_time_ns </th> <td> {{object.end_time_ns}} </td> </tr>
+              </tbody></table>
+        </td>
+        <td>  <table class="event"> <tbody>
+                    <tr> <th> mass </th> <td> {{object.mass|floatformat:"-4"}} </td> </tr> 
+                    <tr> <th> mchirp </th> <td> {{object.mchirp|floatformat:"-4"}} </td> </tr>
+                    <tr> <th> minimum_duration </th> <td> {{object.minimum_duration|scientific}} </td> </tr>
+              </tbody></table>
+        </td>
+        <td>  <table class="event"> <tbody>
+                    <tr> <th> snr </th> <td> {{object.snr|floatformat:"-4"}} </td> </tr> 
+                    <tr> <th> false_alarm_rate </th> <td> {{object.false_alarm_rate|floatformat:"-4"}} </td> </tr>
+                    <tr> <th> combined_far </th> <td> {{object.combined_far|scientific}} </td> </tr>
+              </tbody></table>
+        </td>
+
+    </tr>
+</tbody> </table> 
+
+{% endblock %}
diff --git a/templates/gracedb/event_detail_MBTA.html b/templates/gracedb/event_detail_MBTA.html
new file mode 100644
index 0000000000000000000000000000000000000000..735c28dbfddfa175ac660ea6cb8204d642bd3fec
--- /dev/null
+++ b/templates/gracedb/event_detail_MBTA.html
@@ -0,0 +1,10 @@
+{% extends "gracedb/event_detail.html" %}
+
+{# Analysis-specific attributes for a LowMass event#}
+{% block analysis_specific %}
+ <p/>
+<h3>Analysis-specific attributes</h3>
+
+
+
+{% endblock %}