diff --git a/packages/components-faraday/package.json b/packages/components-faraday/package.json
index 4b196127c02f3326636241b824e8029e4f0ffb82..0c9e9ac697ea51bd8cd203f8135fba00cc3b33d8 100644
--- a/packages/components-faraday/package.json
+++ b/packages/components-faraday/package.json
@@ -11,6 +11,7 @@
     "react-dnd": "^2.5.4",
     "react-dnd-html5-backend": "^2.5.4",
     "react-dom": "^15.6.1",
+    "react-modal": "^3.2.1",
     "react-router-dom": "^4.2.2",
     "recompose": "^0.26.0",
     "redux": "^3.6.0",
diff --git a/packages/components-faraday/src/components/Dashboard/AbstractModal.js b/packages/components-faraday/src/components/Dashboard/AbstractModal.js
new file mode 100644
index 0000000000000000000000000000000000000000..4692fa72a9d4ff98fb694b983e78ac16de21d804
--- /dev/null
+++ b/packages/components-faraday/src/components/Dashboard/AbstractModal.js
@@ -0,0 +1,101 @@
+import React from 'react'
+import { get } from 'lodash'
+import Modal from 'react-modal'
+import { Icon } from '@pubsweet/ui'
+import styled from 'styled-components'
+
+const customStyles = {
+  overlay: {
+    position: 'fixed',
+    top: 0,
+    left: 0,
+    right: 0,
+    bottom: 0,
+    backgroundColor: 'rgba(102, 112, 128, 0.8)',
+  },
+  content: {
+    top: '50%',
+    left: '50%',
+    right: 'auto',
+    bottom: 'auto',
+    marginRight: '-50%',
+    transform: 'translate(-50%, -50%)',
+    width: 600,
+    maxHeight: 500,
+    padding: 0,
+    overflowY: 'auto',
+    opacity: 1,
+    backgroundColor: 'transparent',
+    border: 'none',
+    borderRadius: 0,
+  },
+}
+
+// #region styled-components
+const Root = styled.div`
+  background-color: #fff;
+  padding: 50px 32px 32px 32px;
+  border: 1px solid #667080;
+  position: relative;
+`
+
+const Title = styled.span`
+  font-family: Helvetica;
+  font-size: 18px;
+  text-align: left;
+  color: #667080;
+`
+
+const Subtitle = styled.span`
+  color: #667080;
+  font-family: Helvetica;
+  font-size: 14px;
+  font-weight: bold;
+  line-height: 1.57;
+  margin-bottom: 8px;
+  text-align: left;
+`
+
+const Content = styled.div`
+  color: #667080;
+  font-family: Helvetica;
+  font-size: 14px;
+  line-height: 1.57;
+  margin-top: 10px;
+  text-align: left;
+`
+
+const CloseIcon = styled.div`
+  cursor: pointer;
+  position: absolute;
+  top: 5px;
+  right: 5px;
+`
+// #endregion
+
+const AbstractModal = ({ abstractModal, onClose }) => {
+  const isOpen = !!abstractModal
+  return (
+    <Modal
+      isOpen={isOpen}
+      onRequestClose={onClose}
+      shouldCloseOnOverlayClick
+      style={customStyles}
+    >
+      <Root>
+        <CloseIcon onClick={onClose}>
+          <Icon color="#667080">x</Icon>
+        </CloseIcon>
+        <Title
+          dangerouslySetInnerHTML={{ __html: get(abstractModal, 'title') }}
+        />
+        <Subtitle>Abstract</Subtitle>
+        <Content
+          dangerouslySetInnerHTML={{ __html: get(abstractModal, 'abstract') }}
+        />
+      </Root>
+    </Modal>
+  )
+}
+
+export default AbstractModal
diff --git a/packages/components-faraday/src/components/Dashboard/Dashboard.js b/packages/components-faraday/src/components/Dashboard/Dashboard.js
index 653c50351f02e4aa076cd4d9cbf2f3777c924a38..5ca2c0e155ebd558cd51fdad43f95bc3e024f378 100644
--- a/packages/components-faraday/src/components/Dashboard/Dashboard.js
+++ b/packages/components-faraday/src/components/Dashboard/Dashboard.js
@@ -1,10 +1,10 @@
 import React from 'react'
-import { get, isEmpty } from 'lodash'
+import { get } from 'lodash'
 import { Button } from '@pubsweet/ui'
-import { connect } from 'react-redux'
 import { compose, withHandlers } from 'recompose'
 
 import classes from './Dashboard.local.scss'
+import AbstractModal from './AbstractModal'
 import DashboardItems from './DashboardItems'
 import DashboardFilters from './DashboardFilters'
 
@@ -45,25 +45,11 @@ const Dashboard = ({
       list={getItems()}
       listView={listView}
     />
-    {!isEmpty(abstractModal) && (
-      <div className={classes.modal}>
-        <div className={classes.modalContent}>
-          <div
-            className={classes.modalText}
-            dangerouslySetInnerHTML={{ __html: abstractModal }} // eslint-disable-line
-          />
-          <Button onClick={setModal()}>Close</Button>
-        </div>
-      </div>
-    )}
+    <AbstractModal abstractModal={abstractModal} onClose={setModal()} />
   </div>
 )
 
 export default compose(
-  connect(state => ({
-    filters: state.filters.filter,
-    sortOrder: state.filters.sortValue,
-  })),
   withHandlers({
     getItems: ({
       filters,
diff --git a/packages/components-faraday/src/components/Dashboard/DashboardCard.js b/packages/components-faraday/src/components/Dashboard/DashboardCard.js
index 970ce57a3c3aff705e9266b90e5a6d67b030b926..75868581a808f097bb0782eb252719632239e140 100644
--- a/packages/components-faraday/src/components/Dashboard/DashboardCard.js
+++ b/packages/components-faraday/src/components/Dashboard/DashboardCard.js
@@ -1,7 +1,8 @@
 import React from 'react'
 import PropTypes from 'prop-types'
-import { get, isEmpty } from 'lodash'
 import classnames from 'classnames'
+import { get, isEmpty } from 'lodash'
+import styled from 'styled-components'
 import { Button, Icon } from '@pubsweet/ui'
 import { compose, getContext } from 'recompose'
 
@@ -23,6 +24,7 @@ const DashboardCard = ({
   const status = get(project, 'status') || 'Draft'
   const hasFiles = !isEmpty(files)
   const abstract = get(version, 'metadata.abstract')
+  const metadata = get(version, 'metadata')
 
   return (
     <div className={classes.card}>
@@ -107,10 +109,33 @@ const DashboardCard = ({
           </div>
         </div>
       )}
+      {abstract && (
+        <ViewAbstractContainer onClick={setModal(metadata)}>
+          <Icon color="#667080" size={18}>
+            eye
+          </Icon>
+          <span>View Abstract</span>
+        </ViewAbstractContainer>
+      )}
     </div>
   )
 }
 
+const ViewAbstractContainer = styled.div`
+  align-items: center;
+  cursor: pointer;
+  display: flex;
+
+  & > span {
+    color: #667080;
+    font-family: Helvetica;
+    font-size: 14px;
+    margin-left: 8px;
+    text-align: left;
+    text-decoration: underline;
+  }
+`
+
 export default compose(
   getContext({
     setModal: PropTypes.func,
diff --git a/packages/components-faraday/src/components/Dashboard/DashboardFilters.js b/packages/components-faraday/src/components/Dashboard/DashboardFilters.js
index 78241263936811ee2b9ce54aa7faddf3607314e3..3a2ae74005be770013c39138013a188174111c5b 100644
--- a/packages/components-faraday/src/components/Dashboard/DashboardFilters.js
+++ b/packages/components-faraday/src/components/Dashboard/DashboardFilters.js
@@ -1,10 +1,8 @@
 import React from 'react'
-import { connect } from 'react-redux'
 import { Icon, Menu } from '@pubsweet/ui'
 import { compose, withHandlers } from 'recompose'
 
 import classes from './Dashboard.local.scss'
-import { changeFilter, changeSort } from './redux/filters'
 
 const sortOptions = [
   { label: 'Newest first', value: 'newest' },
@@ -54,7 +52,6 @@ const DashboardFilters = ({
 )
 
 export default compose(
-  connect(null, { changeFilter, changeSort }),
   withHandlers({
     changeFilter: ({ changeFilter }) => filterKey => value => {
       changeFilter(filterKey, value)
diff --git a/packages/components-faraday/src/components/Dashboard/DashboardPage.js b/packages/components-faraday/src/components/Dashboard/DashboardPage.js
index 36a4a7adf345d5fcd95cdbeb708ecc843853c991..0e5c23cc67e928b3ecb0947c9fa0f18526cc5d8e 100644
--- a/packages/components-faraday/src/components/Dashboard/DashboardPage.js
+++ b/packages/components-faraday/src/components/Dashboard/DashboardPage.js
@@ -19,17 +19,16 @@ export default compose(
     actions.getUsers(),
   ]),
   withState('listView', 'changeView', true),
-  withState('abstractModal', 'setAbstractModal', ''),
+  withState('abstractModal', 'setAbstractModal', null),
   withHandlers({
     changeViewMode: ({ changeView }) => () => changeView(listView => !listView),
-    setModal: ({ setAbstractModal }) => abstract => () => {
-      setAbstractModal(abstract)
+    setModal: ({ setAbstractModal }) => (metadata = null) => () => {
+      setAbstractModal(metadata)
     },
   }),
   connect(
     state => {
-      const { collections } = state
-      const { conversion } = state
+      const { collections, conversion } = state
       const currentUser = selectCurrentUser(state)
 
       const sortedCollections = newestFirst(collections)
@@ -49,7 +48,6 @@ export default compose(
         ),
         all: sortedCollections,
       }
-
       return { collections, conversion, currentUser, dashboard }
     },
     (dispatch, { history }) => ({
@@ -95,7 +93,7 @@ export default compose(
   }),
   withContext(
     {
-      abstractModal: PropTypes.string,
+      abstractModal: PropTypes.object,
       setModal: PropTypes.func,
     },
     ({ abstractModal, setModal }) => ({
diff --git a/packages/components-faraday/src/components/Dashboard/redux/filters.js b/packages/components-faraday/src/components/Dashboard/redux/filters.js
deleted file mode 100644
index e50016723b70f39788b05687f18390c02f650c68..0000000000000000000000000000000000000000
--- a/packages/components-faraday/src/components/Dashboard/redux/filters.js
+++ /dev/null
@@ -1,41 +0,0 @@
-const initialState = {
-  filter: {
-    status: 'all',
-    owner: 'all',
-  },
-  sortValue: 'newest',
-}
-
-const CHANGE_FILTER = 'filters/CHANGE_FILTER'
-const CHANGE_SORT = 'filters/CHANGE_SORT'
-
-export const changeFilter = (filterKey, value) => ({
-  type: CHANGE_FILTER,
-  filterKey,
-  value,
-})
-
-export const changeSort = value => ({
-  type: CHANGE_SORT,
-  value,
-})
-
-export default (state = initialState, action) => {
-  switch (action.type) {
-    case CHANGE_FILTER:
-      return {
-        ...state,
-        filter: {
-          ...state.filter,
-          [action.filterKey]: action.value,
-        },
-      }
-    case CHANGE_SORT:
-      return {
-        ...state,
-        sortValue: action.value,
-      }
-    default:
-      return state
-  }
-}
diff --git a/packages/components-faraday/src/components/Dashboard/redux/index.js b/packages/components-faraday/src/components/Dashboard/redux/index.js
deleted file mode 100644
index b5b1e82dc5649181aeaeb9dbcf8286a573a4b33a..0000000000000000000000000000000000000000
--- a/packages/components-faraday/src/components/Dashboard/redux/index.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default as filters } from './filters'
diff --git a/packages/components-faraday/src/index.js b/packages/components-faraday/src/index.js
index 3c0ed73cabca75cdc957af41d97563815a4e1498..b417ecc0a0cfaa39581f13b4fd9fa74a6a82efe3 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,
-      filters: () => require('./components/Dashboard/redux/filters').default,
     },
   },
 }
diff --git a/yarn.lock b/yarn.lock
index 76654745dcb4355df780499d9a0f89f31cf8640e..e434fdc51875637af9236f6e59916aa23ffa2c46 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3585,6 +3585,10 @@ execall@^1.0.0:
   dependencies:
     clone-regexp "^1.0.0"
 
+exenv@^1.2.0:
+  version "1.2.2"
+  resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d"
+
 exit-hook@^1.0.0:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8"
@@ -8856,6 +8860,14 @@ react-input-autosize@^2.1.0:
   dependencies:
     prop-types "^15.5.8"
 
+react-modal@^3.2.1:
+  version "3.2.1"
+  resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-3.2.1.tgz#fa8f76aed55b67c22dcf1a1c15b05c8d11f18afe"
+  dependencies:
+    exenv "^1.2.0"
+    prop-types "^15.5.10"
+    warning "^3.0.0"
+
 react-moment@^0.6.1:
   version "0.6.8"
   resolved "https://registry.yarnpkg.com/react-moment/-/react-moment-0.6.8.tgz#8612a90f3c8afec26fef6844806d84b9d9e3b212"