diff --git a/src/common/pack.h b/src/common/pack.h
index db32ad7802a383137bb48a75c717ba5d85dee50a..10acb515422371ae89527bcbf4ab588d9fab9fa2 100644
--- a/src/common/pack.h
+++ b/src/common/pack.h
@@ -86,13 +86,15 @@ void	_unpackmem_malloc(char **valp, uint16_t *size_valp, void **bufp, int *lenp)
 	_packmem(str,(uint16_t)_size,bufp,lenp);	\
 } while (0)				
 
-#define packint_array(array,_size,bufp,lenp) do {			\
+#define pack32_array(array,_size,bufp,lenp) packint_array(array,_size,bufp,lenp)
+#define packint_array(array,_size,bufp,lenp) do {	\
 	assert((bufp) != NULL && *(bufp) != NULL);	\
         assert((lenp) != NULL);				\
         assert(*(lenp) >= (sizeof(_size)+_size));	\
 	_pack32array(array,(uint16_t)_size,bufp,lenp);	\
 } while (0)				
 
+#define unpack32_array(array,_size,bufp,lenp) unpackint_array(array,_size,bufp,lenp)
 #define unpackint_array(valp,size_valp,bufp,lenp) do {	\
 	assert(valp != NULL);				\
 	assert(sizeof(size_valp) == sizeof(uint16_t *));\
diff --git a/src/common/slurm_protocol_defs.c b/src/common/slurm_protocol_defs.c
index 282675d894e31d2f9df4492fde09bb7a58b6de0a..645e0c2f6b5057e4dc5136ebcb115dfa56d89bee 100644
--- a/src/common/slurm_protocol_defs.c
+++ b/src/common/slurm_protocol_defs.c
@@ -243,12 +243,12 @@ void slurm_free_launch_tasks_msg ( launch_tasks_msg_t * msg )
 			xfree ( msg -> cwd );
 		if ( msg -> cmd_line )
 			xfree ( msg -> cmd_line );
+		if ( msg -> streams )
+			xfree ( msg -> streams );
+		if ( msg -> global_task_ids )
+			xfree ( msg -> global_task_ids );
 		xfree ( msg ) ;
 	}
-	/*stdin location*/
-	/*stdout location*/
-	/*stderr location*/
-	/*task completion location*/
 } 
 
 void slurm_free_kill_tasks_msg ( kill_tasks_msg_t * msg )
diff --git a/src/common/slurm_protocol_defs.h b/src/common/slurm_protocol_defs.h
index c7ed74e5c79d46c46775ff225574805c7af48de9..3e9db60db60035b7470ed29a83a93c4a26aef412 100644
--- a/src/common/slurm_protocol_defs.h
+++ b/src/common/slurm_protocol_defs.h
@@ -188,10 +188,8 @@ typedef struct launch_tasks_msg
 	char * env ;
 	char * cwd ;
 	char * cmd_line ;
-	/*stdin location*/
-	/*stdout location*/
-	/*stderr location*/
-	/*task completion location*/
+	slurm_addr * streams;
+	uint32_t * global_task_ids;
 } launch_tasks_msg_t ;
 
 typedef struct kill_tasks_msg
diff --git a/src/common/slurm_protocol_pack.c b/src/common/slurm_protocol_pack.c
index 428587e02325310164f66bb42220cab0e698f071..e3b60327cb0ce023030b50802dfb232bd7a9df3d 100644
--- a/src/common/slurm_protocol_pack.c
+++ b/src/common/slurm_protocol_pack.c
@@ -800,10 +800,8 @@ void pack_launch_tasks_msg ( launch_tasks_msg_t * msg , void ** buffer , uint32_
 	packstr ( msg -> env , buffer , length ) ;
 	packstr ( msg -> cwd , buffer , length ) ;
 	packstr ( msg -> cmd_line , buffer , length ) ;
-	/*stdin location*/
-	/*stdout location*/
-	/*stderr location*/
-	/*task completion location*/
+	pack_slurm_addr_array ( msg -> streams , ( uint16_t ) msg -> tasks_to_launch , buffer , length ) ;
+	pack32_array ( msg -> global_task_ids , ( uint16_t ) msg -> tasks_to_launch , buffer , length ) ;
 }
 
 int unpack_launch_tasks_msg ( launch_tasks_msg_t ** msg_ptr , void ** buffer , uint32_t * length )
@@ -827,10 +825,8 @@ int unpack_launch_tasks_msg ( launch_tasks_msg_t ** msg_ptr , void ** buffer , u
 	unpackstr_xmalloc ( & msg -> env , & uint16_tmp , buffer , length ) ;
 	unpackstr_xmalloc ( & msg -> cwd , & uint16_tmp , buffer , length ) ;
 	unpackstr_xmalloc ( & msg -> cmd_line , & uint16_tmp , buffer , length ) ;
-	/*stdin location*/
-	/*stdout location*/
-	/*stderr location*/
-	/*task completion location*/
+	unpack_slurm_addr_array ( & msg -> streams , & uint16_tmp , buffer , length ) ;
+	unpack32_array ( & msg -> global_task_ids , & uint16_tmp , buffer , length ) ;
 	*msg_ptr = msg ;
 	return 0 ;
 }
diff --git a/src/common/slurm_protocol_pack.h b/src/common/slurm_protocol_pack.h
index f305e94bb5dff68e1cb5bc9eb63b9a71e45fdfbf..42e1cb43bfe55961bca7002c86787ebbba32b04d 100644
--- a/src/common/slurm_protocol_pack.h
+++ b/src/common/slurm_protocol_pack.h
@@ -72,4 +72,7 @@ int unpack_launch_tasks_msg ( launch_tasks_msg_t ** msg_ptr , void ** buffer , u
 
 void pack_kill_tasks_msg ( kill_tasks_msg_t * msg , void ** buffer , uint32_t * length );
 int unpack_kill_tasks_msg ( kill_tasks_msg_t ** msg_ptr , void ** buffer , uint32_t * length );
+
+void pack_slurm_addr_array ( slurm_addr * slurm_address , uint16_t size_val, void ** buffer , int * length );
+void unpack_slurm_addr_array ( slurm_addr ** slurm_address , uint16_t * size_val , void ** buffer , int * length );
 #endif