diff --git a/packages/component-faraday-selectors/src/index.js b/packages/component-faraday-selectors/src/index.js
index ad815f61de09f8514c57cb1fb1b900b00e2ecb3e..ad0747cc02c078d460e87734def415d3dde1932b 100644
--- a/packages/component-faraday-selectors/src/index.js
+++ b/packages/component-faraday-selectors/src/index.js
@@ -82,6 +82,15 @@ export const canMakeRevision = (state, collection) => {
   )
 }
 
+export const currentUserIsAuthor = (state, id) => {
+  const permissions = getUserPermissions(state) || []
+
+  return permissions
+    .filter(f => f.role === 'author')
+    .map(p => p.objectId)
+    .includes(id)
+}
+
 export const getUserPermissions = ({ currentUser }) =>
   get(currentUser, 'user.teams').map(t => ({
     objectId: t.object.id,
diff --git a/packages/component-manuscript-manager/src/routes/fragments/post.js b/packages/component-manuscript-manager/src/routes/fragments/post.js
index d0b5b18f6d4592f681bcd14298c8cedd5c194c0d..b54399b0cc006f469863bbfabaaecb0c8bab3150 100644
--- a/packages/component-manuscript-manager/src/routes/fragments/post.js
+++ b/packages/component-manuscript-manager/src/routes/fragments/post.js
@@ -48,6 +48,9 @@ module.exports = models => async (req, res) => {
     })
     email.setupManuscriptSubmittedEmail()
 
+    collection.status = 'submitted'
+    collection.save()
+
     return res.status(200).json(fragment)
   } catch (e) {
     const notFoundError = await services.handleNotFoundError(e, 'Item')
diff --git a/packages/component-manuscript/src/components/Files.js b/packages/component-manuscript/src/components/Files.js
index 8a9c4057dcde3b1afd47989544bc7860ef6ac655..cb3315829631061e90b79fee25372d9c76507e11 100644
--- a/packages/component-manuscript/src/components/Files.js
+++ b/packages/component-manuscript/src/components/Files.js
@@ -5,7 +5,12 @@ import styled, { css } from 'styled-components'
 import { FileItem } from 'pubsweet-components-faraday/src/components/Files'
 
 const Files = ({
-  files: { manuscripts = [], coverLetter = [], supplementary = [] },
+  files: {
+    manuscripts = [],
+    coverLetter = [],
+    supplementary = [],
+    responseToReviewers = [],
+  },
 }) => (
   <Root>
     {!!manuscripts.length && (
@@ -41,6 +46,17 @@ const Files = ({
         ))}
       </Fragment>
     )}
+    {!!responseToReviewers.length && (
+      <Fragment>
+        <Header>
+          <span>Response to Reviewers</span>
+          <div />
+        </Header>
+        {responseToReviewers.map(file => (
+          <FileItem compact id={file.id} key={file.id} {...file} />
+        ))}
+      </Fragment>
+    )}
   </Root>
 )
 
@@ -60,9 +76,9 @@ const Header = styled.div`
   flex-direction: row;
 
   & span {
-    ${defaultText};
     margin-right: ${th('subGridUnit')};
     margin-top: ${th('subGridUnit')};
+    ${defaultText};
     text-transform: uppercase;
   }
 
diff --git a/packages/component-manuscript/src/components/ReviewReportCard.js b/packages/component-manuscript/src/components/ReviewReportCard.js
index ff357bec2509e18d1a2d164f1f8a26945ec0f8cf..9617ac681434f4718e7494dd11a2fba86f679724 100644
--- a/packages/component-manuscript/src/components/ReviewReportCard.js
+++ b/packages/component-manuscript/src/components/ReviewReportCard.js
@@ -12,6 +12,7 @@ import { ShowMore } from './'
 const ReviewReportCard = ({
   i = 0,
   report = {},
+  showBorder = false,
   journal: { recommendations },
 }) => {
   const hasReviewer = !isEmpty(get(report, 'user'))
@@ -24,7 +25,7 @@ const ReviewReportCard = ({
   )
 
   return (
-    <Root hasReviewer={hasReviewer}>
+    <Root showBorder={showBorder}>
       {hasReviewer && (
         <Row>
           <Text>
@@ -117,7 +118,7 @@ const Root = styled.div`
   margin: auto;
   border: none;
   padding: 0;
-  ${({ hasReviewer }) => (hasReviewer ? cardStyle : null)};
+  ${({ showBorder }) => (showBorder ? cardStyle : null)};
 `
 const Text = styled.div`
   ${defaultText};
diff --git a/packages/component-manuscript/src/components/ReviewReportsList.js b/packages/component-manuscript/src/components/ReviewReportsList.js
new file mode 100644
index 0000000000000000000000000000000000000000..ee47831817b963a6dc04a3d0361ffed6d2a98c64
--- /dev/null
+++ b/packages/component-manuscript/src/components/ReviewReportsList.js
@@ -0,0 +1,21 @@
+import React, { Fragment } from 'react'
+import { ReviewReportCard } from './'
+
+const ReviewReportsList = ({ recommendations, showBorder }) => (
+  <Fragment>
+    {recommendations.length ? (
+      recommendations.map((r, index) => (
+        <ReviewReportCard
+          i={index + 1}
+          key={r.id}
+          report={r}
+          showBorder={showBorder}
+        />
+      ))
+    ) : (
+      <div>No reports submitted yet.</div>
+    )}
+  </Fragment>
+)
+
+export default ReviewReportsList
diff --git a/packages/component-manuscript/src/components/ReviewsAndReports.js b/packages/component-manuscript/src/components/ReviewsAndReports.js
index ced7097c6c243e89b12228118c210f16fa3caedf..126be81551c3ebf04077dd977e7fea0fda791e63 100644
--- a/packages/component-manuscript/src/components/ReviewsAndReports.js
+++ b/packages/component-manuscript/src/components/ReviewsAndReports.js
@@ -15,8 +15,11 @@ import {
 import { selectRecommendations } from 'pubsweet-components-faraday/src/redux/recommendations'
 
 import { Tabs, Expandable } from '../molecules'
-import { ReviewReportCard, ReviewerReportForm } from './'
-import { canSeeReviewersReports } from '../../../component-faraday-selectors'
+import { ReviewReportCard, ReviewerReportForm, ReviewReportsList } from './'
+import {
+  canSeeReviewersReports,
+  currentUserIsAuthor,
+} from '../../../component-faraday-selectors'
 
 const getTabSections = (collectionId, reviewers, recommendations = []) => [
   {
@@ -29,17 +32,7 @@ const getTabSections = (collectionId, reviewers, recommendations = []) => [
   {
     key: 2,
     label: 'Reviewer Reports',
-    content: (
-      <Fragment>
-        {recommendations.length ? (
-          recommendations.map((r, index) => (
-            <ReviewReportCard i={index + 1} key={r.id} report={r} />
-          ))
-        ) : (
-          <div>No reports submitted yet.</div>
-        )}
-      </Fragment>
-    ),
+    content: <ReviewReportsList recommendations={recommendations} showBorder />,
   },
 ]
 
@@ -47,6 +40,7 @@ const ReviewsAndReports = ({
   report,
   project,
   version,
+  isAuthor,
   isReviewer,
   mappedReviewers,
   mappedRecommendations,
@@ -60,7 +54,7 @@ const ReviewsAndReports = ({
 }) => (
   <Fragment>
     {canSeeReviewersReports && (
-      <Root>
+      <Root id="reviews-and-reports">
         <Expandable
           label="Reviewers & Reports"
           rightHTML={
@@ -83,7 +77,7 @@ const ReviewsAndReports = ({
       </Root>
     )}
     {isReviewer && (
-      <Root id="review-report">
+      <Root id="reviewer-report">
         <Expandable label="Your Report" startExpanded>
           {get(reviewerRecommendation, 'submittedOn') ? (
             <ReviewReportCard report={reviewerRecommendation} />
@@ -98,6 +92,14 @@ const ReviewsAndReports = ({
         </Expandable>
       </Root>
     )}
+    {isAuthor &&
+      !!recommendations.length && (
+        <Root id="review-reports">
+          <Expandable label="Reports" startExpanded>
+            <ReviewReportsList recommendations={recommendations} showBorder />
+          </Expandable>
+        </Root>
+      )}
   </Fragment>
 )
 
@@ -107,6 +109,7 @@ export default compose(
       reviewers: selectReviewers(state),
       fetchingReviewers: selectFetchingReviewers(state),
       isReviewer: currentUserIsReviewer(state, version.id),
+      isAuthor: currentUserIsAuthor(state, version.id),
       recommendations: selectRecommendations(state, version.id),
       canSeeReviewersReports: canSeeReviewersReports(state, project.id),
     }),
diff --git a/packages/component-manuscript/src/components/index.js b/packages/component-manuscript/src/components/index.js
index 3509c110448651a67ba4e2659d1bf1bb30abf404..dadf8d4e6ffd637ee1faed3f90c00d99978b5c20 100644
--- a/packages/component-manuscript/src/components/index.js
+++ b/packages/component-manuscript/src/components/index.js
@@ -13,3 +13,4 @@ export { default as ManuscriptVersion } from './ManuscriptVersion'
 export { default as ReviewsAndReports } from './ReviewsAndReports'
 export { default as EditorialComments } from './EditorialComments'
 export { default as ReviewerReportForm } from './ReviewerReportForm'
+export { default as ReviewReportsList } from './ReviewReportsList'
diff --git a/packages/component-wizard/src/components/WizardFormStep.js b/packages/component-wizard/src/components/WizardFormStep.js
index 5579434a313269425ecd33382e621faf1ea44dd1..c4caa8b12f1bb533d416e01c1d2c716ed6908d0f 100644
--- a/packages/component-wizard/src/components/WizardFormStep.js
+++ b/packages/component-wizard/src/components/WizardFormStep.js
@@ -7,7 +7,11 @@ import { reduxForm, formValueSelector, SubmissionError } from 'redux-form'
 
 import WizardStep from './WizardStep'
 import { autosaveRequest } from '../redux/autosave'
-import { submitRevision, isRevisionFlow } from '../redux/conversion'
+import {
+  submitRevision,
+  isRevisionFlow,
+  submitManuscript as submitNewManuscript,
+} from '../redux/conversion'
 
 const wizardSelector = formValueSelector('wizard')
 
@@ -38,21 +42,7 @@ const submitManuscript = ({
   dispatch,
   redirectPath = '/',
 }) => {
-  dispatch(
-    actions.updateFragment(project, {
-      id: version.id,
-      submitted: new Date(),
-      ...values,
-    }),
-  )
-    .then(() =>
-      dispatch(
-        actions.updateCollection({
-          id: project.id,
-          status: 'submitted',
-        }),
-      ),
-    )
+  submitNewManuscript(project.id, version.id)
     .then(() => {
       history.push(redirectPath, {
         project: project.id,
diff --git a/packages/component-wizard/src/redux/conversion.js b/packages/component-wizard/src/redux/conversion.js
index 7f8f205c5c2f595ec7c40fe562c7069c3872662e..a7d861b8e023658d50cd84b2c90d65503598eac3 100644
--- a/packages/component-wizard/src/redux/conversion.js
+++ b/packages/component-wizard/src/redux/conversion.js
@@ -19,7 +19,7 @@ const generateCustomId = () =>
     .toString()
     .slice(-7)
 
-export const isRevisionFlow = (state, collection, fragment) =>
+export const isRevisionFlow = (state, collection, fragment = {}) =>
   collection.fragments.length > 1 && !fragment.submitted
 
 /* actions */
@@ -75,6 +75,9 @@ export const createDraftSubmission = history => (dispatch, getState) => {
   })
 }
 
+export const submitManuscript = (collectionId, fragmentId) =>
+  create(`/collections/${collectionId}/fragments/${fragmentId}/submit`)
+
 export const createRevision = (
   collection,
   previousVersion,
diff --git a/packages/components-faraday/src/components/Dashboard/DashboardCard.js b/packages/components-faraday/src/components/Dashboard/DashboardCard.js
index f126eca8ac1d52f65f8912729a3a4da95e0caa9b..59638dda62cd0f0059f530d3a11105723c954d82 100644
--- a/packages/components-faraday/src/components/Dashboard/DashboardCard.js
+++ b/packages/components-faraday/src/components/Dashboard/DashboardCard.js
@@ -85,7 +85,9 @@ const DashboardCard = ({
                   <Icon>download</Icon>
                 </ClickableIcon>
               </ZipFiles>
-              {(!project.status || project.status === 'draft') && (
+              {(!project.status ||
+                project.status === 'draft' ||
+                !submittedDate) && (
                 <ActionButtons
                   data-test="button-resume-submission"
                   onClick={() =>
@@ -118,17 +120,19 @@ const DashboardCard = ({
               {manuscriptMeta}
             </ManuscriptType>
             {project.status && project.status !== 'draft' ? (
-              <Details
-                data-test="button-details"
-                onClick={() =>
-                  history.push(
-                    `/projects/${project.id}/versions/${version.id}/details`,
-                  )
-                }
-              >
-                Details
-                <Icon primary>chevron-right</Icon>
-              </Details>
+              submittedDate && (
+                <Details
+                  data-test="button-details"
+                  onClick={() =>
+                    history.push(
+                      `/projects/${project.id}/versions/${version.id}/details`,
+                    )
+                  }
+                >
+                  Details
+                  <Icon primary>chevron-right</Icon>
+                </Details>
+              )
             ) : (
               <DeleteManuscript
                 deleteProject={() => deleteProject(project)}
diff --git a/packages/components-faraday/src/components/Filters/importanceSort.js b/packages/components-faraday/src/components/Filters/importanceSort.js
index b86f37c80951a9a4ebbf89bb26ea03d78acb37ca..fd906879dcd0e8af3309ea28d24668984cad8d18 100644
--- a/packages/components-faraday/src/components/Filters/importanceSort.js
+++ b/packages/components-faraday/src/components/Filters/importanceSort.js
@@ -18,6 +18,10 @@ const sortFn = sortValue => (item1, item2) => {
   const item1Importance = utils.getCollectionImportance(statuses, item1)
   const item2Importance = utils.getCollectionImportance(statuses, item2)
 
+  if (item1Importance - item2Importance === 0) {
+    return item1.created - item2.created
+  }
+
   if (sortValue === SORT_VALUES.MORE_IMPORTANT) {
     return item2Importance - item1Importance
   }
diff --git a/packages/components-faraday/src/components/Filters/importanceSort.test.js b/packages/components-faraday/src/components/Filters/importanceSort.test.js
new file mode 100644
index 0000000000000000000000000000000000000000..b2c270dbbcdc40a45b9fb2f521714f8805c1bd29
--- /dev/null
+++ b/packages/components-faraday/src/components/Filters/importanceSort.test.js
@@ -0,0 +1,63 @@
+import fixturesService from 'pubsweet-component-fixture-service'
+
+import { importanceSort } from './'
+import { SORT_VALUES } from './importanceSort'
+
+const { sortFn } = importanceSort
+const { fixtures: { collections: { collection } } } = fixturesService
+
+describe('Importance sort', () => {
+  describe('Important items first', () => {
+    // the more important collection is already before the less important one
+    it('should return a negative value', () => {
+      const sortResult = sortFn(SORT_VALUES.MORE_IMPORTANT)(
+        { ...collection, status: 'pendingApproval' },
+        { ...collection, status: 'heAssigned' },
+      )
+      expect(sortResult).toBeLessThan(0)
+    })
+    // the more important collection is after a less important one
+    it('should return a positive value', () => {
+      const sortResult = sortFn(SORT_VALUES.MORE_IMPORTANT)(
+        { ...collection, status: 'heAssigned' },
+        { ...collection, status: 'pendingApproval' },
+      )
+      expect(sortResult).toBeGreaterThan(0)
+    })
+  })
+
+  describe('Less important items first', () => {
+    it('should return a positive value', () => {
+      const sortResult = sortFn(SORT_VALUES.LESS_IMPORTANT)(
+        { ...collection, status: 'pendingApproval' },
+        { ...collection, status: 'heAssigned' },
+      )
+      expect(sortResult).toBeGreaterThan(0)
+    })
+    it('should return a negative value', () => {
+      const sortResult = sortFn(SORT_VALUES.LESS_IMPORTANT)(
+        { ...collection, status: 'heAssigned' },
+        { ...collection, status: 'pendingApproval' },
+      )
+      expect(sortResult).toBeLessThan(0)
+    })
+  })
+
+  describe('Sort by date if both have the same', () => {
+    it('should place older item before newer item', () => {
+      const sortResult = sortFn(SORT_VALUES.LESS_IMPORTANT)(
+        { ...collection, status: 'heAssigned', created: Date.now() + 2000 },
+        { ...collection, status: 'heAssigned', created: Date.now() },
+      )
+      expect(sortResult).toBeGreaterThan(0)
+    })
+
+    it('should not move items', () => {
+      const sortResult = sortFn(SORT_VALUES.LESS_IMPORTANT)(
+        { ...collection, status: 'heAssigned', created: Date.now() },
+        { ...collection, status: 'heAssigned', created: Date.now() + 2000 },
+      )
+      expect(sortResult).toBeLessThan(0)
+    })
+  })
+})
diff --git a/packages/components-faraday/src/components/Filters/priorityFilter.js b/packages/components-faraday/src/components/Filters/priorityFilter.js
index 4222f85fd52fb9caa18b561bdfb8b9960c7b28da..47ffbc88cb6193ba43299838d7474ff58d6337bc 100644
--- a/packages/components-faraday/src/components/Filters/priorityFilter.js
+++ b/packages/components-faraday/src/components/Filters/priorityFilter.js
@@ -9,19 +9,26 @@ export const FILTER_VALUES = {
   ALL: 'all',
   NEEDS_ATTENTION: 'needsAttention',
   IN_PROGRESS: 'inProgress',
+  ARCHIVED: 'archived',
 }
 
 const options = [
   { label: 'All', value: FILTER_VALUES.ALL },
   { label: 'Needs Attention', value: FILTER_VALUES.NEEDS_ATTENTION },
   { label: 'In Progress', value: FILTER_VALUES.IN_PROGRESS },
+  { label: 'Archived', value: FILTER_VALUES.ARCHIVED },
 ]
 
+const archivedStatuses = ['withdrawn', 'accepted', 'rejected']
+
 const filterFn = (filterValue, { currentUser, userPermissions = [] }) => ({
   id = '',
   fragments = [],
   status = 'draft',
 }) => {
+  if (filterValue === FILTER_VALUES.ARCHIVED) {
+    return archivedStatuses.includes(status)
+  }
   const permission = userPermissions.find(
     ({ objectId }) => objectId === id || fragments.includes(objectId),
   )
@@ -30,7 +37,10 @@ const filterFn = (filterValue, { currentUser, userPermissions = [] }) => ({
     case FILTER_VALUES.NEEDS_ATTENTION:
       return get(statuses, `${status}.${userRole}.needsAttention`)
     case FILTER_VALUES.IN_PROGRESS:
-      return !get(statuses, `${status}.${userRole}.needsAttention`)
+      return (
+        !archivedStatuses.includes(status) &&
+        !get(statuses, `${status}.${userRole}.needsAttention`)
+      )
     default:
       return true
   }
diff --git a/packages/components-faraday/src/components/Filters/priorityFilter.test.js b/packages/components-faraday/src/components/Filters/priorityFilter.test.js
index ce0d9b6b0afc43dccb4174f5a7efc12717ef5046..ac2f07d2f7f5f4ffa937073fe3d96ea1bc6c88ec 100644
--- a/packages/components-faraday/src/components/Filters/priorityFilter.test.js
+++ b/packages/components-faraday/src/components/Filters/priorityFilter.test.js
@@ -123,6 +123,18 @@ describe('Priority filter function for reviewersInvited status', () => {
       expect(filterResult).toBeFalsy()
     })
   })
+
+  describe('ARCHIVED', () => {
+    it('should return falsy', () => {
+      const filterResult = filterFn(FILTER_VALUES.ARCHIVED, {
+        currentUser: users.admin,
+      })({
+        ...collection,
+        status: 'reviewersInvited',
+      })
+      expect(filterResult).toBeFalsy()
+    })
+  })
 })
 
 describe('Priority filter function for technicalChecks status', () => {
@@ -239,6 +251,18 @@ describe('Priority filter function for technicalChecks status', () => {
       expect(filterResult).toBeFalsy()
     })
   })
+
+  describe('ARCHIVED', () => {
+    it('should return falsy', () => {
+      const filterResult = filterFn(FILTER_VALUES.ARCHIVED, {
+        currentUser: users.admin,
+      })({
+        ...collection,
+        status: 'technicalChecks',
+      })
+      expect(filterResult).toBeFalsy()
+    })
+  })
 })
 
 describe('Priority filter function for pendingApproval status', () => {
@@ -355,4 +379,58 @@ describe('Priority filter function for pendingApproval status', () => {
       expect(filterResult).toBeFalsy()
     })
   })
+
+  describe('ARCHIVED', () => {
+    it('should return falsy', () => {
+      const filterResult = filterFn(FILTER_VALUES.ARCHIVED, {
+        currentUser: users.admin,
+      })({
+        ...collection,
+        status: 'pendingApproval',
+      })
+      expect(filterResult).toBeFalsy()
+    })
+  })
+})
+
+describe('Priority filter function for archived statuses', () => {
+  it('should show rejected manuscripts', () => {
+    const filterResult = filterFn(FILTER_VALUES.ARCHIVED, {
+      currentUser: users.admin,
+    })({
+      ...collection,
+      status: 'rejected',
+    })
+    expect(filterResult).toBeTruthy()
+  })
+
+  it('should show withdrawn manuscripts', () => {
+    const filterResult = filterFn(FILTER_VALUES.ARCHIVED, {
+      currentUser: users.admin,
+    })({
+      ...collection,
+      status: 'withdrawn',
+    })
+    expect(filterResult).toBeTruthy()
+  })
+
+  it('should show accepted manuscripts', () => {
+    const filterResult = filterFn(FILTER_VALUES.ARCHIVED, {
+      currentUser: users.admin,
+    })({
+      ...collection,
+      status: 'accepted',
+    })
+    expect(filterResult).toBeTruthy()
+  })
+
+  it('should not show pendingApproval manuscripts', () => {
+    const filterResult = filterFn(FILTER_VALUES.ARCHIVED, {
+      currentUser: users.admin,
+    })({
+      ...collection,
+      status: 'pendingApproval',
+    })
+    expect(filterResult).toBeFalsy()
+  })
 })
diff --git a/packages/xpub-faraday/config/authsome-helpers.js b/packages/xpub-faraday/config/authsome-helpers.js
index 8b5a135a30aa8f7bc660d518664db6b32001017a..56f1495a32349c9bafda65a920dab6b9f5560305 100644
--- a/packages/xpub-faraday/config/authsome-helpers.js
+++ b/packages/xpub-faraday/config/authsome-helpers.js
@@ -126,12 +126,15 @@ const hasFragmentInDraft = async ({ object, Fragment }) => {
   return isInDraft(fragment)
 }
 
-const filterAuthorRecommendationData = recommendation => {
-  const { comments } = recommendation
-  return {
-    ...recommendation,
-    comments: comments ? comments.filter(c => c.public) : [],
+const filterAuthorRecommendations = (recommendations, status) => {
+  const canViewRecommendations = authorAllowedStatuses.includes(status)
+  if (canViewRecommendations) {
+    return recommendations.map(r => ({
+      ...r,
+      comments: r.comments ? r.comments.filter(c => c.public) : [],
+    }))
   }
+  return []
 }
 
 const stripeCollectionByRole = (coll = {}, role = '') => {
@@ -139,26 +142,32 @@ const stripeCollectionByRole = (coll = {}, role = '') => {
     const { handlingEditor } = coll
 
     if (!authorAllowedStatuses.includes(coll.status)) {
-      coll = {
+      return {
         ...coll,
-        handlingEditor: handlingEditor && {
-          ...omit(handlingEditor, keysToOmit),
-          name: 'Assigned',
-        },
+        handlingEditor: handlingEditor &&
+          handlingEditor.isAccepted && {
+            ...omit(handlingEditor, keysToOmit),
+            name: 'Assigned',
+          },
       }
     }
   }
   return coll
 }
 
-const stripeFragmentByRole = (fragment = {}, role = '', user = {}) => {
+const stripeFragmentByRole = ({
+  fragment = {},
+  role = '',
+  status = 'draft',
+  user = {},
+}) => {
   const { recommendations, files, authors } = fragment
   switch (role) {
     case 'author':
       return {
         ...fragment,
         recommendations: recommendations
-          ? recommendations.map(filterAuthorRecommendationData)
+          ? filterAuthorRecommendations(recommendations, status)
           : [],
       }
     case 'reviewer':
diff --git a/packages/xpub-faraday/config/authsome-mode.js b/packages/xpub-faraday/config/authsome-mode.js
index 2aada0e12aef4d742f83a5847ae150a6a58079fa..9b444f9705c21ca314235e2ed7757d965e4e2038 100644
--- a/packages/xpub-faraday/config/authsome-mode.js
+++ b/packages/xpub-faraday/config/authsome-mode.js
@@ -117,8 +117,8 @@ async function applyAuthenticatedUserPolicy(user, operation, object, context) {
     }
 
     if (get(object, 'type') === 'fragment') {
-      if (helpers.isInDraft(object) && !helpers.isOwner({ user, object })) {
-        return false
+      if (helpers.isInDraft(object)) {
+        return helpers.isOwner({ user, object })
       }
 
       const userPermissions = await helpers.getUserPermissions({
@@ -132,9 +132,17 @@ async function applyAuthenticatedUserPolicy(user, operation, object, context) {
 
       if (!permission) return false
 
+      const collectionId = get(object, 'collectionId')
+      const { status } = await context.models.Collection.find(collectionId)
+
       return {
         filter: fragment =>
-          helpers.stripeFragmentByRole(fragment, permission.role, user),
+          helpers.stripeFragmentByRole({
+            fragment,
+            role: permission.role,
+            status,
+            user,
+          }),
       }
     }
 
diff --git a/packages/xpub-faraday/tests/authsome-helpers.test.js b/packages/xpub-faraday/tests/authsome-helpers.test.js
index 8999b892b2b80a1ef5b92ffa35f8f823d84f9580..cdc942b01bdb01d6b6965c6b7b0c5983d9a962db 100644
--- a/packages/xpub-faraday/tests/authsome-helpers.test.js
+++ b/packages/xpub-faraday/tests/authsome-helpers.test.js
@@ -14,13 +14,17 @@ describe('Authsome Helpers', () => {
   })
   it('stripeFragment - should return fragment', () => {
     const { fragment } = testFixtures.fragments
-    const result = ah.stripeFragmentByRole(fragment)
+    const result = ah.stripeFragmentByRole({ fragment })
     expect(result).toBeTruthy()
   })
 
-  it('stripeCollection - author should not see HE name before recommendation made', () => {
+  it('stripeCollection - author should not see accepted HE name before recommendation made', () => {
     const { collection } = testFixtures.collections
     collection.status = 'underReview'
+    collection.handlingEditor = {
+      ...collection.handlingEditor,
+      isAccepted: true,
+    }
 
     const result = ah.stripeCollectionByRole(collection, 'author')
     const { handlingEditor = {} } = result
@@ -29,6 +33,21 @@ describe('Authsome Helpers', () => {
     expect(handlingEditor.name).toEqual('Assigned')
   })
 
+  it('stripeCollection - author should not see Assigned until HE accepted ', () => {
+    const { collection } = testFixtures.collections
+    collection.status = 'underReview'
+    collection.handlingEditor = {
+      ...collection.handlingEditor,
+      isAccepted: false,
+    }
+
+    const result = ah.stripeCollectionByRole(collection, 'author')
+    const { handlingEditor = {} } = result
+
+    expect(handlingEditor).toBeFalsy()
+    expect(handlingEditor.name).not.toEqual('Assigned')
+  })
+
   it('stripeCollection - author should see HE name after recommendation made', () => {
     const { collection } = testFixtures.collections
     collection.status = 'revisionRequested'
@@ -69,13 +88,13 @@ describe('Authsome Helpers', () => {
 
   it('stripeFragment - reviewer should not see authors email', () => {
     const { fragment } = testFixtures.fragments
-    const result = ah.stripeFragmentByRole(fragment, 'reviewer')
+    const result = ah.stripeFragmentByRole({ fragment, role: 'reviewer' })
     const { authors = [] } = result
     expect(authors[0].email).toBeFalsy()
   })
   it('stripeFragment - other roles than reviewer should see authors emails', () => {
     const { fragment } = testFixtures.fragments
-    const result = ah.stripeFragmentByRole(fragment, 'author')
+    const result = ah.stripeFragmentByRole({ fragment, role: 'author' })
     const { authors = [] } = result
 
     expect(authors[0].email).toBeTruthy()
@@ -83,18 +102,41 @@ describe('Authsome Helpers', () => {
 
   it('stripeFragment - reviewer should not see cover letter', () => {
     const { fragment } = testFixtures.fragments
-    const result = ah.stripeFragmentByRole(fragment, 'reviewer')
+    const result = ah.stripeFragmentByRole({ fragment, role: 'reviewer' })
     const { files = {} } = result
     expect(files.coverLetter).toBeFalsy()
   })
   it('stripeFragment - reviewer should not see others reviews', () => {
     const { fragment } = testFixtures.fragments
-    const result = ah.stripeFragmentByRole(fragment, 'reviewer')
+    const result = ah.stripeFragmentByRole({ fragment, role: 'reviewer' })
     const { recommendations } = result
     expect(recommendations).toEqual([])
   })
 
-  it('stripeFragment - author should not see private recommendations comments', () => {
+  it('stripeFragment - author should not see recommendations if a decision has not been made', () => {
+    const { fragment } = testFixtures.fragments
+    fragment.recommendations = [
+      {
+        comments: [
+          {
+            content: 'private',
+            public: false,
+          },
+          {
+            content: 'public',
+            public: true,
+          },
+        ],
+      },
+    ]
+    const { recommendations } = ah.stripeFragmentByRole({
+      fragment,
+      role: 'author',
+      status: 'underReview',
+    })
+    expect(recommendations).toHaveLength(0)
+  })
+  it('stripeFragment - author should see reviews only if recommendation has been made and only public ones', () => {
     const { fragment } = testFixtures.fragments
     fragment.recommendations = [
       {
@@ -110,8 +152,12 @@ describe('Authsome Helpers', () => {
         ],
       },
     ]
-    const result = ah.stripeFragmentByRole(fragment, 'author')
-    const privateComments = get(result, 'recommendations[0].comments')
-    expect(privateComments).toHaveLength(1)
+    const result = ah.stripeFragmentByRole({
+      fragment,
+      role: 'author',
+      status: 'revisionRequested',
+    })
+    const publicComments = get(result, 'recommendations[0].comments')
+    expect(publicComments).toHaveLength(1)
   })
 })