diff --git a/gracedb/api.py b/gracedb/api.py
index 20e2378252bc5e835664367b6e22d7525a65853b..4d7b7119b9b1a0c652034c53f00d4efcdffe64c0 100644
--- a/gracedb/api.py
+++ b/gracedb/api.py
@@ -174,7 +174,37 @@ class EventLogSerializer(serializers.ModelSerializer):
         fields = ('comment', 'issuer', 'created')
 #==================================================================
 # Custom renderers
-        
+
+def assembleLigoLw(eventDict):
+    from glue.ligolw import ligolw
+    # lsctables MUST be loaded before utils.
+    from glue.ligolw import lsctables
+    from glue.ligolw import utils
+    from glue.ligolw.utils import ligolw_add
+
+    xmldoc = ligolw.Document()
+    for e in eventDict:
+        fname = os.path.join(settings.GRACEDB_DATA_DIR, e['graceid'], "private", "coinc.xml")
+        utils.load_filename(fname, xmldoc=xmldoc)
+
+    ligolw_add.reassign_ids(xmldoc)
+    ligolw_add.merge_ligolws(xmldoc)
+    ligolw_add.merge_compatible_tables(xmldoc)
+    return xmldoc
+
+class LigoLwRenderer(BaseRenderer):
+    media_type = 'application/xml'
+    format = '.xml'
+
+    def render(self, data, media_type=None, renderer_context=None):
+        import StringIO
+        xmldoc = assembleLigoLw(data['events'])
+        # XXX Aaargh! Just give me the contents of the xml doc.
+        # I don't want to write it to a file.  Please don't make me.
+        output = StringIO.StringIO()
+        xmldoc.write(output)
+        return output.getvalue()
+
 class TSVRenderer(BaseRenderer):
     media_type = 'text/tab-separated-values'
     format = '.tsv'
@@ -193,6 +223,7 @@ class TSVRenderer(BaseRenderer):
         defaultAccess = lambda e, a: str(e.get(a,""))
 
         defaultColumns = "graceid,labels,group,analysisType,far,gpstime,created,dataurl"
+        # XXX Que monstroso!
         columns = renderer_context.get('kwargs', None).get('columns', None)
         if not columns:
             columns = defaultColumns
@@ -276,35 +307,11 @@ class EventList(APIView):
     """
     #model = Event
     #serializer_class = EventSerializer
-    ##renderer_classes = (JSONRenderer, JSONPRenderer, YAMLRenderer, XMLRenderer)
-    ##permission_classes = (AllowAny,)
-    ##authentication_classes = (authentication.SessionAuthentication,)
     authentication_classes = (LigoAuthentication,)
     permission_classes = (IsAuthenticated,)
     parser_classes = (parsers.MultiPartParser,)
-    # Branson messing.
-    renderer_classes = (JSONRenderer, BrowsableAPIRenderer, TSVRenderer,)
-    #renderer_classes = (JSONRenderer, BrowsableAPIRenderer, LIGOLWRenderer, TSVRenderer,)
-
-# XXX Need a LIGOLW renderer
-#   def cli_search(request):
-#      assert request.ligouser
-#      from views import assembleLigoLw
-#      form = SimpleSearchForm(request.POST)
-#      if form.is_valid():
-#          query = form.cleaned_data['query']
-#          objects = Event.objects.filter(query).distinct()
-
-#          if 'ligolw' in request.POST or 'ligolw' in request.GET:
-#              from glue.ligolw import utils
-#              if objects.count() > 1000:
-#                  return Response("Too many events.",
-#                          status=status.HTTP_400_BAD_REQUEST)
-#              xmldoc = assembleLigoLw(objects)
-#              response = HttpResponse(mimetype='application/xml')
-#              response['Content-Disposition'] = 'attachment; filename=gracedb-query.xml'
-#              utils.write_fileobj(xmldoc, response)
-#              return response
+    renderer_classes = (JSONRenderer, BrowsableAPIRenderer, LigoLwRenderer, TSVRenderer,)
+
     def __init__(self, **kwargs):
         # Try to define the logger in here.
         self.logger = logging.getLogger(__name__)
@@ -360,7 +367,13 @@ class EventList(APIView):
         # XXX One way of getting the columns into renderer_context.  Bizarre?
         setattr(self, 'kwargs', {'columns': columns})
         self.logger.debug("accepted_renderer = %s" % request.accepted_renderer)
-        return Response(rv)
+        try:
+            # If the rendering process fails, this will throw an exception.
+            resp = Response(rv)
+        except Exception, e:
+            # XXX Do something here.
+            pass
+        return resp
 
     def post(self, request, format=None):
         form = CreateEventForm(request.POST, request.FILES)