diff --git a/src/common/gres.c b/src/common/gres.c
index aa8cfb583f70f03754e435898890c3c3c0dc6a38..aa7a9125a42c12eafe0f9f8019d790fe53648573 100644
--- a/src/common/gres.c
+++ b/src/common/gres.c
@@ -2695,9 +2695,9 @@ extern int gres_plugin_job_state_pack(List gres_list, Buf buffer,
 			if (gres_job_ptr->gres_bit_alloc) {
 				pack8((uint8_t) 1, buffer);
 				for (i = 0; i < gres_job_ptr->node_cnt; i++) {
-					pack_bit_str(gres_job_ptr->
-						     gres_bit_alloc[i],
-						     buffer);
+					pack_bit_str_hex(gres_job_ptr->
+							 gres_bit_alloc[i],
+							 buffer);
 				}
 			} else {
 				pack8((uint8_t) 0, buffer);
@@ -2705,9 +2705,9 @@ extern int gres_plugin_job_state_pack(List gres_list, Buf buffer,
 			if (details && gres_job_ptr->gres_bit_step_alloc) {
 				pack8((uint8_t) 1, buffer);
 				for (i = 0; i < gres_job_ptr->node_cnt; i++) {
-					pack_bit_str(gres_job_ptr->
-						     gres_bit_step_alloc[i],
-						     buffer);
+					pack_bit_str_hex(gres_job_ptr->
+							 gres_bit_step_alloc[i],
+							 buffer);
 				}
 			} else {
 				pack8((uint8_t) 0, buffer);
@@ -2824,10 +2824,10 @@ extern int gres_plugin_job_state_unpack(List *gres_list, Buf buffer,
 				gres_job_ptr->gres_bit_alloc =
 					xmalloc(sizeof(bitstr_t *) *
 						gres_job_ptr->node_cnt);
-				for (i=0; i<gres_job_ptr->node_cnt; i++) {
-					unpack_bit_str(&gres_job_ptr->
-						       gres_bit_alloc[i],
-						       buffer);
+				for (i = 0; i < gres_job_ptr->node_cnt; i++) {
+					unpack_bit_str_hex(&gres_job_ptr->
+							   gres_bit_alloc[i],
+							   buffer);
 				}
 			}
 			safe_unpack8(&has_more, buffer);
@@ -2835,10 +2835,10 @@ extern int gres_plugin_job_state_unpack(List *gres_list, Buf buffer,
 				gres_job_ptr->gres_bit_step_alloc =
 					xmalloc(sizeof(bitstr_t *) *
 						gres_job_ptr->node_cnt);
-				for (i=0; i<gres_job_ptr->node_cnt; i++) {
-					unpack_bit_str(&gres_job_ptr->
-						       gres_bit_step_alloc[i],
-						       buffer);
+				for (i = 0; i < gres_job_ptr->node_cnt; i++) {
+					unpack_bit_str_hex(&gres_job_ptr->
+							   gres_bit_step_alloc[i],
+							   buffer);
 				}
 			}
 			safe_unpack8(&has_more, buffer);
@@ -4820,7 +4820,23 @@ extern int gres_plugin_step_state_pack(List gres_list, Buf buffer,
 	gres_iter = list_iterator_create(gres_list);
 	while ((gres_ptr = (gres_state_t *) list_next(gres_iter))) {
 		gres_step_ptr = (gres_step_state_t *) gres_ptr->gres_data;
-		if (protocol_version >= SLURM_MIN_PROTOCOL_VERSION) {
+		if (protocol_version >= SLURM_14_11_PROTOCOL_VERSION) {
+			pack32(magic, buffer);
+			pack32(gres_ptr->plugin_id, buffer);
+			pack32(gres_step_ptr->gres_cnt_alloc, buffer);
+			pack32(gres_step_ptr->node_cnt, buffer);
+			pack_bit_str_hex(gres_step_ptr->node_in_use, buffer);
+			if (gres_step_ptr->gres_bit_alloc) {
+				pack8((uint8_t) 1, buffer);
+				for (i = 0; i < gres_step_ptr->node_cnt; i++)
+					pack_bit_str_hex(gres_step_ptr->
+							 gres_bit_alloc[i],
+							 buffer);
+			} else {
+				pack8((uint8_t) 0, buffer);
+			}
+			rec_cnt++;
+		} else if (protocol_version >= SLURM_MIN_PROTOCOL_VERSION) {
 			pack32(magic, buffer);
 			pack32(gres_ptr->plugin_id, buffer);
 			pack32(gres_step_ptr->gres_cnt_alloc, buffer);
@@ -4886,7 +4902,27 @@ extern int gres_plugin_step_state_unpack(List *gres_list, Buf buffer,
 			break;
 		rec_cnt--;
 
-		if (protocol_version >= SLURM_MIN_PROTOCOL_VERSION) {
+		if (protocol_version >= SLURM_14_11_PROTOCOL_VERSION) {
+			safe_unpack32(&magic, buffer);
+			if (magic != GRES_MAGIC)
+				goto unpack_error;
+			safe_unpack32(&plugin_id, buffer);
+			gres_step_ptr = xmalloc(sizeof(gres_step_state_t));
+			safe_unpack32(&gres_step_ptr->gres_cnt_alloc, buffer);
+			safe_unpack32(&gres_step_ptr->node_cnt, buffer);
+			unpack_bit_str_hex(&gres_step_ptr->node_in_use, buffer);
+			safe_unpack8(&has_file, buffer);
+			if (has_file) {
+				gres_step_ptr->gres_bit_alloc =
+					xmalloc(sizeof(bitstr_t *) *
+						gres_step_ptr->node_cnt);
+				for (i = 0; i < gres_step_ptr->node_cnt; i++) {
+					unpack_bit_str_hex(&gres_step_ptr->
+							   gres_bit_alloc[i],
+							   buffer);
+				}
+			}
+		} else if (protocol_version >= SLURM_MIN_PROTOCOL_VERSION) {
 			safe_unpack32(&magic, buffer);
 			if (magic != GRES_MAGIC)
 				goto unpack_error;
diff --git a/src/common/job_resources.c b/src/common/job_resources.c
index 96a4ea9d731050f4202a65ae363c9d7fe88fa581..03d0def0500e4bf066bcfe1a5b05c099e8f1a04d 100644
--- a/src/common/job_resources.c
+++ b/src/common/job_resources.c
@@ -531,7 +531,87 @@ extern void pack_job_resources(job_resources_t *job_resrcs_ptr, Buf buffer,
 {
 	uint32_t cluster_flags = slurmdb_setup_cluster_flags();
 
-	if (protocol_version >= SLURM_14_03_PROTOCOL_VERSION) {
+	if (protocol_version >= SLURM_14_11_PROTOCOL_VERSION) {
+		if (job_resrcs_ptr == NULL) {
+			uint32_t empty = NO_VAL;
+			pack32(empty, buffer);
+			return;
+		}
+
+		pack32(job_resrcs_ptr->nhosts, buffer);
+		pack32(job_resrcs_ptr->ncpus, buffer);
+		pack32(job_resrcs_ptr->node_req, buffer);
+		packstr(job_resrcs_ptr->nodes, buffer);
+		pack8(job_resrcs_ptr->whole_node, buffer);
+
+		if (job_resrcs_ptr->cpu_array_reps)
+			pack32_array(job_resrcs_ptr->cpu_array_reps,
+				     job_resrcs_ptr->cpu_array_cnt, buffer);
+		else
+			pack32_array(job_resrcs_ptr->cpu_array_reps, 0, buffer);
+
+		if (job_resrcs_ptr->cpu_array_value)
+			pack16_array(job_resrcs_ptr->cpu_array_value,
+				     job_resrcs_ptr->cpu_array_cnt, buffer);
+		else
+			pack16_array(job_resrcs_ptr->cpu_array_value,
+				     0, buffer);
+
+		if (job_resrcs_ptr->cpus)
+			pack16_array(job_resrcs_ptr->cpus,
+				     job_resrcs_ptr->nhosts, buffer);
+		else
+			pack16_array(job_resrcs_ptr->cpus, 0, buffer);
+
+		if (job_resrcs_ptr->cpus_used)
+			pack16_array(job_resrcs_ptr->cpus_used,
+				     job_resrcs_ptr->nhosts, buffer);
+		else
+			pack16_array(job_resrcs_ptr->cpus_used, 0, buffer);
+
+		if (job_resrcs_ptr->memory_allocated)
+			pack32_array(job_resrcs_ptr->memory_allocated,
+				     job_resrcs_ptr->nhosts, buffer);
+		else
+			pack32_array(job_resrcs_ptr->memory_allocated,
+				     0, buffer);
+
+		if (job_resrcs_ptr->memory_used)
+			pack32_array(job_resrcs_ptr->memory_used,
+				     job_resrcs_ptr->nhosts, buffer);
+		else
+			pack32_array(job_resrcs_ptr->memory_used, 0, buffer);
+		if (!(cluster_flags & CLUSTER_FLAG_BG)) {
+			int i;
+			uint32_t core_cnt = 0, sock_recs = 0;
+			xassert(job_resrcs_ptr->cores_per_socket);
+			xassert(job_resrcs_ptr->sock_core_rep_count);
+			xassert(job_resrcs_ptr->sockets_per_node);
+
+			for (i=0; i<job_resrcs_ptr->nhosts; i++) {
+				core_cnt += job_resrcs_ptr->sockets_per_node[i]
+					* job_resrcs_ptr->cores_per_socket[i] *
+					job_resrcs_ptr->sock_core_rep_count[i];
+				sock_recs += job_resrcs_ptr->
+					     sock_core_rep_count[i];
+				if (sock_recs >= job_resrcs_ptr->nhosts)
+					break;
+			}
+			i++;
+			pack16_array(job_resrcs_ptr->sockets_per_node,
+				     (uint32_t) i, buffer);
+			pack16_array(job_resrcs_ptr->cores_per_socket,
+				     (uint32_t) i, buffer);
+			pack32_array(job_resrcs_ptr->sock_core_rep_count,
+				     (uint32_t) i, buffer);
+
+			xassert(job_resrcs_ptr->core_bitmap);
+			xassert(job_resrcs_ptr->core_bitmap_used);
+			pack_bit_str_hex(job_resrcs_ptr->core_bitmap, buffer);
+			pack_bit_str_hex(job_resrcs_ptr->core_bitmap_used,
+					 buffer);
+		}
+	} else if (protocol_version >= SLURM_14_03_PROTOCOL_VERSION) {
 		if (job_resrcs_ptr == NULL) {
 			uint32_t empty = NO_VAL;
 			pack32(empty, buffer);
@@ -703,7 +783,70 @@ extern int unpack_job_resources(job_resources_t **job_resrcs_pptr,
 	uint32_t cluster_flags = slurmdb_setup_cluster_flags();
 
 	xassert(job_resrcs_pptr);
-	if (protocol_version >= SLURM_14_03_PROTOCOL_VERSION) {
+	if (protocol_version >= SLURM_14_11_PROTOCOL_VERSION) {
+		safe_unpack32(&empty, buffer);
+		if (empty == NO_VAL) {
+			*job_resrcs_pptr = NULL;
+			return SLURM_SUCCESS;
+		}
+
+		job_resrcs = xmalloc(sizeof(struct job_resources));
+		job_resrcs->nhosts = empty;
+		safe_unpack32(&job_resrcs->ncpus, buffer);
+		safe_unpack32(&job_resrcs->node_req, buffer);
+		safe_unpackstr_xmalloc(&job_resrcs->nodes, &tmp32, buffer);
+		safe_unpack8(&job_resrcs->whole_node, buffer);
+
+		safe_unpack32_array(&job_resrcs->cpu_array_reps,
+				    &tmp32, buffer);
+		if (tmp32 == 0)
+			xfree(job_resrcs->cpu_array_reps);
+		job_resrcs->cpu_array_cnt = tmp32;
+
+		safe_unpack16_array(&job_resrcs->cpu_array_value,
+				    &tmp32, buffer);
+		if (tmp32 == 0)
+			xfree(job_resrcs->cpu_array_value);
+
+		if (tmp32 != job_resrcs->cpu_array_cnt)
+			goto unpack_error;
+
+		safe_unpack16_array(&job_resrcs->cpus, &tmp32, buffer);
+		if (tmp32 == 0)
+			xfree(job_resrcs->cpus);
+		if (tmp32 != job_resrcs->nhosts)
+			goto unpack_error;
+		safe_unpack16_array(&job_resrcs->cpus_used, &tmp32, buffer);
+		if (tmp32 == 0)
+			xfree(job_resrcs->cpus_used);
+
+		safe_unpack32_array(&job_resrcs->memory_allocated,
+				    &tmp32, buffer);
+		if (tmp32 == 0)
+			xfree(job_resrcs->memory_allocated);
+		safe_unpack32_array(&job_resrcs->memory_used, &tmp32, buffer);
+		if (tmp32 == 0)
+			xfree(job_resrcs->memory_used);
+
+		if (!(cluster_flags & CLUSTER_FLAG_BG)) {
+			safe_unpack16_array(&job_resrcs->sockets_per_node,
+					    &tmp32, buffer);
+			if (tmp32 == 0)
+				xfree(job_resrcs->sockets_per_node);
+			safe_unpack16_array(&job_resrcs->cores_per_socket,
+					    &tmp32, buffer);
+			if (tmp32 == 0)
+				xfree(job_resrcs->cores_per_socket);
+			safe_unpack32_array(&job_resrcs->sock_core_rep_count,
+					    &tmp32, buffer);
+			if (tmp32 == 0)
+				xfree(job_resrcs->sock_core_rep_count);
+
+			unpack_bit_str_hex(&job_resrcs->core_bitmap, buffer);
+			unpack_bit_str_hex(&job_resrcs->core_bitmap_used,
+					   buffer);
+		}
+	} else if (protocol_version >= SLURM_14_03_PROTOCOL_VERSION) {
 		safe_unpack32(&empty, buffer);
 		if (empty == NO_VAL) {
 			*job_resrcs_pptr = NULL;
diff --git a/src/common/pack.h b/src/common/pack.h
index 4d6a7828e00486a67d37821772ee5d9352659174..286e01a541c6be99c4fe47045755adc61f52563b 100644
--- a/src/common/pack.h
+++ b/src/common/pack.h
@@ -57,6 +57,7 @@
 #include <assert.h>
 #include <time.h>
 #include <string.h>
+#include "src/common/bitstring.h"
 
 #define BUF_MAGIC 0x42554545
 #define BUF_SIZE (16 * 1024)
@@ -271,7 +272,7 @@ int	unpackmem_array(char *valp, uint32_t size_valp, Buf buffer);
 		uint32_t _size;				\
 		bit_fmt(_tmp_str,max_len,bitmap);	\
 		_size = strlen(_tmp_str)+1;		\
-		packmem(_tmp_str,_size,buf);	\
+		packmem(_tmp_str,_size,buf);		\
 	} else						\
 		packmem(NULL,(uint32_t)0,buf);		\
 } while (0)
@@ -308,19 +309,21 @@ int	unpackmem_array(char *valp, uint32_t size_valp, Buf buffer);
 	packmem(NULL, 0, buf); \
 } while (0)
 
-#define pack_bit_fmt(bitmap,buf) do {	\
+#define pack_bit_fmt(bitmap,buf) do {			\
 	assert(buf->magic == BUF_MAGIC);		\
 	if (bitmap) {					\
 		char _tmp_str[0xfffe];			\
 		uint32_t _size;				\
 		bit_fmt(_tmp_str,0xfffe,bitmap);	\
 		_size = strlen(_tmp_str)+1;		\
-		packmem(_tmp_str,_size,buf);	\
+		packmem(_tmp_str,_size,buf);		\
 	} else						\
 		packmem(NULL,(uint32_t)0,buf);		\
 } while (0)
 
-#define pack_bit_str(bitmap,buf) do {	\
+/* NOTE: un/pack_bit_str_hex() is much faster than un/pack_bit_str(),
+ * especially for larger and/or sparse bitmaps. */
+#define pack_bit_str(bitmap,buf) do {			\
 	assert(buf->magic == BUF_MAGIC);		\
 	if (bitmap) {					\
 		char _tmp_str[0xfffe];			\
@@ -334,19 +337,49 @@ int	unpackmem_array(char *valp, uint32_t size_valp, Buf buffer);
 		pack32(NO_VAL, buf);                 	\
 } while (0)
 
-#define unpack_bit_str(bitmap,buf) do {	\
-	char *tmp_str = NULL;				\
-	uint32_t _size = NO_VAL;			\
-	assert(*bitmap == NULL);                        \
+#define unpack_bit_str(bitmap,buf) do {					\
+	char *tmp_str = NULL;						\
+	uint32_t _size = NO_VAL;					\
+	assert(*bitmap == NULL);					\
+	assert(buf->magic == BUF_MAGIC);				\
+	safe_unpack32(&_size, buf);					\
+	if (_size != NO_VAL) {						\
+		*bitmap = bit_alloc(_size);				\
+		safe_unpackstr_xmalloc(&tmp_str, &_size, buf);		\
+		bit_unfmt(*bitmap, tmp_str);				\
+		xfree(tmp_str);						\
+	} else								\
+		*bitmap = NULL;						\
+} while (0)
+
+#define pack_bit_str_hex(bitmap,buf) do {		\
 	assert(buf->magic == BUF_MAGIC);		\
-	safe_unpack32(&_size, buf);			\
-	if (_size != NO_VAL) {				\
-		*bitmap = bit_alloc(_size);			       \
-		safe_unpackstr_xmalloc(&tmp_str, &_size, buf);	       \
-		bit_unfmt(*bitmap, tmp_str);			       \
-		xfree(tmp_str);					       \
-	} else							       \
-		*bitmap = NULL;					       \
+	if (bitmap) {					\
+		char *_tmp_str;				\
+		uint32_t _size;				\
+		_tmp_str = bit_fmt_hexmask(bitmap);	\
+		_size = bit_size(bitmap);               \
+		pack32(_size, buf);              	\
+		_size = strlen(_tmp_str)+1;		\
+		packmem(_tmp_str,_size,buf);	        \
+		xfree(_tmp_str);			\
+	} else						\
+		pack32(NO_VAL, buf);                 	\
+} while (0)
+
+#define unpack_bit_str_hex(bitmap,buf) do {				\
+	char *tmp_str = NULL;						\
+	uint32_t _size = NO_VAL;					\
+	assert(*bitmap == NULL);					\
+	assert(buf->magic == BUF_MAGIC);				\
+	safe_unpack32(&_size, buf);					\
+	if (_size != NO_VAL) {						\
+		*bitmap = bit_alloc(_size);				\
+		safe_unpackstr_xmalloc(&tmp_str, &_size, buf);		\
+		bit_unfmt_hexmask(*bitmap, tmp_str);			\
+		xfree(tmp_str);						\
+	} else								\
+		*bitmap = NULL;						\
 } while (0)
 
 #define unpackstr_ptr		                        \
diff --git a/src/common/slurmdb_pack.c b/src/common/slurmdb_pack.c
index 2b7c8f9fbf3830fa02d10637eaa3654ac924e542..4cc58b50d4b6f9fd098f2e522d2cf506b8676db4 100644
--- a/src/common/slurmdb_pack.c
+++ b/src/common/slurmdb_pack.c
@@ -1125,7 +1125,94 @@ extern void slurmdb_pack_qos_rec(void *in, uint16_t rpc_version, Buf buffer)
 	uint32_t count = NO_VAL;
 	char *tmp_info = NULL;
 
-	if (rpc_version >= SLURMDBD_MIN_VERSION) {
+	if (rpc_version >= SLURM_14_11_PROTOCOL_VERSION) {
+		if (!object) {
+			packnull(buffer);
+			pack32(0, buffer);
+
+			pack32(QOS_FLAG_NOTSET, buffer);
+
+			pack32(NO_VAL, buffer);
+			pack64(NO_VAL, buffer);
+			pack64(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+
+			pack64(NO_VAL, buffer);
+			pack64(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+
+			packnull(buffer);
+
+			pack_bit_str_hex(NULL, buffer);
+			pack32(NO_VAL, buffer);
+
+			pack16(0, buffer);
+			pack32(0, buffer);
+
+			packdouble((double)NO_VAL, buffer);
+			packdouble((double)NO_VAL, buffer);
+			return;
+		}
+		packstr(object->description, buffer);
+		pack32(object->id, buffer);
+
+		pack32(object->flags, buffer);
+
+		pack32(object->grace_time, buffer);
+		pack64(object->grp_cpu_mins, buffer);
+		pack64(object->grp_cpu_run_mins, buffer);
+		pack32(object->grp_cpus, buffer);
+		pack32(object->grp_jobs, buffer);
+		pack32(object->grp_mem, buffer);
+		pack32(object->grp_nodes, buffer);
+		pack32(object->grp_submit_jobs, buffer);
+		pack32(object->grp_wall, buffer);
+
+		pack64(object->max_cpu_mins_pj, buffer);
+		pack64(object->max_cpu_run_mins_pu, buffer);
+		pack32(object->max_cpus_pj, buffer);
+		pack32(object->max_cpus_pu, buffer);
+		pack32(object->max_jobs_pu, buffer);
+		pack32(object->max_nodes_pj, buffer);
+		pack32(object->max_nodes_pu, buffer);
+		pack32(object->max_submit_jobs_pu, buffer);
+		pack32(object->max_wall_pj, buffer);
+
+		packstr(object->name, buffer);
+
+		pack_bit_str_hex(object->preempt_bitstr, buffer);
+
+		if (object->preempt_list)
+			count = list_count(object->preempt_list);
+
+		pack32(count, buffer);
+
+		if (count && count != NO_VAL) {
+			itr = list_iterator_create(object->preempt_list);
+			while ((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+
+		pack16(object->preempt_mode, buffer);
+		pack32(object->priority, buffer);
+
+		packdouble(object->usage_factor, buffer);
+		packdouble(object->usage_thres, buffer);
+	} else if (rpc_version >= SLURMDBD_MIN_VERSION) {
 		if (!object) {
 			packnull(buffer);
 			pack32(0, buffer);
@@ -1228,7 +1315,55 @@ extern int slurmdb_unpack_qos_rec(void **object, uint16_t rpc_version,
 
 	slurmdb_init_qos_rec(object_ptr, 0);
 
-	if (rpc_version >= SLURMDBD_MIN_VERSION) {
+	if (rpc_version >= SLURM_14_11_PROTOCOL_VERSION) {
+		safe_unpackstr_xmalloc(&object_ptr->description,
+				       &uint32_tmp, buffer);
+		safe_unpack32(&object_ptr->id, buffer);
+
+		safe_unpack32(&object_ptr->flags, buffer);
+
+		safe_unpack32(&object_ptr->grace_time, buffer);
+		safe_unpack64(&object_ptr->grp_cpu_mins, buffer);
+		safe_unpack64(&object_ptr->grp_cpu_run_mins, buffer);
+		safe_unpack32(&object_ptr->grp_cpus, buffer);
+		safe_unpack32(&object_ptr->grp_jobs, buffer);
+		safe_unpack32(&object_ptr->grp_mem, buffer);
+		safe_unpack32(&object_ptr->grp_nodes, buffer);
+		safe_unpack32(&object_ptr->grp_submit_jobs, buffer);
+		safe_unpack32(&object_ptr->grp_wall, buffer);
+
+		safe_unpack64(&object_ptr->max_cpu_mins_pj, buffer);
+		safe_unpack64(&object_ptr->max_cpu_run_mins_pu, buffer);
+		safe_unpack32(&object_ptr->max_cpus_pj, buffer);
+		safe_unpack32(&object_ptr->max_cpus_pu, buffer);
+		safe_unpack32(&object_ptr->max_jobs_pu, buffer);
+		safe_unpack32(&object_ptr->max_nodes_pj, buffer);
+		safe_unpack32(&object_ptr->max_nodes_pu, buffer);
+		safe_unpack32(&object_ptr->max_submit_jobs_pu, buffer);
+		safe_unpack32(&object_ptr->max_wall_pj, buffer);
+
+		safe_unpackstr_xmalloc(&object_ptr->name, &uint32_tmp, buffer);
+
+		unpack_bit_str_hex(&object_ptr->preempt_bitstr, buffer);
+
+		safe_unpack32(&count, buffer);
+		if (count != NO_VAL) {
+			object_ptr->preempt_list =
+				list_create(slurm_destroy_char);
+			for (i = 0; i < count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->preempt_list,
+					    tmp_info);
+			}
+		}
+
+		safe_unpack16(&object_ptr->preempt_mode, buffer);
+		safe_unpack32(&object_ptr->priority, buffer);
+
+		safe_unpackdouble(&object_ptr->usage_factor, buffer);
+		safe_unpackdouble(&object_ptr->usage_thres, buffer);
+	} else if (rpc_version >= SLURMDBD_MIN_VERSION) {
 		safe_unpackstr_xmalloc(&object_ptr->description,
 				       &uint32_tmp, buffer);
 		safe_unpack32(&object_ptr->id, buffer);
diff --git a/src/plugins/select/cray/select_cray.c b/src/plugins/select/cray/select_cray.c
index 447a6308ff5287be8f91722ce6d89e1060fe8d1d..8f9bf7ebe20339d043018d194b47261345fc4532 100644
--- a/src/plugins/select/cray/select_cray.c
+++ b/src/plugins/select/cray/select_cray.c
@@ -777,17 +777,30 @@ static void _free_blade(blade_info_t *blade_info)
 static void _pack_blade(blade_info_t *blade_info, Buf buffer,
 			uint16_t protocol_version)
 {
-	pack64(blade_info->id, buffer);
-	pack32(blade_info->job_cnt, buffer);
-	pack_bit_str(blade_info->node_bitmap, buffer);
+	if (protocol_version >= SLURM_14_11_PROTOCOL_VERSION) {
+		pack64(blade_info->id, buffer);
+		pack32(blade_info->job_cnt, buffer);
+		pack_bit_str_hex(blade_info->node_bitmap, buffer);
+	} else if (protocol_version >= SLURM_MIN_PROTOCOL_VERSION) {
+		pack64(blade_info->id, buffer);
+		pack32(blade_info->job_cnt, buffer);
+		pack_bit_str(blade_info->node_bitmap, buffer);
+	}
+
 }
 
 static int _unpack_blade(blade_info_t *blade_info, Buf buffer,
 			 uint16_t protocol_version)
 {
-	safe_unpack64(&blade_info->id, buffer);
-	safe_unpack32(&blade_info->job_cnt, buffer);
-	unpack_bit_str(&blade_info->node_bitmap, buffer);
+	if (protocol_version >= SLURM_14_11_PROTOCOL_VERSION) {
+		safe_unpack64(&blade_info->id, buffer);
+		safe_unpack32(&blade_info->job_cnt, buffer);
+		unpack_bit_str_hex(&blade_info->node_bitmap, buffer);
+	} else if (protocol_version >= SLURM_MIN_PROTOCOL_VERSION) {
+		safe_unpack64(&blade_info->id, buffer);
+		safe_unpack32(&blade_info->job_cnt, buffer);
+		unpack_bit_str(&blade_info->node_bitmap, buffer);
+	}
 
 	return SLURM_SUCCESS;
 
@@ -1007,16 +1020,30 @@ static void _spawn_cleanup_thread(
 static void _select_jobinfo_pack(select_jobinfo_t *jobinfo, Buf buffer,
 				 uint16_t protocol_version)
 {
-	if (!jobinfo) {
-		pack_bit_str(NULL, buffer);
-		pack16(0, buffer);
-		pack8(0, buffer);
-		pack_bit_str(NULL, buffer);
-	} else {
-		pack_bit_str(jobinfo->blade_map, buffer);
-		pack16(jobinfo->cleaning, buffer);
-		pack8(jobinfo->npc, buffer);
-		pack_bit_str(jobinfo->used_blades, buffer);
+	if (protocol_version >= SLURM_14_11_PROTOCOL_VERSION) {
+		if (!jobinfo) {
+			pack_bit_str_hex(NULL, buffer);
+			pack16(0, buffer);
+			pack8(0, buffer);
+			pack_bit_str_hex(NULL, buffer);
+		} else {
+			pack_bit_str_hex(jobinfo->blade_map, buffer);
+			pack16(jobinfo->cleaning, buffer);
+			pack8(jobinfo->npc, buffer);
+			pack_bit_str_hex(jobinfo->used_blades, buffer);
+		}
+	} else if (protocol_version >= SLURM_MIN_PROTOCOL_VERSION) {
+		if (!jobinfo) {
+			pack_bit_str(NULL, buffer);
+			pack16(0, buffer);
+			pack8(0, buffer);
+			pack_bit_str(NULL, buffer);
+		} else {
+			pack_bit_str(jobinfo->blade_map, buffer);
+			pack16(jobinfo->cleaning, buffer);
+			pack8(jobinfo->npc, buffer);
+			pack_bit_str(jobinfo->used_blades, buffer);
+		}
 	}
 }
 
@@ -1029,10 +1056,17 @@ static int _select_jobinfo_unpack(select_jobinfo_t **jobinfo_pptr,
 
 	jobinfo->magic = JOBINFO_MAGIC;
 
-	unpack_bit_str(&jobinfo->blade_map, buffer);
-	safe_unpack16(&jobinfo->cleaning, buffer);
-	safe_unpack8(&jobinfo->npc, buffer);
-	unpack_bit_str(&jobinfo->used_blades, buffer);
+	if (protocol_version >= SLURM_14_11_PROTOCOL_VERSION) {
+		unpack_bit_str_hex(&jobinfo->blade_map, buffer);
+		safe_unpack16(&jobinfo->cleaning, buffer);
+		safe_unpack8(&jobinfo->npc, buffer);
+		unpack_bit_str_hex(&jobinfo->used_blades, buffer);
+	} else if (protocol_version >= SLURM_MIN_PROTOCOL_VERSION) {
+		unpack_bit_str(&jobinfo->blade_map, buffer);
+		safe_unpack16(&jobinfo->cleaning, buffer);
+		safe_unpack8(&jobinfo->npc, buffer);
+		unpack_bit_str(&jobinfo->used_blades, buffer);
+	}
 
 	return SLURM_SUCCESS;
 
diff --git a/src/plugins/switch/cray/switch_cray.c b/src/plugins/switch/cray/switch_cray.c
index 43ce0dca067593ac4fd5c0df6c59bf27a7fa9cb4..66093807ffb6e22ab41e15e0f7a42a59fd86b6d3 100644
--- a/src/plugins/switch/cray/switch_cray.c
+++ b/src/plugins/switch/cray/switch_cray.c
@@ -159,7 +159,7 @@ static void _state_read_buf(Buf buffer)
 		safe_unpack32(&last_alloc_port, buffer);
 		/* make sure we are NULL here */
 		FREE_NULL_BITMAP(port_resv);
-		unpack_bit_str(&port_resv, buffer);
+		unpack_bit_str_hex(&port_resv, buffer);
 	} else if (protocol_version >= SLURM_MIN_PROTOCOL_VERSION) {
 		uint8_t port_set = 0;
 		safe_unpack32(&min_port, buffer);
@@ -208,7 +208,7 @@ static void _state_write_buf(Buf buffer)
 	pthread_mutex_lock(&port_mutex);
 
 	pack32(last_alloc_port, buffer);
-	pack_bit_str(port_resv, buffer);
+	pack_bit_str_hex(port_resv, buffer);
 
 	pthread_mutex_unlock(&port_mutex);
 }