diff --git a/__tests__/src/actions/companionWindow.test.js b/__tests__/src/actions/companionWindow.test.js
index 183949b736913b742482af63cadf42810fb99f51..0e7a1df61a78a41829ee8243f8ea8825d870fc3b 100644
--- a/__tests__/src/actions/companionWindow.test.js
+++ b/__tests__/src/actions/companionWindow.test.js
@@ -90,9 +90,10 @@ describe('companionWindow actions', () => {
 
   describe('removeCompanionWindow', () => {
     it('should return correct action object', () => {
-      const action = actions.removeCompanionWindow('cw-123');
+      const action = actions.removeCompanionWindow('window', 'cw-123');
       expect(action.type).toBe(ActionTypes.REMOVE_COMPANION_WINDOW);
       expect(action.id).toBe('cw-123');
+      expect(action.windowId).toBe('window');
     });
   });
 });
diff --git a/__tests__/src/components/CompanionWindow.test.js b/__tests__/src/components/CompanionWindow.test.js
index 3666ce275ee5e3ba83eb39dfee0b19bfc95c421f..a88faa33063a8730f3a60c4547a5a799daa610fe 100644
--- a/__tests__/src/components/CompanionWindow.test.js
+++ b/__tests__/src/components/CompanionWindow.test.js
@@ -45,7 +45,6 @@ describe('CompanionWindow', () => {
       const closeButton = companionWindow.find('WithStyles(IconButton)[aria-label="closeCompanionWindow"]');
       closeButton.simulate('click');
       expect(removeCompanionWindowEvent).toHaveBeenCalledTimes(1);
-      expect(removeCompanionWindowEvent).toHaveBeenCalledWith('x', 'abc123');
     });
   });
 
diff --git a/__tests__/src/reducers/windows.test.js b/__tests__/src/reducers/windows.test.js
index d39aad6e4f52231ac67ffe8649af5fbfbf33ae02..a7ee9845d904003b18158d063270fe9ce40accb7 100644
--- a/__tests__/src/reducers/windows.test.js
+++ b/__tests__/src/reducers/windows.test.js
@@ -293,4 +293,23 @@ describe('windows reducer', () => {
       },
     });
   });
+
+  it('should handle REMOVE_COMPANION_WINDOW', () => {
+    // on the right, just tacks the new id on
+    expect(windowsReducer({
+      abc123: {
+        id: 'abc123',
+        companionWindowIds: ['123', 'xyz'],
+      },
+    }, {
+      type: ActionTypes.REMOVE_COMPANION_WINDOW,
+      id: 'xyz',
+      windowId: 'abc123',
+    })).toEqual({
+      abc123: {
+        id: 'abc123',
+        companionWindowIds: ['123'],
+      },
+    });
+  });
 });
diff --git a/src/components/CompanionWindow.js b/src/components/CompanionWindow.js
index 86eb876822abe9362fb38b7741553253ab564e7a..b474e90faf63174b955908be5394a82cab079023 100644
--- a/src/components/CompanionWindow.js
+++ b/src/components/CompanionWindow.js
@@ -71,7 +71,7 @@ export class CompanionWindow extends Component {
                   <IconButton
                     aria-label={t('closeCompanionWindow')}
                     className={classes.closeButton}
-                    onClick={() => { onCloseClick(windowId, id); }}
+                    onClick={onCloseClick}
                   >
                     <CloseIcon />
                   </IconButton>
diff --git a/src/containers/CompanionWindow.js b/src/containers/CompanionWindow.js
index b49ca85c4803c54a6d2ce43a4e97ef6572a577b5..ce99afa5d6175840757999568df21bb4ae1d1fe6 100644
--- a/src/containers/CompanionWindow.js
+++ b/src/containers/CompanionWindow.js
@@ -27,10 +27,12 @@ const mapStateToProps = (state, { id, windowId }) => {
  * @memberof CompanionWindow
  * @private
  */
-const mapDispatchToProps = {
-  onCloseClick: actions.closeCompanionWindow,
-  updateCompanionWindow: actions.updateCompanionWindow,
-};
+const mapDispatchToProps = (dispatch, { windowId, id }) => ({
+  onCloseClick: () => dispatch(
+    actions.removeCompanionWindow(windowId, id),
+  ),
+  updateCompanionWindow: (...args) => dispatch(actions.updateCompanionWindow(...args)),
+});
 
 /**
  *
diff --git a/src/state/actions/companionWindow.js b/src/state/actions/companionWindow.js
index 044bbc648e4e5811b361fa1b2534d186859f9b2d..02ef3a2737fe67911a4e476b25e77a189200194c 100644
--- a/src/state/actions/companionWindow.js
+++ b/src/state/actions/companionWindow.js
@@ -1,6 +1,5 @@
 import uuid from 'uuid/v4';
 import ActionTypes from './action-types';
-import { updateWindow } from './window';
 
 const defaultProps = {
   content: null,
@@ -34,18 +33,6 @@ export function updateCompanionWindow(windowId, id, payload) {
 }
 
 /** */
-export function removeCompanionWindow(id) {
-  return { type: ActionTypes.REMOVE_COMPANION_WINDOW, id };
-}
-
-/**
-* Close companion window and remove reference from window
-*/
-export function closeCompanionWindow(windowId, companionWindowId) {
-  return (dispatch, getState) => {
-    dispatch(removeCompanionWindow(companionWindowId));
-    const companionWindowIds = getState().windows[windowId].companionWindowIds
-      .filter(id => id !== companionWindowId);
-    dispatch(updateWindow(windowId, { companionWindowIds }));
-  };
+export function removeCompanionWindow(windowId, id) {
+  return { type: ActionTypes.REMOVE_COMPANION_WINDOW, id, windowId };
 }
diff --git a/src/state/actions/window.js b/src/state/actions/window.js
index ff246162c9c018f2b20b2b2709060b6ab018e5e4..cc195dfb2ccd2275419d3647a78abc01aa5c9a32 100644
--- a/src/state/actions/window.js
+++ b/src/state/actions/window.js
@@ -1,6 +1,5 @@
 import uuid from 'uuid/v4';
 import ActionTypes from './action-types';
-import { removeCompanionWindow } from './companionWindow';
 
 /**
  * focusWindow - action creator
diff --git a/src/state/reducers/windows.js b/src/state/reducers/windows.js
index 8a08187677e67077b13efd5895d4dd9a639319da..9ac1ce28af442ddbac7bf5c3dd2c0de172e64c50 100644
--- a/src/state/reducers/windows.js
+++ b/src/state/reducers/windows.js
@@ -117,6 +117,15 @@ export const windowsReducer = (state = {}, action) => {
           companionWindowIds: state[action.windowId].companionWindowIds.concat([action.id]),
         },
       };
+    case ActionTypes.REMOVE_COMPANION_WINDOW:
+      return {
+        ...state,
+        [action.windowId]: {
+          ...state[action.windowId],
+          companionWindowIds: state[action.windowId]
+            .companionWindowIds.filter(id => id !== action.id),
+        },
+      };
     default:
       return state;
   }