diff --git a/src/common/qsw.h b/src/common/qsw.h
index 597cd5f08e98a952aec7ba579b3a63dc46ed1064..9308289bd49ebf897b29916fcef666f460366338 100644
--- a/src/common/qsw.h
+++ b/src/common/qsw.h
@@ -3,6 +3,8 @@
  *
  * Copyright (C) 2001-2002 Regents of the University of California
  */
+#include <sys/types.h>
+#include <src/common/bitstring.h>
 
 #ifndef _QSW_INCLUDED
 #define _QSW_INCLUDED
diff --git a/src/common/slurm_protocol_defs.h b/src/common/slurm_protocol_defs.h
index 284a64b6dd208d84370078b2c72126d561586b28..91a5f4d03433410b8b4534b59be3dbd0b469ca9f 100644
--- a/src/common/slurm_protocol_defs.h
+++ b/src/common/slurm_protocol_defs.h
@@ -86,7 +86,9 @@ enum part_shared {
 	SHARED_YES,		/* Nodes possible to share in partition */
 	SHARED_FORCE		/* Nodes always shares in partition */
 };
-
+#ifdef HAVE_LIBELAN3
+#include <src/common/qsw.h>
+#endif
 #include <src/common/macros.h>
 #include <src/common/slurm_protocol_common.h>
 
@@ -371,7 +373,7 @@ typedef struct job_step_create_response_msg
 	char* node_list;
 	slurm_job_credential_t* credentials;
 #ifdef HAVE_LIBELAN3
-    qsw_jobinfo_t qsw_job;     /* Elan3 switch context, opaque data structure */
+    	qsw_jobinfo_t qsw_job;     /* Elan3 switch context, opaque data structure */
 #endif
 	
 } job_step_create_response_msg_t; 
diff --git a/src/common/slurm_protocol_pack.c b/src/common/slurm_protocol_pack.c
index b49563e3d3d0feb42940c17a64b7dcd1ea543c9a..cbe9e687dfc8bdeb2afbde3f08a3642cd12fa2f2 100644
--- a/src/common/slurm_protocol_pack.c
+++ b/src/common/slurm_protocol_pack.c
@@ -537,7 +537,7 @@ int unpack_resource_allocation_and_run_response_msg ( resource_allocation_and_ru
 	unpack_job_credential( &tmp_ptr->credentials, ( void ** ) buffer , length ) ;
 #ifdef HAVE_LIBELAN3
 	/* put the elan3 stuff here */	
-	slurm_qsw_unpack_jobinfo(& msg -> qsw_job , (void **) data, length ) ;
+	slurm_qsw_unpack_jobinfo(& tmp_ptr -> qsw_job , (void **) buffer , length ) ;
 #endif
 
 	*msg = tmp_ptr ;
@@ -783,7 +783,7 @@ void slurm_qsw_pack_jobinfo(qsw_jobinfo_t j, void **data, int * len)
 	if ( packlen > 0 )
 	{
 		*len -= packlen ;
-		*data += packlen ;
+		((char *) *data) += packlen ;
 	}
 }
 
@@ -791,20 +791,21 @@ int slurm_qsw_unpack_jobinfo(qsw_jobinfo_t * j, void **data, int *len)
 {
 	int packlen ;
 	/* *j = xmalloc ( sizeof ( struct qsw_jobinfo )  ) ; */
-	qsw_alloc_jobinfo( *j ) ;
+	qsw_alloc_jobinfo( j ) ;
 	packlen = qsw_unpack_jobinfo ( *j , *data , * len ) ;
 	if ( packlen > 0 )
 	{
 		*len -= packlen ;
-		*data += packlen ;
+		((char *) *data) += packlen ;
 	}
 	return 0 ;
 }
-
+/* Need to explicitly advance pointer and index here */
+/*
 void pack_qsw_jobinfo( qsw_jobinfo *msg, void ** buffer , uint32_t * length )
 {
 	int len = qsw_pack_jobinfo ( msg , *buf_ptr, *buf_len);
-	if (len > 0) {      /* Need to explicitly advance pointer and index here */
+	if (len > 0) {     
 		*buffer = (void *) ((char *)*buf_ptr + len);
 		*length += len;
 	}
@@ -819,11 +820,12 @@ void unpack_qsw_jobinfo( qsw_jobinfo ** msg, void ** buffer , uint32_t * length
 	qsw_alloc_jobinfo( temp ) ;
 
 	len = qsw_unpack_jobinfo ( *msg, *buf_ptr, *buf_len);
-	if (len > 0) {      /* Need to explicitly advance pointer and index here */
+	if (len > 0) {      
 		*buffer = (void *) ((char *)*buf_ptr - len);
 		*length -= len;
 	}
 }
+*/
 #endif
 
 void pack_job_step_create_response_msg (  job_step_create_response_msg_t* msg , void ** buffer , uint32_t * length )
@@ -856,7 +858,7 @@ int unpack_job_step_create_response_msg (job_step_create_response_msg_t** msg ,
 	*msg = tmp_ptr;
 #ifdef HAVE_LIBELAN3
 	/* put the elan3 stuff here */	
-	slurm_qsw_unpack_jobinfo(& msg -> qsw_job , (void **) data, length ) ;
+	slurm_qsw_unpack_jobinfo(& tmp_ptr -> qsw_job , (void **) buffer , length ) ;
 #endif
 	return 0;
 }
@@ -1409,7 +1411,7 @@ int unpack_launch_tasks_request_msg ( launch_tasks_request_msg_t ** msg_ptr , vo
 	unpack32_array ( & msg -> global_task_ids , & uint16_tmp , buffer , length ) ;
 #ifdef HAVE_LIBELAN3
 	/* put the elan3 stuff here */	
-	slurm_qsw_unpack_jobinfo(& msg -> qsw_job , (void **) data, length ) ;
+	slurm_qsw_unpack_jobinfo(& msg -> qsw_job , (void **) buffer , length ) ;
 #endif
 	*msg_ptr = msg ;
 	return 0 ;