diff --git a/openbsc/src/gprs/gtphub.c b/openbsc/src/gprs/gtphub.c
index 5315249..9a5e882 100644
--- a/openbsc/src/gprs/gtphub.c
+++ b/openbsc/src/gprs/gtphub.c
@@ -1090,8 +1090,8 @@
  * and User). Map TEIs announced in IEs, and write mapped TEIs in-place into
  * the packet p. */
 static int gtphub_handle_pdp_ctx_ies(struct gtphub *hub,
-				     struct gtphub_bind from_bind[],
-				     struct gtphub_bind to_bind[],
+				     struct gtphub_bind from_bind_arr[],
+				     struct gtphub_bind to_bind_arr[],
 				     struct gtp_packet_desc *p,
 				     time_t now)
 {
@@ -1152,7 +1152,7 @@
 		/* Make sure an entry for this peer address with default port
 		 * exists */
 		struct gtphub_peer_port *peer_from_ie =
-			gtphub_port_have(hub, &from_bind[plane_idx],
+			gtphub_port_have(hub, &from_bind_arr[plane_idx],
 					 &addr_from_ie,
 					 gtphub_plane_idx_default_port[plane_idx]);
 
@@ -1167,7 +1167,8 @@
 		}
 
 		/* Replace the GSN address to reflect gtphub. */
-		rc = gsn_addr_put(&to_bind[plane_idx].local_addr, p, plane_idx);
+		rc = gsn_addr_put(&to_bind_arr[plane_idx].local_addr, p,
+				  plane_idx);
 		if (rc) {
 			LOG(LOGL_ERROR, "Cannot write %s GSN Address IE\n",
 			    gtphub_plane_idx_names[plane_idx]);
@@ -1360,6 +1361,11 @@
 				 struct osmo_fd **to_ofd,
 				 struct osmo_sockaddr *to_addr)
 {
+	struct gtphub_bind *from_bind_arr = hub->to_ggsns;
+	struct gtphub_bind *to_bind_arr = hub->to_sgsns;
+	struct gtphub_bind *from_bind = &from_bind_arr[plane_idx];
+	struct gtphub_bind *to_bind = &to_bind_arr[plane_idx];
+
 	LOG(LOGL_DEBUG, "<- rx %s from GGSN %s\n",
 	    gtphub_plane_idx_names[plane_idx],
 	    osmo_sockaddr_to_str(from_addr));
@@ -1375,13 +1381,13 @@
 	if (reply_len > 0) {
 		/* It was an echo. Nothing left to do. */
 		osmo_sockaddr_copy(to_addr, from_addr);
-		*to_ofd = &hub->to_ggsns[plane_idx].ofd;
+		*to_ofd = &from_bind->ofd;
 		return reply_len;
 	}
 	if (reply_len < 0)
 		return -1;
 
-	*to_ofd = &hub->to_sgsns[plane_idx].ofd;
+	*to_ofd = &to_bind->ofd;
 
 	/* If a GGSN proxy is configured, check that it's indeed that proxy
 	 * talking to us. A proxy is a forced 1:1 connection, e.g. to another
@@ -1402,8 +1408,7 @@
 	if (!ggsn) {
 		/* Find a GGSN peer with a matching address. The sender's port
 		 * may in fact differ. */
-		ggsn = gtphub_known_addr_have_port(&hub->to_ggsns[plane_idx],
-						   from_addr);
+		ggsn = gtphub_known_addr_have_port(from_bind, from_addr);
 	}
 
 	/* If any PDP context has been created, we already have an entry for
@@ -1439,8 +1444,8 @@
 		/* This may be a Create PDP Context response. If it is, there
 		 * are other addresses in the GTP message to set up apart from
 		 * the sender. */
-		if (gtphub_handle_pdp_ctx_ies(hub, hub->to_ggsns,
-					      hub->to_sgsns, &p, now)
+		if (gtphub_handle_pdp_ctx_ies(hub, from_bind_arr, to_bind_arr,
+					      &p, now)
 		    != 0)
 			return -1;
 	}
@@ -1506,6 +1511,11 @@
 				 struct osmo_fd **to_ofd,
 				 struct osmo_sockaddr *to_addr)
 {
+	struct gtphub_bind *from_bind_arr = hub->to_sgsns;
+	struct gtphub_bind *to_bind_arr = hub->to_ggsns;
+	struct gtphub_bind *from_bind = &from_bind_arr[plane_idx];
+	struct gtphub_bind *to_bind = &to_bind_arr[plane_idx];
+
 	LOG(LOGL_DEBUG, "-> rx %s from SGSN %s\n",
 	    gtphub_plane_idx_names[plane_idx],
 	    osmo_sockaddr_to_str(from_addr));
@@ -1521,13 +1531,13 @@
 	if (reply_len > 0) {
 		/* It was an echo. Nothing left to do. */
 		osmo_sockaddr_copy(to_addr, from_addr);
-		*to_ofd = &hub->to_sgsns[plane_idx].ofd;
+		*to_ofd = &from_bind->ofd;
 		return reply_len;
 	}
 	if (reply_len < 0)
 		return -1;
 
-	*to_ofd = &hub->to_ggsns[plane_idx].ofd;
+	*to_ofd = &to_bind->ofd;
 
 	/* If an SGSN proxy is configured, check that it's indeed that proxy
 	 * talking to us. A proxy is a forced 1:1 connection, e.g. to another
@@ -1548,8 +1558,7 @@
 	if (!sgsn) {
 		/* If any contact has been made before, we already have an
 		 * entry for this SGSN. The port may differ. */
-		sgsn = gtphub_known_addr_have_port(&hub->to_sgsns[plane_idx],
-						   from_addr);
+		sgsn = gtphub_known_addr_have_port(from_bind, from_addr);
 	}
 
 	if (!sgsn) {
@@ -1569,8 +1578,7 @@
 		if (gsn_addr_from_sockaddr(&from_gsna, &from_port, from_addr) != 0)
 			return -1;
 
-		sgsn = gtphub_port_have(hub, &hub->to_sgsns[plane_idx],
-					&from_gsna, from_port);
+		sgsn = gtphub_port_have(hub, from_bind, &from_gsna, from_port);
 	}
 
 	if (!sgsn) {
@@ -1607,8 +1615,8 @@
 		/* This may be a Create PDP Context requst. If it is, there are
 		 * other addresses in the GTP message to set up apart from the
 		 * sender. */
-		if (gtphub_handle_pdp_ctx_ies(hub, hub->to_sgsns,
-					      hub->to_ggsns, &p, now)
+		if (gtphub_handle_pdp_ctx_ies(hub, from_bind_arr, to_bind_arr,
+					      &p, now)
 		    != 0)
 			return -1;
 	}
