diff --git a/gracedb/events/migrations/0036_populate_voevent_fields.py b/gracedb/events/migrations/0036_populate_voevent_fields.py
index 554b978b1acfb30e211852fa4b7de74ec1ec5619..f5da68f22e319554e3eb894bdf29c81dfd1f6ba3 100644
--- a/gracedb/events/migrations/0036_populate_voevent_fields.py
+++ b/gracedb/events/migrations/0036_populate_voevent_fields.py
@@ -89,19 +89,34 @@ def populate_values(voevent, event_or_superevent):
 
     # Parse parameters
     for parameter in PARAMETER_MAPPINGS:
+        result = None
         for path in PARAMETER_MAPPINGS[parameter]:
-            result = None
             try:
                 result = root.find(path)
             except SyntaxError as e:
                 pass
+            else:
+                # If result is not None, we've found something, so let's break
+                if result is not None:
+                    break
+
         if result is None:
             # not found, likely due to an old VOEvent schema
             continue
 
         # Special parameter parsing
         if parameter in ['hardware_inj', 'internal', 'open_alert']:
-            value = bool(int(result.attrib['value']))
+            # Better bool processing
+            try:
+                value = bool(int(result.attrib['value']))
+            except ValueError:
+                value = result.attrib['value']
+                if value.lower() in ['f', '0', 'false']:
+                    value = False
+                elif value.lower() in ['t', '1', 'true']:
+                    value = True
+                else:
+                    raise ValueError("Can't process value {0}".format(value))
         elif parameter == 'skymap_filename':
             value = result.attrib['value'].split('/')[-1]
         elif parameter == 'skymap_type':
@@ -118,9 +133,10 @@ def populate_values(voevent, event_or_superevent):
     for parameter, str_list in DESCRIPTION_PARAMETER_MAPPINGS.items():
         for s in str_list:
             if any([s in dp for dp in desc_text]):
-                setattr(voevent, parameter, True)
+                value = True
             else:
-                setattr(voevent, parameter, False)
+                value = False
+            setattr(voevent, parameter, value)
 
     # Save VOEvent
     voevent.save()
diff --git a/gracedb/superevents/migrations/0004_populate_voevent_fields.py b/gracedb/superevents/migrations/0004_populate_voevent_fields.py
index b298253188c7ae17510dfca74084686af8024542..a693ff8355d620ae3e55323cad02a360ecbc3907 100644
--- a/gracedb/superevents/migrations/0004_populate_voevent_fields.py
+++ b/gracedb/superevents/migrations/0004_populate_voevent_fields.py
@@ -86,12 +86,17 @@ def populate_values(voevent, event_or_superevent):
 
     # Parse parameters
     for parameter in PARAMETER_MAPPINGS:
+        result = None
         for path in PARAMETER_MAPPINGS[parameter]:
-            result = None
             try:
                 result = root.find(path)
             except SyntaxError as e:
                 pass
+            else:
+                # If result is not None, we've found something, so let's break
+                if result is not None:
+                    break
+
         if result is None:
             continue
 
@@ -114,9 +119,10 @@ def populate_values(voevent, event_or_superevent):
     for parameter, str_list in DESCRIPTION_PARAMETER_MAPPINGS.items():
         for s in str_list:
             if any([s in dp for dp in desc_text]):
-                setattr(voevent, parameter, True)
+                value = True
             else:
-                setattr(voevent, parameter, False)
+                value = False
+            setattr(voevent, parameter, value)
 
     # Save VOEvent
     voevent.save()