diff --git a/src/plugins/select/bluegene/bgl_job_run.c b/src/plugins/select/bluegene/bgl_job_run.c
index 98978dc588aec2b01455f524595351457896bfc0..e87f1386c3a4d316cec48db4a6d9d7617c104873 100644
--- a/src/plugins/select/bluegene/bgl_job_run.c
+++ b/src/plugins/select/bluegene/bgl_job_run.c
@@ -374,7 +374,7 @@ static void _term_agent(bgl_update_t *bgl_update_ptr)
 				bgl_err_str(rc));
 			continue;
 		}
-		
+
 		if (strcmp(part_id, bgl_update_ptr->bgl_part_id) != 0)
 			continue;
 		if ((rc = rm_get_data(job_elem, RM_JobDBJobID, &job_id))
@@ -428,6 +428,10 @@ static void _part_op(bgl_update_t *bgl_update_ptr)
 	pthread_t thread_agent;
 	int retries;
 
+	if ((bgl_update_list == NULL)
+	&&  ((bgl_update_list = list_create(_bgl_list_del)) == NULL))
+		fatal("malloc failure in start_job/list_create");
+
 	slurm_mutex_lock(&agent_cnt_mutex);
 	if (list_enqueue(bgl_update_list, bgl_update_ptr) == NULL)
 		fatal("malloc failure in _part_op/list_enqueue");
@@ -521,17 +525,11 @@ extern int start_job(struct job_record *job_ptr)
 	info("Queue start of job %u in BGL partition %s", 
 		job_ptr->job_id, bgl_part_id);
 
-	if ((bgl_update_list == NULL)
-	&&  ((bgl_update_list = list_create(_bgl_list_del)) == NULL)) {
-		fatal("malloc failure in start_job/list_create");
-		return SLURM_ERROR;
-	}
-
 	bgl_update_ptr = xmalloc(sizeof(bgl_update_t));
 	bgl_update_ptr->op = START_OP;
 	bgl_update_ptr->uid = job_ptr->user_id;
 	bgl_update_ptr->job_id = job_ptr->job_id;
-	bgl_update_ptr->bgl_part_id = bgl_part_id;
+	bgl_update_ptr->bgl_part_id = xstrdup(bgl_part_id);
 	_part_op(bgl_update_ptr);
 #endif
 	return rc;
@@ -556,7 +554,7 @@ int term_jobs_on_part(pm_partition_id_t bgl_part_id)
 	}
 	bgl_update_ptr = xmalloc(sizeof(bgl_update_t));
 	bgl_update_ptr->op = TERM_OP;
-	bgl_update_ptr->bgl_part_id = bgl_part_id;
+	bgl_update_ptr->bgl_part_id = xstrdup(bgl_part_id);
 	_part_op(bgl_update_ptr);
 	
 	return rc;
@@ -589,7 +587,7 @@ int term_job(struct job_record *job_ptr)
 	bgl_update_ptr->op = TERM_OP;
 	bgl_update_ptr->uid = job_ptr->user_id;
 	bgl_update_ptr->job_id = job_ptr->job_id;
-	bgl_update_ptr->bgl_part_id = bgl_part_id;
+	bgl_update_ptr->bgl_part_id = xstrdup(bgl_part_id);
 	_part_op(bgl_update_ptr);
 #endif
 	return rc;
@@ -622,7 +620,7 @@ extern int sync_jobs(List job_list)
 		bgl_update_ptr->op = SYNC_OP;
 		bgl_update_ptr->uid = job_ptr->user_id;
 		bgl_update_ptr->job_id = job_ptr->job_id;
-		bgl_update_ptr->bgl_part_id = bgl_part_id;
+		bgl_update_ptr->bgl_part_id = xstrdup(bgl_part_id);
 		_part_op(bgl_update_ptr);
 		_excise_block(block_list, bgl_part_id);
 	}
@@ -635,7 +633,7 @@ extern int sync_jobs(List job_list)
 			bgl_part_id);
 		bgl_update_ptr = xmalloc(sizeof(bgl_update_t));
 		bgl_update_ptr->op = TERM_OP;
-		bgl_update_ptr->bgl_part_id = bgl_part_id;
+		bgl_update_ptr->bgl_part_id = xstrdup(bgl_part_id);
 		_part_op(bgl_update_ptr);
 	}
 	list_iterator_destroy(block_iterator);