diff --git a/docs/admin_docs/source/miscellaneous.rst b/docs/admin_docs/source/miscellaneous.rst
index d38babc086a846ceff8da49629ed2001a05dfe4d..34c81e7df8f277620abcbccb73599242d9019ce8 100644
--- a/docs/admin_docs/source/miscellaneous.rst
+++ b/docs/admin_docs/source/miscellaneous.rst
@@ -60,7 +60,7 @@ for all gstlal events during O1::
     if f.is_valid():
         objects = form.cleaned_data['query']
         for object in objects:
-            f.write('%s\n' % object.graceid())
+            f.write('%s\n' % object.graceid)
     f.close()
 
 Now, go to the data directory root ``/opt/gracedb/data`` and temporarily 
diff --git a/gracedb/alerts/email.py b/gracedb/alerts/email.py
index 818e8d07c547c0248242dfd68c4ad2d9d7369dea..44edd66149936cc2538199c9fd74575012d577df 100644
--- a/gracedb/alerts/email.py
+++ b/gracedb/alerts/email.py
@@ -74,12 +74,12 @@ def issueAlertForLabel(event, label, doxmpp, serialized_event=None, event_url=No
                 phoneRecips.append(recip)
 
     if event.search:
-        subject = "[gracedb] %s / %s / %s / %s" % (label.name, event.pipeline.name, event.search.name, event.graceid())
+        subject = "[gracedb] %s / %s / %s / %s" % (label.name, event.pipeline.name, event.search.name, event.graceid)
     else:
-        subject = "[gracedb] %s / %s / %s" % (label.name, event.pipeline.name, event.graceid())
+        subject = "[gracedb] %s / %s / %s" % (label.name, event.pipeline.name, event.graceid)
 
     message = "A %s event with graceid %s was labeled with %s" % \
-              (event.pipeline.name, event.graceid(), label.name)
+              (event.pipeline.name, event.graceid, label.name)
     if event_url:
         message += '\n\n%s' % event_url
 
@@ -141,7 +141,7 @@ def issueEmailAlert(event, event_url):
                     if recip.email:
                         bccaddresses.append(recip.email)
 
-    subject = "[gracedb] %s event. ID: %s" % (event.pipeline.name, event.graceid())
+    subject = "[gracedb] %s event. ID: %s" % (event.pipeline.name, event.graceid)
     message = """
 New Event
 %s / %s
@@ -154,7 +154,7 @@ Event Summary:
 """
     message %= (event.group.name,
                 event.pipeline.name,
-                event.graceid(),
+                event.graceid,
                 event_url,
                 event.weburl(),
                 "%s %s" % (event.submitter.first_name, event.submitter.last_name),
@@ -205,12 +205,12 @@ def issueXMPPAlert(event, location, alert_type="new", description="", serialized
         nodename = nodename + "_%s" % event.search.name.lower()
         nodenames.append(nodename)
 
-    log.debug('issueXMPPAlert: %s' % event.graceid())
+    log.debug('issueXMPPAlert: %s' % event.graceid)
 
     # Create the output dictionary and serialize as JSON.
     lva_data = {
         'file': location,
-        'uid': event.graceid(),
+        'uid': event.graceid,
         'alert_type': alert_type,
         # The following string cast is necessary because sometimes 
         # description is a label object!
@@ -232,7 +232,7 @@ def issueXMPPAlert(event, location, alert_type="new", description="", serialized
             if settings.USE_LVALERT_OVERSEER:
                 # Calculate unique message_id and log
                 message_id = sha1(nodename + msg).hexdigest()
-                log.info("issueXMPPAlert: sending %s,%s,%s to node %s" % (event.graceid(), alert_type, message_id, nodename))
+                log.info("issueXMPPAlert: sending %s,%s,%s to node %s" % (event.graceid, alert_type, message_id, nodename))
 
                 rdict = manager.dict()
                 msg_dict = {'node_name': nodename, 'message': msg, 'action': 'push'}
diff --git a/gracedb/alerts/phone.py b/gracedb/alerts/phone.py
index ddaefd82625bb44c1f1909f97ffb817c162f7807..f1d22956eb57d35e45d77451615a47470aaa5b1d 100644
--- a/gracedb/alerts/phone.py
+++ b/gracedb/alerts/phone.py
@@ -64,7 +64,7 @@ def issue_phone_alerts(event, contacts, label=None):
     # Compile Twilio voice URL and message body
     msg_params = {
         'pipeline': event.pipeline.name,
-        'graceid': event.graceid(),
+        'graceid': event.graceid,
         'server': hostname,
     }
     if alert_type == "label_added":
diff --git a/gracedb/alerts/xmpp.py b/gracedb/alerts/xmpp.py
index 2b7f712ad5152d4cc3b95a9d1b3ca7abc633ce30..cb136a708e6536607c6dda87412b2ad17bd7fcf2 100644
--- a/gracedb/alerts/xmpp.py
+++ b/gracedb/alerts/xmpp.py
@@ -76,12 +76,8 @@ def issue_xmpp_alerts(event_or_superevent, alert_type, serialized_object,
     # Determine LVAlert node names
     node_names = get_xmpp_node_names(event_or_superevent)
 
-    # Get uid - FIXME when graceid is switched to a property for events
-    # instead of a callable
-    if is_event(event_or_superevent):
-        uid = event_or_superevent.graceid()
-    else:
-        uid = event_or_superevent.graceid
+    # Get uid
+    uid = event_or_superevent.graceid
 
     # Create the output dictionary and serialize as JSON.
     lva_data = {
diff --git a/gracedb/api/v1/events/views.py b/gracedb/api/v1/events/views.py
index 17b0d037f3db5e4c988e41fe3772b89e1185a021..73394b9b544b6bb42c67e4e83bb107f47a1c4162 100644
--- a/gracedb/api/v1/events/views.py
+++ b/gracedb/api/v1/events/views.py
@@ -189,7 +189,7 @@ def event_perm_object_required(view):
 #
 #    def get_labels(self,obj):
 #        request = self.context['request']
-#        graceid = obj.graceid()
+#        graceid = obj.graceid
 #        return dict([
 #            (labelling.label.name,
 #                reverse("labels",
@@ -199,7 +199,7 @@ def event_perm_object_required(view):
 #
 #    def get_links(self,obj):
 #        request = self.context['request']
-#        graceid = obj.graceid()
+#        graceid = obj.graceid
 #        return {
 #            "neighbors" : reverse("neighbors", args=[graceid], request=request),
 #            "log"   : reverse("eventlog-list", args=[graceid], request=request),
@@ -485,7 +485,7 @@ class EventList(APIView):
                 response = Response(rv, status=status.HTTP_201_CREATED)
                 response["Location"] = api_reverse(
                         'events:event-detail',
-                        args=[event.graceid()],
+                        args=[event.graceid],
                         request=request)
                 return response
             else: # no event created
@@ -663,7 +663,7 @@ class EventNeighbors(APIView):
                 'links' : {
                     'self': request.build_absolute_uri(),
                     'event': api_reverse("events:event-detail",
-                        args=[event.graceid()], request=request),
+                        args=[event.graceid], request=request),
                     }
                 })
 
@@ -693,7 +693,7 @@ class EventLabel(APIView):
                 'links' : [{
                     'self': request.build_absolute_uri(),
                     'event': api_reverse("events:event-detail",
-                        args=[event.graceid()],
+                        args=[event.graceid],
                         request=request),
                     }],
                 'labels': labels
@@ -835,7 +835,7 @@ class EventLogList(APIView):
                     request.data['displayName'] = displayNames[i]
 
                 tmp = EventLogTagDetail()
-                retval = tmp.put(request, event.graceid(), n, tagname) 
+                retval = tmp.put(request, event.graceid, n, tagname) 
                 # XXX This seems like a bizarre way of getting an error message out.
                 if retval.status_code != 201:
                     return Response(('Log message created, but error creating '
@@ -1043,18 +1043,18 @@ def tagToDict(tag, columns=None, request=None, event=None, n=None):
             # We want a link to the self only.  End of the line.
             rv['links'] = {
                             "self" : api_reverse("events:eventlogtag-detail",
-                                             args=[event.graceid(),n,tag.name],
+                                             args=[event.graceid,n,tag.name],
                                              request=request)
                           }
         else:
             # Links to all log messages of the event with this tag.
             rv['links'] = {
                             "logs" : [api_reverse("events:eventlog-detail", 
-                                              args=[event.graceid(),log.N], 
+                                              args=[event.graceid,log.N], 
                                               request=request) 
                                       for log in event.getLogsForTag(tag.name)],
                             "self" : api_reverse("events:eventtag-detail",
-                                             args=[event.graceid(),tag.name],
+                                             args=[event.graceid,tag.name],
                                              request=request)
                           }
     else:
@@ -1063,7 +1063,7 @@ def tagToDict(tag, columns=None, request=None, event=None, n=None):
         pass
 #         rv['links'] = {
 #                         "events" : [reverse("event-detail", 
-#                                             args=[event.graceid()], 
+#                                             args=[event.graceid], 
 #                                             request=request) 
 #                                     for event in tag.getEvents()],
 #                         "self"   : reverse("tag-detail",
@@ -1104,7 +1104,7 @@ class EventTagList(APIView):
                 'tags' : [
                     {
                         'self': api_reverse("events:eventtag-detail",
-                            args=[event.graceid(), tag.name], request=request),
+                            args=[event.graceid, tag.name], request=request),
                         'name': tag.name,
                         'displayName': tag.displayName
                     }
@@ -1142,7 +1142,7 @@ class EventLogTagList(APIView):
                 'tags' : [
                     {
                         'self': api_reverse("events:eventlogtag-detail",
-                            args=[event.graceid(), eventlog.N, tag.name],
+                            args=[event.graceid, eventlog.N, tag.name],
                             request=request),
                         'name': tag.name,
                         'displayName': tag.displayName
@@ -1277,7 +1277,7 @@ class EventPermissionList(APIView):
         links['groupeventpermissions'] = out_dict
         for group in groups:
             out_dict[group.name] = api_reverse("events:groupeventpermission-list", 
-                args=[event.graceid(),group.name], request=request) 
+                args=[event.graceid,group.name], request=request) 
         return Response(rv, status=status.HTTP_200_OK)            
 
 class GroupEventPermissionList(APIView):
@@ -1454,7 +1454,7 @@ class Files(APIView):
     def get(self, request, event, filename=""):
         # Do not filename to be None.  That messes up later os.path.join
         filename = filename or ""
-        graceid = event.graceid()
+        graceid = event.graceid
 
         filepath = os.path.join(event.datadir, filename)
 
@@ -1533,7 +1533,7 @@ class Files(APIView):
             longname = fdest.name
             shortname = longname[longname.rfind(filename):]
             rv['permalink'] = api_reverse(
-                    "events:files", args=[event.graceid(), shortname], request=request)
+                    "events:files", args=[event.graceid, shortname], request=request)
             response = Response(rv, status=status.HTTP_201_CREATED)
         except Exception, e:
             # XXX This needs some thought.
@@ -1647,7 +1647,7 @@ class VOEventList(APIView):
             return Response({'error': msg}, status = status.HTTP_400_BAD_REQUEST)
 
         voevent_display_type = dict(VOEvent.VOEVENT_TYPE_CHOICES)[voevent_type].capitalize()
-        filename = "%s-%d-%s.xml" % (event.graceid(), voevent.N, voevent_display_type)
+        filename = "%s-%d-%s.xml" % (event.graceid, voevent.N, voevent_display_type)
         filepath = os.path.join(event.datadir, filename)
         fdest = VersionedFile(filepath, 'w')
         fdest.write(voevent_text)
@@ -1671,11 +1671,11 @@ class VOEventList(APIView):
             logentry.save()
         except Exception as e:
             rv['warnings'] = 'Problem saving log entry for VOEvent %s of %s' % (voevent.N, 
-                event.graceid()) 
+                event.graceid) 
 
         # Tag log entry as 'em_follow')
         tmp = EventLogTagDetail()
-        retval = tmp.put(request, event.graceid(), logentry.N, 'em_follow')
+        retval = tmp.put(request, event.graceid, logentry.N, 'em_follow')
         # XXX This seems like a bizarre way of getting an error message out.
         if retval.status_code != 201:
             return Response(('VOEvent log message created, but error tagging '
diff --git a/gracedb/api/v1/superevents/serializers.py b/gracedb/api/v1/superevents/serializers.py
index f85e53e9c2308a0449653af83bbc3acceb204a37..b341f4b2f4f42fd078219bf8fd4d966cb5e611bd 100644
--- a/gracedb/api/v1/superevents/serializers.py
+++ b/gracedb/api/v1/superevents/serializers.py
@@ -81,12 +81,12 @@ class SupereventSerializer(serializers.ModelSerializer):
         # Make sure preferred_event is not already assigned
         if (preferred_event.superevent or hasattr(preferred_event,
             'superevent_preferred_for')):
-            self.fail('event_assigned', graceid=preferred_event.graceid())
+            self.fail('event_assigned', graceid=preferred_event.graceid)
 
         # Check that preferred_event has the correct type for the superevent
         # it's being assigned to
         if not Superevent.event_category_check(preferred_event, category):
-            self.fail('category_mismatch', graceid=preferred_event.graceid(),
+            self.fail('category_mismatch', graceid=preferred_event.graceid,
                 e_category=preferred_event.get_event_category(),
                 s_category=category_display)
 
@@ -94,10 +94,10 @@ class SupereventSerializer(serializers.ModelSerializer):
         if events:
             for ev in events:
                 if (ev.superevent or hasattr(ev, 'superevent_preferred_for')):
-                    self.fail('event_assigned', graceid=ev.graceid())
+                    self.fail('event_assigned', graceid=ev.graceid)
                 # Check each event for type compatibility
                 if not Superevent.event_category_check(ev, category):
-                    self.fail('category_mismatch', graceid=ev.graceid(),
+                    self.fail('category_mismatch', graceid=ev.graceid,
                         e_category=ev.get_event_category(),
                         s_category=category_display)
 
@@ -122,10 +122,10 @@ class SupereventSerializer(serializers.ModelSerializer):
 
     # Custom method fields ----------------------------------------------------
     def get_gw_events(self, obj):
-        return [ev.graceid() for ev in obj.get_internal_events()]
+        return [ev.graceid for ev in obj.get_internal_events()]
 
     def get_em_events(self, obj):
-        return [ev.graceid() for ev in obj.get_external_events()]
+        return [ev.graceid for ev in obj.get_external_events()]
 
     def get_links(self, obj):
         bound_reverse = functools.partial(api_reverse,
@@ -186,7 +186,7 @@ class SupereventUpdateSerializer(SupereventSerializer):
                 self.instance) or hasattr(preferred_event,
                 'superevent_preferred_for') and \
                 preferred_event.superevent_preferred_for != self.instance):
-                self.fail('event_assigned', graceid=preferred_event.graceid())
+                self.fail('event_assigned', graceid=preferred_event.graceid)
 
         return updated_attributes
 
@@ -227,7 +227,7 @@ class SupereventEventSerializer(serializers.ModelSerializer):
         fields = ('self', 'graceid', 'event', 'superevent', 'user')
 
     def get_self(self, obj):
-        return api_reverse('events:event-detail', args=[obj.graceid()],
+        return api_reverse('events:event-detail', args=[obj.graceid],
             request=self.context.get('request', None))
 
     def validate(self, data):
@@ -237,12 +237,12 @@ class SupereventEventSerializer(serializers.ModelSerializer):
 
         # Check if event is already assigned to a superevent
         if (event.superevent or hasattr(event, 'superevent_preferred_for')):
-            self.fail('event_assigned', graceid=event.graceid())
+            self.fail('event_assigned', graceid=event.graceid)
 
         # Check that event has the correct type for the superevent it's being
         # assigned to
         if not superevent.event_compatible(event):
-            self.fail('category_mismatch', graceid=event.graceid(),
+            self.fail('category_mismatch', graceid=event.graceid,
                 e_category=event.get_event_category(),
                 s_category=superevent.get_category_display())
 
diff --git a/gracedb/api/v1/superevents/tests/test_access.py b/gracedb/api/v1/superevents/tests/test_access.py
index 71254416a63d54349362d09891ddc384aa9f832a..d15824859a072e728968aa7871665afe974de6cf 100644
--- a/gracedb/api/v1/superevents/tests/test_access.py
+++ b/gracedb/api/v1/superevents/tests/test_access.py
@@ -103,15 +103,15 @@ class TestSupereventListPost(SupereventManagersGroupAndUserSetup,
             't_end': 2,
         }
         cls.production_superevent_data = {
-            'preferred_event': p_ev.graceid(),
+            'preferred_event': p_ev.graceid,
             'category': Superevent.SUPEREVENT_CATEGORY_PRODUCTION,
         }
         cls.test_superevent_data = {
-            'preferred_event': t_ev.graceid(),
+            'preferred_event': t_ev.graceid,
             'category': Superevent.SUPEREVENT_CATEGORY_TEST,
         }
         cls.mdc_superevent_data = {
-            'preferred_event': m_ev.graceid(),
+            'preferred_event': m_ev.graceid,
             'category': Superevent.SUPEREVENT_CATEGORY_MDC,
         }
         cls.production_superevent_data.update(base_superevent_data)
@@ -782,7 +782,7 @@ class TestSupereventEventList(SupereventManagersGroupAndUserSetup,
             self.assertEqual(len(response.data['events']), s.events.count())
             graceid_list = [ev['graceid'] for ev in response.data['events']]
             for ev in s.events.all():
-                self.assertIn(ev.graceid(), graceid_list)
+                self.assertIn(ev.graceid, graceid_list)
 
     def test_lvem_get_no_view_perms(self):
         """LV-EM user can't see events for internal-only superevent"""
@@ -807,7 +807,7 @@ class TestSupereventEventList(SupereventManagersGroupAndUserSetup,
             self.lvem_superevent.events.count())
         graceid_list = [ev['graceid'] for ev in data['events']]
         for ev in self.lvem_superevent.events.all():
-            self.assertIn(ev.graceid(), graceid_list)
+            self.assertIn(ev.graceid, graceid_list)
 
     def test_public_get_no_view_perms(self):
         """Public user can't see events for non-public superevents"""
@@ -843,7 +843,7 @@ class TestSupereventEventList(SupereventManagersGroupAndUserSetup,
         url = v_reverse('superevents:superevent-event-list',
             args=[self.internal_superevent.superevent_id])
         response = self.request_as_user(url, "POST", self.internal_user,
-            data={'event': ev.graceid()})
+            data={'event': ev.graceid})
         self.assertEqual(response.status_code, 403)
 
     def test_basic_internal_post_mdc(self):
@@ -858,7 +858,7 @@ class TestSupereventEventList(SupereventManagersGroupAndUserSetup,
         url = v_reverse('superevents:superevent-event-list',
             args=[s.superevent_id])
         response = self.request_as_user(url, "POST", self.internal_user,
-            data={'event': ev.graceid()})
+            data={'event': ev.graceid})
         self.assertEqual(response.status_code, 403)
 
     def test_basic_internal_post_test(self):
@@ -873,9 +873,9 @@ class TestSupereventEventList(SupereventManagersGroupAndUserSetup,
         url = v_reverse('superevents:superevent-event-list',
             args=[s.superevent_id])
         response = self.request_as_user(url, "POST", self.internal_user,
-            data={'event': ev.graceid()})
+            data={'event': ev.graceid})
         self.assertEqual(response.status_code, 201)
-        self.assertEqual(response.data['graceid'], ev.graceid())
+        self.assertEqual(response.data['graceid'], ev.graceid)
 
     def test_privileged_internal_post_production(self):
         """Privileged internal user can add events to production superevents"""
@@ -887,9 +887,9 @@ class TestSupereventEventList(SupereventManagersGroupAndUserSetup,
         url = v_reverse('superevents:superevent-event-list',
             args=[self.internal_superevent.superevent_id])
         response = self.request_as_user(url, "POST", self.sm_user,
-            data={'event': ev.graceid()})
+            data={'event': ev.graceid})
         self.assertEqual(response.status_code, 201)
-        self.assertEqual(response.data['graceid'], ev.graceid())
+        self.assertEqual(response.data['graceid'], ev.graceid)
 
     def test_privileged_internal_post_mdc(self):
         """Privileged internal user can add events to mdc superevents"""
@@ -903,9 +903,9 @@ class TestSupereventEventList(SupereventManagersGroupAndUserSetup,
         url = v_reverse('superevents:superevent-event-list',
             args=[s.superevent_id])
         response = self.request_as_user(url, "POST", self.sm_user,
-            data={'event': ev.graceid()})
+            data={'event': ev.graceid})
         self.assertEqual(response.status_code, 201)
-        self.assertEqual(response.data['graceid'], ev.graceid())
+        self.assertEqual(response.data['graceid'], ev.graceid)
 
     def test_privileged_internal_post_test(self):
         """Privileged internal user can add events to test superevents"""
@@ -919,9 +919,9 @@ class TestSupereventEventList(SupereventManagersGroupAndUserSetup,
         url = v_reverse('superevents:superevent-event-list',
             args=[s.superevent_id])
         response = self.request_as_user(url, "POST", self.sm_user,
-            data={'event': ev.graceid()})
+            data={'event': ev.graceid})
         self.assertEqual(response.status_code, 201)
-        self.assertEqual(response.data['graceid'], ev.graceid())
+        self.assertEqual(response.data['graceid'], ev.graceid)
 
     def test_lvem_user_post(self):
         """LV-EM user can't add events to superevents"""
@@ -934,14 +934,14 @@ class TestSupereventEventList(SupereventManagersGroupAndUserSetup,
         url = v_reverse('superevents:superevent-event-list',
             args=[self.internal_superevent.superevent_id])
         response = self.request_as_user(url, "POST", self.lvem_user,
-            data={'event': ev.graceid()})
+            data={'event': ev.graceid})
         self.assertEqual(response.status_code, 404)
 
         # Expose superevent and retry, should get 403 now
         assign_perm('superevent.view_superevent', self.lvem_group,
             obj=self.internal_superevent)
         response = self.request_as_user(url, "POST", self.lvem_user,
-            data={'event': ev.graceid()})
+            data={'event': ev.graceid})
         self.assertEqual(response.status_code, 403)
 
     def test_public_user_post(self):
@@ -955,7 +955,7 @@ class TestSupereventEventList(SupereventManagersGroupAndUserSetup,
         url = v_reverse('superevents:superevent-event-list',
             args=[self.internal_superevent.superevent_id])
         response = self.request_as_user(url, "POST",
-            data={'event': ev.graceid()})
+            data={'event': ev.graceid})
         self.assertEqual(response.status_code, 403)
         # TODO: this is 403 for now, will be 404 in the future
 
@@ -986,18 +986,18 @@ class TestSupereventEventDetail(SupereventManagersGroupAndUserSetup,
             for ev in s.events.all():
                 # Set up URL
                 url = v_reverse('superevents:superevent-event-detail',
-                    args=[s.superevent_id, ev.graceid()])
+                    args=[s.superevent_id, ev.graceid])
                 # Get response and check code
                 response = self.request_as_user(url, "GET", self.internal_user)
                 self.assertEqual(response.status_code, 200)
                 # Check event number and graceids
-                self.assertEqual(response.data['graceid'], ev.graceid())
+                self.assertEqual(response.data['graceid'], ev.graceid)
 
     def test_lvem_get_no_view_perms(self):
         """LV-EM user can't see events for internal-only superevent"""
         for ev in self.internal_superevent.events.all():
             url = v_reverse('superevents:superevent-event-detail',
-                args=[self.internal_superevent.superevent_id, ev.graceid()])
+                args=[self.internal_superevent.superevent_id, ev.graceid])
             response = self.request_as_user(url, "GET", self.lvem_user)
             # Should get 404 response - because of filtering, this superevent
             # should be excluded from the queryset
@@ -1009,18 +1009,18 @@ class TestSupereventEventDetail(SupereventManagersGroupAndUserSetup,
         #       don't show events in the list if they aren't exposed?
         for ev in self.lvem_superevent.events.all():
             url = v_reverse('superevents:superevent-event-detail',
-                args=[self.lvem_superevent.superevent_id, ev.graceid()])
+                args=[self.lvem_superevent.superevent_id, ev.graceid])
             response = self.request_as_user(url, "GET", self.lvem_user)
             self.assertEqual(response.status_code, 200)
             # Check response data
-            self.assertEqual(response.data['graceid'], ev.graceid())
+            self.assertEqual(response.data['graceid'], ev.graceid)
 
     def test_public_get_no_view_perms(self):
         """Public user can't see events for non-public superevents"""
         # Internal superevent
         for ev in self.internal_superevent.events.all():
             url = v_reverse('superevents:superevent-event-detail',
-                args=[self.internal_superevent.superevent_id, ev.graceid()])
+                args=[self.internal_superevent.superevent_id, ev.graceid])
             response = self.request_as_user(url, "GET")
             # Should get 404 response - because of filtering, this superevent
             # should be excluded from the queryset
@@ -1029,7 +1029,7 @@ class TestSupereventEventDetail(SupereventManagersGroupAndUserSetup,
 
         for ev in self.lvem_superevent.events.all():
             url = v_reverse('superevents:superevent-event-detail',
-                args=[self.lvem_superevent.superevent_id, ev.graceid()])
+                args=[self.lvem_superevent.superevent_id, ev.graceid])
             response = self.request_as_user(url, "GET")
             # Should get 404 response - because of filtering, this superevent
             # should be excluded from the queryset
@@ -1047,7 +1047,7 @@ class TestSupereventEventDetail(SupereventManagersGroupAndUserSetup,
         """
         url = v_reverse('superevents:superevent-event-detail',
             args=[self.internal_superevent.superevent_id,
-            self.event1.graceid()])
+            self.event1.graceid])
         response = self.request_as_user(url, "DELETE", self.internal_user)
         self.assertEqual(response.status_code, 403)
 
@@ -1064,7 +1064,7 @@ class TestSupereventEventDetail(SupereventManagersGroupAndUserSetup,
 
         # Set up URL, make request, check response code
         url = v_reverse('superevents:superevent-event-detail',
-            args=[s.superevent_id, ev.graceid()])
+            args=[s.superevent_id, ev.graceid])
         response = self.request_as_user(url, "DELETE", self.internal_user)
         self.assertEqual(response.status_code, 403)
 
@@ -1081,7 +1081,7 @@ class TestSupereventEventDetail(SupereventManagersGroupAndUserSetup,
 
         # Set up URL, make request, check response code
         url = v_reverse('superevents:superevent-event-detail',
-            args=[s.superevent_id, ev.graceid()])
+            args=[s.superevent_id, ev.graceid])
         response = self.request_as_user(url, "DELETE", self.internal_user)
         self.assertEqual(response.status_code, 204)
 
@@ -1091,7 +1091,7 @@ class TestSupereventEventDetail(SupereventManagersGroupAndUserSetup,
         """
         url = v_reverse('superevents:superevent-event-detail',
             args=[self.internal_superevent.superevent_id,
-            self.event1.graceid()])
+            self.event1.graceid])
         response = self.request_as_user(url, "DELETE", self.sm_user)
         self.assertEqual(response.status_code, 204)
 
@@ -1108,7 +1108,7 @@ class TestSupereventEventDetail(SupereventManagersGroupAndUserSetup,
 
         # Set up URL, make request, check response code
         url = v_reverse('superevents:superevent-event-detail',
-            args=[s.superevent_id, ev.graceid()])
+            args=[s.superevent_id, ev.graceid])
         response = self.request_as_user(url, "DELETE", self.sm_user)
         self.assertEqual(response.status_code, 204)
 
@@ -1125,7 +1125,7 @@ class TestSupereventEventDetail(SupereventManagersGroupAndUserSetup,
 
         # Set up URL, make request, check response code
         url = v_reverse('superevents:superevent-event-detail',
-            args=[s.superevent_id, ev.graceid()])
+            args=[s.superevent_id, ev.graceid])
         response = self.request_as_user(url, "DELETE", self.sm_user)
         self.assertEqual(response.status_code, 204)
 
@@ -1134,14 +1134,14 @@ class TestSupereventEventDetail(SupereventManagersGroupAndUserSetup,
         # Internal superevent
         url = v_reverse('superevents:superevent-event-detail',
             args=[self.internal_superevent.superevent_id,
-            self.event1.graceid()])
+            self.event1.graceid])
         response = self.request_as_user(url, "DELETE", self.lvem_user)
         self.assertEqual(response.status_code, 404)
 
         # Exposed superevent
         url = v_reverse('superevents:superevent-event-detail',
             args=[self.lvem_superevent.superevent_id,
-            self.event2.graceid()])
+            self.event2.graceid])
         response = self.request_as_user(url, "DELETE", self.lvem_user)
         self.assertEqual(response.status_code, 403)
 
@@ -1152,7 +1152,7 @@ class TestSupereventEventDetail(SupereventManagersGroupAndUserSetup,
         # Internal superevent
         url = v_reverse('superevents:superevent-event-detail',
             args=[self.internal_superevent.superevent_id,
-            self.event1.graceid()])
+            self.event1.graceid])
         response = self.request_as_user(url, "DELETE")
         self.assertEqual(response.status_code, 403)
         # TODO: will be 404 in the future
diff --git a/gracedb/events/admin.py b/gracedb/events/admin.py
index 04ce6a67a0c7309051704cb35990770e8bbd2a6d..f2d7b260713b5faf957ad980cac247c09930b82d 100644
--- a/gracedb/events/admin.py
+++ b/gracedb/events/admin.py
@@ -5,7 +5,7 @@ from django.contrib import admin
 
 class EventAdmin(admin.ModelAdmin):
     def graceid(obj):
-        return obj.graceid()
+        return obj.graceid
     graceid.admin_order_field = 'id'
 
     list_display = [ graceid, 'group', 'pipeline', 'search', 'submitter'  ]
diff --git a/gracedb/events/buildVOEvent.py b/gracedb/events/buildVOEvent.py
index 287f4c54205fe5daf56a63f7d3f559c53a52c14f..1721f8f88c7bdd51ca7e9aa9d9f9e2f3a8323228 100644
--- a/gracedb/events/buildVOEvent.py
+++ b/gracedb/events/buildVOEvent.py
@@ -65,7 +65,7 @@ def buildVOEvent(event, serial_number, voevent_type, request=None, skymap_filena
     # Let's convert that voevent_type to something nicer looking
     voevent_type = VOEVENT_TYPE_DICT[voevent_type]
 
-    objid = event.graceid()
+    objid = event.graceid
 
     # Now build the IVORN. 
     # XXX This will have the string '-Retraction' appended if it is a retraction,
diff --git a/gracedb/events/feeds.py b/gracedb/events/feeds.py
index 52922dabaa8191067c7a87042fe6e890fa97ab44..c6e549f2a43b3fbb534310de08d3f513cfa4a641 100644
--- a/gracedb/events/feeds.py
+++ b/gracedb/events/feeds.py
@@ -60,7 +60,7 @@ class EventFeed(Feed):
         return reverse("home")
 
     def item_link(self, obj):
-        return reverse(view, args=[obj.graceid()])
+        return reverse(view, args=[obj.graceid])
 
     def item_author_name(self, obj):
         return u"{0} {1}".format(obj.submitter.first_name, obj.submitter.last_name)
diff --git a/gracedb/events/models.py b/gracedb/events/models.py
index 862da5be1cafd6383d7d34a65b26e7b75b54728f..b52b75d689ef5afc3e2d877b14d9117582d6ef16 100644
--- a/gracedb/events/models.py
+++ b/gracedb/events/models.py
@@ -181,6 +181,7 @@ class Event(models.Model):
     class Meta:
         ordering = ["-id"]
 
+    @property
     def graceid(self):
         if self.group.name == "Test":
             return "T%04d" % self.id
@@ -194,7 +195,7 @@ class Event(models.Model):
 
     def weburl(self):
         # XXX Not good.  But then, it never was.
-        return reverse('file_list', args=[self.graceid()])
+        return reverse('file_list', args=[self.graceid])
 
     @property
     def datadir(self):
@@ -284,7 +285,7 @@ class Event(models.Model):
         raise cls.DoesNotExist("Event matching query does not exist")
 
     def __unicode__(self):
-        return self.graceid()
+        return self.graceid
 
     # Return a list of distinct tags associated with the log messages of this
     # event.
@@ -416,7 +417,7 @@ class EventLog(CleanSaveModel, LogBase, AutoIncrementModel):
 
     def fileurl(self):
         if self.filename:
-            return reverse('file-download', args=[self.event.graceid(),
+            return reverse('file-download', args=[self.event.graceid,
                 self.versioned_filename])
         else:
             return None
@@ -512,7 +513,7 @@ class EMObservation(EMObservationBase, AutoIncrementModel):
 
     def __unicode__(self):
         return "{event_id} | {group} | {N}".format(
-            event_id=self.event.graceid(), group=self.group.name, N=self.N)
+            event_id=self.event.graceid, group=self.group.name, N=self.N)
 
     def calculateCoveringRegion(self):
         footprints = self.emfootprint_set.all()
@@ -568,7 +569,7 @@ class Labelling(m2mThroughBase):
     label = models.ForeignKey(Label)
 
     def __unicode__(self):
-        return "{graceid} | {label}".format(graceid=self.event.graceid(),
+        return "{graceid} | {label}".format(graceid=self.event.graceid,
             label=self.label.name)
 
 
@@ -928,7 +929,7 @@ class VOEvent(VOEventBase, AutoIncrementModel):
             actual_filename = self.filename
             if self.file_version >= 0:
                 actual_filename += ',%d' % self.file_version
-            return reverse('file-download', args=[self.event.graceid(),
+            return reverse('file-download', args=[self.event.graceid,
                 actual_filename])
         else:
             return None
@@ -1033,7 +1034,7 @@ class Signoff(SignoffBase):
         unique_together = ('event', 'instrument')
 
     def __unicode__(self):
-        return "%s | %s | %s" % (self.event.graceid(), self.instrument,
+        return "%s | %s | %s" % (self.event.graceid, self.instrument,
             self.status)
 
 EMSPECTRUM = (
@@ -1102,7 +1103,7 @@ class EMBBEventLog(AutoIncrementModel):
         unique_together = ("event","N")
 
     def __unicode__(self):
-        return "%s-%s-%d" % (self.event.graceid(), self.group.name, self.N)
+        return "%s-%s-%d" % (self.event.graceid, self.group.name, self.N)
 
     # A counter for Eels associated with a given event. This is 
     # important for addressibility.
diff --git a/gracedb/events/tests/test_perms.py b/gracedb/events/tests/test_perms.py
index 8aca82db2448c074f21d02bf0173a5898e7d66b3..f4e8ca252582fcdba3b846ba51f10e7a40daa236 100644
--- a/gracedb/events/tests/test_perms.py
+++ b/gracedb/events/tests/test_perms.py
@@ -246,7 +246,7 @@ class TestPerms(TestCase):
     def test_internal_event_access(self):
         """Test viewing of events by LIGO users"""
         for e in Event.objects.all():
-            url = reverse('view', args=[e.graceid()])
+            url = reverse('view', args=[e.graceid])
             response = self.client.get(url, **extra_args(self.internal_user))
             self.assertEqual(response.status_code, 200)
 
@@ -255,9 +255,9 @@ class TestPerms(TestCase):
 
         # Only the internal event should not be viewable for LV-EM
         for e in Event.objects.all():
-            url = reverse('view', args=[e.graceid()])
+            url = reverse('view', args=[e.graceid])
             response = self.client.get(url, **extra_args(self.lvem_user))
-            if (e.graceid() != self.internal_event.graceid()):
+            if (e.graceid != self.internal_event.graceid):
                 self.assertEqual(response.status_code, 200)
             else:
                 self.assertEqual(response.status_code, 403)
@@ -267,9 +267,9 @@ class TestPerms(TestCase):
 
         # Only the public event should be viewable for public users
         for e in Event.objects.all():
-            url = reverse('view', args=[e.graceid()])
+            url = reverse('view', args=[e.graceid])
             response = self.client.get(url, **extra_args(self.public_user))
-            if (e.graceid() == self.public_event.graceid()):
+            if (e.graceid == self.public_event.graceid):
                 self.assertEqual(response.status_code, 200)
             else:
                 self.assertEqual(response.status_code, 403)
@@ -295,7 +295,7 @@ class TestPerms(TestCase):
     def test_internal_log_creation(self):
         """Test annotation of events by LIGO users"""
         for e in Event.objects.all():
-            url = reverse('logentry', args=[e.graceid(), ''])
+            url = reverse('logentry', args=[e.graceid, ''])
             input_dict = {
                 'comment' : 'This is a test.',
                 'tagname' : 'test_tag',
@@ -310,7 +310,7 @@ class TestPerms(TestCase):
         """Test annotation of events by LV-EM users"""
         # Should be able to annotate the LV-EM and public events
         for e in Event.objects.all():
-            url = reverse('logentry', args=[e.graceid(), ''])
+            url = reverse('logentry', args=[e.graceid, ''])
             input_dict = {
                 'comment' : 'This is a test.',
                 'tagname' : 'test_tag',
@@ -329,7 +329,7 @@ class TestPerms(TestCase):
         # Public user should not be able to annotate any events,
         # even publicly viewable ones
         event = self.public_event
-        url = reverse('logentry', args=[event.graceid(), ''])
+        url = reverse('logentry', args=[event.graceid, ''])
         input_dict = {
             'comment': 'This is a test.',
             'tagname': 'test_tag',
@@ -342,7 +342,7 @@ class TestPerms(TestCase):
         """Test event log tagging by internal user"""
         for e in Event.objects.all():
             # Try to add 'test_tag' to the first log entry.
-            url = reverse('taglogentry', args=[e.graceid(), 1, 'test_tag'])
+            url = reverse('taglogentry', args=[e.graceid, 1, 'test_tag'])
             input_dict = {'displayName': 'test_tag',}
             response = self.client.post(url, input_dict,
                 **extra_args(self.internal_user))
@@ -354,7 +354,7 @@ class TestPerms(TestCase):
         # Should be able to tag the LV-EM and public event's logs.
         for e in Event.objects.all():
             # Try to add 'test_tag' to the first log entry.
-            url = reverse('taglogentry', args=[e.graceid(), 1, 'test_tag'])
+            url = reverse('taglogentry', args=[e.graceid, 1, 'test_tag'])
             input_dict = {'displayName': 'test_tag',}
             response = self.client.post(url, input_dict,
                 **extra_args(self.lvem_user))
@@ -371,7 +371,7 @@ class TestPerms(TestCase):
         # publicly viewable events
         for e in Event.objects.all():
             # Try to add 'test_tag' to the first log entry.
-            url = reverse('taglogentry', args=[e.graceid(), 1, 'test_tag'])
+            url = reverse('taglogentry', args=[e.graceid, 1, 'test_tag'])
             input_dict = {'displayName': 'test_tag',}
             response = self.client.post(url, input_dict,
                 **extra_args(self.public_user))
@@ -381,7 +381,7 @@ class TestPerms(TestCase):
         """Test EEL creation by internal user"""
         # Internal user should be able to create EELs for all events
         for e in Event.objects.all():
-            url = reverse('embblogentry', args=[e.graceid(), ''])
+            url = reverse('embblogentry', args=[e.graceid, ''])
             input_dict = {
                 'group': TEST_NAMES['emgroup'],
                 'waveband': 'em.gamma',
@@ -401,7 +401,7 @@ class TestPerms(TestCase):
         """Test EEL creation by LV-EM user"""
         # LV-EM user should be able to create EELs for LV-EM and public events
         for e in Event.objects.all():
-            url = reverse('embblogentry', args=[e.graceid(), ''])
+            url = reverse('embblogentry', args=[e.graceid, ''])
             input_dict = {
                 'group': TEST_NAMES['emgroup'],
                 'waveband': 'em.gamma',
@@ -421,7 +421,7 @@ class TestPerms(TestCase):
         """Test EEL creation by public user"""
         # Public user should not be able to create EELs
         event = self.public_event
-        url = reverse('embblogentry', args=[event.graceid(), ''])
+        url = reverse('embblogentry', args=[event.graceid, ''])
         # Test, em.gamma, FO, TE, instrument='Test', comment='Test'
         input_dict = {
             'group': TEST_NAMES['emgroup'],
@@ -475,7 +475,7 @@ class TestPerms(TestCase):
             # choose any event
             event = self.internal_event
             # try POST to permission creation URL
-            url = reverse('modify_permissions', args=[event.graceid()])
+            url = reverse('modify_permissions', args=[event.graceid])
             input_dict = {
                 'action': 'expose',
                 'group_name': settings.LVEM_GROUP,
diff --git a/gracedb/events/view_logic.py b/gracedb/events/view_logic.py
index 5f29445515075043737fa0995787801d375d5cf1..03022c384a1b92c4402059a648ed98dd1e7c28fb 100644
--- a/gracedb/events/view_logic.py
+++ b/gracedb/events/view_logic.py
@@ -148,7 +148,7 @@ def _createEventFromForm(request, form):
                 # Append a warning message.
                 if label in event.labels.all():
                     warnings.append("Event {0} already labeled with '{1}'" \
-                        .format(event.graceid(), label))
+                        .format(event.graceid, label))
                 else:
                     create_label(event, request, label.name,
                         can_add_protected=False)
@@ -157,7 +157,7 @@ def _createEventFromForm(request, form):
             message = "Problem scanning data. No alert issued (%s)" % e
             logger.warning(message)
             warnings += [message]
-        #return HttpResponseRedirect(reverse(view, args=[event.graceid()]))
+        #return HttpResponseRedirect(reverse(view, args=[event.graceid]))
     except Exception, e:
         # something went wrong.
         # XXX We need to make sure we clean up EVERYTHING.
@@ -196,7 +196,7 @@ def create_label(event, request, labelName, can_add_protected=False,
     # send the correct HTTP response code
     label_created = False
     if label in event.labels.all():
-        d['warning'] = "Event %s already labeled with '%s'" % (event.graceid(), labelName)
+        d['warning'] = "Event %s already labeled with '%s'" % (event.graceid, labelName)
     else:
         labelling = Labelling(
                 event = event,
@@ -249,8 +249,8 @@ def delete_label(event, request, labelName, can_remove_protected=False,
     # Next, check if the label is in the list of labels for the event. Throw out an
     # error if it isn't. There might be a more elegant way of doing this.
     if label not in event.labels.all():
-            d['warning'] = "No label '%s' associated with event %s" % (labelName, event.graceid())
-            raise ValueError("No label '%s' associated with event %s" % (labelName, event.graceid()))
+            d['warning'] = "No label '%s' associated with event %s" % (labelName, event.graceid)
+            raise ValueError("No label '%s' associated with event %s" % (labelName, event.graceid))
     else:
         this_label = Labelling.objects.get(
                 event = event,
diff --git a/gracedb/events/view_utils.py b/gracedb/events/view_utils.py
index e402d83a89e35c0c13d7f07e41330587197f5e5e..505763a6baefb178d11433b22eaa724dd74a9c0b 100644
--- a/gracedb/events/view_utils.py
+++ b/gracedb/events/view_utils.py
@@ -129,7 +129,7 @@ def reverse(name, *args, **kw):
 def eventToDict(event, columns=None, request=None, is_alert=False):
     """Convert an Event to a dictionary."""
     rv = {}
-    graceid = event.graceid()
+    graceid = event.graceid
     try:
       rv['submitter'] = event.submitter.username
     except:
@@ -366,10 +366,10 @@ def eventLogToDict(log, request=None):
 
     # Get some links
     uri = api_reverse("events:eventlog-detail",
-            args=[log.event.graceid(), log.N],
+            args=[log.event.graceid, log.N],
             request=request)
     taglist_uri = api_reverse("events:eventlogtag-list",
-            args=[log.event.graceid(), log.N],
+            args=[log.event.graceid, log.N],
             request=request)
     if log.filename:
         actual_filename = log.filename
@@ -381,7 +381,7 @@ def eventLogToDict(log, request=None):
         #filename = urlquote(actual_filename)
         filename = actual_filename
         file_uri = api_reverse("events:files",
-            args=[log.event.graceid(), filename],
+            args=[log.event.graceid, filename],
             request=request)
 
     # This is purely for convenience in working with the web interface.
@@ -416,7 +416,7 @@ def labelToDict(labelling, request=None):
             "created" : labelling.created.strftime(
                       settings.GRACE_STRFTIME_FORMAT),
             "self" : api_reverse("events:labels",
-                args=[labelling.event.graceid(), labelling.label.name],
+                args=[labelling.event.graceid, labelling.label.name],
                 request=request),
            }
 
@@ -425,7 +425,7 @@ def embbEventLogToDict(eel, request=None):
       uri = None
       if request:
           uri = api_reverse("events:embbeventlog-detail",
-                  args=[eel.event.graceid(), eel.N],
+                  args=[eel.event.graceid, eel.N],
                   request=request)
       return {
                   "N"       : eel.N,
@@ -461,7 +461,7 @@ def embbEventLogToDict(eel, request=None):
 # EMObservation serializer.
 def emObservationToDict(emo, request=None):
     uri = api_reverse("events:emobservation-detail",
-        args=[emo.event.graceid(), emo.N], request=request)
+        args=[emo.event.graceid, emo.N], request=request)
 
     # User display name
     # Show full name for web interface views (fetched via AJAX), unless it's
@@ -492,7 +492,7 @@ def emFootprintToDict(emf, request=None):
 #      uri = None
 #      if request:
 #          uri = api_reverse("events:emfootprint-detail",
-#                  args=[emf.emobservation.event.graceid(), emf.emobservation.N, emf.N],
+#                  args=[emf.emobservation.event.graceid, emf.emobservation.N, emf.N],
 #                  request=request)
       
       return {
@@ -513,7 +513,7 @@ def emFootprintToDict(emf, request=None):
 # EMObservation serializer for the skymap Viewer
 def skymapViewerEMObservationToDict(emo, request=None):
     uri = api_reverse("events:emobservation-detail",
-        args=[emo.event.graceid(), emo.N],
+        args=[emo.event.graceid, emo.N],
         request=request)
 
     # Keys we want:
@@ -574,10 +574,10 @@ def voeventToDict(voevent, request=None):
     filename = '%s,%d' % (voevent.filename, voevent.file_version)
 
     uri = api_reverse("events:voevent-detail",
-        args=[voevent.event.graceid(), voevent.N],
+        args=[voevent.event.graceid, voevent.N],
         request=request)
     file_uri = api_reverse("events:files",
-        args=[voevent.event.graceid(), filename],
+        args=[voevent.event.graceid, filename],
         request=request)
 
     issuer = voevent.issuer.username
@@ -639,13 +639,13 @@ def groupeventpermissionToDict(gop, event=None, request=None):
     rv = {}
     rv['group'] = gop.group.name
     rv['permission'] = gop.permission.codename
-    #rv['graceid'] = event.graceid()
+    #rv['graceid'] = event.graceid
     #perm_shortname = gop.permission.codename.split('_')[0]
     #rv['permission'] = perm_shortname
     # We want a link to the self only.  End of the line.
     #rv['links'] = {
     #                "self" : api_reverse("events:groupeventpermission-detail",
-    #                                 args=[event.graceid(),gop.group.name,perm_shortname],
+    #                                 args=[event.graceid,gop.group.name,perm_shortname],
     #                                 request=request)
     #              }
     return rv
@@ -779,7 +779,7 @@ def get_recent_events_string(request):
         return ''
 
     event_list = [ {'pipeline': e.pipeline.name,
-                    'graceid': e.graceid(),
+                    'graceid': e.graceid,
                     'created': e.created.isoformat() } for e in events ]
 
     return json.dumps(event_list)
diff --git a/gracedb/events/views.py b/gracedb/events/views.py
index 1894d942083b88a76058a7cf42f0cdae7f92c5cc..7838b6811ef2b7fdec48734e53e6920af59a4f73 100644
--- a/gracedb/events/views.py
+++ b/gracedb/events/views.py
@@ -116,8 +116,8 @@ def index(request):
         older_events = events.filter(created__lt=one_day_ago)
 
         # Put into context dict for template rendering
-        context['new_signoff_graceids'] = [e.graceid() for e in new_events]
-        context['older_signoff_graceids'] = [e.graceid() for e in older_events]
+        context['new_signoff_graceids'] = [e.graceid for e in new_events]
+        context['older_signoff_graceids'] = [e.graceid for e in older_events]
 
         # TODO: ensure not test or MDC types once those are implemented
         # Superevent signoffs
@@ -203,7 +203,7 @@ def _create(request):
                 # problem creating event...  XXX need an error page for this.
                 raise Exception("\n".join(warnings))
 
-            return HttpResponseRedirect(reverse(view, args=[event.graceid()]))
+            return HttpResponseRedirect(reverse(view, args=[event.graceid]))
         else:
             rv['form'] = form
     return rv
@@ -317,7 +317,7 @@ def logentry(request, event, num=None):
         return HttpResponseBadRequest
 
     if not request.is_ajax():
-        return HttpResponseRedirect(reverse(view, args=[event.graceid()]))
+        return HttpResponseRedirect(reverse(view, args=[event.graceid]))
 
     rv = {}
     rv['comment'] = elog.comment
@@ -568,7 +568,7 @@ def taglogentry(request, event, num, tagname):
 
     # Hopefully, this will only ever be called from inside a script.  Just in case...
     if not request.is_ajax():
-        return HttpResponseRedirect(reverse(view, args=[event.graceid()]))
+        return HttpResponseRedirect(reverse(view, args=[event.graceid]))
 
     # no need for a JSON response. 
     msg = "Successfully applied tag %s to log message %s." % (tagname, num)
@@ -613,8 +613,8 @@ def file_list(request, event):
 
     context = {}
     context['file_list'] = f
-    context['title'] = 'Files for %s' % event.graceid() 
-    context['graceid'] = event.graceid() 
+    context['title'] = 'Files for %s' % event.graceid 
+    context['graceid'] = event.graceid 
         
     return render(request, 'gracedb/event_filelist.html', context=context)
 
@@ -729,7 +729,7 @@ def modify_permissions(request, event):
         update_event_perms_for_group(underlying_event, g, action)
 
     # Finished. Redirect back to the event.
-    return HttpResponseRedirect(reverse("view", args=[event.graceid()]))
+    return HttpResponseRedirect(reverse("view", args=[event.graceid]))
 
 # A view to create embb log entries
 @event_and_auth_required
@@ -743,7 +743,7 @@ def embblogentry(request, event, num=None):
         except Exception, e:
             return HttpResponseServerError(str(e))
 
-        return HttpResponseRedirect(reverse(view, args=[event.graceid()]))
+        return HttpResponseRedirect(reverse(view, args=[event.graceid]))
     else:
         return HttpResponseBadRequest("This URL only supports POST.")
 
@@ -788,7 +788,7 @@ def emobservation_entry(request, event, num=None):
         except Exception, e:
             return HttpResponseServerError(str(e))
 
-        return HttpResponseRedirect(reverse(view, args=[event.graceid()]))
+        return HttpResponseRedirect(reverse(view, args=[event.graceid]))
     else:
         return HttpResponseBadRequest("This URL only supports POST.")
 
@@ -825,7 +825,7 @@ def modify_t90(request, event):
     event.save()
     
     # Finished. Redirect back to the event.
-    return HttpResponseRedirect(reverse("view", args=[event.graceid()]))
+    return HttpResponseRedirect(reverse("view", args=[event.graceid]))
 
 
 def get_signoff_type(stype):
@@ -1016,5 +1016,5 @@ def modify_signoff(request, event):
                 pass
 
     # Finished. Redirect back to the event.
-    return HttpResponseRedirect(reverse("view", args=[event.graceid()]))
+    return HttpResponseRedirect(reverse("view", args=[event.graceid]))
 
diff --git a/gracedb/search/utils.py b/gracedb/search/utils.py
index d9c85ce53d4bfe73ce519f2ee9054266cf66d618..0bb8e60f506f1650560528d93d81d7c56bba8557 100644
--- a/gracedb/search/utils.py
+++ b/gracedb/search/utils.py
@@ -111,9 +111,9 @@ def superevent_flexigrid_response(request, objects):
                 object.superevent_id]), object.superevent_id),
             #Labels
             " ".join(["""<span onmouseover="tooltip.show(tooltiptext('%s', '%s', '%s'));" onmouseout="tooltip.hide();" style="color: %s"> %s </span>""" % (label.label.name, label.creator.username, label.created, label.label.defaultColor, label.label.name) for label in object.labelling_set.all()]),
-            ev_link(object.preferred_event.graceid()),
-            ", ".join([ev_link(ev.graceid()) for ev in object.get_internal_events()]),
-            ", ".join([ev_link(ev.graceid()) for ev in object.get_external_events()]),
+            ev_link(object.preferred_event.graceid),
+            ", ".join([ev_link(ev.graceid) for ev in object.get_internal_events()]),
+            ", ".join([ev_link(ev.graceid) for ev in object.get_external_events()]),
             t_start_times.get('gps', ""),
             t_0_times.get('gps', ""),
             t_end_times.get('gps', ""),
@@ -205,7 +205,7 @@ def event_flexigrid_response(request, objects):
                 display_far = "< %s" % scientific(settings.VOEVENT_FAR_FLOOR)
 
         cell_values = [ '<a href="%s">%s</a>' %
-                            (django_reverse("view", args=[object.graceid()]), object.graceid()),
+                            (django_reverse("view", args=[object.graceid]), object.graceid),
                          #Labels
                         " ".join(["""<span onmouseover="tooltip.show(tooltiptext('%s', '%s', '%s'));" onmouseout="tooltip.hide();"  style="color: %s"> %s </span>""" % (label.label.name, label.creator.username, label.created, label.label.defaultColor, label.label.name)
                                 for label in object.labelling_set.all()]),
@@ -233,7 +233,7 @@ def event_flexigrid_response(request, objects):
         if get_neighbors:
             # Links to neighbors
             cell_values.insert(2, ', '.join([ '<a href="%s">%s</a>' %
-                (django_reverse("view", args=[n.graceid()]), n.graceid()) for n in object.neighbors()]))
+                (django_reverse("view", args=[n.graceid]), n.graceid) for n in object.neighbors()]))
 
         rows.append(
             { 'id' : object.id,
diff --git a/gracedb/superevents/utils.py b/gracedb/superevents/utils.py
index 6272a75d006319d05fe32e7467a2887c602fdf9c..77ccd9b229d48aadf5f1a7fd726f096158deaec9 100644
--- a/gracedb/superevents/utils.py
+++ b/gracedb/superevents/utils.py
@@ -70,7 +70,7 @@ def create_superevent(submitter, t_start, t_0, t_end, preferred_event,
         t_start=t_start, t_0=t_0, t_end=t_end, preferred_event=preferred_event)
     if events:
         creation_comment += ", events={events}".format(events=", ".join(
-            [ev.graceid() for ev in events]))
+            [ev.graceid for ev in events]))
     # This is autogenerated, but people probably don't want to hide it
     # in the web interface
     superevent_creation_log = create_log(submitter, creation_comment, s,
@@ -339,7 +339,7 @@ def add_event_to_superevent(superevent, event, user, add_event_log=True,
         raise Superevent.EventCategoryMismatchError(
             _(('Event {graceid} is of type \'{e_category}\', and '
                'cannot be assigned to a superevent of type '
-               '\'{s_category}\'').format(graceid=event.graceid(),
+               '\'{s_category}\'').format(graceid=event.graceid,
                 e_category=event.get_event_category(),
                 s_category=superevent.get_category_display())))
 
@@ -350,7 +350,7 @@ def add_event_to_superevent(superevent, event, user, add_event_log=True,
     if add_superevent_log:
         # Record event addition in superevent logs
         superevent_comment = 'Added event: {graceid}'.format(
-            graceid=event.graceid())
+            graceid=event.graceid)
         superevent_log_for_event_addition = create_log(user,
             superevent_comment, superevent, issue_alert=False,
             autogenerated=True)
@@ -390,7 +390,7 @@ def remove_event_from_superevent(superevent, event, user, add_event_log=True,
     if add_superevent_log:
         # Record event removal in superevent logs
         superevent_comment = 'Removed event: {graceid}'.format(
-            graceid=event.graceid())
+            graceid=event.graceid)
         superevent_log_for_event_removal = create_log(user, superevent_comment,
             superevent, issue_alert=False, autogenerated=True)