diff --git a/packages/component-helper-service/src/services/Fragment.js b/packages/component-helper-service/src/services/Fragment.js
index ba56f7a41f116f412842fa721f2336cf6430f169..1c294af21f0a50bc14fbe9de6ab254134f0c708d 100644
--- a/packages/component-helper-service/src/services/Fragment.js
+++ b/packages/component-helper-service/src/services/Fragment.js
@@ -1,4 +1,4 @@
-const { get, remove } = require('lodash')
+const { get, remove, findLast, last } = require('lodash')
 const config = require('config')
 const User = require('./User')
 
@@ -150,6 +150,16 @@ class Fragment {
     )
   }
 
+  canHEMakeAnotherRecommendation(currentUserRecommendations) {
+    const lastHERecommendation = last(currentUserRecommendations)
+    const { fragment: { recommendations = [] } } = this
+    const returnToHERecommendation = findLast(
+      recommendations,
+      r => r.recommendation === 'return-to-handling-editor',
+    )
+    if (!returnToHERecommendation) return false
+    return returnToHERecommendation.createdOn > lastHERecommendation.createdOn
+  }
   async getReviewersAndEditorsData({ collection, UserModel }) {
     const {
       invitations = [],
diff --git a/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js b/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js
index 80c1b743799a457857c17c7a58388e5109ccab2f..6221128db3ad56a31f659d1294051313ebbf7cd1 100644
--- a/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js
+++ b/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js
@@ -1,6 +1,6 @@
 /* eslint-disable no-return-await */
 const uuid = require('uuid')
-const { pick, get, set, has, isEmpty, last, findLast } = require('lodash')
+const { pick, get, set, has, isEmpty, last } = require('lodash')
 const config = require('config')
 const { v4 } = require('uuid')
 const logger = require('@pubsweet/logger')
@@ -63,10 +63,6 @@ module.exports = models => async (req, res) => {
     [],
   ).filter(r => r.userId === req.user)
 
-  const returnToHERecommendation = findLast(
-    get(fragment, 'recommendations', []),
-    r => r.recommendation === 'return-to-handling-editor',
-  )
   const authsome = authsomeHelper.getAuthsome(models)
   const target = {
     fragment,
@@ -104,12 +100,22 @@ module.exports = models => async (req, res) => {
       return res
         .status(400)
         .json({ error: 'Cannot write another review on this version.' })
-    } else if (
+    }
+    if (
+      recommendationType === recommendations.type.editor &&
+      !isEditorInChief &&
+      !fragmentHelper.canHEMakeAnotherRecommendation(currentUserRecommendations)
+    ) {
+      return res.status(400).json({
+        error: 'Cannot make another recommendation on this version.',
+      })
+    }
+    if (
       recommendationType === recommendations.type.editor &&
-      ((returnToHERecommendation &&
-        returnToHERecommendation.createdOn <=
-          last(currentUserRecommendations).createdOn) ||
-        !returnToHERecommendation)
+      isEditorInChief &&
+      recommendation !== recommendations.reject &&
+      last(currentUserRecommendations).recommendation ===
+        'return-to-handling-editor'
     ) {
       return res.status(400).json({
         error: 'Cannot make another recommendation on this version.',