diff --git a/src/slurmctld/job_mgr.c b/src/slurmctld/job_mgr.c
index 8c55dae949b4ced713297162a4506948c687436e..ab58bb46a74c359fa097851ad905beb0d7a9cf51 100644
--- a/src/slurmctld/job_mgr.c
+++ b/src/slurmctld/job_mgr.c
@@ -7190,7 +7190,10 @@ int update_job(job_desc_msg_t * job_specs, uid_t uid)
 			error_code = ESLURM_DISABLED;
 		else if (job_ptr->priority == job_specs->priority) {
 			debug("update_job: setting priority to current value");
-			if ((job_ptr->priority == 0) && authorized) {
+			if ((job_ptr->priority == 0) &&
+			    (job_ptr->user_id != uid) && authorized) {
+				/* Authorized user can change from user hold
+				 * to admin hold or admin hold to user hold */
 				if (job_specs->alloc_sid == ALLOC_SID_USER_HOLD)
 					job_ptr->state_reason = WAIT_HELD_USER;
 				else