         return fn ['Unauthorized'] unless voter.isNew()
         @person = voter
         @person.type = 'Voter'
-        @person.save =>
+        @person.save (error, person) =>
+          return fn error if error?
           @person.welcomeVoter fn
     else
       if @isNew()

      fn()

  beforeInstantiate: (fn) ->
    Person.first @person.id(), (error, voter) =>
      @person = voter
      fn()


    errors = []
    for dimension in [ 'Utility', 'Design', 'Innovation', 'Completeness' ]
      errors.push "#{dimension} should be between 1 and 5 stars" unless 1 <= this[dimension.toLowerCase()] <= 5
    errors.push 'Invalid email address' unless validEmail @email
    errors

_.extend Vote, {
