diff --git a/packages/desktop-client/src/browser-preload.browser.js b/packages/desktop-client/src/browser-preload.browser.js
index 714ff4a8c78fb670c34da26e2182b96b2ec21651..5886a6b2c4986952c2dc6c6f9ff6b76b412a0438 100644
--- a/packages/desktop-client/src/browser-preload.browser.js
+++ b/packages/desktop-client/src/browser-preload.browser.js
@@ -18,11 +18,18 @@ function createBackendWorker() {
   worker = new BackendWorker();
   initSQLBackend(worker);
 
+  if (window.SharedArrayBuffer) {
+    localStorage.removeItem('SharedArrayBufferOverride');
+  }
+
   worker.postMessage({
     type: 'init',
     version: ACTUAL_VERSION,
     isDev: IS_DEV,
-    hash: process.env.REACT_APP_BACKEND_WORKER_HASH
+    hash: process.env.REACT_APP_BACKEND_WORKER_HASH,
+    isSharedArrayBufferOverrideEnabled: localStorage.getItem(
+      'SharedArrayBufferOverride'
+    )
   });
 
   if (IS_DEV || IS_PERF_BUILD) {
diff --git a/packages/desktop-client/src/browser-server.js b/packages/desktop-client/src/browser-server.js
index 98159b3dd8d5732d15167b861b91312f92f3d98c..1093cd81909fe4ae38ca9045ca17603ccc397df3 100644
--- a/packages/desktop-client/src/browser-server.js
+++ b/packages/desktop-client/src/browser-server.js
@@ -10,7 +10,7 @@ self.addEventListener('message', e => {
       let version = msg.version;
       let hash = msg.hash;
 
-      if (!self.SharedArrayBuffer) {
+      if (!self.SharedArrayBuffer && !msg.isSharedArrayBufferOverrideEnabled) {
         self.postMessage({
           type: 'app-init-failure',
           SharedArrayBufferMissing: true
diff --git a/packages/desktop-client/src/components/FatalError.js b/packages/desktop-client/src/components/FatalError.js
index 4c816ed0be9509b448b2d7bf0b35a343b303b3e0..32b7869fb6d6c04eb01e4efbeb13130dd832d035 100644
--- a/packages/desktop-client/src/components/FatalError.js
+++ b/packages/desktop-client/src/components/FatalError.js
@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { useState } from 'react';
 
 import {
   View,
@@ -10,6 +10,7 @@ import {
   Link,
   Button
 } from 'loot-design/src/components/common';
+import { Checkbox } from 'loot-design/src/components/forms';
 import { colors } from 'loot-design/src/style';
 
 class FatalError extends React.Component {
@@ -38,7 +39,7 @@ class FatalError extends React.Component {
           <a href="https://actualbudget.github.io/docs/Troubleshooting/SharedArrayBuffer">
             our troubleshooting documentation
           </a>{' '}
-          for more information.
+          to learn more. <SharedArrayBufferOverride />
         </Text>
       );
     } else {
@@ -140,3 +141,52 @@ class FatalError extends React.Component {
   }
 }
 export default FatalError;
+
+function SharedArrayBufferOverride() {
+  let [expanded, setExpanded] = useState(false);
+  let [understand, setUnderstand] = useState(false);
+
+  return expanded ? (
+    <>
+      <P style={{ marginTop: 10 }}>
+        Actual uses <code>SharedArrayBuffer</code> to allow usage from multiple
+        tabs at once and to ensure correct behavior when switching files. While
+        it can run without access to <code>SharedArrayBuffer</code>, you may
+        encounter data loss or notice multiple budget files being merged with
+        each other.
+      </P>
+      <label
+        style={{ display: 'flex', alignItems: 'center', marginBottom: 10 }}
+      >
+        <Checkbox checked={understand} onChange={setUnderstand} /> I understand
+        the risks, run Actual in the unsupported fallback mode
+      </label>
+      <Button
+        disabled={!understand}
+        onClick={() => {
+          window.localStorage.setItem('SharedArrayBufferOverride', 'true');
+          window.location.reload();
+        }}
+      >
+        Open Actual
+      </Button>
+    </>
+  ) : (
+    <Link
+      onClick={() => setExpanded(true)}
+      style={{
+        color: `inherit !important`,
+        marginLeft: 5,
+        border: 'none !important',
+        background: 'none !important',
+        padding: '0 !important',
+        textDecoration: 'underline !important',
+        boxShadow: 'none !important',
+        display: 'inline !important',
+        font: 'inherit !important'
+      }}
+    >
+      Advanced options
+    </Link>
+  );
+}
diff --git a/packages/loot-core/src/client/actions/budgets.js b/packages/loot-core/src/client/actions/budgets.js
index 675d25e49cd56aad239d4b356ccd1e7ae1f6065a..ec395f950cceb539ced470f62b33f488f4c86563 100644
--- a/packages/loot-core/src/client/actions/budgets.js
+++ b/packages/loot-core/src/client/actions/budgets.js
@@ -119,6 +119,9 @@ export function closeBudget() {
       dispatch(setAppState({ loadingText: 'Closing...' }));
       await send('close-budget');
       dispatch(setAppState({ loadingText: null }));
+      if (localStorage.getItem('SharedArrayBufferOverride')) {
+        location.reload();
+      }
     }
   };
 }