diff --git a/packages/component-manuscript/src/components/Files.js b/packages/component-manuscript/src/components/Files.js
index 100f0563445db1c8838b207f0c91cf81f1893fa0..7311a7801a3f268634a29c122bf7e5b9c5405bfb 100644
--- a/packages/component-manuscript/src/components/Files.js
+++ b/packages/component-manuscript/src/components/Files.js
@@ -5,8 +5,6 @@ import { th } from '@pubsweet/ui'
 import { FileItem } from 'pubsweet-components-faraday/src/components/Files'
 
 const Files = ({
-  previewFile,
-  downloadFile,
   files: { manuscripts = [], coverLetter = [], supplementary = [] },
 }) => (
   <Root>
@@ -17,14 +15,7 @@ const Files = ({
           <div />
         </Header>
         {manuscripts.map(file => (
-          <FileItem
-            compact
-            id={file.id}
-            key={file.id}
-            {...file}
-            downloadFile={downloadFile}
-            previewFile={previewFile}
-          />
+          <FileItem compact id={file.id} key={file.id} {...file} />
         ))}
       </Fragment>
     )}
@@ -35,14 +26,7 @@ const Files = ({
           <div />
         </Header>
         {supplementary.map(file => (
-          <FileItem
-            compact
-            id={file.id}
-            key={file.id}
-            {...file}
-            downloadFile={downloadFile}
-            previewFile={previewFile}
-          />
+          <FileItem compact id={file.id} key={file.id} {...file} />
         ))}
       </Fragment>
     )}
@@ -53,14 +37,7 @@ const Files = ({
           <div />
         </Header>
         {coverLetter.map(file => (
-          <FileItem
-            compact
-            id={file.id}
-            key={file.id}
-            {...file}
-            downloadFile={downloadFile}
-            previewFile={previewFile}
-          />
+          <FileItem compact id={file.id} key={file.id} {...file} />
         ))}
       </Fragment>
     )}
diff --git a/packages/component-manuscript/src/components/ManuscriptDetails.js b/packages/component-manuscript/src/components/ManuscriptDetails.js
index b6e26a84fddc6d5ad282c2355f0cd5246caa61bd..b439f1efd5a769dffb52a8082214ac53823f0df3 100644
--- a/packages/component-manuscript/src/components/ManuscriptDetails.js
+++ b/packages/component-manuscript/src/components/ManuscriptDetails.js
@@ -7,8 +7,6 @@ import { Authors, Files } from './'
 import Expandable from '../molecules/Expandable'
 
 const ManuscriptDetails = ({
-  previewFile,
-  downloadFile,
   collection: { authors = [] },
   fragment: { conflicts = {}, files = {}, metadata: { abstract = '' } },
 }) => (
@@ -31,11 +29,7 @@ const ManuscriptDetails = ({
       )}
       {!isEmpty(files) && (
         <Expandable label="FILES">
-          <Files
-            downloadFile={downloadFile}
-            files={files}
-            previewFile={previewFile}
-          />
+          <Files files={files} />
         </Expandable>
       )}
     </Expandable>
diff --git a/packages/component-manuscript/src/components/ManuscriptLayout.js b/packages/component-manuscript/src/components/ManuscriptLayout.js
index 811a048eb410ac16e12fdc3d0ccefef11efd675a..312a61ad8d4d862baf927c2b0abee1405d8dc623 100644
--- a/packages/component-manuscript/src/components/ManuscriptLayout.js
+++ b/packages/component-manuscript/src/components/ManuscriptLayout.js
@@ -20,16 +20,14 @@ import {
 } from './'
 
 const ManuscriptLayout = ({
-  currentUser,
-  currentUserIs,
-  editorInChief,
-  updateManuscript,
   project,
   version,
   journal,
-  previewFile,
-  downloadFile,
   history,
+  currentUser,
+  currentUserIs,
+  editorInChief,
+  updateManuscript,
 }) => (
   <Root>
     <Container flex={3}>
@@ -46,12 +44,7 @@ const ManuscriptLayout = ({
         </RightDetails>
       </Header>
       <ManuscriptHeader journal={journal} project={project} version={version} />
-      <ManuscriptDetails
-        collection={project}
-        downloadFile={downloadFile}
-        fragment={version}
-        previewFile={previewFile}
-      />
+      <ManuscriptDetails collection={project} fragment={version} />
       <ReviewsAndReports
         currentUserIs={currentUserIs}
         project={project}
diff --git a/packages/component-manuscript/src/components/ManuscriptPage.js b/packages/component-manuscript/src/components/ManuscriptPage.js
index 7b130779b4b168398c47d0545b740975ef8cb53d..61760e51a03f6a48854781d3dd509e0a2201ebea 100644
--- a/packages/component-manuscript/src/components/ManuscriptPage.js
+++ b/packages/component-manuscript/src/components/ManuscriptPage.js
@@ -64,13 +64,6 @@ export default compose(
         id: version.id,
         ...data,
       }),
-    previewFile: ({ getSignedUrl }) => fileId => e => {
-      e.preventDefault()
-      getSignedUrl(fileId).then(({ signedUrl }) => {
-        const windowReference = window.open()
-        windowReference.location = signedUrl
-      })
-    },
     downloadFile: ({ getSignedUrl }) => (fileId, fileName) => e => {
       e.preventDefault()
       getSignedUrl(fileId).then(({ signedUrl }) => {
diff --git a/packages/component-manuscript/src/components/ManuscriptVersion.js b/packages/component-manuscript/src/components/ManuscriptVersion.js
index ddad835f7ccda0f60b9f15923105b039f3151d40..2ecebdcd8a4a4804f89d632273270a9233a4e353 100644
--- a/packages/component-manuscript/src/components/ManuscriptVersion.js
+++ b/packages/component-manuscript/src/components/ManuscriptVersion.js
@@ -8,7 +8,7 @@ import { withRouter } from 'react-router-dom'
 
 import { parseVersionOptions } from './utils'
 
-const ManuscriptVersion = ({ project, fragments, history, match }) => (
+const ManuscriptVersion = ({ project, fragments = [], history, match }) => (
   <Menu
     inline
     onChange={v =>
diff --git a/packages/component-manuscript/src/components/ReviewerReportForm.js b/packages/component-manuscript/src/components/ReviewerReportForm.js
index 3f8fe374cb496a6363c9657bc576a1a51f2ec3ad..547c85f9fb2ddb6ac37f8a41a31ca8797d25363f 100644
--- a/packages/component-manuscript/src/components/ReviewerReportForm.js
+++ b/packages/component-manuscript/src/components/ReviewerReportForm.js
@@ -1,8 +1,18 @@
 import React, { Fragment } from 'react'
+import { isEmpty } from 'lodash'
 import { connect } from 'react-redux'
 import { required } from 'xpub-validators'
+import { withJournal } from 'xpub-journal'
 import styled, { css } from 'styled-components'
-import { th, Menu, ValidatedField, Icon, Button, ErrorText } from '@pubsweet/ui'
+import {
+  th,
+  Menu,
+  ValidatedField,
+  Icon,
+  Button,
+  ErrorText,
+  Spinner,
+} from '@pubsweet/ui'
 import { compose, withHandlers, withProps } from 'recompose'
 import {
   reduxForm,
@@ -16,6 +26,8 @@ import {
   uploadFile,
   deleteFile,
   getSignedUrl,
+  getRequestStatus,
+  getFileError,
 } from 'pubsweet-components-faraday/src/redux/files'
 import {
   FileItem,
@@ -41,35 +53,19 @@ import {
 
 const guidelinesLink =
   'https://about.hindawi.com/authors/peer-review-at-hindawi/'
-const options = [
-  {
-    value: 'publish',
-    label: 'Publish unaltered',
-  },
-  {
-    value: 'major',
-    label: 'Consider after major revision',
-  },
-  {
-    value: 'minor',
-    label: 'Consider after major revision',
-  },
-  {
-    value: 'reject',
-    label: 'Reject',
-  },
-]
 
 const ReviewerReportForm = ({
-  error,
+  addFile,
+  removeFile,
+  review = {},
+  errorRequest,
   isSubmitting,
   changeField,
   handleSubmit,
   formValues = {},
-  review = {},
-  addFile,
-  removeFile,
-  previewFile,
+  fileFetching,
+  fileError,
+  journal: { recommendations },
 }) => (
   <Root>
     <Row>
@@ -85,7 +81,7 @@ const ReviewerReportForm = ({
             {...input}
             inline
             onChange={v => changeField('recommendation', v)}
-            options={options}
+            options={recommendations}
             placeholder="Select"
           />
         )}
@@ -96,12 +92,16 @@ const ReviewerReportForm = ({
     <Spacing />
     <Row left>
       <Label>Report</Label>
-      <FilePicker
-        allowedFileExtensions={['pdf', 'doc', 'docx']}
-        onUpload={addFile}
-      >
-        <ActionText left={12}>Upload file</ActionText>
-      </FilePicker>
+      {!fileFetching.review ? (
+        <FilePicker
+          allowedFileExtensions={['pdf', 'doc', 'docx']}
+          onUpload={addFile}
+        >
+          <ActionText left={12}>Upload file</ActionText>
+        </FilePicker>
+      ) : (
+        <Spinner size={2} />
+      )}
     </Row>
     <Row>
       <FullWidth>
@@ -115,20 +115,18 @@ const ReviewerReportForm = ({
             />
           )}
           name="public"
-          validate={[required]}
+          validate={isEmpty(formValues.files) ? [required] : []}
         />
       </FullWidth>
     </Row>
     {formValues.files && (
-      <Row>
+      <Row left>
         {formValues.files.map(file => (
           <FileItem
             compact
             id={file.id}
             key={file.id}
             {...file}
-            downloadFile={previewFile}
-            previewFile={previewFile}
             removeFile={removeFile}
           />
         ))}
@@ -173,9 +171,14 @@ const ReviewerReportForm = ({
     )}
 
     <Spacing />
-    {error && (
+    {fileError && (
       <Row>
-        <ErrorText>{error}</ErrorText>
+        <ErrorText>{fileError}</ErrorText>
+      </Row>
+    )}
+    {errorRequest && (
+      <Row>
+        <ErrorText>{errorRequest}</ErrorText>
       </Row>
     )}
     <Row>
@@ -198,10 +201,14 @@ const ModalWrapper = compose(
 ))
 
 export default compose(
+  withJournal,
   connect(
     state => ({
       formValues: getFormValues('reviewerReport')(state),
       isSubmitting: isSubmitting('reviewerReport')(state),
+      errorRequest: selectError(state),
+      fileFetching: getRequestStatus(state),
+      fileError: getFileError(state),
     }),
     {
       changeForm,
@@ -223,14 +230,10 @@ export default compose(
     changeField: ({ changeForm }) => (field, value) => {
       changeForm('reviewerReport', field, value)
     },
-    addFile: ({
-      formValues: { files = [] },
-      uploadFile,
-      changeForm,
-      version,
-    }) => file => {
+    addFile: ({ formValues = {}, uploadFile, changeForm, version }) => file => {
       uploadFile(file, 'review', version.id)
         .then(file => {
+          const files = formValues.files || []
           const newFiles = [...files, file]
 
           setTimeout(() => {
@@ -254,13 +257,6 @@ export default compose(
       const newFiles = files.filter(f => f.id !== id)
       changeForm('reviewerReport', 'files', newFiles)
     },
-    previewFile: ({ getSignedUrl }) => fileId => e => {
-      e.preventDefault()
-      const windowReference = window.open()
-      getSignedUrl(fileId).then(({ signedUrl }) => {
-        windowReference.location = signedUrl
-      })
-    },
   }),
   reduxForm({
     form: 'reviewerReport',
diff --git a/packages/component-manuscript/src/components/utils.js b/packages/component-manuscript/src/components/utils.js
index d6411a9a3b7e81a4d4cf42123d6729c7426e533f..0ffd247ad00e55e06063eba4a0919b95ab582e2e 100644
--- a/packages/component-manuscript/src/components/utils.js
+++ b/packages/component-manuscript/src/components/utils.js
@@ -4,6 +4,7 @@ import { get, find, capitalize, omit, isEmpty, isEqual, debounce } from 'lodash'
 import {
   autosaveRequest,
   autosaveSuccess,
+  autosaveFailure,
 } from 'pubsweet-component-wizard/src/redux/autosave'
 
 export const parseTitle = version => {
@@ -105,7 +106,7 @@ export const parseReviewRequest = (review = {}) => {
   const comments = [
     {
       public: true,
-      content: review.public || '',
+      content: review.public || undefined,
       files: review.files || [],
     },
   ]
@@ -113,7 +114,7 @@ export const parseReviewRequest = (review = {}) => {
   if (review.hasConfidential) {
     comments.push({
       public: false,
-      content: review.confidential,
+      content: review.confidential || undefined,
       files: [],
     })
   }
@@ -139,16 +140,16 @@ const onChange = (
   const newValues = parseReviewRequest(values)
   const prevValues = parseReviewRequest(previousValues)
 
-  if (!isEqual(newValues, prevValues) && !isEmpty(prevValues)) {
+  if (!isEqual(newValues, prevValues)) {
     dispatch(autosaveRequest())
     if (newValues.id) {
-      updateRecommendation(project.id, version.id, newValues).then(r =>
-        dispatch(autosaveSuccess(r.updatedOn)),
-      )
+      updateRecommendation(project.id, version.id, newValues)
+        .then(r => dispatch(autosaveSuccess(r.updatedOn)))
+        .catch(e => dispatch(autosaveFailure(e)))
     } else {
-      createRecommendation(project.id, version.id, newValues).then(r =>
-        dispatch(autosaveSuccess(r.updatedOn)),
-      )
+      createRecommendation(project.id, version.id, newValues)
+        .then(r => dispatch(autosaveSuccess(r.updatedOn)))
+        .catch(e => dispatch(autosaveFailure(e)))
     }
   }
 }
diff --git a/packages/components-faraday/src/components/Dashboard/HandlingEditorSection.js b/packages/components-faraday/src/components/Dashboard/HandlingEditorSection.js
index 914a4dfcca191c2b1ed317f2f5c9e17a1d17865d..6ea7ce628dcb2b18814516a475b369850b6071c0 100644
--- a/packages/components-faraday/src/components/Dashboard/HandlingEditorSection.js
+++ b/packages/components-faraday/src/components/Dashboard/HandlingEditorSection.js
@@ -21,7 +21,7 @@ const renderHE = (currentUser, project) => {
     return <HandlingEditorActions currentUser={currentUser} project={project} />
   }
 
-  return <AssignedHE>{get(handlingEditor, 'name')}</AssignedHE>
+  return <AssignedHE>{get(handlingEditor, 'name') || 'N/A'}</AssignedHE>
 }
 
 const HandlingEditorSection = ({ currentUser, project }) => (
diff --git a/packages/components-faraday/src/components/Files/FileDownload.js b/packages/components-faraday/src/components/Files/FileDownload.js
new file mode 100644
index 0000000000000000000000000000000000000000..c44a1ff1e77dfd00f25cc3218e0d5119c4840240
--- /dev/null
+++ b/packages/components-faraday/src/components/Files/FileDownload.js
@@ -0,0 +1,78 @@
+import React from 'react'
+import qs from 'querystring'
+import { connect } from 'react-redux'
+import styled from 'styled-components'
+import { Icon, th } from '@pubsweet/ui'
+import { compose, withHandlers } from 'recompose'
+
+const createAnchorElement = (file, filename) => {
+  const url = URL.createObjectURL(file)
+  const a = document.createElement('a')
+
+  a.href = url
+  a.download = filename
+  document.body.appendChild(a)
+
+  return {
+    a,
+    url,
+  }
+}
+
+const removeAnchorElement = (a, url) => {
+  document.body.removeChild(a)
+  URL.revokeObjectURL(url)
+}
+
+const FileDownload = ({ downloadFile }) => (
+  <IconButton onClick={downloadFile}>
+    <Icon primary size={3}>
+      download
+    </Icon>
+  </IconButton>
+)
+
+export default compose(
+  connect(state => ({
+    token: state.currentUser.user.token,
+  })),
+  withHandlers({
+    downloadFile: ({ fileId, token, fileName = 'file' }) => () => {
+      const fileURL = `${
+        window.location.origin
+      }/api/files/${fileId}?${qs.stringify({
+        download: true,
+      })}`
+
+      const xhr = new XMLHttpRequest()
+      xhr.onreadystatechange = function onXhrStateChange() {
+        if (this.readyState === 4) {
+          if (this.status >= 200 && this.status < 300) {
+            const f = new File([this.response], fileName)
+
+            const { a, url } = createAnchorElement(f, fileName)
+            a.click()
+            removeAnchorElement(a, url)
+          }
+        }
+      }
+      xhr.open('GET', fileURL)
+      xhr.responseType = 'blob'
+      xhr.setRequestHeader('Authorization', `Bearer ${token}`)
+      xhr.send()
+    },
+  }),
+)(FileDownload)
+
+// #region styled-components
+const IconButton = styled.div`
+  align-items: center;
+  cursor: pointer;
+  display: flex;
+  justify-content: center;
+  margin: 0 ${th('subGridUnit')};
+  &:hover {
+    opacity: 0.7;
+  }
+`
+// #endregion
diff --git a/packages/components-faraday/src/components/Files/FileItem.js b/packages/components-faraday/src/components/Files/FileItem.js
index 960781cb067ec9d5228709508a714466067b1cc0..cda2a7a8581cc75fc51748b86637c47aa42dc00e 100644
--- a/packages/components-faraday/src/components/Files/FileItem.js
+++ b/packages/components-faraday/src/components/Files/FileItem.js
@@ -1,7 +1,9 @@
 import React, { Fragment } from 'react'
 import { last } from 'lodash'
 import { Icon, th } from '@pubsweet/ui'
-import styled, { withTheme, css } from 'styled-components'
+import styled, { css } from 'styled-components'
+
+import { FilePreview, FileDownload } from './'
 
 const parseFileSize = size => {
   const kbSize = size / 1000
@@ -24,40 +26,25 @@ const hasPreview = (name = '') => {
 }
 
 const FileItem = ({
-  dragHandle,
+  id,
   name,
   size,
-  id,
+  theme,
+  dragHandle,
   removeFile,
-  previewFile,
-  downloadFile,
   compact = false,
-  theme,
-  ...rest
 }) => (
   <Fragment>
     {compact ? (
       <FileRoot data-test={`file-${id}`}>
-        {hasPreview(name) && (
-          <IconButton onClick={previewFile(id)}>
-            <Icon primary size={3}>
-              eye
-            </Icon>
-          </IconButton>
-        )}
-        {downloadFile && (
-          <IconButton onClick={downloadFile(id, name)}>
-            <Icon primary size={3}>
-              download
-            </Icon>
-          </IconButton>
-        )}
+        {hasPreview(name) && <FilePreview fileId={id} />}
+        <FileDownload fileId={id} fileName={name} />
         <FileName>{name}</FileName>
         <FileSize>{parseFileSize(size)}</FileSize>
         {removeFile && (
           <IconButton onClick={removeFile(id)}>
             <Icon primary size={3}>
-              trash-2
+              x
             </Icon>
           </IconButton>
         )}
@@ -70,14 +57,10 @@ const FileItem = ({
           <span>{parseFileSize(size)}</span>
         </Info>
         <Buttons>
-          <button onClick={previewFile(id)}>
-            <Icon color={theme.colorPrimary} size={3}>
-              eye
-            </Icon>
-          </button>
+          {hasPreview(name) && <FilePreview fileId={id} />}
           {removeFile && (
             <button onClick={removeFile(id)} title="Delete">
-              <Icon color={theme.colorPrimary} size={3}>
+              <Icon primary size={3}>
                 trash-2
               </Icon>
             </button>
@@ -88,7 +71,7 @@ const FileItem = ({
   </Fragment>
 )
 
-export default withTheme(FileItem)
+export default FileItem
 
 // #region styles
 const defaultText = css`
@@ -101,7 +84,7 @@ const Root = styled.div`
   align-items: center;
   border: ${th('borderDefault')};
   display: flex;
-  margin: 5px;
+  margin: ${th('subGridUnit')};
 `
 
 const Info = styled.div`
@@ -116,7 +99,7 @@ const Buttons = styled.div`
   align-items: center;
   display: flex;
   justify-content: center;
-  margin: 0 10px;
+  margin: 0 calc(${th('subGridUnit')}*2);
 
   a {
     align-items: center;
@@ -159,6 +142,7 @@ const FileRoot = styled.div`
   display: flex;
   flex-direction: row;
   margin-bottom: ${th('subGridUnit')};
+  margin-right: ${th('subGridUnit')};
   padding: ${th('subGridUnit')};
 `
 // #endregion
diff --git a/packages/components-faraday/src/components/Files/FilePreview.js b/packages/components-faraday/src/components/Files/FilePreview.js
new file mode 100644
index 0000000000000000000000000000000000000000..d57fa6067baeba1f4d42c561d5855b9b6cbf9df4
--- /dev/null
+++ b/packages/components-faraday/src/components/Files/FilePreview.js
@@ -0,0 +1,41 @@
+import React from 'react'
+import { connect } from 'react-redux'
+import styled from 'styled-components'
+import { Icon, th } from '@pubsweet/ui'
+import { compose, withHandlers } from 'recompose'
+
+import { getSignedUrl } from '../../redux/files'
+
+const FilePreview = ({ previewFile }) => (
+  <IconButton onClick={previewFile}>
+    <Icon primary size={3}>
+      eye
+    </Icon>
+  </IconButton>
+)
+
+export default compose(
+  connect(null, { getSignedUrl }),
+  withHandlers({
+    previewFile: ({ fileId, getSignedUrl }) => e => {
+      e.preventDefault()
+      const windowReference = window.open()
+      getSignedUrl(fileId).then(({ signedUrl }) => {
+        windowReference.location = signedUrl
+      })
+    },
+  }),
+)(FilePreview)
+
+// #region styled-components
+const IconButton = styled.div`
+  align-items: center;
+  cursor: pointer;
+  display: flex;
+  justify-content: center;
+  margin: 0 ${th('subGridUnit')};
+  &:hover {
+    opacity: 0.7;
+  }
+`
+// #endregion
diff --git a/packages/components-faraday/src/components/Files/FileSection.js b/packages/components-faraday/src/components/Files/FileSection.js
index 1307664718e3b4e3939c0012741bca7fe0be9392..e2ab8427483382eb80b7d2dc36a17bcc92aee8a7 100644
--- a/packages/components-faraday/src/components/Files/FileSection.js
+++ b/packages/components-faraday/src/components/Files/FileSection.js
@@ -28,6 +28,7 @@ const FileSection = ({
   error,
   title,
   files,
+  theme,
   listId,
   isOver,
   isLast,
@@ -35,18 +36,16 @@ const FileSection = ({
   addFile,
   canDrop,
   moveItem,
-  theme,
   isFileOver,
   removeFile,
-  connectFileDrop,
-  connectDropTarget,
-  allowedFileExtensions,
   isFetching,
   canDropFile,
-  disabledFilepicker,
-  dropSortableFile,
-  previewFile,
   requestPending,
+  connectFileDrop,
+  dropSortableFile,
+  connectDropTarget,
+  disabledFilepicker,
+  allowedFileExtensions,
 }) => (
   <DropSection
     innerRef={instance => {
@@ -95,7 +94,6 @@ const FileSection = ({
       listId={listId}
       listItem={FileItem}
       moveItem={moveItem}
-      previewFile={previewFile}
       removeFile={removeFile}
     />
     <InfoContainer>
diff --git a/packages/components-faraday/src/components/Files/Files.js b/packages/components-faraday/src/components/Files/Files.js
index 14014ae1b6136e1595fe1b365c30f35637d03769..f8b340238cce041d62df95732a15c448a41277a7 100644
--- a/packages/components-faraday/src/components/Files/Files.js
+++ b/packages/components-faraday/src/components/Files/Files.js
@@ -19,21 +19,18 @@ import FileSection from './FileSection'
 import {
   uploadFile,
   deleteFile,
-  getRequestStatus,
-  getSignedUrl,
   getFileError,
+  getRequestStatus,
 } from '../../redux/files'
 
 const Files = ({
   files,
+  error,
   addFile,
   moveItem,
   removeFile,
   changeList,
   dropSortableFile,
-  previewFile,
-  error,
-  ...rest
 }) => (
   <div>
     <Error show={error}>Error uploading file, please try again.</Error>
@@ -47,7 +44,6 @@ const Files = ({
       listId="manuscripts"
       maxFiles={Number.POSITIVE_INFINITY}
       moveItem={moveItem('manuscripts')}
-      previewFile={previewFile}
       removeFile={removeFile('manuscripts')}
       title="Main manuscript"
     />
@@ -59,7 +55,6 @@ const Files = ({
       listId="supplementary"
       maxFiles={Number.POSITIVE_INFINITY}
       moveItem={moveItem('supplementary')}
-      previewFile={previewFile}
       removeFile={removeFile('supplementary')}
       title="Supplementarry files"
     />
@@ -73,7 +68,6 @@ const Files = ({
       listId="coverLetter"
       maxFiles={1}
       moveItem={moveItem('coverLetter')}
-      previewFile={previewFile}
       removeFile={removeFile('coverLetter')}
       title="Cover letter"
     />
@@ -92,7 +86,6 @@ export default compose(
       changeForm,
       uploadFile,
       deleteFile,
-      getSignedUrl,
     },
   ),
   withState('files', 'setFiles', {
@@ -111,18 +104,6 @@ export default compose(
     },
   }),
   withHandlers({
-    previewFile: ({
-      files,
-      version,
-      getFileName,
-      getSignedUrl,
-    }) => fileId => e => {
-      e.preventDefault()
-      const windowReference = window.open()
-      getSignedUrl(fileId).then(({ signedUrl }) => {
-        windowReference.location = signedUrl
-      })
-    },
     dropSortableFile: ({ files, setFiles, changeForm }) => (
       otherProps,
       dragProps,
diff --git a/packages/components-faraday/src/components/Files/index.js b/packages/components-faraday/src/components/Files/index.js
index ab85f18a55158ad1fc24c64e32e0023158ec7ae2..a4308c6b8ef70663cd3bad41111c4f56f7cf3da2 100644
--- a/packages/components-faraday/src/components/Files/index.js
+++ b/packages/components-faraday/src/components/Files/index.js
@@ -1,3 +1,5 @@
 export { default as Files } from './Files'
 export { default as FileItem } from './FileItem'
 export { default as FilePicker } from './FilePicker'
+export { default as FilePreview } from './FilePreview'
+export { default as FileDownload } from './FileDownload'
diff --git a/packages/components-faraday/src/redux/recommendations.js b/packages/components-faraday/src/redux/recommendations.js
index 38c278451bf32d80663a10ed55863b6341739b12..a86bfc4758accc0282602783c5927db65940cd0b 100644
--- a/packages/components-faraday/src/redux/recommendations.js
+++ b/packages/components-faraday/src/redux/recommendations.js
@@ -1,5 +1,4 @@
 import { get } from 'lodash'
-import { SubmissionError } from 'redux-form'
 import { create, update } from 'pubsweet-client/src/helpers/api'
 
 const REQUEST = 'recommendations/REQUEST'
@@ -61,9 +60,6 @@ export const createRecommendation = (
       if (error) {
         const errorMessage = get(JSON.parse(error), 'error')
         dispatch(recommendationsError(errorMessage))
-        throw new SubmissionError({
-          _error: errorMessage || 'Something went wrong',
-        })
       }
     },
   )
@@ -90,9 +86,6 @@ export const updateRecommendation = (
       if (error) {
         const errorMessage = get(JSON.parse(error), 'error')
         dispatch(recommendationsError(errorMessage))
-        throw new SubmissionError({
-          _error: errorMessage || 'Something went wrong',
-        })
       }
     },
   )
diff --git a/packages/xpub-faraday/app/config/journal/recommendations.js b/packages/xpub-faraday/app/config/journal/recommendations.js
index f65e0d670ba866846f46282045eb2225dde91878..4bcc3ff06eb99a2a2c4a184933b5ec0956f8f3db 100644
--- a/packages/xpub-faraday/app/config/journal/recommendations.js
+++ b/packages/xpub-faraday/app/config/journal/recommendations.js
@@ -1,17 +1,18 @@
 export default [
   {
-    color: 'green',
-    label: 'Accept',
-    value: 'accept',
+    value: 'publish',
+    label: 'Publish unaltered',
   },
   {
-    color: 'orange',
-    label: 'Revise',
-    value: 'revise',
+    value: 'major',
+    label: 'Consider after major revision',
+  },
+  {
+    value: 'minor',
+    label: 'Consider after major revision',
   },
   {
-    color: 'red',
-    label: 'Reject',
     value: 'reject',
+    label: 'Reject',
   },
 ]