diff --git a/gracedb/models.py b/gracedb/models.py
index 910e8e07a96c2fde89d2fefb76d10d066cd61a60..0fb74fc60ae38e867df62d9425b27c0e1cba3a59 100644
--- a/gracedb/models.py
+++ b/gracedb/models.py
@@ -112,6 +112,13 @@ class Event(models.Model):
             gps_time = int(posixToGpsTime(posix_time))
             return gps_time - self.gpstime
 
+    @classmethod
+    def getTypeLabel(cls, code):
+        for key, label in cls.ANALYSIS_TYPE_CHOICES:
+            if (key == code) or (code == label):
+                return label
+        raise KeyError("Unknown analysis type code: %s" % code)
+
     @classmethod
     def getByGraceid(cls, id):
         if id[0] not in "GH":
diff --git a/gracedb/query.py b/gracedb/query.py
index d326b3f6f5feb952173328369bab31cfea2f0abd..2ce6fba52b887b1882ae5ae34cf839627ff1e6d9 100644
--- a/gracedb/query.py
+++ b/gracedb/query.py
@@ -122,7 +122,8 @@ labelQ_ = operatorPrecedence(label,
      (andop,   2, opAssoc.LEFT,  lambda a,b,toks: reduce(Q.__and__, toks[0].asList(), Q())),
     ]).setParseAction(lambda toks: toks[0])
 
-labelQ = labelQ_.copy().setParseAction(lambda toks: ("label", toks[0]))
+labelQ = (Optional(Suppress(Keyword("label:"))) + labelQ_.copy())
+labelQ.setParseAction(lambda toks: ("label", toks[0]))
 
 
 q = (gidQ | hidQ | atypeQ | groupQ | labelQ | createdQ | gpsQ).setName("query term")
diff --git a/gracedb/views.py b/gracedb/views.py
index 3ded9ed9de9bbc481402eabb874898899d98186c..e2e944c850aad2f4420d645461cd9519b333d81d 100644
--- a/gracedb/views.py
+++ b/gracedb/views.py
@@ -450,6 +450,8 @@ def oldsearch(request):
             gpsStart =  form.cleaned_data['gpsStart']
             gpsEnd =  form.cleaned_data['gpsEnd']
 
+            textQuery = []
+
             if not groupname:
                 # don't show test events unless explicitly requested
                 # Scales?  Or should we find test group and do group= ?
@@ -474,30 +476,54 @@ def oldsearch(request):
                     objects = objects.filter(id__lte=int(end[1:]))
                     objects = objects.filter(uid="")
 
+            if start and end:
+                textQuery.append("gid: %s..%s" % (start, end))
+
             if gpsStart != None or gpsEnd != None :
                 if gpsStart == gpsEnd:
                     objects = objects.filter(gpstime=gpsStart)
+                    textQuery.append("gpstime: %s" % gpsStart)
                 else:
                     if gpsStart != None:
                         objects = objects.filter(gpstime__gte=gpsStart)
                     if gpsEnd != None:
                         objects = objects.filter(gpstime__lte=gpsEnd)
+                    if gpsStart and gpsEnd:
+                        textQuery.append("gpstime: %s .. %s" % (gpsStart, gpsEnd))
+                    elif gpsStart:
+                        textQuery.append("gpstime: %s..2000000000" % gpsStart)
+                    else:
+                        textQuery.append("gpstime: 0..%s" % gpsEnd)
 
             if submitter:
                 objects = objects.filter(submitter=submitter)
             if groupname:
                 group = Group.objects.filter(name=groupname)[0]
                 objects = objects.filter(group=group)
+                textQuery.append("group: %s" % group.name)
             if typename:
                 objects = objects.filter(analysisType=typename)
+                textQuery.append("type: %s" % Event.getTypeLabel(typename))
 
             if labels:
                 objects = objects.filter(labels__in=labels)
+                textQuery.append("label: %s" % " ".join([
+                    Label.objects.filter(id=l)[0].name for l in labels]))
 
             # Need this because events with multiple labels can appear multiple times!
             objects = objects.distinct()
 
-            return object_list(request, objects, extra_context={'title':"Query Results"})
+            extra_context = {'title':"Query Results. %s event(s)" % objects.count()}
+            if not submitter and (not (start or end) or (start and end)):
+                # ugh.  there is no submitter option in text query
+                # Also, text query needs both ends of a graceid search
+                # Sooo.... set up a simple search form...
+                textQuery = " ".join(textQuery)
+                extra_context['queryLink'] = reverse(search)+"?query="+escape(textQuery)
+                simple_form = SimpleSearchForm({'query': textQuery})
+                extra_context['form'] = simple_form
+
+            return object_list(request, objects, extra_context=extra_context)
 
 
     return render_to_response('gracedb/query.html',
diff --git a/templates/gracedb/event_list.html b/templates/gracedb/event_list.html
index 169706f0d4381623f3688424e38473c54258942f..25d5f45299e08470dc940a7e1abc9d36dae3a86d 100644
--- a/templates/gracedb/event_list.html
+++ b/templates/gracedb/event_list.html
@@ -23,11 +23,24 @@
 {% block content %}
 <p>{{ message }}</p>
 
+{% for field in form %}
+{% endfor %}
+
 {% if form %}
     <form action="{{ formAction }}"method="POST">
-        {{ form.as_table }} <a href="{{queryLink}}">Link</a>
+    <table>
+        {{ form.as_table }}
+        <tr><td/>
+            <td>
+                <a onClick="toggle_visibility('hints');">Hints on querying</a>
+                {% if queryLink %}
+                    | <a href="{{queryLink}}">Link to current query</a>
+                {% endif %}
+            </td>
+        </tr>
+        <tr><td/><td>{% include "gracedb/query_help_frag.html" %}</td></tr>
+    </table>
     </form>
-    {% include "gracedb/query_help_frag.html" %}
 {% endif %}
 
 {% if object_list.count %}
diff --git a/templates/gracedb/query.html b/templates/gracedb/query.html
index 0c2d5733532b78439e4825ad0f93167596560d99..b687a59a8b36310306ad3eef075f79f00e8f4113 100644
--- a/templates/gracedb/query.html
+++ b/templates/gracedb/query.html
@@ -23,19 +23,17 @@
 <form method="POST">
   <table>
     {{ form.as_table }}
-    <tr><td></td><td><input type="Submit"/></td></tr>
-    <tr><td></td>
-        <td>{% include "gracedb/query_help_frag.html" %}</td>
+    <tr><td/><td><a onClick="toggle_visibility('hints');">Hints on querying</a></td>
     </tr>
+    <tr><td/><td>{% include "gracedb/query_help_frag.html" %}</td></tr>
   </table>
 </form>
 
 <!-- Old style Query -->
 
 {% if form2 %}
-<hr/>
-<h4>Simple Query</h4>
-<div id="hiddenqueryform" class=hideableForm>
+<a><h3 onClick="toggle_visibility('hiddenqueryform');">Guided Query</h3></a>
+<div id="hiddenqueryform" style="display: none;">
     <form method="POST">
         <table>
             {{ form2.as_table }}
diff --git a/templates/gracedb/query_help_frag.html b/templates/gracedb/query_help_frag.html
index 10e9e8952f448271d2f0a9952ca6cc777abfde17..6ee13d61b30e4b543a90893ea6cd381f10513a08 100644
--- a/templates/gracedb/query_help_frag.html
+++ b/templates/gracedb/query_help_frag.html
@@ -1,5 +1,4 @@
 
-<a onClick="toggle_visibility('hints');">Hints on querying:</a>
 <div id="hints" style="display: none;">
  <h5>By GPS Time</h5>
   Specifiy an exact GPS time, or a range.