diff --git a/src/slurmctld/controller.c b/src/slurmctld/controller.c
index 3ff37e8923e8f1e905aa811c878f02261becaa97..15a17b96ffea5172c731eb6abef7973989e60159 100644
--- a/src/slurmctld/controller.c
+++ b/src/slurmctld/controller.c
@@ -637,7 +637,7 @@ static void *_slurmctld_background(void *no_data)
 			purge_old_job();	/* remove defunct job recs */
 			unlock_slurmctld(job_write_lock);
 			if (schedule())
-				last_checkpoint_time = 0;  /* force save */
+				last_checkpoint_time = 0;  /* force state save */
 		}
 
 		if (difftime(now, last_checkpoint_time) >=
diff --git a/src/slurmctld/proc_req.c b/src/slurmctld/proc_req.c
index 94a5adef8680d35a27bc94bf03b003563352e6ee..81b29152739d62b6100393991336dd3aa6a160f3 100644
--- a/src/slurmctld/proc_req.c
+++ b/src/slurmctld/proc_req.c
@@ -59,6 +59,7 @@
 #include "src/slurmctld/agent.h"
 #include "src/slurmctld/locks.h"
 #include "src/slurmctld/proc_req.h"
+#include "src/slurmctld/read_config.h"
 #include "src/slurmctld/slurmctld.h"
 
 #define BUF_SIZE	  1024	/* Temporary buffer size */
@@ -684,8 +685,11 @@ static void  _slurm_rpc_epilog_complete(slurm_msg_t * msg)
 			epilog_msg->job_id, epilog_msg->node_name,
 			TIME_STR);
 
-	if (run_scheduler)
-		schedule();		/* has own locks */
+	/* Functions below provide their own locking */
+	if (run_scheduler) {
+		(void) schedule();
+		save_all_state();
+	}
 
 	/* NOTE: RPC has no response */
 }
@@ -729,7 +733,6 @@ static void _slurm_rpc_job_step_kill(slurm_msg_t * msg)
 
 			/* Below function provides its own locking */
 			(void) dump_all_job_state();
-
 		}
 	} else {
 		error_code = job_step_signal(job_step_kill_msg->job_id,
@@ -1085,7 +1088,6 @@ static void _slurm_rpc_node_registration(slurm_msg_t * msg)
 		debug2("_slurm_rpc_node_registration complete for %s %s",
 			node_reg_stat_msg->node_name, TIME_STR);
 		slurm_send_rc_msg(msg, SLURM_SUCCESS);
-		schedule();	/* has own locks */
 	}
 }
 
@@ -1277,6 +1279,7 @@ static void _slurm_rpc_shutdown_controller(slurm_msg_t * msg)
 		if (slurmctld_config.server_thread_count > 1)
 			error("shutting down with server_thread_count=%d",
 				slurmctld_config.server_thread_count);
+		save_all_state();
 	}
 	slurm_send_rc_msg(msg, error_code);
 	if ((error_code == SLURM_SUCCESS) && core_arg)