diff --git a/gracedb/api.py b/gracedb/api.py
index e520488da027363330f7172b2fafeb802c4cf53a..7091eadd9335ae91da4caf4ef31e2080faa6ad43 100644
--- a/gracedb/api.py
+++ b/gracedb/api.py
@@ -246,8 +246,7 @@ class EventList(APIView):
         if query:
             form = SimpleSearchForm(request.GET)
             if form.is_valid():
-                cooked_query = form.cleaned_data['query']
-                events = events.filter(cooked_query).distinct()
+                events = form.cleaned_data['query']
             else:
                 return Response("Invalid query",
                         status=status.HTTP_400_BAD_REQUEST)
diff --git a/gracedb/forms.py b/gracedb/forms.py
index 93448eb7178745e64c35af82dc3ef71425a5fb46..e3ac69bbec22efcea146551f0a526f5075a8554e 100644
--- a/gracedb/forms.py
+++ b/gracedb/forms.py
@@ -4,6 +4,7 @@ from django.utils.safestring import mark_safe
 from django.utils.html import escape
 from models import Event, Group, Label
 from django.contrib.auth.models import User
+from django.core.exceptions import FieldError
 
 from query import parseQuery, ParseException
 
@@ -20,10 +21,14 @@ class GraceQueryField(forms.CharField):
         from django.db.models import Q
         queryString = forms.CharField.clean(self, queryString)
         try:
-            return parseQuery(queryString)
+            return Event.objects.filter(parseQuery(queryString)).distinct()
         except ParseException, e:
             err = "Error: " + escape(e.pstr[:e.loc]) + errorMarker + escape(e.pstr[e.loc:])
             raise forms.ValidationError(mark_safe(err))
+        except FieldError, e:
+            # XXX error message can be more polished than this
+            err = "Error: " + str(e)
+            raise forms.ValidationError(mark_safe(err))
         except Exception, e:
             # What could this be and how can we handle it better? XXX
             raise forms.ValidationError(str(e))
diff --git a/gracedb/views.py b/gracedb/views.py
index 566e24f44edb24a5ad026e2cdfd7a14156077b4b..caadcb3e15bdb11d63acbc5afb9ada19232915c3 100644
--- a/gracedb/views.py
+++ b/gracedb/views.py
@@ -574,8 +574,7 @@ def cli_search(request):
     assert request.user
     form = SimpleSearchForm(request.POST)
     if form.is_valid():
-        query = form.cleaned_data['query']
-        objects = Event.objects.filter(query).distinct()
+        objects = form.cleaned_data['query']
 
         if 'ligolw' in request.POST or 'ligolw' in request.GET:
             from glue.ligolw import utils
@@ -691,9 +690,7 @@ def search(request, format=""):
             form = SimpleSearchForm(request.POST)
             rawquery = request.POST['query']
         if form.is_valid():
-            query = form.cleaned_data['query']
-
-            objects = Event.objects.filter(query).distinct()
+            objects = form.cleaned_data['query']
 
             if format == "json":
                 return HttpResponse("Not Implemented")
@@ -1009,8 +1006,7 @@ def latest(request):
     context['rawquery'] = request.GET.get('query') or request.POST.get('query') or ""
 
     if form.is_valid():
-        query = form.cleaned_data['query']
-        objects = Event.objects.filter(query).distinct().order_by("-created")[:15]
+        objects = form.cleaned_data['query']
         context['objects'] = map(limit, objects)
         context['error'] = False
     else: