diff --git a/gracedb/api.py b/gracedb/api.py
index df040313e0ade7f69db18d40683c604f042d54ac..45c040b30fd5349d0a2746bb638308185c32603c 100644
--- a/gracedb/api.py
+++ b/gracedb/api.py
@@ -12,6 +12,7 @@ import json
 
 from gracedb.models import Event, Group, EventLog, Tag
 from gracedb.views import create_label, get_performance_info
+from gracedb.views import create_eel
 from translator import handle_uploaded_data
 
 from alert import issueAlertForUpdate
@@ -981,6 +982,113 @@ class EventLogDetail(APIView):
 
         return Response(eventLogToDict(rv, request=request))
 
+
+#==================================================================
+# EMBBEventLog
+# FIXME
+
+# Janky serialization
+def embbEventLogToDict(eel, request=None):
+    uri = None
+    taglist_uri = None
+    file_uri = None
+    if request:
+        uri = reverse("embbeventeel-detail",
+                args=[eel.event.graceid(), eel.N],
+                request=request)
+        if eel.filename:
+            actual_filename = eel.filename
+            if eel.file_version:
+                actual_filename += ',%d' % eel.file_version
+            filename = urlquote(actual_filename)
+            file_uri = reverse("files",
+                args=[eel.event.graceid(), filename],
+                request=request)
+
+    return {
+                "comment" : eel.comment,
+                "created" : eel.created,
+                "issuer"  : eel.issuer.username,
+                "self"    : uri,
+                "file"    : file_uri,
+           }
+
+class EMBBEventLogList(APIView):
+    """EMBB Event Log List Resource
+
+    POST param 'message'
+    """
+    authentication_classes = (LigoAuthentication,)
+    permission_classes = (IsAuthenticated,)
+
+    def get(self, request, graceid):
+        try:
+            event = Event.getByGraceid(graceid)
+        except Event.DoesNotExist:
+            # XXX Real error message.
+            return Response("Event does not exist.",
+                    status=status.HTTP_404_NOT_FOUND)
+        embblogset = event.embbeventlog_set.order_by("created","N")
+        count = embblogset.count()
+
+        eel = [ embbEventLogToDict(eel, request)
+                for eel in embblogset.iterator() ]
+
+        rv = {
+                'start': 0,
+                'numRows' : count,
+                'links' : {
+                    'self' : request.build_absolute_uri(),
+                    'first' : request.build_absolute_uri(),
+                    'last' : request.build_absolute_uri(),
+                    },
+                'embblog' : eel,
+             }
+        return Response(rv)
+
+
+
+    def post(self, request, graceid):
+        event = Event.getByGraceid(graceid)
+        # message -> comment
+
+        try:
+            eel = create_eel(request.DATA, event, request.user)
+        except Exception, e:
+            pass
+            # Since this is likely due to race conditions, we will return 503
+#            return Response("Failed to save log entry: %s" % str(e),
+#                    status=status.HTTP_503_SERVICE_UNAVAILABLE)
+
+        rv = embbEventLogToDict(eel, request=request)
+        response = Response(rv, status=status.HTTP_201_CREATED)
+        response['Location'] = rv['self']
+
+        # Issue alert.
+        description = "New EMBB log entry."
+
+        return response
+
+class EMBBEventLogDetail(APIView):
+    authentication_classes = (LigoAuthentication,)
+    permission_classes = (IsAuthenticated,)
+
+    def get(self, request, graceid, n):
+        try:
+            event = Event.getByGraceid(graceid)
+        except Event.DoesNotExist:
+            return Response("Event Not Found",
+                    status=status.HTTP_404_NOT_FOUND)
+        try:
+            rv = event.embbeventlog_set.filter(N=n)[0]
+        except:
+            return Response("Log Message Not Found",
+                    status=status.HTTP_404_NOT_FOUND)
+
+        return Response(embbEventLogToDict(rv, request=request))
+
+
+
 #==================================================================
 # Tags
 
diff --git a/gracedb/views.py b/gracedb/views.py
index d09f558493559e1f8efb1046a6148b13e54dd814..e386eac18c2158987211bdb20a6f2545fa4f61fb 100644
--- a/gracedb/views.py
+++ b/gracedb/views.py
@@ -1313,6 +1313,55 @@ def file_list(request, graceid):
         context,
         context_instance=RequestContext(request)) 
 
+def create_eel(d, event, user):        
+    # create a log entry
+    eel = EMBBEventLog(event=event)
+    eel.event = event
+    eel.submitter = user
+    # Assign a facility name
+    try:
+        facility_name = d.get('facility')
+        facility = EMFacility.objects.get(shortName=facility_name)
+        eel.facility = facility
+    except:
+        raise ValueError('Please specify a facility')
+
+    # Assign a facility-specific footprint ID (if provided)
+    try:
+        eel.footprintID = d.get('footprintID')
+    except: 
+        eel.footprintID = None
+
+    # Assign the EM spectrum string
+    try:
+        eel.waveband = d.get('waveband')
+    except:
+        raise ValueError('Please specify a waveband')
+
+    # Assign RA and Dec, plus widths
+    eel.ra = d.get('ra', None)
+    eel.dec = d.get('dec', None)
+    eel.raWidth = d.get('raWidth', None)
+    eel.decWidth = d.get('decWidth', None)
+
+    # Assign gpstime and duration.
+    eel.gpstime = d.get('gpstime', None)
+    eel.duration = d.get('duration', None)
+
+    # Assign EEL status and observation status.
+    try:
+        eel.eel_status = d.get('eel_status')
+    except: 
+        raise ValueError('Please specify an EEL status.')
+    try:
+        eel.obs_status = d.get('obs_status')
+    except: 
+        raise ValueError('Please specify an observation status.')
+
+    eel.extra_info_dict = d.get('extra_info_dict', None) 
+    eel.comment = d.get('comment', None) 
+    eel.save()
+
 # A view to create embb log entries
 def embblogentry(request, graceid, num=None):
     try:
@@ -1320,63 +1369,21 @@ def embblogentry(request, graceid, num=None):
     except Event.DoesNotExist:
         raise Http404
     if request.method == "POST":
-        # create a log entry
-        eel = EMBBEventLog(event=event)
-        eel.event = event
-        eel.submitter = request.user
-        # Assign a facility name
-        try:
-            facility_name = request.POST.get('facility')
-            facility = EMFacility.objects.get(shortName=facility_name)
-            eel.facility = facility
-        except Exception, e: 
-            return HttpResponseBadRequest('Please specifiy facility:' + str(e))
-
-        # Assign a facility-specific footprint ID (if provided)
         try:
-            eel.footprintID = request.POST.get('footprintID')
-        except: 
-            eel.footprintID = None
-
-        # Assign the EM spectrum string
-        try:
-            eel.waveband = request.POST.get('waveband')
-        except:
-            return HttpResponseBadRequest('Please specify a waveband.')
-
-        # Assign RA and Dec, plus widths
-        eel.ra = request.POST.get('ra', None)
-        eel.dec = request.POST.get('dec', None)
-        eel.raWidth = request.POST.get('raWidth', None)
-        eel.decWidth = request.POST.get('decWidth', None)
-    
-        # Assign gpstime and duration.
-        eel.gpstime = request.POST.get('gpstime', None)
-        eel.duration = request.POST.get('duration', None)
-
-        # Assign EEL status and observation status.
-        try:
-            eel.eel_status = request.POST.get('eel_status')
-        except: 
-            return HttpResponseBadRequest('Please specify an EEL status.')
-        try:
-            eel.obs_status = request.POST.get('obs_status')
-        except: 
-            return HttpResponseBadRequest('Please specify an observation status.')
-    
-        eel.extra_info_dict = request.POST.get('extra_info_dict', None) 
-        eel.comment = request.POST.get('comment', None) 
-        try:
-            eel.save()
-        except Exception as e:
-            # XXX I feel like this should be a 500 error.  
-            return HttpResponse("ERROR: %s" % str(e))
+            eel = create_eel(request.POST, event, request.user)
+        except ValueError, e:
+            return HttpResponseBadRequest(str(e))
+#        except RaceConditions, e:
+#            return HttpResponseInternalServerError(str(e))
+        except Exception:
+            pass
     else:
         try:
             eel = event.eventlog_set.filter(N=num)[0]
-        except Exception, e:
+        except Exception:
             raise Http404
 
+
     if not request.is_ajax():
         return HttpResponseRedirect(reverse(view, args=[graceid]))