diff --git a/gracedb/models.py b/gracedb/models.py
index d1fb6a928bff248a6c8e5c89ece86e2585c0a90d..910e8e07a96c2fde89d2fefb76d10d066cd61a60 100644
--- a/gracedb/models.py
+++ b/gracedb/models.py
@@ -52,6 +52,7 @@ class Event(models.Model):
         ("X",   "X"),
         ("CWB", "CWB"),
         ("MBTA", "MBTAOnline"),
+        ("HWINJ", "HardwareInjection"),
     )
     submitter = models.ForeignKey(User)
     created = models.DateTimeField(auto_now_add=True)
@@ -82,6 +83,8 @@ class Event(models.Model):
     def graceid(self):
         if self.uid:
             return self.uid
+        elif self.analysisType == "HWINJ":
+            return "H%04d" % self.id
         return "G%04d" % self.id
 
     def weburl(self):
@@ -111,9 +114,13 @@ class Event(models.Model):
 
     @classmethod
     def getByGraceid(cls, id):
-        if id[0] == "G":
-            return cls.objects.get(id=int(id[1:]))
-        return cls.objects.get(uid=id)
+        if id[0] not in "GH":
+            # Very old, probably useless data.
+            return cls.objects.get(uid=id)
+        e = cls.objects.get(id=int(id[1:]))
+        if (id[0] == "G" and e.analysisType != "HWINJ") or (id[0]=="H" and e.analysisType =="HWINJ"):
+            return e
+        raise cls.DoesNotExist()
 
 class EventLog(models.Model):
     class Meta:
diff --git a/gracedb/query.py b/gracedb/query.py
index 907c08311babd3b4887edbb2a1ab67395d4cce2b..26ebf175e61030f986b9834ff3c86e213bcd7397 100644
--- a/gracedb/query.py
+++ b/gracedb/query.py
@@ -11,11 +11,11 @@
 
 #import pyparsing as p
 
-from models import Event
+import models
 from django.db.models import Q
 
 from pyparsing import \
-    Word, nums, Literal, delimitedList, Suppress, Group, \
+    Word, nums, Literal, delimitedList, Suppress, \
     Keyword, Combine, Or, Optional, OneOrMore, alphas, Regex, \
     opAssoc, operatorPrecedence, oneOf, \
     stringStart, stringEnd, ParseException
@@ -27,7 +27,10 @@ def maybeRange(name):
         return name, Q(**{name+"__range": toks.asList()})
     return f
 
-encodeType = dict([(x[1],x[0]) for x in Event.ANALYSIS_TYPE_CHOICES])
+encodeType = dict(
+    [(x[1],x[0]) for x in models.Event.ANALYSIS_TYPE_CHOICES] +
+    [(x[0],x[0]) for x in models.Event.ANALYSIS_TYPE_CHOICES]
+    )
 
 def doType(toks):
     return ("type", Q(analysisType__in=[encodeType[tok] for tok in toks]))
@@ -48,7 +51,7 @@ gpsQ = Optional(Suppress(Keyword("gpstime:"))) + (gpstime^gpstimeRange)
 gpsQ = gpsQ.setParseAction(maybeRange("gpstime"))
 
 # Analysis Groups
-groupNames = ["Test", "Burst", "CBC", "Stochastic", "CW"]
+groupNames = [group.name for group in models.Group.objects.all()]
 group = Or(map(Literal, groupNames)).setName("analysis group name")
 groupList = delimitedList(group, delim='|').setName("analysis group list")
 groupQ = (Optional(Suppress(Keyword("group:"))) + groupList)
@@ -56,7 +59,6 @@ groupQ = groupQ.setParseAction(lambda toks: ("group", Q(group__name__in=toks.asL
 
 
 # Analysis Types
-atypeNames = ["LowMass", "HighMass", "Inspiral", "Omega", "X"]
 atypeNames = encodeType.keys()
 atype = Or(map(Literal, atypeNames))
 atypeList = delimitedList(atype, delim='|').\
diff --git a/gracedb/translator.py b/gracedb/translator.py
index d1cea32793e74b18b1c81916d96b69eb8d214899..9f1a03671682f84ff9ac2b1892bec04141a81325 100644
--- a/gracedb/translator.py
+++ b/gracedb/translator.py
@@ -231,6 +231,23 @@ def handle_uploaded_data(event, datafilename,
                        issuer=event.submitter,
                        comment="Original Data")
         log.save()
+    elif event.analysisType == 'HWINJ':
+        try:
+            f = open(datafilename, "r")
+            for line in f.readlines():
+                if line.startswith("gpstime:"):
+                    times = line.split()
+                    event.gpstime = int(float(times[1]))
+                    event.save()
+                    break
+            f.close()
+        except:
+            pass
+        log = EventLog(event=event,
+                       filename=os.path.basename(datafilename),
+                       issuer=event.submitter,
+                       comment="Original Data")
+        log.save()
     else:
         log = EventLog(event=event,
                        filename=os.path.basename(datafilename),