diff --git a/gracedb/feeds.py b/gracedb/feeds.py
new file mode 100644
index 0000000000000000000000000000000000000000..a67398676d1bf6fdc9c5e18a62ff73ab8ae03073
--- /dev/null
+++ b/gracedb/feeds.py
@@ -0,0 +1,65 @@
+
+from django.contrib.syndication.feeds import FeedDoesNotExist
+from django.core.exceptions import ObjectDoesNotExist
+from django.contrib.syndication.feeds import Feed
+
+from django.core.urlresolvers import reverse
+from django.template import RequestContext
+from django.shortcuts import render_to_response
+
+from models import Event, Group
+from views import view
+
+class EventFeed(Feed):
+    def get_object(self, bits):
+        # [] , ['cbc'], ['cbc','lowmass']
+        if len(bits) not in [0,1,2]:
+            raise FeedDoesNotExist
+        if not bits:
+            title = "GraCEDB Events"
+            objs = Event.objects.order_by("-id")
+        else:
+            group = Group.objects.filter(name__iexact=bits[0])
+            if not group.count():
+                raise FeedDoesNotExist
+            group = group[0]
+            objs = Event.objects.filter(group=group)
+            if len(bits) == 1:
+                title = "GraCEDB Events for %s Group" % group.name
+            else:
+                requestedtype = bits[1]
+                type = [(c,t) for (c,t) in Event.ANALYSIS_TYPE_CHOICES \
+                        if t.lower() == requestedtype]
+                if not type:
+                    raise FeedDoesNotExist
+                typecode, type = type[0]
+                title = "GraCEDB Events for %s / %s" % (group.name, type)
+                objs = objs.filter(analysisType=typecode)
+        return title, objs[:10]
+
+    def title(self, obj):
+        title, _ = obj
+        return title
+
+    def link(self, obj):
+        # XXX  WHAT is THIS??
+        # Breaks the feed if it's not there.  Appears in <link> tags.  Eh?
+        return "/linky"
+
+    def item_link(self, obj):
+        return reverse(view, args=[obj.graceid()])
+
+    def description(self, obj):
+        # XXX Descriptive text for the feed itself.
+        # I don't know what to put here
+        return ""
+
+    def items(self, obj):
+        _, x = obj
+        return x
+
+def feedview(request):
+    return render_to_response(
+            'feeds/index.html',
+            {},
+            context_instance=RequestContext(request))
diff --git a/gracedb/models.py b/gracedb/models.py
index 46237bab9cc96b7dc28f848fd45b7d1fa4544985..3ab65516d2a0725b96ae50a127a25eb5668a658e 100644
--- a/gracedb/models.py
+++ b/gracedb/models.py
@@ -45,7 +45,7 @@ class Event(models.Model):
         ("Q",   "Q"),
         ("X",   "X"),
         ("CWB", "CWB"),
-        ("MBTA", "MBTA Online"),
+        ("MBTA", "MBTAOnline"),
     )
     submitter = models.ForeignKey(User)
     created = models.DateTimeField(auto_now_add=True)
@@ -81,6 +81,13 @@ class Event(models.Model):
     def virgoApproved(self):
         return self.approval_set.filter(approvingCollaboration='V').count()
 
+    @classmethod
+    def getByGraceid(cls, id):
+        if not id: return None
+        if id[0] == "G":
+            return cls.objects.get(id=int(id[1:]))
+        return cls.objects.get(uid=id)
+
 class Approval(models.Model):
     COLLABORATION_CHOICES = ( ('L','LIGO'), ('V','Virgo'), )
     approver = models.ForeignKey(User)
diff --git a/gracedb/urls.py b/gracedb/urls.py
index 6c80eed0e96b0f9b11fea57073375a7c4dec9a14..56f0900ad55188717573eb961c9485285822de2a 100644
--- a/gracedb/urls.py
+++ b/gracedb/urls.py
@@ -7,6 +7,8 @@ urlpatterns = patterns('gracedb.gracedb.views',
     (r'^$', 'index'),
     url (r'^create/$', 'create', name="create"),
     url (r'^search/$', 'search', name="search"),
+    url (r'^view/(?P<graceid>[\w\d]+)', 'view', name="view"),
+
 #   (r'^view/(?P<uid>[\w\d]+)', 'view'),
 #   (r'^edit/(?P<uid>[\w\d]+)', 'edit'),
 #   (r'^request_archive/(?P<uid>[\w\d]+)(?P<rescind>/rescind)?', 'request_archive'),
diff --git a/gracedb/views.py b/gracedb/views.py
index 937bfebd5a865ba794c40e2b3e5e5928ca7672e5..04650f798819895dc80a91221722b2bad4d851ef 100644
--- a/gracedb/views.py
+++ b/gracedb/views.py
@@ -16,7 +16,6 @@ def index(request):
 #   assert request.ligouser
     return render_to_response(
             'gracedb/index.html',
-#           {'hi':request.ligouser},
             {},
             context_instance=RequestContext(request))
 
@@ -102,6 +101,16 @@ def create(request):
                 { 'form' : form },
                 context_instance=RequestContext(request))
 
+def view(request, graceid):
+    context = {}
+    a = Event.getByGraceid(graceid)
+    if not a:
+        return HttpResponseNotFound()
+    context['object'] = a
+    return render_to_response(
+        'gracedb/event_detail.html',
+        context,
+        context_instance=RequestContext(request))
 
 def search(request):
     assert request.ligouser
diff --git a/settings.py b/settings.py
index a10506e9ff691c3278138730729e5c047092665c..de978c921b3c899ac7a9919a95f0963e3d89d931 100644
--- a/settings.py
+++ b/settings.py
@@ -93,6 +93,6 @@ INSTALLED_APPS = (
     'django.contrib.admin',
     'django.contrib.contenttypes',
     'django.contrib.sessions',
-    'django.contrib.sites',
+    #'django.contrib.sites',
     'gracedb.gracedb',
 )
diff --git a/settings_dev.py b/settings_dev.py
index 0a0a43fd6d4f489800e187e31e9750adaa9ceaeb..e1ebcee5867ddceedd21326919f513287ba59913 100644
--- a/settings_dev.py
+++ b/settings_dev.py
@@ -90,6 +90,6 @@ INSTALLED_APPS = (
     'django.contrib.admin',
     'django.contrib.contenttypes',
     'django.contrib.sessions',
-    'django.contrib.sites',
+    #'django.contrib.sites',
     'gracedb.gracedb',
 )
diff --git a/templates/feeds/index.html b/templates/feeds/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..154b03cecee6fddff09034b135f48c457e8a1127
--- /dev/null
+++ b/templates/feeds/index.html
@@ -0,0 +1,39 @@
+{% extends "base.html" %}
+
+{% block title %}RSS Feeds{% endblock %}
+{% block heading %}GraceDB{% endblock %}
+
+{% block content %}
+
+<h2>RSS Feeds</h2>
+<p>
+<a href="/gracedb/feeds/latest/">All Latest Events</a>
+  <ul>
+    <li><a href="/gracedb/feeds/latest/burst/">Burst</a></li>
+      <ul>
+        <li><a href="/gracedb/feeds/latest/burst/omega">Omega</a></li>
+        <li><a href="/gracedb/feeds/latest/burst/q">Q</a></li>
+        <li><a href="/gracedb/feeds/latest/burst/x">X</a></li>
+      </ul>
+  </ul>
+
+  <ul>
+    <li><a href="/gracedb/feeds/latest/cbc/">CBC</a></li>
+      <ul>
+        <li><a href="/gracedb/feeds/latest/cbc/lowmass">Low Mass</a></li>
+        <li><a href="/gracedb/feeds/latest/cbc/highmass">High Mass</a></li>
+        <li><a href="/gracedb/feeds/latest/cbc/grb">GRB</a></li>
+        <li><a href="/gracedb/feeds/latest/cbc/ringdown">Ringdown</a></li>
+        <li><a href="/gracedb/feeds/latest/cbs/mbtaonline">MBTA Online</a></li>
+      </ul>
+  </ul>
+
+  <ul>
+    <li><a href="/gracedb/feeds/latest/stochastic/">Stochastic</a></li>
+      <ul>
+        <li><a href="/gracedb/feeds/latest/stochastic/cwb">CWB</a></li>
+      </ul>
+  </ul>
+</p>
+
+{% endblock %}
diff --git a/templates/feeds/latest_description.html b/templates/feeds/latest_description.html
new file mode 100644
index 0000000000000000000000000000000000000000..61dd235691b95003fc83352b5119af871325d40e
--- /dev/null
+++ b/templates/feeds/latest_description.html
@@ -0,0 +1,6 @@
+<ul>
+    <li><a href="{{ obj.weburl }}">Data</a></li>
+    <li><a href="{{ obj.wikiurl }}">TWiki</a></li>
+</ul>
+Sumbmitter: {{ obj.submitter.name }}<br/>
+Created: {{ obj.created }}
diff --git a/templates/feeds/latest_title.html b/templates/feeds/latest_title.html
new file mode 100644
index 0000000000000000000000000000000000000000..d0b8c11b23bce87dc4fcff131e4bcfc904817976
--- /dev/null
+++ b/templates/feeds/latest_title.html
@@ -0,0 +1 @@
+{{ obj.graceid }} {{ obj.group.name }} / {{ obj.get_analysisType_display }}
diff --git a/templates/gracedb/event_detail.html b/templates/gracedb/event_detail.html
new file mode 100644
index 0000000000000000000000000000000000000000..a3266ad9da929b6d4d6e112f60dfc48649a698a3
--- /dev/null
+++ b/templates/gracedb/event_detail.html
@@ -0,0 +1,21 @@
+{% extends "base.html" %}
+
+{% block title %}View {{ object.graceid }}{% endblock %}
+{% block heading %}View {{ object.graceid }}{% endblock %}
+
+{% block content %}
+<p>{{ message }}</p>
+
+<table>
+  <tr><th>ID</th><td>{{ object.graceid }}</td></tr>
+  <tr><th>Data</th><td>
+    <a href="{{ object.weburl }}">{{ object.weburl }}</a>
+    </td></tr>
+  <tr><th>TWiki</th><td>
+    <a href="{{ object.wikiurl }}">{{ object.wikiurl }}</a>
+    </td></tr>
+  <tr><th>Sumitter</th><td>{{ object.submitter.name }}</td></tr>
+  <tr><th>Created</th><td>{{ object.created }}</td></tr>
+</table>
+
+{% endblock %}
diff --git a/urls.py b/urls.py
index 3d7a2033d441d13f3b8216c8b46988c1c9a963d3..50b8bdc4c3c672dc21005cea32c7b135b5b6d5b4 100644
--- a/urls.py
+++ b/urls.py
@@ -4,13 +4,20 @@ from django.conf.urls.defaults import *
 from django.contrib import admin
 admin.autodiscover()
 
+from gracedb.feeds import EventFeed, feedview
+
+feeds = {
+    'latest' : EventFeed
+}
+
 urlpatterns = patterns('',
-    # Example:
-    # (r'^gracedb/', include('gracedb.foo.urls')),
 
     (r'^$', 'gracedb.gracedb.views.index'),
     (r'^events/', include('gracedb.gracedb.urls')),
     (r'^cli/create', 'gracedb.gracedb.views.create'),
+    (r'^feeds/(?P<url>.*)/$', 'django.contrib.syndication.views.feed', 
+        {'feed_dict': feeds}),
+    (r'^feeds/$', feedview),
 
     # Uncomment the admin/doc line below and add 'django.contrib.admindocs' 
     # to INSTALLED_APPS to enable admin documentation: