diff --git a/packages/component-modal/src/components/withModal.js b/packages/component-modal/src/components/withModal.js
index 0ee82669d2ebecd18d0b10b0eea4f5d3c5ef38e5..1d5c786c7b6026264442f30a9ab52ecb59c0a7fa 100644
--- a/packages/component-modal/src/components/withModal.js
+++ b/packages/component-modal/src/components/withModal.js
@@ -1,28 +1,29 @@
 import React from 'react'
+import { omit } from 'lodash'
 import { connect } from 'react-redux'
 
 import Modal from './Modal'
-import { setModalVisibility } from '../redux/modal'
+import { showModal, hideModal } from '../redux/modal'
 
 const mapState = state => ({
-  modalVisible: state.modal.visible,
+  modalsVisibility: omit(state.modal, 'props'),
   modalProps: state.modal.props,
 })
 
-const mapDispatch = dispatch => ({
-  hideModal: e => dispatch(setModalVisibility(false)),
-  showModal: (modalProps = {}) =>
-    dispatch(setModalVisibility(true, modalProps)),
+const mapDispatch = modalKey => (dispatch, propss) => ({
+  hideModal: () => dispatch(hideModal()),
+  showModal: (modalProps = {}) => dispatch(showModal(modalKey, modalProps)),
 })
 
 const withModal = ({
+  modalKey,
   modalComponent: Component,
   overlayColor,
 }) => WrappedComponent =>
-  connect(mapState, mapDispatch)(
-    ({ modalVisible, modalProps, hideModal, ...rest }) => (
+  connect(mapState, mapDispatch(modalKey))(
+    ({ modalsVisibility, modalProps, hideModal, ...rest }) => (
       <React.Fragment>
-        {modalVisible && (
+        {modalsVisibility[modalKey] && (
           <Modal
             {...modalProps}
             component={Component}
diff --git a/packages/component-modal/src/redux/modal.js b/packages/component-modal/src/redux/modal.js
index 8730d759836c52c0d062c0ba9cdd735cdb6e2e6a..cba9f707d60c3001c123abad56ced39270e1821e 100644
--- a/packages/component-modal/src/redux/modal.js
+++ b/packages/component-modal/src/redux/modal.js
@@ -1,20 +1,33 @@
 const initialState = {
-  visible: false,
   props: {},
 }
 
-const SET_MODAL_VISIBILTY = 'modal/SET_MODAL_VISIBILTY'
+const SHOW_MODAL = 'modal/SHOW_MODAL'
+const HIDE_MODAL = 'modal/HIDE_MODAL'
 
-export const setModalVisibility = (visible, props = {}) => ({
-  type: SET_MODAL_VISIBILTY,
+export const showModal = (modalKey, props = {}) => ({
+  type: SHOW_MODAL,
   payload: {
-    visible,
+    modalKey,
     props,
   },
 })
 
+export const hideModal = () => ({
+  type: HIDE_MODAL,
+})
+
+export const getModalVisibility = (state, modalKey) => state[modalKey]
+
 export default (state = initialState, action = {}) => {
   switch (action.type) {
+    case SHOW_MODAL:
+      return {
+        [action.payload.modalKey]: true,
+        props: action.payload.props,
+      }
+    case HIDE_MODAL:
+      return initialState
     default:
       return state
   }
diff --git a/packages/components-faraday/package.json b/packages/components-faraday/package.json
index e9712a020a7ae437039e2530163351a2d6129862..d262d3dbd0b4a9ea1d1ed71a68fcddd47efccf55 100644
--- a/packages/components-faraday/package.json
+++ b/packages/components-faraday/package.json
@@ -6,7 +6,6 @@
   "dependencies": {
     "@pubsweet/ui": "^3.1.0",
     "moment": "^2.20.1",
-    "portal-modal": "^1.0.3",
     "prop-types": "^15.5.10",
     "react": "^16.1.0",
     "react-dnd": "^2.5.4",
diff --git a/packages/components-faraday/src/components/Dashboard/AssignEditor.js b/packages/components-faraday/src/components/Dashboard/AssignEditor.js
index 1e05fedce2f298012d07b38e776cbb560f68395e..0ae9d05aa4e3b6de628d7d6e4264ccf5c85578f6 100644
--- a/packages/components-faraday/src/components/Dashboard/AssignEditor.js
+++ b/packages/components-faraday/src/components/Dashboard/AssignEditor.js
@@ -8,6 +8,7 @@ const AssignEditor = ({ assign }) => <button onClick={assign}>ASSIGN</button>
 
 export default compose(
   withModal({
+    modalKey: 'assignHEmodal',
     modalComponent: HEModal,
   }),
   withHandlers({
diff --git a/packages/components-faraday/src/components/Dashboard/AssignHEModal.js b/packages/components-faraday/src/components/Dashboard/AssignHEModal.js
index f6694a7e68e6495c33973c1549c92b21d245b87a..86e6d1438c6334a18508077cd7bbcf56b1ff03f9 100644
--- a/packages/components-faraday/src/components/Dashboard/AssignHEModal.js
+++ b/packages/components-faraday/src/components/Dashboard/AssignHEModal.js
@@ -37,6 +37,7 @@ class AssignHEModal extends React.Component {
     const filteredEditors = this.filterEditors(editors)
     return (
       <RootModal>
+        <button onClick={this.props.hideModal}>CLOSE</button>
         <ModalTitle>Assign Handling Editor</ModalTitle>
         <ModalHeader>
           <span>HANDLING EDITORS</span>
diff --git a/packages/components-faraday/src/components/Dashboard/DashboardCard.js b/packages/components-faraday/src/components/Dashboard/DashboardCard.js
index 02a1c5618e237282ec1bdbb44f6190b0e98da06c..9401acd55ba87aac3e577ecc444865d973eb433d 100644
--- a/packages/components-faraday/src/components/Dashboard/DashboardCard.js
+++ b/packages/components-faraday/src/components/Dashboard/DashboardCard.js
@@ -1,13 +1,12 @@
 import React from 'react'
 import { get } from 'lodash'
 import PropTypes from 'prop-types'
+import { compose, getContext } from 'recompose'
 import { Button, Icon, th } from '@pubsweet/ui'
 import styled, { css, withTheme } from 'styled-components'
-import { compose, getContext } from 'recompose'
-
-import { parseVersion, parseJournalIssue } from './utils'
 
 import ZipFiles from './ZipFiles'
+import { parseVersion, parseJournalIssue } from './utils'
 import HandlingEditorActions from './HandlingEditorActions'
 
 const DashboardCard = ({
diff --git a/packages/components-faraday/src/index.js b/packages/components-faraday/src/index.js
index 1565988f79fc73e887eb11f0e05b6ced7319b307..babba89a0463742f8865121f3975cb48a8b5fda4 100644
--- a/packages/components-faraday/src/index.js
+++ b/packages/components-faraday/src/index.js
@@ -4,7 +4,6 @@ module.exports = {
     reducers: {
       authors: () => require('./redux/authors').default,
       files: () => require('./redux/files').default,
-      modal: () => require('./redux/modal').default,
       editors: () => require('./redux/editors').default,
     },
   },
diff --git a/packages/components-faraday/src/redux/index.js b/packages/components-faraday/src/redux/index.js
index 8e6ed7c70b87ba2cdb0b2739fd44cb2f41dc81a4..cf03e87f32321c663eebead2e2354f09687aa323 100644
--- a/packages/components-faraday/src/redux/index.js
+++ b/packages/components-faraday/src/redux/index.js
@@ -1,3 +1,2 @@
-export { default as modal } from './modal'
 export { default as authors } from './authors'
 export { default as editors } from './editors'
diff --git a/packages/components-faraday/src/redux/modal.js b/packages/components-faraday/src/redux/modal.js
deleted file mode 100644
index ba8a4ba264804681f2a9a070665e76db97c49b5d..0000000000000000000000000000000000000000
--- a/packages/components-faraday/src/redux/modal.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import { modalReducer } from 'portal-modal'
-
-export default modalReducer