diff --git a/src/state/reducers/companionWindows.js b/src/state/reducers/companionWindows.js
index cd619e6fe93a6c3577f2fd26542cf14e627c6755..29b42ca1e92a21d2b4b3ea56c364629b64d0977c 100644
--- a/src/state/reducers/companionWindows.js
+++ b/src/state/reducers/companionWindows.js
@@ -1,7 +1,6 @@
 import omit from 'lodash/omit';
 import set from 'lodash/fp/set';
 import update from 'lodash/fp/update';
-import merge from 'lodash/fp/merge';
 import ActionTypes from '../actions/action-types';
 
 /** */
@@ -31,14 +30,14 @@ export function companionWindowsReducer(state = {}, action) {
         return object;
       }, {});
     case ActionTypes.UPDATE_COMPANION_WINDOW:
-      return update([action.id], orig => merge(orig, action.payload), state);
+      return update([action.id], orig => ({ ...(orig || {}), ...action.payload }), state);
 
     case ActionTypes.REMOVE_COMPANION_WINDOW:
       return omit(state, action.id);
     case ActionTypes.IMPORT_MIRADOR_STATE:
       return action.state.companionWindows || [];
     case ActionTypes.TOGGLE_TOC_NODE:
-      return update([action.id, 'tocNodes'], orig => merge(orig || {}, action.payload), state);
+      return update([action.id, 'tocNodes'], orig => ({ ...(orig || {}), ...action.payload }), state);
     default:
       return state;
   }
diff --git a/src/state/reducers/elasticLayout.js b/src/state/reducers/elasticLayout.js
index fbbf9f11afd73fcb0c0aef64095b5be77db17275..c35ee12d5a5c3f637208414c833724a3c6b793cd 100644
--- a/src/state/reducers/elasticLayout.js
+++ b/src/state/reducers/elasticLayout.js
@@ -1,6 +1,5 @@
 import update from 'lodash/fp/update';
 import omit from 'lodash/omit';
-import merge from 'lodash/fp/merge';
 import ActionTypes from '../actions/action-types';
 
 /**
@@ -17,7 +16,7 @@ export const elasticLayoutReducer = (state = {}, action) => {
       };
 
     case ActionTypes.UPDATE_ELASTIC_WINDOW_LAYOUT:
-      return update([action.windowId], orig => merge(orig, action.payload), state);
+      return update([action.windowId], orig => ({ ...(orig || {}), ...action.payload }), state);
 
     case ActionTypes.REMOVE_WINDOW:
       return omit(state, action.windowId);
diff --git a/src/state/reducers/windows.js b/src/state/reducers/windows.js
index 5d20799acccda9f48f6f6f1620f13c26b589d609..37ef215d0f236598413ea7d9baa5455840371c3c 100644
--- a/src/state/reducers/windows.js
+++ b/src/state/reducers/windows.js
@@ -1,6 +1,5 @@
 import update from 'lodash/fp/update';
 import omit from 'lodash/omit';
-import merge from 'lodash/fp/merge';
 import ActionTypes from '../actions/action-types';
 
 /**
@@ -29,7 +28,7 @@ export const windowsReducer = (state = {}, action) => {
       };
 
     case ActionTypes.UPDATE_WINDOW:
-      return update([action.id], orig => merge(orig, action.payload), state);
+      return update([action.id], orig => ({ ...(orig || {}), ...action.payload }), state);
 
     case ActionTypes.REMOVE_WINDOW:
       return omit(state, [action.windowId]);
@@ -72,10 +71,12 @@ export const windowsReducer = (state = {}, action) => {
     case ActionTypes.SET_CANVAS:
       if (!state[action.windowId]) return state;
 
-      return update([action.windowId], orig => merge(orig, {
-        canvasId: action.canvasId,
-        visibleCanvases: action.visibleCanvases || [],
-      }), state);
+      return update([action.windowId], orig => (
+        {
+          ...(orig || {}),
+          canvasId: action.canvasId,
+          visibleCanvases: action.visibleCanvases || [],
+        }), state);
     case ActionTypes.ADD_COMPANION_WINDOW:
       return {
         ...state,