diff --git a/packages/component-faraday-selectors/src/index.js b/packages/component-faraday-selectors/src/index.js
index 67590e4c1b0a913ef22aeed2ea008c3301e6b1f9..034488170d35136918321280ebb55b14a349c7ec 100644
--- a/packages/component-faraday-selectors/src/index.js
+++ b/packages/component-faraday-selectors/src/index.js
@@ -115,11 +115,9 @@ export const canEICViewEditorialComments = (state, collection = {}) => {
 }
 
 const canReviewerViewEditorialCommentsStatuses = [
-  'rejected',
-  'accepted',
-  'inQA',
   'underReview',
   'reviewCompleted',
+  'pendingApproval',
   'revisionRequested',
 ]
 export const canReviewerViewEditorialComments = (
@@ -127,14 +125,15 @@ export const canReviewerViewEditorialComments = (
   collection = {},
   fragment = {},
 ) => {
+  const status = get(collection, 'status', 'draft')
   const isReviewer = currentUserIsReviewer(state, get(fragment, 'id', ''))
+  const hasDecision = ['rejected', 'accepted', 'inQA'].includes(status)
   const hasRevision = get(fragment, 'revision', false)
-  const hasRecommendation = get(fragment, 'recommendations', false)
-  const status = get(collection, 'status', 'draft')
   return (
     isReviewer &&
-    (hasRevision || hasRecommendation) &&
-    canReviewerViewEditorialCommentsStatuses.includes(status)
+    (hasDecision ||
+      (hasRevision &&
+        canReviewerViewEditorialCommentsStatuses.includes(status)))
   )
 }
 const cannotAuthorViewEditorialCommentsStatuses = [
@@ -430,3 +429,22 @@ export const canSubmitRevision = (state, fragment = {}) => {
   return get(fragment, 'revision', null) && fragmentAuthors.includes(userId)
 }
 // #endregion
+
+export const getVersionOptions = (state, collection = {}) => {
+  const fragments = get(state, 'fragments', {})
+
+  return chain(collection)
+    .get('fragments', [])
+    .reduce(
+      (acc, el) => [
+        ...acc,
+        {
+          value: el,
+          label: `Version ${get(fragments, `${el}.version`)}`,
+        },
+      ],
+      [],
+    )
+    .reverse()
+    .value()
+}
diff --git a/packages/component-faraday-ui/src/manuscriptDetails/ManuscriptDetailsTop.js b/packages/component-faraday-ui/src/manuscriptDetails/ManuscriptDetailsTop.js
index 2564bf721c3db9d5cd719b699f1d18c57f319d5a..6a4c5dfb3a2d273cc235ae240e18c48561ff6fd4 100644
--- a/packages/component-faraday-ui/src/manuscriptDetails/ManuscriptDetailsTop.js
+++ b/packages/component-faraday-ui/src/manuscriptDetails/ManuscriptDetailsTop.js
@@ -16,6 +16,7 @@ import {
 
 const ManuscriptDetailsTop = ({
   history,
+  versions,
   goToEdit,
   getSignedUrl,
   goToTechnicalCheck,
@@ -78,6 +79,7 @@ const ManuscriptDetailsTop = ({
         collection={collection}
         fragment={fragment}
         history={history}
+        versions={versions}
       />
     </Item>
   </Row>
diff --git a/packages/component-faraday-ui/src/manuscriptDetails/ManuscriptVersion.js b/packages/component-faraday-ui/src/manuscriptDetails/ManuscriptVersion.js
index 76554162238745e57ab0475e77e6f8f9c61b78fd..2f7473750f267ef12771024e3480984dd06f82f9 100644
--- a/packages/component-faraday-ui/src/manuscriptDetails/ManuscriptVersion.js
+++ b/packages/component-faraday-ui/src/manuscriptDetails/ManuscriptVersion.js
@@ -1,38 +1,23 @@
 import React from 'react'
 import { get } from 'lodash'
 import { Menu } from '@pubsweet/ui'
-import { compose, withHandlers, withProps } from 'recompose'
 
 const ManuscriptVersion = ({
   history,
-  fragments,
+  versions,
   fragment = {},
   collection = {},
-  parseVersionOptions,
 }) =>
-  !!fragments.length && (
+  versions.length > 0 && (
     <Menu
       inline
       onChange={v =>
         history.push(`/projects/${collection.id}/versions/${v}/details`)
       }
-      options={parseVersionOptions(fragments)}
+      options={versions}
       placeholder="Please select"
       value={get(fragment, 'id')}
     />
   )
 
-export default compose(
-  withProps(({ collection = {} }) => ({
-    fragments: get(collection, 'fragments', []),
-  })),
-  withHandlers({
-    parseVersionOptions: ({ fragments }) => () =>
-      fragments
-        .map((f, index) => ({
-          value: f,
-          label: `Version ${index + 1}`,
-        }))
-        .reverse(),
-  }),
-)(ManuscriptVersion)
+export default ManuscriptVersion
diff --git a/packages/component-helper-service/src/services/Fragment.js b/packages/component-helper-service/src/services/Fragment.js
index db1ae899ea6226d5214c63326d693f9d31b4bb5d..174067efdfe0cbb7e7e7f627f5a8fd53884bd7f0 100644
--- a/packages/component-helper-service/src/services/Fragment.js
+++ b/packages/component-helper-service/src/services/Fragment.js
@@ -94,12 +94,9 @@ class Fragment {
     const { fragment: { invitations = [], recommendations = [] } } = this
     let filteredInvitations = isAccepted
       ? invitations.filter(
-          inv =>
-            inv.role === role &&
-            inv.hasAnswer === true &&
-            inv.isAccepted === true,
+          inv => inv.role === role && inv.hasAnswer && inv.isAccepted,
         )
-      : invitations.filter(inv => inv.role === role && inv.hasAnswer === false)
+      : invitations.filter(inv => inv.role === role && !inv.hasAnswer)
 
     if (type === 'submitted') {
       filteredInvitations = filteredInvitations.filter(inv =>
diff --git a/packages/component-manuscript-manager/src/routes/fragments/patch.js b/packages/component-manuscript-manager/src/routes/fragments/patch.js
index 09e3dbc8f106ff8414952801c8b722eb9e0d711b..f28b8cc0847abbbdaff894bc7f4337572a28877c 100644
--- a/packages/component-manuscript-manager/src/routes/fragments/patch.js
+++ b/packages/component-manuscript-manager/src/routes/fragments/patch.js
@@ -70,10 +70,7 @@ module.exports = models => async (req, res) => {
     fragment.save()
 
     if (heRecommendation.recommendation === 'major') {
-      const reviewerIds = newFragment.invitations.map(inv => {
-        const { userId } = inv
-        return userId
-      })
+      const reviewerIds = newFragment.invitations.map(inv => inv.userId)
 
       teamHelper.createTeam({
         role: 'reviewer',
diff --git a/packages/component-manuscript/src/components/ManuscriptLayout.js b/packages/component-manuscript/src/components/ManuscriptLayout.js
index 81d2be237da6cecd3d7c9611c311455b1e6d31b5..c3e8683307b2b599e99a166cef78f693f2b78ddb 100644
--- a/packages/component-manuscript/src/components/ManuscriptLayout.js
+++ b/packages/component-manuscript/src/components/ManuscriptLayout.js
@@ -64,6 +64,7 @@ const ManuscriptLayout = ({
   inviteReviewer,
   recommendationHandler,
   inviteHandlingEditor,
+  versions,
 }) => (
   <Root pb={30}>
     {!isEmpty(collection) && !isEmpty(fragment) ? (
@@ -74,6 +75,7 @@ const ManuscriptLayout = ({
           fragment={fragment}
           getSignedUrl={getSignedUrl}
           history={history}
+          versions={versions}
         />
         <ManuscriptHeader
           collection={collection}
@@ -86,6 +88,7 @@ const ManuscriptLayout = ({
           journal={journal}
           resendInvitation={inviteHandlingEditor.assignHE}
           revokeInvitation={inviteHandlingEditor.revokeHE}
+          versions={versions}
         />
 
         <ManuscriptMetadata
diff --git a/packages/component-manuscript/src/components/ManuscriptPage.js b/packages/component-manuscript/src/components/ManuscriptPage.js
index b5cf99de5920698973d35e857737db2e6cb0432c..0b77b64cdfeaecaa7e71b9089627d0aade3a2519 100644
--- a/packages/component-manuscript/src/components/ManuscriptPage.js
+++ b/packages/component-manuscript/src/components/ManuscriptPage.js
@@ -54,6 +54,7 @@ import {
   canAuthorViewEditorialComments,
   getFragmentReviewerRecommendations,
   getInvitationsWithReviewersForFragment,
+  getVersionOptions,
 } from 'pubsweet-component-faraday-selectors'
 import {
   handleError,
@@ -205,6 +206,7 @@ export default compose(
         state,
         get(fragment, 'id', ''),
       ),
+      versions: getVersionOptions(state, collection),
     }),
   ),
   ConnectPage(({ currentUser }) => {
diff --git a/packages/component-manuscript/src/handleRecommendation/withHandleRecommendation.js b/packages/component-manuscript/src/handleRecommendation/withHandleRecommendation.js
index 020d7e45d83fb81dc3741476545ef7704f91affb..19fb97c4dfebe3f607e57735c735ec778b62b69e 100644
--- a/packages/component-manuscript/src/handleRecommendation/withHandleRecommendation.js
+++ b/packages/component-manuscript/src/handleRecommendation/withHandleRecommendation.js
@@ -52,7 +52,7 @@ export default compose(
     },
   }),
   withProps(props => ({
-    recommendationHandle: {
+    recommendationHandler: {
       ...pick(props, ['createRecommendation', 'onEditorialRecommendation']),
     },
   })),
diff --git a/packages/xpub-faraday/config/authsome-helpers.js b/packages/xpub-faraday/config/authsome-helpers.js
index 1f885f1b2d421e5fd996f2c37de90f2ba8aa659d..c92571ecc8808a78710f8631b5fff43629b0d60b 100644
--- a/packages/xpub-faraday/config/authsome-helpers.js
+++ b/packages/xpub-faraday/config/authsome-helpers.js
@@ -247,7 +247,10 @@ const getCollections = async ({ user, models }) => {
         })
       }
 
-      return { ...collection, visibleStatus }
+      return {
+        ...collection,
+        visibleStatus,
+      }
     }),
   )).filter(Boolean)
 }
@@ -259,7 +262,9 @@ async function updateReviewerVisibleStatusByInvitation({
 }) {
   const fragmentId = last(collection.fragments)
   const fragment = await FragmentModel.find(fragmentId)
-  const invitation = fragment.invitations.find(inv => inv.userId === user.id)
+  const invitation = get(fragment, 'invitations', []).find(
+    inv => inv.userId === user.id,
+  )
   const recommendationDone =
     fragment.recommendations &&
     fragment.recommendations.some(
@@ -273,7 +278,8 @@ async function updateReviewerVisibleStatusByInvitation({
     return get(statuses, `${collection.status}.reviewer.label`)
   }
 
-  return invitation.hasAnswer && invitation.isAccepted
+  return get(invitation, 'hasAnswer', false) &&
+    get(invitation, 'isAccepted', false)
     ? get(statuses, `underReview.reviewer.label`)
     : get(statuses, `reviewersInvited.reviewer.label`)
 }
diff --git a/packages/xpub-faraday/config/authsome-mode.js b/packages/xpub-faraday/config/authsome-mode.js
index 7b269f3855277ae6aea96a9afca4043f647af6f2..2bb207ebd4264f3d3210d226bb0134e25e0b1bff 100644
--- a/packages/xpub-faraday/config/authsome-mode.js
+++ b/packages/xpub-faraday/config/authsome-mode.js
@@ -73,6 +73,12 @@ async function applyAuthenticatedUserPolicy(user, operation, object, context) {
             Team: context.models.Team,
           })
 
+          const fragmentPermissions = userPermissions
+            .filter(
+              up => up.objectType === 'fragment' && up.role === 'reviewer',
+            )
+            .map(up => up.objectId)
+
           // if (collection.owners.map(o => o.id).includes(user.id)) {
           //   return collection
           // }
@@ -98,6 +104,12 @@ async function applyAuthenticatedUserPolicy(user, operation, object, context) {
 
           return {
             ...collection,
+            fragments:
+              role !== 'reviewer'
+                ? collection.fragments
+                : collection.fragments.filter(fragId =>
+                    fragmentPermissions.includes(fragId),
+                  ),
             visibleStatus,
           }
         },