diff --git a/src/slurmctld/job_mgr.c b/src/slurmctld/job_mgr.c
index d9f8bf8133b739dc5fadb779e68a842d7eea7291..92f218971e40c3b9b567a775c2a762e14881fea7 100644
--- a/src/slurmctld/job_mgr.c
+++ b/src/slurmctld/job_mgr.c
@@ -2293,7 +2293,6 @@ extern int kill_job_by_front_end_name(char *node_name)
 				}
 				if (job_ptr->node_cnt == 0) {
 					job_ptr->job_state &= (~JOB_COMPLETING);
-					job_hold_requeue(job_ptr);
 					delete_step_records(job_ptr);
 					slurm_sched_g_schedule();
 				}
@@ -2520,7 +2519,6 @@ extern int kill_running_job_by_node_name(char *node_name)
 			}
 			if (job_ptr->node_cnt == 0) {
 				job_ptr->job_state &= (~JOB_COMPLETING);
-				job_hold_requeue(job_ptr);
 				delete_step_records(job_ptr);
 				slurm_sched_g_schedule();
 			}
@@ -10396,12 +10394,12 @@ extern int job_requeue(uid_t uid,
 		goto reply;
 	}
 
-	if (IS_JOB_COMPLETING(job_ptr)) {
-		if (IS_JOB_PENDING(job_ptr))
-			goto reply;	/* already requeued */
-		rc = ESLURM_TRANSITION_STATE_NO_UPDATE;
+	/* In the process of completing or
+	 * already requeued.
+	 */
+	if (IS_JOB_COMPLETING(job_ptr)
+		|| (IS_JOB_PENDING(job_ptr)))
 		goto reply;
-	}
 
 	/* nothing else to do if pending */
 	if (IS_JOB_PENDING(job_ptr))
@@ -11431,7 +11429,6 @@ extern void build_cg_bitmap(struct job_record *job_ptr)
 		job_ptr->node_bitmap_cg = bit_alloc(node_record_count);
 		job_ptr->job_state &= (~JOB_COMPLETING);
 	}
-	job_hold_requeue(job_ptr);
 }
 
 /* job_hold_requeue()
@@ -11447,6 +11444,7 @@ void
 job_hold_requeue(struct job_record *job_ptr)
 {
 	uint32_t state;
+	uint32_t flags;
 
 	xassert(job_ptr);
 
@@ -11463,7 +11461,8 @@ job_hold_requeue(struct job_record *job_ptr)
 	 * we are not requeueing the job from
 	 * job_requeue() but from job_epilog_complete().
 	 */
-	job_ptr->job_state = JOB_PENDING;
+	flags = job_ptr->job_state & JOB_STATE_FLAGS;
+	job_ptr->job_state = JOB_PENDING | flags;
 
 	/* Test if user wants to requeue the job
 	 * in hold or with a special exit value.
diff --git a/src/slurmctld/node_scheduler.c b/src/slurmctld/node_scheduler.c
index 4f56e59baf78c5032e4484bf0577c26b5f38df8a..0b3bff92a9949fd7af7ab29d6dc0c09faae88c90 100644
--- a/src/slurmctld/node_scheduler.c
+++ b/src/slurmctld/node_scheduler.c
@@ -511,7 +511,6 @@ extern void deallocate_nodes(struct job_record *job_ptr, bool timeout,
 
 	if ((agent_args->node_count - down_node_cnt) == 0) {
 		job_ptr->job_state &= (~JOB_COMPLETING);
-		job_hold_requeue(job_ptr);
 		delete_step_records(job_ptr);
 		slurm_sched_g_schedule();
 	}
@@ -2514,7 +2513,6 @@ extern void re_kill_job(struct job_record *job_ptr)
 				    ((--job_ptr->node_cnt) == 0)) {
 					last_node_update = time(NULL);
 					job_ptr->job_state &= (~JOB_COMPLETING);
-					job_hold_requeue(job_ptr);
 					delete_step_records(job_ptr);
 					slurm_sched_g_schedule();
 				}
@@ -2542,7 +2540,6 @@ extern void re_kill_job(struct job_record *job_ptr)
 			if ((job_ptr->node_cnt > 0) &&
 			    ((--job_ptr->node_cnt) == 0)) {
 				job_ptr->job_state &= (~JOB_COMPLETING);
-				job_hold_requeue(job_ptr);
 				delete_step_records(job_ptr);
 				slurm_sched_g_schedule();
 				last_node_update = time(NULL);