diff --git a/NEWS b/NEWS
index 210ed01c61ccacbabdd6511ae81450e826a44f08..5d21ff08250a81058e8e7d5473c73ce1c09bafd9 100644
--- a/NEWS
+++ b/NEWS
@@ -168,6 +168,7 @@ documents those changes that are of interest to users and administrators.
 ==========================
  -- Remove StoragePass from being printed out in the slurmdbd log at debug2
     level.
+ -- Defer PATH search for task program until launch in slurmstepd.
 
 * Changes in Slurm 16.05.7
 ==========================
diff --git a/contribs/perlapi/libslurm/perl/job.c b/contribs/perlapi/libslurm/perl/job.c
index 707ee40135d4c746796cfbfa6659794b4e7f48ce..3f935921acfd8be818915f40bb687c66b828fb0a 100644
--- a/contribs/perlapi/libslurm/perl/job.c
+++ b/contribs/perlapi/libslurm/perl/job.c
@@ -486,7 +486,7 @@ hv_to_job_info_msg(HV *hv, job_info_msg_t *job_info_msg)
 	FETCH_FIELD(hv, job_info_msg, last_update, time_t, TRUE);
 	svp = hv_fetch(hv, "job_array", 9, FALSE);
 	if (! (svp && SvROK(*svp) && SvTYPE(SvRV(*svp)) == SVt_PVAV)) {
-		Perl_warn (aTHX_ "job_array is not an arrary reference in HV for job_info_msg_t");
+		Perl_warn (aTHX_ "job_array is not an array reference in HV for job_info_msg_t");
 		return -1;
 	}
 	av = (AV*)SvRV(*svp);
diff --git a/src/plugins/burst_buffer/cray/burst_buffer_cray.c b/src/plugins/burst_buffer/cray/burst_buffer_cray.c
index 0facd503d3fba6db3c83085872351325549bf988..43af1805645174e42723b6a1faa0aff138656bc5 100644
--- a/src/plugins/burst_buffer/cray/burst_buffer_cray.c
+++ b/src/plugins/burst_buffer/cray/burst_buffer_cray.c
@@ -698,7 +698,7 @@ static bb_job_t *_get_bb_job(struct job_record *job_ptr)
 }
 
 /* At slurmctld start up time, for every currently active burst buffer,
- * update that user's limit */
+ * update that user's limit. Also log every recovered buffer */
 static void _apply_limits(void)
 {
 	bool emulate_cray = false;
@@ -711,6 +711,9 @@ static void _apply_limits(void)
 	for (i = 0; i < BB_HASH_SIZE; i++) {
 		bb_alloc = bb_state.bb_ahash[i];
 		while (bb_alloc) {
+			info("Recovered buffer Name:%s User:%u Pool:%s Size:%"PRIu64,
+			     bb_alloc->name, bb_alloc->user_id,
+			     bb_alloc->pool, bb_alloc->size);
 			_set_assoc_mgr_ptrs(bb_alloc);
 			bb_limit_add(bb_alloc->user_id, bb_alloc->size,
 				     bb_alloc->pool, &bb_state, emulate_cray);
diff --git a/src/slurmd/slurmstepd/slurmstepd_job.c b/src/slurmd/slurmstepd/slurmstepd_job.c
index e29e84e4a9dfce2f9e76d5cdf7817589994a9515..06bd1b8ee0d2c110210374b89166546c3307671e 100644
--- a/src/slurmd/slurmstepd/slurmstepd_job.c
+++ b/src/slurmd/slurmstepd/slurmstepd_job.c
@@ -65,7 +65,6 @@
 #include "src/slurmd/slurmstepd/fname.h"
 #include "src/slurmd/slurmstepd/multi_prog.h"
 #include "src/slurmd/slurmstepd/slurmstepd_job.h"
-#include "src/slurmd/slurmstepd/task.h"
 
 #ifdef HAVE_NATIVE_CRAY
 static bool already_validated_uid = true;
@@ -157,12 +156,6 @@ _job_init_task_info(stepd_step_rec_t *job, uint32_t **gtid,
 	job->task = (stepd_step_task_info_t **)
 		xmalloc(job->node_tasks * sizeof(stepd_step_task_info_t *));
 
-	if (((job->flags & LAUNCH_MULTI_PROG) == 0) && job->argv) {
-		char *new_path = build_path(job->argv[0], job->env, job->cwd);
-		xfree(job->argv[0]);
-		job->argv[0] = new_path;
-	}
-
 	for (i = 0; i < job->node_tasks; i++) {
 		in = _expand_stdio_filename(ifname, gtid[node_id][i], job);
 		out = _expand_stdio_filename(ofname, gtid[node_id][i], job);
diff --git a/src/slurmd/slurmstepd/task.c b/src/slurmd/slurmstepd/task.c
index 63e10be794c09a6d7179a29fef70445286cd0050..d8edddd637ff2914ec72f608c625aabf355ebc0c 100644
--- a/src/slurmd/slurmstepd/task.c
+++ b/src/slurmd/slurmstepd/task.c
@@ -264,7 +264,7 @@ _run_script_and_set_env(const char *name, const char *path,
 /* Given a program name, translate it to a fully qualified pathname as needed
  * based upon the PATH environment variable and current working directory
  * Returns xmalloc()'d string that must be xfree()'d */
-extern char *build_path(char *fname, char **prog_env, char *cwd)
+extern char *_build_path(char *fname, char **prog_env, char *cwd)
 {
 	char *path_env = NULL, *dir;
 	char *file_name;
@@ -340,7 +340,7 @@ extern void block_daemon(void);
 void
 exec_task(stepd_step_rec_t *job, int i)
 {
-	uint32_t *gtids;		/* pointer to arrary of ranks */
+	uint32_t *gtids;		/* pointer to array of ranks */
 	int fd, j;
 	stepd_step_task_info_t *task = job->task[i];
 	char **tmp_env;
@@ -396,7 +396,7 @@ exec_task(stepd_step_rec_t *job, int i)
 		 * is left up to the server to search the PATH for the
 		 * executable.
 		 */
-		task->argv[0] = build_path(task->argv[0], job->env, NULL);
+		task->argv[0] = _build_path(task->argv[0], job->env, NULL);
 	}
 
 	if (!job->batch) {
diff --git a/src/slurmd/slurmstepd/task.h b/src/slurmd/slurmstepd/task.h
index 6c09d78930ee2f0c74a3aff964cf1de1cc781e17..74043c3a51afb7668bbeb381543b7003223d2d0b 100644
--- a/src/slurmd/slurmstepd/task.h
+++ b/src/slurmd/slurmstepd/task.h
@@ -47,8 +47,4 @@
 
 void exec_task(stepd_step_rec_t *job, int i);
 
-/* Given a program name, translate it to a fully qualified pathname as needed
- * based upon the PATH environment variable and current working directory */
-extern char *build_path(char* fname, char **prog_env, char *cwd);
-
 #endif /* !_TASK_H */