diff --git a/packages/component-faraday-selectors/src/index.js b/packages/component-faraday-selectors/src/index.js
index cde4ed57f250726a9a53cd65a92988ac04a88c91..ad815f61de09f8514c57cb1fb1b900b00e2ecb3e 100644
--- a/packages/component-faraday-selectors/src/index.js
+++ b/packages/component-faraday-selectors/src/index.js
@@ -81,3 +81,10 @@ export const canMakeRevision = (state, collection) => {
     collection.owners.map(o => o.id).includes(currentUserId)
   )
 }
+
+export const getUserPermissions = ({ currentUser }) =>
+  get(currentUser, 'user.teams').map(t => ({
+    objectId: t.object.id,
+    objectType: t.object.type,
+    role: t.teamType.permissions,
+  }))
diff --git a/packages/components-faraday/src/components/Dashboard/Dashboard.js b/packages/components-faraday/src/components/Dashboard/Dashboard.js
index c740018baa68358e10070e8457e3d53019086945..9a368a4878fa74c08448a5579e912a8c8bda54df 100644
--- a/packages/components-faraday/src/components/Dashboard/Dashboard.js
+++ b/packages/components-faraday/src/components/Dashboard/Dashboard.js
@@ -1,22 +1,20 @@
 import React from 'react'
 import styled from 'styled-components'
 import { Button, th } from '@pubsweet/ui'
-import { compose, withHandlers } from 'recompose'
+import { compose, withProps } from 'recompose'
 
 import { DashboardItems, DashboardFilters } from './'
 
 const Dashboard = ({
-  filters,
-  getItems,
   dashboard,
-  currentUser,
   filterItems,
   filterValues,
   deleteProject,
+  dashboardItems,
   getFilterOptions,
   changeFilterValue,
+  getDefaultFilterValue,
   createDraftSubmission,
-  ...rest
 }) => (
   <Root>
     <Header>
@@ -33,26 +31,17 @@ const Dashboard = ({
     </Header>
     <DashboardFilters
       changeFilterValue={changeFilterValue}
+      getDefaultFilterValue={getDefaultFilterValue}
       getFilterOptions={getFilterOptions}
     />
-    <DashboardItems deleteProject={deleteProject} list={getItems()} />
+    <DashboardItems deleteProject={deleteProject} list={dashboardItems} />
   </Root>
 )
 
 export default compose(
-  withHandlers({
-    getItems: ({
-      filters,
-      dashboard,
-      currentUser,
-      filterItems,
-      filterValues = {},
-    }) => () =>
-      filterItems(dashboard.all).sort((a, b) => {
-        if (filterValues.order === 'newest') return a.created - b.created < 0
-        return a.created - b.created > 0
-      }),
-  }),
+  withProps(({ dashboard, filterItems }) => ({
+    dashboardItems: filterItems(dashboard.all),
+  })),
 )(Dashboard)
 
 // #region styles
diff --git a/packages/components-faraday/src/components/Dashboard/DashboardFilters.js b/packages/components-faraday/src/components/Dashboard/DashboardFilters.js
index 0d0cfbd37e1011ff5b9ea562abd77b16e67d8e43..3fcb148873f588d14b77daad777a28ed68ccd1a3 100644
--- a/packages/components-faraday/src/components/Dashboard/DashboardFilters.js
+++ b/packages/components-faraday/src/components/Dashboard/DashboardFilters.js
@@ -12,36 +12,28 @@ const DashboardFilters = ({
   changeFilter,
   getFilterOptions,
   changeFilterValue,
+  getDefaultFilterValue,
 }) => (
-  <Root>
-    <FiltersContainer>
-      <span>Filter view:</span>
-      <FilterGroup>
-        <span>Owner</span>
-        <Menu
-          inline
-          onChange={changeFilterValue('owner')}
-          options={getFilterOptions('owner')}
-        />
-      </FilterGroup>
-      <FilterGroup>
-        <span>Status</span>
-        <Menu
-          inline
-          onChange={changeFilterValue('status')}
-          options={getFilterOptions('status')}
-        />
-      </FilterGroup>
-      <FilterGroup>
-        <span>Sort</span>
-        <Menu
-          inline
-          onChange={changeFilterValue('order')}
-          options={getFilterOptions('order')}
-        />
-      </FilterGroup>
-    </FiltersContainer>
-  </Root>
+  <FiltersContainer>
+    <span>Filter view:</span>
+    <FilterGroup>
+      <span>Priority</span>
+      <Menu
+        inline
+        onChange={changeFilterValue('priority')}
+        options={getFilterOptions('priority')}
+        value={getDefaultFilterValue('priority')}
+      />
+    </FilterGroup>
+    <FilterGroup>
+      <span>Sort</span>
+      <Menu
+        inline
+        onChange={changeFilterValue('order')}
+        options={getFilterOptions('order')}
+      />
+    </FilterGroup>
+  </FiltersContainer>
 )
 
 export default compose(
@@ -53,19 +45,14 @@ export default compose(
 )(DashboardFilters)
 
 // #region styles
-
-const Root = styled.div`
+const FiltersContainer = styled.div`
+  align-items: center;
   border-bottom: ${th('borderDefault')};
   color: ${th('colorPrimary')};
   display: flex;
-  justify-content: space-between;
+  justify-content: flex-start;
   margin: calc(${th('subGridUnit')} * 2) 0;
   padding-bottom: calc(${th('subGridUnit')} * 2);
-`
-
-const FiltersContainer = styled.div`
-  align-items: center;
-  display: flex;
 
   > span {
     align-self: flex-end;
diff --git a/packages/components-faraday/src/components/Dashboard/DashboardPage.js b/packages/components-faraday/src/components/Dashboard/DashboardPage.js
index 48dd1bfd37e6c67d4d92489197eb435a65b32a4c..910f834eb180aa08002051faa1a4b70eeda37490 100644
--- a/packages/components-faraday/src/components/Dashboard/DashboardPage.js
+++ b/packages/components-faraday/src/components/Dashboard/DashboardPage.js
@@ -12,6 +12,16 @@ import { createDraftSubmission } from 'pubsweet-component-wizard/src/redux/conve
 import { Dashboard } from './'
 import withFilters from './withFilters'
 import { getHandlingEditors } from '../../redux/editors'
+import cfg from '../../../../xpub-faraday/config/default'
+import { getUserPermissions } from '../../../../component-faraday-selectors/src'
+
+const statuses = get(cfg, 'statuses')
+
+const getUserRole = (user, role) => {
+  if (user.admin) return 'admin'
+  if (user.editorInChief) return 'editorInChief'
+  return role
+}
 
 export default compose(
   ConnectPage(() => [actions.getCollections(), actions.getUsers()]),
@@ -37,7 +47,14 @@ export default compose(
         ),
         all: sortedCollections,
       }
-      return { collections, conversion, currentUser, dashboard }
+      const userPermissions = getUserPermissions(state)
+      return {
+        dashboard,
+        conversion,
+        collections,
+        currentUser,
+        userPermissions,
+      }
     },
     (dispatch, { history }) => ({
       deleteProject: collection =>
@@ -54,40 +71,26 @@ export default compose(
   withRouter,
   withJournal,
   withFilters({
-    status: {
+    priority: {
       options: [
         { label: 'All', value: 'all' },
-        { label: 'Submitted', value: 'submitted' },
-        { label: 'Draft', value: 'draft' },
-        { label: 'HE Invited', value: 'heInvited' },
-        { label: 'HE Assigned', value: 'heAssigned' },
-        { label: 'Reviewers Invited', value: 'reviewersInvited' },
-        { label: 'Under Review', value: 'underReview' },
-      ],
-      filterFn: filterValue => item => {
-        if (filterValue === 'all' || filterValue === '') return true
-        const itemStatus = get(item, 'status')
-        if (!itemStatus && filterValue === 'draft') {
-          return true
-        }
-        return itemStatus === filterValue
-      },
-    },
-    owner: {
-      options: [
-        { label: 'Everyone', value: 'all' },
-        { label: 'My work', value: 'me' },
-        { label: `Other's work`, value: 'other' },
+        { label: 'Needs Attention', value: 'needsAttention' },
+        { label: 'In Progress', value: 'inProgress' },
       ],
-      filterFn: (filterValue, { currentUser }) => item => {
-        if (filterValue === 'all' || filterValue === '') return true
-        const itemOwnerIds = item.owners.map(o => o.id)
-        if (filterValue === 'me') {
-          return itemOwnerIds.includes(currentUser.id)
-        } else if (filterValue === 'other') {
-          return !itemOwnerIds.includes(currentUser.id)
+      filterFn: (filterValue, { currentUser, userPermissions = [] }) => ({
+        id,
+        status = 'draft',
+      }) => {
+        const permission = userPermissions.find(p => p.objectId === id)
+        const userRole = getUserRole(currentUser, get(permission, 'role'))
+        switch (filterValue) {
+          case 'needsAttention':
+            return get(statuses, `${status}.${userRole}.needsAttention`)
+          case 'inProgress':
+            return !get(statuses, `${status}.${userRole}.needsAttention`)
+          default:
+            return true
         }
-        return false
       },
     },
     order: {
diff --git a/packages/components-faraday/src/components/Dashboard/withFilters.js b/packages/components-faraday/src/components/Dashboard/withFilters.js
index b51b7b6eba14585b15653a6481480b7c8bfa0193..9f1ccb12b4f37dd11a5868175a4bb77272f081be 100644
--- a/packages/components-faraday/src/components/Dashboard/withFilters.js
+++ b/packages/components-faraday/src/components/Dashboard/withFilters.js
@@ -1,6 +1,12 @@
 import { get } from 'lodash'
 import { compose, withState, withHandlers } from 'recompose'
 
+const hydrateFilters = defaultValues => {
+  const filterValues = localStorage.getItem('filterValues')
+  if (filterValues) return JSON.parse(filterValues)
+  return defaultValues
+}
+
 export default config => Component => {
   const filterFns = Object.entries(config).map(([filterKey, { filterFn }]) => ({
     key: filterKey,
@@ -11,14 +17,29 @@ export default config => Component => {
     {},
   )
   return compose(
-    withState('filterValues', 'setFilterValues', filterValues),
+    withState('filterValues', 'setFilterValues', hydrateFilters(filterValues)),
     withHandlers({
       getFilterOptions: () => key => get(config, `${key}.options`) || [],
-      changeFilterValue: ({ setFilterValues }) => filterKey => value => {
-        setFilterValues(v => ({
-          ...v,
-          [filterKey]: value,
-        }))
+      getDefaultFilterValue: ({ filterValues }) => key =>
+        get(filterValues, key) || '',
+      changeFilterValue: ({
+        setFilterValues,
+        filterValues,
+      }) => filterKey => value => {
+        // ugly but recompose doesn't pass the new state in the callback function
+        let newState = {}
+        setFilterValues(
+          v => {
+            newState = {
+              ...v,
+              [filterKey]: value,
+            }
+            return newState
+          },
+          () => {
+            localStorage.setItem('filterValues', JSON.stringify(newState))
+          },
+        )
       },
       filterItems: ({ filterValues, ...props }) => items =>
         filterFns.reduce(