diff --git a/packages/component-faraday-selectors/src/index.js b/packages/component-faraday-selectors/src/index.js
index 728b2e28a08eb1572980a1879a27e4a6e5eb98f5..cd9e312e08bc3a6877b828087413e57a0b4897f6 100644
--- a/packages/component-faraday-selectors/src/index.js
+++ b/packages/component-faraday-selectors/src/index.js
@@ -67,7 +67,7 @@ export const canViewReviewersDetails = (state, collection = {}) => {
   return canViewReports(state, get(collection, 'id', ''))
 }
 
-const authorCanViewReportsDetailsStatuses = [
+const authorAndReviewersCanViewReportsDetailsStatuses = [
   'revisionRequested',
   'pendingApproval',
   'rejected',
@@ -83,12 +83,28 @@ export const authorCanViewReportsDetails = (
 ) => {
   const isAuthor = currentUserIsAuthor(state, fragmentId)
   return (
-    authorCanViewReportsDetailsStatuses.includes(
+    authorAndReviewersCanViewReportsDetailsStatuses.includes(
       get(collection, 'status', 'draft'),
     ) && isAuthor
   )
 }
 
+export const reviewersCanViewReviewerReports = (
+  state,
+  collection = {},
+  fragmentId,
+) => {
+  const isReviewer = currentUserIsReviewer(state, fragmentId)
+  const reviewerReports = getFragmentReviewerRecommendations(state, fragmentId)
+  return (
+    isReviewer &&
+    authorAndReviewersCanViewReportsDetailsStatuses.includes(
+      get(collection, 'status', 'draft'),
+    ) &&
+    reviewerReports.length > 0
+  )
+}
+
 const canHeViewEditorialCommentsStatuses = [
   'revisionRequested',
   'rejected',
diff --git a/packages/component-manuscript/src/components/ManuscriptLayout.js b/packages/component-manuscript/src/components/ManuscriptLayout.js
index 4953fa278e884980a5bfe28168c62a6a0e97a455..f292701d615da22603c9714813840a820bcf6a0b 100644
--- a/packages/component-manuscript/src/components/ManuscriptLayout.js
+++ b/packages/component-manuscript/src/components/ManuscriptLayout.js
@@ -17,9 +17,9 @@ import {
   ResponseToRevisionRequest,
 } from 'pubsweet-component-faraday-ui'
 
-import ReviewerReportCard from './ReviewReportCard'
 import ReviewerReportForm from './ReviewerReportForm'
 import EditorialCommentCard from './EditorialCommentCard'
+import ReviewerReports from './ReviewerReports'
 
 const messagesLabel = {
   'return-to-handling-editor': 'Comments for Handling Editor',
@@ -128,11 +128,17 @@ const ManuscriptLayout = ({
           />
         )}
 
-        {submittedOwnRecommendation && (
-          <ReviewerReportCard
+        {get(
+          currentUser,
+          'permissions.reviewersCanViewReviewerReports',
+          false,
+        ) && (
+          <ReviewerReports
+            currentUser={currentUser}
             getSignedUrl={getSignedUrl}
+            isLatestVersion={isLatestVersion}
             journal={journal}
-            report={submittedOwnRecommendation}
+            reports={reviewerRecommendations}
             token={get(currentUser, 'token')}
           />
         )}
diff --git a/packages/component-manuscript/src/components/ManuscriptPage.js b/packages/component-manuscript/src/components/ManuscriptPage.js
index 89b5dadefcc611d56684ad1b442b326f2f3870ab..0ba16b98be436fbadfcd69b966dcf019714821e2 100644
--- a/packages/component-manuscript/src/components/ManuscriptPage.js
+++ b/packages/component-manuscript/src/components/ManuscriptPage.js
@@ -57,6 +57,7 @@ import {
   getOwnPendingRecommendation,
   getOwnSubmittedRecommendation,
   canAuthorViewEditorialComments,
+  reviewersCanViewReviewerReports,
   canHEMakeRecommendationToPublish,
   getFragmentReviewerRecommendations,
   getInvitationsWithReviewersForFragment,
@@ -195,6 +196,11 @@ export default compose(
             collection,
             get(fragment, 'id', ''),
           ),
+          reviewersCanViewReviewerReports: reviewersCanViewReviewerReports(
+            state,
+            collection,
+            get(fragment, 'id', ''),
+          ),
           canOverrideTechChecks: canOverrideTechnicalChecks(state, collection),
           canAuthorViewEditorialComments: canAuthorViewEditorialComments(
             state,
diff --git a/packages/component-manuscript/src/components/ReviewerReports.js b/packages/component-manuscript/src/components/ReviewerReports.js
new file mode 100644
index 0000000000000000000000000000000000000000..a9b33e8eb9be49743cdb95b770c28bdb14de54cf
--- /dev/null
+++ b/packages/component-manuscript/src/components/ReviewerReports.js
@@ -0,0 +1,50 @@
+import React from 'react'
+import {
+  ReviewerReport,
+  ContextualBox,
+  withFilePreview,
+  withFileDownload,
+  Text,
+  Row,
+} from 'pubsweet-component-faraday-ui'
+
+const SubmittedReports = ({ reports }) => (
+  <Row fitContent justify="flex-end">
+    <Text customId mr={1 / 2}>
+      {reports}
+    </Text>
+    <Text mr={1 / 2} pr={1 / 2} secondary>
+      {' '}
+      submitted
+    </Text>
+  </Row>
+)
+
+const ReviewReportCard = ({
+  journal,
+  reports,
+  previewFile,
+  downloadFile,
+  isLatestVersion,
+}) => (
+  <ContextualBox
+    label={isLatestVersion ? 'Your Report' : 'Reviewer Reports'}
+    mb={2}
+    rightChildren={<SubmittedReports reports={reports.length} />}
+    startExpanded
+  >
+    {reports.map((report, index) => (
+      <ReviewerReport
+        journal={journal}
+        key={report.id}
+        onDownload={downloadFile}
+        onPreview={previewFile}
+        report={report}
+        reviewerIndex={index + 1}
+        showOwner
+      />
+    ))}
+  </ContextualBox>
+)
+
+export default withFileDownload(withFilePreview(ReviewReportCard))
diff --git a/packages/xpub-faraday/config/authsome-helpers.js b/packages/xpub-faraday/config/authsome-helpers.js
index 08e583c721fa6103de2f4729e0f2e64a348567a7..1dc69faf314e2ee068343ef50fae8681f614a2f1 100644
--- a/packages/xpub-faraday/config/authsome-helpers.js
+++ b/packages/xpub-faraday/config/authsome-helpers.js
@@ -72,6 +72,24 @@ const filterAuthorRecommendations = (recommendations, status, isLast) => {
   return []
 }
 
+const filterReviewerRecommendations = (recommendations, user) => {
+  const ownRecommendationFromCurrentFragment = recommendations.find(
+    r => r.userId === user.id,
+  )
+  if (ownRecommendationFromCurrentFragment)
+    return recommendations
+      .filter(
+        r => r.submittedOn || r.recommendationType === 'editorRecommendation',
+      )
+      .map(
+        r =>
+          r.userId !== ownRecommendationFromCurrentFragment.userId
+            ? { ...r, comments: r.comments.filter(c => c.public === true) }
+            : { ...r },
+      )
+  return []
+}
+
 const stripeCollectionByRole = ({ collection = {}, role = '' }) => {
   if (role === 'author') {
     const { handlingEditor } = collection
@@ -106,23 +124,32 @@ const stripeFragmentByRole = ({
           : [],
       }
     case 'reviewer':
-      return {
-        ...fragment,
-        files: omit(files, ['coverLetter']),
-        authors: authors.map(a => omit(a, ['email'])),
-        recommendations: recommendations
-          ? recommendations
-              .filter(
-                r =>
-                  r.userId === user.id ||
-                  r.recommendationType === 'editorRecommendation',
-              )
-              .map(r => ({
-                ...r,
-                comments: r.comments.filter(c => c.public === true),
-              }))
-          : [],
-      }
+      return isLast
+        ? {
+            ...fragment,
+            files: omit(files, ['coverLetter']),
+            authors: authors.map(a => omit(a, ['email'])),
+            recommendations: recommendations
+              ? recommendations
+                  .filter(
+                    r =>
+                      r.userId === user.id ||
+                      r.recommendationType === 'editorRecommendation',
+                  )
+                  .map(r => ({
+                    ...r,
+                    comments: r.comments.filter(c => c.public === true),
+                  }))
+              : [],
+          }
+        : {
+            ...fragment,
+            files: omit(files, ['coverLetter']),
+            authors: authors.map(a => omit(a, ['email'])),
+            recommendations: recommendations
+              ? filterReviewerRecommendations(recommendations, user)
+              : [],
+          }
     case 'handlingEditor':
       return {
         ...fragment,