diff --git a/helios/templates/voters_upload_confirm.html b/helios/templates/voters_upload_confirm.html
index 4f5d2adae032cde21bf32ad697abd11f1a03649c..20caaae7a311f9fdc380c9e1f74315135a73174c 100644
--- a/helios/templates/voters_upload_confirm.html
+++ b/helios/templates/voters_upload_confirm.html
@@ -14,11 +14,16 @@ You have uploaded a file of voters. The first few rows of this file are:
 {% endfor %}
 </table>
 
-{% if email_problem %}
+{% if problems %}
 <p style="font-size: 1.5em;">
-<b>HOLD ON</b>: those don't look like correct email addresses. Are you sure you uploaded a file with email address as second field?<br />
+HOLD ON:<br />
+{% for problem in problems %}
+- {{problem}}<br />
+{% endfor %}
+</p>
+<br />
 
-<a href="{% url helios.views.voters_upload_cancel election.uuid %}">no, let me upload a different file</a>
+<a href="{% url helios.views.voters_upload_cancel election.uuid %}">never mind, upload a different file</a>
 </p>
 
 {% else %}
diff --git a/helios/views.py b/helios/views.py
index f6ed5cb3d47b33e47c47349b358937414e4bd560..021e448798276d1c8aacd52c04b46e8eb45e94fe 100644
--- a/helios/views.py
+++ b/helios/views.py
@@ -1229,14 +1229,21 @@ def voters_upload(request, election):
         voter_file_obj = election.add_voters_file(voters_file)
 
         request.session['voter_file_id'] = voter_file_obj.id
-        
+
+        problems = []
+
         # import the first few lines to check
-        voters = [v for v in voter_file_obj.itervoters()][:5]
+        try:
+          voters = [v for v in voter_file_obj.itervoters()][:5]
+        except:
+          voters = []
+          problems.append("your CSV file could not be processed. Please check that it is a proper CSV file.")
 
         # check if voter emails look like emails
-        email_problem = False in [validate_email(v['email']) for v in voters]
+        if False in [validate_email(v['email']) for v in voters]:
+          problems.append("those don't look like correct email addresses. Are you sure you uploaded a file with email address as second field?")
 
-        return render_template(request, 'voters_upload_confirm', {'election': election, 'voters': voters, 'email_problem': email_problem})
+        return render_template(request, 'voters_upload_confirm', {'election': election, 'voters': voters, 'problems': problems})
       else:
         return HttpResponseRedirect("%s?%s" % (settings.SECURE_URL_HOST + reverse(voters_upload, args=[election.uuid]), urllib.urlencode({'e':'no voter file specified, try again'})))