diff --git a/__tests__/integration/mirador/index.html b/__tests__/integration/mirador/index.html
index c97fa455ce0169117392aa3492c621a009037151..172ea303e71601b8478f3d95bdcf68b875ac0b00 100644
--- a/__tests__/integration/mirador/index.html
+++ b/__tests__/integration/mirador/index.html
@@ -13,14 +13,9 @@
     <script type="text/javascript">
      var miradorInstance = Mirador.viewer({
        id: 'mirador',
-       windows: [{
-         loadedManifest: 'https://iiif.harvardartmuseums.org/manifests/object/299843',
-         canvasIndex: 2,
-         thumbnailNavigationPosition: 'far-bottom',
+       workspace: {
+         isWorkspaceAddVisible: true,
        },
-       {
-         loadedManifest: 'https://iiif.bodleian.ox.ac.uk/iiif/manifest/e32a277e-91e2-4a6d-8ba6-cc4bad230410.json',
-       }],
        window: {
          hideSearchPanel: false,
        },
diff --git a/__tests__/src/actions/config.test.js b/__tests__/src/actions/config.test.js
index 31857f319c48000d3a66cbdc5f3086ad5893a2b4..94c2d2986e3ed581eaa83136df4d2029f0389f9e 100644
--- a/__tests__/src/actions/config.test.js
+++ b/__tests__/src/actions/config.test.js
@@ -43,4 +43,17 @@ describe('config actions', () => {
       expect(actions.importMiradorState(state).type).toEqual(ActionTypes.IMPORT_MIRADOR_STATE);
     });
   });
+  describe('setWorkspaceAddVisibility', () => {
+    it('should set the the isWorkspaceAddVisible property', () => {
+      expect(actions.setWorkspaceAddVisibility(true)).toEqual({
+        config: { workspace: { isWorkspaceAddVisible: true } },
+        type: ActionTypes.UPDATE_CONFIG,
+      });
+
+      expect(actions.setWorkspaceAddVisibility(true)).toEqual({
+        config: { workspace: { isWorkspaceAddVisible: true } },
+        type: ActionTypes.UPDATE_CONFIG,
+      });
+    });
+  });
 });
diff --git a/__tests__/src/actions/workspace.test.js b/__tests__/src/actions/workspace.test.js
index 4eec7ef21699c1ba4770369fe9e3c91a72411ef2..d4acc6096afc88bbe3707b02f2c3833a9e541edc 100644
--- a/__tests__/src/actions/workspace.test.js
+++ b/__tests__/src/actions/workspace.test.js
@@ -40,15 +40,6 @@ describe('workspace actions', () => {
       expect(actions.toggleZoomControls(true)).toEqual(expectedAction);
     });
   });
-  describe('setWorkspaceAddVisibility', () => {
-    it('should set the workspace add visibility', () => {
-      const expectedAction = {
-        isWorkspaceAddVisible: true,
-        type: ActionTypes.SET_WORKSPACE_ADD_VISIBILITY,
-      };
-      expect(actions.setWorkspaceAddVisibility(true)).toEqual(expectedAction);
-    });
-  });
   describe('setWorkspaceViewportDimensions', () => {
     it('should set the workspace add visibility', () => {
       const expectedAction = {
diff --git a/__tests__/src/reducers/workspace.test.js b/__tests__/src/reducers/workspace.test.js
index e03538874ba093d5b1a42c55f3086ebfc3028edc..7a825a9b91aeecef6c59e56fb5f3b4afff9b8c8d 100644
--- a/__tests__/src/reducers/workspace.test.js
+++ b/__tests__/src/reducers/workspace.test.js
@@ -71,14 +71,6 @@ describe('workspace reducer', () => {
       layout: { foo: 'bar' },
     });
   });
-  it('should handle SET_WORKSPACE_ADD_VISIBILITY', () => {
-    expect(workspaceReducer([], {
-      isWorkspaceAddVisible: true,
-      type: ActionTypes.SET_WORKSPACE_ADD_VISIBILITY,
-    })).toEqual({
-      isWorkspaceAddVisible: true,
-    });
-  });
   it('should handle SET_WORKSPACE_VIEWPORT_POSITION', () => {
     expect(workspaceReducer({ height: 5000, width: 5000 }, {
       payload: {
diff --git a/src/config/settings.js b/src/config/settings.js
index a20f3360a002f9604b6420bd86729a1f52082025..d6ad00501151f74899bda6e391bc332656138a15 100644
--- a/src/config/settings.js
+++ b/src/config/settings.js
@@ -230,6 +230,7 @@ export default {
   workspace: {
     showZoomControls: false, // Configure if zoom controls should be displayed by default
     type: 'mosaic', // Which workspace type to load by default. Other possible values are "elastic"
+    isWorkspaceAddVisible: false,
   },
   workspaceControlPanel: {
     enabled: true, // Configure if the control panel should be rendered.  Useful if you want to lock the viewer down to only the configured manifests
diff --git a/src/containers/WindowListButton.js b/src/containers/WindowListButton.js
index f35f162ca27446079efe1a5260d23ff9284552a0..8e5cb93505f914307dff03db0d6e3eece3f675a4 100644
--- a/src/containers/WindowListButton.js
+++ b/src/containers/WindowListButton.js
@@ -6,8 +6,8 @@ import { withPlugins } from '../extend/withPlugins';
 import { WindowListButton } from '../components/WindowListButton';
 
 /** */
-const mapStateToProps = ({ windows, workspace }) => ({
-  disabled: workspace.isWorkspaceAddVisible,
+const mapStateToProps = ({ windows, config }) => ({
+  disabled: config.workspace.isWorkspaceAddVisible,
   windowCount: Object.keys(windows).length,
 });
 
diff --git a/src/containers/WorkspaceAddButton.js b/src/containers/WorkspaceAddButton.js
index 4635e30a04227fcf912f3fd3d97479853c1d1464..d8aa7bb943c87a6d4e7225b004e6e1ed638a1ddd 100644
--- a/src/containers/WorkspaceAddButton.js
+++ b/src/containers/WorkspaceAddButton.js
@@ -13,7 +13,7 @@ import { WorkspaceAddButton } from '../components/WorkspaceAddButton';
  * @private
  */
 const mapStateToProps = (state, { width }) => {
-  const { isWorkspaceAddVisible } = state.workspace;
+  const { isWorkspaceAddVisible } = state.config.workspace;
   return {
     isWorkspaceAddVisible,
     useExtendedFab: (
diff --git a/src/containers/WorkspaceArea.js b/src/containers/WorkspaceArea.js
index 39ac37d02b10ac5bbbeb1c8dd64c17b8cd98ba96..2f3d2f9ee6962294012bd62577cc89928f8d59c8 100644
--- a/src/containers/WorkspaceArea.js
+++ b/src/containers/WorkspaceArea.js
@@ -12,8 +12,8 @@ import { WorkspaceArea } from '../components/WorkspaceArea';
  */
 const mapStateToProps = state => (
   {
-    controlPanelVariant: state.workspace.isWorkspaceAddVisible || Object.keys(state.windows).length > 0 ? undefined : 'wide',
-    isWorkspaceAddVisible: state.workspace.isWorkspaceAddVisible,
+    controlPanelVariant: state.config.workspace.isWorkspaceAddVisible || Object.keys(state.windows).length > 0 ? undefined : 'wide',
+    isWorkspaceAddVisible: state.config.workspace.isWorkspaceAddVisible,
     isWorkspaceControlPanelVisible: state.config.workspaceControlPanel.enabled,
   }
 );
diff --git a/src/containers/WorkspaceMenu.js b/src/containers/WorkspaceMenu.js
index dcf19e1e512f7063ba27b0e81ecbe1fc53206f54..7352004313b1cb38a5191958106c8a6fe2f1b6cd 100644
--- a/src/containers/WorkspaceMenu.js
+++ b/src/containers/WorkspaceMenu.js
@@ -22,7 +22,7 @@ const mapDispatchToProps = {
  */
 const mapStateToProps = state => ({
   containerId: getContainerId(state),
-  isWorkspaceAddVisible: state.workspace.isWorkspaceAddVisible,
+  isWorkspaceAddVisible: state.config.workspace.isWorkspaceAddVisible,
   showThemePicker: getThemeIds(state).length > 0,
   showZoomControls: getShowZoomControlsConfig(state),
 });
diff --git a/src/state/actions/config.js b/src/state/actions/config.js
index ce047806a994e30c4283c54095372b77c165ce04..99681a058838dc1e000b035fab1ddb55c72cbd25 100644
--- a/src/state/actions/config.js
+++ b/src/state/actions/config.js
@@ -47,3 +47,15 @@ export function importMiradorState(state) {
   };
   return { state: newState, type: ActionTypes.IMPORT_MIRADOR_STATE };
 }
+
+/**
+ * @param  {Object} isWorkspaceAddVisible
+ * @memberof ActionCreators
+ */
+export function setWorkspaceAddVisibility(isWorkspaceAddVisible) {
+  return updateConfig({
+    workspace: {
+      isWorkspaceAddVisible,
+    },
+  });
+}
diff --git a/src/state/actions/workspace.js b/src/state/actions/workspace.js
index ff0f64b6d57c17cf4f1a11c728c6025f28663e4e..01589e2c6d1e29b054c9f7e37f21f3689e37863d 100644
--- a/src/state/actions/workspace.js
+++ b/src/state/actions/workspace.js
@@ -29,16 +29,6 @@ export function updateWorkspaceMosaicLayout(layout) {
   return { layout, type: ActionTypes.UPDATE_WORKSPACE_MOSAIC_LAYOUT };
 }
 
-/**
- * updateWorkspaceMosaicLayout - action creator
- *
- * @param  {Object} isWorkspaceAddVisible
- * @memberof ActionCreators
- */
-export function setWorkspaceAddVisibility(isWorkspaceAddVisible) {
-  return { isWorkspaceAddVisible, type: ActionTypes.SET_WORKSPACE_ADD_VISIBILITY };
-}
-
 /**
  * setWorkspaceViewportPosition - action creator
  *
diff --git a/src/state/reducers/workspace.js b/src/state/reducers/workspace.js
index c8a1e4fcb84139a5faaf839cb84462f0af4e8ce3..039789080fe1220f2bca91fcfb191cc194c54396 100644
--- a/src/state/reducers/workspace.js
+++ b/src/state/reducers/workspace.js
@@ -63,8 +63,6 @@ export const workspaceReducer = (
       return { ...state, showZoomControls: action.showZoomControls };
     case ActionTypes.UPDATE_WORKSPACE_MOSAIC_LAYOUT:
       return { ...state, layout: action.layout };
-    case ActionTypes.SET_WORKSPACE_ADD_VISIBILITY:
-      return { ...state, isWorkspaceAddVisible: action.isWorkspaceAddVisible };
     case ActionTypes.SET_WORKSPACE_VIEWPORT_POSITION:
       newWorkspaceDimensions = {};