diff --git a/NEWS b/NEWS
index 50bdfae88bf4bf7c86fdb65a9a2d4d074c4bf77f..0ea4ca121c6815ae34745488533379b044abeb6f 100644
--- a/NEWS
+++ b/NEWS
@@ -140,6 +140,8 @@ documents those changes that are of interest to users and administrators.
  -- Remove historical presentations and design notes. Only distribute
     maintained doc/html and doc/man directories.
  -- Remove duplicate xmalloc() in task/cgroup plugin.
+ -- Backfill scheduler to validate correct job partition for job submitted to
+    multiple partitions.
 
 * Changes in Slurm 15.08.8
 ==========================
diff --git a/src/plugins/sched/backfill/backfill.c b/src/plugins/sched/backfill/backfill.c
index 0a4cedf719cf892bd346c4c762f14582386eb602..b467c9d09f6f22bbb3f4bee1ca49f7a6ac706bed 100644
--- a/src/plugins/sched/backfill/backfill.c
+++ b/src/plugins/sched/backfill/backfill.c
@@ -962,7 +962,10 @@ static int _attempt_backfill(void)
 		}
 
 		job_ptr  = job_queue_rec->job_ptr;
+		part_ptr = job_queue_rec->part_ptr;
+		job_ptr->part_ptr = part_ptr;
 		mcs_select = slurm_mcs_get_select(job_ptr);
+
 		/* With bf_continue configured, the original job could have
 		 * been cancelled and purged. Validate pointer here. */
 		if ((job_ptr->magic  != JOB_MAGIC) ||
@@ -1033,7 +1036,6 @@ static int _attempt_backfill(void)
 
 		orig_start_time = job_ptr->start_time;
 		orig_time_limit = job_ptr->time_limit;
-		part_ptr = job_queue_rec->part_ptr;
 		xfree(job_queue_rec);
 
 next_task:
diff --git a/src/plugins/task/cgroup/task_cgroup_cpuset.c b/src/plugins/task/cgroup/task_cgroup_cpuset.c
index 5d4d244a8baa964ff8b2c36ae60940ddb8f82309..7350aeb712ccd3ecfd517870f228925cd36e49cb 100644
--- a/src/plugins/task/cgroup/task_cgroup_cpuset.c
+++ b/src/plugins/task/cgroup/task_cgroup_cpuset.c
@@ -832,7 +832,6 @@ static int _task_cgroup_cpuset_dist_block(
 	int spec_thread_cnt = 0;
 	bitstr_t *spec_threads = NULL;
 
-	uint32_t *thread_idx;
 	uint32_t core_idx;
 	bool core_fcyclic, core_block;
 
@@ -854,7 +853,7 @@ static int _task_cgroup_cpuset_dist_block(
 	}
 
 	if ((hwloc_compare_types(hwtype, HWLOC_OBJ_PU) == 0) && !core_block) {
-		thread_idx = xmalloc(ncores * sizeof(uint32_t));
+		uint32_t *thread_idx = xmalloc(ncores * sizeof(uint32_t));
 		ntskip = taskid;
 		npdist = job->cpus_per_task;