diff --git a/camel/providers/groupwise/camel-groupwise-store.c b/camel/providers/groupwise/camel-groupwise-store.c
index c15776b..5362acb 100644
--- a/camel/providers/groupwise/camel-groupwise-store.c
+++ b/camel/providers/groupwise/camel-groupwise-store.c
@@ -178,6 +178,7 @@ groupwise_auth_loop (CamelService *service, CamelException *ex)
 	CamelGroupwiseStorePrivate *priv = groupwise_store->priv;
 	gboolean authenticated = FALSE;
 	gchar *uri;
+	guint32 prompt_flags = CAMEL_SESSION_PASSWORD_SECRET;
 	EGwConnectionErrors errors = {E_GW_CONNECTION_STATUS_INVALID_OBJECT, NULL};
 
 	if (priv->use_ssl && !g_str_equal (priv->use_ssl, "never"))
@@ -195,7 +196,7 @@ groupwise_auth_loop (CamelService *service, CamelException *ex)
 				"GroupWise", service->url->user, service->url->host);
 			service->url->passwd =
 				camel_session_get_password (session, service, "Groupwise",
-							    prompt, "password", CAMEL_SESSION_PASSWORD_SECRET, ex);
+							    prompt, "password", prompt_flags, ex);
 			g_free (prompt);
 
 			if (!service->url->passwd) {
@@ -215,7 +216,7 @@ groupwise_auth_loop (CamelService *service, CamelException *ex)
 		if (!E_IS_GW_CONNECTION(priv->cnc)) {
 			if (errors.status == E_GW_CONNECTION_STATUS_INVALID_PASSWORD) {
 				/* We need to un-cache the password before prompting again */
-				camel_session_forget_password (session, service, "Groupwise", "password", ex);
+				prompt_flags |= CAMEL_SESSION_PASSWORD_REPROMPT;
 				g_free (service->url->passwd);
 				service->url->passwd = NULL;
 				camel_exception_clear (ex);
diff --git a/camel/providers/imap/camel-imap-store.c b/camel/providers/imap/camel-imap-store.c
index 61ec57c..713f829 100644
--- a/camel/providers/imap/camel-imap-store.c
+++ b/camel/providers/imap/camel-imap-store.c
@@ -1150,6 +1150,7 @@ imap_auth_loop (CamelService *service, CamelException *ex)
 	gchar *errbuf = NULL;
 	gboolean authenticated = FALSE;
 	const gchar *auth_domain;
+	guint32 prompt_flags = CAMEL_SESSION_PASSWORD_SECRET;
 
 	auth_domain = camel_url_get_param (service->url, "auth-domain");
 
@@ -1190,7 +1191,7 @@ imap_auth_loop (CamelService *service, CamelException *ex)
 	while (!authenticated) {
 		if (errbuf) {
 			/* We need to un-cache the password before prompting again */
-			camel_session_forget_password (session, service, auth_domain, "password", ex);
+			prompt_flags |= CAMEL_SESSION_PASSWORD_REPROMPT;
 			g_free (service->url->passwd);
 			service->url->passwd = NULL;
 		}
@@ -1209,7 +1210,7 @@ imap_auth_loop (CamelService *service, CamelException *ex)
 
 			service->url->passwd = camel_session_get_password (
 				session, service, auth_domain, full_prompt,
-				"password", CAMEL_SESSION_PASSWORD_SECRET, ex);
+				"password", prompt_flags, ex);
 
 			g_free (base_prompt);
 			g_free (full_prompt);
diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c
index 7b9e0bf..811f8e0 100644
--- a/camel/providers/imapx/camel-imapx-server.c
+++ b/camel/providers/imapx/camel-imapx-server.c
@@ -2281,11 +2281,12 @@ imapx_reconnect (CamelIMAPXServer *is, CamelException *ex)
 	CamelService *service = (CamelService *) is->store;
 	const gchar *auth_domain = NULL;
 	gboolean authenticated = FALSE;
+	guint32 prompt_flags = CAMEL_SESSION_PASSWORD_SECRET;
 
 	while (!authenticated) {
 		if (errbuf) {
 			/* We need to un-cache the password before prompting again */
-			camel_session_forget_password (is->session, service, auth_domain, "password", ex);
+			prompt_flags |= CAMEL_SESSION_PASSWORD_REPROMPT;
 			g_free (service->url->passwd);
 			service->url->passwd = NULL;
 			camel_exception_clear (ex);
@@ -2310,7 +2311,7 @@ imapx_reconnect (CamelIMAPXServer *is, CamelException *ex)
 			auth_domain = camel_url_get_param (service->url, "auth-domain");
 			service->url->passwd = camel_session_get_password(is->session, (CamelService *)is->store,
 					auth_domain,
-					full_prompt, "password", CAMEL_SESSION_PASSWORD_SECRET, ex);
+					full_prompt, "password", prompt_flags, ex);
 
 			g_free (base_prompt);
 			g_free (full_prompt);
diff --git a/camel/providers/nntp/camel-nntp-store.c b/camel/providers/nntp/camel-nntp-store.c
index d42f91f..7ba0923 100644
--- a/camel/providers/nntp/camel-nntp-store.c
+++ b/camel/providers/nntp/camel-nntp-store.c
@@ -1307,12 +1307,14 @@ camel_nntp_try_authenticate (CamelNNTPStore *store, CamelException *ex)
 
 		service->url->passwd =
 			camel_session_get_password (session, service, NULL,
-						    prompt, "password", CAMEL_SESSION_PASSWORD_SECRET, ex);
+						    prompt, "password", CAMEL_SESSION_PASSWORD_SECRET | (store->password_reprompt ? CAMEL_SESSION_PASSWORD_REPROMPT : 0), ex);
 		g_free(prompt);
 		g_free(base);
 
 		if (!service->url->passwd)
 			return -1;
+
+		store->password_reprompt = FALSE;
 	}
 
 	/* now, send auth info (currently, only authinfo user/pass is supported) */
@@ -1326,8 +1328,8 @@ camel_nntp_try_authenticate (CamelNNTPStore *store, CamelException *ex)
 			    camel_exception_get_id (ex) == CAMEL_EXCEPTION_SERVICE_UNAVAILABLE)
 				return ret;
 
-			/* Need to forget the password here since we have no context on it */
-			camel_session_forget_password(session, service, NULL, "password", ex);
+			/* To force password reprompt */
+			store->password_reprompt = TRUE;
 			g_free (service->url->passwd);
 			service->url->passwd = NULL;
 			goto retry;
diff --git a/camel/providers/nntp/camel-nntp-store.h b/camel/providers/nntp/camel-nntp-store.h
index 1a07a95..95bede9 100644
--- a/camel/providers/nntp/camel-nntp-store.h
+++ b/camel/providers/nntp/camel-nntp-store.h
@@ -89,6 +89,7 @@ struct _CamelNNTPStore {
 	guint posting_allowed:1;
 	guint do_short_folder_notation:1;
 	guint folder_hierarchy_relative:1;
+	gboolean password_reprompt;
 
 	struct _CamelNNTPStoreSummary *summary;
 
diff --git a/camel/providers/pop3/camel-pop3-store.c b/camel/providers/pop3/camel-pop3-store.c
index 6e31ff7..78d4be6 100644
--- a/camel/providers/pop3/camel-pop3-store.c
+++ b/camel/providers/pop3/camel-pop3-store.c
@@ -667,10 +667,6 @@ pop3_connect (CamelService *service,
 			errbuf = g_markup_printf_escaped ("%s\n\n", camel_exception_get_description (ex));
 			camel_exception_clear (ex);
 
-			camel_session_forget_password (
-				session, service, NULL, "password", ex);
-			camel_exception_clear (ex);
-
 			g_free (service->url->passwd);
 			service->url->passwd = NULL;
 			reprompt = TRUE;
diff --git a/camel/providers/smtp/camel-smtp-transport.c b/camel/providers/smtp/camel-smtp-transport.c
index 7130893..41bfbad 100644
--- a/camel/providers/smtp/camel-smtp-transport.c
+++ b/camel/providers/smtp/camel-smtp-transport.c
@@ -485,7 +485,6 @@ smtp_connect (CamelService *service, CamelException *ex)
 		while (!authenticated) {
 			if (errbuf) {
 				/* We need to un-cache the password before prompting again */
-				camel_session_forget_password (session, service, NULL, "password", NULL);
 				g_free (service->url->passwd);
 				service->url->passwd = NULL;
 			}
