diff --git a/gracedb/events/translator.py b/gracedb/events/translator.py
index 013bbd1427e6987adef66efe3fdd8b91ee9eaaf3..bdd19d292b7874f035dcbf03e280c35f49da4976 100644
--- a/gracedb/events/translator.py
+++ b/gracedb/events/translator.py
@@ -22,6 +22,9 @@ import StringIO
 
 from math import sqrt
 
+import logging
+logger = logging.getLogger(__name__)
+
 use_in(LIGOLWContentHandler)
 
 # This function checks for 'inf' in a float field, asks the database
@@ -397,31 +400,37 @@ def handle_uploaded_data(event, datafilename,
                            comment=error)
             log.save()
     elif pipeline == 'LIB':
+        # lambda function for converting to a type if not None
+        typecast = lambda t, v: t(v) if v is not None else v
+        n_int = lambda v: typecast(int, v)
+        n_float = lambda v: typecast(float, v)
+
+        # Open event file and get data
         event_file = open(datafilename, 'r')
         event_file_contents = event_file.read()
         event_file.close()
         event_dict = json.loads(event_file_contents)
 
         # Extract relevant data from dictionary to put into event record.
-        event.gpstime     = event_dict['gpstime']
-        event.far         = event_dict['FAR']
+        event.gpstime     = n_float(event_dict.get('gpstime'))
+        event.far         = n_float(event_dict.get('FAR'))
         event.instruments = event_dict['instruments']
-        event.nevents     = event_dict.get('nevents', 1)
-        event.likelihood  = event_dict.get('likelihood', None)
+        event.nevents     = n_int(event_dict.get('nevents', 1))
+        event.likelihood  = n_float(event_dict.get('likelihood', None))
 
         # Assign analysis-specific attributes
-        event.bci         = event_dict.get('BCI', None)
-        event.quality_mean = event_dict.get('quality_posterior_mean', None)
-        event.quality_median = event_dict.get('quality_posterior_median', None)
-        event.bsn         = event_dict.get('BSN', None)
-        event.omicron_snr_network = event_dict.get('Omicron_SNR_Network', None)
-        event.omicron_snr_H1 = event_dict.get('Omicron_SNR_H1', None)
-        event.omicron_snr_L1 = event_dict.get('Omicron_SNR_L1', None)
-        event.omicron_snr_V1 = event_dict.get('Omicron_SNR_V1', None)
-        event.hrss_mean   = event_dict.get('hrss_posterior_mean', None)
-        event.hrss_median   = event_dict.get('hrss_posterior_median', None)
-        event.frequency_mean   = event_dict.get('frequency_posterior_mean', None)
-        event.frequency_median = event_dict.get('frequency_posterior_median', None)
+        event.bci         = n_float(event_dict.get('BCI', None))
+        event.quality_mean = n_float(event_dict.get('quality_posterior_mean', None))
+        event.quality_median = n_float(event_dict.get('quality_posterior_median', None))
+        event.bsn         = n_float(event_dict.get('BSN', None))
+        event.omicron_snr_network = n_float(event_dict.get('Omicron_SNR_Network', None))
+        event.omicron_snr_H1 = n_float(event_dict.get('Omicron_SNR_H1', None))
+        event.omicron_snr_L1 = n_float(event_dict.get('Omicron_SNR_L1', None))
+        event.omicron_snr_V1 = n_float(event_dict.get('Omicron_SNR_V1', None))
+        event.hrss_mean   = n_float(event_dict.get('hrss_posterior_mean', None))
+        event.hrss_median   = n_float(event_dict.get('hrss_posterior_median', None))
+        event.frequency_mean   = n_float(event_dict.get('frequency_posterior_mean', None))
+        event.frequency_median = n_float(event_dict.get('frequency_posterior_median', None))
         event.save()
 
     else:
@@ -586,11 +595,16 @@ class CwbData(Translator):
                     pass
                 break
 
+        # lambda function for converting to a type if not None
+        typecast = lambda t, v: t(v) if v is not None else v
+        n_int = lambda v: typecast(int, v)
+        n_float = lambda v: typecast(float, v) 
+
         data = {}
         data['rawdata'] = rawdata
-        data['gpstime']    = rawdata.get('time',[None])[0]
-        data['likelihood'] = rawdata.get('likelihood',[None])[0]
-        data['far']        = rawdata.get('far',[None])[0]
+        data['gpstime']    = n_float(rawdata.get('time',[None])[0])
+        data['likelihood'] = n_float(rawdata.get('likelihood',[None])[0])
+        data['far']        = n_float(rawdata.get('far',[None])[0])
 
 
         # Get ifos and corresponding GPS times.
@@ -614,14 +628,14 @@ class CwbData(Translator):
             data['start_time_ns'] = None
 
         data['ifo'] = ','.join(ifos)
-        data['duration']      = rawdata.get('duration',[None])[0]
-        data['central_freq']  = rawdata.get('frequency',[None])[0]
-        data['bandwidth']     = rawdata.get('bandwidth',[None])[0]
+        data['duration']      = n_float(rawdata.get('duration',[None])[0])
+        data['central_freq']  = n_float(rawdata.get('frequency',[None])[0])
+        data['bandwidth']     = n_float(rawdata.get('bandwidth',[None])[0])
         #data['snr']           = rawdata.get('snr',[None])[0]
         # rho is what log file says is "effective snr"
-        data['snr']           = data['rawdata'].get('rho',[None])[0]
-        data['ligo_axis_ra']     = data['rawdata'].get('phi',[None,None,None])[2]
-        data['ligo_axis_dec']    = data['rawdata'].get('theta',[None,None,None])[2]
+        data['snr']           = n_float(data['rawdata'].get('rho',[None])[0])
+        data['ligo_axis_ra']     = n_float(data['rawdata'].get('phi',[None,None,None])[2])
+        data['ligo_axis_dec']    = n_float(data['rawdata'].get('theta',[None,None,None])[2])
 
         # Check for the links at the end.
         ced_link = None
diff --git a/gracedb/events/view_logic.py b/gracedb/events/view_logic.py
index 1067697d30285052045f294816300b8a13e9df85..945686c01107992839674b887e8a3d227f51e378 100644
--- a/gracedb/events/view_logic.py
+++ b/gracedb/events/view_logic.py
@@ -125,6 +125,10 @@ def _createEventFromForm(request, form):
                 file_contents = file_contents)
             warnings += translator_warnings
 
+            # Refresh event from database to ensure attribute types are
+            # properly set.
+            event.refresh_from_db()
+
             # Add labels here - need event to have been saved already
             for label in label_list:
 
diff --git a/gracedb/events/view_utils.py b/gracedb/events/view_utils.py
index 9e721f400b089500a0ded89d9e7c5caad112d572..b4272ce32f86e71ad1afcea311533b73be42fe8c 100644
--- a/gracedb/events/view_utils.py
+++ b/gracedb/events/view_utils.py
@@ -35,6 +35,9 @@ import calendar
 from django.utils import timezone
 from datetime import datetime, timedelta
 
+import logging
+logger = logging.getLogger(__name__)
+
 SERVER_TZ = pytz.timezone(settings.TIME_ZONE)
 def timeToUTC(dt):
     if not dt.tzinfo: