Index: network-manager-applet-0.8/src/gconf-helpers/nma-gconf-settings.c
===================================================================
--- network-manager-applet-0.8.orig/src/gconf-helpers/nma-gconf-settings.c	2010-04-29 15:40:47.000000000 -0400
+++ network-manager-applet-0.8/src/gconf-helpers/nma-gconf-settings.c	2010-04-29 15:41:26.000000000 -0400
@@ -41,6 +41,7 @@
 } NMAGConfSettingsPrivate;
 
 enum {
+	REMOTE_SECRETS_REQUESTED,
 	NEW_SECRETS_REQUESTED,
 
 	LAST_SIGNAL
@@ -202,6 +203,35 @@
 	callback (NM_SETTINGS_INTERFACE (settings), NULL, user_data);
 }
 
+static void
+get_secrets_for_connection (NMSettingsService *settings,
+                            const gchar *connection_path,
+                            const gchar *setting_name,
+                            const gchar **hints,
+                            DBusGMethodInvocation *context,
+                            NMSettingsGetSecretsForConnectionFunc callback,
+                            gpointer user_data)
+{
+	GError *error = NULL;
+	NMAGConfSettings *self = NMA_GCONF_SETTINGS (settings);
+
+	/* Restrict GetSecretsForConnection to execution by root for DBus invocation */
+	if (!nm_gconf_is_dbus_request_authorized (context, FALSE, &error)) {
+		dbus_g_method_return_error (context, error);
+		g_error_free (error);
+		return;
+	}
+
+	g_signal_emit (self,
+	               signals[REMOTE_SECRETS_REQUESTED],
+	               0,
+	               connection_path,
+	               setting_name,
+	               hints,
+	               (NMANewSecretsRequestedFunc)callback,
+	               user_data);
+}
+
 static NMAGConfConnection *
 get_connection_by_gconf_path (NMAGConfSettings *self, const char *path)
 {
@@ -440,8 +470,19 @@
 
 	settings_class->list_connections = list_connections;
 	settings_class->add_connection = add_connection;
+	settings_class->get_secrets_for_connection = get_secrets_for_connection;
 
 	/* Signals */
+	signals[REMOTE_SECRETS_REQUESTED] =
+		g_signal_new ("remote-secrets-requested",
+				    G_OBJECT_CLASS_TYPE (object_class),
+				    G_SIGNAL_RUN_FIRST,
+				    G_STRUCT_OFFSET (NMAGConfSettingsClass, remote_secrets_requested),
+				    NULL, NULL,
+				    nma_marshal_VOID__STRING_STRING_POINTER_POINTER_POINTER,
+				    G_TYPE_NONE, 5,
+				    G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_POINTER);
+
 	signals[NEW_SECRETS_REQUESTED] =
 		g_signal_new ("new-secrets-requested",
 				    G_OBJECT_CLASS_TYPE (object_class),
Index: network-manager-applet-0.8/src/applet.c
===================================================================
--- network-manager-applet-0.8.orig/src/applet.c	2010-04-29 15:41:26.000000000 -0400
+++ network-manager-applet-0.8/src/applet.c	2010-05-03 10:01:31.000000000 -0400
@@ -2640,7 +2640,7 @@
 }
 
 static NMDevice *
-find_active_device (NMAGConfConnection *connection,
+find_active_device (NMConnection *connection,
                     NMApplet *applet,
                     NMActiveConnection **out_active_connection)
 {
@@ -2670,8 +2670,8 @@
 			continue;
 		}
 
-		if (strcmp (service_name, NM_DBUS_SERVICE_USER_SETTINGS))
-			continue;
+		//if (strcmp (service_name, NM_DBUS_SERVICE_USER_SETTINGS))
+		//	continue;
 
 		connection_path = nm_active_connection_get_connection (active);
 		if (!connection_path) {
@@ -2693,7 +2693,7 @@
 
 static void
 applet_settings_new_secrets_requested_cb (NMAGConfSettings *settings,
-                                          NMAGConfConnection *connection,
+                                          NMConnection *connection,
                                           const char *setting_name,
                                           const char **hints,
                                           gboolean ask_user,
@@ -2762,6 +2762,42 @@
 	g_error_free (error);
 }
 
+static void
+applet_settings_remote_secrets_requested_cb (NMAGConfSettings *settings,
+                                             const char *connection_path,
+                                             const char *setting_name,
+                                             const char **hints,
+                                             NMANewSecretsRequestedFunc callback,
+                                             gpointer callback_data,
+                                             gpointer user_data)
+{
+	NMApplet *applet = NM_APPLET (user_data);
+	GSList *list, *iter;
+	NMConnection *connection = NULL;
+
+	/* First, find connection by path */
+	list = applet_get_all_connections (applet);
+	for (iter = list; iter; iter = g_slist_next (iter)) {
+		NMConnection *candidate = NM_CONNECTION (iter->data);
+
+		if (!strcmp (nm_connection_get_path (candidate), connection_path)) {
+			connection = candidate;
+			break;
+		}
+	}
+	g_slist_free (list);
+
+	/* Now just call normal function with full connection object */
+	applet_settings_new_secrets_requested_cb (settings,
+                                              connection,
+											  setting_name,
+											  hints,
+											  TRUE,
+											  callback,
+											  callback_data,
+											  user_data);
+}
+
 static gboolean
 periodic_update_active_connection_timestamps (gpointer user_data)
 {
@@ -3141,6 +3177,9 @@
 	g_signal_connect (applet->gconf_settings, "new-secrets-requested",
 	                  G_CALLBACK (applet_settings_new_secrets_requested_cb),
 	                  applet);
+	g_signal_connect (applet->gconf_settings, "remote-secrets-requested",
+	                  G_CALLBACK (applet_settings_remote_secrets_requested_cb),
+	                  applet);
 
 	nm_settings_service_export (NM_SETTINGS_SERVICE (applet->gconf_settings));
 
Index: network-manager-applet-0.8/src/gconf-helpers/nma-gconf-settings.h
===================================================================
--- network-manager-applet-0.8.orig/src/gconf-helpers/nma-gconf-settings.h	2010-04-29 15:40:47.000000000 -0400
+++ network-manager-applet-0.8/src/gconf-helpers/nma-gconf-settings.h	2010-04-29 15:41:26.000000000 -0400
@@ -43,6 +43,13 @@
 	NMSettingsServiceClass parent;
 
 	/* Signals */
+	void (*remote_secrets_requested) (NMAGConfSettings *self,
+	                                  const char *connection_path,
+	                                  const char *setting_name,
+	                                  const char **hints,
+	                                  NMANewSecretsRequestedFunc callback,
+	                                  gpointer callback_data);
+
 	void (*new_secrets_requested) (NMAGConfSettings *self,
 	                               NMAGConfConnection *exported,
 	                               const char *setting_name,
Index: network-manager-applet-0.8/src/marshallers/nma-marshal.list
===================================================================
--- network-manager-applet-0.8.orig/src/marshallers/nma-marshal.list	2010-04-29 15:40:47.000000000 -0400
+++ network-manager-applet-0.8/src/marshallers/nma-marshal.list	2010-04-29 15:41:26.000000000 -0400
@@ -2,6 +2,7 @@
 VOID:STRING,STRING,STRING
 VOID:STRING,POINTER,BOOLEAN,POINTER,POINTER
 VOID:OBJECT,STRING,POINTER,BOOLEAN,POINTER,POINTER
+VOID:STRING,STRING,POINTER,POINTER,POINTER
 VOID:POINTER,POINTER
 VOID:INT,POINTER
 
Index: network-manager-applet-0.8/src/gconf-helpers/gconf-helpers.c
===================================================================
--- network-manager-applet-0.8.orig/src/gconf-helpers/gconf-helpers.c	2010-04-29 15:40:47.000000000 -0400
+++ network-manager-applet-0.8/src/gconf-helpers/gconf-helpers.c	2010-04-29 15:41:26.000000000 -0400
@@ -113,6 +113,69 @@
 
 
 gboolean
+nm_gconf_is_dbus_request_authorized (DBusGMethodInvocation *context,
+                                     gboolean allow_user,
+                                     GError **error)
+{
+	DBusGConnection *bus = NULL;
+	DBusConnection *connection = NULL;
+	char *sender = NULL;
+	gulong sender_uid = G_MAXULONG;
+	DBusError dbus_error;
+	gboolean success = FALSE;
+
+	sender = dbus_g_method_get_sender (context);
+	if (!sender) {
+		g_set_error (error, NM_SETTINGS_INTERFACE_ERROR,
+		             NM_SETTINGS_INTERFACE_ERROR_INTERNAL_ERROR,
+		             "%s", "Could not determine D-Bus requestor");
+		goto out;
+	}
+
+	bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, NULL);
+	if (!bus) {
+		g_set_error (error, NM_SETTINGS_INTERFACE_ERROR,
+		             NM_SETTINGS_INTERFACE_ERROR_INTERNAL_ERROR,
+		             "%s", "Could not get the system bus");
+		goto out;
+	}
+	connection = dbus_g_connection_get_connection (bus);
+	if (!connection) {
+		g_set_error (error, NM_SETTINGS_INTERFACE_ERROR,
+		             NM_SETTINGS_INTERFACE_ERROR_INTERNAL_ERROR,
+		             "%s", "Could not get the D-Bus system bus");
+		goto out;
+	}
+
+	dbus_error_init (&dbus_error);
+	sender_uid = dbus_bus_get_unix_user (connection, sender, &dbus_error);
+	if (dbus_error_is_set (&dbus_error)) {
+		dbus_error_free (&dbus_error);
+		g_set_error (error, NM_SETTINGS_INTERFACE_ERROR,
+		             NM_SETTINGS_INTERFACE_ERROR_PERMISSION_DENIED,
+		             "%s", "Could not determine the Unix user ID of the requestor");
+		goto out;
+	}
+
+	/* And finally, the actual UID check */
+	if (   (allow_user && (sender_uid == geteuid()))
+	    || (sender_uid == 0))
+		success = TRUE;
+	else {
+		g_set_error (error, NM_SETTINGS_INTERFACE_ERROR,
+		             NM_SETTINGS_INTERFACE_ERROR_PERMISSION_DENIED,
+		             "%s", "Requestor UID does not match the UID of the user settings service");
+	}
+
+out:
+	if (bus)
+		dbus_g_connection_unref (bus);
+	g_free (sender);
+	return success;
+}
+
+
+gboolean
 nm_gconf_get_int_helper (GConfClient *client,
                          const char *path,
                          const char *key,
Index: network-manager-applet-0.8/src/gconf-helpers/gconf-helpers.h
===================================================================
--- network-manager-applet-0.8.orig/src/gconf-helpers/gconf-helpers.h	2010-04-29 15:40:47.000000000 -0400
+++ network-manager-applet-0.8/src/gconf-helpers/gconf-helpers.h	2010-04-29 15:41:26.000000000 -0400
@@ -255,6 +255,10 @@
 void nm_gconf_set_pre_keyring_callback (PreKeyringCallback func, gpointer user_data);
 void pre_keyring_callback (void);
 
+gboolean nm_gconf_is_dbus_request_authorized (DBusGMethodInvocation *context,
+                                              gboolean allow_user,
+                                              GError **error);
+
 gboolean nm_gconf_get_ignore_ca_cert (const char *uuid, gboolean phase2);
 void nm_gconf_set_ignore_ca_cert (const char *uuid, gboolean phase2, gboolean ignore);
 
Index: network-manager-applet-0.8/src/gconf-helpers/nma-gconf-connection.c
===================================================================
--- network-manager-applet-0.8.orig/src/gconf-helpers/nma-gconf-connection.c	2010-04-29 15:40:47.000000000 -0400
+++ network-manager-applet-0.8/src/gconf-helpers/nma-gconf-connection.c	2010-04-29 15:41:26.000000000 -0400
@@ -659,68 +659,6 @@
 
 /******************************************************/
 
-static gboolean
-is_dbus_request_authorized (DBusGMethodInvocation *context,
-                            gboolean allow_user,
-                            GError **error)
-{
-	DBusGConnection *bus = NULL;
-	DBusConnection *connection = NULL;
-	char *sender = NULL;
-	gulong sender_uid = G_MAXULONG;
-	DBusError dbus_error;
-	gboolean success = FALSE;
-
-	sender = dbus_g_method_get_sender (context);
-	if (!sender) {
-		g_set_error (error, NM_SETTINGS_INTERFACE_ERROR,
-		             NM_SETTINGS_INTERFACE_ERROR_INTERNAL_ERROR,
-		             "%s", "Could not determine D-Bus requestor");
-		goto out;
-	}
-
-	bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, NULL);
-	if (!bus) {
-		g_set_error (error, NM_SETTINGS_INTERFACE_ERROR,
-		             NM_SETTINGS_INTERFACE_ERROR_INTERNAL_ERROR,
-		             "%s", "Could not get the system bus");
-		goto out;
-	}
-	connection = dbus_g_connection_get_connection (bus);
-	if (!connection) {
-		g_set_error (error, NM_SETTINGS_INTERFACE_ERROR,
-		             NM_SETTINGS_INTERFACE_ERROR_INTERNAL_ERROR,
-		             "%s", "Could not get the D-Bus system bus");
-		goto out;
-	}
-
-	dbus_error_init (&dbus_error);
-	sender_uid = dbus_bus_get_unix_user (connection, sender, &dbus_error);
-	if (dbus_error_is_set (&dbus_error)) {
-		dbus_error_free (&dbus_error);
-		g_set_error (error, NM_SETTINGS_INTERFACE_ERROR,
-		             NM_SETTINGS_INTERFACE_ERROR_PERMISSION_DENIED,
-		             "%s", "Could not determine the Unix user ID of the requestor");
-		goto out;
-	}
-
-	/* And finally, the actual UID check */
-	if (   (allow_user && (sender_uid == geteuid()))
-	    || (sender_uid == 0))
-		success = TRUE;
-	else {
-		g_set_error (error, NM_SETTINGS_INTERFACE_ERROR,
-		             NM_SETTINGS_INTERFACE_ERROR_PERMISSION_DENIED,
-		             "%s", "Requestor UID does not match the UID of the user settings service");
-	}
-
-out:
-	if (bus)
-		dbus_g_connection_unref (bus);
-	g_free (sender);
-	return success;
-}
-
 static void
 con_update_cb (NMSettingsConnectionInterface *connection,
                GError *error,
@@ -745,7 +683,7 @@
 	GError *error = NULL;
 
 	/* Restrict Update to execution by the current user and root for DBus invocation */
-	if (!is_dbus_request_authorized (context, TRUE, &error)) {
+	if (!nm_gconf_is_dbus_request_authorized (context, TRUE, &error)) {
 		dbus_g_method_return_error (context, error);
 		g_error_free (error);
 		return;
@@ -789,7 +727,7 @@
 	GError *error = NULL;
 
 	/* Restrict Update to execution by the current user and root for DBus invocation */
-	if (!is_dbus_request_authorized (context, TRUE, &error)) {
+	if (!nm_gconf_is_dbus_request_authorized (context, TRUE, &error)) {
 		dbus_g_method_return_error (context, error);
 		g_error_free (error);
 		return;
@@ -824,7 +762,7 @@
 	GError *error = NULL;
 
 	/* Restrict GetSecrets to execution by root for DBus invocation */
-	if (!is_dbus_request_authorized (context, FALSE, &error)) {
+	if (!nm_gconf_is_dbus_request_authorized (context, FALSE, &error)) {
 		dbus_g_method_return_error (context, error);
 		g_error_free (error);
 		return;
Index: network-manager-applet-0.8/nm-applet-dbus-126.conf
===================================================================
--- network-manager-applet-0.8.orig/nm-applet-dbus-126.conf	2010-04-29 15:40:47.000000000 -0400
+++ network-manager-applet-0.8/nm-applet-dbus-126.conf	2010-04-29 15:41:26.000000000 -0400
@@ -22,6 +22,8 @@
                 <!-- Only root can get secrets -->
                 <allow send_destination="org.freedesktop.NetworkManagerUserSettings"
                        send_interface="org.freedesktop.NetworkManagerSettings.Connection.Secrets"/>
+                <allow send_destination="org.freedesktop.NetworkManagerUserSettings"
+                       send_interface="org.freedesktop.NetworkManagerSettings.Secrets"/>
         </policy>
         <policy at_console="true">
                 <allow own="org.freedesktop.NetworkManagerUserSettings"/>
Index: network-manager-applet-0.8/nm-applet-pre-dbus-126.conf
===================================================================
--- network-manager-applet-0.8.orig/nm-applet-pre-dbus-126.conf	2010-04-29 15:40:47.000000000 -0400
+++ network-manager-applet-0.8/nm-applet-pre-dbus-126.conf	2010-04-29 15:41:26.000000000 -0400
@@ -10,6 +10,8 @@
 		<!-- Only root can get secrets -->
 		<allow send_destination="org.freedesktop.NetworkManagerUserSettings"
 		       send_interface="org.freedesktop.NetworkManagerSettings.Connection.Secrets"/>
+		<allow send_destination="org.freedesktop.NetworkManagerUserSettings"
+		       send_interface="org.freedesktop.NetworkManagerSettings.Secrets"/>
         </policy>
         <policy at_console="true">
                 <allow own="org.freedesktop.NetworkManagerUserSettings"/>
@@ -19,6 +21,8 @@
                 <!-- Only root can get secrets -->
                 <deny send_destination="org.freedesktop.NetworkManagerUserSettings"
                       send_interface="org.freedesktop.NetworkManagerSettings.Connection.Secrets"/>
+                <deny send_destination="org.freedesktop.NetworkManagerUserSettings"
+                      send_interface="org.freedesktop.NetworkManagerSettings.Secrets"/>
         </policy>
         <policy context="default">
                 <deny send_destination="org.freedesktop.NetworkManagerUserSettings"/>
Index: network-manager-applet-0.8/src/wireless-dialog.c
===================================================================
--- network-manager-applet-0.8.orig/src/wireless-dialog.c	2010-04-30 09:23:03.000000000 -0400
+++ network-manager-applet-0.8/src/wireless-dialog.c	2010-05-03 09:25:00.000000000 -0400
@@ -227,14 +227,6 @@
 	security_combo_changed (combo, user_data);
 }
 
-static gboolean
-is_system_connection (NMAWirelessDialog *self)
-{
-	NMAWirelessDialogPrivate *priv = NMA_WIRELESS_DIALOG_GET_PRIVATE (self);
-
-	return priv->connection && (nm_connection_get_scope (priv->connection) == NM_CONNECTION_SCOPE_SYSTEM);
-}
-
 static GByteArray *
 validate_dialog_ssid (NMAWirelessDialog *self)
 {
@@ -283,10 +275,6 @@
 			g_byte_array_free (ssid, TRUE);
 	}
 
-	/* Assume system connections are valid so that we don't have to get secrets for them */
-	if (is_system_connection (self))
-		valid = TRUE;
-
 	gtk_dialog_set_response_sensitive (GTK_DIALOG (self), GTK_RESPONSE_OK, valid);
 }
 
@@ -322,10 +310,6 @@
 	}
 
 out:
-	/* Assume system connections are valid so that we don't have to get secrets for them */
-	if (is_system_connection (self))
-		valid = TRUE;
-
 	gtk_dialog_set_response_sensitive (GTK_DIALOG (self), GTK_RESPONSE_OK, valid);
 }
 
@@ -1085,11 +1069,7 @@
 		priv->network_name_focus = TRUE;
 	}
 
-	/* Assume system connections are valid so that we don't have to get secrets for them */
-	if (is_system_connection (self))
-		gtk_dialog_set_response_sensitive (GTK_DIALOG (self), GTK_RESPONSE_OK, TRUE);
-	else
-		gtk_dialog_set_response_sensitive (GTK_DIALOG (self), GTK_RESPONSE_OK, FALSE);
+	gtk_dialog_set_response_sensitive (GTK_DIALOG (self), GTK_RESPONSE_OK, FALSE);
 
 	if (!device_combo_init (self, specific_device)) {
 		g_warning ("No wireless devices available.");
@@ -1211,24 +1191,19 @@
 	} else
 		connection = g_object_ref (priv->connection);
 
-	/* Only update security information for user connections, as for system
-	 * connections the applet just needs to tell NM to activate it.
-	 */
-	if (!is_system_connection (self)) {
-		/* Fill security */
-		model = gtk_combo_box_get_model (GTK_COMBO_BOX (priv->sec_combo));
-		gtk_combo_box_get_active_iter (GTK_COMBO_BOX (priv->sec_combo), &iter);
-		gtk_tree_model_get (model, &iter, S_SEC_COLUMN, &sec, -1);
-		if (sec) {
-			wireless_security_fill_connection (sec, connection);
-			wireless_security_unref (sec);
-		} else {
-			/* Unencrypted */
-			s_wireless = NM_SETTING_WIRELESS (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS));
-			g_assert (s_wireless);
+	/* Fill security */
+	model = gtk_combo_box_get_model (GTK_COMBO_BOX (priv->sec_combo));
+	gtk_combo_box_get_active_iter (GTK_COMBO_BOX (priv->sec_combo), &iter);
+	gtk_tree_model_get (model, &iter, S_SEC_COLUMN, &sec, -1);
+	if (sec) {
+		wireless_security_fill_connection (sec, connection);
+		wireless_security_unref (sec);
+	} else {
+		/* Unencrypted */
+		s_wireless = NM_SETTING_WIRELESS (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS));
+		g_assert (s_wireless);
 
-			g_object_set (s_wireless, NM_SETTING_WIRELESS_SEC, NULL, NULL);
-		}
+		g_object_set (s_wireless, NM_SETTING_WIRELESS_SEC, NULL, NULL);
 	}
 
 	/* Fill device */
