diff --git a/src/bts.cpp b/src/bts.cpp
index e72f4c7..ae63a12 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -1234,7 +1234,7 @@
 	    poll->tbf_poll.poll_tbf->direction != GPRS_RLCMAC_UL_TBF)
 		goto no_tbf;
 
-	tbf = as_ul_tbf(poll->tbf_poll.poll_tbf);
+	tbf = tbf_as_ul_tbf(poll->tbf_poll.poll_tbf);
 	/* we need to distinguish TA information provided by L1
 	 * from PH-DATA-IND and PHY-RA-IND so that we can properly
 	 * update TA for given TBF
diff --git a/src/encoding.cpp b/src/encoding.cpp
index 67defec..278da72 100644
--- a/src/encoding.cpp
+++ b/src/encoding.cpp
@@ -506,9 +506,9 @@
 	/* 3GPP TS 44.018 §10.5.2.16 IA Rest Octets */
 	dest->cur_bit = wp;
 	if (downlink) {
-		OSMO_ASSERT(as_dl_tbf(tbf) != NULL);
+		OSMO_ASSERT(tbf_as_dl_tbf(tbf) != NULL);
 
-		rc = write_ia_rest_downlink(as_dl_tbf(tbf), dest, polling, gsm48_ta_is_valid(ta), fn, alpha, gamma,
+		rc = write_ia_rest_downlink(tbf_as_dl_tbf(tbf), dest, polling, gsm48_ta_is_valid(ta), fn, alpha, gamma,
 					    ta_idx);
 	} else if (((burst_type == GSM_L1_BURST_TYPE_ACCESS_1) || (burst_type == GSM_L1_BURST_TYPE_ACCESS_2))) {
 		SET_L(dest); SET_H(dest); // "LH"
@@ -518,8 +518,8 @@
 
 		SET_0(dest); // No < Access Technologies Request struct >
 
-		if (as_ul_tbf(tbf) != NULL)
-			rc = write_ia_rest_egprs_uplink_sba(as_ul_tbf(tbf), dest, usf, alpha, gamma, ta_idx);
+		if (tbf_as_ul_tbf(tbf) != NULL)
+			rc = write_ia_rest_egprs_uplink_sba(tbf_as_ul_tbf(tbf), dest, usf, alpha, gamma, ta_idx);
 		else
 			rc = write_ia_rest_egprs_uplink_mba(dest, fn, alpha, gamma);
 	} else {
@@ -528,8 +528,8 @@
 		SET_H(dest); SET_H(dest); // "HH"
 		SET_0(dest); SET_0(dest); // "00" < Packet Uplink Assignment >
 
-		if (as_ul_tbf(tbf) != NULL)
-			rc = write_ia_rest_uplink_mba(as_ul_tbf(tbf), dest, usf, alpha, gamma, ta_idx);
+		if (tbf_as_ul_tbf(tbf) != NULL)
+			rc = write_ia_rest_uplink_mba(tbf_as_ul_tbf(tbf), dest, usf, alpha, gamma, ta_idx);
 		else
 			rc = write_ia_rest_uplink_sba(dest, fn, alpha, gamma);
 	}
diff --git a/src/gprs_ms.c b/src/gprs_ms.c
index df1c9be..0ccedb3 100644
--- a/src/gprs_ms.c
+++ b/src/gprs_ms.c
@@ -344,9 +344,9 @@
 void ms_attach_tbf(struct GprsMs *ms, struct gprs_rlcmac_tbf *tbf)
 {
 	if (tbf_direction(tbf) == GPRS_RLCMAC_DL_TBF)
-		ms_attach_dl_tbf(ms, as_dl_tbf(tbf));
+		ms_attach_dl_tbf(ms, tbf_as_dl_tbf(tbf));
 	else
-		ms_attach_ul_tbf(ms, as_ul_tbf(tbf));
+		ms_attach_ul_tbf(ms, tbf_as_ul_tbf(tbf));
 }
 
 void ms_detach_tbf(struct GprsMs *ms, struct gprs_rlcmac_tbf *tbf)
diff --git a/src/gprs_rlcmac_sched.cpp b/src/gprs_rlcmac_sched.cpp
index f5a01e9..20b4f8e 100644
--- a/src/gprs_rlcmac_sched.cpp
+++ b/src/gprs_rlcmac_sched.cpp
@@ -45,7 +45,7 @@
 	struct llist_item *pos;
 
 	llist_for_each_entry(pos, &pdch->trx->ul_tbfs, list) {
-		ul_tbf = as_ul_tbf((struct gprs_rlcmac_tbf *)pos->entry);
+		ul_tbf = tbf_as_ul_tbf((struct gprs_rlcmac_tbf *)pos->entry);
 		OSMO_ASSERT(ul_tbf);
 		/* this trx, this ts */
 		if (!ul_tbf->is_control_ts(pdch->ts_no))
@@ -63,7 +63,7 @@
 states? */
 	}
 	llist_for_each_entry(pos, &pdch->trx->dl_tbfs, list) {
-		dl_tbf = as_dl_tbf((struct gprs_rlcmac_tbf *)pos->entry);
+		dl_tbf = tbf_as_dl_tbf((struct gprs_rlcmac_tbf *)pos->entry);
 		OSMO_ASSERT(dl_tbf);
 		/* this trx, this ts */
 		if (!dl_tbf->is_control_ts(pdch->ts_no))
@@ -456,8 +456,8 @@
 		 * let's set its USF in the DL msg. This is not really needed,
 		 * but it helps understand better the flow when looking at
 		 * pcaps. */
-		if (poll_tbf->direction == GPRS_RLCMAC_UL_TBF && as_ul_tbf(poll_tbf)->m_usf[ts] != USF_INVALID)
-			usf_tbf = as_ul_tbf(poll_tbf);
+		if (poll_tbf->direction == GPRS_RLCMAC_UL_TBF && tbf_as_ul_tbf(poll_tbf)->m_usf[ts] != USF_INVALID)
+			usf_tbf = tbf_as_ul_tbf(poll_tbf);
 	/* else, search for uplink tbf */
 	} else if ((usf_tbf = sched_select_uplink(pdch, require_gprs_only))) {
 		LOGPDCH(pdch, DRLCMACSCHED, LOGL_DEBUG, "Received RTS for PDCH: FN=%d "
diff --git a/src/gprs_rlcmac_ts_alloc.cpp b/src/gprs_rlcmac_ts_alloc.cpp
index 3a60839..b5757a7 100644
--- a/src/gprs_rlcmac_ts_alloc.cpp
+++ b/src/gprs_rlcmac_ts_alloc.cpp
@@ -400,11 +400,11 @@
 	/* The allocation will be successful, so the system state and tbf/ms
 	 * may be modified from now on. */
 	if (tbf->direction == GPRS_RLCMAC_UL_TBF) {
-		struct gprs_rlcmac_ul_tbf *ul_tbf = as_ul_tbf(tbf);
+		struct gprs_rlcmac_ul_tbf *ul_tbf = tbf_as_ul_tbf(tbf);
 		LOGPSL(tbf, LOGL_DEBUG, "Assign uplink TS=%d TFI=%d USF=%d\n", ts, tfi, usf);
 		assign_uplink_tbf_usf(pdch, ul_tbf, tfi, usf);
 	} else {
-		struct gprs_rlcmac_dl_tbf *dl_tbf = as_dl_tbf(tbf);
+		struct gprs_rlcmac_dl_tbf *dl_tbf = tbf_as_dl_tbf(tbf);
 		LOGPSL(tbf, LOGL_DEBUG, "Assign downlink TS=%d TFI=%d\n", ts, tfi);
 		assign_dlink_tbf(pdch, dl_tbf, tfi);
 	}
@@ -951,9 +951,9 @@
 	tbf->first_ts = first_ts;
 
 	if (tbf->direction == GPRS_RLCMAC_DL_TBF)
-		assign_dl_tbf_slots(as_dl_tbf(tbf), trx, dl_slots, tfi);
+		assign_dl_tbf_slots(tbf_as_dl_tbf(tbf), trx, dl_slots, tfi);
 	else
-		assign_ul_tbf_slots(as_ul_tbf(tbf), trx, ul_slots, tfi, usf);
+		assign_ul_tbf_slots(tbf_as_ul_tbf(tbf), trx, ul_slots, tfi, usf);
 
 	bts_do_rate_ctr_inc(bts, CTR_TBF_ALLOC_ALGO_B);
 
diff --git a/src/pcu_vty_functions.cpp b/src/pcu_vty_functions.cpp
index 28ecebf..91f2068 100644
--- a/src/pcu_vty_functions.cpp
+++ b/src/pcu_vty_functions.cpp
@@ -42,8 +42,8 @@
 
 static void tbf_print_vty_info(struct vty *vty, struct gprs_rlcmac_tbf *tbf)
 {
-	gprs_rlcmac_ul_tbf *ul_tbf = as_ul_tbf(tbf);
-	gprs_rlcmac_dl_tbf *dl_tbf = as_dl_tbf(tbf);
+	gprs_rlcmac_ul_tbf *ul_tbf = tbf_as_ul_tbf(tbf);
+	gprs_rlcmac_dl_tbf *dl_tbf = tbf_as_dl_tbf(tbf);
 
 	vty_out(vty, "TBF: TFI=%d TLLI=0x%08x (%s) TA=%u DIR=%s IMSI=%s%s", tbf->tfi(),
 		tbf->tlli(), tbf->is_tlli_valid() ? "valid" : "invalid",
diff --git a/src/pdch.cpp b/src/pdch.cpp
index a5eb080..4d6d8f6 100644
--- a/src/pdch.cpp
+++ b/src/pdch.cpp
@@ -376,7 +376,7 @@
 
 	switch (reason) {
 	case PDCH_ULC_POLL_UL_ACK:
-		ul_tbf = as_ul_tbf(tbf);
+		ul_tbf = tbf_as_ul_tbf(tbf);
 		OSMO_ASSERT(ul_tbf);
 		if (!tbf_ul_ack_exp_ctrl_ack(ul_tbf, fn, ts_no)) {
 			LOGPTBF(tbf, LOGL_NOTICE, "FN=%d, TS=%d (curr FN %d): POLL_UL_ACK not expected!\n",
@@ -497,7 +497,7 @@
 		return;
 	}
 	OSMO_ASSERT(poll->tbf_poll.poll_tbf);
-	tbf = as_dl_tbf(poll->tbf_poll.poll_tbf);
+	tbf = tbf_as_dl_tbf(poll->tbf_poll.poll_tbf);
 	if (tbf->tfi() != tfi) {
 		LOGPTBFDL(tbf, LOGL_NOTICE,
 			  "PACKET DOWNLINK ACK with wrong TFI=%d, ignoring!\n", tfi);
@@ -567,7 +567,7 @@
 		return;
 	}
 	OSMO_ASSERT(poll->tbf_poll.poll_tbf);
-	tbf = as_dl_tbf(poll->tbf_poll.poll_tbf);
+	tbf = tbf_as_dl_tbf(poll->tbf_poll.poll_tbf);
 	if (tbf->tfi() != tfi) {
 		LOGPDCH(this, DRLCMAC, LOGL_NOTICE, "EGPRS PACKET DOWNLINK ACK with "
 			"wrong TFI=%d, ignoring!\n", tfi);
@@ -1099,12 +1099,12 @@
 
 gprs_rlcmac_ul_tbf *gprs_rlcmac_pdch::ul_tbf_by_tfi(uint8_t tfi)
 {
-	return as_ul_tbf(tbf_by_tfi(tfi, GPRS_RLCMAC_UL_TBF));
+	return tbf_as_ul_tbf(tbf_by_tfi(tfi, GPRS_RLCMAC_UL_TBF));
 }
 
 gprs_rlcmac_dl_tbf *gprs_rlcmac_pdch::dl_tbf_by_tfi(uint8_t tfi)
 {
-	return as_dl_tbf(tbf_by_tfi(tfi, GPRS_RLCMAC_DL_TBF));
+	return tbf_as_dl_tbf(tbf_by_tfi(tfi, GPRS_RLCMAC_DL_TBF));
 }
 
 /* lookup TBF Entity (by TFI) */
@@ -1159,7 +1159,7 @@
 
 	num_tbfs_update(tbf, true);
 	if (tbf->direction == GPRS_RLCMAC_UL_TBF) {
-		ul_tbf = as_ul_tbf(tbf);
+		ul_tbf = tbf_as_ul_tbf(tbf);
 		m_assigned_usf |= 1 << ul_tbf->m_usf[ts_no];
 	}
 	m_assigned_tfi[tbf->direction] |= 1UL << tbf->tfi();
@@ -1188,7 +1188,7 @@
 
 	num_tbfs_update(tbf, false);
 	if (tbf->direction == GPRS_RLCMAC_UL_TBF) {
-		ul_tbf = as_ul_tbf(tbf);
+		ul_tbf = tbf_as_ul_tbf(tbf);
 		m_assigned_usf &= ~(1 << ul_tbf->m_usf[ts_no]);
 	}
 	m_assigned_tfi[tbf->direction] &= ~(1UL << tbf->tfi());
@@ -1271,7 +1271,7 @@
 	 * PDCH, since they have no TFI assigned (see handle_tbf_reject()).
 	 * Get rid of them too: */
 	llist_for_each_entry_safe(pos, pos2, &pdch->trx->ul_tbfs, list) {
-		struct gprs_rlcmac_ul_tbf *ul_tbf = as_ul_tbf((struct gprs_rlcmac_tbf *)pos->entry);
+		struct gprs_rlcmac_ul_tbf *ul_tbf = tbf_as_ul_tbf((struct gprs_rlcmac_tbf *)pos->entry);
 		if (ul_tbf->control_ts == pdch->ts_no)
 			tbf_free(ul_tbf);
 	}
diff --git a/src/tbf.cpp b/src/tbf.cpp
index 7094d40..4f0162e 100644
--- a/src/tbf.cpp
+++ b/src/tbf.cpp
@@ -268,7 +268,7 @@
 		if (tbf->state_is(TBF_ST_FLOW))
 			bts_do_rate_ctr_inc(tbf->bts, CTR_TBF_UL_ABORTED);
 	} else {
-		gprs_rlcmac_dl_tbf *dl_tbf = as_dl_tbf(tbf);
+		gprs_rlcmac_dl_tbf *dl_tbf = tbf_as_dl_tbf(tbf);
 		gprs_rlc_dl_window *win = static_cast<gprs_rlc_dl_window *>(dl_tbf->window());
 
 		bts_do_rate_ctr_inc(tbf->bts, CTR_TBF_DL_FREED);
@@ -324,7 +324,7 @@
 	}
 
 	if (is_egprs_enabled()) {
-		gprs_rlcmac_dl_tbf *dl_tbf = as_dl_tbf(this);
+		gprs_rlcmac_dl_tbf *dl_tbf = tbf_as_dl_tbf(this);
 		if (dl_tbf)
 			dl_tbf->set_window_size();
 	}
@@ -549,7 +549,7 @@
 
 	switch (reason) {
 	case PDCH_ULC_POLL_UL_ACK:
-		ul_tbf = as_ul_tbf(this);
+		ul_tbf = tbf_as_ul_tbf(this);
 		OSMO_ASSERT(ul_tbf);
 		if (!tbf_ul_ack_exp_ctrl_ack(ul_tbf, poll_fn, pdch->ts_no)) {
 			LOGPTBF(this, LOGL_NOTICE, "FN=%d, TS=%d (curr FN %d): POLL_UL_ACK not expected!\n",
@@ -617,7 +617,7 @@
 		break;
 
 	case PDCH_ULC_POLL_DL_ACK:
-		dl_tbf = as_dl_tbf(this);
+		dl_tbf = tbf_as_dl_tbf(this);
 		/* POLL Timeout expecting DL ACK/NACK: implies direction == GPRS_RLCMAC_DL_TBF */
 		OSMO_ASSERT(dl_tbf);
 		if (!(dl_tbf->state_fsm.state_flags & (1 << GPRS_RLCMAC_FLAG_TO_DL_ACK))) {
@@ -741,7 +741,7 @@
 	osmo_fsm_inst_update_id(tbf->dl_ass_fsm.fi, buf);
 
 	if (tbf_direction(tbf) == GPRS_RLCMAC_UL_TBF) {
-		struct gprs_rlcmac_ul_tbf *ul_tbf = as_ul_tbf(tbf);
+		struct gprs_rlcmac_ul_tbf *ul_tbf = tbf_as_ul_tbf(tbf);
 		osmo_fsm_inst_update_id(ul_tbf->ul_ack_fsm.fi, buf);
 	}
 
diff --git a/src/tbf_dl.cpp b/src/tbf_dl.cpp
index 9fe1bd8..a8fb6fc 100644
--- a/src/tbf_dl.cpp
+++ b/src/tbf_dl.cpp
@@ -1318,7 +1318,7 @@
 	}
 }
 
-struct gprs_rlcmac_dl_tbf *as_dl_tbf(struct gprs_rlcmac_tbf *tbf)
+struct gprs_rlcmac_dl_tbf *tbf_as_dl_tbf(struct gprs_rlcmac_tbf *tbf)
 {
 	if (tbf && tbf->direction == GPRS_RLCMAC_DL_TBF)
 		return static_cast<gprs_rlcmac_dl_tbf *>(tbf);
diff --git a/src/tbf_dl.h b/src/tbf_dl.h
index 8160cf3..e0daf57 100644
--- a/src/tbf_dl.h
+++ b/src/tbf_dl.h
@@ -130,7 +130,7 @@
 struct gprs_rlcmac_dl_tbf *dl_tbf_alloc(struct gprs_rlcmac_bts *bts, struct GprsMs *ms,
 					int8_t use_trx, bool single_slot);
 
-struct gprs_rlcmac_dl_tbf *as_dl_tbf(struct gprs_rlcmac_tbf *tbf);
+struct gprs_rlcmac_dl_tbf *tbf_as_dl_tbf(struct gprs_rlcmac_tbf *tbf);
 /* dispatch Unitdata.DL messages */
 int dl_tbf_handle(struct gprs_rlcmac_bts *bts,
 		  const uint32_t tlli, const uint32_t old_tlli,
diff --git a/src/tbf_fsm.c b/src/tbf_fsm.c
index 2189747..2b712e7 100644
--- a/src/tbf_fsm.c
+++ b/src/tbf_fsm.c
@@ -342,7 +342,7 @@
 
 static void handle_timeout_X2002(struct tbf_fsm_ctx *ctx)
 {
-	struct gprs_rlcmac_dl_tbf *dl_tbf = as_dl_tbf(ctx->tbf);
+	struct gprs_rlcmac_dl_tbf *dl_tbf = tbf_as_dl_tbf(ctx->tbf);
 
 	/* X2002 is used only for DL TBF */
 	OSMO_ASSERT(dl_tbf);
diff --git a/src/tbf_ul.cpp b/src/tbf_ul.cpp
index 21a7a76..3988176 100644
--- a/src/tbf_ul.cpp
+++ b/src/tbf_ul.cpp
@@ -758,7 +758,7 @@
 		osmo_fsm_inst_dispatch(this->state_fsm.fi, TBF_EV_MAX_N3101, NULL);
 }
 
-struct gprs_rlcmac_ul_tbf *as_ul_tbf(struct gprs_rlcmac_tbf *tbf)
+struct gprs_rlcmac_ul_tbf *tbf_as_ul_tbf(struct gprs_rlcmac_tbf *tbf)
 {
 	if (tbf && tbf->direction == GPRS_RLCMAC_UL_TBF)
 		return static_cast<gprs_rlcmac_ul_tbf *>(tbf);
diff --git a/src/tbf_ul.h b/src/tbf_ul.h
index d69220d..301c52a 100644
--- a/src/tbf_ul.h
+++ b/src/tbf_ul.h
@@ -137,7 +137,7 @@
 #endif
 void update_tbf_ta(struct gprs_rlcmac_ul_tbf *tbf, int8_t ta_delta);
 void set_tbf_ta(struct gprs_rlcmac_ul_tbf *tbf, uint8_t ta);
-struct gprs_rlcmac_ul_tbf *as_ul_tbf(struct gprs_rlcmac_tbf *tbf);
+struct gprs_rlcmac_ul_tbf *tbf_as_ul_tbf(struct gprs_rlcmac_tbf *tbf);
 void tbf_usf_timeout(struct gprs_rlcmac_ul_tbf *tbf);
 bool ul_tbf_contention_resolution_done(const struct gprs_rlcmac_ul_tbf *tbf);
 struct osmo_fsm_inst *tbf_ul_ack_fi(const struct gprs_rlcmac_ul_tbf *tbf);
