diff --git a/meta-openembedded/meta-gnome/recipes-connectivity/geary/geary_40.0.bb b/meta-openembedded/meta-gnome/recipes-connectivity/geary/geary_43.0.bb
similarity index 87%
rename from meta-openembedded/meta-gnome/recipes-connectivity/geary/geary_40.0.bb
rename to meta-openembedded/meta-gnome/recipes-connectivity/geary/geary_43.0.bb
index 3ff0a41..8dd0ea6 100644
--- a/meta-openembedded/meta-gnome/recipes-connectivity/geary/geary_40.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-connectivity/geary/geary_43.0.bb
@@ -6,6 +6,7 @@
 DEPENDS = " \
     appstream-glib \
     cairo \
+    desktop-file-utils-native \
     enchant2 \
     evolution-data-server \
     folks \
@@ -34,12 +35,10 @@
 
 SRC_URI = " \
 	git://github.com/GNOME/geary.git;nobranch=1;protocol=https \
-        file://0001-Util.Cache.Lru-Workaround-missing-generic-type-argum.patch \
-        file://0002-Fix-accessibility-issues-with-initializer-of-constan.patch \
 "
 
 S = "${WORKDIR}/git"
-SRCREV = "e561775c1580a9f60a726355b2b897bfc9cb3382"
+SRCREV = "94d6bec861daffb27efea85a296f347db7a5af6d"
 
 ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
 REQUIRED_DISTRO_FEATURES = "gobject-introspection-data"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-online-accounts/files/0001-Update-to-rest-1.0.patch b/meta-openembedded/meta-gnome/recipes-gnome/gnome-online-accounts/files/0001-Update-to-rest-1.0.patch
deleted file mode 100644
index 4a47fb2..0000000
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-online-accounts/files/0001-Update-to-rest-1.0.patch
+++ /dev/null
@@ -1,160 +0,0 @@
-From 3c4a6eda580c6e38aeedb63d73ae7b96cc7f9a07 Mon Sep 17 00:00:00 2001
-From: Carlos Garcia Campos <cgarcia@igalia.com>
-Date: Mon, 7 Jun 2021 16:31:18 +0200
-Subject: [PATCH] Update to rest 1.0
-
-Updates to use the rest 1.0 API
-
-Upstream-Status: Inappropriate [rest 1.0 is not released yet]
-
-Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
----
- configure.ac                       |  2 +-
- src/goabackend/goalastfmprovider.c | 26 +++++++++++++-------------
- src/goabackend/goaoauthprovider.c  | 17 +++++++++++------
- src/goabackend/goarestproxy.h      |  2 --
- 4 files changed, 25 insertions(+), 22 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index 1f88bbd..e43303d 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -129,7 +129,7 @@ if test "$enable_backend" != "no"; then
-   AC_SUBST(JSON_GLIB_CFLAGS)
-   AC_SUBST(JSON_GLIB_LIBS)
- 
--  PKG_CHECK_MODULES(REST, [rest-0.7])
-+  PKG_CHECK_MODULES(REST, [rest-1.0])
-   AC_SUBST(REST_CFLAGS)
-   AC_SUBST(REST_LIBS)
- 
-diff --git a/src/goabackend/goalastfmprovider.c b/src/goabackend/goalastfmprovider.c
-index cb9a6f2..a2db037 100644
---- a/src/goabackend/goalastfmprovider.c
-+++ b/src/goabackend/goalastfmprovider.c
-@@ -483,18 +483,18 @@ add_account_cb (GoaManager *manager, GAsyncResult *res, gpointer user_data)
- 
- static void
- check_cb (RestProxyCall *call,
--          const GError *error,
--          GObject *weak_object,
-+          GAsyncResult *result,
-           gpointer user_data)
- {
-   AddAccountData *data = user_data;
-   JsonNode *session;
--  JsonParser *parser;
-+  JsonParser *parser = NULL;
-   JsonObject *json_obj;
-   JsonObject *session_obj;
-   const gchar *payload;
- 
--  parser = NULL;
-+  if (!rest_proxy_call_invoke_finish (call, result, &data->error))
-+    goto out;
- 
-   parser = json_parser_new ();
-   payload = rest_proxy_call_get_payload (call);
-@@ -562,12 +562,12 @@ on_rest_proxy_call_cancelled_cb (GCancellable *cancellable, RestProxyCall *call)
- }
- 
- static void
--lastfm_login (GoaProvider                  *provider,
--              const gchar                  *username,
--              const gchar                  *password,
--              GCancellable                 *cancellable,
--              RestProxyCallAsyncCallback   callback,
--              gpointer                     user_data)
-+lastfm_login (GoaProvider          *provider,
-+              const gchar          *username,
-+              const gchar          *password,
-+              GCancellable         *cancellable,
-+              GAsyncReadyCallback   callback,
-+              gpointer              user_data)
- {
-   AddAccountData *data = user_data;
-   RestProxyCall *call;
-@@ -598,7 +598,7 @@ lastfm_login (GoaProvider                  *provider,
-   rest_proxy_call_add_param (call, "api_sig", sig_md5);
-   rest_proxy_call_add_param (call, "format", "json");
- 
--  rest_proxy_call_async (call, callback, NULL, data, &data->error);
-+  rest_proxy_call_invoke_async (call, NULL, callback, data);
- 
-   g_signal_connect (cancellable, "cancelled", G_CALLBACK (on_rest_proxy_call_cancelled_cb), call);
- 
-@@ -665,7 +665,7 @@ add_account (GoaProvider    *provider,
-                 username,
-                 password,
-                 data.cancellable,
--                (RestProxyCallAsyncCallback) check_cb,
-+                (GAsyncReadyCallback) check_cb,
-                 &data);
- 
-   gtk_widget_set_sensitive (data.connect_button, FALSE);
-@@ -819,7 +819,7 @@ refresh_account (GoaProvider    *provider,
-                 username,
-                 password,
-                 data.cancellable,
--                (RestProxyCallAsyncCallback) check_cb,
-+                (GAsyncReadyCallback) check_cb,
-                 &data);
-   gtk_widget_set_sensitive (data.connect_button, FALSE);
-   gtk_widget_show (data.progress_grid);
-diff --git a/src/goabackend/goaoauthprovider.c b/src/goabackend/goaoauthprovider.c
-index 0bfab6b..6a69251 100644
---- a/src/goabackend/goaoauthprovider.c
-+++ b/src/goabackend/goaoauthprovider.c
-@@ -699,9 +699,15 @@ on_web_view_decide_policy (WebKitWebView            *web_view,
- }
- 
- static void
--rest_proxy_call_cb (RestProxyCall *call, const GError *error, GObject *weak_object, gpointer user_data)
-+rest_proxy_call_cb (GObject *source, GAsyncResult *result, gpointer user_data)
- {
-+  RestProxyCall *call = REST_PROXY_CALL (source);
-   IdentifyData *data = user_data;
-+
-+  if (!rest_proxy_call_invoke_finish (call, result, &data->error))
-+    {
-+      g_prefix_error (&data->error, _("Error getting a Request Token: "));
-+    }
-   g_main_loop_quit (data->loop);
- }
- 
-@@ -768,11 +774,7 @@ get_tokens_and_identity (GoaOAuthProvider *provider,
-       for (n = 0; request_params[n] != NULL; n += 2)
-         rest_proxy_call_add_param (call, request_params[n], request_params[n+1]);
-     }
--  if (!rest_proxy_call_async (call, rest_proxy_call_cb, NULL, &data, &data.error))
--    {
--      g_prefix_error (&data.error, _("Error getting a Request Token: "));
--      goto out;
--    }
-+  rest_proxy_call_invoke_async (call, NULL, rest_proxy_call_cb, &data);
- 
-   goa_utils_set_dialog_title (GOA_PROVIDER (provider), dialog, add_account);
- 
-@@ -794,6 +796,9 @@ get_tokens_and_identity (GoaOAuthProvider *provider,
-   g_main_loop_run (data.loop);
-   gtk_container_remove (GTK_CONTAINER (grid), spinner);
- 
-+  if (data.error)
-+    goto out;
-+
-   if (rest_proxy_call_get_status_code (call) != 200)
-     {
-       gchar *msg;
-diff --git a/src/goabackend/goarestproxy.h b/src/goabackend/goarestproxy.h
-index 09fb076..4948cb7 100644
---- a/src/goabackend/goarestproxy.h
-+++ b/src/goabackend/goarestproxy.h
-@@ -27,8 +27,6 @@
- 
- G_BEGIN_DECLS
- 
--G_DEFINE_AUTOPTR_CLEANUP_FUNC (RestProxy, g_object_unref);
--
- #define GOA_TYPE_REST_PROXY (goa_rest_proxy_get_type ())
- G_DECLARE_FINAL_TYPE (GoaRestProxy, goa_rest_proxy, GOA, REST_PROXY, RestProxy);
- 
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-online-accounts/gnome-online-accounts_3.44.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-online-accounts/gnome-online-accounts_3.44.0.bb
deleted file mode 100644
index 451670e..0000000
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-online-accounts/gnome-online-accounts_3.44.0.bb
+++ /dev/null
@@ -1,34 +0,0 @@
-SUMMARY = "GNOME Online Accounts - Single sign-on framework for GNOME"
-LICENSE = "LGPL-2.0-or-later"
-LIC_FILES_CHKSUM = "file://COPYING;md5=34c88b124db5fb2762c1676be7dadd36"
-
-GNOMEBASEBUILDCLASS = "autotools"
-
-inherit gnomebase gsettings gobject-introspection gsettings gtk-doc vala gettext features_check
-
-ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
-
-DEPENDS = "glib-2.0"
-
-SRC_URI += "file://0001-Update-to-rest-1.0.patch"
-SRC_URI[archive.sha256sum] = "381d5d4106f435b6f87786aa049be784774e15996adcc02789807afc87ea7342"
-
-# backend is required for gnome-control-center
-PACKAGECONFIG = "backend other"
-
-PACKAGECONFIG[backend] = "--enable-backend,--disable-backend,gtk+3 webkitgtk libsoup-2.4 json-glib libsecret rest libxml2"
-PACKAGECONFIG[krb5] = "--enable-kerberos, --disable-kerberos , krb5 gcr"
-
-# no extra dependencies!
-PACKAGECONFIG[other] = " \
-    --enable-facebook  --enable-foursquare  --enable-exchange  --enable-flickr  --enable-google  --enable-imap-smtp  --enable-owncloud  --enable-windows-live,\
-    --disable-facebook --disable-foursquare --disable-exchange --disable-flickr --disable-google --disable-imap-smtp --disable-owncloud --disable-windows-live, \
-"
-
-FILES:${PN} += " \
-    ${datadir}/dbus-1 \
-    ${libdir}/goa-1.0/web-extensions/*.so \
-"
-
-# looked into pkg-config file: it is not a bug - they mean it
-FILES:${PN}-dev += "${libdir}/goa-1.0/include"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-online-accounts/gnome-online-accounts_3.46.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-online-accounts/gnome-online-accounts_3.46.0.bb
new file mode 100644
index 0000000..0603a2d
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-online-accounts/gnome-online-accounts_3.46.0.bb
@@ -0,0 +1,31 @@
+SUMMARY = "GNOME Online Accounts - Single sign-on framework for GNOME"
+LICENSE = "LGPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=34c88b124db5fb2762c1676be7dadd36"
+
+GNOMEBASEBUILDCLASS = "meson"
+
+inherit gnomebase gsettings gobject-introspection gtk-icon-cache vala features_check
+
+DEPENDS = "gtk+3 gtk+3-native gdk-pixbuf dbus json-glib libxml2 webkitgtk glib-2.0 rest libsecret"
+
+SRC_URI[archive.sha256sum] = "5e7859ce4858a6b99d3995ed70527d66e297bb90bbf75ec8780fe9da22c1fcaa"
+
+PACKAGECONFIG_SOUP ?= "soup3"
+PACKAGECONFIG ?= "kerberos owncloud lastfm google windows_live ${PACKAGECONFIG_SOUP}"
+
+PACKAGECONFIG[kerberos] = "-Dkerberos=true, -Dkerberos=false,krb5 gcr"
+PACKAGECONFIG[exchange] = "-Dexchange=true, -Dexchange=false"
+PACKAGECONFIG[google] = "-Dgoogle=true, -Dgoogle=false"
+PACKAGECONFIG[owncloud] = "-Downcloud=true, -Downcloud=false"
+PACKAGECONFIG[windows_live] = "-Dwindows_live=true, -Dwindows_live=false"
+PACKAGECONFIG[lastfm] = "-Dlastfm=true, -Dlastfm=false"
+PACKAGECONFIG[soup2] = ",,libsoup-2.4,,,soup3"
+PACKAGECONFIG[soup3] = ",,libsoup-3.0,,,soup2"
+
+FILES:${PN} += " \
+    ${datadir}/dbus-1 \
+    ${libdir}/goa-1.0/web-extensions/*.so \
+"
+
+# looked into pkg-config file: it is not a bug - they mean it
+FILES:${PN}-dev += "${libdir}/goa-1.0/include"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/rest/files/0001-Use-GUri-instead-of-SoupURI.patch b/meta-openembedded/meta-gnome/recipes-gnome/rest/files/0001-Use-GUri-instead-of-SoupURI.patch
deleted file mode 100644
index 37ba0a0..0000000
--- a/meta-openembedded/meta-gnome/recipes-gnome/rest/files/0001-Use-GUri-instead-of-SoupURI.patch
+++ /dev/null
@@ -1,181 +0,0 @@
-From d39fd6d5f4c0a63cc048b84b0f989cb83f31e5fe Mon Sep 17 00:00:00 2001
-From: Carlos Garcia Campos <cgarcia@igalia.com>
-Date: Tue, 8 Jun 2021 10:57:06 +0200
-Subject: [PATCH 1/2] Use GUri instead of SoupURI
-
-Upstream-Status: Submitted [https://gitlab.gnome.org/GNOME/librest/-/merge_requests/6]
----
- configure.ac               |  2 +-
- rest-extras/flickr-proxy.c | 19 ++++++++++++++-----
- rest/oauth-proxy-call.c    | 19 ++++++++++++++-----
- rest/oauth2-proxy.c        | 22 +++++++++++-----------
- 4 files changed, 40 insertions(+), 22 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index d15e592..d586e69 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -40,7 +40,7 @@ AM_PROG_CC_C_O
- LT_PREREQ([2.2.6])
- LT_INIT([disable-static])
- 
--PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.44)
-+PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.67.4)
- PKG_CHECK_MODULES(SOUP, libsoup-2.4 >= 2.42)
- PKG_CHECK_MODULES(XML, libxml-2.0)
- PKG_CHECK_MODULES(GTHREAD, gthread-2.0)
-diff --git a/rest-extras/flickr-proxy.c b/rest-extras/flickr-proxy.c
-index 3342a4d..7726359 100644
---- a/rest-extras/flickr-proxy.c
-+++ b/rest-extras/flickr-proxy.c
-@@ -304,13 +304,13 @@ flickr_proxy_build_login_url (FlickrProxy *proxy,
-                               const char  *frob,
-                               const char  *perms)
- {
--  SoupURI *uri;
-+  GUri *uri;
-   GHashTable *params;
-   char *sig, *s;
-+  char *query;
- 
-   g_return_val_if_fail (FLICKR_IS_PROXY (proxy), NULL);
- 
--  uri = soup_uri_new ("http://flickr.com/services/auth/");
-   params = g_hash_table_new (g_str_hash, g_str_equal);
- 
-   g_hash_table_insert (params, "api_key", proxy->priv->api_key);
-@@ -321,14 +321,23 @@ flickr_proxy_build_login_url (FlickrProxy *proxy,
- 
-   sig = flickr_proxy_sign (proxy, params);
-   g_hash_table_insert (params, "api_sig", sig);
-+  query = soup_form_encode_hash (params);
- 
--  soup_uri_set_query_from_form (uri, params);
-+  uri = g_uri_build (G_URI_FLAGS_ENCODED,
-+                     "http",
-+                     NULL,
-+                     "flickr.com",
-+                     -1,
-+                     "services/auth/",
-+                     query,
-+                     NULL);
- 
--  s = soup_uri_to_string (uri, FALSE);
-+  s = g_uri_to_string (uri);
- 
-+  g_free (query);
-   g_free (sig);
-   g_hash_table_destroy (params);
--  soup_uri_free (uri);
-+  g_uri_unref (uri);
- 
-   return s;
- }
-diff --git a/rest/oauth-proxy-call.c b/rest/oauth-proxy-call.c
-index c90c69d..e238c3c 100644
---- a/rest/oauth-proxy-call.c
-+++ b/rest/oauth-proxy-call.c
-@@ -30,7 +30,7 @@
- 
- G_DEFINE_TYPE (OAuthProxyCall, oauth_proxy_call, REST_TYPE_PROXY_CALL)
- 
--#define OAUTH_ENCODE_STRING(x_) (x_ ? soup_uri_encode( (x_), "!$&'()*+,;=@") : g_strdup (""))
-+#define OAUTH_ENCODE_STRING(x_) (x_ ? g_uri_escape_string( (x_), NULL, TRUE) : g_strdup (""))
- 
- static char *
- sign_plaintext (OAuthProxyPrivate *priv)
-@@ -136,15 +136,24 @@ sign_hmac (OAuthProxy *proxy, RestProxyCall *call, GHashTable *oauth_params)
-   if (priv->oauth_echo) {
-     g_string_append_uri_escaped (text, priv->service_url, NULL, FALSE);
-   } else if (priv->signature_host != NULL) {
--    SoupURI *url = soup_uri_new (url_str);
-+    GUri *url = g_uri_parse (url_str, G_URI_FLAGS_ENCODED, NULL);
-+    GUri *new_url;
-     gchar *signing_url;
- 
--    soup_uri_set_host (url, priv->signature_host);
--    signing_url = soup_uri_to_string (url, FALSE);
-+    new_url = g_uri_build (g_uri_get_flags (url),
-+                           g_uri_get_scheme (url),
-+                           g_uri_get_userinfo (url),
-+                           priv->signature_host,
-+                           g_uri_get_port (url),
-+                           g_uri_get_path (url),
-+                           g_uri_get_query (url),
-+                           g_uri_get_fragment (url));
-+    signing_url = g_uri_to_string (new_url);
- 
-     g_string_append_uri_escaped (text, signing_url, NULL, FALSE);
- 
--    soup_uri_free (url);
-+    g_uri_unref (new_url);
-+    g_uri_unref (url);
-     g_free (signing_url);
-   } else {
-     g_string_append_uri_escaped (text, url_str, NULL, FALSE);
-diff --git a/rest/oauth2-proxy.c b/rest/oauth2-proxy.c
-index 24e5da0..3382f8b 100644
---- a/rest/oauth2-proxy.c
-+++ b/rest/oauth2-proxy.c
-@@ -37,8 +37,6 @@ oauth2_proxy_error_quark (void)
-     return g_quark_from_static_string ("rest-oauth2-proxy");
- }
- 
--#define EXTRA_CHARS_ENCODE "!$&'()*+,;=@"
--
- enum {
-   PROP_0,
-   PROP_CLIENT_ID,
-@@ -242,8 +240,8 @@ append_query_param (gpointer key, gpointer value, gpointer user_data)
-     char *encoded_val, *encoded_key;
-     char *param;
- 
--    encoded_val = soup_uri_encode (value, EXTRA_CHARS_ENCODE);
--    encoded_key = soup_uri_encode (key, EXTRA_CHARS_ENCODE);
-+    encoded_val = g_uri_escape_string (value, NULL, TRUE);
-+    encoded_key = g_uri_escape_string (key, NULL, TRUE);
- 
-     param = g_strdup_printf ("%s=%s", encoded_key, encoded_val);
-     g_free (encoded_key);
-@@ -295,8 +293,8 @@ oauth2_proxy_build_login_url_full (OAuth2Proxy *proxy,
-         g_hash_table_foreach (extra_params, append_query_param, params);
-     }
- 
--    encoded_uri = soup_uri_encode (redirect_uri, EXTRA_CHARS_ENCODE);
--    encoded_id = soup_uri_encode (proxy->priv->client_id, EXTRA_CHARS_ENCODE);
-+    encoded_uri = g_uri_escape_string (redirect_uri, NULL, TRUE);
-+    encoded_id = g_uri_escape_string (proxy->priv->client_id, NULL, TRUE);
- 
-     url = g_strdup_printf ("%s?client_id=%s&redirect_uri=%s&type=user_agent",
-                            proxy->priv->auth_endpoint, encoded_id,
-@@ -378,20 +376,22 @@ oauth2_proxy_extract_access_token (const char *url)
- {
-   GHashTable *params;
-   char *token = NULL;
--  SoupURI *soupuri = soup_uri_new (url);
-+  const char *fragment;
-+  GUri *uri = g_uri_parse (url, G_URI_FLAGS_ENCODED, NULL);
- 
--  if (soupuri->fragment != NULL) {
--    params = soup_form_decode (soupuri->fragment);
-+  fragment = g_uri_get_fragment (uri);
-+  if (fragment != NULL) {
-+    params = soup_form_decode (fragment);
- 
-     if (params) {
-       char *encoded = g_hash_table_lookup (params, "access_token");
-       if (encoded)
--        token = soup_uri_decode (encoded);
-+        token = g_uri_unescape_string (encoded, NULL);
- 
-       g_hash_table_destroy (params);
-     }
-   }
--  soup_uri_free (soupuri);
-+  g_uri_unref (uri);
- 
-   return token;
- }
--- 
-2.33.1
-
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/rest/files/0002-Port-to-libsoup3.patch b/meta-openembedded/meta-gnome/recipes-gnome/rest/files/0002-Port-to-libsoup3.patch
deleted file mode 100644
index eed522f..0000000
--- a/meta-openembedded/meta-gnome/recipes-gnome/rest/files/0002-Port-to-libsoup3.patch
+++ /dev/null
@@ -1,1696 +0,0 @@
-From 3dc630ae5b9dc6cda1ba318de2cd654aaba7b4a2 Mon Sep 17 00:00:00 2001
-From: Carlos Garcia Campos <cgarcia@igalia.com>
-Date: Tue, 8 Jun 2021 17:44:04 +0200
-Subject: [PATCH 2/2] Port to libsoup3
-
-Upstream-Status: Submitted [https://gitlab.gnome.org/GNOME/librest/-/merge_requests/6]
----
- configure.ac                |  39 ++++-
- rest-extras.pc.in           |   2 +-
- rest-extras/youtube-proxy.c | 110 +++++++++++---
- rest.pc.in                  |   2 +-
- rest/rest-private.h         |  22 ++-
- rest/rest-proxy-auth.c      |  16 ++
- rest/rest-proxy-call.c      | 296 +++++++++++++++++++++++++++++-------
- rest/rest-proxy.c           | 209 ++++++++++++++++++++++---
- tests/custom-serialize.c    |  18 +++
- tests/proxy-continuous.c    |  37 ++++-
- tests/proxy.c               |  63 +++++++-
- tests/threaded.c            |  17 +++
- 12 files changed, 719 insertions(+), 112 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index d586e69..75c02fe 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -20,12 +20,6 @@ AM_INIT_AUTOMAKE([1.11 foreign -Wno-portability no-define dist-xz])
- 
- AM_SILENT_RULES([yes])
- 
--API_MAJOR=1
--API_MINOR=0
--AC_SUBST([API_VERSION],[$API_MAJOR.$API_MINOR])
--AC_SUBST([API_VERSION_AM],[$API_MAJOR\_$API_MINOR])
--AC_DEFINE_UNQUOTED(API_VERSION, [$API_VERSION], [API version])
--
- AC_CANONICAL_HOST
- 
- AC_PROG_CC
-@@ -41,7 +35,6 @@ LT_PREREQ([2.2.6])
- LT_INIT([disable-static])
- 
- PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.67.4)
--PKG_CHECK_MODULES(SOUP, libsoup-2.4 >= 2.42)
- PKG_CHECK_MODULES(XML, libxml-2.0)
- PKG_CHECK_MODULES(GTHREAD, gthread-2.0)
- 
-@@ -58,6 +51,37 @@ AC_PATH_PROG([GLIB_MKENUMS],[glib-mkenums])
- localedir=${datadir}/locale
- AC_SUBST(localedir)
- 
-+AC_MSG_CHECKING([for libsoup version to use])
-+AC_ARG_WITH(soup,
-+            [AC_HELP_STRING([--soup=2|3],
-+                            [version of libsoup library to use (default: 2)])],
-+            [case "$withval" in
-+                2|3) ;;
-+                *) AC_MSG_ERROR([invalid argument "$withval" for --with-soup]) ;;
-+             esac],
-+            [with_soup=2])
-+AC_MSG_RESULT([$with_soup])
-+
-+API_MAJOR=1
-+
-+if test "$with_soup" = "2"; then
-+    PKG_CHECK_MODULES(SOUP, libsoup-2.4 >= 2.42)
-+    SOUP_API_VERSION=2.4
-+    API_MINOR=0
-+    AC_DEFINE([WITH_SOUP_2],[1],[Define if libsoup version used is 2])
-+else
-+    PKG_CHECK_MODULES(SOUP, libsoup-3.0 >= 2.99.8)
-+    SOUP_API_VERSION=3.0
-+    API_MINOR=1
-+fi
-+
-+AM_CONDITIONAL([WITH_SOUP_2],[test "$with_soup" = "2"])
-+AC_SUBST(SOUP_API_VERSION)
-+
-+AC_SUBST([API_VERSION],[$API_MAJOR.$API_MINOR])
-+AC_SUBST([API_VERSION_AM],[$API_MAJOR\_$API_MINOR])
-+AC_DEFINE_UNQUOTED(API_VERSION, [$API_VERSION], [API version])
-+
- dnl === Coverage report =======================================================
- AC_PATH_PROG([GCOV], [lcov], [enable_gcov=no])
- 
-@@ -130,6 +154,7 @@ echo "                 LibRest $VERSION"
- echo "                 ================"
- echo ""
- echo "                   prefix:   ${prefix}"
-+echo "          libsoup version:   ${with_soup}"
- echo ""
- echo "            Documentation:   ${enable_gtk_doc}"
- echo "       Introspection data:   ${enable_introspection}"
-diff --git a/rest-extras.pc.in b/rest-extras.pc.in
-index 39f21bf..3723d6d 100644
---- a/rest-extras.pc.in
-+++ b/rest-extras.pc.in
-@@ -9,4 +9,4 @@ Description: RESTful web api query library
- Version: @VERSION@
- Libs: -L${libdir} -lrest-extras-${apiversion}
- Cflags: -I${includedir}/rest-${apiversion}
--Requires: glib-2.0 libsoup-2.4 libxml-2.0
-+Requires: glib-2.0 libsoup-@SOUP_API_VERSION@ libxml-2.0
-diff --git a/rest-extras/youtube-proxy.c b/rest-extras/youtube-proxy.c
-index be0cf08..cd598f4 100644
---- a/rest-extras/youtube-proxy.c
-+++ b/rest-extras/youtube-proxy.c
-@@ -246,6 +246,9 @@ typedef struct {
-   GObject *weak_object;
-   gpointer user_data;
-   gsize uploaded;
-+#ifndef WITH_SOUP_2
-+  GCancellable *cancellable;
-+#endif
- } YoutubeProxyUploadClosure;
- 
- static void
-@@ -255,7 +258,11 @@ _upload_async_weak_notify_cb (gpointer *data,
-   YoutubeProxyUploadClosure *closure =
-     (YoutubeProxyUploadClosure *) data;
- 
-+#ifdef WITH_SOUP_2
-   _rest_proxy_cancel_message (REST_PROXY (closure->proxy), closure->message);
-+#else
-+  g_cancellable_cancel (closure->cancellable);
-+#endif
- }
- 
- static void
-@@ -267,6 +274,9 @@ _upload_async_closure_free (YoutubeProxyUploadClosure *closure)
-                          closure);
- 
-   g_object_unref (closure->proxy);
-+#ifndef WITH_SOUP_2
-+  g_object_unref (closure->cancellable);
-+#endif
- 
-   g_slice_free (YoutubeProxyUploadClosure, closure);
- }
-@@ -286,6 +296,9 @@ _upload_async_closure_new (YoutubeProxy *self,
-   closure->message = message;
-   closure->weak_object = weak_object;
-   closure->user_data = user_data;
-+#ifndef WITH_SOUP_2
-+  closure->cancellable = g_cancellable_new ();
-+#endif
- 
-   if (weak_object != NULL)
-     g_object_weak_ref (weak_object,
-@@ -295,41 +308,67 @@ _upload_async_closure_new (YoutubeProxy *self,
- }
- 
- static void
--_upload_completed_cb (SoupSession *session,
--                      SoupMessage *message,
-+_upload_completed_cb (SoupMessage *message,
-+                      GBytes      *payload,
-+                      GError      *error,
-                       gpointer     user_data)
- {
-   YoutubeProxyUploadClosure *closure =
-     (YoutubeProxyUploadClosure *) user_data;
--  GError *error = NULL;
-+  gsize length;
-+  gconstpointer data;
-+  guint status_code;
-+  const char *reason_phrase;
- 
-   if (closure->callback == NULL)
-     return;
- 
--  if (message->status_code < 200 || message->status_code >= 300)
--    error = g_error_new_literal (REST_PROXY_ERROR,
--                                 message->status_code,
--                                 message->reason_phrase);
--
--  closure->callback (closure->proxy, message->response_body->data,
--                     message->request_body->length,
--                     message->request_body->length,
-+#ifdef WITH_SOUP_2
-+  status_code = message->status_code;
-+  reason_phrase = message->reason_phrase;
-+#else
-+  status_code = soup_message_get_status (message);
-+  reason_phrase = soup_message_get_reason_phrase (message);
-+#endif
-+
-+  if (status_code < 200 || status_code >= 300)
-+    {
-+      g_clear_error (&error);
-+      error = g_error_new_literal (REST_PROXY_ERROR,
-+                                   status_code,
-+                                   reason_phrase);
-+    }
-+
-+  data = g_bytes_get_data (payload, &length);
-+  closure->callback (closure->proxy, data, length, length,
-                      error, closure->weak_object, closure->user_data);
-+  g_bytes_unref (payload);
- 
-   _upload_async_closure_free (closure);
- }
- 
- static void
- _message_wrote_data_cb (SoupMessage               *msg,
-+#ifdef WITH_SOUP_2
-                         SoupBuffer                *chunk,
-+#else
-+                        gsize                      chunk_size,
-+#endif
-                         YoutubeProxyUploadClosure *closure)
- {
--  closure->uploaded = closure->uploaded + chunk->length;
-+#ifdef WITH_SOUP_2
-+  gsize chunk_size = chunk->length;
-+  goffset content_length = msg->request_body->length;
-+#else
-+  goffset content_length = soup_message_headers_get_content_length (soup_message_get_request_headers (msg));
-+#endif
-+
-+  closure->uploaded = closure->uploaded + chunk_size;
- 
--  if (closure->uploaded < msg->request_body->length)
-+  if (closure->uploaded < content_length)
-     closure->callback (closure->proxy,
-                        NULL,
--                       msg->request_body->length,
-+                       content_length,
-                        closure->uploaded,
-                        NULL,
-                        closure->weak_object,
-@@ -364,7 +403,12 @@ youtube_proxy_upload_async (YoutubeProxy              *self,
-   SoupMultipart *mp;
-   SoupMessage *message;
-   SoupMessageHeaders *part_headers;
-+  SoupMessageHeaders *request_headers;
-+#ifdef WITH_SOUP_2
-   SoupBuffer *sb;
-+#else
-+  GBytes *sb;
-+#endif
-   gchar *content_type;
-   gchar *atom_xml;
-   GMappedFile *map;
-@@ -380,10 +424,17 @@ youtube_proxy_upload_async (YoutubeProxy              *self,
- 
-   atom_xml = _construct_upload_atom_xml (fields, incomplete);
- 
-+#ifdef WITH_SOUP_2
-   sb = soup_buffer_new_with_owner (atom_xml,
-                                    strlen(atom_xml),
-                                    atom_xml,
-                                    (GDestroyNotify) g_free);
-+#else
-+  sb = g_bytes_new_with_free_func (atom_xml,
-+                                   strlen (atom_xml),
-+                                   (GDestroyNotify) g_free,
-+                                   atom_xml);
-+#endif
- 
-   part_headers = soup_message_headers_new (SOUP_MESSAGE_HEADERS_MULTIPART);
- 
-@@ -393,7 +444,11 @@ youtube_proxy_upload_async (YoutubeProxy              *self,
- 
-   soup_multipart_append_part (mp, part_headers, sb);
- 
-+#ifdef WITH_SOUP_2
-   soup_buffer_free (sb);
-+#else
-+  g_bytes_unref (sb);
-+#endif
- 
-   content_type = g_content_type_guess (
-       filename,
-@@ -401,24 +456,37 @@ youtube_proxy_upload_async (YoutubeProxy              *self,
-       g_mapped_file_get_length (map),
-       NULL);
- 
-+#ifdef WITH_SOUP_2
-   sb = soup_buffer_new_with_owner (g_mapped_file_get_contents (map),
-                                    g_mapped_file_get_length (map),
-                                    map,
-                                    (GDestroyNotify) g_mapped_file_unref);
-+#else
-+  sb = g_bytes_new_with_free_func (g_mapped_file_get_contents (map),
-+                                   g_mapped_file_get_length (map),
-+                                   (GDestroyNotify) g_mapped_file_unref,
-+                                   map);
-+#endif
- 
-   soup_message_headers_replace (part_headers, "Content-Type", content_type);
- 
-   soup_multipart_append_part (mp, part_headers, sb);
- 
-+#ifdef WITH_SOUP_2
-   soup_buffer_free (sb);
--
-   soup_message_headers_free (part_headers);
--
-   message = soup_form_request_new_from_multipart (UPLOAD_URL, mp);
-+  request_headers = message->request_headers;
-+#else
-+  g_bytes_unref (sb);
-+  soup_message_headers_unref (part_headers);
-+  message = soup_message_new_from_multipart (UPLOAD_URL, mp);
-+  request_headers = soup_message_get_request_headers (message);
-+#endif
- 
-   soup_multipart_free (mp);
- 
--  _set_upload_headers (self, message->request_headers, filename);
-+  _set_upload_headers (self, request_headers, filename);
- 
-   closure = _upload_async_closure_new (self, callback, message, weak_object,
-                                        user_data);
-@@ -429,7 +497,13 @@ youtube_proxy_upload_async (YoutubeProxy              *self,
-                     closure);
- 
- 
--  _rest_proxy_queue_message (REST_PROXY (self), message, _upload_completed_cb,
-+  _rest_proxy_queue_message (REST_PROXY (self), message,
-+#ifdef WITH_SOUP_2
-+                             NULL,
-+#else
-+                             closure->cancellable,
-+#endif
-+                             _upload_completed_cb,
-                              closure);
- 
-   return TRUE;
-diff --git a/rest.pc.in b/rest.pc.in
-index 94c384b..e6bae3e 100644
---- a/rest.pc.in
-+++ b/rest.pc.in
-@@ -9,4 +9,4 @@ Description: RESTful web api query library
- Version: @VERSION@
- Libs: -L${libdir} -lrest-${apiversion}
- Cflags: -I${includedir}/rest-${apiversion}
--Requires: glib-2.0 libsoup-2.4 libxml-2.0
-+Requires: glib-2.0 libsoup-@SOUP_API_VERSION@ libxml-2.0
-diff --git a/rest/rest-private.h b/rest/rest-private.h
-index 9e91fa0..6e71322 100644
---- a/rest/rest-private.h
-+++ b/rest/rest-private.h
-@@ -31,6 +31,11 @@
- 
- G_BEGIN_DECLS
- 
-+typedef void (*RestMessageFinishedCallback) (SoupMessage *msg,
-+                                             GBytes      *body,
-+                                             GError      *error,
-+                                             gpointer     user_data);
-+
- typedef enum
- {
-   REST_DEBUG_XML_PARSER = 1 << 0,
-@@ -53,12 +58,23 @@ gboolean _rest_proxy_get_binding_required (RestProxy *proxy);
- const gchar *_rest_proxy_get_bound_url (RestProxy *proxy);
- void _rest_proxy_queue_message (RestProxy   *proxy,
-                                 SoupMessage *message,
--                                SoupSessionCallback callback,
-+                                GCancellable *cancellable,
-+                                RestMessageFinishedCallback callback,
-                                 gpointer user_data);
- void _rest_proxy_cancel_message (RestProxy   *proxy,
-                                  SoupMessage *message);
--guint _rest_proxy_send_message (RestProxy   *proxy,
--                                SoupMessage *message);
-+GBytes *_rest_proxy_send_message (RestProxy    *proxy,
-+                                  SoupMessage  *message,
-+                                  GCancellable *cancellable,
-+                                  GError      **error);
-+void _rest_proxy_send_message_async (RestProxy          *proxy,
-+                                     SoupMessage        *message,
-+                                     GCancellable       *cancellable,
-+                                     GAsyncReadyCallback callback,
-+                                     gpointer            user_data);
-+GInputStream *_rest_proxy_send_message_finish (RestProxy    *proxy,
-+                                               GAsyncResult *result,
-+                                               GError      **error);
- 
- RestXmlNode *_rest_xml_node_new (void);
- void         _rest_xml_node_reverse_children_siblings (RestXmlNode *node);
-diff --git a/rest/rest-proxy-auth.c b/rest/rest-proxy-auth.c
-index b96e443..0b2ec9f 100644
---- a/rest/rest-proxy-auth.c
-+++ b/rest/rest-proxy-auth.c
-@@ -29,7 +29,9 @@
- struct _RestProxyAuthPrivate {
-   /* used to hold state during async authentication */
-   RestProxy *proxy;
-+#ifdef WITH_SOUP_2
-   SoupSession *session;
-+#endif
-   SoupMessage *message;
-   SoupAuth *auth;
-   gboolean paused;
-@@ -43,7 +45,9 @@ rest_proxy_auth_dispose (GObject *object)
-   RestProxyAuthPrivate *priv = ((RestProxyAuth*)object)->priv;
- 
-   g_clear_object (&priv->proxy);
-+#ifdef WITH_SOUP_2
-   g_clear_object (&priv->session);
-+#endif
-   g_clear_object (&priv->message);
-   g_clear_object (&priv->auth);
- 
-@@ -73,13 +77,17 @@ rest_proxy_auth_new (RestProxy *proxy,
-   RestProxyAuth *rest_auth;
- 
-   g_return_val_if_fail (REST_IS_PROXY (proxy), NULL);
-+#ifdef WITH_SOUP_2
-   g_return_val_if_fail (SOUP_IS_SESSION (session), NULL);
-+#endif
-   g_return_val_if_fail (SOUP_IS_MESSAGE (message), NULL);
-   g_return_val_if_fail (SOUP_IS_AUTH (soup_auth), NULL);
- 
-   rest_auth = REST_PROXY_AUTH (g_object_new (REST_TYPE_PROXY_AUTH, NULL));
-   rest_auth->priv->proxy = g_object_ref(proxy);
-+#ifdef WITH_SOUP_2
-   rest_auth->priv->session = g_object_ref(session);
-+#endif
-   rest_auth->priv->message = g_object_ref(message);
-   rest_auth->priv->auth = g_object_ref(soup_auth);
- 
-@@ -104,7 +112,9 @@ rest_proxy_auth_pause (RestProxyAuth *auth)
-       return;
- 
-   auth->priv->paused = TRUE;
-+#ifdef WITH_SOUP_2
-   soup_session_pause_message (auth->priv->session, auth->priv->message);
-+#endif
- }
- 
- /**
-@@ -128,7 +138,9 @@ rest_proxy_auth_unpause (RestProxyAuth *auth)
-   soup_auth_authenticate (auth->priv->auth, username, password);
-   g_free (username);
-   g_free (password);
-+#ifdef WITH_SOUP_2
-   soup_session_unpause_message (auth->priv->session, auth->priv->message);
-+#endif
-   auth->priv->paused = FALSE;
- }
- 
-@@ -146,7 +158,11 @@ rest_proxy_auth_cancel (RestProxyAuth *auth)
- {
-   g_return_if_fail (REST_IS_PROXY_AUTH (auth));
- 
-+#ifdef WITH_SOUP_2
-   soup_session_cancel_message (auth->priv->session, auth->priv->message, SOUP_STATUS_CANCELLED);
-+#else
-+  soup_auth_cancel (auth->priv->auth);
-+#endif
- }
- 
- G_GNUC_INTERNAL gboolean rest_proxy_auth_is_paused (RestProxyAuth *auth)
-diff --git a/rest/rest-proxy-call.c b/rest/rest-proxy-call.c
-index 2ab722f..62b00da 100644
---- a/rest/rest-proxy-call.c
-+++ b/rest/rest-proxy-call.c
-@@ -20,12 +20,14 @@
-  *
-  */
- 
-+#include <config.h>
- #include <rest/rest-proxy.h>
- #include <rest/rest-proxy-call.h>
- #include <rest/rest-params.h>
- #include <libsoup/soup.h>
- 
- #include "rest-private.h"
-+#include "rest-proxy-auth-private.h"
- #include "rest-proxy-call-private.h"
- 
- 
-@@ -38,12 +40,15 @@ struct _RestProxyCallAsyncClosure {
- };
- typedef struct _RestProxyCallAsyncClosure RestProxyCallAsyncClosure;
- 
-+#define READ_BUFFER_SIZE 8192
-+
- struct _RestProxyCallContinuousClosure {
-   RestProxyCall *call;
-   RestProxyCallContinuousCallback callback;
-   GObject *weak_object;
-   gpointer userdata;
-   SoupMessage *message;
-+  guchar buffer[READ_BUFFER_SIZE];
- };
- typedef struct _RestProxyCallContinuousClosure RestProxyCallContinuousClosure;
- 
-@@ -70,8 +75,7 @@ struct _RestProxyCallPrivate {
-   gchar *url;
- 
-   GHashTable *response_headers;
--  goffset length;
--  gchar *payload;
-+  GBytes *payload;
-   guint status_code;
-   gchar *status_message;
- 
-@@ -160,7 +164,7 @@ rest_proxy_call_finalize (GObject *object)
-   g_free (priv->method);
-   g_free (priv->function);
- 
--  g_free (priv->payload);
-+  g_clear_pointer (&priv->payload, g_bytes_unref);
-   g_free (priv->status_message);
- 
-   g_free (priv->url);
-@@ -546,14 +550,23 @@ _populate_headers_hash_table (const gchar *name,
-   g_hash_table_insert (headers, g_strdup (name), g_strdup (value));
- }
- 
-+#ifdef WITH_SOUP_2
- /* I apologise for this macro, but it saves typing ;-) */
- #define error_helper(x) g_set_error_literal(error, REST_PROXY_ERROR, x, message->reason_phrase)
-+#endif
- static gboolean
- _handle_error_from_message (SoupMessage *message, GError **error)
- {
--  if (message->status_code < 100)
-+  guint status_code;
-+  const char *reason_phrase;
-+
-+#ifdef WITH_SOUP_2
-+  status_code = message->status_code;
-+
-+  if (status_code < 100)
-   {
--    switch (message->status_code)
-+    g_clear_error (error);
-+    switch (status_code)
-     {
-       case SOUP_STATUS_CANCELLED:
-         error_helper (REST_PROXY_ERROR_CANCELLED);
-@@ -580,61 +593,84 @@ _handle_error_from_message (SoupMessage *message, GError **error)
-     }
-     return FALSE;
-   }
-+  reason_phrase = message->reason_phrase;
-+#else
-+  status_code = soup_message_get_status (message);
-+  reason_phrase = soup_message_get_reason_phrase (message);
-+#endif
- 
--  if (message->status_code >= 200 && message->status_code < 300)
-+  if (status_code >= 200 && status_code < 300)
-   {
-     return TRUE;
-   }
- 
-+  if (*error != NULL)
-+    return FALSE;
-+
-   /* If we are here we must be in some kind of HTTP error, lets try */
-   g_set_error_literal (error,
-                        REST_PROXY_ERROR,
--                       message->status_code,
--                       message->reason_phrase);
-+                       status_code,
-+                       reason_phrase);
-   return FALSE;
- }
- 
- static gboolean
--finish_call (RestProxyCall *call, SoupMessage *message, GError **error)
-+finish_call (RestProxyCall *call, SoupMessage *message, GBytes *payload, GError **error)
- {
-   RestProxyCallPrivate *priv = GET_PRIVATE (call);
-+  SoupMessageHeaders *response_headers;
- 
-   g_assert (call);
-   g_assert (message);
-+  g_assert (payload);
-+
-+#ifdef WITH_SOUP_2
-+  response_headers = message->response_headers;
-+#else
-+  response_headers = soup_message_get_response_headers (message);
-+#endif
- 
-   /* Convert the soup headers in to hash */
-   /* FIXME: Eeek..are you allowed duplicate headers? ... */
-   g_hash_table_remove_all (priv->response_headers);
--  soup_message_headers_foreach (message->response_headers,
-+  soup_message_headers_foreach (response_headers,
-       (SoupMessageHeadersForeachFunc)_populate_headers_hash_table,
-       priv->response_headers);
- 
--  priv->payload = g_memdup (message->response_body->data,
--                            message->response_body->length + 1);
--  priv->length = message->response_body->length;
-+  priv->payload = payload;
- 
-+#ifdef WITH_SOUP_2
-   priv->status_code = message->status_code;
-   priv->status_message = g_strdup (message->reason_phrase);
-+#else
-+  priv->status_code = soup_message_get_status (message);
-+  priv->status_message = g_strdup (soup_message_get_reason_phrase (message));
-+#endif
- 
-   return _handle_error_from_message (message, error);
- }
- 
- static void
--_continuous_call_message_completed_cb (SoupSession *session,
--                                       SoupMessage *message,
--                                       gpointer     userdata)
-+_continuous_call_message_completed (SoupMessage *message,
-+                                    GError      *error,
-+                                    gpointer     userdata)
- {
-   RestProxyCallContinuousClosure *closure;
-   RestProxyCall *call;
-   RestProxyCallPrivate *priv;
--  GError *error = NULL;
- 
-   closure = (RestProxyCallContinuousClosure *)userdata;
-   call = closure->call;
-   priv = GET_PRIVATE (call);
- 
-+#ifdef WITH_SOUP_2
-   priv->status_code = message->status_code;
-   priv->status_message = g_strdup (message->reason_phrase);
-+#else
-+  priv->status_code = soup_message_get_status (message);
-+  priv->status_message = g_strdup (soup_message_get_reason_phrase (message));
-+#endif
- 
-   _handle_error_from_message (message, &error);
- 
-@@ -657,6 +693,7 @@ _continuous_call_message_completed_cb (SoupSession *session,
- 
-   priv->cur_call_closure = NULL;
-   g_object_unref (closure->call);
-+  g_object_unref (message);
-   g_slice_free (RestProxyCallContinuousClosure, closure);
- }
- 
-@@ -715,6 +752,49 @@ set_url (RestProxyCall *call)
-   return TRUE;
- }
- 
-+#ifndef WITH_SOUP_2
-+static gboolean
-+authenticate (RestProxyCall *call,
-+              SoupAuth      *soup_auth,
-+              gboolean       retrying,
-+              SoupMessage   *message)
-+{
-+  RestProxyCallPrivate *priv = GET_PRIVATE (call);
-+  RestProxyAuth *rest_auth;
-+  gboolean try_auth;
-+
-+  rest_auth = rest_proxy_auth_new (priv->proxy, NULL, message, soup_auth);
-+  g_signal_emit_by_name (priv->proxy, "authenticate", rest_auth, retrying, &try_auth);
-+  if (try_auth && !rest_proxy_auth_is_paused (rest_auth)) {
-+    char *username, *password;
-+
-+    g_object_get (priv->proxy, "username", &username, "password", &password, NULL);
-+    soup_auth_authenticate (soup_auth, username, password);
-+    g_free (username);
-+    g_free (password);
-+  }
-+  g_object_unref (rest_auth);
-+
-+  return try_auth;
-+}
-+
-+static gboolean
-+accept_certificate (RestProxyCall        *call,
-+                    GTlsCertificate      *tls_certificate,
-+                    GTlsCertificateFlags *tls_errors,
-+                    SoupMessage          *message)
-+{
-+        RestProxyCallPrivate *priv = GET_PRIVATE (call);
-+        gboolean ssl_strict;
-+
-+        if (tls_errors == 0)
-+                return TRUE;
-+
-+        g_object_get (priv->proxy, "ssl-strict", &ssl_strict, NULL);
-+        return !ssl_strict;
-+}
-+#endif
-+
- static SoupMessage *
- prepare_message (RestProxyCall *call, GError **error_out)
- {
-@@ -722,6 +802,7 @@ prepare_message (RestProxyCall *call, GError **error_out)
-   RestProxyCallClass *call_class;
-   const gchar *user_agent;
-   SoupMessage *message;
-+  SoupMessageHeaders *request_headers;
-   GError *error = NULL;
- 
-   call_class = REST_PROXY_CALL_GET_CLASS (call);
-@@ -748,6 +829,9 @@ prepare_message (RestProxyCall *call, GError **error_out)
-     gchar *content;
-     gchar *content_type;
-     gsize content_len;
-+#ifndef WITH_SOUP_2
-+    GBytes *body;
-+#endif
- 
-     if (!call_class->serialize_params (call, &content_type,
-                                        &content, &content_len, &error))
-@@ -780,8 +864,14 @@ prepare_message (RestProxyCall *call, GError **error_out)
-                              "Could not parse URI");
-         return NULL;
-     }
-+#ifdef WITH_SOUP_2
-     soup_message_set_request (message, content_type,
-                               SOUP_MEMORY_TAKE, content, content_len);
-+#else
-+    body = g_bytes_new_take (content, content_len);
-+    soup_message_set_request_body_from_bytes (message, content_type, body);
-+    g_bytes_unref (body);
-+#endif
- 
-     g_free (content_type);
-   } else if (rest_params_are_strings (priv->params)) {
-@@ -798,9 +888,15 @@ prepare_message (RestProxyCall *call, GError **error_out)
- 
-     hash = rest_params_as_string_hash_table (priv->params);
- 
-+#ifdef WITH_SOUP_2
-     message = soup_form_request_new_from_hash (priv->method,
-                                                priv->url,
-                                                hash);
-+#else
-+    message = soup_message_new_from_encoded_form (priv->method,
-+                                                  priv->url,
-+                                                  soup_form_encode_hash (hash));
-+#endif
- 
-     g_hash_table_unref (hash);
- 
-@@ -827,19 +923,28 @@ prepare_message (RestProxyCall *call, GError **error_out)
-       if (rest_param_is_string (param)) {
-         soup_multipart_append_form_string (mp, name, rest_param_get_content (param));
-       } else {
--        SoupBuffer *sb;
--
--        sb = soup_buffer_new_with_owner (rest_param_get_content (param),
--                                         rest_param_get_content_length (param),
--                                         rest_param_ref (param),
--                                         (GDestroyNotify)rest_param_unref);
-+#ifdef WITH_SOUP_2
-+        SoupBuffer *sb = soup_buffer_new_with_owner (rest_param_get_content (param),
-+                                                     rest_param_get_content_length (param),
-+                                                     rest_param_ref (param),
-+                                                     (GDestroyNotify)rest_param_unref);
-+#else
-+        GBytes *sb = g_bytes_new_with_free_func (rest_param_get_content (param),
-+                                                 rest_param_get_content_length (param),
-+                                                 (GDestroyNotify)rest_param_unref,
-+                                                 rest_param_ref (param));
-+#endif
- 
-         soup_multipart_append_form_file (mp, name,
-                                          rest_param_get_file_name (param),
-                                          rest_param_get_content_type (param),
-                                          sb);
- 
-+#ifdef WITH_SOUP_2
-         soup_buffer_free (sb);
-+#else
-+        g_bytes_unref (sb);
-+#endif
-       }
-     }
- 
-@@ -853,19 +958,36 @@ prepare_message (RestProxyCall *call, GError **error_out)
-         return NULL;
-     }
- 
-+#ifdef WITH_SOUP_2
-     message = soup_form_request_new_from_multipart (priv->url, mp);
-+#else
-+    message = soup_message_new_from_multipart (priv->url, mp);
-+#endif
- 
-     soup_multipart_free (mp);
-   }
- 
-+#ifdef WITH_SOUP_2
-+  request_headers = message->request_headers;
-+#else
-+  request_headers = soup_message_get_request_headers (message);
-+  g_signal_connect_swapped (message, "authenticate",
-+                            G_CALLBACK (authenticate),
-+                            call);
-+  g_signal_connect_swapped (message, "accept-certificate",
-+                            G_CALLBACK (accept_certificate),
-+                            call);
-+#endif
-+
-+
-   /* Set the user agent, if one was set in the proxy */
-   user_agent = rest_proxy_get_user_agent (priv->proxy);
-   if (user_agent) {
--    soup_message_headers_append (message->request_headers, "User-Agent", user_agent);
-+    soup_message_headers_append (request_headers, "User-Agent", user_agent);
-   }
- 
-   /* Set the headers */
--  g_hash_table_foreach (priv->headers, set_header, message->request_headers);
-+  g_hash_table_foreach (priv->headers, set_header, request_headers);
- 
-   return message;
- }
-@@ -878,17 +1000,17 @@ _call_message_call_cancelled_cb (GCancellable  *cancellable,
- }
- 
- static void
--_call_message_call_completed_cb (SoupSession *session,
--                                 SoupMessage *message,
-+_call_message_call_completed_cb (SoupMessage *message,
-+                                 GBytes      *payload,
-+                                 GError      *error,
-                                  gpointer     user_data)
- {
-   GTask *task = user_data;
-   RestProxyCall *call;
--  GError *error = NULL;
- 
-   call = REST_PROXY_CALL (g_task_get_source_object (task));
- 
--  finish_call (call, message, &error);
-+  finish_call (call, message, payload, &error);
- 
-   if (error != NULL)
-     g_task_return_error (task, error);
-@@ -938,6 +1060,7 @@ rest_proxy_call_invoke_async (RestProxyCall      *call,
- 
-   _rest_proxy_queue_message (priv->proxy,
-                              message,
-+                             priv->cancellable,
-                              _call_message_call_completed_cb,
-                              task);
- }
-@@ -962,16 +1085,55 @@ rest_proxy_call_invoke_finish (RestProxyCall  *call,
- }
- 
- static void
--_continuous_call_message_got_chunk_cb (SoupMessage                    *msg,
--                                       SoupBuffer                     *chunk,
--                                       RestProxyCallContinuousClosure *closure)
-+_continuous_call_read_cb (GObject      *source,
-+                          GAsyncResult *result,
-+                          gpointer      user_data)
- {
-+  GInputStream *stream = G_INPUT_STREAM (source);
-+  RestProxyCallContinuousClosure *closure = user_data;
-+  RestProxyCallPrivate *priv = GET_PRIVATE (closure->call);
-+  gssize bytes_read;
-+  GError *error = NULL;
-+
-+  bytes_read = g_input_stream_read_finish (stream, result, &error);
-+  if (bytes_read <= 0)
-+    {
-+      _continuous_call_message_completed (closure->message, error, user_data);
-+      return;
-+    }
-+
-   closure->callback (closure->call,
--                     chunk->data,
--                     chunk->length,
-+                     (gconstpointer)closure->buffer,
-+                     bytes_read,
-                      NULL,
-                      closure->weak_object,
-                      closure->userdata);
-+
-+  g_input_stream_read_async (stream, closure->buffer, READ_BUFFER_SIZE, G_PRIORITY_DEFAULT,
-+                             priv->cancellable, _continuous_call_read_cb, closure);
-+}
-+
-+static void
-+_continuous_call_message_sent_cb (GObject      *source,
-+                                  GAsyncResult *result,
-+                                  gpointer      user_data)
-+{
-+  RestProxy *proxy = REST_PROXY (source);
-+  RestProxyCallContinuousClosure *closure = user_data;
-+  RestProxyCallPrivate *priv = GET_PRIVATE (closure->call);
-+  GInputStream *stream;
-+  GError *error = NULL;
-+
-+  stream = _rest_proxy_send_message_finish (proxy, result, &error);
-+  if (!stream)
-+    {
-+      _continuous_call_message_completed (closure->message, error, user_data);
-+      return;
-+    }
-+
-+  g_input_stream_read_async (stream, closure->buffer, READ_BUFFER_SIZE, G_PRIORITY_DEFAULT,
-+                             priv->cancellable, _continuous_call_read_cb, closure);
-+  g_object_unref (stream);
- }
- 
- 
-@@ -1021,9 +1183,6 @@ rest_proxy_call_continuous (RestProxyCall                    *call,
-   if (message == NULL)
-     return FALSE;
- 
--  /* Must turn off accumulation */
--  soup_message_body_set_accumulate (message->response_body, FALSE);
--
-   closure = g_slice_new0 (RestProxyCallContinuousClosure);
-   closure->call = g_object_ref (call);
-   closure->callback = callback;
-@@ -1041,33 +1200,29 @@ rest_proxy_call_continuous (RestProxyCall                    *call,
-         closure);
-   }
- 
--  g_signal_connect (message,
--                    "got-chunk",
--                    (GCallback)_continuous_call_message_got_chunk_cb,
--                    closure);
--
--  _rest_proxy_queue_message (priv->proxy,
--                             message,
--                             _continuous_call_message_completed_cb,
--                             closure);
-+  _rest_proxy_send_message_async (priv->proxy,
-+                                  message,
-+                                  priv->cancellable,
-+                                  _continuous_call_message_sent_cb,
-+                                  closure);
-   return TRUE;
- }
- 
- static void
--_upload_call_message_completed_cb (SoupSession *session,
--                                   SoupMessage *message,
-+_upload_call_message_completed_cb (SoupMessage *message,
-+                                   GBytes      *payload,
-+                                   GError      *error,
-                                    gpointer     user_data)
- {
-   RestProxyCall *call;
-   RestProxyCallPrivate *priv;
--  GError *error = NULL;
-   RestProxyCallUploadClosure *closure;
- 
-   closure = (RestProxyCallUploadClosure *) user_data;
-   call = closure->call;
-   priv = GET_PRIVATE (call);
- 
--  finish_call (call, message, &error);
-+  finish_call (call, message, payload, &error);
- 
-   closure->callback (closure->call,
-                      closure->uploaded,
-@@ -1093,14 +1248,25 @@ _upload_call_message_completed_cb (SoupSession *session,
- 
- static void
- _upload_call_message_wrote_data_cb (SoupMessage                *msg,
-+#ifdef WITH_SOUP_2
-                                     SoupBuffer                 *chunk,
-+#else
-+                                    gsize                       chunk_size,
-+#endif
-                                     RestProxyCallUploadClosure *closure)
- {
--  closure->uploaded = closure->uploaded + chunk->length;
-+#ifdef WITH_SOUP_2
-+  gsize chunk_size = chunk->length;
-+  goffset content_length = msg->request_body->length;
-+#else
-+  goffset content_length = soup_message_headers_get_content_length (soup_message_get_request_headers (msg));
-+#endif
- 
--  if (closure->uploaded < msg->request_body->length)
-+  closure->uploaded = closure->uploaded + chunk_size;
-+
-+  if (closure->uploaded < content_length)
-     closure->callback (closure->call,
--                       msg->request_body->length,
-+                       content_length,
-                        closure->uploaded,
-                        NULL,
-                        closure->weak_object,
-@@ -1178,6 +1344,7 @@ rest_proxy_call_upload (RestProxyCall                *call,
- 
-   _rest_proxy_queue_message (priv->proxy,
-                              message,
-+                             priv->cancellable,
-                              _upload_call_message_completed_cb,
-                              closure);
-   return TRUE;
-@@ -1206,6 +1373,10 @@ rest_proxy_call_cancel (RestProxyCall *call)
-   if (priv->cancellable)
-     {
-       g_signal_handler_disconnect (priv->cancellable, priv->cancel_sig);
-+#ifndef WITH_SOUP_2
-+      if (!g_cancellable_is_cancelled (priv->cancellable))
-+              g_cancellable_cancel (priv->cancellable);
-+#endif
-       g_clear_object (&priv->cancellable);
-     }
- 
-@@ -1240,6 +1411,7 @@ rest_proxy_call_sync (RestProxyCall *call,
-   RestProxyCallPrivate *priv = GET_PRIVATE (call);
-   SoupMessage *message;
-   gboolean ret;
-+  GBytes *payload;
- 
-   g_return_val_if_fail (REST_IS_PROXY_CALL (call), FALSE);
- 
-@@ -1247,9 +1419,9 @@ rest_proxy_call_sync (RestProxyCall *call,
-   if (!message)
-     return FALSE;
- 
--  _rest_proxy_send_message (priv->proxy, message);
-+  payload = _rest_proxy_send_message (priv->proxy, message, priv->cancellable, error_out);
- 
--  ret = finish_call (call, message, error_out);
-+  ret = finish_call (call, message, payload, error_out);
- 
-   g_object_unref (message);
- 
-@@ -1314,9 +1486,16 @@ rest_proxy_call_get_response_headers (RestProxyCall *call)
- goffset
- rest_proxy_call_get_payload_length (RestProxyCall *call)
- {
-+  GBytes *payload;
-+
-   g_return_val_if_fail (REST_IS_PROXY_CALL (call), 0);
- 
--  return GET_PRIVATE (call)->length;
-+  payload = GET_PRIVATE (call)->payload;
-+#ifdef WITH_SOUP_2
-+  return payload ? g_bytes_get_size (payload) - 1 : 0;
-+#else
-+  return payload ? g_bytes_get_size (payload) : 0;
-+#endif
- }
- 
- /**
-@@ -1331,9 +1510,12 @@ rest_proxy_call_get_payload_length (RestProxyCall *call)
- const gchar *
- rest_proxy_call_get_payload (RestProxyCall *call)
- {
-+  GBytes *payload;
-+
-   g_return_val_if_fail (REST_IS_PROXY_CALL (call), NULL);
- 
--  return GET_PRIVATE (call)->payload;
-+  payload = GET_PRIVATE (call)->payload;
-+  return payload ? g_bytes_get_data (payload, NULL) : NULL;
- }
- 
- /**
-diff --git a/rest/rest-proxy.c b/rest/rest-proxy.c
-index 80972a3..171f6cb 100644
---- a/rest/rest-proxy.c
-+++ b/rest/rest-proxy.c
-@@ -45,6 +45,9 @@ struct _RestProxyPrivate {
-   SoupSession *session;
-   gboolean disable_cookies;
-   char *ssl_ca_file;
-+#ifndef WITH_SOUP_2
-+  gboolean ssl_strict;
-+#endif
- };
- 
- 
-@@ -116,11 +119,15 @@ rest_proxy_get_property (GObject   *object,
-       g_value_set_string (value, priv->password);
-       break;
-     case PROP_SSL_STRICT: {
-+#ifdef WITH_SOUP_2
-       gboolean ssl_strict;
-       g_object_get (G_OBJECT(priv->session),
-                     "ssl-strict", &ssl_strict,
-                     NULL);
-       g_value_set_boolean (value, ssl_strict);
-+#else
-+      g_value_set_boolean (value, priv->ssl_strict);
-+#endif
-       break;
-     }
-     case PROP_SSL_CA_FILE:
-@@ -172,9 +179,13 @@ rest_proxy_set_property (GObject      *object,
-       priv->password = g_value_dup_string (value);
-       break;
-     case PROP_SSL_STRICT:
-+#ifdef WITH_SOUP_2
-       g_object_set (G_OBJECT(priv->session),
-                     "ssl-strict", g_value_get_boolean (value),
-                     NULL);
-+#else
-+      priv->ssl_strict = g_value_get_boolean (value);
-+#endif
-       break;
-     case PROP_SSL_CA_FILE:
-       g_free(priv->ssl_ca_file);
-@@ -207,6 +218,7 @@ default_authenticate_cb (RestProxy *self,
-   return !retrying;
- }
- 
-+#ifdef WITH_SOUP_2
- static void
- authenticate (RestProxy   *self,
-               SoupMessage *msg,
-@@ -224,6 +236,7 @@ authenticate (RestProxy   *self,
-     soup_auth_authenticate (soup_auth, priv->username, priv->password);
-   g_object_unref (G_OBJECT (rest_auth));
- }
-+#endif
- 
- static void
- rest_proxy_constructed (GObject *object)
-@@ -238,14 +251,20 @@ rest_proxy_constructed (GObject *object)
-   }
- 
-   if (REST_DEBUG_ENABLED(PROXY)) {
-+#ifdef WITH_SOUP_2
-     SoupSessionFeature *logger = (SoupSessionFeature*)soup_logger_new (SOUP_LOGGER_LOG_BODY, 0);
-+#else
-+    SoupSessionFeature *logger = (SoupSessionFeature*)soup_logger_new (SOUP_LOGGER_LOG_HEADERS);
-+#endif
-     soup_session_add_feature (priv->session, logger);
-     g_object_unref (logger);
-   }
- 
-+#ifdef WITH_SOUP_2
-   /* session lifetime is same as self, no need to keep signalid */
-   g_signal_connect_swapped (priv->session, "authenticate",
-                             G_CALLBACK(authenticate), object);
-+#endif
- }
- 
- static void
-@@ -391,23 +410,62 @@ rest_proxy_class_init (RestProxyClass *klass)
-   proxy_class->authenticate = default_authenticate_cb;
- }
- 
-+static gboolean
-+transform_ssl_ca_file_to_tls_database (GBinding     *binding,
-+                                       const GValue *from_value,
-+                                       GValue       *to_value,
-+                                       gpointer      user_data)
-+{
-+  g_value_take_object (to_value,
-+                       g_tls_file_database_new (g_value_get_string (from_value), NULL));
-+  return TRUE;
-+}
-+
-+static gboolean
-+transform_tls_database_to_ssl_ca_file (GBinding     *binding,
-+                                       const GValue *from_value,
-+                                       GValue       *to_value,
-+                                       gpointer      user_data)
-+{
-+  GTlsDatabase *tls_database;
-+  char *path = NULL;
-+
-+  tls_database = g_value_get_object (from_value);
-+  if (tls_database)
-+    g_object_get (tls_database, "anchors", &path, NULL);
-+  g_value_take_string (to_value, path);
-+  return TRUE;
-+}
-+
- static void
- rest_proxy_init (RestProxy *self)
- {
-   RestProxyPrivate *priv = GET_PRIVATE (self);
-+  GTlsDatabase *tls_database;
-+
-+#ifndef WITH_SOUP_2
-+  priv->ssl_strict = TRUE;
-+#endif
- 
-   priv->session = soup_session_new ();
- 
- #ifdef REST_SYSTEM_CA_FILE
-   /* with ssl-strict (defaults TRUE) setting ssl-ca-file forces all
-    * certificates to be trusted */
--  g_object_set (priv->session,
--                "ssl-ca-file", REST_SYSTEM_CA_FILE,
--                NULL);
-+  tls_database = g_tls_file_database_new (REST_SYSTEM_CA_FILE, NULL);
-+  if (tls_database) {
-+          g_object_set (priv->session,
-+                        "tls-database", tls_database,
-+                        NULL);
-+          g_object_unref (tls_database);
-+  }
- #endif
--  g_object_bind_property (self, "ssl-ca-file",
--                          priv->session, "ssl-ca-file",
--                          G_BINDING_BIDIRECTIONAL);
-+  g_object_bind_property_full (self, "ssl-ca-file",
-+                               priv->session, "tls-database",
-+                               G_BINDING_BIDIRECTIONAL,
-+                               transform_ssl_ca_file_to_tls_database,
-+                               transform_tls_database_to_ssl_ca_file,
-+                               NULL, NULL);
- }
- 
- /**
-@@ -689,27 +747,127 @@ rest_proxy_simple_run (RestProxy *proxy,
-   return ret;
- }
- 
-+typedef struct {
-+  RestMessageFinishedCallback callback;
-+  gpointer user_data;
-+} RestMessageQueueData;
-+
-+#ifdef WITH_SOUP_2
-+static void
-+message_finished_cb (SoupSession *session,
-+                     SoupMessage *message,
-+                     gpointer     user_data)
-+{
-+  RestMessageQueueData *data = user_data;
-+  GBytes *body;
-+  GError *error = NULL;
-+
-+  body = g_bytes_new (message->response_body->data,
-+                      message->response_body->length + 1);
-+  data->callback (message, body, error, data->user_data);
-+  g_free (data);
-+}
-+#else
-+static void
-+message_send_and_read_ready_cb (GObject      *source,
-+                                GAsyncResult *result,
-+                                gpointer      user_data)
-+{
-+  SoupSession *session = SOUP_SESSION (source);
-+  RestMessageQueueData *data = user_data;
-+  GBytes *body;
-+  GError *error = NULL;
-+
-+  body = soup_session_send_and_read_finish (session, result, &error);
-+  data->callback (soup_session_get_async_result_message (session, result), body, error, data->user_data);
-+  g_free (data);
-+}
-+#endif
-+
- void
--_rest_proxy_queue_message (RestProxy   *proxy,
--                           SoupMessage *message,
--                           SoupSessionCallback callback,
--                           gpointer user_data)
-+_rest_proxy_queue_message (RestProxy                  *proxy,
-+                           SoupMessage                *message,
-+                           GCancellable               *cancellable,
-+                           RestMessageFinishedCallback callback,
-+                           gpointer                    user_data)
- {
-   RestProxyPrivate *priv = GET_PRIVATE (proxy);
-+  RestMessageQueueData *data;
- 
-   g_return_if_fail (REST_IS_PROXY (proxy));
-   g_return_if_fail (SOUP_IS_MESSAGE (message));
- 
-+  data = g_new0 (RestMessageQueueData, 1);
-+  data->callback = callback;
-+  data->user_data = user_data;
-+
-+#ifdef WITH_SOUP_2
-   soup_session_queue_message (priv->session,
-                               message,
--                              callback,
--                              user_data);
-+                              message_finished_cb,
-+                              data);
-+#else
-+  soup_session_send_and_read_async (priv->session,
-+                                    message,
-+                                    G_PRIORITY_DEFAULT,
-+                                    cancellable,
-+                                    message_send_and_read_ready_cb,
-+                                    data);
-+#endif
-+}
-+
-+static void
-+message_send_ready_cb (GObject      *source,
-+                       GAsyncResult *result,
-+                       gpointer      user_data)
-+{
-+  SoupSession *session = SOUP_SESSION (source);
-+  GTask *task = user_data;
-+  GInputStream *stream;
-+  GError *error = NULL;
-+
-+  stream = soup_session_send_finish (session, result, &error);
-+  if (stream)
-+    g_task_return_pointer (task, stream, g_object_unref);
-+  else
-+    g_task_return_error (task, error);
-+  g_object_unref (task);
-+}
-+
-+void
-+_rest_proxy_send_message_async (RestProxy          *proxy,
-+                                SoupMessage        *message,
-+                                GCancellable       *cancellable,
-+                                GAsyncReadyCallback callback,
-+                                gpointer            user_data)
-+{
-+  RestProxyPrivate *priv = GET_PRIVATE (proxy);
-+  GTask *task;
-+
-+  task = g_task_new (proxy, cancellable, callback, user_data);
-+  soup_session_send_async (priv->session,
-+                           message,
-+#ifndef WITH_SOUP_2
-+                           G_PRIORITY_DEFAULT,
-+#endif
-+                           cancellable,
-+                           message_send_ready_cb,
-+                           task);
-+}
-+
-+GInputStream *
-+_rest_proxy_send_message_finish (RestProxy    *proxy,
-+                                 GAsyncResult *result,
-+                                 GError      **error)
-+{
-+  return g_task_propagate_pointer (G_TASK (result), error);
- }
- 
- void
- _rest_proxy_cancel_message (RestProxy   *proxy,
-                             SoupMessage *message)
- {
-+#ifdef WITH_SOUP_2
-   RestProxyPrivate *priv = GET_PRIVATE (proxy);
- 
-   g_return_if_fail (REST_IS_PROXY (proxy));
-@@ -718,16 +876,31 @@ _rest_proxy_cancel_message (RestProxy   *proxy,
-   soup_session_cancel_message (priv->session,
-                                message,
-                                SOUP_STATUS_CANCELLED);
-+#endif
- }
- 
--guint
--_rest_proxy_send_message (RestProxy   *proxy,
--                          SoupMessage *message)
-+GBytes *
-+_rest_proxy_send_message (RestProxy    *proxy,
-+                          SoupMessage  *message,
-+                          GCancellable *cancellable,
-+                          GError      **error)
- {
-   RestProxyPrivate *priv = GET_PRIVATE (proxy);
-+  GBytes *body;
- 
--  g_return_val_if_fail (REST_IS_PROXY (proxy), 0);
--  g_return_val_if_fail (SOUP_IS_MESSAGE (message), 0);
-+  g_return_val_if_fail (REST_IS_PROXY (proxy), NULL);
-+  g_return_val_if_fail (SOUP_IS_MESSAGE (message), NULL);
-+
-+#ifdef WITH_SOUP_2
-+  soup_session_send_message (priv->session, message);
-+  body = g_bytes_new (message->response_body->data,
-+                      message->response_body->length + 1);
-+#else
-+  body = soup_session_send_and_read (priv->session,
-+                                     message,
-+                                     cancellable,
-+                                     error);
-+#endif
- 
--  return soup_session_send_message (priv->session, message);
-+  return body;
- }
-diff --git a/tests/custom-serialize.c b/tests/custom-serialize.c
-index c3fde93..01b3a56 100644
---- a/tests/custom-serialize.c
-+++ b/tests/custom-serialize.c
-@@ -88,22 +88,40 @@ custom_proxy_call_init (CustomProxyCall *self)
- }
- 
- static void
-+#ifdef WITH_SOUP_2
- server_callback (SoupServer *server, SoupMessage *msg,
-                  const char *path, GHashTable *query,
-                  SoupClientContext *client, gpointer user_data)
-+#else
-+server_callback (SoupServer *server, SoupServerMessage *msg,
-+                 const char *path, GHashTable *query, gpointer user_data)
-+#endif
- {
-   if (g_str_equal (path, "/ping")) {
-     const char *content_type = NULL;
-+#ifdef WITH_SOUP_2
-     SoupMessageHeaders *headers = msg->request_headers;
-     SoupMessageBody *body = msg->request_body;
-+#else
-+    SoupMessageHeaders *headers = soup_server_message_get_request_headers (msg);
-+    SoupMessageBody *body = soup_server_message_get_request_body (msg);
-+#endif
-     content_type = soup_message_headers_get_content_type (headers, NULL);
-     g_assert_cmpstr (content_type, ==, "application/json");
- 
-     g_assert_cmpstr (body->data, ==, "{}");
- 
-+#ifdef WITH_SOUP_2
-     soup_message_set_status (msg, SOUP_STATUS_OK);
-+#else
-+    soup_server_message_set_status (msg, SOUP_STATUS_OK, NULL);
-+#endif
-   } else {
-+#ifdef WITH_SOUP_2
-     soup_message_set_status (msg, SOUP_STATUS_NOT_IMPLEMENTED);
-+#else
-+    soup_server_message_set_status (msg, SOUP_STATUS_NOT_IMPLEMENTED, NULL);
-+#endif
-   }
- }
- 
-diff --git a/tests/proxy-continuous.c b/tests/proxy-continuous.c
-index 8f4b7a8..7967bbd 100644
---- a/tests/proxy-continuous.c
-+++ b/tests/proxy-continuous.c
-@@ -39,9 +39,15 @@ static SoupServer *server;
- static gboolean
- send_chunks (gpointer user_data)
- {
--  SoupMessage *msg = SOUP_MESSAGE (user_data);
-   guint i;
-   guint8 data[SIZE_CHUNK];
-+#ifdef WITH_SOUP_2
-+  SoupMessage *msg = SOUP_MESSAGE (user_data);
-+  SoupMessageBody *response_body = msg->response_body;
-+#else
-+  SoupServerMessage *msg = SOUP_SERVER_MESSAGE (user_data);
-+  SoupMessageBody *response_body = soup_server_message_get_response_body (msg);
-+#endif
- 
-   for (i = 0; i < SIZE_CHUNK; i++)
-   {
-@@ -49,12 +55,12 @@ send_chunks (gpointer user_data)
-     server_count++;
-   }
- 
--  soup_message_body_append (msg->response_body, SOUP_MEMORY_COPY, data, SIZE_CHUNK);
-+  soup_message_body_append (response_body, SOUP_MEMORY_COPY, data, SIZE_CHUNK);
-   soup_server_unpause_message (server, msg);
- 
-   if (server_count == NUM_CHUNKS * SIZE_CHUNK)
-   {
--    soup_message_body_complete (msg->response_body);
-+    soup_message_body_complete (response_body);
-     return FALSE;
-   } else {
-     return TRUE;
-@@ -62,13 +68,28 @@ send_chunks (gpointer user_data)
- }
- 
- static void
-+#ifdef WITH_SOUP_2
- server_callback (SoupServer *server, SoupMessage *msg,
-                  const char *path, GHashTable *query,
-                  SoupClientContext *client, gpointer user_data)
-+#else
-+server_callback (SoupServer *server, SoupServerMessage *msg,
-+                 const char *path, GHashTable *query, gpointer user_data)
-+#endif
- {
-+#ifdef WITH_SOUP_2
-+  SoupMessageHeaders *response_headers = msg->response_headers;
-+#else
-+  SoupMessageHeaders *response_headers = soup_server_message_get_response_headers (msg);
-+#endif
-+
-   g_assert_cmpstr (path, ==, "/stream");
-+#ifdef WITH_SOUP_2
-   soup_message_set_status (msg, SOUP_STATUS_OK);
--  soup_message_headers_set_encoding (msg->response_headers,
-+#else
-+  soup_server_message_set_status (msg, SOUP_STATUS_OK, NULL);
-+#endif
-+  soup_message_headers_set_encoding (response_headers,
-                                      SOUP_ENCODING_CHUNKED);
-   soup_server_pause_message (server, msg);
- 
-@@ -142,13 +163,21 @@ continuous ()
-   uris = soup_server_get_uris (server);
-   g_assert (g_slist_length (uris) > 0);
- 
-+#ifdef WITH_SOUP_2
-   url = soup_uri_to_string (uris->data, FALSE);
-+#else
-+  url = g_uri_to_string (uris->data);
-+#endif
- 
-   loop = g_main_loop_new (NULL, FALSE);
- 
-   proxy = rest_proxy_new (url, FALSE);
-   stream_test (proxy);
-+#ifdef WITH_SOUP_2
-   g_slist_free_full (uris, (GDestroyNotify)soup_uri_free);
-+#else
-+  g_slist_free_full (uris, (GDestroyNotify)g_uri_unref);
-+#endif
- 
-   g_main_loop_run (loop);
-   g_free (url);
-diff --git a/tests/proxy.c b/tests/proxy.c
-index 89a9325..652c600 100644
---- a/tests/proxy.c
-+++ b/tests/proxy.c
-@@ -49,20 +49,35 @@ SoupServer *server;
- GMainLoop *server_loop;
- 
- static void
-+#ifdef WITH_SOUP_2
- server_callback (SoupServer *server, SoupMessage *msg,
-                  const char *path, GHashTable *query,
-                  SoupClientContext *client, gpointer user_data)
-+#else
-+server_callback (SoupServer *server, SoupServerMessage *msg,
-+                 const char *path, GHashTable *query, gpointer user_data)
-+#endif
- {
-   if (g_str_equal (path, "/ping")) {
-+#ifdef WITH_SOUP_2
-     soup_message_set_status (msg, SOUP_STATUS_OK);
-+#else
-+    soup_server_message_set_status (msg, SOUP_STATUS_OK, NULL);
-+#endif
-   }
-   else if (g_str_equal (path, "/echo")) {
-     const char *value;
- 
-     value = g_hash_table_lookup (query, "value");
-+#ifdef WITH_SOUP_2
-     soup_message_set_response (msg, "text/plain", SOUP_MEMORY_COPY,
-                                value, strlen (value));
-     soup_message_set_status (msg, SOUP_STATUS_OK);
-+#else
-+    soup_server_message_set_response (msg, "text/plain", SOUP_MEMORY_COPY,
-+                                      value, strlen (value));
-+    soup_server_message_set_status (msg, SOUP_STATUS_OK, NULL);
-+#endif
-   }
-   else if (g_str_equal (path, "/reverse")) {
-     char *value;
-@@ -70,9 +85,15 @@ server_callback (SoupServer *server, SoupMessage *msg,
-     value = g_strdup (g_hash_table_lookup (query, "value"));
-     g_strreverse (value);
- 
-+#ifdef WITH_SOUP_2
-     soup_message_set_response (msg, "text/plain", SOUP_MEMORY_TAKE,
-                                value, strlen (value));
-     soup_message_set_status (msg, SOUP_STATUS_OK);
-+#else
-+    soup_server_message_set_response (msg, "text/plain", SOUP_MEMORY_TAKE,
-+                                       value, strlen (value));
-+    soup_server_message_set_status (msg, SOUP_STATUS_OK, NULL);
-+#endif
-   }
-   else if (g_str_equal (path, "/status")) {
-     const char *value;
-@@ -81,25 +102,61 @@ server_callback (SoupServer *server, SoupMessage *msg,
-     value = g_hash_table_lookup (query, "status");
-     if (value) {
-       status = atoi (value);
-+#ifdef WITH_SOUP_2
-       soup_message_set_status (msg, status ?: SOUP_STATUS_INTERNAL_SERVER_ERROR);
-+#else
-+      soup_server_message_set_status (msg, status ?: SOUP_STATUS_INTERNAL_SERVER_ERROR, NULL);
-+#endif
-     } else {
-+#ifdef WITH_SOUP_2
-       soup_message_set_status (msg, SOUP_STATUS_INTERNAL_SERVER_ERROR);
-+#else
-+      soup_server_message_set_status (msg, SOUP_STATUS_INTERNAL_SERVER_ERROR, NULL);
-+#endif
-     }
-   }
-   else if (g_str_equal (path, "/useragent/none")) {
--    if (soup_message_headers_get (msg->request_headers, "User-Agent") == NULL) {
-+#ifdef WITH_SOUP_2
-+    SoupMessageHeaders *request_headers = msg->request_headers;
-+#else
-+    SoupMessageHeaders *request_headers = soup_server_message_get_request_headers (msg);
-+#endif
-+
-+    if (soup_message_headers_get (request_headers, "User-Agent") == NULL) {
-+#ifdef WITH_SOUP_2
-       soup_message_set_status (msg, SOUP_STATUS_OK);
-+#else
-+      soup_server_message_set_status (msg, SOUP_STATUS_OK, NULL);
-+#endif
-     } else {
-+#ifdef WITH_SOUP_2
-       soup_message_set_status (msg, SOUP_STATUS_EXPECTATION_FAILED);
-+#else
-+      soup_server_message_set_status (msg, SOUP_STATUS_EXPECTATION_FAILED, NULL);
-+#endif
-     }
-   }
-   else if (g_str_equal (path, "/useragent/testsuite")) {
-+#ifdef WITH_SOUP_2
-+    SoupMessageHeaders *request_headers = msg->request_headers;
-+#else
-+    SoupMessageHeaders *request_headers = soup_server_message_get_request_headers (msg);
-+#endif
-     const char *value;
--    value = soup_message_headers_get (msg->request_headers, "User-Agent");
-+    value = soup_message_headers_get (request_headers, "User-Agent");
-     if (g_strcmp0 (value, "TestSuite-1.0") == 0) {
-+#ifdef WITH_SOUP_2
-       soup_message_set_status (msg, SOUP_STATUS_OK);
-+#else
-+      soup_server_message_set_status (msg, SOUP_STATUS_OK, NULL);
-+#endif
-     } else {
-+#ifdef WITH_SOUP_2
-       soup_message_set_status (msg, SOUP_STATUS_EXPECTATION_FAILED);
-+#else
-+      soup_server_message_set_status (msg, SOUP_STATUS_EXPECTATION_FAILED, NULL);
-+#endif
-+
-     }
-   }
- }
-@@ -325,7 +382,7 @@ main (int argc, char **argv)
-   char *url;
-   RestProxy *proxy;
- 
--  server = soup_server_new ("", NULL);
-+  server = soup_server_new (NULL);
-   g_thread_new ("Server Thread", server_thread_func, NULL);
- 
-   url = g_strdup_printf ("http://127.0.0.1:%d/", PORT);
-diff --git a/tests/threaded.c b/tests/threaded.c
-index a251900..411361c 100644
---- a/tests/threaded.c
-+++ b/tests/threaded.c
-@@ -36,13 +36,22 @@ GMainLoop *main_loop;
- SoupServer *server;
- 
- static void
-+#ifdef WITH_SOUP_2
- server_callback (SoupServer *server, SoupMessage *msg,
-                  const char *path, GHashTable *query,
-                  SoupClientContext *client, gpointer user_data)
-+#else
-+server_callback (SoupServer *server, SoupServerMessage *msg,
-+                 const char *path, GHashTable *query, gpointer user_data)
-+#endif
- {
-   g_assert_cmpstr (path, ==, "/ping");
- 
-+#ifdef WITH_SOUP_2
-   soup_message_set_status (msg, SOUP_STATUS_OK);
-+#else
-+  soup_server_message_set_status (msg, SOUP_STATUS_OK, NULL);
-+#endif
-   g_atomic_int_add (&threads_done, 1);
- 
-   if (threads_done == N_THREADS) {
-@@ -96,7 +105,11 @@ static void ping ()
-   uris = soup_server_get_uris (server);
-   g_assert (g_slist_length (uris) > 0);
- 
-+#ifdef WITH_SOUP_2
-   url = soup_uri_to_string (uris->data, FALSE);
-+#else
-+  url = g_uri_to_string (uris->data);
-+#endif
- 
-   main_loop = g_main_loop_new (NULL, TRUE);
- 
-@@ -109,7 +122,11 @@ static void ping ()
-   g_main_loop_run (main_loop);
- 
-   g_free (url);
-+#ifdef WITH_SOUP_2
-   g_slist_free_full (uris, (GDestroyNotify)soup_uri_free);
-+#else
-+  g_slist_free_full (uris, (GDestroyNotify)g_uri_unref);
-+#endif
-   g_object_unref (server);
-   g_main_loop_unref (main_loop);
- }
--- 
-2.33.1
-
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/rest/rest_0.8.1.bb b/meta-openembedded/meta-gnome/recipes-gnome/rest/rest_0.8.1.bb
deleted file mode 100644
index f1c9915..0000000
--- a/meta-openembedded/meta-gnome/recipes-gnome/rest/rest_0.8.1.bb
+++ /dev/null
@@ -1,33 +0,0 @@
-SUMMARY = "library to access web services that claim to be "RESTful""
-HOMEPAGE = "https://wiki.gnome.org/Projects/Librest"
-LICENSE = "LGPL-2.1-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=2d5025d4aa3495befef8f17206a5b0a1"
-
-GNOMEBASEBUILDCLASS = "autotools"
-
-DEPENDS = " \
-    libxml2-native \
-    glib-2.0-native \
-    glib-2.0 \
-    libsoup-2.4 \
-"
-
-inherit gnomebase gobject-introspection gtk-doc vala
-
-PV .= "+git${SRCPV}"
-SRCREV = "7b46065dea860ef09861f4d70124728b8270c8b7"
-SRC_URI = "git://gitlab.gnome.org/GNOME/librest;protocol=https;branch=master \
-    file://0001-Use-GUri-instead-of-SoupURI.patch \
-    file://0002-Port-to-libsoup3.patch \
-"
-S = "${WORKDIR}/git"
-
-do_configure:prepend() {
-    # rest expects introspection.m4 at custom location (see aclocal.m4).
-    cp -f ${STAGING_DIR_TARGET}/${datadir}/aclocal/introspection.m4 ${S}/build
-}
-
-do_compile:prepend() {
-    export GIR_EXTRA_LIBS_PATH="${B}/rest/.libs"
-}
-
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/rest/rest_0.9.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/rest/rest_0.9.0.bb
new file mode 100644
index 0000000..2256a18
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/rest/rest_0.9.0.bb
@@ -0,0 +1,25 @@
+SUMMARY = "library to access web services that claim to be "RESTful""
+HOMEPAGE = "https://wiki.gnome.org/Projects/Librest"
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=2d5025d4aa3495befef8f17206a5b0a1"
+
+GNOMEBASEBUILDCLASS = "meson"
+
+DEPENDS = " \
+    gi-docgen \
+    gi-docgen-native \
+    glib-2.0 \
+    glib-2.0-native \
+    json-glib \
+    libxml2-native \
+"
+
+inherit gnomebase gobject-introspection vala pkgconfig
+
+PACKAGECONFIG_SOUP ?= "soup3"
+PACKAGECONFIG ??= "${PACKAGECONFIG_SOUP}"
+
+PACKAGECONFIG[soup2] = "-Dsoup2=true,,libsoup-2.4"
+PACKAGECONFIG[soup3] = "-Dsoup2=false,,libsoup-3.0"
+
+SRC_URI[archive.sha256sum] = "85b2bc9341128139539b53ee53f0533310bc96392fd645863a040410b81ebe66"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/yelp/yelp_42.2.bb b/meta-openembedded/meta-gnome/recipes-gnome/yelp/yelp_42.2.bb
index fe3b110..200ed0f 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/yelp/yelp_42.2.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/yelp/yelp_42.2.bb
@@ -22,11 +22,13 @@
     webkitgtk \
     yelp-xsl \
 "
-PACKAGECONFIG ?= ""
+PACKAGECONFIG_SOUP ?= "soup3"
+PACKAGECONFIG ??= "${PACKAGECONFIG_SOUP}"
 
-# Enable if soup3 is enabled in webkit recipe
+PACKAGECONFIG[soup2] = "--with-webkit2gtk-4-0,,"
 PACKAGECONFIG[soup3] = ",--with-webkit2gtk-4-0,"
 
+
 do_configure:prepend() {
     export ITSTOOL=${STAGING_BINDIR_NATIVE}/itstool
 }
