diff --git a/web/shared-worker/worker/shared-worker.js b/web/shared-worker/worker/shared-worker.js
--- a/web/shared-worker/worker/shared-worker.js
+++ b/web/shared-worker/worker/shared-worker.js
@@ -7,6 +7,12 @@
   getClientStoreFromQueryExecutor,
   processDBStoreOperations,
 } from './process-operations.js';
+import {
+  getDBModule,
+  getSQLiteQueryExecutor,
+  setDBModule,
+  setSQLiteQueryExecutor,
+} from './worker-database.js';
 import initBackupClientModule from '../../backup-client-wasm/wasm/backup-client-wasm.js';
 import {
   decryptData,
@@ -25,8 +31,6 @@
   workerWriteRequests,
 } from '../../types/worker-types.js';
 import { getDatabaseModule } from '../db-module.js';
-import { type EmscriptenModule } from '../types/module.js';
-import { type SQLiteQueryExecutor } from '../types/sqlite-query-executor.js';
 import {
   COMM_SQLITE_DATABASE_PATH,
   CURRENT_USER_ID_KEY,
@@ -45,9 +49,6 @@
 
 let encryptionKey: ?CryptoKey = null;
 
-let sqliteQueryExecutor: ?SQLiteQueryExecutor = null;
-let dbModule: ?EmscriptenModule = null;
-
 let persistNeeded: boolean = false;
 let persistInProgress: boolean = false;
 
@@ -56,6 +57,8 @@
   commQueryExecutorFilename: ?string,
   encryptionKeyJWK?: ?SubtleCrypto$JsonWebKey,
 ) {
+  const dbModule = getDBModule();
+  const sqliteQueryExecutor = getSQLiteQueryExecutor();
   if (!!dbModule && !!sqliteQueryExecutor) {
     console.log('Database already initialized');
     return;
@@ -65,7 +68,7 @@
     ? dbModule
     : getDatabaseModule(commQueryExecutorFilename, webworkerModulesFilePath);
   if (!dbModule) {
-    dbModule = newModule;
+    setDBModule(newModule);
   }
 
   if (encryptionKeyJWK) {
@@ -100,8 +103,8 @@
   } else {
     console.info('Creating fresh database');
   }
-  sqliteQueryExecutor = new newModule.SQLiteQueryExecutor(
-    COMM_SQLITE_DATABASE_PATH,
+  setSQLiteQueryExecutor(
+    new newModule.SQLiteQueryExecutor(COMM_SQLITE_DATABASE_PATH),
   );
 }
 
@@ -120,8 +123,9 @@
 
 async function persist() {
   persistInProgress = true;
-  const module = dbModule;
-  if (!sqliteQueryExecutor || !module) {
+  const sqliteQueryExecutor = getSQLiteQueryExecutor();
+  const dbModule = getDBModule();
+  if (!sqliteQueryExecutor || !dbModule) {
     persistInProgress = false;
     throw new Error(
       'Database not initialized while persisting database content',
@@ -134,7 +138,7 @@
 
   while (persistNeeded) {
     persistNeeded = false;
-    const dbData = exportDatabaseContent(module, COMM_SQLITE_DATABASE_PATH);
+    const dbData = exportDatabaseContent(dbModule, COMM_SQLITE_DATABASE_PATH);
     if (!encryptionKey) {
       persistInProgress = false;
       throw new Error('Encryption key is missing');
@@ -162,6 +166,9 @@
     return undefined;
   }
 
+  const sqliteQueryExecutor = getSQLiteQueryExecutor();
+  const dbModule = getDBModule();
+
   // database operations
   if (message.type === workerRequestMessageTypes.INIT) {
     const promises = [
@@ -191,7 +198,7 @@
         sqliteQueryExecutor,
       );
     }
-    sqliteQueryExecutor = null;
+    setSQLiteQueryExecutor(null);
     return undefined;
   }
 
diff --git a/web/shared-worker/worker/worker-database.js b/web/shared-worker/worker/worker-database.js
new file mode 100644
--- /dev/null
+++ b/web/shared-worker/worker/worker-database.js
@@ -0,0 +1,31 @@
+// @flow
+
+import type { EmscriptenModule } from '../types/module.js';
+import type { SQLiteQueryExecutor } from '../types/sqlite-query-executor.js';
+
+let sqliteQueryExecutor: ?SQLiteQueryExecutor = null;
+
+function getSQLiteQueryExecutor(): ?SQLiteQueryExecutor {
+  return sqliteQueryExecutor;
+}
+
+function setSQLiteQueryExecutor(newSQLiteQueryExecutor: ?SQLiteQueryExecutor) {
+  sqliteQueryExecutor = newSQLiteQueryExecutor;
+}
+
+let dbModule: ?EmscriptenModule = null;
+
+function getDBModule(): ?EmscriptenModule {
+  return dbModule;
+}
+
+function setDBModule(newDBModule: EmscriptenModule) {
+  dbModule = newDBModule;
+}
+
+export {
+  getSQLiteQueryExecutor,
+  setSQLiteQueryExecutor,
+  getDBModule,
+  setDBModule,
+};