diff --git a/smime/gui/certificate-manager.c b/smime/gui/certificate-manager.c
index b67577e..d8a0bcc 100644
--- a/smime/gui/certificate-manager.c
+++ b/smime/gui/certificate-manager.c
@@ -168,6 +168,7 @@ static void delete_cert (GtkWidget *button, CertPage *cp);
 static void import_cert (GtkWidget *button, CertPage *cp);
 
 static void load_certs (CertPage *cp);
+static void load_all_certs (ECertManagerConfigPrivate *priv);
 static void unload_certs (CertPage *cp);
 
 static void
@@ -803,6 +804,37 @@ unload_certs (CertPage *cp)
 }
 
 static void
+load_all_certs (ECertManagerConfigPrivate *priv)
+{
+	CERTCertList *certList;
+	CERTCertListNode *node;
+
+	g_return_if_fail (priv != NULL);
+
+	certList = PK11_ListCerts (PK11CertListUnique, NULL);
+
+	for (node = CERT_LIST_HEAD (certList);
+	     !CERT_LIST_END (node, certList);
+	     node = CERT_LIST_NEXT (node)) {
+		ECert *cert = e_cert_new (CERT_DupCertificate ((CERTCertificate *) node->cert));
+		ECertType ct = e_cert_get_cert_type (cert);
+
+		/* show everything else in a contact tab */
+		if (ct == priv->yourcerts_page->cert_type) {
+			add_cert (priv->yourcerts_page, cert);
+		} else if (ct == priv->contactcerts_page->cert_type || (ct != E_CERT_CA && ct != E_CERT_USER)) {
+			add_cert (priv->contactcerts_page, cert);
+		} else if (ct == priv->authoritycerts_page->cert_type) {
+			add_cert (priv->authoritycerts_page, cert);
+		} else {
+			g_object_unref (cert);
+		}
+	}
+
+	CERT_DestroyCertList (certList);
+}
+
+static void
 load_certs (CertPage *cp)
 {
 	CERTCertList *certList;
@@ -837,13 +869,11 @@ populate_ui (ECertManagerConfig *ecmc)
 	ECertManagerConfigPrivate *priv = ecmc->priv;
 
 	unload_certs (priv->yourcerts_page);
-	load_certs (priv->yourcerts_page);
 
 	unload_certs (priv->contactcerts_page);
-	load_certs (priv->contactcerts_page);
 
 	unload_certs (priv->authoritycerts_page);
-	load_certs (priv->authoritycerts_page);
+	load_all_certs (priv);
 
 	/* expand all three trees */
 	gtk_tree_view_expand_all (ECMC_TREE_VIEW (yourcerts_page));
