diff --git a/api/Dockerfile b/api/Dockerfile
index 1ba704e38739479f0f3c31ab58861a9b5d49c555..e339b78ffae145f94bb81a3c54b0c1e77990006d 100644
--- a/api/Dockerfile
+++ b/api/Dockerfile
@@ -17,6 +17,8 @@ RUN \
     openldap-dev \
     openssl-dev \
     cargo \
+    libxml2-dev \
+    libxslt-dev \
     && \
     \
     ln -s /usr/bin/python3 /usr/bin/python
@@ -57,6 +59,8 @@ RUN apk add --no-cache \
     jpeg-dev \
     ffmpeg             \
     libpq              \
+    libxml2 \
+    libxslt \
     && \
     \
     ln -s /usr/bin/python3 /usr/bin/python
diff --git a/api/funkwhale_api/federation/jsonld.py b/api/funkwhale_api/federation/jsonld.py
index f95b279f4dcef60222b8222cb378c1a868d716fc..d91690d1c93ffc46b9a3d216e704e2a087ce904b 100644
--- a/api/funkwhale_api/federation/jsonld.py
+++ b/api/funkwhale_api/federation/jsonld.py
@@ -46,6 +46,17 @@ def expand(doc, options=None, default_contexts=["AS", "FW", "SEC"]):
             # probably an already expanded document
             pass
 
+    # XXX This is a hotfix for a bug in pyld. The JSON-LD allows empty dicts or lists as part of the
+    # context, but this makes pyld failing to parse the context the right way. So we remove all
+    # empty items from the contexts
+    try:
+        for active_ctx in doc["@context"]:
+            if len(active_ctx) == 0:
+                doc["@context"].remove(active_ctx)
+    except KeyError:
+        # Nothing to do here if no context is available at all
+        pass
+
     result = pyld.jsonld.expand(doc, options=options)
     try:
         # jsonld.expand returns a list, which is useless for us
diff --git a/api/requirements/base.txt b/api/requirements/base.txt
index 4f39ea82705f4c4a773769ba3bd1895233576a4f..a084fa84d96b8e46e3c9c37082ebb2959e62a6dc 100644
--- a/api/requirements/base.txt
+++ b/api/requirements/base.txt
@@ -54,7 +54,7 @@ python-ldap~=3.3.0
 django-auth-ldap~=2.4.0
 
 pydub~=0.25.1
-pyld~=1.0.0
+pyld~=2.0.3
 aiohttp~=3.7.4
 
 django-oauth-toolkit~=1.3.0
diff --git a/docs/installation/debian.rst b/docs/installation/debian.rst
index 1a13a4008c6923298a6f153a73791e9fad330b91..b91ee0dba753d0cae62192424b8da647007b2ac6 100644
--- a/docs/installation/debian.rst
+++ b/docs/installation/debian.rst
@@ -37,7 +37,7 @@ On Debian-like systems, you can install them using:
 
     sudo apt-get update
     # Install system dependencies
-    sudo apt-get install curl python3-pip python3-venv git unzip libldap2-dev libsasl2-dev gettext-base zlib1g-dev libffi-dev libssl-dev
+    sudo apt-get install curl python3-pip python3-venv git unzip libldap2-dev libsasl2-dev gettext-base zlib1g-dev libffi-dev libssl-dev libxml2-dev libxslti1-dev
 
     # Funkwhale dependencies
     sudo apt install build-essential ffmpeg libjpeg-dev libmagic-dev libpq-dev postgresql-client python3-dev make
@@ -389,7 +389,7 @@ And start the services:
 To ensure all Funkwhale processes are started automatically after a reboot, run:
 
 .. code-block:: shell
-    
+
     sudo systemctl enable funkwhale-server
     sudo systemctl enable funkwhale-worker
     sudo systemctl enable funkwhale-beat