diff --git a/gnome-initial-setup/pages/account/gis-account-page.c b/gnome-initial-setup/pages/account/gis-account-page.c
index ec28678..8f00389 100644
--- a/gnome-initial-setup/pages/account/gis-account-page.c
+++ b/gnome-initial-setup/pages/account/gis-account-page.c
@@ -491,6 +491,110 @@ save_when_loaded (ActUser        *user,
   save_account_data (page);
 }
 
+GVariant *
+build_keyring_password (GisAccountPage *page, const gchar *session)
+{
+  const gchar *password = gtk_entry_get_text (OBJ (GtkEntry*, "account-password-entry"));
+  return g_variant_new ("(o@ay@ays)", session,
+                        g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE, "", 0, 1),
+                        g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE, password, strlen (password), 1),
+                        "text/plain");
+}
+
+static void
+keyring_create_cb (GObject *source, GAsyncResult *res, gpointer user_data)
+{
+  GError *error = NULL;
+  GVariant *retval;
+  const gchar *collection;
+
+  retval = g_dbus_connection_call_finish (G_DBUS_CONNECTION (source), res, &error);
+  if (error != NULL) {
+    g_warning ("Could not call CreateWithMasterPassword keyring method: %s", error->message);
+    g_error_free (error);
+    goto out;
+  }
+
+  g_variant_get (retval, "(&o)", &collection);
+  g_variant_unref (retval);
+
+  if (g_strcmp0 (collection, "/") == 0)
+    g_warning ("Call to CreateWithMasterPassword () failed");
+
+out:
+  g_object_unref (source);
+}
+
+static void
+keyring_open_session_cb (GObject *source, GAsyncResult *res, gpointer user_data)
+{
+  GDBusConnection *connection = G_DBUS_CONNECTION (source);
+  GisAccountPage *page = user_data;
+  GError *error = NULL;
+  GVariant *retval, *output, *label, *properties;
+  const gchar *session;
+
+  retval = g_dbus_connection_call_finish (connection, res, &error);
+  if (error != NULL) {
+    g_warning ("Could not call OpenSession keyring method: %s", error->message);
+    g_error_free (error);
+    g_object_unref (source);
+    return;
+  }
+
+  g_variant_get (retval, "(@v&o)", &output, &session);
+  g_variant_unref (retval);
+
+  label = g_variant_new_dict_entry (g_variant_new_string ("org.freedesktop.Secret.Collection.Label"),
+                                    g_variant_new_variant (g_variant_new_string ("login")));
+  properties = g_variant_new_array (G_VARIANT_TYPE ("{sv}"), &label, 1);
+
+  g_dbus_connection_call (connection,
+                          "org.gnome.keyring",
+                          "/org/freedesktop/secrets",
+                          "org.gnome.keyring.InternalUnsupportedGuiltRiddenInterface",
+                          "CreateWithMasterPassword",
+                          g_variant_new ("(@a{sv}@(oayays))",
+                                         properties,
+                                         build_keyring_password (page, session)),
+                          G_VARIANT_TYPE ("(o)"),
+                          G_DBUS_CALL_FLAGS_NONE,
+                          -1,
+                          page->priv->cancellable,
+                          keyring_create_cb,
+                          page);
+}
+
+static void
+create_keyring (GisAccountPage *page)
+{
+  GisAccountPagePrivate *priv = page->priv;
+  GDBusConnection *connection;
+  GError *error = NULL;
+
+  connection = g_bus_get_sync (G_BUS_TYPE_SESSION, priv->cancellable, &error);
+  if (error != NULL) {
+    gis_page_apply_complete (GIS_PAGE (page), FALSE);
+    g_warning ("Could not get DBus connection: %s", error->message);
+    g_error_free (error);
+    return;
+  }
+
+  g_dbus_connection_call (connection,
+                          "org.gnome.keyring",
+                          "/org/freedesktop/secrets",
+                          "org.freedesktop.Secret.Service",
+                          "OpenSession",
+                          g_variant_new ("(s@v)", "plain",
+                                         g_variant_new_variant (g_variant_new_string (""))),
+                          G_VARIANT_TYPE ("(vo)"),
+                          G_DBUS_CALL_FLAGS_NONE,
+                          -1,
+                          priv->cancellable,
+                          keyring_open_session_cb,
+                          page);
+}
+
 static void
 local_create_user (GisAccountPage *page)
 {
@@ -542,6 +646,7 @@ local_create_user (GisAccountPage *page)
                                    priv->act_user,
                                    password);
 
+  create_keyring (page);
   priv->user_data_unsaved = FALSE;
 }
 
@@ -1163,6 +1268,32 @@ gis_account_page_apply (GisPage *gis_page,
 }
 
 static void
+spawn_keyring_daemon (void)
+{
+  char *cmd[] = {"gnome-keyring-daemon",
+                 "--start",
+                 "--foreground",
+                 "--components",
+                 "secrets",
+                 NULL};
+  GError *error = NULL;
+
+  g_spawn_async (NULL,
+                 cmd,
+                 NULL,
+                 G_SPAWN_SEARCH_PATH,
+                 NULL,
+                 NULL,
+                 NULL,
+                 &error);
+
+  if (error != NULL) {
+    g_warning ("Error spawning gnome-keyring-daemon: %s", error->message);
+    g_error_free (error);
+  }
+}
+
+static void
 gis_account_page_constructed (GObject *object)
 {
   GisAccountPage *page = GIS_ACCOUNT_PAGE (object);
@@ -1224,6 +1355,7 @@ gis_account_page_constructed (GObject *object)
   set_mode (page, UM_LOCAL);
 
   gtk_widget_show (GTK_WIDGET (page));
+  spawn_keyring_daemon ();
 }
 
 static void
