diff --git a/TRANSLATORS.rst b/TRANSLATORS.rst
index 5e2cf51f77ab438dbfaf3925ea3286773e1a42c3..7fea7e399704fdc008d2a26e2378f25a9ebef4f6 100644
--- a/TRANSLATORS.rst
+++ b/TRANSLATORS.rst
@@ -1,6 +1,8 @@
 Translating Funkwhale
 =====================
 
+A step-by-step, beginner friendly guide is available at https://contribute.funkwhale.audio/guides/translate/
+
 Thank you for reading this! If you want to help translate Funkwhale,
 you found the proper place :)
 
@@ -21,8 +23,41 @@ Respecting those guidelines is mandatory if you want your translation to be incl
 
 - Use gender-neutral language and wording
 
+Submitting a new language
+-------------------------
+
+1. Pull the latest version of ``develop``
+2. Create a new branch, e.g ``git checkout -b translations-new-fr-ca``
+3. Add your new language code and name in ``front/src/locales.js``. Use the native language name, as it is what appears in the UI selector.
+4. Create the ``po`` file from template:
+
+.. code-block:: shell
+
+    export LOCALE=fr_CA  # replace with your actual locale code
+    mkdir -p front/locales/$LOCALE/LC_MESSAGES
+    msginit --no-wrap --no-translator --locale=$LOCALE --input=front/locales/app.pot --output-file=front/locales/$LOCALE/LC_MESSAGES/app.po
+
+5. Then commit your changes, push, and submit a pull request on the ``develop`` branch
+
 Requesting a new language
 -------------------------
 
-If you'd like to see a new language in Funkwhale, please open an issue here:
+If you cannot submit a new language yourself, you can request it by opening an issue here:
 https://dev.funkwhale.audio/funkwhale/funkwhale/issues
+
+Extracting messages from source
+-------------------------------
+
+We offer a script to update existing ``po`` and ``pot`` files with new translations
+from the source code. This action should be run regularly, and in particular before
+lots of translation work is expected (e.g a few weeks before a new release), or when
+the UI code changes a lot. Otherwise, translators end up translating some obsolete messages,
+or not translationg new messages.
+
+1. `Lock the translations on weblate <https://translate.funkwhale.audio/projects/funkwhale/front/#repository>`_ (``Lock`` button in the sidebar). This will prevent translators from working, and help prevent potential conflicts in the source code
+2. `Commit and push changes from weblate <https://translate.funkwhale.audio/projects/funkwhale/front/#repository>`_ (``Commit`` and ``Push`` buttons in the sidebar)
+3. Pull ``develop`` in your local git repository to ensure you have the latest version of the translations
+4. Create a dedicated branch with ``git checkout -b translations-integration``
+5. Extract the translations with ``cd front && ./scripts/i18n-extract.sh``. This will update all ``po`` files as necessary
+6. Review, commit and push the changes, then open a merge request on the ``develop`` branch
+7. When the MR is merged, `Unlock the translations on weblate <https://translate.funkwhale.audio/projects/funkwhale/front/#repository>`_ (``Unlock`` button in the sidebar).
diff --git a/api/funkwhale_api/history/filters.py b/api/funkwhale_api/history/filters.py
index 30bc78f6a9d0a10394a1d76bf2e5ea4de0c6e8aa..02549b3b10ea1c2e5c671ecb0652024dbf93989a 100644
--- a/api/funkwhale_api/history/filters.py
+++ b/api/funkwhale_api/history/filters.py
@@ -1,9 +1,14 @@
+import django_filters
+
 from funkwhale_api.moderation import filters as moderation_filters
 
 from . import models
 
 
 class ListeningFilter(moderation_filters.HiddenContentFilterSet):
+    username = django_filters.CharFilter("user__username")
+    domain = django_filters.CharFilter("user__actor__domain_id")
+
     class Meta:
         model = models.Listening
         hidden_content_fields_mapping = moderation_filters.USER_FILTER_CONFIG[
diff --git a/changes/changelog.d/838.bugfix b/changes/changelog.d/838.bugfix
new file mode 100644
index 0000000000000000000000000000000000000000..3394897565b9c801597460d0fc9b53cf17abfca7
--- /dev/null
+++ b/changes/changelog.d/838.bugfix
@@ -0,0 +1 @@
+Fixed issue with player changing height when hovering over the volume slider (#838)
diff --git a/changes/changelog.d/849.bugfix b/changes/changelog.d/849.bugfix
new file mode 100644
index 0000000000000000000000000000000000000000..61f1c2a2e591a237365b328391988e1ed4b935ed
--- /dev/null
+++ b/changes/changelog.d/849.bugfix
@@ -0,0 +1 @@
+Fixed issue with French translation for "Start radio" (#849)
diff --git a/deploy/apache.conf b/deploy/apache.conf
index e1409a627d3d4e76ec4a1901ace204ddf6efb374..3b34dcdbad435db90c6e3617bf3b2da3a00cd363 100644
--- a/deploy/apache.conf
+++ b/deploy/apache.conf
@@ -64,11 +64,6 @@ Define MUSIC_DIRECTORY_PATH /srv/funkwhale/data/music
       Allow from all
    </Proxy>
 
-   # Activating WebSockets
-   <Location "/api/v1/activity">
-	   ProxyPass ${funkwhale-api-ws}/api/v1/activity
-   </Location>
-
    <Location "/">
       # similar to nginx 'client_max_body_size 100M;'
       LimitRequestBody 104857600
@@ -107,6 +102,11 @@ Define MUSIC_DIRECTORY_PATH /srv/funkwhale/data/music
    </Location>
    Alias /staticfiles /srv/funkwhale/data/static
 
+   # Activating WebSockets
+   <Location "/api/v1/activity">
+	   ProxyPass ${funkwhale-api-ws}/api/v1/activity
+   </Location>
+
    # Setting appropriate access levels to serve frontend
    <Directory "/srv/funkwhale/data/static">
       Options FollowSymLinks
diff --git a/docs/admin/external-storages.rst b/docs/admin/external-storages.rst
index c8dbbe9635f30846ebf97090cda35fa763356c9d..bd136df621a0d2b24aa33e08e5a868374d91a727 100644
--- a/docs/admin/external-storages.rst
+++ b/docs/admin/external-storages.rst
@@ -115,3 +115,29 @@ If you are using ``awscli``, you can store this policy in a ``/tmp/policy`` file
 apply it using the following command::
 
     aws s3api put-bucket-policy --bucket <yourbucketname> --policy file:///tmp/policy
+
+Troubleshooting
+***************
+
+No Resolver Found
+^^^^^^^^^^^^^^^^^
+
+Depending on your setup, you may experience the following issue when trying to stream
+music directly from your S3-compatible store.
+
+.. code-block:: shell
+
+    [error] 2832#2832: *1 no resolver defined to resolve [address] client: [IP], server: [servername], request: "GET API request", host: "[your_domain]", referrer: "[your_domain/library]"
+
+This happpens when the nginx config is unable to use your server's DNS resolver. This issue
+is still under investigation, but in the meantime can be worked around by specifying a resolver
+in your ``funkwhale.template`` under the ``location ~/_protected/media/(.+)`` section.
+
+.. code-block:: shell
+
+    location ~ /_protected/media/(.+) {
+     resolver 1.1.1.1;
+     internal;
+     proxy_pass $1;
+    }
+
diff --git a/front/locales/fr_FR/LC_MESSAGES/app.po b/front/locales/fr_FR/LC_MESSAGES/app.po
index c93e5d43f239f32c932c3cdde914c78e024174ff..bb9db8d34749fec1b5e959ac26a00dc9b5d90816 100644
--- a/front/locales/fr_FR/LC_MESSAGES/app.po
+++ b/front/locales/fr_FR/LC_MESSAGES/app.po
@@ -3986,7 +3986,7 @@ msgstr "Membre de l'équipe"
 #: src/components/radios/Button.vue:4
 msgctxt "*/Queue/Button.Label/Short, Verb"
 msgid "Start radio"
-msgstr "Arrêter la radio"
+msgstr "Démarrer la radio"
 
 #: front/src/views/admin/Settings.vue:86
 msgctxt "Content/Admin/Menu"
diff --git a/front/src/components/audio/Player.vue b/front/src/components/audio/Player.vue
index ea15ebc8720db69b7b0ccb69319329afdbf4e94a..8faaf670c00a736637be8f9a7b767d6deef6ce82 100644
--- a/front/src/components/audio/Player.vue
+++ b/front/src/components/audio/Player.vue
@@ -199,7 +199,6 @@
           @click.prevent.stop="clean()"
           class="two wide column control">
           <i class="icons">
-
             <i :class="['ui', 'trash', 'secondary', {'disabled': queue.tracks.length === 0}, 'icon']" ></i>
             <i :class="['ui corner large inverted', 'list', {'disabled': queue.tracks.length === 0}, 'icon']" ></i>
           </i>
@@ -926,6 +925,11 @@ export default {
   animation-timing-function: linear;
   animation-iteration-count: infinite;
 }
+
+.icons {
+  position: absolute;
+}
+
 i.icons .corner.icon {
   font-size: 1em;
   right: -0.3em;