diff --git a/helios/fixtures/voter-file.csv b/helios/fixtures/voter-file.csv
index 8bb842d14a785cc39fd8a44737955f4f78cbccb1..b94bd1a4f447e0fb34691c45914c342fa95ced85 100644
--- a/helios/fixtures/voter-file.csv
+++ b/helios/fixtures/voter-file.csv
@@ -1,4 +1,4 @@
  benadida5,ben5@adida.net ,  Ben5 Adida 
 benadida6,ben6@adida.net,Ben6 Adida
 benadida7,ben7@adida.net,Ben7 Adida
-benadida8,ben8@adida.net,Ben8 Adida
+ernesto,helios-testing-ernesto@adida.net,Erñesto Testing Helios
\ No newline at end of file
diff --git a/helios/models.py b/helios/models.py
index 45dba1d95cbef8618f9341795ad2c0504e7896fc..a4583cccb19d98c9cd7546702030e4546c3772b5 100644
--- a/helios/models.py
+++ b/helios/models.py
@@ -11,7 +11,7 @@ from django.utils import simplejson
 from django.conf import settings
 from django.core.mail import send_mail
 
-import datetime, logging, uuid, random, StringIO, io
+import datetime, logging, uuid, random, io
 
 from crypto import electionalgs, algs, utils
 from helios import utils as heliosutils
@@ -668,7 +668,12 @@ class VoterFile(models.Model):
 
   def itervoters(self):
     if self.voter_file_content:
-      voter_stream = io.StringIO(unicode(self.voter_file_content), newline=None)
+      if type(self.voter_file_content) == unicode:
+        content = self.voter_file_content.encode('utf-8')
+      else:
+        content = self.voter_file_content
+
+      voter_stream = io.BytesIO(content, newline=None)
     else:
       voter_stream = open(self.voter_file.path, "rU")
 
@@ -680,13 +685,13 @@ class VoterFile(models.Model):
       if len(voter_fields) < 1:
         continue
     
-      return_dict = {'voter_id': voter_fields[0]}
+      return_dict = {'voter_id': voter_fields[0].strip()}
 
       if len(voter_fields) > 1:
-        return_dict['email'] = voter_fields[1]
+        return_dict['email'] = voter_fields[1].strip()
 
       if len(voter_fields) > 2:
-        return_dict['name'] = voter_fields[2]
+        return_dict['name'] = voter_fields[2].strip()
 
       yield return_dict
     
@@ -694,51 +699,25 @@ class VoterFile(models.Model):
     self.processing_started_at = datetime.datetime.utcnow()
     self.save()
 
-    election = self.election
-
-    # now we're looking straight at the content
-    if self.voter_file_content:
-      voter_stream = io.StringIO(unicode(self.voter_file_content), newline=None)
-    else:
-      voter_stream = open(self.voter_file.path, "rU")
-
-    # reader = unicode_csv_reader(voter_stream)
-    reader = unicodecsv.reader(voter_stream, encoding='utf-8')
-    
+    election = self.election    
     last_alias_num = election.last_alias_num
 
     num_voters = 0
     new_voters = []
-    for voter in reader:
-      # bad line
-      if len(voter) < 1:
-        continue
-    
+    for voter in self.itervoters():
       num_voters += 1
-      voter_id = voter[0].strip()
-      name = voter_id
-      email = voter_id
-    
-      if len(voter) > 1:
-        email = voter[1].strip()
-    
-      if len(voter) > 2:
-        name = voter[2].strip()
-    
-      # create the user -- NO MORE
-      # user = User.update_or_create(user_type='password', user_id=email, info = {'name': name})
     
       # does voter for this user already exist
-      voter = Voter.get_by_election_and_voter_id(election, voter_id)
+      existing_voter = Voter.get_by_election_and_voter_id(election, voter['voter_id'])
     
       # create the voter
-      if not voter:
+      if not existing_voter:
         voter_uuid = str(uuid.uuid4())
-        voter = Voter(uuid= voter_uuid, user = None, voter_login_id = voter_id,
-                      voter_name = name, voter_email = email, election = election)
-        voter.generate_password()
-        new_voters.append(voter)
-        voter.save()
+        existing_voter = Voter(uuid= voter_uuid, user = None, voter_login_id = voter['voter_id'],
+                      voter_name = voter['name'], voter_email = voter['email'], election = election)
+        existing_voter.generate_password()
+        new_voters.append(existing_voter)
+        existing_voter.save()
 
     if election.use_voter_aliases:
       voter_alias_integers = range(last_alias_num+1, last_alias_num+1+num_voters)
diff --git a/helios/tests.py b/helios/tests.py
index e3be88594672250e7ad220b0e34da1e0709cd138..f04114a784be63fc6d1d2ad975019da394b4425b 100644
--- a/helios/tests.py
+++ b/helios/tests.py
@@ -544,6 +544,9 @@ class ElectionBlackboxTests(WebTest):
         self.assertContains(response, "Trustee #1")
 
         # add a few voters, via file upload
+        # this file now includes a UTF-8 encoded unicode character
+        # yes I know that's not how you spell Ernesto.
+        # I just needed some unicode quickly.
         FILE = "helios/fixtures/voter-file.csv"
         voters_file = open(FILE)
         response = self.client.post("/helios/elections/%s/voters/upload" % election_id, {'voters_file': voters_file})