diff --git a/src/components/WorkspaceArea.js b/src/components/WorkspaceArea.js
index 045b5fe7b6b57e20068ac3ca0ed7e2ae4440cdf2..84106824ac83fbd4c1d62ea0e4e5d0fcfaa75129 100644
--- a/src/components/WorkspaceArea.js
+++ b/src/components/WorkspaceArea.js
@@ -1,6 +1,7 @@
 import React, { Component } from 'react';
 import PropTypes from 'prop-types';
 import classNames from 'classnames';
+import ErrorDialog from '../containers/ErrorDialog';
 import WorkspaceControlPanel from '../containers/WorkspaceControlPanel';
 import Workspace from '../containers/Workspace';
 import WorkspaceAdd from '../containers/WorkspaceAdd';
@@ -30,7 +31,8 @@ export class WorkspaceArea extends Component {
           isWorkspaceAddVisible
             ? <WorkspaceAdd />
             : <Workspace />
-         }
+        }
+        {<ErrorDialog />}
       </main>
     );
   }
diff --git a/src/components/WorkspaceExport.js b/src/components/WorkspaceExport.js
index 48559d65f0a6136fab6a38d5264eb5d542b0f218..c4143585eb569aecf54525798dfe6476260f25cd 100644
--- a/src/components/WorkspaceExport.js
+++ b/src/components/WorkspaceExport.js
@@ -13,12 +13,20 @@ export class WorkspaceExport extends Component {
    */
   exportableState() {
     const { state } = this.props;
-    const { config, viewers, windows } = state;
+    const {
+      companionWindows,
+      config,
+      viewers,
+      windows,
+      workspace,
+    } = state;
 
     return JSON.stringify({
+      companionWindows,
       config,
       viewers,
       windows,
+      workspace,
     }, null, 2);
   }
 
diff --git a/src/containers/CompanionArea.js b/src/containers/CompanionArea.js
index 7220e84f7311efd0d5d2282d9a23d8e94f111254..67d751551dcb95539d575681da3f66f27927a06c 100644
--- a/src/containers/CompanionArea.js
+++ b/src/containers/CompanionArea.js
@@ -11,7 +11,7 @@ import { CompanionArea } from '../components/CompanionArea';
 const mapStateToProps = (state, { windowId, position }) => ({
   companionAreaOpen: getCompanionAreaVisibility(state, { position, windowId }),
   companionWindows: getCompanionWindowsOfWindow(state, { windowId })
-    .filter(cw => cw.position === position),
+    .filter(cw => cw && cw.position === position),
   sideBarOpen: getWindow(state, { windowId }).sideBarOpen,
 });
 
diff --git a/src/state/actions/window.js b/src/state/actions/window.js
index e925af90750b16925f0752407f8576af1a37cbea..6acea0fe1767d589a96e0b28da6938636184296c 100644
--- a/src/state/actions/window.js
+++ b/src/state/actions/window.js
@@ -69,11 +69,13 @@ export function addWindow(options) {
       companionWindows: [
         {
           content: 'info',
+          default: true,
           id: cwDefault,
           position: 'left',
         },
         {
           content: 'thumbnail_navigation',
+          default: true,
           id: cwThumbs,
           position: options.thumbnailNavigationPosition
             || config.thumbnailNavigation.defaultPosition,
diff --git a/src/state/actions/workspace.js b/src/state/actions/workspace.js
index 125820e59e7de8e7f3c75a5b438f96a7b5ed9636..e412e26a0899b40eebf41416bf71329bd0923b95 100644
--- a/src/state/actions/workspace.js
+++ b/src/state/actions/workspace.js
@@ -1,12 +1,15 @@
 import {
   difference,
   keys,
+  omit,
+  pick,
   slice,
   values,
 } from 'lodash';
 import ActionTypes from './action-types';
 import { importConfig } from './config';
 import { addWindow, removeWindow, updateWindow } from './window';
+import { addCompanionWindow, removeCompanionWindow, updateCompanionWindow } from './companionWindow';
 import { updateViewport } from './canvas';
 import { fetchManifest } from './manifest';
 
@@ -100,13 +103,29 @@ export function toggleWorkspaceExposeMode() {
  * importWorkspace - action creator
  */
 export function importWorkspace(stateExport) {
+  // debugger;
   return (dispatch, getState) => {
-    dispatch(importConfig(stateExport.config));
     const { viewers } = stateExport || {};
+    const { companionWindows } = stateExport || {};
+    const {
+      exposeModeOn,
+      height,
+      viewportPosition,
+      width,
+    } = stateExport.workspace;
+
     const imWins = values(stateExport.windows);
     const exWins = values(getState().windows);
     const exWinCnt = exWins.length > imWins.length ? imWins.length : exWins.length;
 
+    /* first do window independent stuff */
+    dispatch(importConfig(stateExport.config));
+    getState().workspace.exposeModeOn !== exposeModeOn && dispatch(toggleWorkspaceExposeMode());
+    dispatch(setWorkspaceViewportDimensions({ width, height }));
+    dispatch(setWorkspaceViewportPosition(viewportPosition));
+
+    /* now import the windows */
+
     /*
       If the existing workspace already contains windows (exWins),
       we can re-use them in order to optimize the performance.
@@ -116,20 +135,42 @@ export function importWorkspace(stateExport) {
     const exIds = slice(exWins, 0, exWinCnt).map((exWin) => {
       const imWin = imWins.shift();
       const viewer = viewers[imWin.id];
-      delete imWin.id;
 
       dispatch(fetchManifest(imWin.manifestId));
-      dispatch(updateWindow(exWin.id, imWin));
-      dispatch(updateViewport(exWin.id, viewer));
+      /*
+        remove exisiting companionWindows, except the ones marked as default
+      */
+      exWin.companionWindowIds
+        .filter(cwId => !getState().companionWindows[cwId].default)
+        .map(cwId => dispatch(removeCompanionWindow(exWin.id, cwId)));
 
+      /* update the window */
+      dispatch(updateWindow(exWin.id, omit(imWin, 'id', 'companionWindowIds', 'thumbnailNavigationId')));
+
+      /* update default companionWindows */
+      exWin.companionWindowIds
+        .filter(cwId => companionWindows[cwId].default)
+        .map(cwId => dispatch(updateCompanionWindow(exWin.id, cwId, companionWindows[cwId])));
+
+      /* create non-default companionWindows */
+      imWin.companionWindowIds
+        .filter(cwId => !companionWindows[cwId].default)
+        .map(cwId => dispatch(addCompanionWindow(exWin.id, { ...omit(companionWindows[cwId], 'id') })));
+      dispatch(updateViewport(exWin.id, viewer));
       return exWin.id;
     });
 
     /* create new windows for additionally imported ones */
     const imIds = imWins.map((imWin) => {
+      const viewer = viewers[imWin.id];
+
       dispatch(fetchManifest(imWin.manifestId));
-      dispatch(addWindow(imWin));
-      dispatch(updateViewport(imWin.id, viewers[imWin.id]));
+      dispatch(addWindow(omit(imWin, ['companionWindowIds', 'thumbnailNavigationId'])));
+      dispatch(updateViewport(imWin.id, viewer));
+      /* create companion windows */
+      values(companionWindows)
+        .filter(cw => !cw.default)
+        .map(cw => dispatch(addCompanionWindow(imWin.id, { ...omit(cw, 'id') }, {})));
 
       return imWin.id;
     });