diff --git a/src/api/allocate.c b/src/api/allocate.c
index f50a383db00a059d69d9520fad7f0150d492cf67..0c0ef4f4a6339e49fc490a4c7c277bb63eec2f0b 100644
--- a/src/api/allocate.c
+++ b/src/api/allocate.c
@@ -38,15 +38,12 @@
  * slurm_allocate_resources - allocate resources for a job request
  * IN job_desc_msg - description of resource allocation request
  * OUT slurm_alloc_msg - response to request
- * IN immediate - if set then resource allocation must be satisfied 
- *	immediately or fail
  * RET 0 on success or slurm error code
  * NOTE: free the allocated using slurm_free_resource_allocation_response_msg
  */
 int
 slurm_allocate_resources (job_desc_msg_t * job_desc_msg , 
-			resource_allocation_response_msg_t ** slurm_alloc_msg, 
-			int immediate )
+			resource_allocation_response_msg_t ** slurm_alloc_msg )
 {
 	int msg_size ;
 	int rc ;
@@ -63,10 +60,7 @@ slurm_allocate_resources (job_desc_msg_t * job_desc_msg ,
 	}
 
 	/* send request message */
-	if ( immediate )
-		request_msg.msg_type = REQUEST_IMMEDIATE_RESOURCE_ALLOCATION ;
-	else
-		request_msg . msg_type = REQUEST_RESOURCE_ALLOCATION ;
+	request_msg . msg_type = REQUEST_RESOURCE_ALLOCATION ;
 	request_msg . data = job_desc_msg ; 
 	if ( ( rc = slurm_send_controller_msg ( sockfd , & request_msg ) ) 
 			== SLURM_SOCKET_ERROR ) {
@@ -104,7 +98,6 @@ slurm_allocate_resources (job_desc_msg_t * job_desc_msg ,
 			*slurm_alloc_msg = NULL;
 			break ;
 		case RESPONSE_RESOURCE_ALLOCATION:
-		case RESPONSE_IMMEDIATE_RESOURCE_ALLOCATION:
 			/* Calling method is responsible to free this memory */
 			*slurm_alloc_msg = 
 				( resource_allocation_response_msg_t * ) 
@@ -146,6 +139,7 @@ int slurm_job_will_run (job_desc_msg_t * job_desc_msg ,
 	}
 
 	/* send request message */
+	/* job_desc_msg.immediate = true;	implicit */
 	request_msg . msg_type = REQUEST_JOB_WILL_RUN ;
 	request_msg . data = job_desc_msg ; 
 	if ( ( rc = slurm_send_controller_msg ( sockfd , & request_msg ) ) 
@@ -437,4 +431,3 @@ slurm_confirm_allocation (old_job_alloc_msg_t * job_desc_msg ,
 
 	return SLURM_PROTOCOL_SUCCESS ;
 }
-
diff --git a/src/api/init_msg.c b/src/api/init_msg.c
index 6fd6a5f1ac3fd47ddb477a765a4e8683ed39fdda..4008e66efd9f059d3b136222796372d4a7f66ab6 100644
--- a/src/api/init_msg.c
+++ b/src/api/init_msg.c
@@ -45,6 +45,7 @@ void slurm_init_job_desc_msg(job_desc_msg_t * job_desc_msg)
 	job_desc_msg->environment = ((char **) NULL);
 	job_desc_msg->env_size    = 0;
 	job_desc_msg->features    = NULL;
+	job_desc_msg->immediate   = 0;
 	job_desc_msg->job_id      = NO_VAL;
 	job_desc_msg->kill_on_node_fail = (uint16_t) NO_VAL;
 	job_desc_msg->name        = NULL;
diff --git a/src/api/slurm.h b/src/api/slurm.h
index 09f73c5602aac74a97f0208dc1d100cdcccb6c5c..293b59498707d9b735fd741f41587edc06257f18 100644
--- a/src/api/slurm.h
+++ b/src/api/slurm.h
@@ -132,6 +132,8 @@ typedef struct job_descriptor {	/* For submit, allocate, and update requests */
 	uint16_t env_size;	/* element count in environment */
 	char *features;		/* comma separated list of required features, 
 				 * default NONE */
+	uint16_t immediate;	/* 1 if allocate to run or fail immediately, 
+				 * 0 if to be queued awaiting resources */
 	uint32_t job_id;	/* job ID, default set by SLURM */
 	char *name;		/* name of the job, default "" */
 	uint32_t min_procs;	/* minimum processors per node, default=0 */
@@ -377,14 +379,11 @@ extern void slurm_init_job_desc_msg (job_desc_msg_t * job_desc_msg);
  * slurm_allocate_resources - allocate resources for a job request
  * IN job_desc_msg - description of resource allocation request
  * OUT slurm_alloc_msg - response to request
- * IN immediate - if set then resource allocation must be satisfied 
- *	immediately or fail
  * RET 0 on success or slurm error code
  * NOTE: free the allocated using slurm_free_resource_allocation_response_msg
  */
 extern int slurm_allocate_resources (job_desc_msg_t * job_desc_msg , 
-		resource_allocation_response_msg_t ** job_alloc_resp_msg, 
-		int immediate ) ;
+		resource_allocation_response_msg_t ** job_alloc_resp_msg ) ;
 
 /*
  * slurm_free_resource_allocation_response_msg - free slurm resource
diff --git a/src/api/submit.c b/src/api/submit.c
index 9c8b98ccb509d21c7c5c0bd627271a7e04b15444..875e0b757d34193569c110e66714e10e5d6d9c60 100644
--- a/src/api/submit.c
+++ b/src/api/submit.c
@@ -61,6 +61,7 @@ slurm_submit_batch_job (job_desc_msg_t * job_desc_msg,
 	}
 
         /* send request message */
+	/* job_desc_msg.immediate = false;	implicit */
         request_msg . msg_type = REQUEST_SUBMIT_BATCH_JOB ;
         request_msg . data = job_desc_msg ; 
 	if ( ( rc = slurm_send_controller_msg ( sockfd , & request_msg ) ) 
diff --git a/src/common/slurm_protocol_defs.h b/src/common/slurm_protocol_defs.h
index 1147d93a2fb3e9e1d9cccfdae7ac238a332b49ee..50d7a87c4997aebde1bfb4db8ac1062934097268 100644
--- a/src/common/slurm_protocol_defs.h
+++ b/src/common/slurm_protocol_defs.h
@@ -112,8 +112,6 @@ typedef enum {
 	RESPONSE_JOB_RESOURCE,
 	REQUEST_JOB_ATTACH,
 	RESPONSE_JOB_ATTACH,
-	REQUEST_IMMEDIATE_RESOURCE_ALLOCATION,
-	RESPONSE_IMMEDIATE_RESOURCE_ALLOCATION,
 	REQUEST_JOB_WILL_RUN,
 	RESPONSE_JOB_WILL_RUN,
 	REQUEST_REVOKE_JOB_CREDENTIAL,
diff --git a/src/common/slurm_protocol_pack.c b/src/common/slurm_protocol_pack.c
index 091844a398fc822c0614385bbaec6ee867f1789a..118d7049d6b62d9e09e7f2b8b0634577828bf534 100644
--- a/src/common/slurm_protocol_pack.c
+++ b/src/common/slurm_protocol_pack.c
@@ -320,7 +320,6 @@ pack_msg(slurm_msg_t const *msg, Buf buffer)
 		 break;
 	 case REQUEST_RESOURCE_ALLOCATION:
 	 case REQUEST_SUBMIT_BATCH_JOB:
-	 case REQUEST_IMMEDIATE_RESOURCE_ALLOCATION:
 	 case REQUEST_JOB_WILL_RUN:
 	 case REQUEST_ALLOCATION_AND_RUN_JOB_STEP:
 	 case REQUEST_UPDATE_JOB:
@@ -346,7 +345,6 @@ pack_msg(slurm_msg_t const *msg, Buf buffer)
 					   msg->data, buffer);
 		 break;
 	 case RESPONSE_RESOURCE_ALLOCATION:
-	 case RESPONSE_IMMEDIATE_RESOURCE_ALLOCATION:
 	 case RESPONSE_JOB_WILL_RUN:
 		 _pack_resource_allocation_response_msg
 		     ((resource_allocation_response_msg_t *) msg->data,
@@ -507,7 +505,6 @@ unpack_msg(slurm_msg_t * msg, Buf buffer)
 		 break;
 	 case REQUEST_RESOURCE_ALLOCATION:
 	 case REQUEST_SUBMIT_BATCH_JOB:
-	 case REQUEST_IMMEDIATE_RESOURCE_ALLOCATION:
 	 case REQUEST_JOB_WILL_RUN:
 	 case REQUEST_ALLOCATION_AND_RUN_JOB_STEP:
 	 case REQUEST_UPDATE_JOB:
@@ -534,7 +531,6 @@ unpack_msg(slurm_msg_t * msg, Buf buffer)
 						  & (msg->data), buffer);
 		 break;
 	 case RESPONSE_RESOURCE_ALLOCATION:
-	 case RESPONSE_IMMEDIATE_RESOURCE_ALLOCATION:
 	 case RESPONSE_JOB_WILL_RUN:
 		 rc = _unpack_resource_allocation_response_msg(
 				(resource_allocation_response_msg_t **)
@@ -1683,6 +1679,7 @@ _pack_job_desc_msg(job_desc_msg_t * job_desc_ptr, Buf buffer)
 	packstr(job_desc_ptr->out, buffer);
 	packstr(job_desc_ptr->work_dir, buffer);
 
+	pack16(job_desc_ptr->immediate, buffer);
 	pack16(job_desc_ptr->shared, buffer);
 	pack32(job_desc_ptr->time_limit, buffer);
 
@@ -1733,6 +1730,7 @@ _unpack_job_desc_msg(job_desc_msg_t ** job_desc_buffer_ptr, Buf buffer)
 	safe_unpackstr_xmalloc(&job_desc_ptr->out, &uint16_tmp, buffer);
 	safe_unpackstr_xmalloc(&job_desc_ptr->work_dir, &uint16_tmp, buffer);
 
+	safe_unpack16(&job_desc_ptr->immediate, buffer);
 	safe_unpack16(&job_desc_ptr->shared, buffer);
 	safe_unpack32(&job_desc_ptr->time_limit, buffer);
 
diff --git a/src/slurmctld/controller.c b/src/slurmctld/controller.c
index b3b1f1f520c2fc3dd2869cd552dd4217b3299300..3246e657c34d78f31af3096bd21d5fcb67be3b31 100644
--- a/src/slurmctld/controller.c
+++ b/src/slurmctld/controller.c
@@ -114,8 +114,7 @@ static void         _run_backup(void);
 inline static void  _save_all_state(void);
 static void *       _service_connection(void *arg);
 static int          _shutdown_backup_controller(void);
-inline static void _slurm_rpc_allocate_resources(slurm_msg_t * msg,
-		 				 uint8_t immediate);
+inline static void  _slurm_rpc_allocate_resources(slurm_msg_t * msg);
 inline static void  _slurm_rpc_allocate_and_run(slurm_msg_t * msg);
 inline static void  _slurm_rpc_dump_build(slurm_msg_t * msg);
 inline static void  _slurm_rpc_dump_nodes(slurm_msg_t * msg);
@@ -692,11 +691,7 @@ static void _slurmctld_req (slurm_msg_t * msg)
 		slurm_free_last_update_msg(msg->data);
 		break;
 	case REQUEST_RESOURCE_ALLOCATION:
-		_slurm_rpc_allocate_resources(msg, false);
-		slurm_free_job_desc_msg(msg->data);
-		break;
-	case REQUEST_IMMEDIATE_RESOURCE_ALLOCATION:
-		_slurm_rpc_allocate_resources(msg, true);
+		_slurm_rpc_allocate_resources(msg);
 		slurm_free_job_desc_msg(msg->data);
 		break;
 	case REQUEST_ALLOCATION_AND_RUN_JOB_STEP:
@@ -1366,7 +1361,7 @@ static void _slurm_rpc_submit_batch_job(slurm_msg_t * msg)
 
 /* _slurm_rpc_allocate_resources:  process RPC to allocate resources for 
  *	a job */
-static void _slurm_rpc_allocate_resources(slurm_msg_t * msg, uint8_t immediate)
+static void _slurm_rpc_allocate_resources(slurm_msg_t * msg)
 {
 	/* init */
 	int error_code = 0;
@@ -1387,11 +1382,7 @@ static void _slurm_rpc_allocate_resources(slurm_msg_t * msg, uint8_t immediate)
 	slurm_addr *node_addr;
 
 	start_time = clock();
-	if (immediate)
-		debug
-		    ("Processing RPC: REQUEST_IMMEDIATE_RESOURCE_ALLOCATION");
-	else
-		debug("Processing RPC: REQUEST_RESOURCE_ALLOCATION");
+	debug("Processing RPC: REQUEST_RESOURCE_ALLOCATION");
 
 	/* do RPC call */
 	dump_job_desc(job_desc_msg);
@@ -1403,6 +1394,7 @@ static void _slurm_rpc_allocate_resources(slurm_msg_t * msg, uint8_t immediate)
 		      (unsigned int) uid);
 	}
 	if (error_code == 0) {
+		int immediate = job_desc_msg->immediate;
 		lock_slurmctld(job_write_lock);
 		error_code = job_allocate(job_desc_msg, &job_id,
 					  &node_list_ptr, &num_cpu_groups,
@@ -1432,9 +1424,7 @@ static void _slurm_rpc_allocate_resources(slurm_msg_t * msg, uint8_t immediate)
 		alloc_msg.cpu_count_reps = cpu_count_reps;
 		alloc_msg.node_cnt = node_cnt;
 		alloc_msg.node_addr = node_addr;
-		response_msg.msg_type = (immediate) ?
-		    RESPONSE_IMMEDIATE_RESOURCE_ALLOCATION :
-		    RESPONSE_RESOURCE_ALLOCATION;
+		response_msg.msg_type = RESPONSE_RESOURCE_ALLOCATION;
 		response_msg.data = &alloc_msg;
 
 		slurm_send_node_msg(msg->conn_fd, &response_msg);
@@ -1481,11 +1471,12 @@ static void _slurm_rpc_allocate_and_run(slurm_msg_t * msg)
 	}
 
 	if (error_code == 0) {
+		int immediate = job_desc_msg->immediate;
 		lock_slurmctld(job_write_lock);
 		error_code = job_allocate(job_desc_msg, &job_id,
 					  &node_list_ptr, &num_cpu_groups,
 					  &cpus_per_node, &cpu_count_reps,
-					  true, false, true, uid,
+					  immediate, false, true, uid,
 					  &node_cnt, &node_addr);
 	}
 
@@ -1520,22 +1511,22 @@ static void _slurm_rpc_allocate_and_run(slurm_msg_t * msg)
 		   node_list_ptr, job_id, (long) (clock() - start_time));
 
 		/* send job_ID  and node_name_ptr */
-		alloc_msg.job_id = job_id;
-		alloc_msg.node_list = node_list_ptr;
+		alloc_msg.job_id         = job_id;
+		alloc_msg.node_list      = node_list_ptr;
 		alloc_msg.num_cpu_groups = num_cpu_groups;
-		alloc_msg.cpus_per_node = cpus_per_node;
+		alloc_msg.cpus_per_node  = cpus_per_node;
 		alloc_msg.cpu_count_reps = cpu_count_reps;
-		alloc_msg.job_step_id = step_rec->step_id;
-		alloc_msg.node_cnt = node_cnt;
-		alloc_msg.node_addr = node_addr;
-		alloc_msg.credentials =
-		    &step_rec->job_ptr->details->credential;
+		alloc_msg.job_step_id    = step_rec->step_id;
+		alloc_msg.node_cnt       = node_cnt;
+		alloc_msg.node_addr      = node_addr;
+		alloc_msg.credentials    =
+			    &step_rec->job_ptr->details->credential;
 #ifdef HAVE_LIBELAN3
 		alloc_msg.qsw_job = step_rec->qsw_job;
 #endif
 		unlock_slurmctld(job_write_lock);
 		response_msg.msg_type =
-		    RESPONSE_ALLOCATION_AND_RUN_JOB_STEP;
+				    RESPONSE_ALLOCATION_AND_RUN_JOB_STEP;
 		response_msg.data = &alloc_msg;
 
 		slurm_send_node_msg(msg->conn_fd, &response_msg);
@@ -1557,8 +1548,7 @@ static void _slurm_rpc_old_job_alloc(slurm_msg_t * msg)
 	resource_allocation_response_msg_t alloc_msg;
 	/* Locks: Read job, read node */
 	slurmctld_lock_t job_read_lock = { NO_LOCK, READ_LOCK,
-		READ_LOCK, NO_LOCK
-	};
+		READ_LOCK, NO_LOCK };
 	uint16_t node_cnt;
 	slurm_addr *node_addr;
 	uid_t uid;
@@ -1598,18 +1588,17 @@ static void _slurm_rpc_old_job_alloc(slurm_msg_t * msg)
 
 		/* send job_ID  and node_name_ptr */
 
-		alloc_msg.job_id = job_desc_msg->job_id;
-		alloc_msg.node_list = node_list_ptr;
+		alloc_msg.job_id         = job_desc_msg->job_id;
+		alloc_msg.node_list      = node_list_ptr;
 		alloc_msg.num_cpu_groups = num_cpu_groups;
-		alloc_msg.cpus_per_node = cpus_per_node;
+		alloc_msg.cpus_per_node  = cpus_per_node;
 		alloc_msg.cpu_count_reps = cpu_count_reps;
-		alloc_msg.node_cnt = node_cnt;
-		alloc_msg.node_addr = node_addr;
-		response_msg.msg_type = RESPONSE_RESOURCE_ALLOCATION;
-		response_msg.data = &alloc_msg;
+		alloc_msg.node_cnt       = node_cnt;
+		alloc_msg.node_addr      = node_addr;
+		response_msg.msg_type    = RESPONSE_RESOURCE_ALLOCATION;
+		response_msg.data        = &alloc_msg;
 
 		slurm_send_node_msg(msg->conn_fd, &response_msg);
-		(void) dump_all_job_state();
 	}
 }
 
diff --git a/src/srun/srun.c b/src/srun/srun.c
index fdd28dfe9fd26c4fd8acea5abb4d40dfa1eb4c7c..95659ef7228aba67beff50429478e6e2d8e51ff3 100644
--- a/src/srun/srun.c
+++ b/src/srun/srun.c
@@ -307,6 +307,7 @@ _allocate_nodes(void)
 
 	job.contiguous     = opt.contiguous;
 	job.features       = opt.constraints;
+	job.immediate      = opt.immediate;
 	job.name           = opt.job_name;
 	job.req_nodes      = opt.nodelist;
 	job.partition      = opt.partition;
@@ -333,7 +334,7 @@ _allocate_nodes(void)
 		job.shared		= 1;
 
 	retries = 0;
-	while ((rc = slurm_allocate_resources(&job, &resp, opt.immediate))
+	while ((rc = slurm_allocate_resources(&job, &resp))
 					== SLURM_FAILURE) {
 		if ((slurm_get_errno() == ESLURM_ERROR_ON_DESC_TO_RECORD_COPY) 
 		    && (retries < MAX_RETRIES)) {
@@ -366,9 +367,10 @@ _allocate_nodes(void)
 		/* Keep polling until the job is allocated resources */
 		while (slurm_confirm_allocation(&old_job, &resp) == 
 							SLURM_FAILURE) {
-			if (slurm_get_errno() == ESLURM_JOB_PENDING)
+			if (slurm_get_errno() == ESLURM_JOB_PENDING) {
+				debug3("Still waiting for allocation");
 				sleep (10);
-			else {
+			} else {
 				error("Unable to confirm resource allocation for job %u: %s", 
 					old_job.job_id, slurm_strerror(errno));
 				exit (1);
@@ -395,6 +397,7 @@ _alloc_nodes_step(void)
 
 	job.contiguous     = opt.contiguous;
 	job.features       = opt.constraints;
+	job.immediate      = opt.immediate;
 	job.name           = opt.job_name;
 	job.req_nodes      = opt.nodelist;
 	job.partition      = opt.partition;