diff --git a/keyserver/src/creators/account-creator.js b/keyserver/src/creators/account-creator.js
--- a/keyserver/src/creators/account-creator.js
+++ b/keyserver/src/creators/account-creator.js
@@ -31,7 +31,7 @@
 
 import createIDs from './id-creator.js';
 import createMessages from './message-creator.js';
-import { createOlmSession } from './olm-session-creator.js';
+import { createAndStoreOlmSession } from './olm-session-creator.js';
 import {
   createThread,
   createPrivateThread,
@@ -125,7 +125,7 @@
 
   const olmSessionPromise = (async () => {
     if (userViewerData.cookieID && initialNotificationsEncryptedMessage) {
-      await createOlmSession(
+      await createAndStoreOlmSession(
         initialNotificationsEncryptedMessage,
         'notifications',
         userViewerData.cookieID,
diff --git a/keyserver/src/creators/olm-session-creator.js b/keyserver/src/creators/olm-session-creator.js
--- a/keyserver/src/creators/olm-session-creator.js
+++ b/keyserver/src/creators/olm-session-creator.js
@@ -11,27 +11,26 @@
 async function createOlmSession(
   initialEncryptedMessage: string,
   olmSessionType: 'content' | 'notifications',
-  cookieID: string,
-): Promise<void> {
+  theirCurve25519Key?: string,
+): Promise<string> {
   const callback = (account: OlmAccount, picklingKey: string) =>
-    createPickledOlmSession(account, picklingKey, initialEncryptedMessage);
-
-  let pickledOlmSession;
-  try {
-    pickledOlmSession = await fetchCallUpdateOlmAccount(
-      olmSessionType,
-      callback,
-    );
-  } catch (e) {
-    console.warn(
-      `failed to create olm session of type: ${olmSessionType} ` +
-        `for user with cookie id: ${cookieID}`,
-      e,
+    createPickledOlmSession(
+      account,
+      picklingKey,
+      initialEncryptedMessage,
+      theirCurve25519Key,
     );
-    throw new ServerError('olm_session_creation_failure');
-  }
 
+  return await fetchCallUpdateOlmAccount(olmSessionType, callback);
+}
+
+async function storeOlmSession(
+  pickledOlmSession: string,
+  olmSessionType: 'content' | 'notifications',
+  cookieID: string,
+): Promise<void> {
   const isContent = olmSessionType === 'content';
+
   // We match the native client behavior here where olm session is overwritten
   // in case it is initialized twice for the same pair of identities
   await dbQuery(
@@ -45,4 +44,29 @@
   );
 }
 
-export { createOlmSession };
+async function createAndStoreOlmSession(
+  initialEncryptedMessage: string,
+  olmSessionType: 'content' | 'notifications',
+  cookieID: string,
+  theirCurve25519Key?: string,
+): Promise<void> {
+  let pickledOlmSession: string;
+
+  try {
+    pickledOlmSession = await createOlmSession(
+      initialEncryptedMessage,
+      olmSessionType,
+      theirCurve25519Key,
+    );
+  } catch (e) {
+    console.warn(
+      `Failed to create olm session of type: ${olmSessionType} for user with cookie id: ${cookieID}`,
+      e,
+    );
+    throw new ServerError('olm_session_creation_failure');
+  }
+
+  await storeOlmSession(pickledOlmSession, olmSessionType, cookieID);
+}
+
+export { createOlmSession, createAndStoreOlmSession, storeOlmSession };
diff --git a/keyserver/src/responders/user-responders.js b/keyserver/src/responders/user-responders.js
--- a/keyserver/src/responders/user-responders.js
+++ b/keyserver/src/responders/user-responders.js
@@ -101,7 +101,7 @@
   createAccount,
   processSIWEAccountCreation,
 } from '../creators/account-creator.js';
-import { createOlmSession } from '../creators/olm-session-creator.js';
+import { createAndStoreOlmSession } from '../creators/olm-session-creator.js';
 import { dbQuery, SQL } from '../database/database.js';
 import { deleteAccount } from '../deleters/account-deleters.js';
 import { deleteCookie } from '../deleters/cookie-deleters.js';
@@ -363,7 +363,7 @@
       initialNotificationsEncryptedMessage &&
       signedIdentityKeysBlob
     ) {
-      await createOlmSession(
+      await createAndStoreOlmSession(
         initialNotificationsEncryptedMessage,
         'notifications',
         userViewerData.cookieID,
diff --git a/keyserver/src/socket/session-utils.js b/keyserver/src/socket/session-utils.js
--- a/keyserver/src/socket/session-utils.js
+++ b/keyserver/src/socket/session-utils.js
@@ -34,7 +34,7 @@
   tPlatformDetails,
 } from 'lib/utils/validation-utils.js';
 
-import { createOlmSession } from '../creators/olm-session-creator.js';
+import { createAndStoreOlmSession } from '../creators/olm-session-creator.js';
 import { saveOneTimeKeys } from '../creators/one-time-keys-creator.js';
 import createReport from '../creators/report-creator.js';
 import { fetchEntriesForSession } from '../fetchers/entry-fetchers.js';
@@ -231,7 +231,7 @@
       );
       const { initialNotificationsEncryptedMessage } = clientResponse;
       try {
-        await createOlmSession(
+        await createAndStoreOlmSession(
           initialNotificationsEncryptedMessage,
           'notifications',
           viewer.cookieID,