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
@@ -422,44 +422,16 @@
   }
 
   const fetchPromises = {};
-  if (shouldFetchAll[serverStateSyncSpecs.threads.hashKey]) {
-    fetchPromises.threadInfos = serverStateSyncSpecs.threads.fetch(
-      viewer,
-      query,
-    );
-  } else if (idsToFetch[serverStateSyncSpecs.threads.innerHashKey]?.size > 0) {
-    fetchPromises.threadInfos = serverStateSyncSpecs.threads.fetch(
-      viewer,
-      query,
-      idsToFetch[serverStateSyncSpecs.threads.innerHashKey],
-    );
-  }
-  if (shouldFetchAll[serverStateSyncSpecs.entries.hashKey]) {
-    fetchPromises.entryInfos = serverStateSyncSpecs.entries.fetch(
-      viewer,
-      query,
-    );
-  } else if (idsToFetch[serverStateSyncSpecs.entries.innerHashKey]?.size > 0) {
-    fetchPromises.entryInfos = serverStateSyncSpecs.entries.fetch(
-      viewer,
-      query,
-      idsToFetch[serverStateSyncSpecs.entries.innerHashKey],
-    );
-  }
-  if (shouldFetchAll[serverStateSyncSpecs.users.hashKey]) {
-    fetchPromises.userInfos = serverStateSyncSpecs.users.fetch(viewer, query);
-  } else if (idsToFetch[serverStateSyncSpecs.users.innerHashKey]?.size > 0) {
-    fetchPromises.userInfos = serverStateSyncSpecs.users.fetch(
-      viewer,
-      query,
-      idsToFetch[serverStateSyncSpecs.users.innerHashKey],
-    );
-  }
-  if (shouldFetchAll[serverStateSyncSpecs.currentUser.hashKey]) {
-    fetchPromises.currentUserInfo = serverStateSyncSpecs.currentUser.fetch(
-      viewer,
-      query,
-    );
+  for (const spec of values(serverStateSyncSpecs)) {
+    if (shouldFetchAll[spec.hashKey]) {
+      fetchPromises[spec.hashKey] = spec.fetch(viewer, query);
+    } else if (idsToFetch[spec.innerHashKey]?.size > 0) {
+      fetchPromises[spec.hashKey] = spec.fetch(
+        viewer,
+        query,
+        idsToFetch[spec.innerHashKey],
+      );
+    }
   }
   const fetchedData = await promiseAll(fetchPromises);
 
@@ -470,7 +442,7 @@
     if (key === 'threadInfos') {
       // Instead of returning all threadInfos, we want to narrow down and figure
       // out which threadInfos don't match first
-      const { threadInfos } = fetchedData;
+      const threadInfos = fetchedData[serverStateSyncSpecs.threads.hashKey];
       for (const threadID in threadInfos) {
         hashesToCheck[`threadInfo|${threadID}`] = hash(threadInfos[threadID]);
       }
@@ -478,7 +450,7 @@
     } else if (key === 'entryInfos') {
       // Instead of returning all entryInfos, we want to narrow down and figure
       // out which entryInfos don't match first
-      const { entryInfos } = fetchedData;
+      const entryInfos = fetchedData[serverStateSyncSpecs.entries.hashKey];
       for (const entryID in entryInfos) {
         const entryInfo = entryInfos[entryID];
         invariant(entryInfo, 'should be set');
@@ -488,16 +460,17 @@
     } else if (key === 'userInfos') {
       // Instead of returning all userInfos, we want to narrow down and figure
       // out which userInfos don't match first
-      const { userInfos } = fetchedData;
+      const userInfos = fetchedData[serverStateSyncSpecs.users.hashKey];
       for (const userID in userInfos) {
         hashesToCheck[`userInfo|${userID}`] = hash(userInfos[userID]);
       }
       failUnmentioned.userInfos = true;
     } else if (key === 'currentUserInfo') {
-      stateChanges.currentUserInfo = fetchedData.currentUserInfo;
+      stateChanges.currentUserInfo =
+        fetchedData[serverStateSyncSpecs.currentUser.hashKey];
     } else if (key.startsWith('threadInfo|')) {
       const [, threadID] = key.split('|');
-      const { threadInfos } = fetchedData;
+      const threadInfos = fetchedData[serverStateSyncSpecs.threads.hashKey];
       const threadInfo = threadInfos[threadID];
       if (!threadInfo) {
         if (!stateChanges.deleteThreadIDs) {
@@ -512,7 +485,8 @@
       stateChanges.rawThreadInfos.push(threadInfo);
     } else if (key.startsWith('entryInfo|')) {
       const [, entryID] = key.split('|');
-      const entryInfo = fetchedData.entryInfos[entryID];
+      const entryInfos = fetchedData[serverStateSyncSpecs.entries.hashKey];
+      const entryInfo = entryInfos[entryID];
       if (!entryInfo) {
         if (!stateChanges.deleteEntryIDs) {
           stateChanges.deleteEntryIDs = [];
@@ -525,9 +499,9 @@
       }
       stateChanges.rawEntryInfos.push(entryInfo);
     } else if (key.startsWith('userInfo|')) {
-      const { userInfos: fetchedUserInfos } = fetchedData;
       const [, userID] = key.split('|');
-      const userInfo = fetchedUserInfos[userID];
+      const userInfos = fetchedData[serverStateSyncSpecs.users.hashKey];
+      const userInfo = userInfos[userID];
       if (!userInfo || !userInfo.username) {
         if (!stateChanges.deleteUserInfoIDs) {
           stateChanges.deleteUserInfoIDs = [];