diff --git a/src/gb/gprs_bssgp.c b/src/gb/gprs_bssgp.c
index fdbf788..aa6e37b 100644
--- a/src/gb/gprs_bssgp.c
+++ b/src/gb/gprs_bssgp.c
@@ -1,6 +1,6 @@
 /* GPRS BSSGP protocol implementation as per 3GPP TS 08.18 */
 
-/* (C) 2009-2012 by Harald Welte <laforge@gnumonks.org>
+/* (C) 2009-2017 by Harald Welte <laforge@gnumonks.org>
  *
  * All Rights Reserved
  *
@@ -25,9 +25,9 @@
 #include <errno.h>
 #include <stdint.h>
 
-#include <netinet/in.h>
-
 #include <osmocom/core/msgb.h>
+#include <osmocom/core/byteswap.h>
+#include <osmocom/core/bit16gen.h>
 #include <osmocom/gsm/tlv.h>
 #include <osmocom/core/talloc.h>
 #include <osmocom/core/rate_ctr.h>
@@ -138,7 +138,7 @@
 	msgb_bvci(msg) = 0; /* Signalling */
 	bgph->pdu_type = BSSGP_PDUT_SUSPEND_ACK;
 
-	_tlli = htonl(tlli);
+	_tlli = osmo_htonl(tlli);
 	msgb_tvlv_put(msg, BSSGP_IE_TLLI, 4, (uint8_t *) &_tlli);
 	gsm48_construct_ra(ra, ra_id);
 	msgb_tvlv_put(msg, BSSGP_IE_ROUTEING_AREA, 6, ra);
@@ -162,7 +162,7 @@
 	msgb_bvci(msg) = 0; /* Signalling */
 	bgph->pdu_type = BSSGP_PDUT_SUSPEND_NACK;
 
-	_tlli = htonl(tlli);
+	_tlli = osmo_htonl(tlli);
 	msgb_tvlv_put(msg, BSSGP_IE_TLLI, 4, (uint8_t *) &_tlli);
 	gsm48_construct_ra(ra, ra_id);
 	msgb_tvlv_put(msg, BSSGP_IE_ROUTEING_AREA, 6, ra);
@@ -186,7 +186,7 @@
 	msgb_bvci(msg) = 0; /* Signalling */
 	bgph->pdu_type = BSSGP_PDUT_RESUME_ACK;
 
-	_tlli = htonl(tlli);
+	_tlli = osmo_htonl(tlli);
 	msgb_tvlv_put(msg, BSSGP_IE_TLLI, 4, (uint8_t *) &_tlli);
 	gsm48_construct_ra(ra, ra_id);
 	msgb_tvlv_put(msg, BSSGP_IE_ROUTEING_AREA, 6, ra);
@@ -208,7 +208,7 @@
 	msgb_bvci(msg) = 0; /* Signalling */
 	bgph->pdu_type = BSSGP_PDUT_SUSPEND_NACK;
 
-	_tlli = htonl(tlli);
+	_tlli = osmo_htonl(tlli);
 	msgb_tvlv_put(msg, BSSGP_IE_TLLI, 4, (uint8_t *) &_tlli);
 	gsm48_construct_ra(ra, ra_id);
 	msgb_tvlv_put(msg, BSSGP_IE_ROUTEING_AREA, 6, ra);
@@ -223,17 +223,16 @@
 	/* 6 octets RAC */
 	gsm48_parse_ra(raid, buf);
 	/* 2 octets CID */
-	return ntohs(*(uint16_t *) (buf+6));
+	return osmo_load16be(buf+6);
 }
 
 int bssgp_create_cell_id(uint8_t *buf, const struct gprs_ra_id *raid,
 			 uint16_t cid)
 {
-	uint16_t *out_cid = (uint16_t *) (buf + 6);
 	/* 6 octets RAC */
 	gsm48_construct_ra(buf, raid);
 	/* 2 octets CID */
-	*out_cid = htons(cid);
+	osmo_store16be(cid, buf+6);
 
 	return 8;
 }
@@ -247,7 +246,7 @@
 	uint16_t nsei = msgb_nsei(msg);
 	uint16_t bvci;
 
-	bvci = ntohs(*(uint16_t *)TLVP_VAL(tp, BSSGP_IE_BVCI));
+	bvci = tlvp_val16be(tp, BSSGP_IE_BVCI);
 	DEBUGP(DBSSGP, "BSSGP BVCI=%u Rx RESET cause=%s\n", bvci,
 		bssgp_cause_str(*TLVP_VAL(tp, BSSGP_IE_CAUSE)));
 
@@ -297,7 +296,7 @@
 	uint16_t bvci;
 	struct bssgp_bvc_ctx *ptp_ctx;
 
-	bvci = ntohs(*(uint16_t *)TLVP_VAL(tp, BSSGP_IE_BVCI));
+	bvci = tlvp_val16be(tp, BSSGP_IE_BVCI);
 	if (bvci == BVCI_SIGNALLING) {
 		/* 8.3.2: Signalling BVC shall never be blocked */
 		LOGP(DBSSGP, LOGL_ERROR, "NSEI=%u/BVCI=%u "
@@ -335,7 +334,7 @@
 	uint16_t bvci;
 	struct bssgp_bvc_ctx *ptp_ctx;
 
-	bvci = ntohs(*(uint16_t *)TLVP_VAL(tp, BSSGP_IE_BVCI));
+	bvci = tlvp_val16be(tp, BSSGP_IE_BVCI);
 	if (bvci == BVCI_SIGNALLING) {
 		/* 8.3.2: Signalling BVC shall never be blocked */
 		LOGP(DBSSGP, LOGL_ERROR, "NSEI=%u/BVCI=%u "
@@ -374,7 +373,7 @@
 	struct bssgp_ud_hdr *budh = (struct bssgp_ud_hdr *) msgb_bssgph(msg);
 
 	/* extract TLLI and parse TLV IEs */
-	msgb_tlli(msg) = ntohl(budh->tlli);
+	msgb_tlli(msg) = osmo_ntohl(budh->tlli);
 
 	DEBUGP(DBSSGP, "BSSGP TLLI=0x%08x Rx UPLINK-UNITDATA\n", msgb_tlli(msg));
 
@@ -416,7 +415,7 @@
 		return bssgp_tx_status(BSSGP_CAUSE_MISSING_MAND_IE, NULL, msg);
 	}
 
-	tlli = ntohl(tlvp_val32_unal(tp, BSSGP_IE_TLLI));
+	tlli = tlvp_val32be(tp, BSSGP_IE_TLLI);
 
 	DEBUGP(DBSSGP, "BSSGP BVCI=%u TLLI=0x%08x Rx SUSPEND\n",
 		ns_bvci, tlli);
@@ -458,7 +457,7 @@
 		return bssgp_tx_status(BSSGP_CAUSE_MISSING_MAND_IE, NULL, msg);
 	}
 
-	tlli = ntohl(tlvp_val32_unal(tp, BSSGP_IE_TLLI));
+	tlli = tlvp_val32be(tp, BSSGP_IE_TLLI);
 	suspend_ref = *TLVP_VAL(tp, BSSGP_IE_SUSPEND_REF_NR);
 
 	DEBUGP(DBSSGP, "BSSGP BVCI=%u TLLI=0x%08x Rx RESUME\n", ns_bvci, tlli);
@@ -500,7 +499,7 @@
 	}
 
 	if (TLVP_PRESENT(tp, BSSGP_IE_TLLI))
-		tlli = ntohl(*(uint32_t *)TLVP_VAL(tp, BSSGP_IE_TLLI));
+		tlli = tlvp_val32be(tp, BSSGP_IE_TLLI);
 
 	DEBUGP(DBSSGP, "BSSGP BVCI=%u TLLI=%08x Rx LLC DISCARDED\n",
 		ctx->bvci, tlli);
@@ -806,17 +805,13 @@
 	}
 
 	/* 11.3.5 Bucket Size in 100 octets unit */
-	bctx->fc->bucket_size_max = 100 *
-		ntohs(*(uint16_t *)TLVP_VAL(tp, BSSGP_IE_BVC_BUCKET_SIZE));
+	bctx->fc->bucket_size_max = 100 * tlvp_val16be(tp, BSSGP_IE_BVC_BUCKET_SIZE);
 	/* 11.3.4 Bucket Leak Rate in 100 bits/sec unit */
-	bctx->fc->bucket_leak_rate = 100 *
-		ntohs(*(uint16_t *)TLVP_VAL(tp, BSSGP_IE_BUCKET_LEAK_RATE)) / 8;
+	bctx->fc->bucket_leak_rate = 100 * tlvp_val16be(tp, BSSGP_IE_BUCKET_LEAK_RATE) / 8;
 	/* 11.3.2 in octets */
-	bctx->bmax_default_ms =
-		ntohs(*(uint16_t *)TLVP_VAL(tp, BSSGP_IE_BMAX_DEFAULT_MS));
+	bctx->bmax_default_ms = tlvp_val16be(tp, BSSGP_IE_BMAX_DEFAULT_MS);
 	/* 11.3.32 Bucket Leak rate in 100bits/sec unit */
-	bctx->r_default_ms = 100 *
-		ntohs(*(uint16_t *)TLVP_VAL(tp, BSSGP_IE_R_DEFAULT_MS)) / 8;
+	bctx->r_default_ms = 100 * tlvp_val16be(tp, BSSGP_IE_R_DEFAULT_MS) / 8;
 
 	if (old_leak_rate != 0 && bctx->fc->bucket_leak_rate == 0)
 		LOGP(DBSSGP, LOGL_NOTICE, "BSS instructs us to bucket leak "
@@ -1042,7 +1037,7 @@
 	}
 
 	if (bvci == BVCI_SIGNALLING && TLVP_PRESENT(&tp, BSSGP_IE_BVCI))
-		bvci = ntohs(*(uint16_t *)TLVP_VAL(&tp, BSSGP_IE_BVCI));
+		bvci = tlvp_val16be(&tp, BSSGP_IE_BVCI);
 
 	/* look-up or create the BTS context for this BVC */
 	bctx = btsctx_by_bvci_nsei(bvci, msgb_nsei(msg));
@@ -1095,7 +1090,7 @@
 	uint16_t msg_len = msg->len;
 	uint16_t bvci = msgb_bvci(msg);
 	uint16_t nsei = msgb_nsei(msg);
-	uint16_t _pdu_lifetime = htons(pdu_lifetime); /* centi-seconds */
+	uint16_t _pdu_lifetime = osmo_htons(pdu_lifetime); /* centi-seconds */
 	uint16_t drx_params;
 
 	OSMO_ASSERT(dup != NULL);
@@ -1134,7 +1129,7 @@
 
 	/* Old TLLI to help BSS map from old->new */
 	if (dup->tlli) {
-		uint32_t tlli = htonl(*dup->tlli);
+		uint32_t tlli = osmo_htonl(*dup->tlli);
 		msgb_tvlv_push(msg, BSSGP_IE_TLLI, 4, (uint8_t *) &tlli);
 	}
 
@@ -1148,7 +1143,7 @@
 	}
 
 	/* DRX parameters */
-	drx_params = htons(dup->drx_parms);
+	drx_params = osmo_htons(dup->drx_parms);
 	msgb_tvlv_push(msg, BSSGP_IE_DRX_PARAMS, 2,
 		(uint8_t *) &drx_params);
 
@@ -1165,7 +1160,7 @@
 	/* prepend the QoS profile, TLLI and pdu type */
 	budh = (struct bssgp_ud_hdr *) msgb_push(msg, sizeof(*budh));
 	memcpy(budh->qos_profile, dup->qos_profile, sizeof(budh->qos_profile));
-	budh->tlli = htonl(msgb_tlli(msg));
+	budh->tlli = osmo_htonl(msgb_tlli(msg));
 	budh->pdu_type = BSSGP_PDUT_DL_UNITDATA;
 
 	rate_ctr_inc(&bctx->ctrg->ctr[BSSGP_CTR_PKTS_OUT]);
@@ -1188,7 +1183,7 @@
 	struct msgb *msg = bssgp_msgb_alloc();
 	struct bssgp_normal_hdr *bgph =
 			(struct bssgp_normal_hdr *) msgb_put(msg, sizeof(*bgph));
-	uint16_t drx_params = htons(pinfo->drx_params);
+	uint16_t drx_params = osmo_htons(pinfo->drx_params);
 	uint8_t mi[10];
 	int imsi_len = gsm48_generate_mid_from_imsi(mi, pinfo->imsi);
 	uint8_t ra[6];
@@ -1226,7 +1221,7 @@
 		break;
 	case BSSGP_PAGING_BVCI:
 		{
-			uint16_t bvci = htons(pinfo->bvci);
+			uint16_t bvci = osmo_htons(pinfo->bvci);
 			msgb_tvlv_put(msg, BSSGP_IE_BVCI, 2, (uint8_t *)&bvci);
 		}
 		break;
@@ -1237,7 +1232,7 @@
 
 	/* Optional (P-)TMSI */
 	if (pinfo->ptmsi) {
-		uint32_t ptmsi = htonl(*pinfo->ptmsi);
+		uint32_t ptmsi = osmo_htonl(*pinfo->ptmsi);
 		msgb_tvlv_put(msg, BSSGP_IE_TMSI, 4, (uint8_t *) &ptmsi);
 	}
 
diff --git a/src/gb/gprs_bssgp_bss.c b/src/gb/gprs_bssgp_bss.c
index 73c1350..93af98f 100644
--- a/src/gb/gprs_bssgp_bss.c
+++ b/src/gb/gprs_bssgp_bss.c
@@ -1,6 +1,6 @@
 /* GPRS BSSGP protocol implementation as per 3GPP TS 08.18 */
 
-/* (C) 2009-2012 by Harald Welte <laforge@gnumonks.org>
+/* (C) 2009-2017 by Harald Welte <laforge@gnumonks.org>
  *
  * All Rights Reserved
  *
@@ -22,9 +22,8 @@
 #include <errno.h>
 #include <stdint.h>
 
-#include <netinet/in.h>
-
 #include <osmocom/core/msgb.h>
+#include <osmocom/core/byteswap.h>
 #include <osmocom/core/rate_ctr.h>
 #include <osmocom/gsm/tlv.h>
 #include <osmocom/core/talloc.h>
@@ -38,7 +37,7 @@
 
 uint8_t *bssgp_msgb_tlli_put(struct msgb *msg, uint32_t tlli)
 {
-	uint32_t _tlli = htonl(tlli);
+	uint32_t _tlli = osmo_htonl(tlli);
 	return msgb_tvlv_put(msg, BSSGP_IE_TLLI, 4, (uint8_t *) &_tlli);
 }
 
@@ -159,7 +158,7 @@
 				uint32_t tmsi)
 {
 	struct msgb *msg = common_tx_radio_status(bctx);
-	uint32_t _tmsi = htonl(tmsi);
+	uint32_t _tmsi = osmo_htonl(tmsi);
 
 	if (!msg)
 		return -ENOMEM;
@@ -196,8 +195,8 @@
 	struct msgb *msg = bssgp_msgb_alloc();
 	struct bssgp_normal_hdr *bgph =
 			(struct bssgp_normal_hdr *) msgb_put(msg, sizeof(*bgph));
-	uint16_t _bvci_new = htons(bvci_new);
-	uint32_t _oct_aff = htonl(num_octets & 0xFFFFFF);
+	uint16_t _bvci_new = osmo_htons(bvci_new);
+	uint32_t _oct_aff = osmo_htonl(num_octets & 0xFFFFFF);
 
 	msgb_nsei(msg) = bctx->nsei;
 	msgb_bvci(msg) = 0; /* Signalling */
@@ -219,8 +218,8 @@
 	struct msgb *msg = bssgp_msgb_alloc();
 	struct bssgp_normal_hdr *bgph =
 			(struct bssgp_normal_hdr *) msgb_put(msg, sizeof(*bgph));
-	uint16_t _bvci = htons(bctx->bvci);
-	uint32_t _oct_aff = htonl(num_octets & 0xFFFFFF);
+	uint16_t _bvci = osmo_htons(bctx->bvci);
+	uint32_t _oct_aff = osmo_htonl(num_octets & 0xFFFFFF);
 
 	LOGP(DBSSGP, LOGL_NOTICE, "BSSGP (BVCI=%u) Tx LLC-DISCARDED "
 	     "TLLI=0x%04x, FRAMES=%u, OCTETS=%u\n", bctx->bvci, tlli,
@@ -244,7 +243,7 @@
 	struct msgb *msg = bssgp_msgb_alloc();
 	struct bssgp_normal_hdr *bgph =
 			(struct bssgp_normal_hdr *) msgb_put(msg, sizeof(*bgph));
-	uint16_t _bvci = htons(bctx->bvci);
+	uint16_t _bvci = osmo_htons(bctx->bvci);
 
 	LOGP(DBSSGP, LOGL_NOTICE, "BSSGP (BVCI=%u) Tx BVC-BLOCK "
 		"CAUSE=%s\n", bctx->bvci, bssgp_cause_str(cause));
@@ -265,7 +264,7 @@
 	struct msgb *msg = bssgp_msgb_alloc();
 	struct bssgp_normal_hdr *bgph =
 			(struct bssgp_normal_hdr *) msgb_put(msg, sizeof(*bgph));
-	uint16_t _bvci = htons(bctx->bvci);
+	uint16_t _bvci = osmo_htons(bctx->bvci);
 
 	LOGP(DBSSGP, LOGL_NOTICE, "BSSGP (BVCI=%u) Tx BVC-BLOCK\n", bctx->bvci);
 
@@ -284,7 +283,7 @@
 	struct msgb *msg = bssgp_msgb_alloc();
 	struct bssgp_normal_hdr *bgph =
 			(struct bssgp_normal_hdr *) msgb_put(msg, sizeof(*bgph));
-	uint16_t _bvci = htons(bvci);
+	uint16_t _bvci = osmo_htons(bvci);
 
 	LOGP(DBSSGP, LOGL_NOTICE, "BSSGP (BVCI=%u) Tx BVC-RESET "
 		"CAUSE=%s\n", bvci, bssgp_cause_str(cause));
@@ -327,19 +326,19 @@
 
 	if ((bucket_size / 100) > 0xffff)
 		return -EINVAL;
-	e_bucket_size = htons(bucket_size / 100);
+	e_bucket_size = osmo_htons(bucket_size / 100);
 
 	if ((bucket_leak_rate * 8 / 100) > 0xffff)
 		return -EINVAL;
-	e_leak_rate = htons((bucket_leak_rate * 8) / 100);
+	e_leak_rate = osmo_htons((bucket_leak_rate * 8) / 100);
 
 	if ((bmax_default_ms / 100) > 0xffff)
 		return -EINVAL;
-	e_bmax_default_ms = htons(bmax_default_ms / 100);
+	e_bmax_default_ms = osmo_htons(bmax_default_ms / 100);
 
 	if ((r_default_ms * 8 / 100) > 0xffff)
 		return -EINVAL;
-	e_r_default_ms = htons((r_default_ms * 8) / 100);
+	e_r_default_ms = osmo_htons((r_default_ms * 8) / 100);
 
 	if (queue_delay_ms) {
 		if ((*queue_delay_ms / 10) > 60000)
@@ -347,7 +346,7 @@
 		else if (*queue_delay_ms == 0xFFFFFFFF)
 			e_queue_delay = 0xFFFF;
 		else
-			e_queue_delay = htons(*queue_delay_ms / 10);
+			e_queue_delay = osmo_htons(*queue_delay_ms / 10);
 	}
 
 	msg = bssgp_msgb_alloc();
@@ -408,7 +407,7 @@
 	msgb_bvci(msg) = bctx->bvci;
 	bgph->pdu_type = BSSGP_PDUT_FLOW_CONTROL_MS;
 
-	e_tlli = htonl(tlli);
+	e_tlli = osmo_htonl(tlli);
 	msgb_tvlv_put(msg, BSSGP_IE_TLLI, sizeof(e_tlli), (uint8_t *)&e_tlli);
 	msgb_tvlv_put(msg, BSSGP_IE_TAG, sizeof(tag), (uint8_t *)&tag);
 	msgb_tvlv_put(msg, BSSGP_IE_MS_BUCKET_SIZE,
@@ -454,7 +453,7 @@
 
 	/* User Data Header */
 	budh = (struct bssgp_ud_hdr *) msgb_push(msg, sizeof(*budh));
-	budh->tlli = htonl(tlli);
+	budh->tlli = osmo_htonl(tlli);
 	memcpy(budh->qos_profile, qos_profile, 3);
 	budh->pdu_type = BSSGP_PDUT_UL_UNITDATA;
 
@@ -508,7 +507,7 @@
 	/* DRX Parameters */
 	if (!TLVP_PRESENT(&tp, BSSGP_IE_DRX_PARAMS))
 		goto err_mand_ie;
-	pinfo->drx_params = ntohs(*(uint16_t *)TLVP_VAL(&tp, BSSGP_IE_DRX_PARAMS));
+	pinfo->drx_params = tlvp_val16be(&tp, BSSGP_IE_DRX_PARAMS);
 
 	/* Scope */
 	if (TLVP_PRESENT(&tp, BSSGP_IE_BSS_AREA_ID)) {
@@ -525,7 +524,7 @@
 		gsm48_parse_ra(&pinfo->raid, ra);
 	} else if (TLVP_PRESENT(&tp, BSSGP_IE_BVCI)) {
 		pinfo->scope = BSSGP_PAGING_BVCI;
-		pinfo->bvci = ntohs(*(uint16_t *)TLVP_VAL(&tp, BSSGP_IE_BVCI));
+		pinfo->bvci = tlvp_val16be(&tp, BSSGP_IE_BVCI);
 	} else
 		return -EINVAL;
 
@@ -545,8 +544,7 @@
 	    TLVP_LEN(&tp, BSSGP_IE_TMSI) >= 4) {
 		if (!pinfo->ptmsi)
 			pinfo->ptmsi = talloc_zero_size(pinfo, sizeof(uint32_t));
-		*(pinfo->ptmsi) = ntohl(*(uint32_t *)
-					TLVP_VAL(&tp, BSSGP_IE_TMSI));
+		*(pinfo->ptmsi) = osmo_load32be(TLVP_VAL(&tp, BSSGP_IE_TMSI));
 	}
 
 	return 0;
diff --git a/src/gb/gprs_bssgp_util.c b/src/gb/gprs_bssgp_util.c
index 6fff362..88916c1 100644
--- a/src/gb/gprs_bssgp_util.c
+++ b/src/gb/gprs_bssgp_util.c
@@ -1,6 +1,6 @@
 /* GPRS BSSGP protocol implementation as per 3GPP TS 08.18 */
 
-/* (C) 2009-2012 by Harald Welte <laforge@gnumonks.org>
+/* (C) 2009-2017 by Harald Welte <laforge@gnumonks.org>
  *
  * All Rights Reserved
  *
@@ -22,9 +22,8 @@
 #include <errno.h>
 #include <stdint.h>
 
-#include <netinet/in.h>
-
 #include <osmocom/core/msgb.h>
+#include <osmocom/core/byteswap.h>
 #include <osmocom/gsm/tlv.h>
 #include <osmocom/core/talloc.h>
 #include <osmocom/gprs/gprs_bssgp.h>
@@ -168,7 +167,7 @@
 	msgb_bvci(msg) = ns_bvci;
 
 	bgph->pdu_type = pdu_type;
-	_bvci = htons(bvci);
+	_bvci = osmo_htons(bvci);
 	msgb_tvlv_put(msg, BSSGP_IE_BVCI, 2, (uint8_t *) &_bvci);
 
 	return gprs_ns_sendmsg(bssgp_nsi, msg);
@@ -203,7 +202,7 @@
 	bgph->pdu_type = BSSGP_PDUT_STATUS;
 	msgb_tvlv_put(msg, BSSGP_IE_CAUSE, 1, &cause);
 	if (bvci) {
-		uint16_t _bvci = htons(*bvci);
+		uint16_t _bvci = osmo_htons(*bvci);
 		msgb_tvlv_put(msg, BSSGP_IE_BVCI, 2, (uint8_t *) &_bvci);
 	}
 	msgb_tvlv_put(msg, BSSGP_IE_PDU_IN_ERROR,
diff --git a/src/gb/gprs_ns.c b/src/gb/gprs_ns.c
index 9a2a114..d0c5a17 100644
--- a/src/gb/gprs_ns.c
+++ b/src/gb/gprs_ns.c
@@ -71,6 +71,7 @@
 #include <arpa/inet.h>
 
 #include <osmocom/core/msgb.h>
+#include <osmocom/core/byteswap.h>
 #include <osmocom/gsm/tlv.h>
 #include <osmocom/core/talloc.h>
 #include <osmocom/core/select.h>
@@ -404,8 +405,8 @@
 {
 	struct msgb *msg = gprs_ns_msgb_alloc();
 	struct gprs_ns_hdr *nsh;
-	uint16_t nsvci = htons(nsvc->nsvci);
-	uint16_t nsei = htons(nsvc->nsei);
+	uint16_t nsvci = osmo_htons(nsvc->nsvci);
+	uint16_t nsei = osmo_htons(nsvc->nsei);
 
 	log_set_context(LOG_CTX_GB_NSVC, nsvc);
 
@@ -437,11 +438,11 @@
 {
 	struct msgb *msg = gprs_ns_msgb_alloc();
 	struct gprs_ns_hdr *nsh;
-	uint16_t nsvci = htons(nsvc->nsvci);
+	uint16_t nsvci = osmo_htons(nsvc->nsvci);
 
 	log_set_context(LOG_CTX_GB_NSVC, nsvc);
 
-	bvci = htons(bvci);
+	bvci = osmo_htons(bvci);
 
 	if (!msg)
 		return -ENOMEM;
@@ -490,7 +491,7 @@
 {
 	struct msgb *msg = gprs_ns_msgb_alloc();
 	struct gprs_ns_hdr *nsh;
-	uint16_t nsvci = htons(nsvc->nsvci);
+	uint16_t nsvci = osmo_htons(nsvc->nsvci);
 
 	log_set_context(LOG_CTX_GB_NSVC, nsvc);
 
@@ -665,8 +666,8 @@
 	if (!msg)
 		return -ENOMEM;
 
-	nsvci = htons(nsvc->nsvci);
-	nsei = htons(nsvc->nsei);
+	nsvci = osmo_htons(nsvc->nsvci);
+	nsei = osmo_htons(nsvc->nsei);
 
 	msg->l2h = msgb_put(msg, sizeof(*nsh));
 	nsh = (struct gprs_ns_hdr *) msg->l2h;
@@ -849,8 +850,8 @@
 	}
 
 	cause = *(uint8_t  *) TLVP_VAL(&tp, NS_IE_CAUSE);
-	nsvci = ntohs(*(uint16_t *) TLVP_VAL(&tp, NS_IE_VCI));
-	nsei  = ntohs(*(uint16_t *) TLVP_VAL(&tp, NS_IE_NSEI));
+	nsvci = tlvp_val16be(&tp, NS_IE_VCI);
+	nsei  = tlvp_val16be(&tp, NS_IE_NSEI);
 
 	LOGP(DNS, LOGL_INFO, "NSVCI=%u%s Rx NS RESET (NSEI=%u, NSVCI=%u, cause=%s)\n",
 	     (*nsvc)->nsvci, (*nsvc)->nsvci_is_valid ? "" : "(invalid)",
@@ -957,8 +958,8 @@
 		return -EINVAL;
 	}
 
-	nsvci = ntohs(tlvp_val16_unal(&tp, NS_IE_VCI));
-	nsei  = ntohs(tlvp_val16_unal(&tp, NS_IE_NSEI));
+	nsvci = tlvp_val16be(&tp, NS_IE_VCI);
+	nsei  = tlvp_val16be(&tp, NS_IE_NSEI);
 
 	LOGP(DNS, LOGL_INFO, "NSVCI=%u%s Rx NS RESET ACK (NSEI=%u, NSVCI=%u)\n",
 	     (*nsvc)->nsvci, (*nsvc)->nsvci_is_valid ? "" : "(invalid)",
@@ -1145,7 +1146,7 @@
 	static char buf[80];
 	snprintf(buf, sizeof(buf), "%s:%u",
 		 inet_ntoa(nsvc->ip.bts_addr.sin_addr),
-		 ntohs(nsvc->ip.bts_addr.sin_port));
+		 osmo_ntohs(nsvc->ip.bts_addr.sin_port));
 	buf[sizeof(buf) - 1] = '\0';
 
 	return buf;
@@ -1271,8 +1272,8 @@
 		CHECK_TX_RC(rc, fallback_nsvc);
 		return -EINVAL;
 	}
-	nsvci = ntohs(*(uint16_t *) TLVP_VAL(&tp, NS_IE_VCI));
-	nsei  = ntohs(*(uint16_t *) TLVP_VAL(&tp, NS_IE_NSEI));
+	nsvci = tlvp_val16be(&tp, NS_IE_VCI);
+	nsei  = tlvp_val16be(&tp, NS_IE_NSEI);
 	/* Check if we already know this NSVCI, the remote end might
 	 * simply have changed addresses, or it is a SGSN */
 	existing_nsvc = gprs_nsvc_by_nsvci(nsi, nsvci);
@@ -1554,7 +1555,7 @@
 	struct in_addr in;
 	int ret;
 
-	in.s_addr = htonl(nsi->nsip.local_ip);
+	in.s_addr = osmo_htonl(nsi->nsip.local_ip);
 
 	nsi->nsip.fd.cb = nsip_fd_cb;
 	nsi->nsip.fd.data = nsi;
diff --git a/src/gb/gprs_ns_frgre.c b/src/gb/gprs_ns_frgre.c
index 6822541..285a9a0 100644
--- a/src/gb/gprs_ns_frgre.c
+++ b/src/gb/gprs_ns_frgre.c
@@ -32,6 +32,7 @@
 #include <arpa/inet.h>
 
 #include <osmocom/core/select.h>
+#include <osmocom/core/byteswap.h>
 #include <osmocom/core/msgb.h>
 #include <osmocom/core/talloc.h>
 #include <osmocom/core/socket.h>
@@ -121,7 +122,7 @@
 	}
 
 	inner_greh = (struct gre_hdr *) ((uint8_t *)inner_iph + iph->ihl*4);
-	if (inner_greh->ptype != htons(GRE_PTYPE_KAR)) {
+	if (inner_greh->ptype != osmo_htons(GRE_PTYPE_KAR)) {
 		LOGP(DNS, LOGL_ERROR, "GRE keepalive inner GRE type != 0\n");
 		return -EIO;
 	}
@@ -187,10 +188,10 @@
 	greh = (struct gre_hdr *) (msg->data + iph->ihl*4);
 	if (greh->flags) {
 		LOGP(DNS, LOGL_NOTICE, "Unknown GRE flags 0x%04x\n",
-			ntohs(greh->flags));
+			osmo_ntohs(greh->flags));
 	}
 
-	switch (ntohs(greh->ptype)) {
+	switch (osmo_ntohs(greh->ptype)) {
 	case GRE_PTYPE_IPv4:
 		/* IPv4 messages might be GRE keepalives */
 		*error = handle_rx_gre_ipv4(bfd, msg, iph, greh);
@@ -201,7 +202,7 @@
 		break;
 	default:
 		LOGP(DNS, LOGL_NOTICE, "Unknown GRE protocol 0x%04x != FR\n",
-			ntohs(greh->ptype));
+			osmo_ntohs(greh->ptype));
 		*error = -EIO;
 		goto out_err;
 		break;
@@ -231,7 +232,7 @@
 	msg->l2h = frh+2;
 
 	/* Store DLCI in NETWORK BYTEORDER in sockaddr port member */
-	saddr->sin_port = htons(dlci);
+	saddr->sin_port = osmo_htons(dlci);
 
 	return msg;
 
@@ -255,7 +256,7 @@
 	if (!msg)
 		return rc;
 
-	dlci = ntohs(saddr.sin_port);
+	dlci = osmo_ntohs(saddr.sin_port);
 	if (dlci == 0 || dlci == 1023) {
 		LOGP(DNS, LOGL_INFO, "Received FR on LMI DLCI %u - ignoring\n",
 			dlci);
@@ -281,7 +282,7 @@
 	int rc;
 	struct gprs_ns_inst *nsi = nsvc->nsi;
 	struct sockaddr_in daddr;
-	uint16_t dlci = ntohs(nsvc->frgre.bts_addr.sin_port);
+	uint16_t dlci = osmo_ntohs(nsvc->frgre.bts_addr.sin_port);
 	uint8_t *frh;
 	struct gre_hdr *greh;
 
@@ -298,7 +299,7 @@
 	/* Prepend the GRE header */
 	greh = (struct gre_hdr *) msgb_push(msg, sizeof(*greh));
 	greh->flags = 0;
-	greh->ptype = htons(GRE_PTYPE_FR);
+	greh->ptype = osmo_htons(GRE_PTYPE_FR);
 
 	rc = sendto(nsi->frgre.fd.fd, msg->data, msg->len, 0,
 		  (struct sockaddr *)&daddr, sizeof(daddr));
@@ -325,7 +326,7 @@
 	struct in_addr in;
 	int rc;
 
-	in.s_addr = htonl(nsi->frgre.local_ip);
+	in.s_addr = osmo_htonl(nsi->frgre.local_ip);
 
 	/* Make sure we close any existing socket before changing it */
 	if (nsi->frgre.fd.fd)
diff --git a/src/gb/gprs_ns_vty.c b/src/gb/gprs_ns_vty.c
index 6de74dd..bdccb3f 100644
--- a/src/gb/gprs_ns_vty.c
+++ b/src/gb/gprs_ns_vty.c
@@ -27,6 +27,7 @@
 #include <arpa/inet.h>
 
 #include <osmocom/core/msgb.h>
+#include <osmocom/core/byteswap.h>
 #include <osmocom/gsm/tlv.h>
 #include <osmocom/core/talloc.h>
 #include <osmocom/core/select.h>
@@ -100,7 +101,7 @@
 				inet_ntoa(nsvc->ip.bts_addr.sin_addr),
 				VTY_NEWLINE);
 			vty_out(vty, " nse %u remote-port %u%s",
-				nsvc->nsei, ntohs(nsvc->ip.bts_addr.sin_port),
+				nsvc->nsei, osmo_ntohs(nsvc->ip.bts_addr.sin_port),
 				VTY_NEWLINE);
 			break;
 		case GPRS_NS_LL_FR_GRE:
@@ -111,7 +112,7 @@
 				inet_ntoa(nsvc->frgre.bts_addr.sin_addr),
 				VTY_NEWLINE);
 			vty_out(vty, " nse %u fr-dlci %u%s",
-				nsvc->nsei, ntohs(nsvc->frgre.bts_addr.sin_port),
+				nsvc->nsei, osmo_ntohs(nsvc->frgre.bts_addr.sin_port),
 				VTY_NEWLINE);
 		default:
 			break;
@@ -124,7 +125,7 @@
 			vty_nsi->timeout[i], VTY_NEWLINE);
 
 	if (vty_nsi->nsip.local_ip) {
-		ia.s_addr = htonl(vty_nsi->nsip.local_ip);
+		ia.s_addr = osmo_htonl(vty_nsi->nsip.local_ip);
 		vty_out(vty, " encapsulation udp local-ip %s%s",
 			inet_ntoa(ia), VTY_NEWLINE);
 	}
@@ -138,7 +139,7 @@
 	vty_out(vty, " encapsulation framerelay-gre enabled %u%s",
 		vty_nsi->frgre.enabled ? 1 : 0, VTY_NEWLINE);
 	if (vty_nsi->frgre.local_ip) {
-		ia.s_addr = htonl(vty_nsi->frgre.local_ip);
+		ia.s_addr = osmo_htonl(vty_nsi->frgre.local_ip);
 		vty_out(vty, " encapsulation framerelay-gre local-ip %s%s",
 			inet_ntoa(ia), VTY_NEWLINE);
 	}
@@ -165,7 +166,7 @@
 		vty_out(vty, ", %s %15s:%u",
 			nsvc->ll == GPRS_NS_LL_UDP ? "UDP   " : "FR-GRE",
 			inet_ntoa(nsvc->ip.bts_addr.sin_addr),
-			ntohs(nsvc->ip.bts_addr.sin_port));
+			osmo_ntohs(nsvc->ip.bts_addr.sin_port));
 	vty_out(vty, "%s", VTY_NEWLINE);
 	if (stats) {
 		vty_out_rate_ctr_group(vty, " ", nsvc->ctrg);
@@ -178,11 +179,11 @@
 	struct gprs_nsvc *nsvc;
 	struct in_addr ia;
 
-	ia.s_addr = htonl(vty_nsi->nsip.local_ip);
+	ia.s_addr = osmo_htonl(vty_nsi->nsip.local_ip);
 	vty_out(vty, "Encapsulation NS-UDP-IP     Local IP: %s, UDP Port: %u%s",
 		inet_ntoa(ia), vty_nsi->nsip.local_port, VTY_NEWLINE);
 
-	ia.s_addr = htonl(vty_nsi->frgre.local_ip);
+	ia.s_addr = osmo_htonl(vty_nsi->frgre.local_ip);
 	vty_out(vty, "Encapsulation NS-FR-GRE-IP  Local IP: %s%s",
 		inet_ntoa(ia), VTY_NEWLINE);
 
@@ -309,7 +310,7 @@
 		return CMD_WARNING;
 	}
 
-	nsvc->ip.bts_addr.sin_port = htons(port);
+	nsvc->ip.bts_addr.sin_port = osmo_htons(port);
 
 	return CMD_SUCCESS;
 }
@@ -336,7 +337,7 @@
 		return CMD_WARNING;
 	}
 
-	nsvc->frgre.bts_addr.sin_port = htons(dlci);
+	nsvc->frgre.bts_addr.sin_port = osmo_htons(dlci);
 
 	return CMD_SUCCESS;
 }
@@ -441,7 +442,7 @@
 	struct in_addr ia;
 
 	inet_aton(argv[0], &ia);
-	vty_nsi->nsip.local_ip = ntohl(ia.s_addr);
+	vty_nsi->nsip.local_ip = osmo_ntohl(ia.s_addr);
 
 	return CMD_SUCCESS;
 }
@@ -482,7 +483,7 @@
 		return CMD_WARNING;
 	}
 	inet_aton(argv[0], &ia);
-	vty_nsi->frgre.local_ip = ntohl(ia.s_addr);
+	vty_nsi->frgre.local_ip = osmo_ntohl(ia.s_addr);
 
 	return CMD_SUCCESS;
 }
