diff --git a/auth/templates/login_box.html b/auth/templates/login_box.html
index 4fb7a6eba40ef78e3b8ce7fa5778333b1bedd14d..ce047e2c12a29d1c215d88e815000182b16a06b1 100644
--- a/auth/templates/login_box.html
+++ b/auth/templates/login_box.html
@@ -5,7 +5,7 @@
 {% else %}
 {% for auth_system in enabled_auth_systems %}
 {% ifequal auth_system "password" %}
-<form method="post" action="{% url auth.auth_systems.password.password_login_view %}">
+<form method="post" action="{{ SECURE_URL_HOST }}{% url auth.auth_systems.password.password_login_view %}">
 <input type="hidden" name="election_uuid" value="{{election.uuid}}" />
 <input type="hidden" name="csrf_token" value="{{csrf_token}}" />
 <input type="hidden" name="return_url" value="{{return_url}}" />
diff --git a/helios/election_urls.py b/helios/election_urls.py
index 1ced54bdc31fe91d0387423d6350a44e17756d62..7d00dd6522dfd93850234c3f98322e7c5faaa3e6 100644
--- a/helios/election_urls.py
+++ b/helios/election_urls.py
@@ -14,6 +14,7 @@ urlpatterns = patterns('',
     # edit election params
     (r'^/edit$', one_election_edit),
     (r'^/schedule$', one_election_schedule),
+    (r'^/archive$', one_election_archive),
 
     # adding trustees
     (r'^/trustees/$', list_trustees),
diff --git a/helios/models.py b/helios/models.py
index 9f6d90aa6f0dd01b46428eb8847401b222798c7d..da9c252772c8156b1710a91295fa586ea64366ae 100644
--- a/helios/models.py
+++ b/helios/models.py
@@ -109,6 +109,10 @@ class Election(models.Model, electionalgs.Election):
 
     return utils.hash_b64(self.encrypted_tally.toJSON())
 
+  @property
+  def is_archived(self):
+    return self.archived_at != None
+
   @classmethod
   def get_featured(cls):
     return cls.objects.filter(featured_p = True).order_by('short_name')
@@ -118,12 +122,17 @@ class Election(models.Model, electionalgs.Election):
     return cls.objects.get_or_create(short_name = kwargs['short_name'], defaults=kwargs)
 
   @classmethod
-  def get_by_user_as_admin(cls, user, include_archived=False):
+  def get_by_user_as_admin(cls, user, archived_p=None, limit=None):
     query = cls.objects.filter(admin = user)
-    if include_archived:
-      query = query.filter('archived_at', None)
+    if archived_p == True:
+      query = query.exclude(archived_at= None)
+    if archived_p == False:
+      query = query.filter(archived_at= None)
     query = query.order_by('-created_at')
-    return query
+    if limit:
+      return query[:limit]
+    else:
+      return query
     
   @classmethod
   def get_by_user_as_voter(cls, user):
diff --git a/helios/templates/election_view.html b/helios/templates/election_view.html
index ba8e74b619d19fa5d8a04eee88726aa21d6309bd..65b16a8dbfb5c525d0438bf193f444d292d074b5 100644
--- a/helios/templates/election_view.html
+++ b/helios/templates/election_view.html
@@ -24,7 +24,14 @@ if (!navigator.javaEnabled()) {
 {% endif %}
 {% endif %}</h2>
 <p style="padding-top:0px; margin-top:0px">
-an election created by <u><b>{{election.admin.display_html_small|safe}}</b></u><br />
+an election created by <u><b>{{election.admin.display_html_small|safe}}</b></u>
+{% if election.is_archived %}
+[archived]
+{% endif %}
+{% if admin_p %}
+&nbsp;[{% if election.is_archived %}<a href="{% url helios.views.one_election_archive election_uuid=election.uuid %}?archive_p=0">unarchive it</a>{% else %}<a href="{% url helios.views.one_election_archive election_uuid=election.uuid %}?archive_p=1">archive it</a>{% endif %}]
+{% endif %}
+<br />
 {% if admin_p %}
 {% if election.featured_p %}
 this election is featured on the front page.
diff --git a/helios/tests.py b/helios/tests.py
index b01341cd4f2a405c46b2dc139d62731268ff4b2d..3130d88be32916b35cd17d38855e57cf697adaab 100644
--- a/helios/tests.py
+++ b/helios/tests.py
@@ -126,6 +126,13 @@ class ElectionModelTests(TestCase):
         # make sure it logged something
         self.assertTrue(len(self.election.get_log().all()) > 0)
 
+    def test_archive(self):
+        self.election.archived_at = datetime.datetime.utcnow()
+        self.assertTrue(self.election.is_archived)
+
+        self.election.archived_at = None
+        self.assertFalse(self.election.is_archived)
+
     def test_voter_registration(self):
         # before adding a voter
         voters = models.Voter.get_by_election(self.election)
diff --git a/helios/views.py b/helios/views.py
index d4dad1e9ae44e817337f5640bce04ac7e52d5dce..bcb741a017e033bc31875778441ce452c37eb25d 100644
--- a/helios/views.py
+++ b/helios/views.py
@@ -57,7 +57,7 @@ def get_election_url(election):
 def home(request):
   user = get_user(request)
   if user:
-    elections = Election.get_by_user_as_admin(user)
+    elections = Election.get_by_user_as_admin(user, archived_p = False)
   else:
     elections = []
   
@@ -428,7 +428,7 @@ def one_election_cast(request, election):
 
   save_in_session_across_logouts(request, 'encrypted_vote', encrypted_vote)
 
-  return HttpResponseRedirect("%s%s" % (settings.URL_HOST, reverse(one_election_cast_confirm, args=[election.uuid])))
+  return HttpResponseRedirect("%s%s" % (settings.SECURE_URL_HOST, reverse(one_election_cast_confirm, args=[election.uuid])))
   
 @election_view(frozen=True)
 def one_election_cast_confirm(request, election):
@@ -436,7 +436,7 @@ def one_election_cast_confirm(request, election):
 
   # if no encrypted vote, the user is reloading this page or otherwise getting here in a bad way
   if not request.session.has_key('encrypted_vote'):
-    return HttpResponseRedirect("/")
+    return HttpResponseRedirect(settings.URL_HOST)
 
   if user:
     voter = Voter.get_by_election_and_user(election, user)
@@ -515,7 +515,7 @@ def one_election_cast_confirm(request, election):
     
     # voting has not started or has ended
     if (not election.voting_has_started()) or election.voting_has_stopped():
-      return HttpResponseRedirect("/")
+      return HttpResponseRedirect(settings.URL_HOST)
             
     # if user is not logged in
     # bring back to the confirmation page to let him know
@@ -539,7 +539,7 @@ def one_election_cast_confirm(request, election):
     # remove the vote from the store
     del request.session['encrypted_vote']
     
-    return HttpResponseRedirect(reverse(one_election_cast_done, args=[election.uuid]))
+    return HttpResponseRedirect("%s%s" % (settings.URL_HOST, reverse(one_election_cast_done, args=[election.uuid])))
   
 @election_view()
 def one_election_cast_done(request, election):
@@ -679,7 +679,7 @@ def one_election_set_featured(request, election):
   return HttpResponseRedirect(reverse(one_election_view, args=[election.uuid]))
 
 @election_admin()
-def one_election_archive(request, election, admin, api_client):
+def one_election_archive(request, election):
   
   archive_p = request.GET.get('archive_p', True)
   
@@ -688,13 +688,9 @@ def one_election_archive(request, election, admin, api_client):
   else:
     election.archived_at = None
     
-  # FIXME: what is this??
-  storage.election_update(election)
+  election.save()
 
-  if get_user(request):
-    return HttpResponseRedirect(reverse(one_election_view, args=[election.uuid]))
-  else:
-    return SUCCESS
+  return HttpResponseRedirect(reverse(one_election_view, args=[election.uuid]))
 
 # changed from admin to view because 
 # anyone can see the questions, the administration aspect is now
diff --git a/server_ui/templates/index.html b/server_ui/templates/index.html
index 6450d286e0f55fd1e9ea60b3b7912b8ee3f17371..493c371e4e449f8f5e7284659fd143ef1d70875b 100644
--- a/server_ui/templates/index.html
+++ b/server_ui/templates/index.html
@@ -21,9 +21,10 @@
 {% endfor %}
 </ul>
 {% else %}
-<em>none yet</em><br />
+<em>none yet</em>
 {% endif %}
-<div style="text-align:right">
+<p>[<a href="{% url helios.views.elections_administered %}">see all</a>]</p>
+<div style="text-align:right;">
 <a href="{% url helios.views.election_new %}" style="font-size: 1.2em; padding:5px; background: #eee; border: 1px solid #888">create election &gt;</a>
 </div>
 {% endif %}
diff --git a/server_ui/views.py b/server_ui/views.py
index b832f2ab323b3bfda8ac0cd68ac239b2decccb06..417f4ac52142d6f019a58af4248fa8e29f8f4cd3 100644
--- a/server_ui/views.py
+++ b/server_ui/views.py
@@ -31,7 +31,7 @@ def home(request):
   create_p = can_create_election(request)
 
   if create_p:
-    elections_administered = Election.get_by_user_as_admin(user)
+    elections_administered = Election.get_by_user_as_admin(user, archived_p=False, limit=5)
   else:
     elections_administered = None