diff --git a/src/common/pack.c b/src/common/pack.c
index 7fbb12500e6afe4926863e1f67d7c0f5ab61102a..2ee6ac3608222eedc30582445336c344316d8bf9 100644
--- a/src/common/pack.c
+++ b/src/common/pack.c
@@ -49,6 +49,7 @@
  */
 strong_alias(create_buf,	slurm_create_buf);
 strong_alias(free_buf,		slurm_free_buf);
+strong_alias(grow_buf,		slurm_grow_buf);
 strong_alias(init_buf,		slurm_init_buf);
 strong_alias(xfer_buf_data,	slurm_xfer_buf_data);
 strong_alias(pack_time,		slurm_pack_time);
@@ -96,6 +97,13 @@ void free_buf(Buf my_buf)
 	xfree(my_buf);
 }
 
+/* Grow a buffer by the specified amount */
+void grow_buf (Buf buffer, int size)
+{
+	buffer->size += size;
+	xrealloc(buffer->head, buffer->size);
+}
+
 /* init_buf - create an empty buffer of the given size */
 Buf init_buf(int size)
 {
diff --git a/src/common/pack.h b/src/common/pack.h
index 588bca7133e2f525dfd8aab90df4c7f123e1e036..d8f5c791735c5abb3c0801f685d1b0dc11c44226 100644
--- a/src/common/pack.h
+++ b/src/common/pack.h
@@ -66,6 +66,7 @@ typedef struct slurm_buf * Buf;
 Buf	create_buf (char *data, int size);
 void	free_buf(Buf my_buf);
 Buf	init_buf(int size);
+void    grow_buf (Buf my_buf, int size);
 void	*xfer_buf_data(Buf my_buf);
 
 void	pack_time(time_t val, Buf buffer);
diff --git a/src/common/slurm_protocol_pack.c b/src/common/slurm_protocol_pack.c
index 6157420897d4ad3528835f6faaf6673be5ad3bef..21fb012ceb034a389239c162525caf2143f2208c 100644
--- a/src/common/slurm_protocol_pack.c
+++ b/src/common/slurm_protocol_pack.c
@@ -3581,9 +3581,13 @@ _unpack_checkpoint_resp_msg(checkpoint_resp_msg_t **msg_ptr, Buf buffer)
 
 static void _pack_file_bcast(file_bcast_msg_t * msg , Buf buffer )
 {
-	int i;
+	int buf_size = 1024, i;
 	xassert ( msg != NULL );
 
+	for (i=0; i<FILE_BLOCKS; i++)
+		buf_size += msg->block_len[i];
+	grow_buf(buffer, buf_size);
+	
 	pack16 ( msg->block_no, buffer );
 	pack16 ( msg->last_block, buffer );
 	pack16 ( msg->force, buffer );
diff --git a/src/common/slurm_xlator.h b/src/common/slurm_xlator.h
index 442b53489830b001848d893793843e804d105dbc..e3e15ba47d660d98c4397f02c99b4df29e56b9bc 100644
--- a/src/common/slurm_xlator.h
+++ b/src/common/slurm_xlator.h
@@ -187,6 +187,7 @@
 /* pack.[ch] functions */
 #define	create_buf		slurm_create_buf
 #define	free_buf		slurm_free_buf
+#define grow_buf		slurm_grow_buf
 #define	init_buf		slurm_init_buf
 #define	xfer_buf_data		slurm_xfer_buf_data
 #define	pack_time		slurm_pack_time
diff --git a/src/sbcast/agent.c b/src/sbcast/agent.c
index d2aaf473591200f2d981a163b787cd25157e1b69..56399d14c1d8c6dc7d018e2cd25492873a728419 100644
--- a/src/sbcast/agent.c
+++ b/src/sbcast/agent.c
@@ -50,7 +50,7 @@
 #include "src/sbcast/sbcast.h"
 
 #define MAX_RETRIES     10
-#define MAX_THREADS      3	/* These can be huge messages, so
+#define MAX_THREADS      4	/* These can be huge messages, so
 				 * only run MAX_THREADS at one time */
 typedef struct thd {
 	pthread_t thread;	/* thread ID */