diff --git a/auth/auth_systems/password.py b/auth/auth_systems/password.py
index f57dfb79cdbce8c40199ae42096afb0072e09d36..d6b7e95f25d0e13529de453cd0ce39db3f7a86f2 100644
--- a/auth/auth_systems/password.py
+++ b/auth/auth_systems/password.py
@@ -45,18 +45,18 @@ def password_login_view(request):
   else:
     form = LoginForm(request.POST)
 
+    # set this in case we came here straight from the multi-login chooser
+    # and thus did not have a chance to hit the "start/password" URL
+    request.session['auth_system_name'] = 'password'
+    if request.POST.has_key('return_url'):
+      request.session['auth_return_url'] = request.POST.get('return_url')
+
     if form.is_valid():
       username = form.cleaned_data['username'].strip()
       password = form.cleaned_data['password'].strip()
       try:
         user = User.get_by_type_and_id('password', username)
         if password_check(user, password):
-          # set this in case we came here from another location than 
-          # the normal login process
-          request.session['auth_system_name'] = 'password'
-          if request.POST.has_key('return_url'):
-            request.session['auth_return_url'] = request.POST.get('return_url')
-
           request.session['password_user'] = user
           return HttpResponseRedirect(reverse(after))
       except User.DoesNotExist:
@@ -102,6 +102,7 @@ def get_auth_url(request, redirect_url = None):
     
 def get_user_info_after_auth(request):
   user = request.session['password_user']
+  del request.session['password_user']
   user_info = user.info
   
   return {'type': 'password', 'user_id' : user.user_id, 'name': user.name, 'info': user.info, 'token': None}
diff --git a/auth/templates/password/login.html b/auth/templates/password/login.html
index 9b038893d71d966c6a94a68eff78b0e9e4652a4e..c92b8f1d6f77a56a471c4386c37e6825b57dd9de 100644
--- a/auth/templates/password/login.html
+++ b/auth/templates/password/login.html
@@ -14,7 +14,7 @@
 {% endif %}
 
 <p>
-<form class="prettyform" action="" method="POST" id="create_election_form">
+<form class="prettyform" action="" method="POST" id="login_form">
     <input type="hidden" name="csrf_token" value="{{csrf_token}}" />
 <table>
     {{form.as_table}}
diff --git a/auth/views.py b/auth/views.py
index 7c3e1b9e0080932d322686bd1ddaab63833ddb71..94d459ce4fd1554634e11ca6e0a472ead72146c9 100644
--- a/auth/views.py
+++ b/auth/views.py
@@ -90,7 +90,6 @@ def do_local_logout(request):
   fields_to_save = dict([(name, request.session.get(name, None)) for name in field_names_to_save])
 
   # let's not forget to save the list of fields to save
-  field_names_to_save.append(FIELDS_TO_SAVE)
   fields_to_save[FIELDS_TO_SAVE] = field_names_to_save
 
   request.session.flush()
@@ -98,6 +97,9 @@ def do_local_logout(request):
   for name in field_names_to_save:
     request.session[name] = fields_to_save[name]
 
+  # copy the list of fields to save
+  request.session[FIELDS_TO_SAVE] = fields_to_save[FIELDS_TO_SAVE]
+
   request.session['user_for_remote_logout'] = user
 
 def do_remote_logout(request, user, return_url="/"):
@@ -105,8 +107,10 @@ def do_remote_logout(request, user, return_url="/"):
   auth_system = AUTH_SYSTEMS[user['type']]
   
   # does the auth system have a special logout procedure?
+  user_for_remote_logout = request.session.get('user_for_remote_logout', None)
+  del request.session['user_for_remote_logout']
   if hasattr(auth_system, 'do_logout'):
-    response = auth_system.do_logout(request.session.get('user_for_remote_logout', None))
+    response = auth_system.do_logout(user_for_remote_logout)
     return response
 
 def do_complete_logout(request, return_url="/"):
@@ -186,5 +190,9 @@ def after(request):
   return HttpResponseRedirect(reverse(after_intervention))
 
 def after_intervention(request):
-  return HttpResponseRedirect(request.session['auth_return_url'] or "/")
+  return_url = "/"
+  if request.session.has_key('auth_return_url'):
+    return_url = request.session['auth_return_url']
+    del request.session['auth_return_url']
+  return HttpResponseRedirect(return_url)