diff --git a/libnautilus-private/nautilus-mime-actions.c b/libnautilus-private/nautilus-mime-actions.c
index 568e28e..8a81144 100644
--- a/libnautilus-private/nautilus-mime-actions.c
+++ b/libnautilus-private/nautilus-mime-actions.c
@@ -1139,7 +1139,6 @@ typedef struct {
 	char *activation_directory;
 	gboolean user_confirmation;
 	char *uri;
-	guint pk_watch_id;
 	GDBusProxy *proxy;
 	GtkWidget *dialog;
 } ActivateParametersInstall;
@@ -1157,9 +1156,7 @@ activate_parameters_install_free (ActivateParametersInstall *parameters_install)
 	nautilus_file_list_free (parameters_install->files);
 	g_free (parameters_install->activation_directory);
 	g_free (parameters_install->uri);
-	if (parameters_install->pk_watch_id != 0) {
-		g_bus_unwatch_proxy (parameters_install->pk_watch_id);
-	}
+        g_object_unref (parameters_install->proxy);
 	g_free (parameters_install);
 }
 
@@ -1408,16 +1405,17 @@ delete_cb (GtkDialog *dialog)
 }
 
 static void
-pk_proxy_appeared_cb (GDBusConnection *connection,
-		      const gchar *name,
-		      const gchar *name_owner,
-		      GDBusProxy *proxy,
+pk_proxy_appeared_cb (GObject      *source,
+                      GAsyncResult *res,
 		      gpointer user_data)
 {
         ActivateParametersInstall *parameters_install = user_data;
 	char *mime_type;
 	char *error_message;
 	GtkWidget *dialog;
+        GDBusProxy *proxy;
+
+        proxy = g_dbus_proxy_new_for_bus_finish (res, NULL);
 
 	mime_type = nautilus_file_get_mime_type (parameters_install->file);
 	error_message = get_application_no_mime_type_handler_message (parameters_install->file,
@@ -1446,26 +1444,6 @@ pk_proxy_appeared_cb (GDBusConnection *connection,
 }
 
 static void
-pk_proxy_vanished_cb (GDBusConnection *connection,
-                      const gchar *name,
-                      gpointer user_data)
-{
-	ActivateParametersInstall *parameters_install = user_data;
-
-	parameters_install->proxy = NULL;
-	
-	if (parameters_install->dialog != NULL) {
-		gtk_widget_destroy (parameters_install->dialog);
-		parameters_install->dialog = NULL;
-	}
-
-        /* show an unhelpful dialog */
-        show_unhandled_type_error (parameters_install);
-        /* The callback wasn't started, so we have to free the parameters */
-        activate_parameters_install_free (parameters_install);
-}
-
-static void
 application_unhandled_uri (ActivateParameters *parameters, char *uri)
 {
 	gboolean show_install_mime;
@@ -1510,19 +1488,15 @@ application_unhandled_uri (ActivateParameters *parameters, char *uri)
 		goto out;
 	}
 
-	parameters_install->pk_watch_id = 
-		g_bus_watch_proxy (G_BUS_TYPE_SESSION,
-				   "org.freedesktop.PackageKit",
-				   G_BUS_NAME_WATCHER_FLAGS_AUTO_START,
-				   "/org/freedesktop/PackageKit",
-				   "org.freedesktop.PackageKit.Modify",
-				   G_TYPE_DBUS_PROXY,
-				   G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES |
-		                   G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS,
-		                   pk_proxy_appeared_cb,
-				   pk_proxy_vanished_cb,
-				   parameters_install,
-				   NULL);
+	g_dbus_proxy_new_for_bus (G_BUS_TYPE_SESSION,
+                                  G_DBUS_PROXY_FLAGS_NONE,
+                                  NULL,
+				  "org.freedesktop.PackageKit",
+				  "/org/freedesktop/PackageKit",
+				  "org.freedesktop.PackageKit.Modify",
+                                  NULL,
+		                  pk_proxy_appeared_cb,
+				  parameters_install);
 
 	return;
 
diff --git a/src/nautilus-application.c b/src/nautilus-application.c
index 1f048e3..2ab19ed 100644
--- a/src/nautilus-application.c
+++ b/src/nautilus-application.c
@@ -353,9 +353,9 @@ nautilus_application_finalize (GObject *object)
 		application->automount_idle_id = 0;
 	}
 
-	if (application->ck_watch_id != 0) {
-		g_bus_unwatch_proxy (application->ck_watch_id);
-		application->ck_watch_id = 0;
+	if (application->proxy != NULL) {
+		g_object_unref (application->proxy);
+                application->proxy = NULL;
 	}
 
         G_OBJECT_CLASS (nautilus_application_parent_class)->finalize (object);
@@ -566,23 +566,14 @@ ck_call_is_active_cb (GDBusProxy   *proxy,
 }
 
 static void
-session_proxy_vanished (GDBusConnection *connection,
-                        const gchar *name,
-                        gpointer user_data)
+session_proxy_appeared (GObject       *source,
+                        GAsyncResult *res,
+                        gpointer      user_data)
 {
 	NautilusApplication *application = user_data;
+        GDBusProxy *proxy;
 
-	application->session_is_active = TRUE;
-}
-
-static void
-session_proxy_appeared (GDBusConnection *connection,
-                        const gchar *name,
-                        const gchar *name_owner,
-                        GDBusProxy *proxy,
-                        gpointer user_data)
-{
-	NautilusApplication *application = user_data;
+        proxy = g_dbus_proxy_new_for_bus_finish (res, NULL);
 
 	g_signal_connect (proxy, "g-signal",
 			  G_CALLBACK (ck_session_proxy_signal_cb),
@@ -595,7 +586,9 @@ session_proxy_appeared (GDBusConnection *connection,
 			   -1,
 			   NULL,
 			   (GAsyncReadyCallback) ck_call_is_active_cb,
-			   application);	
+			   application);
+
+        application->proxy = proxy;
 }
 
 static void
@@ -620,16 +613,14 @@ ck_get_current_session_cb (GDBusConnection *connection,
 
 	g_variant_get (variant, "(&o)", &session_path);
 
-	application->ck_watch_id = g_bus_watch_proxy (G_BUS_TYPE_SYSTEM,
-						      CK_NAME,
-						      0, session_path,
-						      CK_INTERFACE ".Session",
-						      G_TYPE_DBUS_PROXY,
-						      G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES,
-						      session_proxy_appeared,
-						      session_proxy_vanished,
-						      application,
-						      NULL);
+	g_dbus_proxy_new_for_bus (G_BUS_TYPE_SYSTEM,
+                                  G_DBUS_PROXY_FLAGS_NONE,
+                                  NULL,
+				  CK_NAME,
+				  session_path,
+				  CK_INTERFACE ".Session",
+			          session_proxy_appeared,
+				  application);
 
 	g_variant_unref (variant);
 }
diff --git a/src/nautilus-application.h b/src/nautilus-application.h
index d6d681e..345b097 100644
--- a/src/nautilus-application.h
+++ b/src/nautilus-application.h
@@ -66,7 +66,7 @@ typedef struct {
 	NautilusUndoManager *undo_manager;
 	GVolumeMonitor *volume_monitor;
 	unsigned int automount_idle_id;
-	guint ck_watch_id;
+        GDBusProxy *proxy;
 	gboolean session_is_active;
 } NautilusApplication;
 
