diff --git a/src/plugins/sib-scroll-down-on-focus.js b/src/plugins/sib-scroll-down-on-focus.js
new file mode 100644
index 0000000000000000000000000000000000000000..11652ab4283e4a5b4d9d1723b1ed2e33b7cda9b3
--- /dev/null
+++ b/src/plugins/sib-scroll-down-on-focus.js
@@ -0,0 +1,17 @@
+/**
+ * Forces the active chat to scroll down when the tab is focused again.
+ */
+converse.plugins.add('sib-scroll-down-on-focus', {
+  initialize() {
+    const _converse = this._converse;
+    const { api } = _converse;
+
+    api.listen.on('windowStateChanged', async data => {
+      if (data.state === 'visible' && api.connection.connected()) {
+        const chatBox = _converse.chatboxes.findWhere({ hidden: false });
+        const chatView = _converse.chatboxviews.get(chatBox?.get('jid'));
+        chatView?.scrollDown();
+      }
+    });
+  },
+});
diff --git a/src/solid-xmpp-chat.js b/src/solid-xmpp-chat.js
index 613139fe497d987439a7b9bed513f6dad6621ff0..498940875417460666b78b9ab535f9171dfe3c04 100644
--- a/src/solid-xmpp-chat.js
+++ b/src/solid-xmpp-chat.js
@@ -11,6 +11,7 @@ import './plugins/sib-custom-hats.js';
 import './plugins/sib-disconnected.js';
 import './plugins/sib-mam-history.js';
 import './plugins/sib-remove-notifications.js';
+import './plugins/sib-scroll-down-on-focus.js';
 import './plugins/sib-subscribe-to-rai.js';
 
 export const SolidXMPPChat = {
@@ -225,6 +226,7 @@ export const SolidXMPPChat = {
           'sib-disconnected',
           'sib-mam-history',
           'sib-remove-notifications',
+          'sib-scroll-down-on-focus',
           'sib-subscribe-to-rai',
         ],
       });