diff --git a/helios/fields.py b/helios/fields.py
index 676a50608dd0ab80bc8e6ed8ff4407ebcf90e1a5..cf2ad6c3e7c2c6b506c0080b432f6207f4e37807 100644
--- a/helios/fields.py
+++ b/helios/fields.py
@@ -24,7 +24,7 @@ class SplitDateTimeField(fields.MultiValueField):
         """
         if data_list:
             if not (data_list[0] and data_list[1]):
-                raise forms.ValidationError("Field is missing data.")
+                return None
             return datetime.datetime.combine(*data_list)
         return None
 
diff --git a/helios/forms.py b/helios/forms.py
index ab6ce423d2990beed49c53ddb5688bc53e10b140..8851d665bce7961b9e5673aa82ebad88debc6e54 100644
--- a/helios/forms.py
+++ b/helios/forms.py
@@ -23,13 +23,11 @@ class ElectionForm(forms.Form):
   if settings.ALLOW_ELECTION_INFO_URL:
     election_info_url = forms.CharField(required=False, initial="", label="Election Info Download URL", help_text="the URL of a PDF document that contains extra election information, e.g. candidate bios and statements")
   
-
-class ElectionTimesForm(forms.Form):
   # times
   voting_starts_at = SplitDateTimeField(help_text = 'UTC date and time when voting begins',
-                                   widget=SplitSelectDateTimeWidget)
+                                   widget=SplitSelectDateTimeWidget, required=False)
   voting_ends_at = SplitDateTimeField(help_text = 'UTC date and time when voting ends',
-                                   widget=SplitSelectDateTimeWidget)
+                                   widget=SplitSelectDateTimeWidget, required=False)
 
   
 class EmailVotersForm(forms.Form):
diff --git a/helios/widgets.py b/helios/widgets.py
index ac28d9dd3f5f8aeab7074f35d83ec09f1dc2bc18..7eff891c13b6601a9bd77c78185e25415463a094 100644
--- a/helios/widgets.py
+++ b/helios/widgets.py
@@ -157,8 +157,8 @@ class SelectTimeWidget(Widget):
             elif meridiem.lower().startswith('a') and int(h) == 12:
                 h = 0
         
-        if (int(h) == 0 or h) and m and s:
-            return '%s:%s:%s' % (h, m, s)
+        if (int(h) == 0 or h) and m:
+            return '%s:%s' % (h, m)
 
         return data.get(name, None)
 
@@ -174,6 +174,12 @@ class SplitSelectDateTimeWidget(MultiWidget):
         widgets = (SelectDateWidget(attrs=attrs, years=years), SelectTimeWidget(attrs=attrs, hour_step=hour_step, minute_step=minute_step, twelve_hr=twelve_hr))
         super(SplitSelectDateTimeWidget, self).__init__(widgets, attrs)
 
+    # See https://stackoverflow.com/questions/4324676/django-multiwidget-subclass-not-calling-decompress
+    def value_from_datadict(self, data, files, name):
+        if data.get(name, None) is None:
+            return [widget.value_from_datadict(data, files, name + '_%s' % i) for i, widget in enumerate(self.widgets)]
+        return self.decompress(data.get(name, None))
+
     def decompress(self, value):
         if value:
             return [value.date(), value.time().replace(microsecond=0)]