diff --git a/packages/component-helper-service/src/tests/fragment.test.js b/packages/component-helper-service/src/tests/fragment.test.js
index c5623dc18a8d7cf4812d3695189319f48b7e2202..ec7fbb6073f311f844c2ff574c936dfe00b9ff35 100644
--- a/packages/component-helper-service/src/tests/fragment.test.js
+++ b/packages/component-helper-service/src/tests/fragment.test.js
@@ -329,12 +329,13 @@ describe('Fragment helper', () => {
           updatedOn: chance.timestamp(),
         },
       ]
-      const currentUserRecommendations = testFragment.recommendations.filter(
-        r => r.userId === handlingEditorId,
-      )
       const fragmentHelper = new Fragment({ fragment: testFragment })
+      const latestUserRecommendation = fragmentHelper.getLatestUserRecommendation(
+        handlingEditorId,
+      )
+
       const canHEMakeAnotherRecommendation = await fragmentHelper.canHEMakeAnotherRecommendation(
-        currentUserRecommendations,
+        latestUserRecommendation,
       )
       expect(canHEMakeAnotherRecommendation).toBe(true)
     })
@@ -362,12 +363,12 @@ describe('Fragment helper', () => {
           updatedOn: chance.timestamp(),
         },
       ]
-      const currentUserRecommendations = testFragment.recommendations.filter(
-        r => r.userId === handlingEditorId,
-      )
       const fragmentHelper = new Fragment({ fragment: testFragment })
+      const latestUserRecommendation = fragmentHelper.getLatestUserRecommendation(
+        handlingEditorId,
+      )
       const canHEMakeAnotherRecommendation = await fragmentHelper.canHEMakeAnotherRecommendation(
-        currentUserRecommendations,
+        latestUserRecommendation,
       )
       expect(canHEMakeAnotherRecommendation).toBe(false)
     })
diff --git a/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js b/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js
index f56995c89f20db60c0095f5a205630fb36057354..1f43c011c5fa7a98b1e6392998d2ef8fcbeb6ab9 100644
--- a/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js
+++ b/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js
@@ -18,6 +18,7 @@ const returnToHE = require('./strategies/eicReturnToHE')
 const Notification = require('../../notifications/notification')
 const createReview = require('./strategies/reviewerCreateReview')
 const requestRevisionAsHE = require('./strategies/heRequestRevision')
+const requestRevisionAsEiC = require('./strategies/eicRequestRevision')
 
 module.exports = models => async (req, res) => {
   const { recommendation, comments, recommendationType } = req.body
@@ -110,6 +111,7 @@ module.exports = models => async (req, res) => {
     eic: {
       reject: rejectAsEiC,
       publish: publishAsEiC,
+      revision: requestRevisionAsEiC,
       'return-to-handling-editor': returnToHE,
     },
   }
diff --git a/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/strategies/eicRequestRevision.js b/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/strategies/eicRequestRevision.js
new file mode 100644
index 0000000000000000000000000000000000000000..a98304d7a35dae58e81b0809022dcc823dd44781
--- /dev/null
+++ b/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/strategies/eicRequestRevision.js
@@ -0,0 +1,13 @@
+module.exports = {
+  execute: async ({ fragmentHelper, collectionHelper, newRecommendation }) => {
+    if (collectionHelper.hasHandlingEditor()) {
+      throw new Error(
+        'Cannot make request a revision after a Handling Editor has been assigned.',
+      )
+    }
+
+    await fragmentHelper.addRevision()
+    await collectionHelper.updateStatus({ newStatus: 'revisionRequested' })
+    await fragmentHelper.addRecommendation(newRecommendation)
+  },
+}
diff --git a/packages/component-manuscript-manager/src/tests/fragmentsRecommendations/post.test.js b/packages/component-manuscript-manager/src/tests/fragmentsRecommendations/post.test.js
index b45fe772a119424bb5a86f3f41063e77323895f0..48138e455a6faa71295bce04c944903c7fb9b9c7 100644
--- a/packages/component-manuscript-manager/src/tests/fragmentsRecommendations/post.test.js
+++ b/packages/component-manuscript-manager/src/tests/fragmentsRecommendations/post.test.js
@@ -640,4 +640,55 @@ describe('Post fragments recommendations route handler', () => {
       'Cannot make a recommendation on an older version.',
     )
   })
+  it('should return success when an EiC requests a revision before the Handling Editor is assigned', async () => {
+    const { editorInChief } = testFixtures.users
+    const { collection } = testFixtures.collections
+    const { fragment } = testFixtures.fragments
+    body.recommendation = 'revision'
+    body.recommendationType = 'editorRecommendation'
+    delete collection.handlingEditor
+
+    const res = await requests.sendRequest({
+      body,
+      userId: editorInChief.id,
+      models,
+      route,
+      path,
+      params: {
+        collectionId: collection.id,
+        fragmentId: fragment.id,
+      },
+    })
+
+    expect(res.statusCode).toBe(200)
+    const data = JSON.parse(res._getData())
+    expect(data.userId).toEqual(editorInChief.id)
+    expect(collection.status).toEqual('revisionRequested')
+    expect(fragment).toHaveProperty('revision')
+  })
+  it('should return an error when an EiC requests a revision after a Handling Editor is assigned', async () => {
+    const { editorInChief } = testFixtures.users
+    const { collection } = testFixtures.collections
+    const { fragment } = testFixtures.fragments
+    body.recommendation = 'revision'
+    body.recommendationType = 'editorRecommendation'
+
+    const res = await requests.sendRequest({
+      body,
+      userId: editorInChief.id,
+      models,
+      route,
+      path,
+      params: {
+        collectionId: collection.id,
+        fragmentId: fragment.id,
+      },
+    })
+
+    expect(res.statusCode).toBe(400)
+    const data = JSON.parse(res._getData())
+    expect(data.error).toEqual(
+      'Cannot make request a revision after a Handling Editor has been assigned.',
+    )
+  })
 })