Sophie

Sophie

distrib > Mageia > 9 > armv7hl > media > core-release-src > by-pkgid > fc4339e19d60bac1dbab6ce8e3499022 > files > 1

dleyna-server-0.7.2-1.mga9.src.rpm

From 6ff85cec3cad2fa87e9372892b82c3ac9a08ef45 Mon Sep 17 00:00:00 2001
From: Jens Georg <mail@jensge.org>
Date: Mon, 23 May 2022 19:34:29 +0200
Subject: [PATCH 1/2] Remove deprecaed GUPnP calls

---
 libdleyna/server/async.c   |    4 -
 libdleyna/server/device.c  | 1834 ++++++++++++++++--------------------
 libdleyna/server/manager.c |   47 +-
 libdleyna/server/manager.h |    3 +-
 libdleyna/server/props.c   |    6 +-
 libdleyna/server/server.c  |   20 +-
 libdleyna/server/upnp.c    |   16 +-
 7 files changed, 878 insertions(+), 1052 deletions(-)

diff --git a/libdleyna/server/async.c b/libdleyna/server/async.c
index d682329..5b81469 100755
--- a/libdleyna/server/async.c
+++ b/libdleyna/server/async.c
@@ -82,10 +82,6 @@ void dls_async_task_cancelled_cb(GCancellable *cancellable, gpointer user_data)
 {
 	dls_async_task_t *cb_data = user_data;
 
-	if (cb_data->proxy != NULL)
-		gupnp_service_proxy_cancel_action(cb_data->proxy,
-						  cb_data->action);
-
 	if (!cb_data->error)
 		cb_data->error = g_error_new(DLEYNA_SERVER_ERROR,
 					     DLEYNA_ERROR_CANCELLED,
diff --git a/libdleyna/server/device.c b/libdleyna/server/device.c
index 2d58f9d..c05c77f 100644
--- a/libdleyna/server/device.c
+++ b/libdleyna/server/device.c
@@ -20,6 +20,8 @@
  *
  */
 
+#include <config.h>
+
 #include <string.h>
 #include <stdint.h>
 #include <stdio.h>
@@ -45,7 +47,7 @@
 #include <libdleyna/core/core.h>
 #include <libdleyna/core/error.h>
 #include <libdleyna/core/log.h>
-#include <libdleyna/core/service-task.h>
+#include <libdleyna/core/gasync-task.h>
 
 #include "device.h"
 #include "interface.h"
@@ -165,13 +167,12 @@ static void prv_upload_job_delete(gpointer up);
 static void prv_get_sr_token_for_props(GUPnPServiceProxy *proxy,
 			     const dls_device_t *device,
 			     dls_async_task_t *cb_data);
-static void prv_browse_objects_end_action_cb(GUPnPServiceProxy *proxy,
-					     GUPnPServiceProxyAction *action,
+static void prv_browse_objects_end_action_cb(GObject *target,
+					     GAsyncResult *res,
 					     gpointer user_data);
-static GUPnPServiceProxyAction *prv_browse_objects_begin_action_cb(
-						dleyna_service_task_t *task,
-						GUPnPServiceProxy *proxy,
-						gboolean *failed);
+static gboolean prv_browse_objects_begin_action_cb(
+						dleyna_gasync_task_t *task,
+						GObject *target);
 
 static void prv_get_sleeping_for_props(GUPnPServiceProxy *proxy,
 			     const dls_device_t *device,
@@ -1232,49 +1233,52 @@ on_exit:
 		g_error_free(error);
 }
 
-static void prv_get_feature_list_cb(GUPnPServiceProxy *proxy,
-				    GUPnPServiceProxyAction *action,
+static void prv_get_feature_list_cb(GObject *source, GAsyncResult *res,
 				    gpointer user_data)
 {
-	gchar *result = NULL;
-	gboolean end;
-	GError *error = NULL;
-	prv_new_device_ct_t *priv_t = (prv_new_device_ct_t *)user_data;
+	g_autofree gchar *result = NULL;
+	g_autoptr(GError) error = NULL;
+	dleyna_gasync_task_t *task = user_data;
+	prv_new_device_ct_t *priv_t =
+		(prv_new_device_ct_t *) dleyna_gasync_task_get_user_data(task);
+	g_autoptr(GUPnPServiceProxyAction) action = NULL;
+
+	action = gupnp_service_proxy_call_action_finish(
+		GUPNP_SERVICE_PROXY(source), res, &error);
+
+	if(g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+		return;
+	}
 
 	priv_t->dev->construct_step++;
-	end = gupnp_service_proxy_end_action(proxy, action, &error,
+	if (error == NULL) {
+		gupnp_service_proxy_action_get_result(action, &error,
 					     "FeatureList", G_TYPE_STRING,
 					     &result, NULL);
-
-	if (!end || (result == NULL)) {
-		DLEYNA_LOG_WARNING("GetFeatureList operation failed: %s",
-				   ((error != NULL) ? error->message
-						    : "Invalid result"));
-		goto on_error;
 	}
 
-	DLEYNA_LOG_DEBUG("GetFeatureList result: %s", result);
-
-	prv_get_feature_list_analyze(priv_t->dev, result);
+	if (error != NULL) {
+		DLEYNA_LOG_WARNING("GetFeatureList operation failed: %s",
+				   error->message);
+	} else {
+		DLEYNA_LOG_DEBUG("GetFeatureList result: %s", result);
 
-on_error:
-	if (error != NULL)
-		g_error_free(error);
+		prv_get_feature_list_analyze(priv_t->dev, result);
+	}
 
-	g_free(result);
+	dleyna_task_queue_task_completed (((dleyna_task_atom_t *) task)->queue_id);
 }
 
-static GUPnPServiceProxyAction *prv_get_feature_list(
-						dleyna_service_task_t *task,
-						GUPnPServiceProxy *proxy,
-						gboolean *failed)
+static gboolean prv_get_feature_list(dleyna_gasync_task_t *task, GObject *proxy)
 {
-	*failed = FALSE;
+	GUPnPServiceProxyAction *action =
+		gupnp_service_proxy_action_new("GetFeatureList", NULL);
+
+	gupnp_service_proxy_call_action_async(
+		GUPNP_SERVICE_PROXY(proxy), action, dleyna_gasync_task_get_cancellable(task),
+		prv_get_feature_list_cb, task);
 
-	return gupnp_service_proxy_begin_action(
-					proxy, "GetFeatureList",
-					dleyna_service_task_begin_action_cb,
-					task, NULL);
+	return FALSE;
 }
 
 static void prv_get_sort_ext_capabilities_analyze(dls_device_t *device,
@@ -1310,51 +1314,56 @@ static void prv_get_sort_ext_capabilities_analyze(dls_device_t *device,
 #endif
 }
 
-static void prv_get_sort_ext_capabilities_cb(GUPnPServiceProxy *proxy,
-					   GUPnPServiceProxyAction *action,
-					   gpointer user_data)
+static void prv_get_sort_ext_capabilities_cb(GObject *source, GAsyncResult *res,
+					     gpointer user_data)
 {
-	gchar *result = NULL;
-	gboolean end;
-	GError *error = NULL;
-	prv_new_device_ct_t *priv_t = (prv_new_device_ct_t *)user_data;
+	g_autofree gchar *result = NULL;
+	g_autoptr(GError) error = NULL;
+	dleyna_gasync_task_t *task = user_data;
+	prv_new_device_ct_t *priv_t =
+		(prv_new_device_ct_t *) dleyna_gasync_task_get_user_data(task);
+	g_autoptr(GUPnPServiceProxyAction) action;
 
-	priv_t->dev->construct_step++;
-	end = gupnp_service_proxy_end_action(proxy, action, &error,
-					     "SortExtensionCaps",
-					     G_TYPE_STRING, &result, NULL);
+	action = gupnp_service_proxy_call_action_finish(
+		GUPNP_SERVICE_PROXY(source), res, &error);
 
-	if (!end || (result == NULL)) {
-		DLEYNA_LOG_WARNING(
-			"GetSortExtensionCapabilities operation failed: %s",
-			((error != NULL) ? error->message : "Invalid result"));
-		goto on_error;
+	g_print("Sort ext\n");
+
+	if(g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+		return;
 	}
 
-	DLEYNA_LOG_DEBUG("GetSortExtensionCapabilities result: %s", result);
+	priv_t->dev->construct_step++;
+
+	if (error == NULL) {
+		gupnp_service_proxy_action_get_result(action, &error, "SortCaps",
+						      G_TYPE_STRING, &result, NULL);
+	}
 
-	prv_get_sort_ext_capabilities_analyze(priv_t->dev, result);
+	if (error!= NULL) {
+		DLEYNA_LOG_WARNING("GetSortCapabilitiesExt operation failed: %s",
+				   error->message);
 
-on_error:
+	} else {
+		DLEYNA_LOG_DEBUG("GetSortCapabilities result: %s", result);
 
-	if (error)
-		g_error_free(error);
+		prv_get_sort_ext_capabilities_analyze(priv_t->dev, result);
+	}
 
-	g_free(result);
+	dleyna_task_queue_task_completed (((dleyna_task_atom_t *) task)->queue_id);
 }
 
-static GUPnPServiceProxyAction *prv_get_sort_ext_capabilities(
-						dleyna_service_task_t *task,
-						GUPnPServiceProxy *proxy,
-						gboolean *failed)
+static gboolean prv_get_sort_ext_capabilities(dleyna_gasync_task_t *task,
+					      GObject *target)
 {
-	*failed = FALSE;
+	GUPnPServiceProxyAction *action =
+		gupnp_service_proxy_action_new("GetSortExtensionCapabilities", NULL);
+	gupnp_service_proxy_call_action_async(
+		GUPNP_SERVICE_PROXY(target), action,
+		dleyna_gasync_task_get_cancellable(task),
+		prv_get_sort_ext_capabilities_cb, task);
 
-	return gupnp_service_proxy_begin_action(
-					proxy,
-					"GetSortExtensionCapabilities",
-					dleyna_service_task_begin_action_cb,
-					task, NULL);
+	return FALSE;
 }
 
 static void prv_get_capabilities_analyze(GHashTable *property_map,
@@ -1405,117 +1414,125 @@ static void prv_get_capabilities_analyze(GHashTable *property_map,
 #endif
 }
 
-static void prv_get_sort_capabilities_cb(GUPnPServiceProxy *proxy,
-					 GUPnPServiceProxyAction *action,
+static void prv_get_sort_capabilities_cb(GObject *source,
+					 GAsyncResult *res,
 					 gpointer user_data)
 {
-	gchar *result = NULL;
-	gboolean end;
-	GError *error = NULL;
-	prv_new_device_ct_t *priv_t = (prv_new_device_ct_t *)user_data;
+	g_autofree gchar *result = NULL;
+	g_autoptr(GError) error = NULL;
+	dleyna_gasync_task_t *task = user_data;
+	prv_new_device_ct_t *priv_t = (prv_new_device_ct_t *) dleyna_gasync_task_get_user_data(task);
+	g_autoptr(GUPnPServiceProxyAction) action;
+
+	action = gupnp_service_proxy_call_action_finish(
+		GUPNP_SERVICE_PROXY(source), res, &error);
+	if(g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+		return;
+	}
 
 	priv_t->dev->construct_step++;
-	end = gupnp_service_proxy_end_action(proxy, action, &error, "SortCaps",
-					     G_TYPE_STRING, &result, NULL);
 
-	if (!end || (result == NULL)) {
-		DLEYNA_LOG_WARNING("GetSortCapabilities operation failed: %s",
-				   ((error != NULL) ? error->message
-						    : "Invalid result"));
-		goto on_error;
+	if (error == NULL) {
+		gupnp_service_proxy_action_get_result(action, &error, "SortCaps",
+					     G_TYPE_STRING, &result, NULL);
 	}
 
-	DLEYNA_LOG_DEBUG("GetSortCapabilities result: %s", result);
-
-	prv_get_capabilities_analyze(priv_t->property_map, result,
-				     &priv_t->dev->sort_caps);
+	if (error!= NULL) {
+		DLEYNA_LOG_WARNING("GetSortCapabilities operation failed: %s",
+				   error->message);
 
-on_error:
+	} else {
+		DLEYNA_LOG_DEBUG("GetSortCapabilities result: %s", result);
 
-	if (error)
-		g_error_free(error);
+		prv_get_capabilities_analyze(priv_t->property_map, result,
+					     &priv_t->dev->sort_caps);
+	}
 
-	g_free(result);
+	dleyna_task_queue_task_completed (((dleyna_task_atom_t *) task)->queue_id);
 }
 
-static GUPnPServiceProxyAction *prv_get_sort_capabilities(
-					dleyna_service_task_t *task,
-					GUPnPServiceProxy *proxy,
-					gboolean *failed)
+static gboolean prv_get_sort_capabilities(dleyna_gasync_task_t *task,
+					  GObject *target)
 {
-	*failed = FALSE;
+	GUPnPServiceProxyAction *action =
+		gupnp_service_proxy_action_new("GetSortCapabilities", NULL);
+	gupnp_service_proxy_call_action_async(
+		GUPNP_SERVICE_PROXY(target), action,
+		dleyna_gasync_task_get_cancellable(task),
+		prv_get_sort_capabilities_cb, task);
 
-	return gupnp_service_proxy_begin_action(
-					proxy,
-					"GetSortCapabilities",
-					dleyna_service_task_begin_action_cb,
-					task, NULL);
+	return FALSE;
 }
 
-static void prv_get_search_capabilities_cb(GUPnPServiceProxy *proxy,
-					   GUPnPServiceProxyAction *action,
+static void prv_get_search_capabilities_cb(GObject *source,
+					   GAsyncResult *res,
 					   gpointer user_data)
 {
-	gchar *result = NULL;
-	gboolean end;
-	GError *error = NULL;
-	prv_new_device_ct_t *priv_t = (prv_new_device_ct_t *)user_data;
+	g_autofree gchar *result = NULL;
+	g_autoptr(GError) error = NULL;
+	dleyna_gasync_task_t *task = user_data;
+	prv_new_device_ct_t *priv_t =
+		(prv_new_device_ct_t *) dleyna_gasync_task_get_user_data(task);
 
-	priv_t->dev->construct_step++;
-	end = gupnp_service_proxy_end_action(proxy, action, &error,
-					     "SearchCaps", G_TYPE_STRING,
-					     &result, NULL);
+	g_autoptr(GUPnPServiceProxyAction) action =
+		gupnp_service_proxy_call_action_finish(
+			GUPNP_SERVICE_PROXY(source), res, &error);
 
-	if (!end || (result == NULL)) {
-		DLEYNA_LOG_WARNING("GetSearchCapabilities operation failed: %s",
-				   ((error != NULL) ? error->message
-						    : "Invalid result"));
-		goto on_error;
+	if(g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+		return;
 	}
 
-	DLEYNA_LOG_DEBUG("GetSearchCapabilities result: %s", result);
+	if (error == NULL) {
+		gupnp_service_proxy_action_get_result(
+			action, &error, "SearchCaps", G_TYPE_STRING, &result,
+			NULL);
+	}
 
-	prv_get_capabilities_analyze(priv_t->property_map, result,
-				     &priv_t->dev->search_caps);
+	priv_t->dev->construct_step++;
+	if (error != NULL) {
+		DLEYNA_LOG_WARNING("GetSearchCapabilities operation failed: %s",
+				   error->message);
 
-	if (g_hash_table_lookup(priv_t->property_map, "upnp:objectUpdateID"))
-		priv_t->dev->has_last_change = TRUE;
+	} else {
+		DLEYNA_LOG_DEBUG("GetSearchCapabilities result: %s", result);
 
-on_error:
+		prv_get_capabilities_analyze(priv_t->property_map, result,
+					     &priv_t->dev->search_caps);
 
-	if (error)
-		g_error_free(error);
+		if(g_hash_table_lookup(priv_t->property_map,
+				       "upnp:objectUpdateID"))
+			priv_t->dev->has_last_change = TRUE;
+	}
 
-	g_free(result);
+	dleyna_task_queue_task_completed (((dleyna_task_atom_t *) task)->queue_id);
 }
 
-static GUPnPServiceProxyAction *prv_get_search_capabilities(
-					dleyna_service_task_t *task,
-					GUPnPServiceProxy *proxy,
-					gboolean *failed)
+static gboolean prv_get_search_capabilities(
+					dleyna_gasync_task_t *task,
+					GObject *target)
 {
-	*failed = FALSE;
+	GUPnPServiceProxyAction *action =
+		gupnp_service_proxy_action_new("GetSearchCapabilities", NULL);
+
+	gupnp_service_proxy_call_action_async(
+		GUPNP_SERVICE_PROXY(target), action, dleyna_gasync_task_get_cancellable(task),
+		prv_get_search_capabilities_cb, task);
 
-	return gupnp_service_proxy_begin_action(
-					proxy, "GetSearchCapabilities",
-					dleyna_service_task_begin_action_cb,
-					task, NULL);
+	return FALSE;
 }
 
-static GUPnPServiceProxyAction *prv_subscribe(dleyna_service_task_t *task,
-					      GUPnPServiceProxy *proxy,
-					      gboolean *failed)
+static gboolean prv_subscribe(dleyna_gasync_task_t *task, GObject *target)
 {
 	dls_device_t *device;
 
-	device = (dls_device_t *)dleyna_service_task_get_user_data(task);
+	device = (dls_device_t *)dleyna_gasync_task_get_user_data(task);
 
 	device->construct_step++;
 	dls_device_subscribe_to_service_changes(device);
 
-	*failed = FALSE;
+	dleyna_task_queue_task_completed (((dleyna_task_atom_t *) task)->queue_id);
 
-	return NULL;
+	return FALSE;
 }
 
 static gboolean prv_subtree_interface_filter(const gchar *object_path,
@@ -1553,15 +1570,13 @@ static gboolean prv_subtree_interface_filter(const gchar *object_path,
 	return retval;
 }
 
-static GUPnPServiceProxyAction *prv_declare(dleyna_service_task_t *task,
-					    GUPnPServiceProxy *proxy,
-					    gboolean *failed)
+static gboolean prv_declare(dleyna_gasync_task_t *task, GObject *target)
 {
 	guint id;
 	dls_device_t *device;
 	prv_new_device_ct_t *priv_t;
 
-	priv_t = (prv_new_device_ct_t *)dleyna_service_task_get_user_data(task);
+	priv_t = (prv_new_device_ct_t *)dleyna_gasync_task_get_user_data(task);
 	device = priv_t->dev;
 	device->construct_step++;
 
@@ -1588,9 +1603,9 @@ static GUPnPServiceProxyAction *prv_declare(dleyna_service_task_t *task,
 		DLEYNA_LOG_WARNING("dleyna_connector_publish_subtree FAILED");
 	}
 
-	*failed = (!id);
+	dleyna_task_queue_task_completed (((dleyna_task_atom_t *) task)->queue_id);
 
-	return NULL;
+	return !id;
 }
 
 void dls_device_construct(
@@ -1614,36 +1629,39 @@ void dls_device_construct(
 	priv_t->property_map = property_map;
 
 	s_proxy = context->cds.proxy;
+	GCancellable *cancellable = g_cancellable_new();
 
 	if (dev->construct_step < 1)
-		dleyna_service_task_add(queue_id, prv_get_search_capabilities,
-					s_proxy,
-					prv_get_search_capabilities_cb, NULL,
+		dleyna_gasync_task_add(queue_id,
+				       prv_get_search_capabilities,
+				       G_OBJECT(s_proxy),
+					cancellable,
+				       NULL,
 					priv_t);
 
 	if (dev->construct_step < 2)
-		dleyna_service_task_add(queue_id, prv_get_sort_capabilities,
-					s_proxy,
-					prv_get_sort_capabilities_cb, NULL,
-					priv_t);
+		dleyna_gasync_task_add(queue_id, prv_get_sort_capabilities,
+				       G_OBJECT(s_proxy), cancellable, NULL,
+				       priv_t);
 
 	if (dev->construct_step < 3)
-		dleyna_service_task_add(queue_id, prv_get_sort_ext_capabilities,
-					s_proxy,
-					prv_get_sort_ext_capabilities_cb, NULL,
+		dleyna_gasync_task_add(queue_id, prv_get_sort_ext_capabilities,
+				       G_OBJECT(s_proxy),
+					cancellable, NULL,
 					priv_t);
 
 	if (dev->construct_step < 4)
-		dleyna_service_task_add(queue_id, prv_get_feature_list, s_proxy,
-					prv_get_feature_list_cb, NULL, priv_t);
+		dleyna_gasync_task_add(queue_id, prv_get_feature_list,
+				       G_OBJECT(s_proxy), cancellable, NULL,
+				       priv_t);
 
 	/* The following task should always be completed */
-	dleyna_service_task_add(queue_id, prv_subscribe, s_proxy,
-				NULL, NULL, dev);
+	dleyna_gasync_task_add(queue_id, prv_subscribe, G_OBJECT(s_proxy),
+				cancellable, NULL, dev);
 
 	if (dev->construct_step < 6)
-		dleyna_service_task_add(queue_id, prv_declare, s_proxy,
-					NULL, g_free, priv_t);
+		dleyna_gasync_task_add(queue_id, prv_declare, G_OBJECT(s_proxy),
+					cancellable, g_free, priv_t);
 
 	dleyna_task_queue_start(queue_id);
 }
@@ -1885,32 +1903,35 @@ static void prv_retrieve_child_count_for_list(dls_async_task_t *cb_data)
 		cb_task_data->get_children_cb(cb_data);
 }
 
-static void prv_get_children_cb(GUPnPServiceProxy *proxy,
-				GUPnPServiceProxyAction *action,
-				gpointer user_data)
+static void prv_get_children_cb(GObject *source, GAsyncResult *res, gpointer user_data)
 {
-	gchar *result = NULL;
-	const gchar *message;
-	gboolean end;
-	GUPnPDIDLLiteParser *parser = NULL;
-	GError *error = NULL;
+	g_autofree char *result = NULL;
+	g_autoptr(GUPnPDIDLLiteParser) parser = NULL;
+	g_autoptr(GError) error = NULL;
 	dls_async_task_t *cb_data = user_data;
 	dls_async_bas_t *cb_task_data = &cb_data->ut.bas;
+	g_autoptr(GUPnPServiceProxyAction) action = NULL;
 
 	DLEYNA_LOG_DEBUG("Enter");
 
-	end = gupnp_service_proxy_end_action(cb_data->proxy, cb_data->action,
-					     &error, "Result",
-					     G_TYPE_STRING, &result, NULL);
+	action = gupnp_service_proxy_call_action_finish(cb_data->proxy, res,
+							&error);
+	if(g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+		return;
+	}
 
-	if (!end || (result == NULL)) {
-		message = (error != NULL) ? error->message : "Invalid result";
-		DLEYNA_LOG_WARNING("Browse operation failed: %s", message);
+	if(error == NULL) {
+		gupnp_service_proxy_action_get_result(
+			action, &error, "Result", G_TYPE_STRING, &result, NULL);
+	}
 
-		cb_data->error = g_error_new(DLEYNA_SERVER_ERROR,
-					     DLEYNA_ERROR_OPERATION_FAILED,
-					     "Browse operation failed: %s",
-					     message);
+	if(error != NULL) {
+		DLEYNA_LOG_WARNING("Browse operation failed: %s",
+				   error->message);
+
+		cb_data->error = g_error_new(
+			DLEYNA_SERVER_ERROR, DLEYNA_ERROR_OPERATION_FAILED,
+			"Browse operation failed: %s", error->message);
 		goto on_error;
 	}
 
@@ -1949,18 +1970,8 @@ static void prv_get_children_cb(GUPnPServiceProxy *proxy,
 on_error:
 
 	(void) g_idle_add(dls_async_task_complete, cb_data);
-	g_cancellable_disconnect(cb_data->cancellable, cb_data->cancel_id);
 
 no_complete:
-
-	if (error)
-		g_error_free(error);
-
-	if (parser)
-		g_object_unref(parser);
-
-	g_free(result);
-
 	DLEYNA_LOG_DEBUG("Exit");
 }
 
@@ -1980,27 +1991,22 @@ void dls_device_get_children(dls_client_t *client,
 	g_object_add_weak_pointer((G_OBJECT(context->cds.proxy)),
 				  (gpointer *)&cb_data->proxy);
 
-	cb_data->action =
-		gupnp_service_proxy_begin_action(cb_data->proxy,
-						 "Browse",
-						 prv_get_children_cb,
-						 cb_data,
-						 "ObjectID", G_TYPE_STRING,
-						 task->target.id,
-
-						 "BrowseFlag", G_TYPE_STRING,
-						 "BrowseDirectChildren",
-
-						 "Filter", G_TYPE_STRING,
-						 upnp_filter,
-
-						 "StartingIndex", G_TYPE_INT,
-						 task->ut.get_children.start,
-						 "RequestedCount", G_TYPE_INT,
-						 task->ut.get_children.count,
-						 "SortCriteria", G_TYPE_STRING,
-						 sort_by,
-						 NULL);
+	cb_data->action = gupnp_service_proxy_action_new(
+		"Browse", "ObjectID", G_TYPE_STRING, task->target.id,
+
+		"BrowseFlag", G_TYPE_STRING, "BrowseDirectChildren",
+
+		"Filter", G_TYPE_STRING, upnp_filter,
+
+		"StartingIndex", G_TYPE_INT, task->ut.get_children.start,
+		"RequestedCount", G_TYPE_INT, task->ut.get_children.count,
+		"SortCriteria", G_TYPE_STRING, sort_by, NULL);
+
+	gupnp_service_proxy_call_action_async(cb_data->proxy,
+					      cb_data->action,
+					      cb_data->cancellable,
+					      prv_get_children_cb,
+					      cb_data);
 
 	cb_data->cancel_id = g_cancellable_connect(
 					cb_data->cancellable,
@@ -2142,32 +2148,34 @@ static gboolean prv_cds_subscribed(const dls_device_t *device)
 	return subscribed;
 }
 
-static void prv_system_update_id_for_prop_cb(GUPnPServiceProxy *proxy,
-				    GUPnPServiceProxyAction *action,
-				    gpointer user_data)
+static void prv_system_update_id_for_prop_cb(GObject *source, GAsyncResult *res, gpointer user_data)
 {
-	GError *error = NULL;
-	const gchar *message;
-	gboolean end;
+	g_autoptr(GError) error = NULL;
 	guint id = G_MAXUINT32;
 	dls_async_task_t *cb_data = user_data;
+	g_autoptr(GUPnPServiceProxyAction) action = NULL;
 
 	DLEYNA_LOG_DEBUG("Enter");
 
-	end = gupnp_service_proxy_end_action(proxy, action, &error,
-					     "Id", G_TYPE_UINT, &id, NULL);
+	action = gupnp_service_proxy_call_action_finish(cb_data->proxy, res,
+							&error);
+	if(g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+		return;
+	}
 
-	if (!end || (id == G_MAXUINT32)) {
-		message = (error != NULL) ? error->message : "Invalid result";
+	if(error == NULL) {
+		gupnp_service_proxy_action_get_result(action, &error, "Id",
+						      G_TYPE_UINT, &id, NULL);
+	}
+
+	if(error != NULL) {
 		DLEYNA_LOG_WARNING("Unable to retrieve SystemUpdateID: %s",
-				   message);
+				   error->message);
 
 		cb_data->error = g_error_new(
-					DLEYNA_SERVER_ERROR,
-					DLEYNA_ERROR_OPERATION_FAILED,
-					"Unable to retrieve SystemUpdateID: %s",
-					message);
-
+			DLEYNA_SERVER_ERROR, DLEYNA_ERROR_OPERATION_FAILED,
+			"Unable to retrieve SystemUpdateID: %s",
+			error->message);
 		goto on_complete;
 	}
 
@@ -2176,10 +2184,6 @@ static void prv_system_update_id_for_prop_cb(GUPnPServiceProxy *proxy,
 on_complete:
 
 	(void) g_idle_add(dls_async_task_complete, cb_data);
-	g_cancellable_disconnect(cb_data->cancellable, cb_data->cancel_id);
-
-	if (error)
-		g_error_free(error);
 
 	DLEYNA_LOG_DEBUG("Exit");
 }
@@ -2203,51 +2207,51 @@ static void prv_get_system_update_id_for_prop(GUPnPServiceProxy *proxy,
 		goto on_complete;
 	}
 
-	cb_data->action = gupnp_service_proxy_begin_action(
-					proxy, "GetSystemUpdateID",
-					prv_system_update_id_for_prop_cb,
-					cb_data,
-					NULL);
+	cb_data->action = gupnp_service_proxy_action_new("GetSystemUpdateID", NULL);
 
 	cb_data->proxy = proxy;
 	g_object_add_weak_pointer((G_OBJECT(proxy)),
 				  (gpointer *)&cb_data->proxy);
 
-	cb_data->cancel_id = g_cancellable_connect(
-					cb_data->cancellable,
-					G_CALLBACK(dls_async_task_cancelled_cb),
-					cb_data, NULL);
+	gupnp_service_proxy_call_action_async(
+		proxy, cb_data->action, cb_data->cancellable,
+		prv_system_update_id_for_prop_cb, cb_data);
 
 on_complete:
 
 	DLEYNA_LOG_DEBUG("Exit");
 }
 
-static void prv_system_update_id_for_props_cb(GUPnPServiceProxy *proxy,
-				    GUPnPServiceProxyAction *action,
-				    gpointer user_data)
+static void prv_system_update_id_for_props_cb(GObject *source, GAsyncResult *res, gpointer user_data)
 {
-	GError *error = NULL;
-	const gchar *message;
-	gboolean end;
+	g_autoptr(GError) error = NULL;
 	guint id = G_MAXUINT32;
 	dls_async_task_t *cb_data = user_data;
 	dls_async_get_all_t *cb_task_data = &cb_data->ut.get_all;
+	g_autoptr(GUPnPServiceProxyAction) action = NULL;
+
 
 	DLEYNA_LOG_DEBUG("Enter");
 
-	end = gupnp_service_proxy_end_action(proxy, action, &error,
-					    "Id", G_TYPE_UINT, &id, NULL);
+	action = gupnp_service_proxy_call_action_finish(cb_data->proxy, res,
+							&error);
+	if(g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+		return;
+	}
+
+	if(error == NULL) {
+		gupnp_service_proxy_action_get_result(action, &error, "Id",
+						      G_TYPE_UINT, &id, NULL);
+	}
 
-	if (!end || (id == G_MAXUINT32)) {
-		message = (error != NULL) ? error->message : "Invalid result";
+	if(error != NULL) {
 		DLEYNA_LOG_WARNING("Unable to retrieve SystemUpdateID: %s",
-				   message);
+				   error->message);
 
-		cb_data->error = g_error_new(DLEYNA_SERVER_ERROR,
-					     DLEYNA_ERROR_OPERATION_FAILED,
-					     "Unable to retrieve SystemUpdateID: %s",
-					     message);
+		cb_data->error = g_error_new(
+			DLEYNA_SERVER_ERROR, DLEYNA_ERROR_OPERATION_FAILED,
+			"Unable to retrieve SystemUpdateID: %s",
+			error->message);
 
 		goto on_complete;
 	}
@@ -2259,19 +2263,14 @@ static void prv_system_update_id_for_props_cb(GUPnPServiceProxy *proxy,
 on_complete:
 
 	if (!cb_data->error)
-		prv_get_sr_token_for_props(proxy, cb_data->task.target.device,
+		prv_get_sr_token_for_props(GUPNP_SERVICE_PROXY (source), cb_data->task.target.device,
 					   cb_data);
 	else {
 		cb_data->task.result = g_variant_ref_sink(g_variant_builder_end(
 							cb_task_data->vb));
 		(void) g_idle_add(dls_async_task_complete, cb_data);
-		g_cancellable_disconnect(cb_data->cancellable,
-					 cb_data->cancel_id);
 	}
 
-	if (error)
-		g_error_free(error);
-
 	DLEYNA_LOG_DEBUG("Exit");
 }
 
@@ -2298,11 +2297,8 @@ static void prv_get_system_update_id_for_props(GUPnPServiceProxy *proxy,
 		goto on_complete;
 	}
 
-	cb_data->action = gupnp_service_proxy_begin_action(
-					proxy, "GetSystemUpdateID",
-					prv_system_update_id_for_props_cb,
-					cb_data,
-					NULL);
+	cb_data->action =
+		gupnp_service_proxy_action_new("GetSystemUpdateID", NULL);
 
 	if (cb_data->proxy != NULL)
 		g_object_remove_weak_pointer((G_OBJECT(cb_data->proxy)),
@@ -2310,15 +2306,13 @@ static void prv_get_system_update_id_for_props(GUPnPServiceProxy *proxy,
 
 	cb_data->proxy = proxy;
 
+	gupnp_service_proxy_call_action_async(
+		proxy, cb_data->action, cb_data->cancellable,
+		prv_system_update_id_for_props_cb, cb_data);
+
 	g_object_add_weak_pointer((G_OBJECT(proxy)),
 				  (gpointer *)&cb_data->proxy);
 
-	if (!cb_data->cancel_id)
-		cb_data->cancel_id = g_cancellable_connect(
-					cb_data->cancellable,
-					G_CALLBACK(dls_async_task_cancelled_cb),
-					cb_data, NULL);
-
 on_complete:
 
 	DLEYNA_LOG_DEBUG("Exit");
@@ -2341,34 +2335,36 @@ static gboolean prv_ems_subscribed(const dls_device_t *device)
 	return subscribed;
 }
 
-static void prv_sleeping_for_props_cb(GUPnPServiceProxy *proxy,
-				      GUPnPServiceProxyAction *action,
-				      gpointer user_data)
+static void prv_sleeping_for_props_cb(GObject *source, GAsyncResult *res, gpointer user_data)
 {
-	GError *error = NULL;
-	const gchar *message;
-	gchar *info = NULL;
-	gboolean end;
+	g_autoptr(GError) error = NULL;
+	g_autofree gchar *info = NULL;
 	dls_async_task_t *cb_data = user_data;
 	dls_async_get_all_t *cb_task_data;
 	gboolean sleeping;
+	g_autoptr(GUPnPServiceProxyAction) action = NULL;
 
 	DLEYNA_LOG_DEBUG("Enter");
 
-	end = gupnp_service_proxy_end_action(proxy, action, &error,
-					     "NetworkInterfaceInfo",
-					     G_TYPE_STRING,
-					     &info, NULL);
+	action = gupnp_service_proxy_call_action_finish(cb_data->proxy, res,
+							&error);
+	if(g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+		return;
+	}
 
-	if (!end || (info == NULL)) {
-		message = (error != NULL) ? error->message : "Invalid result";
+	if(error == NULL) {
+		gupnp_service_proxy_action_get_result(
+			action, &error, "NetworkInterfaceInfo", G_TYPE_STRING,
+			&info, NULL);
+	}
+
+	if (error != NULL) {
 		DLEYNA_LOG_WARNING("NetworkInterfaceInfo retrieval failed: %s",
-				   message);
+				   error->message);
 
-		cb_data->error = g_error_new(DLEYNA_SERVER_ERROR,
-					     DLEYNA_ERROR_OPERATION_FAILED,
-					     "GetInterfaceInfo failed: %s",
-					     message);
+		cb_data->error = g_error_new(
+			DLEYNA_SERVER_ERROR, DLEYNA_ERROR_OPERATION_FAILED,
+			"GetInterfaceInfo failed: %s", error->message);
 		goto on_complete;
 	}
 
@@ -2384,15 +2380,9 @@ static void prv_sleeping_for_props_cb(GUPnPServiceProxy *proxy,
 							     cb_task_data->vb));
 	}
 
-	g_free(info);
-
 on_complete:
 
 	(void) g_idle_add(dls_async_task_complete, cb_data);
-	g_cancellable_disconnect(cb_data->cancellable, cb_data->cancel_id);
-
-	if (error)
-		g_error_free(error);
 
 	DLEYNA_LOG_DEBUG("Exit");
 }
@@ -2421,27 +2411,25 @@ static void prv_get_sleeping_for_props(GUPnPServiceProxy *proxy,
 		goto on_complete;
 	}
 
-	cb_data->action = gupnp_service_proxy_begin_action(
-					proxy, "GetInterfaceInfo",
-					prv_sleeping_for_props_cb,
-					cb_data,
-					NULL);
 
 	if (cb_data->proxy != NULL)
 		g_object_remove_weak_pointer((G_OBJECT(cb_data->proxy)),
 					     (gpointer *)&cb_data->proxy);
 
+	cb_data->action = gupnp_service_proxy_action_new ("GetInterfaceInfo", NULL);
+
+
+
 	cb_data->proxy = proxy;
 
 	g_object_add_weak_pointer((G_OBJECT(proxy)),
 				  (gpointer *)&cb_data->proxy);
 
-	if (!cb_data->cancel_id)
-		cb_data->cancel_id = g_cancellable_connect(
-					cb_data->cancellable,
-					G_CALLBACK(dls_async_task_cancelled_cb),
-					cb_data, NULL);
-
+	gupnp_service_proxy_call_action_async(
+		proxy, cb_data->action,
+		cb_data->cancellable,
+		prv_sleeping_for_props_cb,
+		cb_data);
 	return;
 
 on_complete:
@@ -2476,31 +2464,34 @@ on_error:
 	return -1;
 }
 
-static void prv_service_reset_for_prop_cb(GUPnPServiceProxy *proxy,
-					  GUPnPServiceProxyAction *action,
-					  gpointer user_data)
+static void prv_service_reset_for_prop_cb(GObject *source, GAsyncResult *res, gpointer user_data)
 {
-	GError *error = NULL;
-	const gchar *message;
-	gchar *token = NULL;
-	gboolean end;
+	g_autoptr(GError) error = NULL;
+	g_autofree gchar *token = NULL;
 	dls_async_task_t *cb_data = user_data;
+	g_autoptr(GUPnPServiceProxyAction) action = NULL;
 
 	DLEYNA_LOG_DEBUG("Enter");
 
-	end = gupnp_service_proxy_end_action(proxy, action, &error,
-					     "ResetToken", G_TYPE_STRING,
+	action = gupnp_service_proxy_call_action_finish(cb_data->proxy, res,
+							&error);
+	if(g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+		return;
+	}
+
+	if(error == NULL) {
+		gupnp_service_proxy_action_get_result(
+			action, &error,"ResetToken", G_TYPE_STRING,
 					     &token, NULL);
+	}
 
-	if (!end || (token == NULL)) {
-		message = (error != NULL) ? error->message : "Invalid result";
+	if (error != NULL) {
 		DLEYNA_LOG_WARNING("Unable to retrieve ServiceResetToken: %s",
-				   message);
+				   error->message);
 
-		cb_data->error = g_error_new(DLEYNA_SERVER_ERROR,
-					     DLEYNA_ERROR_OPERATION_FAILED,
-					     "GetServiceResetToken failed: %s",
-					     message);
+		cb_data->error = g_error_new(
+			DLEYNA_SERVER_ERROR, DLEYNA_ERROR_OPERATION_FAILED,
+			"GetServiceResetToken failed: %s", error->message);
 
 		goto on_complete;
 	}
@@ -2509,15 +2500,9 @@ static void prv_service_reset_for_prop_cb(GUPnPServiceProxy *proxy,
 
 	DLEYNA_LOG_DEBUG("Service Reset %s", token);
 
-	g_free(token);
-
 on_complete:
 
 	(void) g_idle_add(dls_async_task_complete, cb_data);
-	g_cancellable_disconnect(cb_data->cancellable, cb_data->cancel_id);
-
-	if (error)
-		g_error_free(error);
 
 	DLEYNA_LOG_DEBUG("Exit");
 }
@@ -2538,65 +2523,59 @@ static void prv_get_sr_token_for_prop(GUPnPServiceProxy *proxy,
 		goto on_error;
 	}
 
-	cb_data->action = gupnp_service_proxy_begin_action(
-					proxy, "GetServiceResetToken",
-					prv_service_reset_for_prop_cb,
-					cb_data,
-					NULL);
 
 	cb_data->proxy = proxy;
 	g_object_add_weak_pointer((G_OBJECT(proxy)),
 				  (gpointer *)&cb_data->proxy);
 
-	cb_data->cancel_id = g_cancellable_connect(
-					cb_data->cancellable,
-					G_CALLBACK(dls_async_task_cancelled_cb),
-					cb_data, NULL);
+	cb_data->action = gupnp_service_proxy_action_new("GetServiceResetToken", NULL);
+
+	gupnp_service_proxy_call_action_async(
+		proxy, cb_data->action, cb_data->cancellable,
+		prv_service_reset_for_prop_cb, cb_data);
 
 on_error:
 
 	DLEYNA_LOG_DEBUG("Exit");
 }
 
-static void prv_service_reset_for_props_cb(GUPnPServiceProxy *proxy,
-					  GUPnPServiceProxyAction *action,
-					  gpointer user_data)
+static void prv_service_reset_for_props_cb(GObject *source, GAsyncResult *res, gpointer user_data)
 {
-	GError *error = NULL;
-	const gchar *message;
-	gchar *token = NULL;
-	gboolean end;
+	g_autoptr(GError) error = NULL;
+	g_autofree gchar *token = NULL;
 	dls_async_task_t *cb_data = user_data;
 	dls_async_get_all_t *cb_task_data;
+	g_autoptr(GUPnPServiceProxyAction) action = NULL;
 
 	DLEYNA_LOG_DEBUG("Enter");
 
 	cb_task_data = &cb_data->ut.get_all;
 
-	end = gupnp_service_proxy_end_action(proxy, action, &error,
-					    "ResetToken", G_TYPE_STRING,
-					    &token, NULL);
+	action = gupnp_service_proxy_call_action_finish(cb_data->proxy, res,
+							&error);
+	if(g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+		return;
+	}
+	if(error == NULL) {
+		gupnp_service_proxy_action_get_result(
+			action, &error,"ResetToken", G_TYPE_STRING,
+			&token, NULL);
+	}
 
-	if (!end || (token == NULL)) {
-		message = (error != NULL) ? error->message : "Invalid result";
+	if (error != NULL) {
 		DLEYNA_LOG_WARNING("Unable to retrieve ServiceResetToken: %s",
-				   message);
+				   error->message);
+
+		cb_data->error = g_error_new(
+			DLEYNA_SERVER_ERROR, DLEYNA_ERROR_OPERATION_FAILED,
+			"GetServiceResetToken failed: %s", error->message);
 
-		cb_data->error = g_error_new(DLEYNA_SERVER_ERROR,
-					     DLEYNA_ERROR_OPERATION_FAILED,
-					     "GetServiceResetToken failed: %s",
-					     message);
 		goto on_complete;
 	}
 
-	g_variant_builder_add(cb_task_data->vb, "{sv}",
-			      DLS_INTERFACE_PROP_SV_SERVICE_RESET_TOKEN,
-			      g_variant_new_string(token));
 
 	DLEYNA_LOG_DEBUG("Service Reset %s", token);
 
-	g_free(token);
-
 on_complete:
 
 	if ((!cb_data->error) && (cb_task_data->proxy))
@@ -2608,13 +2587,8 @@ on_complete:
 							     cb_task_data->vb));
 
 		(void) g_idle_add(dls_async_task_complete, cb_data);
-		g_cancellable_disconnect(cb_data->cancellable,
-					 cb_data->cancel_id);
 	}
 
-	if (error)
-		g_error_free(error);
-
 	DLEYNA_LOG_DEBUG("Exit");
 }
 
@@ -2635,11 +2609,6 @@ static void prv_get_sr_token_for_props(GUPnPServiceProxy *proxy,
 		goto on_exit; /* No error here, just skip the property */
 	}
 
-	cb_data->action = gupnp_service_proxy_begin_action(
-					proxy, "GetServiceResetToken",
-					prv_service_reset_for_props_cb,
-					cb_data,
-					NULL);
 
 	if (cb_data->proxy != NULL)
 		g_object_remove_weak_pointer((G_OBJECT(cb_data->proxy)),
@@ -2649,11 +2618,10 @@ static void prv_get_sr_token_for_props(GUPnPServiceProxy *proxy,
 	g_object_add_weak_pointer((G_OBJECT(proxy)),
 				  (gpointer *)&cb_data->proxy);
 
-	if (!cb_data->cancel_id)
-		cb_data->cancel_id = g_cancellable_connect(
-					cb_data->cancellable,
-					G_CALLBACK(dls_async_task_cancelled_cb),
-					cb_data, NULL);
+	cb_data->action = gupnp_service_proxy_action_new("GetServiceResetToken", NULL);
+	gupnp_service_proxy_call_action_async(
+		proxy, cb_data->action, cb_data->cancellable,
+		prv_service_reset_for_props_cb, cb_data);
 
 on_exit:
 
@@ -2662,34 +2630,36 @@ on_exit:
 	return;
 }
 
-static void prv_sleeping_for_prop_cb(GUPnPServiceProxy *proxy,
-				     GUPnPServiceProxyAction *action,
-				     gpointer user_data)
+static void prv_sleeping_for_prop_cb(GObject *source, GAsyncResult *res, gpointer user_data)
 {
-	GError *error = NULL;
-	const gchar *message;
-	gchar *info = NULL;
-	gboolean end;
+	g_autoptr(GError) error = NULL;
+	g_autofree gchar *info = NULL;
 	dls_async_task_t *cb_data = user_data;
 	gboolean sleeping;
+	g_autoptr(GUPnPServiceProxyAction) action = NULL;
+
 
 	DLEYNA_LOG_DEBUG("Enter");
 
-	end = gupnp_service_proxy_end_action(proxy, action, &error,
-					     "NetworkInterfaceInfo",
-					     G_TYPE_STRING,
-					     &info, NULL);
+	action = gupnp_service_proxy_call_action_finish(cb_data->proxy, res,
+							&error);
+	if(g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+		return;
+	}
 
-	if (!end || (info == NULL)) {
-		message = (error != NULL) ? error->message : "Invalid result";
-		DLEYNA_LOG_WARNING("NetworkInterfaceInfo retrieval failed: %s",
-				   message);
+	if(error == NULL) {
+		gupnp_service_proxy_action_get_result(
+			action, &error, "NetworkInterfaceInfo", G_TYPE_STRING,
+			&info, NULL);
+	}
 
-		cb_data->error = g_error_new(DLEYNA_SERVER_ERROR,
-					     DLEYNA_ERROR_OPERATION_FAILED,
-					     "GetInterfaceInfo failed: %s",
-					     message);
+	if (error != NULL) {
+		DLEYNA_LOG_WARNING("NetworkInterfaceInfo retrieval failed: %s",
+				   error->message);
 
+		cb_data->error = g_error_new(
+			DLEYNA_SERVER_ERROR, DLEYNA_ERROR_OPERATION_FAILED,
+			"GetInterfaceInfo failed: %s", error->message);
 		goto on_complete;
 	}
 
@@ -2700,15 +2670,9 @@ static void prv_sleeping_for_prop_cb(GUPnPServiceProxy *proxy,
 					      g_variant_new_boolean(sleeping));
 	}
 
-	g_free(info);
-
 on_complete:
 
 	(void) g_idle_add(dls_async_task_complete, cb_data);
-	g_cancellable_disconnect(cb_data->cancellable, cb_data->cancel_id);
-
-	if (error)
-		g_error_free(error);
 
 	DLEYNA_LOG_DEBUG("Exit");
 }
@@ -2740,21 +2704,17 @@ static void prv_get_sleeping_for_prop(GUPnPServiceProxy *proxy,
 		goto on_complete;
 	}
 
-	cb_data->action = gupnp_service_proxy_begin_action(
-					proxy, "GetInterfaceInfo",
-					prv_sleeping_for_prop_cb,
-					cb_data,
-					NULL);
-
 	cb_data->proxy = proxy;
 
 	g_object_add_weak_pointer((G_OBJECT(proxy)),
-				  (gpointer *)&cb_data->proxy);
+				  (gpointer *) &cb_data->proxy);
+
+	cb_data->action =
+		gupnp_service_proxy_action_new("GetInterfaceInfo", NULL);
+	gupnp_service_proxy_call_action_async(
+		proxy, cb_data->action, cb_data->cancellable,
+		prv_sleeping_for_prop_cb, cb_data);
 
-	cb_data->cancel_id = g_cancellable_connect(
-					cb_data->cancellable,
-					G_CALLBACK(dls_async_task_cancelled_cb),
-					cb_data, NULL);
 on_complete:
 
 	DLEYNA_LOG_DEBUG("Exit");
@@ -2777,32 +2737,35 @@ static gboolean prv_get_all_child_count_cb(dls_async_task_t *cb_data,
 	return !cb_task_data->device_object;
 }
 
-static void prv_get_all_ms2spec_props_cb(GUPnPServiceProxy *proxy,
-					 GUPnPServiceProxyAction *action,
-					 gpointer user_data)
+static void prv_get_all_ms2spec_props_cb(GObject *source, GAsyncResult *res, gpointer user_data)
 {
-	GError *error = NULL;
-	const gchar *message;
-	gchar *result = NULL;
-	gboolean end;
-	GUPnPDIDLLiteParser *parser = NULL;
+	g_autoptr(GError) error = NULL;
+	g_autofree gchar *result = NULL;
+	g_autoptr(GUPnPDIDLLiteParser) parser = NULL;
 	dls_async_task_t *cb_data = user_data;
 	dls_async_get_all_t *cb_task_data = &cb_data->ut.get_all;
+	g_autoptr(GUPnPServiceProxyAction) action = NULL;
 
 	DLEYNA_LOG_DEBUG("Enter");
 
-	end = gupnp_service_proxy_end_action(cb_data->proxy, cb_data->action,
-					    &error, "Result",
-					    G_TYPE_STRING, &result, NULL);
+	action = gupnp_service_proxy_call_action_finish(cb_data->proxy, res,
+							&error);
+	if(g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+		return;
+	}
 
-	if (!end || (result == NULL)) {
-		message = (error != NULL) ? error->message : "Invalid result";
-		DLEYNA_LOG_WARNING("Browse operation failed: %s", message);
+	if(error == NULL) {
+		gupnp_service_proxy_action_get_result(
+			action, &error, "Result", G_TYPE_STRING, &result, NULL);
+	}
 
-		cb_data->error = g_error_new(DLEYNA_SERVER_ERROR,
-					     DLEYNA_ERROR_OPERATION_FAILED,
-					     "Browse operation failed: %s",
-					     message);
+	if(error != NULL) {
+		DLEYNA_LOG_WARNING("Browse operation failed: %s",
+				   error->message);
+
+		cb_data->error = g_error_new(
+			DLEYNA_SERVER_ERROR, DLEYNA_ERROR_OPERATION_FAILED,
+			"Browse operation failed: %s", error->message);
 		goto on_error;
 	}
 
@@ -2847,7 +2810,7 @@ static void prv_get_all_ms2spec_props_cb(GUPnPServiceProxy *proxy,
 		goto no_complete;
 	} else if (cb_data->task.type == DLS_TASK_GET_ALL_PROPS &&
 						cb_task_data->device_object) {
-		prv_get_system_update_id_for_props(proxy,
+		prv_get_system_update_id_for_props(GUPNP_SERVICE_PROXY(source),
 						   cb_data->task.target.device,
 						   cb_data);
 
@@ -2860,18 +2823,8 @@ static void prv_get_all_ms2spec_props_cb(GUPnPServiceProxy *proxy,
 on_error:
 
 	(void) g_idle_add(dls_async_task_complete, cb_data);
-	g_cancellable_disconnect(cb_data->cancellable, cb_data->cancel_id);
 
 no_complete:
-
-	if (error)
-		g_error_free(error);
-
-	if (parser)
-		g_object_unref(parser);
-
-	g_free(result);
-
 	DLEYNA_LOG_DEBUG("Exit");
 }
 
@@ -2904,27 +2857,22 @@ static void prv_get_all_ms2spec_props(dls_device_context_t *context,
 		goto on_error;
 	}
 
-	cb_data->action = gupnp_service_proxy_begin_action(
-				context->cds.proxy, "Browse",
-				prv_get_all_ms2spec_props_cb, cb_data,
-				"ObjectID", G_TYPE_STRING, task->target.id,
-				"BrowseFlag", G_TYPE_STRING, "BrowseMetadata",
-				"Filter", G_TYPE_STRING, "*",
-				"StartingIndex", G_TYPE_INT, 0,
-				"RequestedCount", G_TYPE_INT, 0,
-				"SortCriteria", G_TYPE_STRING,
-				"", NULL);
+	cb_data->action = gupnp_service_proxy_action_new(
+		"Browse", "ObjectID", G_TYPE_STRING, task->target.id,
+		"BrowseFlag", G_TYPE_STRING, "BrowseMetadata", "Filter",
+		G_TYPE_STRING, "*", "StartingIndex", G_TYPE_INT, 0,
+		"RequestedCount", G_TYPE_INT, 0, "SortCriteria", G_TYPE_STRING,
+		"", NULL);
+
+	gupnp_service_proxy_call_action_async(
+		context->cds.proxy, cb_data->action, cb_data->cancellable,
+		prv_get_all_ms2spec_props_cb, cb_data);
 
 	cb_data->proxy = context->cds.proxy;
 
 	g_object_add_weak_pointer((G_OBJECT(context->cds.proxy)),
 				  (gpointer *)&cb_data->proxy);
 
-	cb_data->cancel_id = g_cancellable_connect(
-					cb_data->cancellable,
-					G_CALLBACK(dls_async_task_cancelled_cb),
-					cb_data, NULL);
-
 	DLEYNA_LOG_DEBUG("Exit with SUCCESS");
 
 	return;
@@ -3096,33 +3044,34 @@ static gboolean prv_get_child_count_cb(dls_async_task_t *cb_data,
 	return TRUE;
 }
 
-static void prv_count_children_cb(GUPnPServiceProxy *proxy,
-				  GUPnPServiceProxyAction *action,
-				  gpointer user_data)
-{
+static void prv_count_children_cb(GObject *source, GAsyncResult *res, gpointer user_data){
 	dls_device_count_data_t *count_data = user_data;
 	dls_async_task_t *cb_data = count_data->cb_data;
-	GError *error = NULL;
-	const gchar *message;
+	g_autoptr(GError) error = NULL;
 	guint count = G_MAXUINT32;
 	gboolean complete = FALSE;
-	gboolean end;
+	g_autoptr(GUPnPServiceProxyAction) action = NULL;
 
 	DLEYNA_LOG_DEBUG("Enter");
 
-	end = gupnp_service_proxy_end_action(cb_data->proxy, cb_data->action,
-					    &error,
-					    "TotalMatches", G_TYPE_UINT, &count,
-					    NULL);
+	action = gupnp_service_proxy_call_action_finish(cb_data->proxy, res,
+							&error);
+	if(g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+		return;
+	}
 
-	if (!end || (count == G_MAXUINT32)) {
-		message = (error != NULL) ? error->message : "Invalid result";
-		DLEYNA_LOG_WARNING("Browse operation failed: %s", message);
+	if(error == NULL) {
+		gupnp_service_proxy_action_get_result(action, &error, "TotalMatches",
+						      G_TYPE_UINT, &count, NULL);
+	}
 
-		cb_data->error = g_error_new(DLEYNA_SERVER_ERROR,
-					     DLEYNA_ERROR_OPERATION_FAILED,
-					     "Browse operation failed: %s",
-					     message);
+	if(error != NULL) {
+		DLEYNA_LOG_WARNING("Browse operation failed: %s",
+				   error->message);
+
+		cb_data->error = g_error_new(
+			DLEYNA_SERVER_ERROR, DLEYNA_ERROR_OPERATION_FAILED,
+			"Browse operation failed: %s", error->message);
 		goto on_error;
 	}
 
@@ -3134,13 +3083,8 @@ on_error:
 
 	if (cb_data->error || complete) {
 		(void) g_idle_add(dls_async_task_complete, cb_data);
-		g_cancellable_disconnect(cb_data->cancellable,
-					 cb_data->cancel_id);
 	}
 
-	if (error)
-		g_error_free(error);
-
 	DLEYNA_LOG_DEBUG("Exit");
 }
 
@@ -3152,62 +3096,59 @@ static void prv_get_child_count(dls_async_task_t *cb_data,
 	DLEYNA_LOG_DEBUG("Enter");
 
 	prv_count_data_new(cb_data, cb, &count_data);
-	cb_data->action =
-		gupnp_service_proxy_begin_action(cb_data->proxy,
-						 "Browse",
-						 prv_count_children_cb,
-						 count_data,
-						 "ObjectID", G_TYPE_STRING, id,
-
-						 "BrowseFlag", G_TYPE_STRING,
-						 "BrowseDirectChildren",
+	cb_data->action = gupnp_service_proxy_action_new(
+		"Browse", "ObjectID", G_TYPE_STRING, id,
 
-						 "Filter", G_TYPE_STRING, "",
+		"BrowseFlag", G_TYPE_STRING, "BrowseDirectChildren",
 
-						 "StartingIndex", G_TYPE_INT,
-						 0,
+		"Filter", G_TYPE_STRING, "",
 
-						 "RequestedCount", G_TYPE_INT,
-						 1,
+		"StartingIndex", G_TYPE_INT, 0,
 
-						 "SortCriteria", G_TYPE_STRING,
-						 "",
+		"RequestedCount", G_TYPE_INT, 1,
 
-						 NULL);
+		"SortCriteria", G_TYPE_STRING, "", NULL);
 
+	gupnp_service_proxy_call_action_async(
+		cb_data->proxy, cb_data->action, cb_data->cancellable,
+		prv_count_children_cb, count_data);
 	DLEYNA_LOG_DEBUG("Exit with SUCCESS");
 }
 
-static void prv_get_ms2spec_prop_cb(GUPnPServiceProxy *proxy,
-				    GUPnPServiceProxyAction *action,
-				    gpointer user_data)
+static void prv_get_ms2spec_prop_cb(GObject *source, GAsyncResult *res, gpointer user_data)
 {
-	GError *error = NULL;
-	const gchar *message;
-	gchar *result = NULL;
-	gboolean end;
-	GUPnPDIDLLiteParser *parser = NULL;
+	g_autoptr(GError) error = NULL;
+	g_autofree gchar *result = NULL;
+	g_autoptr(GUPnPDIDLLiteParser) parser = NULL;
 	dls_async_task_t *cb_data = user_data;
 	dls_async_get_prop_t *cb_task_data = &cb_data->ut.get_prop;
 	dls_task_get_prop_t *task_data = &cb_data->task.ut.get_prop;
+	g_autoptr(GUPnPServiceProxyAction) action = NULL;
 
 	DLEYNA_LOG_DEBUG("Enter");
 
-	end = gupnp_service_proxy_end_action(cb_data->proxy, cb_data->action,
-					    &error, "Result",
-					    G_TYPE_STRING, &result, NULL);
+	action = gupnp_service_proxy_call_action_finish(cb_data->proxy, res,
+							&error);
+	if(g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+		return;
+	}
 
-	if (!end || (result == NULL)) {
-		message = (error != NULL) ? error->message : "Invalid result";
-		DLEYNA_LOG_WARNING("Browse operation failed: %s", message);
+	if(error == NULL) {
+		gupnp_service_proxy_action_get_result(
+			action, &error, "Result", G_TYPE_STRING, &result, NULL);
+	}
 
-		cb_data->error = g_error_new(DLEYNA_SERVER_ERROR,
-					     DLEYNA_ERROR_OPERATION_FAILED,
-					     "Browse operation failed: %s",
-					     message);
+	if(error != NULL) {
+		DLEYNA_LOG_WARNING("Browse operation failed: %s",
+				   error->message);
+
+		cb_data->error = g_error_new(
+			DLEYNA_SERVER_ERROR, DLEYNA_ERROR_OPERATION_FAILED,
+			"Browse operation failed: %s", error->message);
 		goto on_error;
 	}
 
+
 	DLEYNA_LOG_DEBUG("GetMS2SpecProp result: %s", result);
 
 	parser = gupnp_didl_lite_parser_new();
@@ -3257,18 +3198,8 @@ on_error:
 				    cb_data->task.target.id);
 	} else {
 		(void) g_idle_add(dls_async_task_complete, cb_data);
-		g_cancellable_disconnect(cb_data->cancellable,
-					 cb_data->cancel_id);
 	}
 
-	if (error)
-		g_error_free(error);
-
-	if (parser)
-		g_object_unref(parser);
-
-	g_free(result);
-
 	DLEYNA_LOG_DEBUG("Exit");
 }
 
@@ -3319,24 +3250,16 @@ static void prv_get_ms2spec_prop(dls_device_context_t *context,
 	g_object_add_weak_pointer((G_OBJECT(context->cds.proxy)),
 				  (gpointer *)&cb_data->proxy);
 
-	cb_data->action = gupnp_service_proxy_begin_action(
-			cb_data->proxy, "Browse",
-			prv_get_ms2spec_prop_cb,
-			cb_data,
-			"ObjectID", G_TYPE_STRING, cb_data->task.target.id,
-			"BrowseFlag", G_TYPE_STRING,
-			"BrowseMetadata",
-			"Filter", G_TYPE_STRING, filter,
-			"StartingIndex", G_TYPE_INT, 0,
-			"RequestedCount", G_TYPE_INT, 0,
-			"SortCriteria", G_TYPE_STRING,
-			"",
-			NULL);
+	cb_data->action = gupnp_service_proxy_action_new(
+		"Browse", "ObjectID", G_TYPE_STRING, cb_data->task.target.id,
+		"BrowseFlag", G_TYPE_STRING, "BrowseMetadata", "Filter",
+		G_TYPE_STRING, filter, "StartingIndex", G_TYPE_INT, 0,
+		"RequestedCount", G_TYPE_INT, 0, "SortCriteria", G_TYPE_STRING,
+		"", NULL);
 
-	cb_data->cancel_id = g_cancellable_connect(
-					cb_data->cancellable,
-					G_CALLBACK(dls_async_task_cancelled_cb),
-					cb_data, NULL);
+	gupnp_service_proxy_call_action_async(cb_data->proxy, cb_data->action,
+					      cb_data->cancellable,
+					      prv_get_ms2spec_prop_cb, cb_data);
 
 	DLEYNA_LOG_DEBUG("Exit with SUCCESS");
 
@@ -3552,35 +3475,38 @@ on_error:
 	DLEYNA_LOG_DEBUG("Exit with FAIL");
 }
 
-static void prv_search_cb(GUPnPServiceProxy *proxy,
-			  GUPnPServiceProxyAction *action,
-			  gpointer user_data)
+static void prv_search_cb(GObject *source, GAsyncResult *res, gpointer user_data)
 {
-	gchar *result = NULL;
-	const gchar *message;
-	gboolean end;
+	g_autofree gchar *result = NULL;
 	guint count = G_MAXUINT32;
-	GUPnPDIDLLiteParser *parser = NULL;
-	GError *error = NULL;
+	g_autoptr(GUPnPDIDLLiteParser) parser = NULL;
+	g_autoptr(GError) error = NULL;
 	dls_async_task_t *cb_data = user_data;
 	dls_async_bas_t *cb_task_data = &cb_data->ut.bas;
+	g_autoptr(GUPnPServiceProxyAction) action = NULL;
+
 
 	DLEYNA_LOG_DEBUG("Enter");
 
-	end = gupnp_service_proxy_end_action(cb_data->proxy, cb_data->action,
-					     &error,
-					     "Result", G_TYPE_STRING, &result,
-					     "TotalMatches", G_TYPE_UINT,
-					     &count, NULL);
+	action = gupnp_service_proxy_call_action_finish(cb_data->proxy, res,
+							&error);
+	if(g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+		return;
+	}
 
-	if (!end || (result == NULL) || (count == G_MAXUINT32)) {
-		message = (error != NULL) ? error->message : "Invalid result";
-		DLEYNA_LOG_WARNING("Search operation failed %s", message);
+	if(error == NULL) {
+		gupnp_service_proxy_action_get_result(
+			action, &error, "Result", G_TYPE_STRING, &result,
+			"TotalMatches", G_TYPE_UINT, &count, NULL);
+	}
 
-		cb_data->error = g_error_new(DLEYNA_SERVER_ERROR,
-					     DLEYNA_ERROR_OPERATION_FAILED,
-					     "Search operation failed: %s",
-					     message);
+	if(error != NULL) {
+		DLEYNA_LOG_WARNING("Search operation failed: %s",
+				   error->message);
+
+		cb_data->error = g_error_new(
+			DLEYNA_SERVER_ERROR, DLEYNA_ERROR_OPERATION_FAILED,
+			"Search operation failed: %s", error->message);
 		goto on_error;
 	}
 
@@ -3628,18 +3554,9 @@ static void prv_search_cb(GUPnPServiceProxy *proxy,
 on_error:
 
 	(void) g_idle_add(dls_async_task_complete, cb_data);
-	g_cancellable_disconnect(cb_data->cancellable, cb_data->cancel_id);
 
 no_complete:
 
-	if (parser)
-		g_object_unref(parser);
-
-	g_free(result);
-
-	if (error)
-		g_error_free(error);
-
 	DLEYNA_LOG_DEBUG("Exit");
 }
 
@@ -3660,22 +3577,18 @@ void dls_device_search(dls_client_t *client,
 	g_object_add_weak_pointer((G_OBJECT(context->cds.proxy)),
 				  (gpointer *)&cb_data->proxy);
 
-	cb_data->action = gupnp_service_proxy_begin_action(
-			cb_data->proxy, "Search",
-			prv_search_cb,
-			cb_data,
-			"ContainerID", G_TYPE_STRING, task->target.id,
-			"SearchCriteria", G_TYPE_STRING, upnp_query,
-			"Filter", G_TYPE_STRING, upnp_filter,
-			"StartingIndex", G_TYPE_INT, task->ut.search.start,
-			"RequestedCount", G_TYPE_INT, task->ut.search.count,
-			"SortCriteria", G_TYPE_STRING, sort_by,
-			NULL);
 
-	cb_data->cancel_id = g_cancellable_connect(
-					cb_data->cancellable,
-					G_CALLBACK(dls_async_task_cancelled_cb),
-					cb_data, NULL);
+	cb_data->action = gupnp_service_proxy_action_new(
+		"Search", "ContainerID", G_TYPE_STRING, task->target.id,
+		"SearchCriteria", G_TYPE_STRING, upnp_query, "Filter",
+		G_TYPE_STRING, upnp_filter, "StartingIndex", G_TYPE_INT,
+		task->ut.search.start, "RequestedCount", G_TYPE_INT,
+		task->ut.search.count, "SortCriteria", G_TYPE_STRING, sort_by,
+		NULL);
+
+	gupnp_service_proxy_call_action_async(cb_data->proxy, cb_data->action,
+					      cb_data->cancellable,
+					      prv_search_cb, cb_data);
 
 	DLEYNA_LOG_DEBUG("Exit");
 }
@@ -3722,26 +3635,35 @@ static void prv_browse_objects_add_error_result(dls_async_browse_objects_t *bo,
 	g_variant_builder_add(bo->avb, "@a{sv}", gv_result);
 }
 
-static void prv_get_child_count_end_action_cb(GUPnPServiceProxy *proxy,
-					      GUPnPServiceProxyAction *action,
+static void prv_get_child_count_end_action_cb(GObject *source,
+					      GAsyncResult *res,
 					      gpointer user_data)
 {
-	GError *error = NULL;
-	const gchar *message;
+	g_autoptr(GError) error = NULL;
 	guint count = G_MAXUINT32;
-	gboolean end;
+	const char *message = NULL;
 	dls_async_browse_objects_t *cb_task_data;
-	dls_async_task_t *cb_data = user_data;
+	dls_async_task_t *cb_data = dleyna_gasync_task_get_user_data(user_data);
+	g_autoptr(GUPnPServiceProxyAction) action = NULL;
 
 	DLEYNA_LOG_DEBUG("Enter");
 
-	end = gupnp_service_proxy_end_action(proxy, action, &error,
-					     "TotalMatches", G_TYPE_UINT,
-					     &count, NULL);
+	action = gupnp_service_proxy_call_action_finish(
+		GUPNP_SERVICE_PROXY(source), res, &error);
 
-	cb_task_data = &((dls_async_task_t *)user_data)->ut.browse_objects;
+	if(g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+		return;
+	}
+
+	if (error == NULL) {
+		gupnp_service_proxy_action_get_result(action, &error,
+						      "TotalMatches", G_TYPE_UINT,
+						      &count, NULL);
+	}
+
+	cb_task_data = &(cb_data)->ut.browse_objects;
 
-	if (!end || (count == G_MAXUINT32)) {
+	if (error != NULL || count == G_MAXUINT32) {
 		message = (error != NULL) ? error->message : "Invalid result";
 		DLEYNA_LOG_WARNING("Browse operation failed: %s", message);
 
@@ -3777,34 +3699,29 @@ on_complete:
 	}
 
 	if (cb_task_data->index < cb_task_data->object_count)
-		dleyna_service_task_add(cb_task_data->queue_id,
-					prv_browse_objects_begin_action_cb,
-					proxy,
-					prv_browse_objects_end_action_cb,
-					NULL, user_data);
-
-	if (error)
-		g_error_free(error);
+		dleyna_gasync_task_add(
+			cb_task_data->queue_id,
+			prv_browse_objects_begin_action_cb, source,
+			dleyna_gasync_task_get_user_data(user_data), NULL,
+			cb_data);
 
 	DLEYNA_LOG_DEBUG("Exit");
 }
 
-static GUPnPServiceProxyAction *prv_get_child_count_begin_action_cb(
-						dleyna_service_task_t *task,
-						GUPnPServiceProxy *proxy,
-						gboolean *failed)
+static gboolean prv_get_child_count_begin_action_cb(dleyna_gasync_task_t *task,
+						    GObject *target)
 {
 	GUPnPServiceProxyAction *action;
 	dls_task_t *user_data;
 	const gchar *path;
-	gchar *root_path = NULL;
-	gchar *id = NULL;
+	g_autofree gchar *root_path = NULL;
+	g_autofree gchar *id = NULL;
 	dls_async_browse_objects_t *cb_task_data;
-	GError *error = NULL;
+	g_autoptr(GError) error = NULL;
 
 	DLEYNA_LOG_DEBUG("Enter");
 
-	user_data = (dls_task_t *)dleyna_service_task_get_user_data(task);
+	user_data = (dls_task_t *)dleyna_gasync_task_get_user_data(task);
 	cb_task_data = &((dls_async_task_t *)user_data)->ut.browse_objects;
 	path = cb_task_data->objects_id[cb_task_data->index - 1];
 
@@ -3814,9 +3731,7 @@ static GUPnPServiceProxyAction *prv_get_child_count_begin_action_cb(
 	if (error != NULL)
 		goto exit;
 
-	action =  gupnp_service_proxy_begin_action(
-			proxy, "Browse",
-			dleyna_service_task_begin_action_cb, task,
+	action = gupnp_service_proxy_action_new ("Browse",
 			"ObjectID", G_TYPE_STRING, id,
 			"BrowseFlag", G_TYPE_STRING, "BrowseDirectChildren",
 			"Filter", G_TYPE_STRING, "",
@@ -3825,12 +3740,12 @@ static GUPnPServiceProxyAction *prv_get_child_count_begin_action_cb(
 			"SortCriteria", G_TYPE_STRING, "",
 			NULL);
 
-	g_free(root_path);
-	g_free(id);
+	gupnp_service_proxy_call_action_async(
+		GUPNP_SERVICE_PROXY(target), action,
+		dleyna_gasync_task_get_cancellable(task),
+		prv_get_child_count_end_action_cb, task);
 
 exit:
-	*failed = FALSE;
-
 	if (error != NULL) {
 		DLEYNA_LOG_WARNING("%s: %s", path, error->message);
 		action = NULL;
@@ -3843,46 +3758,51 @@ exit:
 		}
 
 		if (cb_task_data->index < cb_task_data->object_count)
-			dleyna_service_task_add(
+			dleyna_gasync_task_add(
 					cb_task_data->queue_id,
 					prv_browse_objects_begin_action_cb,
-					proxy,
-					prv_browse_objects_end_action_cb,
+					target,
+					dleyna_gasync_task_get_cancellable(task),
 					NULL, user_data);
-		g_error_free(error);
 	}
 
-	return action;
+	return FALSE;
 }
 
-static void prv_browse_objects_end_action_cb(GUPnPServiceProxy *proxy,
-					     GUPnPServiceProxyAction *action,
+static void prv_browse_objects_end_action_cb(GObject *source,
+					     GAsyncResult *res,
 					     gpointer user_data)
 {
 	GError *error = NULL;
-	dls_async_task_t *cb_data = user_data;
+	dleyna_gasync_task_t *task = user_data;
+	dls_async_task_t *cb_data = dleyna_gasync_task_get_user_data(task);
 	dls_async_browse_objects_t *cb_task_data = &cb_data->ut.browse_objects;
 	dls_async_get_all_t *cb_all_data = &cb_data->ut.browse_objects.get_all;
 	GUPnPDIDLLiteParser *parser = NULL;
 	gchar *result = NULL;
-	const gchar *message;
-	gboolean end;
 
 	DLEYNA_LOG_DEBUG("Enter");
 
-	end = gupnp_service_proxy_end_action(proxy, action, &error,
-					     "Result", G_TYPE_STRING, &result,
-					     NULL);
+	g_autoptr(GUPnPServiceProxyAction) action;
 
-	if (!end || (result == NULL)) {
-		message = (error != NULL) ? error->message : "Invalid result";
+	action = gupnp_service_proxy_call_action_finish(
+		GUPNP_SERVICE_PROXY(source), res, &error);
+
+	if(g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+		return;
+	}
+
+	gupnp_service_proxy_action_get_result(action, &error, "Result",
+					      G_TYPE_STRING, &result, NULL);
+
+	if (error != NULL) {
 		DLEYNA_LOG_WARNING("Browse Object operation failed: %s",
-				   message);
+				   error->message);
 
 		cb_data->error = g_error_new(DLEYNA_SERVER_ERROR,
 					     DLEYNA_ERROR_OPERATION_FAILED,
 					     "Browse operation failed: %s",
-					     message);
+					     error->message);
 		goto on_exit;
 	}
 
@@ -3924,11 +3844,11 @@ static void prv_browse_objects_end_action_cb(GUPnPServiceProxy *proxy,
 	if (cb_all_data->need_child_count &&
 	    (cb_all_data->filter_mask & DLS_UPNP_MASK_PROP_CHILD_COUNT)) {
 		DLEYNA_LOG_DEBUG("Need Child Count");
-		dleyna_service_task_add(cb_task_data->queue_id,
-					prv_get_child_count_begin_action_cb,
-					cb_data->proxy,
-					prv_get_child_count_end_action_cb,
-					NULL, cb_data);
+		dleyna_gasync_task_add(cb_task_data->queue_id,
+				       prv_get_child_count_begin_action_cb,
+				       G_OBJECT(cb_data->proxy),
+				       dleyna_gasync_task_get_cancellable(task),
+				       NULL, cb_data);
 		goto no_complete;
 	}
 
@@ -3938,7 +3858,7 @@ static void prv_browse_objects_end_action_cb(GUPnPServiceProxy *proxy,
 on_exit:
 
 	if (cb_data->error != NULL) {
-		message = cb_task_data->objects_id[cb_task_data->index - 1];
+		const char *message = cb_task_data->objects_id[cb_task_data->index - 1];
 		prv_browse_objects_add_error_result(cb_task_data, message,
 						    cb_data->error);
 		g_error_free(cb_data->error);
@@ -3951,11 +3871,11 @@ on_exit:
 	}
 
 	if (cb_task_data->index < cb_task_data->object_count)
-		dleyna_service_task_add(cb_task_data->queue_id,
-					prv_browse_objects_begin_action_cb,
-					cb_data->proxy,
-					prv_browse_objects_end_action_cb,
-					NULL, cb_data);
+		dleyna_gasync_task_add(cb_task_data->queue_id,
+				       prv_browse_objects_begin_action_cb,
+				       G_OBJECT(cb_data->proxy),
+				       dleyna_gasync_task_get_cancellable(task),
+				       NULL, cb_data);
 no_complete:
 
 	if (parser)
@@ -3969,10 +3889,8 @@ no_complete:
 	DLEYNA_LOG_DEBUG("Exit");
 }
 
-static GUPnPServiceProxyAction *prv_browse_objects_begin_action_cb(
-						dleyna_service_task_t *task,
-						GUPnPServiceProxy *proxy,
-						gboolean *failed)
+static gboolean prv_browse_objects_begin_action_cb(dleyna_gasync_task_t *task,
+						   GObject *target)
 {
 	GUPnPServiceProxyAction *action;
 	dls_task_t *user_data;
@@ -3984,7 +3902,7 @@ static GUPnPServiceProxyAction *prv_browse_objects_begin_action_cb(
 
 	DLEYNA_LOG_DEBUG("Enter called");
 
-	user_data = (dls_task_t *)dleyna_service_task_get_user_data(task);
+	user_data = (dls_task_t *)dleyna_gasync_task_get_user_data(task);
 	cb_task_data = &((dls_async_task_t *)user_data)->ut.browse_objects;
 	path = cb_task_data->objects_id[cb_task_data->index];
 
@@ -3999,22 +3917,22 @@ static GUPnPServiceProxyAction *prv_browse_objects_begin_action_cb(
 
 	DLEYNA_LOG_DEBUG("Browse Metadata for path [id]: %s [%s]", path, id);
 
-	action = gupnp_service_proxy_begin_action(
-			proxy, "Browse",
-			dleyna_service_task_begin_action_cb, task,
-			"ObjectID", G_TYPE_STRING, id,
-			"BrowseFlag", G_TYPE_STRING, "BrowseMetadata",
-			"Filter", G_TYPE_STRING, cb_task_data->upnp_filter,
-			"StartingIndex", G_TYPE_INT, 0,
-			"RequestedCount", G_TYPE_INT, 0,
-			"SortCriteria", G_TYPE_STRING, "", NULL);
+	action = gupnp_service_proxy_action_new(
+		"Browse", "ObjectID", G_TYPE_STRING, id, "BrowseFlag",
+		G_TYPE_STRING, "BrowseMetadata", "Filter", G_TYPE_STRING,
+		cb_task_data->upnp_filter, "StartingIndex", G_TYPE_INT, 0,
+		"RequestedCount", G_TYPE_INT, 0, "SortCriteria", G_TYPE_STRING,
+		"", NULL);
+
+	gupnp_service_proxy_call_action_async(
+		GUPNP_SERVICE_PROXY(target), action,
+		dleyna_gasync_task_get_cancellable(task),
+		prv_browse_objects_end_action_cb, task);
 
 	g_free(root_path);
 	g_free(id);
 
 exit:
-	*failed = FALSE;
-
 	/* It's the ONLY place where index is incremented */
 	cb_task_data->index++;
 
@@ -4026,28 +3944,14 @@ exit:
 		g_error_free(error);
 
 		if (cb_task_data->index < cb_task_data->object_count)
-			dleyna_service_task_add(
-					cb_task_data->queue_id,
-					prv_browse_objects_begin_action_cb,
-					proxy,
-					prv_browse_objects_end_action_cb,
-					NULL, user_data);
+			dleyna_gasync_task_add(
+				cb_task_data->queue_id,
+				prv_browse_objects_begin_action_cb, target,
+				dleyna_gasync_task_get_cancellable(task), NULL,
+				user_data);
 	}
 
-	return action;
-}
-
-static void prv_browse_objects_chain_cancelled(GCancellable *cancellable,
-					       gpointer user_data)
-{
-	dls_async_task_t *cb_data = user_data;
-
-	DLEYNA_LOG_DEBUG("Enter");
-
-	dleyna_task_processor_cancel_queue(cb_data->ut.browse_objects.queue_id);
-	dls_async_task_cancelled_cb(cancellable, user_data);
-
-	DLEYNA_LOG_DEBUG("Exit");
+	return FALSE;
 }
 
 static void prv_browse_objects_chain_end(gboolean cancelled, gpointer data)
@@ -4108,12 +4012,12 @@ void dls_device_browse_objects(dls_client_t *client, dls_task_t *task)
 
 	queue_id = dleyna_task_processor_add_queue(
 			dls_server_get_task_processor(),
-			dleyna_service_task_create_source(),
+			dleyna_gasync_task_create_source(),
 			DLS_SERVER_SINK,
 			DLEYNA_TASK_QUEUE_FLAG_AUTO_REMOVE,
-			dleyna_service_task_process_cb,
-			dleyna_service_task_cancel_cb,
-			dleyna_service_task_delete_cb);
+			dleyna_gasync_task_process_cb,
+			dleyna_gasync_task_cancel_cb,
+			dleyna_gasync_task_delete_cb);
 
 	dleyna_task_queue_set_finally(queue_id, prv_browse_objects_chain_end);
 	dleyna_task_queue_set_user_data(queue_id, task);
@@ -4130,16 +4034,9 @@ void dls_device_browse_objects(dls_client_t *client, dls_task_t *task)
 	g_object_add_weak_pointer((G_OBJECT(context->cds.proxy)),
 				  (gpointer *)&cb_data->proxy);
 
-	cb_data->cancel_id = g_cancellable_connect(
-				cb_data->cancellable,
-				G_CALLBACK(prv_browse_objects_chain_cancelled),
-				cb_data, NULL);
-
-	dleyna_service_task_add(queue_id,
-				prv_browse_objects_begin_action_cb,
-				cb_data->proxy,
-				prv_browse_objects_end_action_cb,
-				NULL, cb_data);
+	dleyna_gasync_task_add(queue_id, prv_browse_objects_begin_action_cb,
+			       G_OBJECT(cb_data->proxy), cb_data->cancellable, NULL,
+			       cb_data);
 
 	dleyna_task_queue_start(queue_id);
 
@@ -4170,21 +4067,15 @@ void dls_device_get_resource(dls_client_t *client,
 	g_object_add_weak_pointer((G_OBJECT(context->cds.proxy)),
 				  (gpointer *)&cb_data->proxy);
 
-	cb_data->action = gupnp_service_proxy_begin_action(
-				cb_data->proxy, "Browse",
-				prv_get_all_ms2spec_props_cb, cb_data,
-				"ObjectID", G_TYPE_STRING, task->target.id,
-				"BrowseFlag", G_TYPE_STRING, "BrowseMetadata",
-				"Filter", G_TYPE_STRING, upnp_filter,
-				"StartingIndex", G_TYPE_INT, 0,
-				"RequestedCount", G_TYPE_INT, 0,
-				"SortCriteria", G_TYPE_STRING,
-				"", NULL);
-
-	cb_data->cancel_id = g_cancellable_connect(
-					cb_data->cancellable,
-					G_CALLBACK(dls_async_task_cancelled_cb),
-					cb_data, NULL);
+	cb_data->action = gupnp_service_proxy_action_new(
+		"Browse", "ObjectID", G_TYPE_STRING, task->target.id,
+		"BrowseFlag", G_TYPE_STRING, "BrowseMetadata", "Filter",
+		G_TYPE_STRING, upnp_filter, "StartingIndex", G_TYPE_INT, 0,
+		"RequestedCount", G_TYPE_INT, 0, "SortCriteria", G_TYPE_STRING,
+		"", NULL);
+	gupnp_service_proxy_call_action_async(
+		cb_data->proxy, cb_data->action, cb_data->cancellable,
+		prv_get_all_ms2spec_props_cb, cb_data);
 
 	DLEYNA_LOG_DEBUG("Exit");
 }
@@ -4373,18 +4264,15 @@ static void prv_extract_import_uri(GUPnPDIDLLiteParser *parser,
 	}
 }
 
-static void prv_upload_delete_cb(GUPnPServiceProxy *proxy,
-				 GUPnPServiceProxyAction *action,
-				 gpointer user_data)
+static void prv_upload_delete_cb(GObject *source, GAsyncResult *res, gpointer user_data)
 {
 	dls_async_task_t *cb_data = user_data;
 
 	DLEYNA_LOG_DEBUG("Enter");
 
-	(void) gupnp_service_proxy_end_action(cb_data->proxy, cb_data->action,
-					      NULL, NULL);
+	gupnp_service_proxy_call_action_finish(cb_data->proxy, res, NULL);
+
 	(void) g_idle_add(dls_async_task_complete, cb_data);
-	g_cancellable_disconnect(cb_data->cancellable, cb_data->cancel_id);
 
 	DLEYNA_LOG_DEBUG("Exit");
 }
@@ -4481,7 +4369,7 @@ static void prv_post_finished(SoupSession *session, SoupMessage *msg,
 				     &upload_job->upload_id);
 	if (upload) {
 		upload_job->remove_idle =
-			g_timeout_add(30000, prv_remove_update_job, user_data);
+			g_timeout_add_seconds(30, prv_remove_update_job, user_data);
 
 		if (SOUP_STATUS_IS_SUCCESSFUL(msg->status_code)) {
 			upload->status = DLS_UPLOAD_STATUS_COMPLETED;
@@ -4634,35 +4522,36 @@ on_error:
 	return NULL;
 }
 
-static void prv_create_container_cb(GUPnPServiceProxy *proxy,
-		 GUPnPServiceProxyAction *action,
-		 gpointer user_data)
+static void prv_create_container_cb(GObject *source, GAsyncResult *res, gpointer user_data)
 {
 	dls_async_task_t *cb_data = user_data;
-	const gchar *message;
-	GError *error = NULL;
-	gchar *result = NULL;
-	gchar *object_id = NULL;
-	gchar *object_path;
-	gboolean end;
+	g_autoptr(GError) error = NULL;
+	g_autofree gchar *result = NULL;
+	g_autofree gchar *object_id = NULL;
+	g_autofree gchar *object_path = NULL;
+	g_autoptr(GUPnPServiceProxyAction) action = NULL;
 
 	DLEYNA_LOG_DEBUG("Enter");
 
-	end = gupnp_service_proxy_end_action(cb_data->proxy, cb_data->action,
-					     &error, "ObjectID",
-					     G_TYPE_STRING, &object_id,
-					     "Result", G_TYPE_STRING, &result,
-					     NULL);
+	action = gupnp_service_proxy_call_action_finish(cb_data->proxy, res,
+							&error);
 
-	if (!end || (object_id == NULL)) {
-		message = (error != NULL) ? error->message : "Invalid result";
-		DLEYNA_LOG_WARNING("Create Object operation failed: %s",
-				   message);
+	if(g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+		return;
+	}
 
-		cb_data->error = g_error_new(DLEYNA_SERVER_ERROR,
-					     DLEYNA_ERROR_OPERATION_FAILED,
-					     "Create Object operation failed: %s",
-					     message);
+	if(error == NULL) {
+		gupnp_service_proxy_action_get_result(
+			action, &error, "ObjectID", G_TYPE_STRING, &object_id,
+			"Result", G_TYPE_STRING, &result, NULL);
+	}
+
+	if(error != NULL) {
+		DLEYNA_LOG_WARNING("Create Object operation failed: %s", error->message);
+
+		cb_data->error = g_error_new(
+			DLEYNA_SERVER_ERROR, DLEYNA_ERROR_OPERATION_FAILED,
+			"Create Object operation failed: %s", error->message);
 		goto on_error;
 	}
 
@@ -4670,59 +4559,56 @@ static void prv_create_container_cb(GUPnPServiceProxy *proxy,
 				       object_id);
 	cb_data->task.result = g_variant_ref_sink(g_variant_new_object_path(
 								object_path));
-	g_free(object_path);
-
 on_error:
-
 	(void) g_idle_add(dls_async_task_complete, cb_data);
-	g_cancellable_disconnect(cb_data->cancellable, cb_data->cancel_id);
-
-	g_free(object_id);
-	g_free(result);
-
-	if (error)
-		g_error_free(error);
 
 	DLEYNA_LOG_DEBUG("Exit");
 }
 
-static void prv_generic_upload_cb(dls_async_task_t *cb_data,
-				  char *file_path,
-				  gchar *body,
-				  gsize body_length,
-				  const gchar *mime_type)
+static void prv_create_object_upload_cb(GObject *source, GAsyncResult *res,
+					gpointer user_data)
 {
-	gchar *object_id = NULL;
-	gchar *result = NULL;
+	dls_async_task_t *cb_data = user_data;
+	char *file_path = cb_data->task.ut.upload.file_path;
+	gchar *body = NULL;
+	gsize body_length = 0;
+	const gchar *mime_type = cb_data->ut.upload.mime_type;
+
 	gchar *import_uri = NULL;
-	gchar *object_path;
-	const gchar *message;
-	GError *error = NULL;
 	gboolean delete_needed = FALSE;
-	gboolean end;
 	gint *upload_id;
-	GUPnPDIDLLiteParser *parser = NULL;
+	g_autoptr(GUPnPDIDLLiteParser) parser = NULL;
 	GVariant *out_p[2];
 	dls_device_upload_t *upload;
 	dls_device_upload_job_t *upload_job;
+	g_autoptr(GError) error = NULL;
+	g_autofree gchar *result = NULL;
+	g_autofree gchar *object_id = NULL;
+	g_autofree gchar *object_path = NULL;
+	g_autoptr(GUPnPServiceProxyAction) action = NULL;
 
 	DLEYNA_LOG_DEBUG("Enter");
 
-	end = gupnp_service_proxy_end_action(cb_data->proxy, cb_data->action,
-					     &error, "ObjectID",
-					     G_TYPE_STRING, &object_id,
-					     "Result", G_TYPE_STRING, &result,
-					     NULL);
+	action = gupnp_service_proxy_call_action_finish(cb_data->proxy, res,
+							&error);
+	if(g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+		return;
+	}
 
-	if (!end || (object_id == NULL) || (result == NULL)) {
-		message = (error != NULL) ? error->message : "Invalid result";
+	if(error == NULL) {
+		gupnp_service_proxy_action_get_result(
+			action, &error, "ObjectID", G_TYPE_STRING, &object_id,
+			"Result", G_TYPE_STRING, &result, NULL);
+	}
+
+	if(error != NULL) {
 		DLEYNA_LOG_WARNING("Create Object operation failed: %s",
-				   message);
+				   error->message);
+
+		cb_data->error = g_error_new(
+			DLEYNA_SERVER_ERROR, DLEYNA_ERROR_OPERATION_FAILED,
+			"Create Object operation failed: %s", error->message);
 
-		cb_data->error = g_error_new(DLEYNA_SERVER_ERROR,
-					     DLEYNA_ERROR_OPERATION_FAILED,
-					     "Create Object operation failed: %s",
-					     message);
 		goto on_error;
 	}
 
@@ -4796,8 +4682,6 @@ static void prv_generic_upload_cb(dls_async_task_t *cb_data,
 	if (cb_data->task.target.device->upload_id > G_MAXINT)
 		cb_data->task.target.device->upload_id = 0;
 
-	g_free(object_path);
-
 on_error:
 
 	if (cb_data->error && delete_needed) {
@@ -4805,49 +4689,28 @@ on_error:
 			"Upload failed deleting created object with id %s",
 			object_id);
 
-		cb_data->action = gupnp_service_proxy_begin_action(
-					cb_data->proxy, "DestroyObject",
-					prv_upload_delete_cb, cb_data,
-					"ObjectID", G_TYPE_STRING, object_id,
-					NULL);
+		cb_data->action = gupnp_service_proxy_action_new(
+			"DestroyObject", "ObjectID", G_TYPE_STRING, object_id,
+			NULL);
+		gupnp_service_proxy_call_action_async(
+			cb_data->proxy, cb_data->action, cb_data->cancellable,
+			prv_upload_delete_cb, cb_data);
+
+		// Fire and forget operation, we unref the action here.
+		gupnp_service_proxy_action_unref (cb_data->action);
 	} else {
 		(void) g_idle_add(dls_async_task_complete, cb_data);
-		g_cancellable_disconnect(cb_data->cancellable,
-					 cb_data->cancel_id);
 	}
 
-	g_free(object_id);
-	g_free(import_uri);
-
-	if (parser)
-		g_object_unref(parser);
-
-	g_free(result);
-
-	if (error)
-		g_error_free(error);
-
 	DLEYNA_LOG_DEBUG("Exit");
 }
 
-static void prv_create_object_upload_cb(GUPnPServiceProxy *proxy,
-					GUPnPServiceProxyAction *action,
-					gpointer user_data)
-{
-	dls_async_task_t *cb_data = user_data;
-
-	prv_generic_upload_cb(cb_data,
-			      cb_data->task.ut.upload.file_path,
-			      NULL, 0,
-			      cb_data->ut.upload.mime_type);
-}
-
 void dls_device_upload(dls_client_t *client,
 		       dls_task_t *task, const gchar *parent_id)
 {
 	dls_async_task_t *cb_data = (dls_async_task_t *)task;
 	dls_device_context_t *context;
-	gchar *didl;
+	g_autofree gchar *didl;
 	dls_async_upload_t *cb_task_data;
 
 	DLEYNA_LOG_DEBUG("Enter");
@@ -4869,19 +4732,13 @@ void dls_device_upload(dls_client_t *client,
 	g_object_add_weak_pointer((G_OBJECT(context->cds.proxy)),
 				  (gpointer *)&cb_data->proxy);
 
-	cb_data->action = gupnp_service_proxy_begin_action(
-					cb_data->proxy, "CreateObject",
-					prv_create_object_upload_cb, cb_data,
-					"ContainerID", G_TYPE_STRING, parent_id,
-					"Elements", G_TYPE_STRING, didl,
-					NULL);
-
-	cb_data->cancel_id = g_cancellable_connect(
-					cb_data->cancellable,
-					G_CALLBACK(dls_async_task_cancelled_cb),
-					cb_data, NULL);
+	cb_data->action = gupnp_service_proxy_action_new(
+		"CreateObject", "ContainerID", G_TYPE_STRING, parent_id,
+		"Elements", G_TYPE_STRING, didl, NULL);
 
-	g_free(didl);
+	gupnp_service_proxy_call_action_async(
+		cb_data->proxy, cb_data->action, cb_data->cancellable,
+		prv_create_object_upload_cb, cb_data);
 
 	DLEYNA_LOG_DEBUG("Exit");
 }
@@ -4977,32 +4834,37 @@ on_error:
 	return retval;
 }
 
-static void prv_destroy_object_cb(GUPnPServiceProxy *proxy,
-				  GUPnPServiceProxyAction *action,
-				  gpointer user_data)
+static void prv_destroy_object_cb(GObject *source, GAsyncResult *res, gpointer user_data)
 {
-	GError *upnp_error = NULL;
+	g_autoptr(GError) upnp_error = NULL;
 	dls_async_task_t *cb_data = user_data;
+	g_autoptr(GUPnPServiceProxyAction) action = NULL;
 
 	DLEYNA_LOG_DEBUG("Enter");
 
-	if (!gupnp_service_proxy_end_action(cb_data->proxy, cb_data->action,
-					    &upnp_error,
-					    NULL)) {
-		DLEYNA_LOG_WARNING("Destroy Object operation failed: %s",
+	action = gupnp_service_proxy_call_action_finish(cb_data->proxy, res,
+							&upnp_error);
+
+	if(g_error_matches(upnp_error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+		return;
+	}
+
+	if(upnp_error == NULL) {
+		gupnp_service_proxy_action_get_result(action, &upnp_error,
+						      NULL);
+	}
+
+	if(upnp_error != NULL) {
+		DLEYNA_LOG_WARNING("Create Object operation failed: %s",
 				   upnp_error->message);
 
-		cb_data->error = g_error_new(DLEYNA_SERVER_ERROR,
-					     DLEYNA_ERROR_OPERATION_FAILED,
-					     "Destroy Object operation failed: %s",
-					     upnp_error->message);
+		cb_data->error = g_error_new(
+			DLEYNA_SERVER_ERROR, DLEYNA_ERROR_OPERATION_FAILED,
+			"Create Object operation failed: %s",
+			upnp_error->message);
 	}
 
 	(void) g_idle_add(dls_async_task_complete, cb_data);
-	g_cancellable_disconnect(cb_data->cancellable, cb_data->cancel_id);
-
-	if (upnp_error)
-		g_error_free(upnp_error);
 
 	DLEYNA_LOG_DEBUG("Exit");
 }
@@ -5022,15 +4884,12 @@ void dls_device_delete_object(dls_client_t *client,
 	g_object_add_weak_pointer((G_OBJECT(context->cds.proxy)),
 				  (gpointer *)&cb_data->proxy);
 
-	cb_data->action = gupnp_service_proxy_begin_action(
-				cb_data->proxy, "DestroyObject",
-				prv_destroy_object_cb, cb_data,
-				"ObjectID", G_TYPE_STRING, task->target.id,
-				NULL);
-
-	cb_data->cancel_id = g_cancellable_connect(cb_data->cancellable,
-					G_CALLBACK(dls_async_task_cancelled_cb),
-					cb_data, NULL);
+	cb_data->action = gupnp_service_proxy_action_new(
+		"DestroyObject", "ObjectID", G_TYPE_STRING, task->target.id,
+		NULL);
+	gupnp_service_proxy_call_action_async(cb_data->proxy, cb_data->action,
+					      cb_data->cancellable,
+					      prv_destroy_object_cb, cb_data);
 
 	DLEYNA_LOG_DEBUG("Exit");
 }
@@ -5041,7 +4900,7 @@ void dls_device_create_container(dls_client_t *client,
 {
 	dls_async_task_t *cb_data = (dls_async_task_t *)task;
 	dls_device_context_t *context;
-	gchar *didl;
+	g_autofree gchar *didl = NULL;
 
 	DLEYNA_LOG_DEBUG("Enter");
 
@@ -5064,19 +4923,13 @@ void dls_device_create_container(dls_client_t *client,
 	g_object_add_weak_pointer((G_OBJECT(context->cds.proxy)),
 				  (gpointer *)&cb_data->proxy);
 
-	cb_data->action = gupnp_service_proxy_begin_action(
-					cb_data->proxy, "CreateObject",
-					prv_create_container_cb, cb_data,
-					"ContainerID", G_TYPE_STRING, parent_id,
-					"Elements", G_TYPE_STRING, didl,
-					NULL);
+	cb_data->action = gupnp_service_proxy_action_new(
+		"CreateObject", "ContainerID", G_TYPE_STRING, parent_id,
+		"Elements", G_TYPE_STRING, didl, NULL);
 
-	cb_data->cancel_id = g_cancellable_connect(
-					cb_data->cancellable,
-					G_CALLBACK(dls_async_task_cancelled_cb),
-					cb_data, NULL);
-
-	g_free(didl);
+	gupnp_service_proxy_call_action_async(cb_data->proxy, cb_data->action,
+					      cb_data->cancellable,
+					      prv_create_container_cb, cb_data);
 
 on_error:
 
@@ -5085,33 +4938,36 @@ on_error:
 	return;
 }
 
-static void prv_update_object_update_cb(GUPnPServiceProxy *proxy,
-					GUPnPServiceProxyAction *action,
-					gpointer user_data)
+static void prv_update_object_update_cb(GObject *source, GAsyncResult *res, gpointer user_data)
 {
-	GError *upnp_error = NULL;
+	g_autoptr(GError) upnp_error = NULL;
 	dls_async_task_t *cb_data = user_data;
+	g_autoptr(GUPnPServiceProxyAction) action = NULL;
 
 	DLEYNA_LOG_DEBUG("Enter");
 
-	if (!gupnp_service_proxy_end_action(cb_data->proxy, cb_data->action,
-					    &upnp_error,
-					    NULL)) {
+	action = gupnp_service_proxy_call_action_finish(cb_data->proxy, res,
+							&upnp_error);
+	if(g_error_matches(upnp_error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+		return;
+	}
+
+	if(upnp_error == NULL) {
+		gupnp_service_proxy_action_get_result(action, &upnp_error,
+						      NULL);
+	}
+
+	if(upnp_error != NULL) {
 		DLEYNA_LOG_WARNING("Update Object operation failed: %s",
 				   upnp_error->message);
 
-		cb_data->error = g_error_new(DLEYNA_SERVER_ERROR,
-					     DLEYNA_ERROR_OPERATION_FAILED,
-					     "Update Object operation "
-					     " failed: %s",
-					     upnp_error->message);
+		cb_data->error = g_error_new(
+			DLEYNA_SERVER_ERROR, DLEYNA_ERROR_OPERATION_FAILED,
+			"Update Object operation failed: %s",
+			upnp_error->message);
 	}
 
 	(void) g_idle_add(dls_async_task_complete, cb_data);
-	g_cancellable_disconnect(cb_data->cancellable, cb_data->cancel_id);
-
-	if (upnp_error)
-		g_error_free(upnp_error);
 
 	DLEYNA_LOG_DEBUG("Exit");
 }
@@ -5305,34 +5161,36 @@ static void prv_get_xml_fragments(GUPnPDIDLLiteParser *parser,
 	DLEYNA_LOG_DEBUG("Exit");
 }
 
-static void prv_update_object_browse_cb(GUPnPServiceProxy *proxy,
-					GUPnPServiceProxyAction *action,
-					gpointer user_data)
+static void prv_update_object_browse_cb(GObject *source, GAsyncResult *res, gpointer user_data)
 {
-	GError *error = NULL;
+	g_autoptr(GError) error = NULL;
 	dls_async_task_t *cb_data = user_data;
 	dls_async_update_t *cb_task_data = &cb_data->ut.update;
-	GUPnPDIDLLiteParser *parser = NULL;
-	gchar *result = NULL;
-	const gchar *message;
-	gboolean end;
+	g_autoptr(GUPnPDIDLLiteParser) parser = NULL;
+	g_autofree gchar *result = NULL;
+	g_autoptr(GUPnPServiceProxyAction) action = NULL;
 
 	DLEYNA_LOG_DEBUG("Enter");
 
-	end = gupnp_service_proxy_end_action(cb_data->proxy, cb_data->action,
-					     &error,
-					     "Result", G_TYPE_STRING, &result,
-					     NULL);
+	action = gupnp_service_proxy_call_action_finish(cb_data->proxy, res,
+							&error);
+	if(g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+		return;
+	}
 
-	if (!end || (result == NULL)) {
-		message = (error != NULL) ? error->message : "Invalid result";
-		DLEYNA_LOG_WARNING("Browse Object operation failed: %s",
-				   message);
+	if(error == NULL) {
+		gupnp_service_proxy_action_get_result(
+			action, &error, "Result", G_TYPE_STRING, &result, NULL);
+	}
+
+	if(error != NULL) {
+		DLEYNA_LOG_WARNING("Browse operation failed: %s",
+				   error->message);
+
+		cb_data->error = g_error_new(
+			DLEYNA_SERVER_ERROR, DLEYNA_ERROR_OPERATION_FAILED,
+			"Browse operation failed: %s", error->message);
 
-		cb_data->error = g_error_new(DLEYNA_SERVER_ERROR,
-					     DLEYNA_ERROR_OPERATION_FAILED,
-					     "Browse operation failed: %s",
-					     message);
 		goto on_error;
 	}
 
@@ -5367,32 +5225,24 @@ static void prv_update_object_browse_cb(GUPnPServiceProxy *proxy,
 		goto on_error;
 	}
 
-	cb_data->action = gupnp_service_proxy_begin_action(
-		cb_data->proxy, "UpdateObject",
-		prv_update_object_update_cb, cb_data,
-		"ObjectID", G_TYPE_STRING, cb_data->task.target.id,
-		"CurrentTagValue", G_TYPE_STRING,
-		cb_task_data->current_tag_value,
-		"NewTagValue", G_TYPE_STRING, cb_task_data->new_tag_value,
-		NULL);
+	cb_data->action = gupnp_service_proxy_action_new(
+		"UpdateObject", "ObjectID", G_TYPE_STRING,
+		cb_data->task.target.id, "CurrentTagValue", G_TYPE_STRING,
+		cb_task_data->current_tag_value, "NewTagValue", G_TYPE_STRING,
+		cb_task_data->new_tag_value, NULL);
+
+	gupnp_service_proxy_call_action_async(
+		cb_data->proxy, cb_data->action, cb_data->cancellable,
+		prv_update_object_update_cb, cb_data);
 
 	goto no_complete;
 
 on_error:
 
 	(void) g_idle_add(dls_async_task_complete, cb_data);
-	g_cancellable_disconnect(cb_data->cancellable, cb_data->cancel_id);
 
 no_complete:
 
-	if (parser)
-		g_object_unref(parser);
-
-	g_free(result);
-
-	if (error)
-		g_error_free(error);
-
 	DLEYNA_LOG_DEBUG("Exit");
 }
 
@@ -5412,50 +5262,48 @@ void dls_device_update_object(dls_client_t *client,
 	g_object_add_weak_pointer((G_OBJECT(context->cds.proxy)),
 				  (gpointer *)&cb_data->proxy);
 
-	cb_data->action = gupnp_service_proxy_begin_action(
-				cb_data->proxy, "Browse",
-				prv_update_object_browse_cb, cb_data,
-				"ObjectID", G_TYPE_STRING, task->target.id,
-				"BrowseFlag", G_TYPE_STRING, "BrowseMetadata",
-				"Filter", G_TYPE_STRING, upnp_filter,
-				"StartingIndex", G_TYPE_INT, 0,
-				"RequestedCount", G_TYPE_INT, 0,
-				"SortCriteria", G_TYPE_STRING,
-				"", NULL);
-
-	cb_data->cancel_id = g_cancellable_connect(cb_data->cancellable,
-					G_CALLBACK(dls_async_task_cancelled_cb),
-					cb_data, NULL);
+
+	cb_data->action = gupnp_service_proxy_action_new(
+		"Browse", "ObjectID", G_TYPE_STRING, task->target.id,
+		"BrowseFlag", G_TYPE_STRING, "BrowseMetadata", "Filter",
+		G_TYPE_STRING, upnp_filter, "StartingIndex", G_TYPE_INT, 0,
+		"RequestedCount", G_TYPE_INT, 0, "SortCriteria", G_TYPE_STRING,
+		"", NULL);
+
+	gupnp_service_proxy_call_action_async(
+		cb_data->proxy, cb_data->action, cb_data->cancellable,
+		prv_update_object_browse_cb, cb_data);
 
 	DLEYNA_LOG_DEBUG("Exit");
 }
 
-static void prv_get_object_metadata_cb(GUPnPServiceProxy *proxy,
-				       GUPnPServiceProxyAction *action,
-				       gpointer user_data)
+static void prv_get_object_metadata_cb(GObject *source, GAsyncResult *res, gpointer user_data)
 {
-	GError *error = NULL;
+	g_autoptr(GError) error = NULL;
 	dls_async_task_t *cb_data = user_data;
-	gchar *result = NULL;
-	const gchar *message;
-	gboolean end;
+	g_autofree gchar *result = NULL;
+	g_autoptr(GUPnPServiceProxyAction) action;
 
 	DLEYNA_LOG_DEBUG("Enter");
 
-	end = gupnp_service_proxy_end_action(cb_data->proxy, cb_data->action,
-					     &error,
-					     "Result", G_TYPE_STRING, &result,
-					     NULL);
+	action = gupnp_service_proxy_call_action_finish(cb_data->proxy, res,
+							&error);
+	if(g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+		return;
+	}
 
-	if (!end || (result == NULL)) {
-		message = (error != NULL) ? error->message : "Invalid result";
-		DLEYNA_LOG_WARNING("Browse Object operation failed: %s",
-				   message);
+	if(error == NULL) {
+		gupnp_service_proxy_action_get_result(
+			action, &error, "Result", G_TYPE_STRING, &result, NULL);
+	}
 
-		cb_data->error = g_error_new(DLEYNA_SERVER_ERROR,
-					     DLEYNA_ERROR_OPERATION_FAILED,
-					     "Browse operation failed: %s",
-					     message);
+	if(error != NULL) {
+		DLEYNA_LOG_WARNING("Browse operation failed: %s",
+				   error->message);
+
+		cb_data->error = g_error_new(
+			DLEYNA_SERVER_ERROR, DLEYNA_ERROR_OPERATION_FAILED,
+			"Browse operation failed: %s", error->message);
 		goto on_complete;
 	}
 
@@ -5463,15 +5311,9 @@ static void prv_get_object_metadata_cb(GUPnPServiceProxy *proxy,
 
 	DLEYNA_LOG_DEBUG("prv_get_object_metadata_cb result: %s", result);
 
-	g_free(result);
-
 on_complete:
 
 	(void) g_idle_add(dls_async_task_complete, cb_data);
-	g_cancellable_disconnect(cb_data->cancellable, cb_data->cancel_id);
-
-	if (error)
-		g_error_free(error);
 
 	DLEYNA_LOG_DEBUG("Exit");
 }
@@ -5492,52 +5334,50 @@ void dls_device_get_object_metadata(dls_client_t *client,
 	g_object_add_weak_pointer((G_OBJECT(context->cds.proxy)),
 				  (gpointer *)&cb_data->proxy);
 
-	cb_data->action = gupnp_service_proxy_begin_action(
-				cb_data->proxy, "Browse",
-				prv_get_object_metadata_cb, cb_data,
-				"ObjectID", G_TYPE_STRING, task->target.id,
-				"BrowseFlag", G_TYPE_STRING, "BrowseMetadata",
-				"Filter", G_TYPE_STRING, "*",
-				"StartingIndex", G_TYPE_INT, 0,
-				"RequestedCount", G_TYPE_INT, 0,
-				"SortCriteria", G_TYPE_STRING, "",
-				NULL);
+	cb_data->action = gupnp_service_proxy_action_new(
+		"Browse", "ObjectID", G_TYPE_STRING, task->target.id,
+		"BrowseFlag", G_TYPE_STRING, "BrowseMetadata", "Filter",
+		G_TYPE_STRING, "*", "StartingIndex", G_TYPE_INT, 0,
+		"RequestedCount", G_TYPE_INT, 0, "SortCriteria", G_TYPE_STRING,
+		"", NULL);
+
+	gupnp_service_proxy_call_action_async(
+		cb_data->proxy, cb_data->action, cb_data->cancellable,
+		prv_get_object_metadata_cb, cb_data);
 
-	cb_data->cancel_id = g_cancellable_connect(cb_data->cancellable,
-					G_CALLBACK(dls_async_task_cancelled_cb),
-					cb_data, NULL);
 
 	DLEYNA_LOG_DEBUG("Exit");
 }
 
-static void prv_create_reference_cb(GUPnPServiceProxy *proxy,
-				    GUPnPServiceProxyAction *action,
-				    gpointer user_data)
+static void prv_create_reference_cb(GObject *source, GAsyncResult *res, gpointer user_data)
 {
-	GError *error = NULL;
+	g_autoptr(GError) error = NULL;
 	dls_async_task_t *cb_data = user_data;
-	const gchar *message;
-	gchar *object_id = NULL;
-	gchar *object_path;
-	gboolean end;
+	g_autofree gchar *object_id = NULL;
+	g_autofree gchar *object_path = NULL;
+	g_autoptr(GUPnPServiceProxyAction) action;
 
 	DLEYNA_LOG_DEBUG("Enter");
 
-	end = gupnp_service_proxy_end_action(cb_data->proxy, cb_data->action,
-					    &error,
-					    "NewID", G_TYPE_STRING, &object_id,
-					    NULL);
-	if (!end || (object_id == NULL)) {
-		message = (error != NULL) ? error->message : "Invalid result";
-		DLEYNA_LOG_WARNING("CreateReference operation failed: %s",
-				   message);
+	action = gupnp_service_proxy_call_action_finish(cb_data->proxy, res,
+							&error);
+	if(g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+		return;
+	}
 
-		cb_data->error = g_error_new(DLEYNA_SERVER_ERROR,
-					     DLEYNA_ERROR_OPERATION_FAILED,
-					     "Update Object operation "
-					     " failed: %s",
-					     message);
+	if(error == NULL) {
+		gupnp_service_proxy_action_get_result(action, &error, "NewID",
+						      G_TYPE_STRING, &object_id,
+						      NULL);
+	}
+
+	if(error != NULL) {
+		DLEYNA_LOG_WARNING("CreateReference operation failed: %s",
+				   error->message);
 
+		cb_data->error = g_error_new(
+			DLEYNA_SERVER_ERROR, DLEYNA_ERROR_OPERATION_FAILED,
+			"CreateReference operation failed: %s", error->message);
 		goto on_error;
 	}
 
@@ -5548,17 +5388,9 @@ static void prv_create_reference_cb(GUPnPServiceProxy *proxy,
 
 	cb_data->task.result = g_variant_ref_sink(g_variant_new_object_path(
 								object_path));
-	g_free(object_path);
-
 on_error:
 
 	(void) g_idle_add(dls_async_task_complete, cb_data);
-	g_cancellable_disconnect(cb_data->cancellable, cb_data->cancel_id);
-
-	g_free(object_id);
-
-	if (error != NULL)
-		g_error_free(error);
 
 	DLEYNA_LOG_DEBUG("Exit");
 }
@@ -5568,8 +5400,8 @@ void dls_device_create_reference(dls_client_t *client,
 {
 	dls_async_task_t *cb_data = (dls_async_task_t *)task;
 	dls_device_context_t *context;
-	gchar *i_root = NULL;
-	gchar *i_id = NULL;
+	g_autofree gchar *i_root = NULL;
+	g_autofree gchar *i_id = NULL;
 	gchar *path = cb_data->task.ut.create_reference.item_path;
 
 	DLEYNA_LOG_DEBUG("Enter");
@@ -5594,23 +5426,15 @@ void dls_device_create_reference(dls_client_t *client,
 	g_object_add_weak_pointer((G_OBJECT(context->cds.proxy)),
 				  (gpointer *)&cb_data->proxy);
 
-	cb_data->action = gupnp_service_proxy_begin_action(
-				cb_data->proxy, "CreateReference",
-				prv_create_reference_cb, cb_data,
-				"ContainerID", G_TYPE_STRING, task->target.id,
-				"ObjectID", G_TYPE_STRING, i_id,
-				NULL);
+	cb_data->action = gupnp_service_proxy_action_new(
+		"CreateReference", "ContainerID", G_TYPE_STRING,
+		task->target.id, "ObjectID", G_TYPE_STRING, i_id, NULL);
 
-	cb_data->cancel_id = g_cancellable_connect(
-					cb_data->cancellable,
-					G_CALLBACK(dls_async_task_cancelled_cb),
-					cb_data, NULL);
+	gupnp_service_proxy_call_action_async(cb_data->proxy, cb_data->action,
+					      cb_data->cancellable,
+					      prv_create_reference_cb, cb_data);
 
 on_error:
-
-	g_free(i_root);
-	g_free(i_id);
-
 	DLEYNA_LOG_DEBUG("Exit");
 }
 
diff --git a/libdleyna/server/manager.c b/libdleyna/server/manager.c
index 9dc59d6..2462b25 100644
--- a/libdleyna/server/manager.c
+++ b/libdleyna/server/manager.c
@@ -20,13 +20,14 @@
  *
  */
 
+#include <config.h>
+
 #include <glib.h>
 #include <string.h>
 
 #include <libdleyna/core/error.h>
 #include <libdleyna/core/log.h>
-#include <libdleyna/core/service-task.h>
-#include <libdleyna/core/white-list.h>
+#include <libdleyna/core/context-filter.h>
 
 #include "interface.h"
 #include "manager.h"
@@ -35,10 +36,10 @@
 struct dls_manager_t_ {
 	dleyna_connector_id_t connection;
 	GUPnPContextManager *cm;
-	dleyna_white_list_t *wl;
+	dleyna_context_filter_t *cf;
 };
 
-static void prv_wl_notify_prop(dls_manager_t *manager,
+static void prv_cf_notify_prop(dls_manager_t *manager,
 			       const gchar *prop_name,
 			       GVariant *prop_val)
 {
@@ -64,13 +65,13 @@ dls_manager_t *dls_manager_new(dleyna_connector_id_t connection,
 			       GUPnPContextManager *connection_manager)
 {
 	dls_manager_t *manager = g_new0(dls_manager_t, 1);
-	GUPnPWhiteList *gupnp_wl;
+	GUPnPContextFilter *gupnp_cf;
 
-	gupnp_wl = gupnp_context_manager_get_white_list(connection_manager);
+	gupnp_cf = gupnp_context_manager_get_context_filter(connection_manager);
 
 	manager->connection = connection;
 	manager->cm = connection_manager;
-	manager->wl = dleyna_white_list_new(gupnp_wl);
+	manager->cf = dleyna_context_filter_new(gupnp_cf);
 
 	return manager;
 }
@@ -78,14 +79,14 @@ dls_manager_t *dls_manager_new(dleyna_connector_id_t connection,
 void dls_manager_delete(dls_manager_t *manager)
 {
 	if (manager != NULL) {
-		dleyna_white_list_delete(manager->wl);
+		dleyna_context_filter_delete(manager->cf);
 		g_free(manager);
 	}
 }
 
-dleyna_white_list_t *dls_manager_get_white_list(dls_manager_t *manager)
+dleyna_context_filter_t *dls_manager_get_context_filter(dls_manager_t *manager)
 {
-	return manager->wl;
+	return manager->cf;
 }
 
 void dls_manager_get_all_props(dls_manager_t *manager,
@@ -188,7 +189,7 @@ static void prv_set_prop_never_quit(dls_manager_t *manager,
 
 	if (*error == NULL) {
 		prop_val = g_variant_new_boolean(never_quit);
-		prv_wl_notify_prop(manager,
+		prv_cf_notify_prop(manager,
 				   DLS_INTERFACE_PROP_NEVER_QUIT,
 				   prop_val);
 	}
@@ -198,7 +199,7 @@ exit:
 	return;
 }
 
-static void prv_set_prop_wl_enabled(dls_manager_t *manager,
+static void prv_set_prop_cf_enabled(dls_manager_t *manager,
 				     dleyna_settings_t *settings,
 				     gboolean enabled,
 				     GError **error)
@@ -208,20 +209,20 @@ static void prv_set_prop_wl_enabled(dls_manager_t *manager,
 
 	DLEYNA_LOG_DEBUG("Enter %d", enabled);
 
-	old_val = dleyna_settings_is_white_list_enabled(settings);
+	old_val = dleyna_settings_is_context_filter_enabled(settings);
 
 	if (old_val == enabled)
 		goto exit;
 
 	/* If no error, the white list will be updated in the reload callack
 	 */
-	dleyna_settings_set_white_list_enabled(settings, enabled, error);
+	dleyna_settings_set_context_filter_enabled(settings, enabled, error);
 
 	if (*error == NULL) {
-		dleyna_white_list_enable(manager->wl, enabled);
+		dleyna_context_filter_enable(manager->cf, enabled);
 
 		prop_val = g_variant_new_boolean(enabled);
-		prv_wl_notify_prop(manager,
+		prv_cf_notify_prop(manager,
 				   DLS_INTERFACE_PROP_WHITE_LIST_ENABLED,
 				   prop_val);
 	}
@@ -231,7 +232,7 @@ exit:
 	return;
 }
 
-static void prv_set_prop_wl_entries(dls_manager_t *manager,
+static void prv_set_prop_cf_entries(dls_manager_t *manager,
 				     dleyna_settings_t *settings,
 				     GVariant *entries,
 				     GError **error)
@@ -250,13 +251,13 @@ static void prv_set_prop_wl_entries(dls_manager_t *manager,
 	/* If no error, the white list will be updated in the reload callack
 	 * callack
 	 */
-	dleyna_settings_set_white_list_entries(settings, entries, error);
+	dleyna_settings_set_context_filter_entries(settings, entries, error);
 
 	if (*error == NULL) {
-		dleyna_white_list_clear(manager->wl);
-		dleyna_white_list_add_entries(manager->wl, entries);
+		dleyna_context_filter_clear(manager->cf);
+		dleyna_context_filter_add_entries(manager->cf, entries);
 
-		prv_wl_notify_prop(manager,
+		prv_cf_notify_prop(manager,
 				   DLS_INTERFACE_PROP_WHITE_LIST_ENTRIES,
 				   entries);
 	}
@@ -299,11 +300,11 @@ void dls_manager_set_prop(dls_manager_t *manager,
 					g_variant_get_boolean(param),
 					&error);
 	else if (!strcmp(name, DLS_INTERFACE_PROP_WHITE_LIST_ENABLED))
-		prv_set_prop_wl_enabled(manager, settings,
+		prv_set_prop_cf_enabled(manager, settings,
 					g_variant_get_boolean(param),
 					&error);
 	else if (!strcmp(name, DLS_INTERFACE_PROP_WHITE_LIST_ENTRIES))
-		prv_set_prop_wl_entries(manager, settings, param, &error);
+		prv_set_prop_cf_entries(manager, settings, param, &error);
 	else
 		cb_data->error = g_error_new(DLEYNA_SERVER_ERROR,
 					     DLEYNA_ERROR_UNKNOWN_PROPERTY,
diff --git a/libdleyna/server/manager.h b/libdleyna/server/manager.h
index 955a80f..646edb2 100644
--- a/libdleyna/server/manager.h
+++ b/libdleyna/server/manager.h
@@ -26,6 +26,7 @@
 #include <libdleyna/core/connector.h>
 #include <libdleyna/core/settings.h>
 #include <libgupnp/gupnp-context-manager.h>
+#include <libdleyna/core/context-filter.h>
 
 #include "task.h"
 
@@ -37,7 +38,7 @@ dls_manager_t *dls_manager_new(dleyna_connector_id_t connection,
 
 void dls_manager_delete(dls_manager_t *manager);
 
-dleyna_white_list_t *dls_manager_get_white_list(dls_manager_t *manager);
+dleyna_context_filter_t *dls_manager_get_context_filter(dls_manager_t *manager);
 
 void dls_manager_get_all_props(dls_manager_t *manager,
 			       dleyna_settings_t *settings,
diff --git a/libdleyna/server/props.c b/libdleyna/server/props.c
index ea18d62..78311ae 100755
--- a/libdleyna/server/props.c
+++ b/libdleyna/server/props.c
@@ -2105,7 +2105,7 @@ static GVariant *prv_build_wl_entries(dleyna_settings_t *settings)
 {
 	GVariant *result;
 
-	result = dleyna_settings_white_list_entries(settings);
+	result = dleyna_settings_context_filter_entries(settings);
 
 	if (result == NULL)
 		result = g_variant_new("as", NULL);
@@ -2119,7 +2119,7 @@ void dls_props_add_manager(dleyna_settings_t *settings, GVariantBuilder *vb)
 			  dleyna_settings_is_never_quit(settings));
 
 	prv_add_bool_prop(vb, DLS_INTERFACE_PROP_WHITE_LIST_ENABLED,
-			  dleyna_settings_is_white_list_enabled(settings));
+			  dleyna_settings_is_context_filter_enabled(settings));
 
 	g_variant_builder_add(vb, "{sv}", DLS_INTERFACE_PROP_WHITE_LIST_ENTRIES,
 			      prv_build_wl_entries(settings));
@@ -2138,7 +2138,7 @@ GVariant *dls_props_get_manager_prop(dleyna_settings_t *settings,
 		b_value = dleyna_settings_is_never_quit(settings);
 		retval = g_variant_ref_sink(g_variant_new_boolean(b_value));
 	} else if (!strcmp(prop, DLS_INTERFACE_PROP_WHITE_LIST_ENABLED)) {
-		b_value = dleyna_settings_is_white_list_enabled(settings);
+		b_value = dleyna_settings_is_context_filter_enabled(settings);
 		retval = g_variant_ref_sink(g_variant_new_boolean(b_value));
 	} else if (!strcmp(prop, DLS_INTERFACE_PROP_WHITE_LIST_ENTRIES)) {
 		retval = g_variant_ref_sink(prv_build_wl_entries(settings));
diff --git a/libdleyna/server/server.c b/libdleyna/server/server.c
index e90b446..99aa1c8 100644
--- a/libdleyna/server/server.c
+++ b/libdleyna/server/server.c
@@ -21,15 +21,17 @@
  *
  */
 
+#include <config.h>
+
 #include <glib.h>
 #include <string.h>
 
 #include <libdleyna/core/connector.h>
+#include <libdleyna/core/context-filter.h>
 #include <libdleyna/core/control-point.h>
 #include <libdleyna/core/error.h>
 #include <libdleyna/core/log.h>
 #include <libdleyna/core/task-processor.h>
-#include <libdleyna/core/white-list.h>
 
 #include "async.h"
 #include "client.h"
@@ -1293,21 +1295,21 @@ dls_upnp_t *dls_server_get_upnp(void)
 	return g_context.upnp;
 }
 
-static void prv_white_list_init(void)
+static void prv_context_filter_init(void)
 {
 	gboolean enabled;
 	GVariant *entries;
-	dleyna_white_list_t *wl;
+	dleyna_context_filter_t *wl;
 
 	DLEYNA_LOG_DEBUG("Enter");
 
-	enabled = dleyna_settings_is_white_list_enabled(g_context.settings);
-	entries = dleyna_settings_white_list_entries(g_context.settings);
+	enabled = dleyna_settings_is_context_filter_enabled(g_context.settings);
+	entries = dleyna_settings_context_filter_entries(g_context.settings);
 
-	wl = dls_manager_get_white_list(g_context.manager);
+	wl = dls_manager_get_context_filter(g_context.manager);
 
-	dleyna_white_list_enable(wl, enabled);
-	dleyna_white_list_add_entries(wl, entries);
+	dleyna_context_filter_enable(wl, enabled);
+	dleyna_context_filter_add_entries(wl, entries);
 
 	DLEYNA_LOG_DEBUG("Exit");
 }
@@ -1340,7 +1342,7 @@ static gboolean prv_control_point_start_service(
 						dls_upnp_get_context_manager(
 							g_context.upnp));
 
-		prv_white_list_init();
+		prv_context_filter_init();
 	} else {
 		retval = FALSE;
 	}
diff --git a/libdleyna/server/upnp.c b/libdleyna/server/upnp.c
index d04efb8..b5d0c08 100644
--- a/libdleyna/server/upnp.c
+++ b/libdleyna/server/upnp.c
@@ -20,6 +20,8 @@
  *
  */
 
+#include <config.h>
+
 #include <string.h>
 
 #include <libgssdp/gssdp-resource-browser.h>
@@ -28,7 +30,7 @@
 
 #include <libdleyna/core/error.h>
 #include <libdleyna/core/log.h>
-#include <libdleyna/core/service-task.h>
+#include <libdleyna/core/gasync-task.h>
 
 #include "async.h"
 #include "device.h"
@@ -123,12 +125,12 @@ static const dleyna_task_queue_key_t *prv_create_device_queue(
 
 	queue_id = dleyna_task_processor_add_queue(
 			dls_server_get_task_processor(),
-			dleyna_service_task_create_source(),
+			dleyna_gasync_task_create_source(),
 			DLS_SERVER_SINK,
 			DLEYNA_TASK_QUEUE_FLAG_AUTO_REMOVE,
-			dleyna_service_task_process_cb,
-			dleyna_service_task_cancel_cb,
-			dleyna_service_task_delete_cb);
+			dleyna_gasync_task_process_cb,
+			dleyna_gasync_task_cancel_cb,
+			dleyna_gasync_task_delete_cb);
 	dleyna_task_queue_set_finally(queue_id, prv_device_chain_end);
 	dleyna_task_queue_set_user_data(queue_id, *priv_t);
 
@@ -212,7 +214,7 @@ static void prv_device_available_cb(GUPnPControlPoint *cp,
 	udn = gupnp_device_info_get_udn(device_proxy);
 
 	ip_address = gssdp_client_get_host_ip(
-		GSSDP_CLIENT(gupnp_control_point_get_context(cp)));
+		gssdp_resource_browser_get_client(GSSDP_RESOURCE_BROWSER(cp)));
 
 	if (!udn || !ip_address)
 		goto on_error;
@@ -352,7 +354,7 @@ static void prv_device_unavailable_cb(GUPnPControlPoint *cp,
 	udn = gupnp_device_info_get_udn((GUPnPDeviceInfo *)proxy);
 
 	ip_address = gssdp_client_get_host_ip(
-		GSSDP_CLIENT(gupnp_control_point_get_context(cp)));
+		gssdp_resource_browser_get_client(GSSDP_RESOURCE_BROWSER(cp)));
 
 	if (!udn || !ip_address)
 		goto on_error;
-- 
2.37.3