diff --git a/packages/component-faraday-selectors/src/index.js b/packages/component-faraday-selectors/src/index.js
index 95f9a5b80adf044e2ed228d636c9ce8d793869be..d95643452340c8c5607971adb3da46092e2a4801 100644
--- a/packages/component-faraday-selectors/src/index.js
+++ b/packages/component-faraday-selectors/src/index.js
@@ -75,6 +75,7 @@ export const canSeeReviewersReports = (state, collectionId) => {
 export const canMakeRevision = (state, collection, fragment) => {
   const currentUserId = get(state, 'currentUser.user.id')
   return (
+    get(fragment, 'revision') &&
     collection.status === 'revisionRequested' &&
     fragment.owners.map(o => o.id).includes(currentUserId)
   )
diff --git a/packages/component-manuscript/src/components/ManuscriptLayout.js b/packages/component-manuscript/src/components/ManuscriptLayout.js
index 318822b55f342766aef036cc697548d2c17aca9c..ea90b83967e7dbbd429f89747956d3c7f97968f9 100644
--- a/packages/component-manuscript/src/components/ManuscriptLayout.js
+++ b/packages/component-manuscript/src/components/ManuscriptLayout.js
@@ -27,6 +27,7 @@ const ManuscriptLayout = ({
   history,
   currentUser,
   editorInChief,
+  canMakeRevision,
   editorialRecommendations,
   project = {},
   version = {},
@@ -56,7 +57,7 @@ const ManuscriptLayout = ({
             fragment={version}
             startExpanded={isEmpty(version.revision)}
           />
-          {version.revision && (
+          {canMakeRevision && (
             <SubmitRevision project={project} version={version} />
           )}
           <ReviewsAndReports project={project} version={version} />
diff --git a/packages/component-manuscript/src/components/ManuscriptPage.js b/packages/component-manuscript/src/components/ManuscriptPage.js
index a832022fdb722c6e9fe0dd077639eed86e449147..b6ff4faa6b97eed352a2ce4468fc2e97328484c8 100644
--- a/packages/component-manuscript/src/components/ManuscriptPage.js
+++ b/packages/component-manuscript/src/components/ManuscriptPage.js
@@ -29,6 +29,7 @@ import {
   getHandlingEditors,
   selectHandlingEditors,
 } from 'pubsweet-components-faraday/src/redux/editors'
+import { canMakeRevision } from 'pubsweet-component-faraday-selectors/src'
 
 import ManuscriptLayout from './ManuscriptLayout'
 import { parseSearchParams, redirectToError } from './utils'
@@ -64,6 +65,9 @@ export default compose(
       updateVersion: actions.updateFragment,
     },
   ),
+  connect((state, { project, version }) => ({
+    canMakeRevision: canMakeRevision(state, project, version),
+  })),
   ConnectPage(({ currentUser, handlingEditors, project }) => {
     const he = get(project, 'handlingEditor')
     if (
diff --git a/packages/component-manuscript/src/components/SideBarActions.js b/packages/component-manuscript/src/components/SideBarActions.js
index 76a9369e78aecb0fca7ef61a44ae14629345773a..7f1f8c4c70ae2eaf4413aa66f91418e3210fdf3c 100644
--- a/packages/component-manuscript/src/components/SideBarActions.js
+++ b/packages/component-manuscript/src/components/SideBarActions.js
@@ -17,7 +17,7 @@ import {
   canMakeRevision,
   canMakeDecision,
   canMakeRecommendation,
-} from '../../../component-faraday-selectors'
+} from 'pubsweet-component-faraday-selectors/src'
 
 const SideBarActions = ({
   project,
diff --git a/packages/component-manuscript/src/components/utils.js b/packages/component-manuscript/src/components/utils.js
index 2f7a3b5386e5a5560ea66df6371763b0241f5da2..1accaf54c002c3642a630f53f0620ed16f206e2a 100644
--- a/packages/component-manuscript/src/components/utils.js
+++ b/packages/component-manuscript/src/components/utils.js
@@ -1,5 +1,14 @@
 import moment from 'moment'
-import { get, find, capitalize, omit, isEmpty, debounce } from 'lodash'
+import {
+  get,
+  find,
+  omit,
+  chain,
+  merge,
+  isEmpty,
+  debounce,
+  capitalize,
+} from 'lodash'
 
 import { actions } from 'pubsweet-client/src'
 import { change as changeForm } from 'redux-form'
@@ -187,14 +196,23 @@ export const onReviewSubmit = (
   })
 }
 
+const parseRevision = (values, fragment) => {
+  const v = chain(values)
+    .omit('authorForm')
+    .omit(v => v === '')
+    .value()
+
+  return {
+    ...fragment,
+    revision: {
+      ...v,
+      metadata: merge(v.metadata, fragment.metadata),
+    },
+  }
+}
+
 const _onRevisionChange = (values, dispatch, { project, version }) => {
-  const newValues = omit(values, 'authorForm')
-  dispatch(
-    actions.updateFragment(project, {
-      ...version,
-      revision: newValues,
-    }),
-  )
+  dispatch(actions.updateFragment(project, parseRevision(values, version)))
 }
 export const onRevisionChange = debounce(_onRevisionChange, 1000, {
   maxWait: 5000,
@@ -219,12 +237,10 @@ export const onRevisionSubmit = (
     onConfirm: () => {
       submitRevision(project.id, version.id)
         .then(r => {
-          dispatch(actions.getFragments({ id: project.id }))
-          return r
-        })
-        .then(r => {
-          history.push(`/projects/${r.collectionId}/version/${r.id}/details`)
-          hideModal()
+          dispatch(actions.getFragments({ id: project.id })).then(() => {
+            history.push(`/projects/${r.collectionId}/versions/${r.id}/details`)
+            hideModal()
+          })
         })
         .catch(e => setModalError('Something went wrong.'))
     },