diff --git a/src/plugins/select/cray/basil_alps.h b/src/plugins/select/cray/basil_alps.h
index 44c2349e7ca65c9708c4d692c1682918b9233c25..9b11b40dc0361a9af55fb52e52c0be145799ebd9 100644
--- a/src/plugins/select/cray/basil_alps.h
+++ b/src/plugins/select/cray/basil_alps.h
@@ -260,16 +260,16 @@ enum basil_accelstate {	/* Alps 4.x (Basil 1.2) */
 /*
  * Inventory structs
  */
-struct basil_proc_alloc {
-	uint32_t		rsvn_id;
-	/* NB: processor is indivisible, i.e. at most 1 allocation */
-};
-
 struct basil_node_processor {
 	uint32_t		ordinal;
 	uint32_t		clock_mhz;
 	enum basil_proc_type	arch;
-	struct basil_proc_alloc	*allocation;
+
+	/* With gang scheduling we can have more than 1 rsvn per node,
+	   so this is just here to see if the node itself is allocated
+	   at all.
+	*/
+	uint32_t		rsvn_id;
 
 	struct basil_node_processor *next;
 };
diff --git a/src/plugins/select/cray/libalps/do_query.c b/src/plugins/select/cray/libalps/do_query.c
index b4592d913ff2323b05d4ced2d990a57a3268f6dc..20d3c825b48ecb91636befe40f6de53b2ac72e63 100644
--- a/src/plugins/select/cray/libalps/do_query.c
+++ b/src/plugins/select/cray/libalps/do_query.c
@@ -32,7 +32,7 @@ static bool _segment_is_allocated(const struct basil_segment *seg)
 	struct basil_node_memory *mem;
 
 	for (proc = seg->proc_head; proc; proc = proc->next)
-		if (proc->allocation != NULL)
+		if (proc->rsvn_id)
 			return true;
 	for (mem = seg->mem_head; mem; mem = mem->next)
 		if (mem->a_head != NULL)
diff --git a/src/plugins/select/cray/libalps/memory_handling.c b/src/plugins/select/cray/libalps/memory_handling.c
index 8e968f9e91447e49c79387ec8fb1c197262a24b4..0a7afdfcd83dbb0d4dc39fea3499f56b49a1341a 100644
--- a/src/plugins/select/cray/libalps/memory_handling.c
+++ b/src/plugins/select/cray/libalps/memory_handling.c
@@ -10,7 +10,7 @@ static void _free_basil_processor(struct basil_node_processor *p)
 {
 	if (p) {
 		_free_basil_processor(p->next);
-		xfree(p->allocation);
+		p->rsvn_id = 0; /* just to be safe */
 		xfree(p);
 	}
 }
diff --git a/src/plugins/select/cray/libalps/parser_common.c b/src/plugins/select/cray/libalps/parser_common.c
index ba44378a93fb07f08899eb3b18621fbe277cebd3..6f91647e6a616d3443a526583825afeb9a21e03c 100644
--- a/src/plugins/select/cray/libalps/parser_common.c
+++ b/src/plugins/select/cray/libalps/parser_common.c
@@ -281,17 +281,12 @@ void eh_proc_alloc(struct ud *ud, const XML_Char **attrs)
 	ud->current_node.reserved = true;
 
 	if (ud->ud_inventory) {
-		struct basil_proc_alloc *new = xmalloc(sizeof(*new));
-
-		new->rsvn_id = rsvn_id;
 		xassert(ud->ud_inventory->node_head);
 		xassert(ud->ud_inventory->node_head->seg_head);
 		xassert(ud->ud_inventory->node_head->seg_head->proc_head);
-		xassert(!ud->ud_inventory->node_head->seg_head->
-			proc_head->allocation);
 
-		ud->ud_inventory->node_head->seg_head->proc_head->allocation =
-			new;
+		ud->ud_inventory->node_head->seg_head->proc_head->rsvn_id =
+			rsvn_id;
 	}
 }