diff --git a/lib/components/keyserver-connection-handler.js b/lib/components/keyserver-connection-handler.js
--- a/lib/components/keyserver-connection-handler.js
+++ b/lib/components/keyserver-connection-handler.js
@@ -57,10 +57,33 @@
   const dispatchActionPromise = useDispatchActionPromise();
   const callLogOut = useLogOut();
 
+  const { olmAPI } = getConfig();
+
   const hasConnectionIssue = useSelector(
     state => !!connectionSelector(keyserverID)(state)?.connectionIssue,
   );
   const cookie = useSelector(cookieSelector(keyserverID));
+  const prevCookieRef = React.useRef(cookie);
+  const notifsSessionReassignmentPromise = React.useRef<?Promise<mixed>>(null);
+
+  React.useEffect(() => {
+    const prevCookie = prevCookieRef.current;
+    prevCookieRef.current = cookie;
+
+    if (cookie === prevCookie || !cookie || !cookie.startsWith('user=')) {
+      return;
+    }
+
+    notifsSessionReassignmentPromise.current = (async () => {
+      await notifsSessionReassignmentPromise.current;
+      await olmAPI.reassignNotificationsSession?.(
+        prevCookie,
+        cookie,
+        keyserverID,
+      );
+    })();
+  }, [cookie, keyserverID, olmAPI]);
+
   const dataLoaded = useSelector(state => state.dataLoaded);
 
   const keyserverDeviceToken = useSelector(deviceTokenSelector(keyserverID));
@@ -101,8 +124,6 @@
   invariant(identityContext, 'Identity context should be set');
   const { identityClient, getAuthMetadata } = identityContext;
 
-  const { olmAPI } = getConfig();
-
   const preRequestUserInfo = useSelector(state => state.currentUserInfo);
   const innerPerformAuth = React.useCallback(
     (
diff --git a/web/shared-worker/worker/worker-crypto.js b/web/shared-worker/worker/worker-crypto.js
--- a/web/shared-worker/worker/worker-crypto.js
+++ b/web/shared-worker/worker/worker-crypto.js
@@ -365,7 +365,10 @@
   if (!value) {
     return;
   }
-  await localforage.setItem(destination, value);
+  const valueAtDestination = await localforage.getItem<mixed>(destination);
+  if (!valueAtDestination) {
+    await localforage.setItem(destination, value);
+  }
   await localforage.removeItem(source);
 }