diff --git a/packages/component-invite/src/helpers/Team.js b/packages/component-invite/src/helpers/Team.js
index 8955e107a0b6bba49093a2028de088431f6eeb54..8092336a8cdd94720eea378cd4dfae14a3453f7f 100644
--- a/packages/component-invite/src/helpers/Team.js
+++ b/packages/component-invite/src/helpers/Team.js
@@ -106,10 +106,20 @@ const getTeamByGroupAndCollection = async (collectionId, role, TeamModel) => {
   )
 }
 
+const updateHETeam = async (collection, role, TeamModel, user) => {
+  const team = await getTeamByGroupAndCollection(collection.id, role, TeamModel)
+  delete collection.handlingEditor
+  await removeTeamMember(team.id, user.id, TeamModel)
+  user.teams = user.teams.filter(userTeamId => team.id !== userTeamId)
+  await user.save()
+  await collection.save()
+}
+
 module.exports = {
   createNewTeam,
   setupManuscriptTeam,
   removeTeamMember,
   getTeamMembersByCollection,
   getTeamByGroupAndCollection,
+  updateHETeam,
 }
diff --git a/packages/component-invite/src/routes/collectionsInvitations/patch.js b/packages/component-invite/src/routes/collectionsInvitations/patch.js
index c23e245eafa38622c1bac42345ff734a99aa36dd..da754a1fc193276c4bb22006fe9c5c0b68ce54c3 100644
--- a/packages/component-invite/src/routes/collectionsInvitations/patch.js
+++ b/packages/component-invite/src/routes/collectionsInvitations/patch.js
@@ -19,7 +19,7 @@ module.exports = models => async (req, res) => {
 
   let user = await models.User.find(req.user)
   try {
-    let collection = await models.Collection.find(collectionId)
+    const collection = await models.Collection.find(collectionId)
     const invitation = await collection.invitations.find(
       invitation => invitation.id === invitationId,
     )
@@ -70,19 +70,17 @@ module.exports = models => async (req, res) => {
       }
     } else {
       invitation.isAccepted = false
-      const team = await teamHelper.getTeamByGroupAndCollection(
-        collectionId,
-        invitation.role,
-        models.Team,
-      )
-      if (invitation.role === 'handlingEditor') {
-        delete collection.handlingEditor
-      }
-      await collection.save()
-      await teamHelper.removeTeamMember(team.id, user.id, models.Team)
-      user.teams = user.teams.filter(userTeamId => team.id !== userTeamId)
+
+      if (invitation.role === 'handlingEditor')
+        await teamHelper.updateHETeam(
+          collection,
+          invitation.role,
+          models.Team,
+          user,
+        )
       if (reason !== undefined) {
         invitation.reason = reason
+        await collection.save()
       }
       try {
         if (invitation.role === 'handlingEditor') {
diff --git a/packages/xpub-faraday/config/authsome-helpers.js b/packages/xpub-faraday/config/authsome-helpers.js
index 89f45615879ce4a02387ff462f08c12c60adebd2..e9eb600cbef1cb248ebf518e146e891f2e91afb3 100644
--- a/packages/xpub-faraday/config/authsome-helpers.js
+++ b/packages/xpub-faraday/config/authsome-helpers.js
@@ -19,4 +19,10 @@ module.exports = {
       coll.visibleStatus = statuses[coll.status].private
     }
   },
+  filterRefusedReviewers: (coll, user) => {
+    const matchingInv = coll.invitations.find(inv => inv.userId === user.id)
+    if (matchingInv === undefined) return null
+    if (matchingInv.hasAnswer === true && !matchingInv.isAccepted) return null
+    return coll
+  },
 }
diff --git a/packages/xpub-faraday/config/authsome.js b/packages/xpub-faraday/config/authsome.js
index 9418e830bf2700f23aaccbce52939cb816f23936..cd7bed1d09f72d09798f6b8cc4e0d03cb9c0dc75 100644
--- a/packages/xpub-faraday/config/authsome.js
+++ b/packages/xpub-faraday/config/authsome.js
@@ -35,6 +35,9 @@ async function teamPermissions(user, operation, object, context) {
             }
             helpers.setPublicStatuses(coll, matchingCollPerm)
             helpers.parseReviewerAuthors(coll, matchingCollPerm)
+            if (['reviewer'].includes(matchingCollPerm.permission)) {
+              return helpers.filterRefusedReviewers(coll, user)
+            }
             return coll
           })
           .filter(Boolean)