diff --git a/src/common/slurm_protocol_defs.h b/src/common/slurm_protocol_defs.h
index 97d7d17f715fc85a60cd2d706c0d28e6dc747ba0..87271b1d6baf90066071a20d95acfaefb3fe0828 100644
--- a/src/common/slurm_protocol_defs.h
+++ b/src/common/slurm_protocol_defs.h
@@ -195,6 +195,11 @@ typedef struct job_id_msg {
 	uint32_t job_id;
 } job_id_msg_t ;
 
+typedef struct job_step_id_msg {
+	uint32_t job_id;
+	uint32_t job_step_id ;
+} job_step_id_msg_t ;
+
 typedef struct slurm_update_node_msg
 {
 	char * node_names ;
diff --git a/src/common/slurm_protocol_pack.c b/src/common/slurm_protocol_pack.c
index 891a03e9d574ae5290bffbf4593389eec1952e52..d1bc56eb85ac7430b49c8e445def9792a409866f 100644
--- a/src/common/slurm_protocol_pack.c
+++ b/src/common/slurm_protocol_pack.c
@@ -132,13 +132,17 @@ int pack_msg ( slurm_msg_t const * msg , char ** buffer , uint32_t * buf_len )
 			pack_launch_tasks_msg ( ( launch_tasks_msg_t * ) msg->data , ( void ** ) buffer , buf_len ) ;
 			break ;
 		case REQUEST_KILL_TASKS :
-			pack_kill_tasks_msg ( ( kill_tasks_msg_t * ) msg->data , ( void ** ) buffer , buf_len ) ;
+			pack_cancel_tasks_msg ( ( kill_tasks_msg_t * ) msg->data , ( void ** ) buffer , buf_len ) ;
 			break ;
 
 
 		case REQUEST_CANCEL_JOB :
+			pack_cancel_job_msg ( ( job_id_msg_t * ) msg->data , 
+				( void ** ) buffer , buf_len ) ;
 			break ;
 		case REQUEST_CANCEL_JOB_STEP :
+			pack_cancel_job_step_msg ( ( job_step_id_msg_t * ) msg->data , 
+				( void ** ) buffer , buf_len ) ;
 			break ;
 		case REQUEST_SIGNAL_JOB :
 			break ;
@@ -256,12 +260,16 @@ int unpack_msg ( slurm_msg_t * msg , char ** buffer , uint32_t * buf_len )
 				( void ** ) buffer , buf_len ) ;
 			break ; 
 		case REQUEST_KILL_TASKS :
-			unpack_kill_tasks_msg ( ( kill_tasks_msg_t ** ) & ( msg->data ) , 
+			unpack_cancel_tasks_msg ( ( kill_tasks_msg_t ** ) & ( msg->data ) , 
 				( void ** ) buffer , buf_len ) ;
 			break ;
 		case REQUEST_CANCEL_JOB :
+			unpack_cancel_job_msg ( ( job_id_msg_t ** ) & ( msg->data ) , 
+				( void ** ) buffer , buf_len ) ;
 			break ;
 		case REQUEST_CANCEL_JOB_STEP :
+			unpack_cancel_job_step_msg ( ( job_step_id_msg_t ** ) & ( msg->data ) , 
+				( void ** ) buffer , buf_len ) ;
 			break ;
 		case REQUEST_SIGNAL_JOB :
 			break ;
@@ -931,13 +939,13 @@ int unpack_launch_tasks_msg ( launch_tasks_msg_t ** msg_ptr , void ** buffer , u
 	return 0 ;
 }
 
-void pack_kill_tasks_msg ( kill_tasks_msg_t * msg , void ** buffer , uint32_t * length )
+void pack_cancel_tasks_msg ( kill_tasks_msg_t * msg , void ** buffer , uint32_t * length )
 {
 	pack32 ( msg -> job_id , buffer , length ) ;
 	pack32 ( msg -> job_step_id , buffer , length ) ;
 }
 
-int unpack_kill_tasks_msg ( kill_tasks_msg_t ** msg_ptr , void ** buffer , uint32_t * length )
+int unpack_cancel_tasks_msg ( kill_tasks_msg_t ** msg_ptr , void ** buffer , uint32_t * length )
 {
 	kill_tasks_msg_t * msg ;
 
@@ -954,6 +962,50 @@ int unpack_kill_tasks_msg ( kill_tasks_msg_t ** msg_ptr , void ** buffer , uint3
 	return 0 ;
 }
 
+void pack_cancel_job_msg ( job_id_msg_t * msg , void ** buffer , uint32_t * length )
+{
+	pack32 ( msg -> job_id , buffer , length ) ;
+}
+
+int unpack_cancel_job_msg ( job_id_msg_t ** msg_ptr , void ** buffer , uint32_t * length )
+{
+	job_id_msg_t * msg ;
+
+	msg = xmalloc ( sizeof ( job_id_msg_t ) ) ;
+	if ( msg == NULL) 
+	{
+		*msg_ptr = NULL ;
+		return ENOMEM ;
+	}
+
+	unpack32 ( & msg -> job_id , buffer , length ) ;
+	*msg_ptr = msg ;
+	return 0 ;
+}
+
+void pack_cancel_job_step_msg ( job_step_id_msg_t * msg , void ** buffer , uint32_t * length )
+{
+	pack32 ( msg -> job_id , buffer , length ) ;
+	pack32 ( msg -> job_step_id , buffer , length ) ;
+}
+
+int unpack_cancel_job_step_msg ( job_step_id_msg_t ** msg_ptr , void ** buffer , uint32_t * length )
+{
+	job_step_id_msg_t * msg ;
+
+	msg = xmalloc ( sizeof ( job_step_id_msg_t ) ) ;
+	if ( msg == NULL) 
+	{
+		*msg_ptr = NULL ;
+		return ENOMEM ;
+	}
+
+	unpack32 ( & msg -> job_id , buffer , length ) ;
+	unpack32 ( & msg -> job_step_id , buffer , length ) ;
+	*msg_ptr = msg ;
+	return 0 ;
+}
+
 /* template 
 void pack_ ( * msg , void ** buffer , uint32_t * length )
 {
diff --git a/src/common/slurm_protocol_pack.h b/src/common/slurm_protocol_pack.h
index a48bb6c52912c072b3423043b8aaf2004ee8f021..c1ff2a34cef685cbd88957006fafc8a2936fd431 100644
--- a/src/common/slurm_protocol_pack.h
+++ b/src/common/slurm_protocol_pack.h
@@ -58,6 +58,13 @@ int unpack_node_info_msg ( node_info_msg_t ** msg , void ** buf_ptr , int * buff
 int unpack_node_table_msg ( node_table_msg_t ** node , void ** buf_ptr , int * buffer_size );
 int unpack_node_table ( node_table_msg_t * node , void ** buf_ptr , int * buffer_size );
 
+void pack_cancel_job_msg ( job_id_msg_t * msg , void ** buffer , uint32_t * length );
+int unpack_cancel_job_msg ( job_id_msg_t ** msg_ptr , void ** buffer , uint32_t * length );
+void pack_cancel_job_step_msg ( job_step_id_msg_t * msg , void ** buffer , uint32_t * length );
+int unpack_cancel_job_step_msg ( job_step_id_msg_t ** msg_ptr , void ** buffer , uint32_t * length );
+void pack_cancel_tasks_msg ( kill_tasks_msg_t * msg , void ** buffer , uint32_t * length );
+int unpack_cancel_tasks_msg ( kill_tasks_msg_t ** msg_ptr , void ** buffer , uint32_t * length );
+
 void pack_resource_allocation_response_msg ( resource_allocation_response_msg_t * msg, void ** buffer , int * length );
 int unpack_resource_allocation_response_msg ( resource_allocation_response_msg_t ** msg , void ** buffer , int * length );
 
diff --git a/src/slurmctld/controller.c b/src/slurmctld/controller.c
index b28a3e1767da16ae41a5eba123152dbfd5171113..c79c3af229f65695160a160a04da04a99b5e85ee 100644
--- a/src/slurmctld/controller.c
+++ b/src/slurmctld/controller.c
@@ -364,14 +364,14 @@ slurm_rpc_job_cancel ( slurm_msg_t * msg )
 	/* return result */
 	if (error_code)
 	{
-		info ("slurmctld_req: job_cancel error %d, time=%ld",
-				error_code, (long) (clock () - start_time));
+		info ("slurmctld_req: job_cancel error %d for %u, time=%ld",
+			error_code, job_id_msg->job_id, (long) (clock () - start_time));
 		slurm_send_rc_msg ( msg , error_code );
 	}
 	else
 	{
-		info ("slurmctld_req: job_cancel success for %d, time=%ld",
-				job_id_msg->job_id, (long) (clock () - start_time));
+		info ("slurmctld_req: job_cancel success for %u, time=%ld",
+			job_id_msg->job_id, (long) (clock () - start_time));
 		slurm_send_rc_msg ( msg , SLURM_SUCCESS );
 	}