diff --git a/meta-openembedded/meta-gnome/recipes-gimp/gimp/gimp_2.10.24.bb b/meta-openembedded/meta-gnome/recipes-gimp/gimp/gimp_2.10.24.bb
index dbb576a..4b0f43b 100644
--- a/meta-openembedded/meta-gnome/recipes-gimp/gimp/gimp_2.10.24.bb
+++ b/meta-openembedded/meta-gnome/recipes-gimp/gimp/gimp_2.10.24.bb
@@ -51,6 +51,9 @@
                 --disable-check-update \
                 --without-wmf"
 
+EXTRA_OECONF:append:toolchain-clang:riscv32 = " --disable-vector-icons"
+EXTRA_OECONF:append:toolchain-clang:mips = " --disable-vector-icons"
+
 do_configure:append() {
     find ${B} -name Makefile | xargs sed -i s:'-I$(includedir)':'-I.':g
     find ${B} -name Makefile | xargs sed -i s:'-I/usr/include':'-I${STAGING_INCDIR}':g
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/devilspie/devilspie2_0.43.bb b/meta-openembedded/meta-gnome/recipes-gnome/devilspie/devilspie2_0.43.bb
index 69c23d5..f48f04f 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/devilspie/devilspie2_0.43.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/devilspie/devilspie2_0.43.bb
@@ -4,15 +4,18 @@
 LIC_FILES_CHKSUM = "file://COPYING;md5=00aefaa50aad75c21367df66102d542c \
                     file://GPL3.txt;md5=d32239bcb673463ab874e80d47fae504"
 
-DEPENDS = "gtk+ glib-2.0 libwnck lua virtual/libx11"
+DEPENDS = "gtk+ glib-2.0 libwnck libxinerama lua virtual/libx11"
 
-SRC_URI = " \
-    http://download.savannah.gnu.org/releases/${BPN}/${BPN}_${PV}-src.tar.gz \
+PV .= "+git${SRCPV}"
+
+SRCREV = "a3ee65b815a0247a0dbdaa39353444cef6f93499"
+
+SRC_URI = "git://github.com/dsalt/devilspie2;branch=master \
     file://default.lua \
     file://devilspie2.desktop \
 "
-SRC_URI[md5sum] = "26eed0b5b4af5c7e13c551eceaeab832"
-SRC_URI[sha256sum] = "ecffc17c62b41e196b72340192a90c4223329df041f135e74c0990860595f828"
+
+S = "${WORKDIR}/git"
 
 inherit features_check pkgconfig gettext
 
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gfbgraph/gfbgraph/0001-Update-rest-requirement-to-rest-1.0.patch b/meta-openembedded/meta-gnome/recipes-gnome/gfbgraph/gfbgraph/0001-Update-rest-requirement-to-rest-1.0.patch
new file mode 100644
index 0000000..c24a9e5
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gfbgraph/gfbgraph/0001-Update-rest-requirement-to-rest-1.0.patch
@@ -0,0 +1,72 @@
+From d058e6eb6c9ebf5f4fff89ec0ac93323fc64c1ba Mon Sep 17 00:00:00 2001
+From: Tim Orling <ticotimo@gmail.com>
+Date: Mon, 18 Oct 2021 08:42:35 -0700
+Subject: [PATCH] Update rest requirement to rest-1.0
+
+librest 0.8.1 declares rest-1.0 and was released four years ago.
+
+https://gitlab.gnome.org/GNOME/librest/-/commit/2971b3b92701f70fc368ad64bd25cefaea043f87
+
+Upstream-Status: Submitted
+[https://gitlab.gnome.org/GNOME/libgfbgraph/-/merge_requests/6]
+
+Signed-off-by: Tim Orling <ticotimo@gmail.com>
+
+---
+ .dir-locals.el       | 2 +-
+ configure.ac         | 2 +-
+ gfbgraph/Makefile.am | 2 +-
+ libgfbgraph.pc.in    | 2 +-
+ 4 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/.dir-locals.el b/.dir-locals.el
+index 77abbf0..d39cdf2 100644
+--- a/.dir-locals.el
++++ b/.dir-locals.el
+@@ -3,7 +3,7 @@
+                                "/usr/include/json-glib-1.0"
+                                "/usr/include/goa-1.0"
+                                "/usr/lib64/goa-1.0/include"
+-                               "/usr/include/rest-0.7"
++                               "/usr/include/rest-1.0"
+                                "/usr/include/dbus-1.0"
+                                "/usr/lib64/dbus-1.0/include"
+                                "/usr/include/gio-unix-2.0/"
+diff --git a/configure.ac b/configure.ac
+index fd1231f..9b49f3f 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -40,7 +40,7 @@ AM_CONDITIONAL([ENABLE_GTK_DOC], false)
+ 
+ GOBJECT_INTROSPECTION_CHECK([1.30.0])
+ 
+-PKG_CHECK_MODULES(LIBGFBGRAPH, [glib-2.0 gio-2.0 gobject-2.0 rest-0.7 json-glib-1.0])
++PKG_CHECK_MODULES(LIBGFBGRAPH, [glib-2.0 gio-2.0 gobject-2.0 rest-1.0 json-glib-1.0])
+ 
+ PKG_CHECK_MODULES(SOUP, [libsoup-2.4])
+ SOUP_UNSTABLE_CPPFLAGS=-DLIBSOUP_USE_UNSTABLE_REQUEST_API
+diff --git a/gfbgraph/Makefile.am b/gfbgraph/Makefile.am
+index d07b90d..b993ab7 100644
+--- a/gfbgraph/Makefile.am
++++ b/gfbgraph/Makefile.am
+@@ -60,7 +60,7 @@ GFBGraph_@API_MAJOR@_@API_MINOR@_gir_INCLUDES = \
+ 	GLib-2.0 	\
+ 	Gio-2.0		\
+ 	GObject-2.0	\
+-	Rest-0.7	\
++	Rest-1.0	\
+ 	Json-1.0	\
+ 	Soup-2.4
+ 
+diff --git a/libgfbgraph.pc.in b/libgfbgraph.pc.in
+index f87073e..d4f4e3a 100644
+--- a/libgfbgraph.pc.in
++++ b/libgfbgraph.pc.in
+@@ -9,6 +9,6 @@ apiversion=@API_VERSION@
+ Name: libgfbgraph
+ Description: GObject library for Facebook Graph API
+ Version: @VERSION@
+-Requires: gio-2.0 glib-2.0 goa-1.0 json-glib-1.0 libsoup-2.4 rest-0.7
++Requires: gio-2.0 glib-2.0 goa-1.0 json-glib-1.0 libsoup-2.4 rest-1.0
+ Libs: -L${libdir} -lgfbgraph-${apiversion}
+ Cflags: -I${includedir}/gfbgraph-@API_VERSION@
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gfbgraph/gfbgraph_0.2.4.bb b/meta-openembedded/meta-gnome/recipes-gnome/gfbgraph/gfbgraph_0.2.4.bb
index 1c5d90f..23b3bf6 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gfbgraph/gfbgraph_0.2.4.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gfbgraph/gfbgraph_0.2.4.bb
@@ -10,8 +10,9 @@
     gnome-online-accounts \
 "
 
-inherit gnomebase gtk-doc gobject-introspection
+inherit gnomebase gtk-doc gobject-introspection pkgconfig
 
+SRC_URI += " file://0001-Update-rest-requirement-to-rest-1.0.patch"
 SRC_URI[archive.md5sum] = "c38af63e49f8fe8baad99537956b69ba"
 SRC_URI[archive.sha256sum] = "6065391f35e7335588cc6b0cc4c1abbce7341488573a654551264cb9793b9379"
 
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gjs/gjs_1.58.8.bb b/meta-openembedded/meta-gnome/recipes-gnome/gjs/gjs_1.58.8.bb
index ccac08d..096e277 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gjs/gjs_1.58.8.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gjs/gjs_1.58.8.bb
@@ -9,7 +9,7 @@
 
 DEPENDS = "mozjs gtk+3"
 
-inherit gnomebase gsettings gobject-introspection vala gettext features_check upstream-version-is-even
+inherit gnomebase gsettings gobject-introspection vala gettext features_check upstream-version-is-even pkgconfig
 
 SRC_URI[archive.sha256sum] = "7fb3eb746c17363d9ee47f4a5d0bb048f0075611763eb0da11d85e0e57aff381"
 SRC_URI += "file://0001-Disable-tests-on-host.patch \
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-calendar/files/8be361b6ce8f0f8053e1609decbdbdc164ec8448.patch b/meta-openembedded/meta-gnome/recipes-gnome/gnome-calendar/files/8be361b6ce8f0f8053e1609decbdbdc164ec8448.patch
deleted file mode 100644
index eabf61a..0000000
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-calendar/files/8be361b6ce8f0f8053e1609decbdbdc164ec8448.patch
+++ /dev/null
@@ -1,242 +0,0 @@
-From 8be361b6ce8f0f8053e1609decbdbdc164ec8448 Mon Sep 17 00:00:00 2001
-From: Evangelos Ribeiro Tzaras <devrtz@fortysixandtwo.eu>
-Date: Sat, 5 Sep 2020 02:06:34 +0200
-Subject: [PATCH] project: Switch to libhandy-1
-
-This commit updates the dependencies for libhandy to the tagged 1.0
-release and changes the code to accomodate the changes from
-libhandy-0 to libhandy-1.
-
-Notable changes:
-edit-dialog: HdyDialog has been dropped in [1]
-alarm-row: action child type in HdyActionRow has been removed.
-
-[1] https://gitlab.gnome.org/GNOME/libhandy/-/merge_requests/434
-Upstream-Status: Backport
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- build-aux/flatpak/org.gnome.Calendar.json |  4 ++--
- meson.build                               |  2 +-
- src/gui/gcal-alarm-row.c                  |  2 +-
- src/gui/gcal-alarm-row.ui                 |  2 +-
- src/gui/gcal-application.c                |  4 ++++
- src/gui/gcal-edit-dialog.c                |  4 ++--
- src/gui/gcal-edit-dialog.h                |  3 +--
- src/gui/gcal-edit-dialog.ui               | 20 ++++++++++----------
- 8 files changed, 22 insertions(+), 19 deletions(-)
-
-diff --git a/build-aux/flatpak/org.gnome.Calendar.json b/build-aux/flatpak/org.gnome.Calendar.json
-index 18893ad6..0772ca8d 100644
---- a/build-aux/flatpak/org.gnome.Calendar.json
-+++ b/build-aux/flatpak/org.gnome.Calendar.json
-@@ -174,8 +174,8 @@
-             "sources" : [
-                 {
-                     "type" : "git",
--                    "url" : "https://source.puri.sm/Librem5/libhandy.git",
--                    "branch" : "libhandy-0-0"
-+                    "url" : "https://gitlab.gnome.org/GNOME/libhandy.git",
-+                    "tag" : "1.0.0"
-                 }
-             ]
-         },
-diff --git a/meson.build b/meson.build
-index 2a546252..b81b95c9 100644
---- a/meson.build
-+++ b/meson.build
-@@ -165,7 +165,7 @@ libedataserver_dep = dependency('libedataserver-1.2', version: '>= 3.17.1')
- libecal_dep = dependency('libecal-2.0', version: '>= 3.33.2')
- libsoup_dep = dependency('libsoup-2.4')
- libdazzle_dep = dependency('libdazzle-1.0', version: '>= 3.33.1')
--libhandy_dep = dependency('libhandy-0.0', version: '>= 0.0.9')
-+libhandy_dep = dependency('libhandy-1', version: '>= 1.0.0')
- glib_dep = dependency('glib-2.0', version: '>= 2.58.0')
- gtk_dep = dependency('gtk+-3.0', version: '>= 3.22.20')
- gio_dep = dependency('gio-2.0', version: '>= 2.58.0')
-diff --git a/src/gui/gcal-alarm-row.c b/src/gui/gcal-alarm-row.c
-index 1f95426c..1ada82f4 100644
---- a/src/gui/gcal-alarm-row.c
-+++ b/src/gui/gcal-alarm-row.c
-@@ -214,7 +214,7 @@ setup_alarm (GcalAlarmRow *self)
-   duration = e_cal_component_alarm_trigger_get_duration (trigger);
-   formatted_duration = format_alarm_duration (duration);
- 
--  hdy_action_row_set_title (HDY_ACTION_ROW (self), formatted_duration);
-+  hdy_preferences_row_set_title (HDY_PREFERENCES_ROW (self), formatted_duration);
- 
-   action = e_cal_component_alarm_get_action (self->alarm);
-   gtk_toggle_button_set_active (self->volume_button, action == E_CAL_COMPONENT_ALARM_AUDIO);
-diff --git a/src/gui/gcal-alarm-row.ui b/src/gui/gcal-alarm-row.ui
-index 7d416c4c..bca8af50 100644
---- a/src/gui/gcal-alarm-row.ui
-+++ b/src/gui/gcal-alarm-row.ui
-@@ -3,7 +3,7 @@
-   <template class="GcalAlarmRow" parent="HdyActionRow">
-     <property name="visible">True</property>
-     <property name="can_focus">False</property>
--    <child type="action">
-+    <child>
-       <object class="GtkBox">
-         <property name="visible">True</property>
-         <property name="can_focus">False</property>
-diff --git a/src/gui/gcal-application.c b/src/gui/gcal-application.c
-index b9d46cec..591b95c8 100644
---- a/src/gui/gcal-application.c
-+++ b/src/gui/gcal-application.c
-@@ -34,6 +34,7 @@
- #include <glib-object.h>
- #include <gio/gio.h>
- #include <glib/gi18n.h>
-+#include <handy.h>
- 
- struct _GcalApplication
- {
-@@ -446,6 +447,9 @@ gcal_application_startup (GApplication *app)
-   if ((g_application_get_flags (app) & G_APPLICATION_IS_SERVICE) != 0)
-     g_application_set_inactivity_timeout (app, 3 * 60 * 1000);
- 
-+  /*  initialize libhandy */
-+  hdy_init();
-+
-   GCAL_EXIT;
- }
- 
-diff --git a/src/gui/gcal-edit-dialog.c b/src/gui/gcal-edit-dialog.c
-index ae2b6714..5494a700 100644
---- a/src/gui/gcal-edit-dialog.c
-+++ b/src/gui/gcal-edit-dialog.c
-@@ -47,7 +47,7 @@
- 
- struct _GcalEditDialog
- {
--  HdyDialog         parent;
-+  GtkDialog         parent;
- 
-   gboolean          writable;
- 
-@@ -133,7 +133,7 @@ static void          on_location_entry_changed_cb                (GtkEntry
- static void          on_add_alarm_button_clicked_cb              (GtkWidget          *button,
-                                                                   GcalEditDialog     *self);
- 
--G_DEFINE_TYPE (GcalEditDialog, gcal_edit_dialog, HDY_TYPE_DIALOG)
-+G_DEFINE_TYPE (GcalEditDialog, gcal_edit_dialog, GTK_TYPE_DIALOG)
- 
- enum
- {
-diff --git a/src/gui/gcal-edit-dialog.h b/src/gui/gcal-edit-dialog.h
-index e4f44ec5..a557916b 100644
---- a/src/gui/gcal-edit-dialog.h
-+++ b/src/gui/gcal-edit-dialog.h
-@@ -22,7 +22,6 @@
- #include "gcal-event.h"
- #include "gcal-manager.h"
- 
--#include <handy.h>
- 
- G_BEGIN_DECLS
- 
-@@ -32,7 +31,7 @@ G_BEGIN_DECLS
- 
- #define GCAL_TYPE_EDIT_DIALOG                (gcal_edit_dialog_get_type ())
- 
--G_DECLARE_FINAL_TYPE (GcalEditDialog, gcal_edit_dialog, GCAL, EDIT_DIALOG, HdyDialog);
-+G_DECLARE_FINAL_TYPE (GcalEditDialog, gcal_edit_dialog, GCAL, EDIT_DIALOG, GtkDialog);
- 
- GtkWidget*           gcal_edit_dialog_new                     (void);
- 
-diff --git a/src/gui/gcal-edit-dialog.ui b/src/gui/gcal-edit-dialog.ui
-index a36d8ae6..c28c22bb 100644
---- a/src/gui/gcal-edit-dialog.ui
-+++ b/src/gui/gcal-edit-dialog.ui
-@@ -1,6 +1,6 @@
- <?xml version="1.0" encoding="UTF-8"?>
- <interface>
--  <template class="GcalEditDialog" parent="HdyDialog">
-+  <template class="GcalEditDialog" parent="GtkDialog">
-     <property name="can_focus">False</property>
-     <property name="resizable">False</property>
-     <property name="modal">True</property>
-@@ -156,7 +156,7 @@
-                         <property name="title" translatable="yes">Title</property>
-                         <property name="activatable-widget">summary_entry</property>
- 
--                        <child type="action">
-+                        <child>
-                           <object class="GtkEntry" id="summary_entry">
-                             <property name="visible">True</property>
-                             <property name="valign">center</property>
-@@ -177,7 +177,7 @@
-                         <property name="title" translatable="yes">Location</property>
-                         <property name="activatable-widget">location_entry</property>
- 
--                        <child type="action">
-+                        <child>
-                           <object class="GtkEntry" id="location_entry">
-                             <property name="visible">True</property>
-                             <property name="valign">center</property>
-@@ -226,7 +226,7 @@
-                         <property name="title" translatable="yes">All Day</property>
-                         <property name="activatable-widget">all_day_switch</property>
- 
--                        <child type="action">
-+                        <child>
-                           <object class="GtkSwitch" id="all_day_switch">
-                             <property name="visible">True</property>
-                             <property name="can_focus">True</property>
-@@ -246,7 +246,7 @@
-                         <property name="visible">True</property>
-                         <property name="title" translatable="yes">Starts</property>
- 
--                        <child type="action">
-+                        <child>
-                           <object class="GtkLabel" id="event_start_label">
-                             <property name="visible">True</property>
-                             <property name="can_focus">False</property>
-@@ -294,7 +294,7 @@
-                         <property name="visible">True</property>
-                         <property name="title" translatable="yes">Ends</property>
- 
--                        <child type="action">
-+                        <child>
-                           <object class="GtkLabel" id="event_end_label">
-                             <property name="visible">True</property>
-                             <property name="can_focus">False</property>
-@@ -343,7 +343,7 @@
-                         <property name="title" translatable="yes">Repeat</property>
-                         <property name="activatable-widget">repeat_combo</property>
- 
--                        <child type="action">
-+                        <child>
-                           <object class="GtkComboBoxText" id="repeat_combo">
-                             <property name="visible">True</property>
-                             <property name="can_focus">False</property>
-@@ -372,7 +372,7 @@
-                         <property name="title" translatable="yes">End Repeat</property>
-                         <property name="activatable-widget">repeat_combo</property>
- 
--                        <child type="action">
-+                        <child>
-                           <object class="GtkComboBoxText" id="repeat_duration_combo">
-                             <property name="visible">True</property>
-                             <property name="can_focus">False</property>
-@@ -397,7 +397,7 @@
-                         <property name="title" translatable="yes">Number of Occurrences</property>
-                         <property name="activatable-widget">number_of_occurrences_spin</property>
- 
--                        <child type="action">
-+                        <child>
-                           <object class = "GtkSpinButton" id="number_of_occurrences_spin">
-                             <property name="input_purpose">number</property>
-                             <property name="input-hints">no-emoji</property>
-@@ -415,7 +415,7 @@
-                         <property name="title" translatable="yes">End Repeat Date</property>
-                         <property name="activatable-widget">until_date_selector</property>
- 
--                        <child type="action">
-+                        <child>
-                           <object class = "GcalDateSelector" id="until_date_selector">
-                             <property name="valign">center</property>
-                           </object>
--- 
-GitLab
-
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-calendar/gnome-calendar_3.38.1.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-calendar/gnome-calendar_41.0.bb
similarity index 74%
rename from meta-openembedded/meta-gnome/recipes-gnome/gnome-calendar/gnome-calendar_3.38.1.bb
rename to meta-openembedded/meta-gnome/recipes-gnome/gnome-calendar/gnome-calendar_41.0.bb
index e703ec6..4b9b14a 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-calendar/gnome-calendar_3.38.1.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-calendar/gnome-calendar_41.0.bb
@@ -18,12 +18,11 @@
 
 GNOMEBASEBUILDCLASS = "meson"
 
-inherit gnomebase gsettings gtk-icon-cache gettext features_check upstream-version-is-even
+inherit gnomebase gsettings gtk-icon-cache gettext features_check upstream-version-is-even mime-xdg
 
 REQUIRED_DISTRO_FEATURES = "x11"
 
-SRC_URI += "file://8be361b6ce8f0f8053e1609decbdbdc164ec8448.patch"
-SRC_URI[archive.sha256sum] = "7280880a082d631624d02a102dd547ceb59498da368311f3e49a06cff897f512"
+SRC_URI[archive.sha256sum] = "73ac923c6618bd0957d6b7c012a00a47bff67ee934249358817433772ceb193f"
 
 FILES:${PN} += " \
     ${datadir}/gnome-shell \
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-online-accounts/files/0001-Use-GUri-instead-of-SoupURI.patch b/meta-openembedded/meta-gnome/recipes-gnome/gnome-online-accounts/files/0001-Use-GUri-instead-of-SoupURI.patch
new file mode 100644
index 0000000..11fc96b
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-online-accounts/files/0001-Use-GUri-instead-of-SoupURI.patch
@@ -0,0 +1,351 @@
+From 5a5abbedb171986dbf6f5a37577ec6afa892b66b 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 1/2] Use GUri instead of SoupURI
+
+In preparation for libsoup3 where SoupURI has been removed in favor of
+GUri.
+
+Upstream-Status: Submitted [https://gitlab.gnome.org/GNOME/gnome-online-accounts/-/merge_requests/73]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ configure.ac                         |   2 +-
+ src/goabackend/goaoauth2provider.c   |  11 +--
+ src/goabackend/goaoauthprovider.c    |   8 +-
+ src/goabackend/goaowncloudprovider.c | 107 ++++++++++++++++-----------
+ src/goabackend/goawebview.c          |   9 +--
+ 5 files changed, 80 insertions(+), 57 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 1f88bbd..7c0b39d 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -90,7 +90,7 @@ GTK_DOC_CHECK([1.3])
+ # Libraries
+ #
+ 
+-PKG_CHECK_MODULES(GLIB, [glib-2.0 gio-2.0 gio-unix-2.0 >= 2.52])
++PKG_CHECK_MODULES(GLIB, [glib-2.0 gio-2.0 gio-unix-2.0 >= 2.67.4])
+ AC_SUBST(GLIB_CFLAGS)
+ AC_SUBST(GLIB_LIBS)
+ 
+diff --git a/src/goabackend/goaoauth2provider.c b/src/goabackend/goaoauth2provider.c
+index 3715431..2757838 100644
+--- a/src/goabackend/goaoauth2provider.c
++++ b/src/goabackend/goaoauth2provider.c
+@@ -763,7 +763,7 @@ on_web_view_decide_policy (WebKitWebView            *web_view,
+   GHashTable *key_value_pairs;
+   WebKitNavigationAction *action;
+   WebKitURIRequest *request;
+-  SoupURI *uri;
++  GUri *uri;
+   const gchar *fragment;
+   const gchar *oauth2_error;
+   const gchar *query;
+@@ -793,9 +793,9 @@ on_web_view_decide_policy (WebKitWebView            *web_view,
+   if (!g_str_has_prefix (requested_uri, redirect_uri))
+     goto default_behaviour;
+ 
+-  uri = soup_uri_new (requested_uri);
+-  fragment = soup_uri_get_fragment (uri);
+-  query = soup_uri_get_query (uri);
++  uri = g_uri_parse (requested_uri, G_URI_FLAGS_ENCODED, NULL);
++  fragment = g_uri_get_fragment (uri);
++  query = g_uri_get_query (uri);
+ 
+   /* Three cases:
+    * 1) we can either have the backend handle the URI for us, or
+@@ -808,7 +808,7 @@ on_web_view_decide_policy (WebKitWebView            *web_view,
+     {
+       gchar *url;
+ 
+-      url = soup_uri_to_string (uri, FALSE);
++      url = g_uri_to_string (uri);
+       if (!goa_oauth2_provider_process_redirect_url (self, url, &priv->access_token, &priv->error))
+         {
+           g_prefix_error (&priv->error, _("Authorization response: "));
+@@ -889,6 +889,7 @@ on_web_view_decide_policy (WebKitWebView            *web_view,
+   goto ignore_request;
+ 
+  ignore_request:
++  g_uri_unref (uri);
+   g_assert (response_id != GTK_RESPONSE_NONE);
+   if (response_id < 0)
+     gtk_dialog_response (priv->dialog, response_id);
+diff --git a/src/goabackend/goaoauthprovider.c b/src/goabackend/goaoauthprovider.c
+index 0bfab6b..ff0927e 100644
+--- a/src/goabackend/goaoauthprovider.c
++++ b/src/goabackend/goaoauthprovider.c
+@@ -643,7 +643,7 @@ on_web_view_decide_policy (WebKitWebView            *web_view,
+ {
+   GHashTable *key_value_pairs;
+   IdentifyData *data = user_data;
+-  SoupURI *uri;
++  GUri *uri;
+   WebKitNavigationAction *action;
+   WebKitURIRequest *request;
+   const gchar *query;
+@@ -664,8 +664,8 @@ on_web_view_decide_policy (WebKitWebView            *web_view,
+   if (!g_str_has_prefix (requested_uri, redirect_uri))
+     goto default_behaviour;
+ 
+-  uri = soup_uri_new (requested_uri);
+-  query = soup_uri_get_query (uri);
++  uri = g_uri_parse (requested_uri, G_URI_FLAGS_ENCODED, NULL);
++  query = g_uri_get_query (uri);
+ 
+   if (query != NULL)
+     {
+@@ -678,6 +678,8 @@ on_web_view_decide_policy (WebKitWebView            *web_view,
+       g_hash_table_unref (key_value_pairs);
+     }
+ 
++  g_uri_unref (uri);
++
+   if (data->oauth_verifier != NULL)
+     goto ignore_request;
+ 
+diff --git a/src/goabackend/goaowncloudprovider.c b/src/goabackend/goaowncloudprovider.c
+index d142966..10734be 100644
+--- a/src/goabackend/goaowncloudprovider.c
++++ b/src/goabackend/goaowncloudprovider.c
+@@ -22,8 +22,6 @@
+ 
+ #include <glib/gi18n-lib.h>
+ 
+-#include <libsoup/soup.h>
+-
+ #include "goahttpclient.h"
+ #include "goaprovider.h"
+ #include "goaowncloudprovider.h"
+@@ -78,45 +76,42 @@ get_provider_features (GoaProvider *provider)
+ /* ---------------------------------------------------------------------------------------------------- */
+ 
+ static char *
+-uri_to_string_with_path (SoupURI *soup_uri, const gchar *path)
++uri_to_string_with_path (GUri *uri, const gchar *path)
+ {
+   gchar *uri_string;
+   gchar *uri_tmp;
+ 
+-  if (soup_uri == NULL)
++  if (uri == NULL)
+     return NULL;
+ 
+-  uri_tmp = soup_uri_to_string (soup_uri, FALSE);
++  uri_tmp = g_uri_to_string (uri);
+   uri_string = g_strconcat (uri_tmp, path, NULL);
+   g_free (uri_tmp);
+ 
+   return uri_string;
+ }
+ 
+-static char *get_webdav_uri (SoupURI *soup_uri)
++static char *get_webdav_uri (GUri *uri)
+ {
+-  SoupURI *uri_tmp;
++  GUri *uri_tmp;
+   gchar *uri_webdav;
+   const gchar *scheme;
+-  guint port;
+ 
+-  if (soup_uri == NULL)
++  if (uri == NULL)
+     return NULL;
+ 
+-  scheme = soup_uri_get_scheme (soup_uri);
+-  port = soup_uri_get_port (soup_uri);
+-  uri_tmp = soup_uri_copy (soup_uri);
+-
+-  if (g_strcmp0 (scheme, SOUP_URI_SCHEME_HTTPS) == 0)
+-    soup_uri_set_scheme (uri_tmp, "davs");
+-  else
+-    soup_uri_set_scheme (uri_tmp, "dav");
+-
+-  if (!soup_uri_uses_default_port (soup_uri))
+-    soup_uri_set_port (uri_tmp, port);
++  scheme = g_uri_get_scheme (uri);
++  uri_tmp = g_uri_build (g_uri_get_flags (uri),
++                         g_strcmp0 (scheme, "https") == 0 ? "davs" : "dav",
++                         g_uri_get_userinfo (uri),
++                         g_uri_get_host (uri),
++                         g_uri_get_port (uri),
++                         g_uri_get_path (uri),
++                         g_uri_get_query (uri),
++                         g_uri_get_fragment (uri));
+ 
+   uri_webdav = uri_to_string_with_path (uri_tmp, WEBDAV_ENDPOINT);
+-  soup_uri_free (uri_tmp);
++  g_uri_unref (uri_tmp);
+ 
+   return uri_webdav;
+ }
+@@ -140,7 +135,7 @@ build_object (GoaProvider         *provider,
+   gchar *uri_carddav;
+   gchar *uri_webdav;
+   GoaPasswordBased *password_based = NULL;
+-  SoupURI *uri = NULL;
++  GUri *uri = NULL;
+   gboolean accept_ssl_errors;
+   gboolean calendar_enabled;
+   gboolean contacts_enabled;
+@@ -176,9 +171,24 @@ build_object (GoaProvider         *provider,
+   account = goa_object_get_account (GOA_OBJECT (object));
+   identity = goa_account_get_identity (account);
+   uri_string = g_key_file_get_string (key_file, group, "Uri", NULL);
+-  uri = soup_uri_new (uri_string);
++  uri = g_uri_parse (uri_string, G_URI_FLAGS_ENCODED, NULL);
+   if (uri != NULL)
+-    soup_uri_set_user (uri, identity);
++    {
++      GUri *tmp_uri;
++
++      tmp_uri = g_uri_build_with_user (g_uri_get_flags (uri),
++                                       g_uri_get_scheme (uri),
++                                       identity,
++                                       g_uri_get_password (uri),
++                                       g_uri_get_auth_params (uri),
++                                       g_uri_get_host (uri),
++                                       g_uri_get_port (uri),
++                                       g_uri_get_path (uri),
++                                       g_uri_get_query (uri),
++                                       g_uri_get_fragment (uri));
++      g_uri_unref (uri);
++      uri = tmp_uri;
++    }
+ 
+   accept_ssl_errors = g_key_file_get_boolean (key_file, group, "AcceptSslErrors", NULL);
+ 
+@@ -224,7 +234,7 @@ build_object (GoaProvider         *provider,
+ 
+  out:
+   g_clear_object (&password_based);
+-  g_clear_pointer (&uri, soup_uri_free);
++  g_clear_pointer (&uri, g_uri_unref);
+   g_free (uri_string);
+   return ret;
+ }
+@@ -354,8 +364,11 @@ add_entry (GtkWidget     *grid,
+ static gchar *
+ normalize_uri (const gchar *address, gchar **server)
+ {
+-  SoupURI *uri = NULL;
++  GUri *uri = NULL;
++  GUri *uri_tmp = NULL;
+   const gchar *path;
++  const gchar *new_scheme;
++  gchar *new_path = NULL;
+   gchar *ret = NULL;
+   gchar *scheme = NULL;
+   gchar *uri_string = NULL;
+@@ -384,48 +397,56 @@ normalize_uri (const gchar *address, gchar **server)
+   else
+     goto out;
+ 
+-  uri = soup_uri_new (uri_string);
++  uri = g_uri_parse (uri_string, G_URI_FLAGS_ENCODED, NULL);
+   if (uri == NULL)
+     goto out;
+ 
+   if (g_strcmp0 (scheme, "dav") == 0)
+-    soup_uri_set_scheme (uri, SOUP_URI_SCHEME_HTTP);
++    new_scheme = "http";
+   else if (g_strcmp0 (scheme, "davs") == 0)
+-    soup_uri_set_scheme (uri, SOUP_URI_SCHEME_HTTPS);
++    new_scheme = "https";
++  else
++    new_scheme = g_uri_get_scheme (uri);
+ 
+-  path = soup_uri_get_path (uri);
++  path = g_uri_get_path (uri);
+   if (!g_str_has_suffix (path, "/"))
+-    {
+-      gchar *new_path;
+-
+       new_path = g_strconcat (path, "/", NULL);
+-      soup_uri_set_path (uri, new_path);
+-      path = soup_uri_get_path (uri);
+-      g_free (new_path);
+-    }
++
++  uri_tmp = g_uri_build (g_uri_get_flags (uri),
++                         new_scheme,
++                         g_uri_get_userinfo (uri),
++                         g_uri_get_host (uri),
++                         g_uri_get_port (uri),
++                         new_path ? new_path : path,
++                         g_uri_get_query (uri),
++                         g_uri_get_fragment (uri));
++  g_free (new_path);
++  g_uri_unref (uri);
++  uri = uri_tmp;
++  path = g_uri_get_path (uri);
+ 
+   if (server != NULL)
+     {
+       gchar *port_string;
+       gchar *pretty_path;
+-      guint port;
++      gint port;
+ 
+-      port = soup_uri_get_port (uri);
+-      port_string = g_strdup_printf (":%u", port);
++      port = g_uri_get_port (uri);
++      port_string = g_strdup_printf (":%d", port);
+ 
+       pretty_path = g_strdup (path);
+       pretty_path[strlen(pretty_path) - 1] = '\0';
+ 
+-      *server = g_strconcat (soup_uri_get_host (uri), (port == std_port) ? "" : port_string, pretty_path, NULL);
++      *server = g_strconcat (g_uri_get_host (uri), (port == std_port || port == -1) ? "" : port_string, pretty_path, NULL);
+ 
+       g_free (port_string);
+       g_free (pretty_path);
+     }
+ 
+-  ret = soup_uri_to_string (uri, FALSE);
++  ret = g_uri_to_string (uri);
+ 
+  out:
+-  g_clear_pointer (&uri, soup_uri_free);
++  g_clear_pointer (&uri, g_uri_unref);
+   g_free (scheme);
+   g_free (uri_string);
+   return ret;
+diff --git a/src/goabackend/goawebview.c b/src/goabackend/goawebview.c
+index 2438e0c..3df600e 100644
+--- a/src/goabackend/goawebview.c
++++ b/src/goabackend/goawebview.c
+@@ -25,7 +25,6 @@
+ #include <glib.h>
+ #include <glib/gi18n-lib.h>
+ #include <jsc/jsc.h>
+-#include <libsoup/soup.h>
+ #include <webkit2/webkit2.h>
+ 
+ #include "goawebview.h"
+@@ -77,17 +76,17 @@ web_view_clear_notify_progress_cb (gpointer user_data)
+ static char *
+ web_view_create_loading_title (const gchar *url)
+ {
+-  SoupURI *uri;
++  GUri *uri;
+   const gchar *hostname;
+   gchar *title;
+ 
+   g_return_val_if_fail (url != NULL && url[0] != '\0', NULL);
+ 
+-  uri = soup_uri_new (url);
+-  hostname = soup_uri_get_host (uri);
++  uri = g_uri_parse (url, G_URI_FLAGS_NONE, NULL);
++  hostname = g_uri_get_host (uri);
+   /* translators: %s here is the address of the web page */
+   title = g_strdup_printf (_("Loading “%s”…"), hostname);
+-  soup_uri_free (uri);
++  g_uri_unref (uri);
+ 
+   return title;
+ }
+-- 
+2.33.1
+
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-online-accounts/files/0002-Port-to-libsoup3.patch b/meta-openembedded/meta-gnome/recipes-gnome/gnome-online-accounts/files/0002-Port-to-libsoup3.patch
new file mode 100644
index 0000000..0f95908
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-online-accounts/files/0002-Port-to-libsoup3.patch
@@ -0,0 +1,841 @@
+From 7d8c5208d095ce8e7123935263ef7a02f0381ae5 Mon Sep 17 00:00:00 2001
+From: Carlos Garcia Campos <cgarcia@igalia.com>
+Date: Mon, 7 Jun 2021 18:28:42 +0200
+Subject: [PATCH 2/2] Port to libsoup3
+
+Upstream-Status: Submitted [https://gitlab.gnome.org/GNOME/gnome-online-accounts/-/merge_requests/73]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ configure.ac                       |   8 +-
+ src/daemon/goadaemon.c             |   2 +-
+ src/goabackend/goaewsclient.c      | 178 +++++++++++++++--------------
+ src/goabackend/goahttpclient.c     |  72 +++++++-----
+ src/goabackend/goalastfmprovider.c |  24 ++--
+ src/goabackend/goaoauth2provider.c |   6 +-
+ src/goabackend/goaoauthprovider.c  |  23 ++--
+ src/goabackend/goarestproxy.h      |   2 -
+ src/goabackend/goasouplogger.c     |  33 ++----
+ src/goabackend/goasouplogger.h     |   3 -
+ src/goabackend/goautils.c          |  27 ++---
+ 11 files changed, 199 insertions(+), 179 deletions(-)
+
+--- a/configure.ac
++++ b/configure.ac
+@@ -113,15 +113,15 @@ if test "$enable_backend" != "no"; then
+   AC_SUBST(GTK_CFLAGS)
+   AC_SUBST(GTK_LIBS)
+ 
+-  PKG_CHECK_MODULES(JAVASCRIPT_CORE_GTK, [javascriptcoregtk-4.0 >= 2.12.0])
++  PKG_CHECK_MODULES(JAVASCRIPT_CORE_GTK, [javascriptcoregtk-4.1 >= 2.33.1])
+   AC_SUBST(JAVASCRIPT_CORE_GTK_CFLAGS)
+   AC_SUBST(JAVASCRIPT_CORE_GTK_LIBS)
+ 
+-  PKG_CHECK_MODULES(WEBKIT_GTK, [webkit2gtk-4.0 >= 2.26.0])
++  PKG_CHECK_MODULES(WEBKIT_GTK, [webkit2gtk-4.1 >= 2.33.1])
+   AC_SUBST(WEBKIT_GTK_CFLAGS)
+   AC_SUBST(WEBKIT_GTK_LIBS)
+ 
+-  PKG_CHECK_MODULES(LIBSOUP, [libsoup-2.4 >= 2.42])
++  PKG_CHECK_MODULES(LIBSOUP, [libsoup-3.0 >= 2.99.8])
+   AC_SUBST(LIBSOUP_CFLAGS)
+   AC_SUBST(LIBSOUP_LIBS)
+ 
+@@ -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)
+ 
+--- a/src/daemon/goadaemon.c
++++ b/src/daemon/goadaemon.c
+@@ -1496,7 +1496,7 @@ is_authorization_error (GError *error)
+   g_return_val_if_fail (error != NULL, FALSE);
+ 
+   ret = FALSE;
+-  if (error->domain == REST_PROXY_ERROR || error->domain == SOUP_HTTP_ERROR)
++  if (error->domain == REST_PROXY_ERROR)
+     {
+       if (SOUP_STATUS_IS_CLIENT_ERROR (error->code))
+         ret = TRUE;
+--- a/src/goabackend/goaewsclient.c
++++ b/src/goabackend/goaewsclient.c
+@@ -63,6 +63,12 @@ goa_ews_client_new (void)
+ 
+ typedef struct
+ {
++  gchar *password;
++  gchar *username;
++} AutodiscoverAuthData;
++
++typedef struct
++{
+   GCancellable *cancellable;
+   GError *error;
+   SoupMessage *msgs[2];
+@@ -71,13 +77,16 @@ typedef struct
+   guint pending;
+   gulong cancellable_id;
+   xmlOutputBuffer *buf;
++  AutodiscoverAuthData *auth;
+ } AutodiscoverData;
+ 
+-typedef struct
++static void
++ews_client_autodiscover_auth_data_free (AutodiscoverAuthData *auth)
+ {
+-  gchar *password;
+-  gchar *username;
+-} AutodiscoverAuthData;
++  g_free (auth->password);
++  g_free (auth->username);
++  g_slice_free (AutodiscoverAuthData, auth);
++}
+ 
+ static void
+ ews_client_autodiscover_data_free (gpointer user_data)
+@@ -92,22 +101,12 @@ ews_client_autodiscover_data_free (gpoin
+ 
+   g_clear_error (&data->error);
+ 
+-  /* soup_session_queue_message stole the references to data->msgs */
+   xmlOutputBufferClose (data->buf);
++  g_clear_pointer (&data->auth, ews_client_autodiscover_auth_data_free);
+   g_object_unref (data->session);
+   g_slice_free (AutodiscoverData, data);
+ }
+ 
+-static void
+-ews_client_autodiscover_auth_data_free (gpointer data, GClosure *closure)
+-{
+-  AutodiscoverAuthData *auth = data;
+-
+-  g_free (auth->password);
+-  g_free (auth->username);
+-  g_slice_free (AutodiscoverAuthData, auth);
+-}
+-
+ static gboolean
+ ews_client_check_node (const xmlNode *node, const gchar *name)
+ {
+@@ -115,9 +114,8 @@ ews_client_check_node (const xmlNode *no
+   return node->type == XML_ELEMENT_NODE && !g_strcmp0 ((gchar *) node->name, name);
+ }
+ 
+-static void
+-ews_client_authenticate (SoupSession *session,
+-                         SoupMessage *msg,
++static gboolean
++ews_client_authenticate (SoupMessage *msg,
+                          SoupAuth *auth,
+                          gboolean retrying,
+                          gpointer user_data)
+@@ -125,26 +123,26 @@ ews_client_authenticate (SoupSession *se
+   AutodiscoverAuthData *data = user_data;
+ 
+   if (retrying)
+-    return;
++    return FALSE;
+ 
+   soup_auth_authenticate (auth, data->username, data->password);
++  return TRUE;
+ }
+ 
+-static void
+-ews_client_request_started (SoupSession *session, SoupMessage *msg, SoupSocket *socket, gpointer user_data)
++static gboolean
++ews_client_accept_certificate (SoupMessage *msg, GTlsCertificate *cert, GTlsCertificateFlags cert_flags, gpointer user_data)
+ {
+   AutodiscoverData *data;
+   GTask *task = G_TASK (user_data);
+-  GTlsCertificateFlags cert_flags;
+ 
+-  g_debug ("goa_ews_client_autodiscover(): request started (%p)", msg);
++  g_debug ("goa_ews_client_autodiscover(): accept certificate for request (%p)", msg);
+ 
+   data = (AutodiscoverData *) g_task_get_task_data (task);
+ 
+-  if (!data->accept_ssl_errors
+-      && soup_message_get_https_status (msg, NULL, &cert_flags)
+-      && cert_flags != 0
+-      && data->error == NULL)
++  if (data->accept_ssl_errors || cert_flags == 0)
++    return TRUE;
++
++  if (data->error == NULL)
+     {
+       goa_utils_set_error_ssl (&data->error, cert_flags);
+ 
+@@ -153,6 +151,8 @@ ews_client_request_started (SoupSession
+        */
+       soup_session_abort (data->session);
+     }
++
++  return FALSE;
+ }
+ 
+ static void
+@@ -192,8 +192,10 @@ ews_client_autodiscover_parse_protocol (
+ }
+ 
+ static void
+-ews_client_autodiscover_response_cb (SoupSession *session, SoupMessage *msg, gpointer user_data)
++ews_client_autodiscover_response_cb (SoupSession *session, GAsyncResult *result, gpointer user_data)
+ {
++  SoupMessage *msg;
++  GBytes *body;
+   GError *error = NULL;
+   AutodiscoverData *data;
+   GTask *task = G_TASK (user_data);
+@@ -204,7 +206,11 @@ ews_client_autodiscover_response_cb (Sou
+   xmlDoc *doc;
+   xmlNode *node;
+ 
+-  g_debug ("goa_ews_client_autodiscover(): response (%p, %u)", msg, msg->status_code);
++  msg = soup_session_get_async_result_message (session, result);
++
++  g_debug ("goa_ews_client_autodiscover(): response (%p, %u)", msg, soup_message_get_status (msg));
++
++  body = soup_session_send_and_read_finish (session, result, &error);
+ 
+   data = (AutodiscoverData *) g_task_get_task_data (task);
+   size = sizeof (data->msgs) / sizeof (data->msgs[0]);
+@@ -215,16 +221,19 @@ ews_client_autodiscover_response_cb (Sou
+         break;
+     }
+   if (idx == size || data->pending == 0)
+-    return;
++    {
++      g_bytes_unref (body);
++      g_clear_object (&error);
++      g_object_unref (msg);
++      return;
++    }
+ 
+   data->msgs[idx] = NULL;
+-  status = msg->status_code;
+-
+-  /* status == SOUP_STATUS_CANCELLED, if we are being aborted by the
++  /* G_IO_ERROR_CANCELLED, if we are being aborted by the
+    * GCancellable, an SSL error or another message that was
+    * successful.
+    */
+-  if (status == SOUP_STATUS_CANCELLED)
++  if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+     {
+       /* If we are being aborted by the GCancellable, then the
+        * GTask is responsible for setting the GError automatically.
+@@ -235,21 +244,23 @@ ews_client_autodiscover_response_cb (Sou
+        */
+       goto out;
+     }
+-  else if (status != SOUP_STATUS_OK)
++
++  status = soup_message_get_status (msg);
++  if (status != SOUP_STATUS_OK || error)
+     {
+-      g_warning ("goa_ews_client_autodiscover() failed: %u — %s", msg->status_code, msg->reason_phrase);
++      g_warning ("goa_ews_client_autodiscover() failed: %u — %s", status, soup_message_get_reason_phrase (msg));
+       g_return_if_fail (data->error == NULL);
+ 
+-      goa_utils_set_error_soup (&error, msg);
++      if (!error)
++        goa_utils_set_error_soup (&error, msg);
+       goto out;
+     }
+ 
+-  soup_buffer_free (soup_message_body_flatten (SOUP_MESSAGE (msg)->response_body));
+   g_debug ("The response headers");
+   g_debug ("===================");
+-  g_debug ("%s", SOUP_MESSAGE (msg)->response_body->data);
++  g_debug ("%s", (char *)g_bytes_get_data (body, NULL));
+ 
+-  doc = xmlReadMemory (msg->response_body->data, msg->response_body->length, "autodiscover.xml", NULL, 0);
++  doc = xmlReadMemory (g_bytes_get_data (body, NULL), g_bytes_get_size (body), "autodiscover.xml", NULL, 0);
+   if (doc == NULL)
+     {
+       g_set_error (&error,
+@@ -333,7 +344,7 @@ ews_client_autodiscover_response_cb (Sou
+           /* The callback (ie. this function) will be invoked after we
+            * have returned to the main loop.
+            */
+-          soup_session_cancel_message (data->session, data->msgs[idx], SOUP_STATUS_CANCELLED);
++          g_cancellable_cancel (data->cancellable);
+         }
+     }
+ 
+@@ -368,6 +379,7 @@ ews_client_autodiscover_response_cb (Sou
+ 
+   g_clear_error (&error);
+   g_object_unref (task);
++  g_object_unref (msg);
+ }
+ 
+ static xmlDoc *
+@@ -399,52 +411,54 @@ static void
+ ews_client_post_restarted_cb (SoupMessage *msg, gpointer data)
+ {
+   xmlOutputBuffer *buf = data;
++  GBytes *body;
+ 
+   /* In violation of RFC2616, libsoup will change a POST request to
+    * a GET on receiving a 302 redirect.
+    */
+   g_debug ("Working around libsoup bug with redirect");
+-  g_object_set (msg, SOUP_MESSAGE_METHOD, "POST", NULL);
++  g_object_set (msg, "method", "POST", NULL);
+ 
+-  soup_message_set_request(msg,
+-                           "text/xml; charset=utf-8",
+-                           SOUP_MEMORY_COPY,
+ #ifdef LIBXML2_NEW_BUFFER
+-                           (gchar *) xmlOutputBufferGetContent(buf),
+-                           xmlOutputBufferGetSize(buf));
++  body = g_bytes_new (xmlOutputBufferGetContent (buf), xmlOutputBufferGetSize (buf));
+ #else
+-                           (gchar *) buf->buffer->content,
+-                           buf->buffer->use);
++  body = g_bytes_new (buf->buffer->content, buf->buffer->use);
+ #endif
++  soup_message_set_request_body_from_bytes (msg, "text/xml; charset=utf-8", body);
++  g_bytes_unref (body);
+ }
+ 
+ static SoupMessage *
+-ews_client_create_msg_for_url (const gchar *url, xmlOutputBuffer *buf)
++ews_client_create_msg_for_url (const gchar *url, xmlOutputBuffer *buf, AutodiscoverAuthData *auth, GTask *task)
+ {
+   SoupMessage *msg;
++  GBytes *body = NULL;
+ 
+   msg = soup_message_new (buf != NULL ? "POST" : "GET", url);
+-  soup_message_headers_append (msg->request_headers, "User-Agent", "libews/0.1");
++  soup_message_headers_append (soup_message_get_request_headers (msg),
++                               "User-Agent", "libews/0.1");
++
++  g_signal_connect (msg, "authenticate",
++                    G_CALLBACK (ews_client_authenticate),
++                    auth);
++  g_signal_connect (msg, "accept-certificate",
++                    G_CALLBACK (ews_client_accept_certificate),
++                    task);
+ 
+   if (buf != NULL)
+     {
+-      soup_message_set_request (msg,
+-                                "text/xml; charset=utf-8",
+-                                SOUP_MEMORY_COPY,
+ #ifdef LIBXML2_NEW_BUFFER
+-                                (gchar *) xmlOutputBufferGetContent(buf),
+-                                xmlOutputBufferGetSize(buf));
++      body = g_bytes_new (xmlOutputBufferGetContent (buf), xmlOutputBufferGetSize (buf));
+ #else
+-                                (gchar *) buf->buffer->content,
+-                                buf->buffer->use);
++      body = g_bytes_new (buf->buffer->content, buf->buffer->use);
+ #endif
++      soup_message_set_request_body_from_bytes (msg, "text/xml; charset=utf-8", body);
+       g_signal_connect (msg, "restarted", G_CALLBACK (ews_client_post_restarted_cb), buf);
+     }
+ 
+-  soup_buffer_free (soup_message_body_flatten (SOUP_MESSAGE (msg)->request_body));
+   g_debug ("The request headers");
+   g_debug ("===================");
+-  g_debug ("%s", SOUP_MESSAGE (msg)->request_body->data);
++  g_debug ("%s", body ? (char *)g_bytes_get_data (body, NULL) : "");
+ 
+   return msg;
+ }
+@@ -497,12 +511,15 @@ goa_ews_client_autodiscover (GoaEwsClien
+    * (successful) one win.
+    */
+ 
++  auth = g_slice_new0 (AutodiscoverAuthData);
++  auth->username = g_strdup (username);
++  auth->password = g_strdup (password);
++  data->auth = auth;
+   data->buf = buf;
+-  data->msgs[0] = ews_client_create_msg_for_url (url1, buf);
+-  data->msgs[1] = ews_client_create_msg_for_url (url2, buf);
++  data->msgs[0] = ews_client_create_msg_for_url (url1, buf, auth, task);
++  data->msgs[1] = ews_client_create_msg_for_url (url2, buf, auth, task);
+   data->pending = sizeof (data->msgs) / sizeof (data->msgs[0]);
+-  data->session = soup_session_new_with_options (SOUP_SESSION_SSL_STRICT, FALSE,
+-                                                 NULL);
++  data->session = soup_session_new ();
+   soup_session_add_feature_by_type (data->session, SOUP_TYPE_AUTH_NTLM);
+   data->accept_ssl_errors = accept_ssl_errors;
+ 
+@@ -515,26 +532,19 @@ goa_ews_client_autodiscover (GoaEwsClien
+                                                     NULL);
+     }
+ 
+-  auth = g_slice_new0 (AutodiscoverAuthData);
+-  auth->username = g_strdup (username);
+-  auth->password = g_strdup (password);
+-  g_signal_connect_data (data->session,
+-                         "authenticate",
+-                         G_CALLBACK (ews_client_authenticate),
+-                         auth,
+-                         ews_client_autodiscover_auth_data_free,
+-                         0);
+-
+-  g_signal_connect (data->session, "request-started", G_CALLBACK (ews_client_request_started), task);
+-
+-  soup_session_queue_message (data->session,
+-                              data->msgs[0],
+-                              ews_client_autodiscover_response_cb,
+-                              g_object_ref (task));
+-  soup_session_queue_message (data->session,
+-                              data->msgs[1],
+-                              ews_client_autodiscover_response_cb,
+-                              g_object_ref (task));
++
++  soup_session_send_and_read_async (data->session,
++                                    data->msgs[0],
++                                    G_PRIORITY_DEFAULT,
++                                    data->cancellable,
++                                    (GAsyncReadyCallback)ews_client_autodiscover_response_cb,
++                                    g_object_ref (task));
++  soup_session_send_and_read_async (data->session,
++                                    data->msgs[1],
++                                    G_PRIORITY_DEFAULT,
++                                    data->cancellable,
++                                    (GAsyncReadyCallback)ews_client_autodiscover_response_cb,
++                                    g_object_ref (task));
+ 
+   g_free (url2);
+   g_free (url1);
+--- a/src/goabackend/goahttpclient.c
++++ b/src/goabackend/goahttpclient.c
+@@ -82,7 +82,7 @@ http_client_check_data_free (gpointer us
+ 
+   g_clear_error (&data->error);
+ 
+-  /* soup_session_queue_message stole the references to data->msg */
++  g_object_unref (data->msg);
+   g_object_unref (data->session);
+   g_slice_free (CheckData, data);
+ }
+@@ -97,9 +97,8 @@ http_client_check_auth_data_free (gpoint
+   g_slice_free (CheckAuthData, auth);
+ }
+ 
+-static void
+-http_client_authenticate (SoupSession *session,
+-                         SoupMessage *msg,
++static gboolean
++http_client_authenticate (SoupMessage *msg,
+                          SoupAuth *auth,
+                          gboolean retrying,
+                          gpointer user_data)
+@@ -107,26 +106,26 @@ http_client_authenticate (SoupSession *s
+   CheckAuthData *data = user_data;
+ 
+   if (retrying)
+-    return;
++    return FALSE;
+ 
+   soup_auth_authenticate (auth, data->username, data->password);
++  return TRUE;
+ }
+ 
+-static void
+-http_client_request_started (SoupSession *session, SoupMessage *msg, SoupSocket *socket, gpointer user_data)
++static gboolean
++http_client_accept_certificate (SoupMessage *msg, GTlsCertificate *cert, GTlsCertificateFlags cert_flags, gpointer user_data)
+ {
+   CheckData *data;
+   GTask *task = G_TASK (user_data);
+-  GTlsCertificateFlags cert_flags;
+ 
+   g_debug ("goa_http_client_check(): request started (%p)", msg);
+ 
+   data = (CheckData *) g_task_get_task_data (task);
+ 
+-  if (!data->accept_ssl_errors
+-      && soup_message_get_https_status (msg, NULL, &cert_flags)
+-      && cert_flags != 0
+-      && data->error == NULL)
++  if (data->accept_ssl_errors || cert_flags == 0)
++    return TRUE;
++
++  if (data->error == NULL)
+     {
+       goa_utils_set_error_ssl (&data->error, cert_flags);
+ 
+@@ -135,6 +134,8 @@ http_client_request_started (SoupSession
+        */
+       soup_session_abort (data->session);
+     }
++
++  return FALSE;
+ }
+ 
+ static void
+@@ -154,21 +155,27 @@ http_client_check_cancelled_cb (GCancell
+ }
+ 
+ static void
+-http_client_check_response_cb (SoupSession *session, SoupMessage *msg, gpointer user_data)
++http_client_check_response_cb (SoupSession *session, GAsyncResult *result, gpointer user_data)
+ {
++  SoupMessage *msg;
+   CheckData *data;
+-  GCancellable *cancellable;
+   GTask *task = G_TASK (user_data);
++  guint status;
++  GBytes *body;
++  GError *error = NULL;
+ 
+-  g_debug ("goa_http_client_check(): response (%p, %u)", msg, msg->status_code);
++  msg = soup_session_get_async_result_message (session, result);
++
++  g_debug ("goa_http_client_check(): response (%p, %u)", msg, soup_message_get_status (msg));
++
++  body = soup_session_send_and_read_finish (session, result, &error);
+ 
+   data = (CheckData *) g_task_get_task_data (task);
+-  cancellable = g_task_get_cancellable (task);
+ 
+-  /* status == SOUP_STATUS_CANCELLED, if we are being aborted by the
++  /* G_IO_ERROR_CANCELLED, if we are being aborted by the
+    * GCancellable or due to an SSL error.
+    */
+-  if (msg->status_code == SOUP_STATUS_CANCELLED)
++  if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+     {
+       /* If we are being aborted by the GCancellable then there might
+        * or might not be an error. The GCancellable can be triggered
+@@ -176,20 +183,27 @@ http_client_check_response_cb (SoupSessi
+        * of events across threads.
+        */
+       if (data->error == NULL)
+-        g_cancellable_set_error_if_cancelled (cancellable, &data->error);
++        g_propagate_error (&data->error, g_steal_pointer (&error));
+ 
+       goto out;
+     }
+-  else if (msg->status_code != SOUP_STATUS_OK)
++
++  status = soup_message_get_status (msg);
++  if (status != SOUP_STATUS_OK || error)
+     {
+-      g_warning ("goa_http_client_check() failed: %u — %s", msg->status_code, msg->reason_phrase);
++      g_warning ("goa_http_client_check() failed: %u — %s", status, soup_message_get_reason_phrase (msg));
+       g_return_if_fail (data->error == NULL);
+ 
+-      goa_utils_set_error_soup (&data->error, msg);
++      if (error)
++        g_propagate_error (&data->error, g_steal_pointer (&error));
++      else
++        goa_utils_set_error_soup (&data->error, msg);
+       goto out;
+     }
+ 
+  out:
++  g_clear_error (&error);
++  g_clear_pointer (&body, g_bytes_unref);
+   if (data->error != NULL)
+     g_task_return_error (task, g_steal_pointer (&data->error));
+   else
+@@ -225,7 +239,7 @@ goa_http_client_check (GoaHttpClient
+   data = g_slice_new0 (CheckData);
+   g_task_set_task_data (task, data, http_client_check_data_free);
+ 
+-  data->session = soup_session_new_with_options (SOUP_SESSION_SSL_STRICT, FALSE, NULL);
++  data->session = soup_session_new ();
+ 
+   logger = goa_soup_logger_new (SOUP_LOGGER_LOG_BODY, -1);
+   soup_session_add_feature (data->session, SOUP_SESSION_FEATURE (logger));
+@@ -246,15 +260,21 @@ goa_http_client_check (GoaHttpClient
+   auth = g_slice_new0 (CheckAuthData);
+   auth->username = g_strdup (username);
+   auth->password = g_strdup (password);
+-  g_signal_connect_data (data->session,
++  g_signal_connect_data (data->msg,
+                          "authenticate",
+                          G_CALLBACK (http_client_authenticate),
+                          auth,
+                          http_client_check_auth_data_free,
+                          0);
+ 
+-  g_signal_connect (data->session, "request-started", G_CALLBACK (http_client_request_started), task);
+-  soup_session_queue_message (data->session, data->msg, http_client_check_response_cb, g_object_ref (task));
++  g_signal_connect (data->msg, "accept-certificate", G_CALLBACK (http_client_accept_certificate), task);
++
++  soup_session_send_and_read_async (data->session,
++                                    data->msg,
++                                    G_PRIORITY_DEFAULT,
++                                    data->cancellable,
++                                    (GAsyncReadyCallback)http_client_check_response_cb,
++                                    g_object_ref (task));
+ 
+   g_object_unref (task);
+ }
+--- a/src/goabackend/goalastfmprovider.c
++++ b/src/goabackend/goalastfmprovider.c
+@@ -483,8 +483,7 @@ add_account_cb (GoaManager *manager, GAs
+ 
+ static void
+ check_cb (RestProxyCall *call,
+-          const GError *error,
+-          GObject *weak_object,
++          GAsyncResult *result,
+           gpointer user_data)
+ {
+   AddAccountData *data = user_data;
+@@ -494,6 +493,9 @@ check_cb (RestProxyCall *call,
+   JsonObject *session_obj;
+   const gchar *payload;
+ 
++  if (!rest_proxy_call_invoke_finish (call, result, &data->error))
++    goto out;
++
+   parser = NULL;
+ 
+   parser = json_parser_new ();
+@@ -562,12 +564,12 @@ on_rest_proxy_call_cancelled_cb (GCancel
+ }
+ 
+ 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 +600,7 @@ lastfm_login (GoaProvider
+   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 +667,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 +821,7 @@ refresh_account (GoaProvider    *provide
+                 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);
+--- a/src/goabackend/goaoauth2provider.c
++++ b/src/goabackend/goaoauth2provider.c
+@@ -95,11 +95,15 @@ is_authorization_error (GError *error)
+   g_return_val_if_fail (error != NULL, FALSE);
+ 
+   ret = FALSE;
+-  if (error->domain == REST_PROXY_ERROR || error->domain == SOUP_HTTP_ERROR)
++  if (error->domain == REST_PROXY_ERROR)
+     {
+       if (SOUP_STATUS_IS_CLIENT_ERROR (error->code))
+         ret = TRUE;
+     }
++  else if (g_error_matches (error, GOA_ERROR, GOA_ERROR_NOT_AUTHORIZED))
++    {
++      ret = TRUE;
++    }
+   return ret;
+ }
+ 
+--- a/src/goabackend/goaoauthprovider.c
++++ b/src/goabackend/goaoauthprovider.c
+@@ -77,11 +77,15 @@ is_authorization_error (GError *error)
+   g_return_val_if_fail (error != NULL, FALSE);
+ 
+   ret = FALSE;
+-  if (error->domain == REST_PROXY_ERROR || error->domain == SOUP_HTTP_ERROR)
++  if (error->domain == REST_PROXY_ERROR)
+     {
+       if (SOUP_STATUS_IS_CLIENT_ERROR (error->code))
+         ret = TRUE;
+     }
++  else if (g_error_matches (error, GOA_ERROR, GOA_ERROR_NOT_AUTHORIZED))
++    {
++      ret = TRUE;
++    }
+   return ret;
+ }
+ 
+@@ -701,9 +705,15 @@ on_web_view_decide_policy (WebKitWebView
+ }
+ 
+ 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);
+ }
+ 
+@@ -770,11 +780,7 @@ get_tokens_and_identity (GoaOAuthProvide
+       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);
+ 
+@@ -796,6 +802,9 @@ get_tokens_and_identity (GoaOAuthProvide
+   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;
+--- 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);
+ 
+--- a/src/goabackend/goasouplogger.c
++++ b/src/goabackend/goasouplogger.c
+@@ -22,15 +22,6 @@
+ 
+ #include "goasouplogger.h"
+ 
+-struct _GoaSoupLogger
+-{
+-  SoupLogger parent_instance;
+-};
+-
+-G_DEFINE_TYPE (GoaSoupLogger, goa_soup_logger, SOUP_TYPE_LOGGER);
+-
+-/* ---------------------------------------------------------------------------------------------------- */
+-
+ static void
+ goa_soup_logger_printer (SoupLogger         *logger,
+                          SoupLoggerLogLevel  level,
+@@ -45,24 +36,16 @@ goa_soup_logger_printer (SoupLogger
+   g_free (message);
+ }
+ 
+-/* ---------------------------------------------------------------------------------------------------- */
+-
+-static void
+-goa_soup_logger_init (GoaSoupLogger *self)
+-{
+-  soup_logger_set_printer (SOUP_LOGGER (self), goa_soup_logger_printer, NULL, NULL);
+-}
+-
+-static void
+-goa_soup_logger_class_init (GoaSoupLoggerClass *klass)
+-{
+-}
+-
+-/* ---------------------------------------------------------------------------------------------------- */
+-
+ SoupLogger *
+ goa_soup_logger_new (SoupLoggerLogLevel   level,
+                      gint                 max_body_size)
+ {
+-  return g_object_new (GOA_TYPE_SOUP_LOGGER, "level", level, "max-body-size", max_body_size, NULL);
++  SoupLogger *logger;
++
++  logger = soup_logger_new (level);
++  if (max_body_size != -1)
++    soup_logger_set_max_body_size (logger, max_body_size);
++  soup_logger_set_printer (logger, goa_soup_logger_printer, NULL, NULL);
++
++  return logger;
+ }
+--- a/src/goabackend/goasouplogger.h
++++ b/src/goabackend/goasouplogger.h
+@@ -27,9 +27,6 @@
+ 
+ G_BEGIN_DECLS
+ 
+-#define GOA_TYPE_SOUP_LOGGER (goa_soup_logger_get_type ())
+-G_DECLARE_FINAL_TYPE (GoaSoupLogger, goa_soup_logger, GOA, SOUP_LOGGER, SoupLogger);
+-
+ SoupLogger     *goa_soup_logger_new                (SoupLoggerLogLevel   level,
+                                                     gint                 max_body_size);
+ 
+--- a/src/goabackend/goautils.c
++++ b/src/goabackend/goautils.c
+@@ -841,29 +841,26 @@ goa_utils_set_error_soup (GError **err,
+ {
+   gchar *error_msg = NULL;
+   gint error_code = GOA_ERROR_FAILED; /* TODO: more specific */
++  guint status_code;
+ 
+-  switch (msg->status_code)
++  status_code = soup_message_get_status (msg);
++  switch (status_code)
+     {
+-    case SOUP_STATUS_CANT_RESOLVE:
+-      error_msg = g_strdup (_("Cannot resolve hostname"));
+-      break;
+-
+-    case SOUP_STATUS_CANT_RESOLVE_PROXY:
+-      error_msg = g_strdup (_("Cannot resolve proxy hostname"));
+-      break;
+-
+     case SOUP_STATUS_INTERNAL_SERVER_ERROR:
+     case SOUP_STATUS_NOT_FOUND:
+       error_msg = g_strdup (_("Cannot find WebDAV endpoint"));
+       break;
+ 
+-    case SOUP_STATUS_UNAUTHORIZED:
+-      error_msg = g_strdup (_("Authentication failed"));
+-      error_code = GOA_ERROR_NOT_AUTHORIZED;
+-      break;
+-
+     default:
+-      error_msg = g_strdup_printf (_("Code: %u — Unexpected response from server"), msg->status_code);
++      if (SOUP_STATUS_IS_CLIENT_ERROR (status_code))
++        {
++          error_msg = g_strdup (_("Authentication failed"));
++          error_code = GOA_ERROR_NOT_AUTHORIZED;
++        }
++      else
++        {
++          error_msg = g_strdup_printf (_("Code: %u — Unexpected response from server"), status_code);
++        }
+       break;
+     }
+ 
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-online-accounts/gnome-online-accounts_3.40.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-online-accounts/gnome-online-accounts_3.43.1.bb
similarity index 79%
rename from meta-openembedded/meta-gnome/recipes-gnome/gnome-online-accounts/gnome-online-accounts_3.40.0.bb
rename to meta-openembedded/meta-gnome/recipes-gnome/gnome-online-accounts/gnome-online-accounts_3.43.1.bb
index c7e8eec..8580d29 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-online-accounts/gnome-online-accounts_3.40.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-online-accounts/gnome-online-accounts_3.43.1.bb
@@ -4,19 +4,23 @@
 
 GNOMEBASEBUILDCLASS = "autotools"
 
-inherit gnomebase gsettings gobject-introspection gsettings gtk-doc vala gettext upstream-version-is-even features_check
+inherit gnomebase gsettings gobject-introspection gsettings gtk-doc vala gettext features_check
 
 # for webkitgtk
 REQUIRED_DISTRO_FEATURES = "x11"
 
 DEPENDS = "glib-2.0"
 
-SRC_URI[archive.sha256sum] = "585c4f979f6f543b77bfdb4fb01eb18ba25c2aec5b7866c676d929616fb2c3fa"
+SRC_URI += "\
+    file://0001-Use-GUri-instead-of-SoupURI.patch \
+    file://0002-Port-to-libsoup3.patch \
+"
+SRC_URI[archive.sha256sum] = "3bcb3663a12efd4482d9fdda3e171676267fc739eb6440a2b7109a0e87afb7e8"
 
 # 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[backend] = "--enable-backend,--disable-backend,gtk+3 webkitgtk libsoup json-glib libsecret rest libxml2"
 PACKAGECONFIG[krb5] = "--enable-kerberos, --disable-kerberos , krb5 gcr"
 
 # no extra dependencies!
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-screenshot/gnome-screenshot_40.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-screenshot/gnome-screenshot_40.0.bb
new file mode 100644
index 0000000..72272f9
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-screenshot/gnome-screenshot_40.0.bb
@@ -0,0 +1,22 @@
+SUMMARY = "GNOME Screenshot"
+DESCRIPTION = "GNOME Screenshot is a small utility that takes a screenshot \
+of the whole desktop, the currently focused window, or an area of the screen."
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552"
+
+SECTION = "x11/gnome"
+
+GNOMEBASEBUILDCLASS = "meson"
+
+inherit features_check gnomebase gettext upstream-version-is-even pkgconfig
+
+SRC_URI[archive.sha256sum] = "368ca95a39e39dc2406c849e8c4205e3f574acdd874c30741873455e3d21a5e2"
+
+DEPENDS += "glib-2.0 glib-2.0-native gtk+3 libhandy xext"
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+FILES:${PN} += " \
+    ${datadir}/dbus-1 \
+    ${datadir}/metainfo \
+"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/libgweather/libgweather_3.36.2.bb b/meta-openembedded/meta-gnome/recipes-gnome/libgweather/libgweather_40.0.bb
similarity index 78%
rename from meta-openembedded/meta-gnome/recipes-gnome/libgweather/libgweather_3.36.2.bb
rename to meta-openembedded/meta-gnome/recipes-gnome/libgweather/libgweather_40.0.bb
index 69fe955..1d9daac 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/libgweather/libgweather_3.36.2.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/libgweather/libgweather_40.0.bb
@@ -7,8 +7,7 @@
 
 inherit gnomebase gsettings gobject-introspection gettext gtk-doc vala features_check upstream-version-is-even
 
-SRC_URI[archive.md5sum] = "ff399cf89e97a3e574ae05db5617b96b"
-SRC_URI[archive.sha256sum] = "ee1201a8fc25c14e940d3b26db49a34947c8aebf67dee01ee67fbcb06ecb37a0"
+SRC_URI[archive.sha256sum] = "ca4e8f2a4baaa9fc6d75d8856adb57056ef1cd6e55c775ba878ae141b6276ee6"
 
 # gobject-introspection is mandatory and cannot be configured
 REQUIRED_DISTRO_FEATURES = "gobject-introspection-data"
@@ -17,8 +16,9 @@
 GTKDOC_MESON_OPTION = "gtk_doc"
 
 DEPENDS = " \
+    geocode-glib \
     gtk+3 \
     json-glib \
     libsoup-2.4 \
-    geocode-glib \
+    python3-pygobject-native \
 "
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/mutter/mutter_3.34.6.bb b/meta-openembedded/meta-gnome/recipes-gnome/mutter/mutter_3.34.6.bb
index 72e7767..b659d92 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/mutter/mutter_3.34.6.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/mutter/mutter_3.34.6.bb
@@ -73,7 +73,9 @@
     done
 }
 
-PACKAGES =+ "${PN}-tests"
+GSETTINGS_PACKAGE = "${PN}-gsettings"
+
+PACKAGES =+ "${PN}-tests ${PN}-gsettings"
 
 FILES:${PN} += " \
     ${datadir}/gnome-control-center \
@@ -93,5 +95,5 @@
     ${libdir}/${MUTTER_API_NAME}/lib*.so \
 "
 
-RDEPENDS:${PN} += "zenity"
+RDEPENDS:${PN} += "zenity ${PN}-gsettings"
 
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
new file mode 100644
index 0000000..37ba0a0
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/rest/files/0001-Use-GUri-instead-of-SoupURI.patch
@@ -0,0 +1,181 @@
+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
new file mode 100644
index 0000000..eed522f
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/rest/files/0002-Port-to-libsoup3.patch
@@ -0,0 +1,1696 @@
+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
index 47e3f8d..545224a 100644
--- 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
@@ -14,13 +14,13 @@
 
 inherit gnomebase gobject-introspection gtk-doc vala
 
-SRC_URI[archive.md5sum] = "ece4547298a81105f307369d73c21b9d"
-SRC_URI[archive.sha256sum] = "0513aad38e5d3cedd4ae3c551634e3be1b9baaa79775e53b2dba9456f15b01c9"
-
-# * gnome environment requires libsoup build with in gnome PACKAGECONFIG
-# * libsoup-gnome support was removed upstream three years ago [1]
-# [1] https://gitlab.gnome.org/GNOME/librest/commit/8f904a8e2bb38a7bf72245cdf2f1ecad17e9a720
-EXTRA_OECONF = "--without-gnome"
+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).
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/yelp/yelp-tools_40.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/yelp/yelp-tools_41.0.bb
similarity index 82%
rename from meta-openembedded/meta-gnome/recipes-gnome/yelp/yelp-tools_40.0.bb
rename to meta-openembedded/meta-gnome/recipes-gnome/yelp/yelp-tools_41.0.bb
index 0e7f499..ec8edb8 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/yelp/yelp-tools_40.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/yelp/yelp-tools_41.0.bb
@@ -16,7 +16,7 @@
     yelp-xsl \
 "
 
-SRC_URI[archive.sha256sum] = "664bacf2f3dd65ef00a43f79487351ab64a6c4c629c56ac0ceb1723c2eb66aae"
+SRC_URI[archive.sha256sum] = "37f1acc02bcbe68a31b86e07c129a839bd3276e656dc89eb7fc0a92746eff272"
 
 RDEPENDS:${PN} += "python3-core yelp-xsl"
 
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/yelp/yelp-xsl_40.2.bb b/meta-openembedded/meta-gnome/recipes-gnome/yelp/yelp-xsl_41.0.bb
similarity index 85%
rename from meta-openembedded/meta-gnome/recipes-gnome/yelp/yelp-xsl_40.2.bb
rename to meta-openembedded/meta-gnome/recipes-gnome/yelp/yelp-xsl_41.0.bb
index 9ac88c1..029fd02 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/yelp/yelp-xsl_40.2.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/yelp/yelp-xsl_41.0.bb
@@ -10,7 +10,7 @@
 
 DEPENDS += "libxml2"
 
-SRC_URI[archive.sha256sum] = "919c552f846aaec741fe51d5af416b469bcdb25c77effc3b5a15a4b4b7ff814e"
+SRC_URI[archive.sha256sum] = "c8cd64c093bbd8c5d5e47fd38864e90831b5f9cf7403530870206fa96636a4a5"
 
 RDEPENDS:${PN}:append:class-target = " libxml2 itstool"
 
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/yelp/yelp_40.3.bb b/meta-openembedded/meta-gnome/recipes-gnome/yelp/yelp_41.1.bb
similarity index 86%
rename from meta-openembedded/meta-gnome/recipes-gnome/yelp/yelp_40.3.bb
rename to meta-openembedded/meta-gnome/recipes-gnome/yelp/yelp_41.1.bb
index c179a61..980b9a1 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/yelp/yelp_40.3.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/yelp/yelp_41.1.bb
@@ -9,7 +9,7 @@
 # for webkitgtk
 REQUIRED_DISTRO_FEATURES = "x11"
 
-SRC_URI[archive.sha256sum] = "a173847851f26189be78ecbb10015d539d8cceffc7c23e8635492bc3ada5ee23"
+SRC_URI[archive.sha256sum] = "456a6415647bceeb0159b90b3553ff328728cf29a608fce08024232504ccb874"
 
 DEPENDS += " \
     libxml2-native \
diff --git a/meta-openembedded/meta-gnome/recipes-support/packagegroups/packagegroup-gnome-apps.bb b/meta-openembedded/meta-gnome/recipes-support/packagegroups/packagegroup-gnome-apps.bb
index d47d847..d003e23 100644
--- a/meta-openembedded/meta-gnome/recipes-support/packagegroups/packagegroup-gnome-apps.bb
+++ b/meta-openembedded/meta-gnome/recipes-support/packagegroups/packagegroup-gnome-apps.bb
@@ -16,6 +16,7 @@
     gnome-calendar \
     gnome-font-viewer \
     gnome-photos \
+    gnome-screenshot \
     gnome-terminal \
     gthumb \
     libwnck3 \
