diff --git a/src/components/Window.js b/src/components/Window.js
index d22e44b5bb7b5e41db47568792ea54f823373db9..eddcecf7300889f297a0ae275e80a5d3b4958d59 100644
--- a/src/components/Window.js
+++ b/src/components/Window.js
@@ -14,12 +14,13 @@ export class Window extends Component {
    * Renders things
    */
   render() {
-    const { manifest, window } = this.props;
+    const { manifest, window, layout } = this.props;
     if (!window) return <></>;
 
     return (
       <div id={window.id} className={ns('window')}>
         <WindowTopBar
+          layout={layout}
           windowId={window.id}
           manifest={manifest}
         />
@@ -42,9 +43,11 @@ export class Window extends Component {
 Window.propTypes = {
   window: PropTypes.object, // eslint-disable-line react/forbid-prop-types
   manifest: PropTypes.object, // eslint-disable-line react/forbid-prop-types
+  layout: PropTypes.object, // eslint-disable-line react/forbid-prop-types
 };
 
 Window.defaultProps = {
   window: null,
   manifest: null,
+  layout: null,
 };
diff --git a/src/containers/WindowTopBar.js b/src/containers/WindowTopBar.js
index a082a6e57ec35e24075777be3ad83f258d7cfd41..e3fbca8be4f86bc1e7aacae0372d82084679bc55 100644
--- a/src/containers/WindowTopBar.js
+++ b/src/containers/WindowTopBar.js
@@ -8,7 +8,7 @@ import { getWindowManifest, getManifestTitle } from '../state/selectors';
 import { WindowTopBar } from '../components/WindowTopBar';
 
 /** mapStateToProps */
-const mapStateToProps = (state, { windowId }) => ({
+const mapStateToProps = (state, { windowId, layout }) => ({
   manifestTitle: getManifestTitle(getWindowManifest(state, windowId)),
   maximized: state.windows[windowId].maximized,
 });
@@ -18,9 +18,9 @@ const mapStateToProps = (state, { windowId }) => ({
  * @memberof ManifestListItem
  * @private
  */
-const mapDispatchToProps = (dispatch, { windowId }) => ({
+const mapDispatchToProps = (dispatch, { windowId, layout }) => ({
   closeWindow: () => dispatch(actions.closeWindow(windowId)),
-  maximizeWindow: () => dispatch(actions.maximizeWindow(windowId)),
+  maximizeWindow: () => dispatch(actions.maximizeWindow(windowId, layout)),
   minimizeWindow: () => dispatch(actions.minimizeWindow(windowId)),
   toggleWindowSideBar: () => dispatch(actions.toggleWindowSideBar(windowId)),
 });
diff --git a/src/containers/Workspace.js b/src/containers/Workspace.js
index 9eb414e598bff5b44741612ddfe429e45cdba1e4..7d7a7a618b5458cce51c12157c19099fd23e4557 100644
--- a/src/containers/Workspace.js
+++ b/src/containers/Workspace.js
@@ -1,6 +1,5 @@
 import { compose } from 'redux';
 import { connect } from 'react-redux';
-import pickBy from 'lodash/pickBy';
 import { Workspace } from '../components/Workspace';
 
 /**
@@ -13,10 +12,7 @@ const mapStateToProps = state => (
     isWorkspaceControlPanelVisible: state.config.workspaceControlPanel.enabled,
     workspaceType: state.config.workspace.type,
     windows: state.windows,
-    // pickBy(state.windows, window => window.maximized === false),
-    // Object.keys(state.windows)
-    //   .map(id => state.windows[id])
-    //   .filter(window => window.displayable === true),
+    savedLayout: state.workspace.savedLayout,
   }
 );
 
diff --git a/src/state/actions/action-types.js b/src/state/actions/action-types.js
index 1fa2d831733b1af6adb004058a3c2bb085291fcb..6648f7d9c117a172178d2f01322514f5cfe0177c 100644
--- a/src/state/actions/action-types.js
+++ b/src/state/actions/action-types.js
@@ -31,6 +31,7 @@ const ActionTypes = {
   RECEIVE_INFO_RESPONSE: 'RECEIVE_INFO_RESPONSE',
   RECEIVE_INFO_RESPONSE_FAILURE: 'RECEIVE_INFO_RESPONSE_FAILURE',
   REMOVE_INFO_RESPONSE: 'REMOVE_INFO_RESPONSE',
+  SAVE_WORKSPACE_MOSAIC_LAYOUT: 'SAVE_WORKSPACE_MOSAIC_LAYOUT',
   UPDATE_WORKSPACE_MOSAIC_LAYOUT: 'UPDATE_WORKSPACE_MOSAIC_LAYOUT',
   UPDATE_VIEWPORT: 'UPDATE_VIEWPORT',
 };
diff --git a/src/state/actions/window.js b/src/state/actions/window.js
index 9e92245b10b910e26c8192b795fefe32f25d67cd..c7cf1961c37988251939e775def163687ca43e32 100644
--- a/src/state/actions/window.js
+++ b/src/state/actions/window.js
@@ -40,8 +40,12 @@ export function addWindow(options) {
  * @param  {String} windowId
  * @memberof ActionCreators
  */
-export function maximizeWindow(windowId) {
-  return { type: ActionTypes.MAXIMIZE_WINDOW, windowId };
+export function maximizeWindow(windowId, layout) {
+  // return { type: ActionTypes.MAXIMIZE_WINDOW, windowId };
+  return (dispatch) => {
+    dispatch({ type: ActionTypes.MAXIMIZE_WINDOW, windowId });
+    dispatch({ type: ActionTypes.SAVE_WORKSPACE_MOSAIC_LAYOUT, layout });
+  };
 }
 
 /**
diff --git a/src/state/actions/workspace.js b/src/state/actions/workspace.js
index b8b03d96e4f23a21d85adc75c38f1fda046cb511..6e669c6d56f15451708ebda28129c2c10fbe3541 100644
--- a/src/state/actions/workspace.js
+++ b/src/state/actions/workspace.js
@@ -20,6 +20,16 @@ export function toggleZoomControls(showZoomControls) {
   return { type: ActionTypes.TOGGLE_ZOOM_CONTROLS, showZoomControls };
 }
 
+/**
+ * saveWorkspaceMosaicLayout - action creator
+ *
+ * @param  {Object} layout
+ * @memberof ActionCreators
+ */
+export function saveWorkspaceMosaicLayout(layout) {
+  return { type: ActionTypes.SAVE_WORKSPACE_MOSAIC_LAYOUT, layout };
+}
+
 /**
  * updateWorkspaceMosaicLayout - action creator
  *
diff --git a/src/state/reducers/workspace.js b/src/state/reducers/workspace.js
index 52a339a47828859267cab9085cf36b26890e7c95..6381e9e543fe9f9adbeb4e9c6f1cf961041045a9 100644
--- a/src/state/reducers/workspace.js
+++ b/src/state/reducers/workspace.js
@@ -11,6 +11,8 @@ export const workspaceReducer = (state = {}, action) => {
       return { ...state, isFullscreenEnabled: action.isFullscreenEnabled };
     case ActionTypes.TOGGLE_ZOOM_CONTROLS:
       return { ...state, showZoomControls: action.showZoomControls };
+    case ActionTypes.SAVE_WORKSPACE_MOSAIC_LAYOUT:
+      return { ...state, savedLayout: action.layout };
     case ActionTypes.UPDATE_WORKSPACE_MOSAIC_LAYOUT:
       return { ...state, layout: action.layout };
     case ActionTypes.SET_WORKSPACE_ADD_VISIBILITY: