diff --git a/lib/reducers/message-reducer.js b/lib/reducers/message-reducer.js
--- a/lib/reducers/message-reducer.js
+++ b/lib/reducers/message-reducer.js
@@ -187,9 +187,9 @@
 }
 
 type ReassignmentResult = {
-  +messageStoreOperations: $ReadOnlyArray<MessageStoreOperation>,
+  +messageStoreOperations: MessageStoreOperation[],
   +messageStore: MessageStore,
-  +reassignedThreadIDs: $ReadOnlyArray<string>,
+  +reassignedThreadIDs: string[],
 };
 
 function reassignMessagesToRealizedThreads(
@@ -569,9 +569,9 @@
 }
 
 type UpdateMessageStoreWithLatestThreadInfosResult = {
-  +messageStoreOperations: $ReadOnlyArray<MessageStoreOperation>,
+  +messageStoreOperations: MessageStoreOperation[],
   +messageStore: MessageStore,
-  +reassignedThreadIDs: $ReadOnlyArray<string>,
+  +reassignedThreadIDs: string[],
 };
 function updateMessageStoreWithLatestThreadInfos(
   messageStore: MessageStore,
@@ -1298,6 +1298,11 @@
     let threads = { ...messageStore.threads };
     let local = { ...messageStore.local };
 
+    const {
+      messageStoreOperations,
+      messageStore: filteredMessageStore,
+    } = updateMessageStoreWithLatestThreadInfos(messageStore, newThreadInfos);
+
     // Store message IDs already contained within threads so that we
     // do not insert duplicates
     const existingMessageIDs = new Set();
@@ -1353,35 +1358,28 @@
       );
     }
 
-    messageStore = {
-      ...messageStore,
+    const newMessageStore = {
+      ...filteredMessageStore,
       messages: actionPayloadMessages,
       threads: threads,
       local: local,
     };
 
-    if (messageIDsToBeRemoved.length === 0) {
-      return { messageStoreOperations: [], messageStore };
-    }
-
-    const messageStoreOperations: MessageStoreOperation[] = [
-      {
+    if (messageIDsToBeRemoved.length > 0) {
+      messageStoreOperations.push({
         type: 'remove',
         payload: { ids: messageIDsToBeRemoved },
-      },
-    ];
+      });
+    }
 
     const processedMessageStore = processMessageStoreOperations(
-      messageStore,
+      newMessageStore,
       messageStoreOperations,
     );
 
     return {
       messageStoreOperations,
-      messageStore: {
-        ...messageStore,
-        messages: processedMessageStore.messages,
-      },
+      messageStore: processedMessageStore,
     };
   }
   return { messageStoreOperations: [], messageStore };
diff --git a/lib/reducers/message-reducer.test.js b/lib/reducers/message-reducer.test.js
--- a/lib/reducers/message-reducer.test.js
+++ b/lib/reducers/message-reducer.test.js
@@ -2,8 +2,10 @@
 
 import invariant from 'invariant';
 
+import { createPendingThread } from '../shared/thread-utils';
 import type { MessageStore } from '../types/message-types';
 import { messageTypes } from '../types/message-types';
+import { threadTypes } from '../types/thread-types';
 import { reduceMessageStore } from './message-reducer';
 
 const messageStoreBeforeMediaUpdate: MessageStore = {
@@ -289,7 +291,12 @@
       type: 'SET_MESSAGE_STORE_MESSAGES',
       payload: clientDBMessages,
     },
-    {},
+    {
+      [88471]: createPendingThread({
+        viewerID: '',
+        threadType: threadTypes.LOCAL,
+      }),
+    },
   );
   test('removes local media when constructing messageStore.messages', () => {
     expect(updatedMessageStore.messages).toHaveProperty('103502');