diff --git a/src/plugins/select/bluegene/bl_bgq/bridge_status.cc b/src/plugins/select/bluegene/bl_bgq/bridge_status.cc
index ff90b3f44fff0d3f5e1682413cc7de1fe0399fb4..43a746e80c118786dc0f2b01935926ea36558369 100644
--- a/src/plugins/select/bluegene/bl_bgq/bridge_status.cc
+++ b/src/plugins/select/bluegene/bl_bgq/bridge_status.cc
@@ -992,8 +992,11 @@ void event_handler::handleSwitchStateChangedRealtimeEvent(
 void event_handler::handleNodeBoardStateChangedRealtimeEvent(
 	const NodeBoardStateChangedEventInfo& event)
 {
-	const char *mp_name = event.getLocation().substr(0,6).c_str();
-	const char *nb_name = event.getLocation().substr(7,3).c_str();
+	/* When dealing with non-pointers these variables don't work
+	   out correctly, so copy them.
+	*/
+	const char *mp_name = xstrdup(event.getLocation().substr(0,6).c_str());
+	const char *nb_name = xstrdup(event.getLocation().substr(7,3).c_str());
 	Coordinates ibm_coords = event.getMidplaneCoordinates();
 	uint16_t coords[SYSTEM_DIMENSIONS];
 	int dim;
@@ -1006,11 +1009,13 @@ void event_handler::handleNodeBoardStateChangedRealtimeEvent(
 	ba_mp = coord2ba_mp(coords);
 
 	if (!ba_mp) {
-		error("Nodeboard '%s' on Midplane %s, state went from "
+		error("Nodeboard '%s' on Midplane %s (%s), state went from "
 		      "'%s' to '%s', but is not in our system",
-		      nb_name, mp_name,
+		      nb_name, mp_name, event.getLocation().c_str(),
 		      bridge_hardware_state_string(event.getPreviousState()),
 		      bridge_hardware_state_string(event.getState()));
+		xfree(nb_name);
+		xfree(mp_name);
 		slurm_mutex_unlock(&ba_system_mutex);
 		return;
 	}
@@ -1023,12 +1028,16 @@ void event_handler::handleNodeBoardStateChangedRealtimeEvent(
 		     "has returned to service",
 		     nb_name, mp_name,
 		     ba_mp->coord_str);
+		xfree(nb_name);
+		xfree(mp_name);
 		slurm_mutex_unlock(&ba_system_mutex);
 		return;
 	}
 
 	_handle_bad_nodeboard(nb_name, ba_mp->coord_str,
 			      event.getState(), NULL);
+	xfree(nb_name);
+	xfree(mp_name);
 	slurm_mutex_unlock(&ba_system_mutex);
 
 	return;
@@ -1049,10 +1058,10 @@ void event_handler::handleNodeStateChangedRealtimeEvent(
 	ba_mp = coord2ba_mp(coords);
 
 	if (!ba_mp) {
-		const char *mp_name = event.getLocation().substr(0,6).c_str();
 		error("Node '%s' on Midplane %s, state went from '%s' to '%s',"
 		      "but is not in our system",
-		      event.getLocation().c_str(), mp_name,
+		      event.getLocation().c_str(),
+		      event.getLocation().substr(0,6).c_str(),
 		      bridge_hardware_state_string(event.getPreviousState()),
 		      bridge_hardware_state_string(event.getState()));
 		slurm_mutex_unlock(&ba_system_mutex);