diff --git a/embed/ephy-embed-single.c b/embed/ephy-embed-single.c
index afab4e1..142f0cf 100644
--- a/embed/ephy-embed-single.c
+++ b/embed/ephy-embed-single.c
@@ -20,7 +20,6 @@
 
 #include "config.h"
 
-#define LIBSOUP_I_HAVE_READ_BUG_594377_AND_KNOW_SOUP_PASSWORD_MANAGER_MIGHT_GO_AWAY
 #define NSPLUGINWRAPPER_SETUP "/usr/bin/mozilla-plugin-config"
 
 #include "ephy-embed-single.h"
@@ -50,8 +49,9 @@
 struct _EphyEmbedSinglePrivate {
   guint online : 1;
 
-  GHashTable *form_auth_data;
+  GHashTable *form_auth_data, *http_auth_data;
   WebKitSoupCache *cache;
+  WebKitSoupAuthDialog *auth_dialog;
 };
 
 enum {
@@ -234,6 +234,30 @@ remove_form_auth_data (gpointer key, gpointer value, gpointer user_data)
     free_form_auth_data_list ((GSList*)value);
 }
 
+static GSList *
+get_saved_users_for_http_auth (WebKitSoupAuthDialog *auth_dialog,
+                               SoupMessage *message, SoupAuth *auth,
+                               gpointer single)
+{
+  EphyEmbedSinglePrivate *priv = EPHY_EMBED_SINGLE (single)->priv;
+}
+
+static char *
+get_saved_password_for_http_auth (WebKitSoupAuthDialog *auth_dialog,
+                                  SoupMessage *message, SoupAuth *auth,
+                                  const char *user)
+{
+  EphyEmbedSinglePrivate *priv = EPHY_EMBED_SINGLE (single)->priv;
+}
+
+static void
+save_password_for_http_auth (WebKitSoupAuthDialog *authDialog,
+                             SoupMessage *message, SoupAuth *auth,
+                             const char *user, const char *password)
+{
+  EphyEmbedSinglePrivate *priv = EPHY_EMBED_SINGLE (single)->priv;
+}
+
 static void
 ephy_embed_single_dispose (GObject *object)
 {
@@ -246,6 +270,13 @@ ephy_embed_single_dispose (GObject *object)
     priv->cache = NULL;
   }
 
+  if (priv->auth_dialog) {
+    g_signal_handlers_disconnect_matched (priv->auth_dialog,
+                                          G_SIGNAL_MATCH_DATA,
+                                          0, 0, NULL, NULL, object);
+    priv->auth_dialog = NULL;
+  }
+
   G_OBJECT_CLASS (ephy_embed_single_parent_class)->dispose (object);
 }
 
@@ -535,14 +566,22 @@ ephy_embed_single_initialize (EphyEmbedSingle *single)
                     G_CALLBACK (cache_size_cb),
                     single);
 
-#ifdef SOUP_TYPE_PASSWORD_MANAGER
-  /* Use GNOME keyring to store passwords. Only add the manager if we
-     are not using a private session, otherwise we want any new
-     password to expire when we exit *and* we don't want to use any
-     existing password in the keyring */
-  if (ephy_has_private_profile () == FALSE)
-    soup_session_add_feature_by_type (session, SOUP_TYPE_PASSWORD_MANAGER_GNOME);
-#endif
+  /* HTTP auth password-handling signals; connect to these only if
+   * not using a private profile
+   */
+  if (ephy_has_private_profile () == FALSE) {
+    SoupSessionFeature *auth_dialog;
+
+    priv->auth_dialog = (WebKitSoupAuthDialog *)soup_session_get_feature_by_type (session, WEBKIT_TYPE_SOUP_AUTH_DIALOG);
+    if (priv->auth_dialog) {
+      g_signal_connect (priv->auth_dialog, "saved-users-for-auth",
+                        G_CALLBACK (get_saved_users_for_http_auth), single);
+      g_signal_connect (priv->auth_dialog, "saved-password-for-auth",
+                        G_CALLBACK (get_saved_password_for_http_auth), single);
+      g_signal_connect (priv->auth_dialog, "save-password",
+                        G_CALLBACK (save_password_for_http_auth), single);
+    }
+  }
 
   return TRUE;
 }
