diff --git a/openbsc/src/gb_proxy.c b/openbsc/src/gb_proxy.c
index 93b8f67..c737a6d 100644
--- a/openbsc/src/gb_proxy.c
+++ b/openbsc/src/gb_proxy.c
@@ -120,8 +120,15 @@
 	talloc_free(peer);
 }
 
+/* strip off the NS header */
+static void strip_ns_hdr(struct msgb *msg)
+{
+	int strip_len = msgb_bssgph(msg) - msg->data;
+	msgb_pull(msg, strip_len);
+}
+
 /* feed a message down the NS-VC associated with the specified peer */
-static int gbprox_tx2sgsn(struct msgb *msg, uint16_t ns_bvci)
+static int gbprox_relay2sgsn(struct msgb *msg, uint16_t ns_bvci)
 {
 	msgb_bvci(msg) = ns_bvci;
 	msgb_nsei(msg) = gbcfg.nsip_sgsn_nsei;
@@ -129,12 +136,13 @@
 	DEBUGP(DGPRS, "proxying message to SGSN (NS_BVCI=%u, NSEI=%u)\n",
 		ns_bvci, gbcfg.nsip_sgsn_nsei);
 
+	strip_ns_hdr(msg);
+
 	return gprs_ns_sendmsg(gbprox_nsi, msg);
 }
 
-
 /* feed a message down the NS-VC associated with the specified peer */
-static int gbprox_tx2peer(struct msgb *msg, struct gbprox_peer *peer,
+static int gbprox_relay2peer(struct msgb *msg, struct gbprox_peer *peer,
 			  uint16_t ns_bvci)
 {
 	msgb_bvci(msg) = ns_bvci;
@@ -143,12 +151,14 @@
 	DEBUGP(DGPRS, "proxying message to BSS (NS_BVCI=%u, NSEI=%u)\n",
 		ns_bvci, peer->nsvc->nsei);
 
+	strip_ns_hdr(msg);
+
 	return gprs_ns_sendmsg(gbprox_nsi, msg);
 }
 
 /* Send a message to a peer identified by ptp_bvci but using ns_bvci
  * in the NS hdr */
-static int gbprox_tx2bvci(struct msgb *msg, uint16_t ptp_bvci,
+static int gbprox_relay2bvci(struct msgb *msg, uint16_t ptp_bvci,
 			  uint16_t ns_bvci)
 {
 	struct gbprox_peer *peer;
@@ -157,7 +167,7 @@
 	if (!peer)
 		return -ENOENT;
 
-	return gbprox_tx2peer(msg, peer, ns_bvci);
+	return gbprox_relay2peer(msg, peer, ns_bvci);
 }
 
 /* Receive an incoming signalling message from a BSS-side NS-VC */
@@ -210,7 +220,7 @@
 	}
 
 	/* Normally, we can simply pass on all signalling messages from BSS to SGSN */
-	return gbprox_tx2sgsn(msg, ns_bvci);
+	return gbprox_relay2sgsn(msg, ns_bvci);
 err_no_peer:
 err_mand_ie:
 	/* FIXME: do something */
@@ -225,13 +235,13 @@
 
 	if (TLVP_PRESENT(tp, BSSGP_IE_BVCI)) {
 		uint16_t bvci = ntohs(*(uint16_t *)TLVP_VAL(tp, BSSGP_IE_BVCI));
-		return gbprox_tx2bvci(msg, bvci, ns_bvci);
+		return gbprox_relay2bvci(msg, bvci, ns_bvci);
 	} else if (TLVP_PRESENT(tp, BSSGP_IE_ROUTEING_AREA)) {
 		peer = peer_by_rac(TLVP_VAL(tp, BSSGP_IE_ROUTEING_AREA));
-		return gbprox_tx2peer(msg, peer, ns_bvci);
+		return gbprox_relay2peer(msg, peer, ns_bvci);
 	} else if (TLVP_PRESENT(tp, BSSGP_IE_LOCATION_AREA)) {
 		peer = peer_by_lac(TLVP_VAL(tp, BSSGP_IE_LOCATION_AREA));
-		return gbprox_tx2peer(msg, peer, ns_bvci);
+		return gbprox_relay2peer(msg, peer, ns_bvci);
 	} else
 		return -EINVAL;
 }
@@ -273,7 +283,7 @@
 		if (!TLVP_PRESENT(&tp, BSSGP_IE_BVCI))
 			goto err_mand_ie;
 		bvci = ntohs(*(uint16_t *)TLVP_VAL(&tp, BSSGP_IE_BVCI));
-		rc = gbprox_tx2bvci(msg, bvci, ns_bvci);
+		rc = gbprox_relay2bvci(msg, bvci, ns_bvci);
 		break;
 	case BSSGP_PDUT_PAGING_PS:
 	case BSSGP_PDUT_PAGING_CS:
@@ -295,7 +305,7 @@
 		peer = peer_by_rac(TLVP_VAL(&tp, BSSGP_IE_ROUTEING_AREA));
 		if (!peer)
 			goto err_no_peer;
-		rc = gbprox_tx2peer(msg, peer, ns_bvci);
+		rc = gbprox_relay2peer(msg, peer, ns_bvci);
 		break;
 	case BSSGP_PDUT_SGSN_INVOKE_TRACE:
 		LOGP(DGPRS, LOGL_ERROR, "SGSN INVOKE TRACE not supported\n");
@@ -327,7 +337,7 @@
 	} else {
 		/* All other BVCI are PTP and thus can be simply forwarded */
 		if (nsvc->remote_end_is_sgsn) {
-			rc = gbprox_tx2sgsn(msg, ns_bvci);
+			rc = gbprox_relay2sgsn(msg, ns_bvci);
 		} else {
 			struct gbprox_peer *peer = peer_by_bvci(ns_bvci);
 			if (!peer) {
@@ -337,7 +347,7 @@
 				peer = peer_alloc(ns_bvci);
 				peer->nsvc = nsvc;
 			}
-			rc = gbprox_tx2peer(msg, peer, ns_bvci);
+			rc = gbprox_relay2peer(msg, peer, ns_bvci);
 		}
 	}
 
