diff --git a/src/plugins/select/cray/libalps/basil_mysql_routines.c b/src/plugins/select/cray/libalps/basil_mysql_routines.c
index 63930e3980149324e9b8ae98bcc93ae555aa38ca..70659b871cf3d5b4057983e05773c5601358248f 100644
--- a/src/plugins/select/cray/libalps/basil_mysql_routines.c
+++ b/src/plugins/select/cray/libalps/basil_mysql_routines.c
@@ -75,19 +75,24 @@ int cray_is_gemini_system(MYSQL *handle)
 {
 	/*
 	 * Rationale:
-	 * - XT SeaStar systems have one SeaStar ASIC per node
-	 *   There are 4 nodes on a blade, 4 SeaStar ASICS, giving
-	 *   4 distinct (X,Y,Z) coordinates.
-	 * - XE Gemini systems connect pairs of nodes to a Gemini chip
-	 *   There are 4 nodes on a blade and 2 Gemini chips, nodes 0/1
+	 * - XT SeaStar systems have one SeaStar ASIC per node.
+	 *   There are 4 nodes and 4 SeaStar ASICS on each blade, giving
+	 *   4 distinct (X,Y,Z) coordinates per blade, so that the total
+	 *   node count equals the total count of torus coordinates.
+	 * - XE Gemini systems connect pairs of nodes to a Gemini chip.
+	 *   There are 4 nodes on a blade and 2 Gemini chips. Nodes 0/1
 	 *   are connected to Gemini chip 0, nodes 2/3 are connected to
 	 *   Gemini chip 1. This configuration acts as if the nodes were
-	 *   already connected in Y dimension, hence there are half as
+	 *   internally joined in Y dimension; hence there are half as
 	 *   many (X,Y,Z) coordinates than there are nodes in the system.
+	 * - Coordinates may be NULL if a network chip is deactivated.
 	 */
 	const char query[] =
 		"SELECT COUNT(DISTINCT x_coord, y_coord, z_coord) < COUNT(*) "
-		"FROM processor";
+		"FROM processor "
+		"WHERE x_coord IS NOT NULL "
+		"AND   y_coord IS NOT NULL "
+		"AND   z_coord IS NOT NULL";
 	MYSQL_BIND	result[1];
 	signed char	answer;
 	my_bool		is_null;