diff --git a/src/gprs_rlcmac.h b/src/gprs_rlcmac.h
index d7d4647..d06a486 100644
--- a/src/gprs_rlcmac.h
+++ b/src/gprs_rlcmac.h
@@ -107,18 +107,16 @@
 	uint32_t fn);
 
 struct msgb *gprs_rlcmac_send_packet_uplink_assignment(
-	struct gprs_rlcmac_bts *bts,
         struct gprs_rlcmac_tbf *tbf, uint32_t fn);
 
 struct msgb *gprs_rlcmac_send_packet_downlink_assignment(
-	struct gprs_rlcmac_bts *bts,
         struct gprs_rlcmac_tbf *tbf, uint32_t fn);
 
-void gprs_rlcmac_trigger_downlink_assignment(struct gprs_rlcmac_bts *bts,
+void gprs_rlcmac_trigger_downlink_assignment(
 	struct gprs_rlcmac_tbf *tbf,
         struct gprs_rlcmac_tbf *old_tbf, const char *imsi);
 
-int gprs_rlcmac_downlink_ack(struct gprs_rlcmac_bts *bts,
+int gprs_rlcmac_downlink_ack(
 	struct gprs_rlcmac_tbf *tbf, uint8_t final,
         uint8_t ssn, uint8_t *rbb);
 
@@ -130,10 +128,9 @@
 	uint8_t *data, uint8_t len, int8_t rssi);
 
 struct msgb *gprs_rlcmac_send_data_block_acknowledged(
-	struct gprs_rlcmac_bts *bts,
         struct gprs_rlcmac_tbf *tbf, uint32_t fn, uint8_t ts);
 
-struct msgb *gprs_rlcmac_send_uplink_ack(struct gprs_rlcmac_bts *bts,
+struct msgb *gprs_rlcmac_send_uplink_ack(
 	struct gprs_rlcmac_tbf *tbf,
         uint32_t fn);
 
diff --git a/src/gprs_rlcmac_data.cpp b/src/gprs_rlcmac_data.cpp
index b33dd5e..324e2b9 100644
--- a/src/gprs_rlcmac_data.cpp
+++ b/src/gprs_rlcmac_data.cpp
@@ -81,7 +81,7 @@
 } __attribute__ ((packed));
 }
 
-static void gprs_rlcmac_downlink_assignment(struct gprs_rlcmac_bts *bts,
+static void gprs_rlcmac_downlink_assignment(
 	gprs_rlcmac_tbf *tbf, uint8_t poll,
 	const char *imsi);
 
@@ -129,7 +129,7 @@
 			tbf->state_flags |= (1 << GPRS_RLCMAC_FLAG_TO_UL_ASS);
 		}
 		tbf->ul_ass_state = GPRS_RLCMAC_UL_ASS_NONE;
-		debug_diagram(bts->bts, tbf->diag, "timeout UL-ASS");
+		debug_diagram(tbf->bts, tbf->diag, "timeout UL-ASS");
 		tbf->n3105++;
 		if (tbf->n3105 == bts->n3105) {
 			LOGP(DRLCMAC, LOGL_NOTICE, "- N3105 exceeded\n");
@@ -185,7 +185,7 @@
 				"for TBF=%d on PCH (IMSI=%s)\n", tbf->tfi,
 				tbf->dir.dl.imsi);
 			/* send immediate assignment */
-			gprs_rlcmac_downlink_assignment(bts, tbf, 0, tbf->dir.dl.imsi);
+			gprs_rlcmac_downlink_assignment(tbf, 0, tbf->dir.dl.imsi);
 			tbf->dir.dl.wait_confirm = 1;
 		}
 	} else
@@ -343,7 +343,7 @@
 		tbf->poll_state = GPRS_RLCMAC_POLL_NONE;
 		debug_diagram(bts->bts, tbf->diag, "got DL-ACK");
 
-		rc = gprs_rlcmac_downlink_ack(bts, tbf,
+		rc = gprs_rlcmac_downlink_ack(tbf,
 			ul_control_block->u.Packet_Downlink_Ack_Nack.Ack_Nack_Description.FINAL_ACK_INDICATION,
 			ul_control_block->u.Packet_Downlink_Ack_Nack.Ack_Nack_Description.STARTING_SEQUENCE_NUMBER,
 			ul_control_block->u.Packet_Downlink_Ack_Nack.Ack_Nack_Description.RECEIVED_BLOCK_BITMAP);
@@ -675,11 +675,12 @@
 	return 0;
 }
 
-struct msgb *gprs_rlcmac_send_uplink_ack(struct gprs_rlcmac_bts *bts,
+struct msgb *gprs_rlcmac_send_uplink_ack(
 	struct gprs_rlcmac_tbf *tbf,
 	uint32_t fn)
 {
 	int final = (tbf->state_is(GPRS_RLCMAC_FINISHED));
+	gprs_rlcmac_bts *bts = tbf->bts->bts_data();
 	struct msgb *msg;
 
 	if (final) {
@@ -689,7 +690,7 @@
 				"final uplink ack...\n", tbf->tfi);
 			return NULL;
 		}
-		if (bts->bts->sba()->find(tbf->trx_no, tbf->control_ts, (fn + 13) % 2715648)) {
+		if (tbf->bts->sba()->find(tbf->trx_no, tbf->control_ts, (fn + 13) % 2715648)) {
 			LOGP(DRLCMACUL, LOGL_DEBUG, "Polling is already "
 				"scheduled for single block allocation...\n");
 			return NULL;
@@ -953,11 +954,11 @@
 }
 
 struct msgb *gprs_rlcmac_send_packet_uplink_assignment(
-	struct gprs_rlcmac_bts *bts,
 	struct gprs_rlcmac_tbf *tbf, uint32_t fn)
 {
 	struct msgb *msg;
 	struct gprs_rlcmac_tbf *new_tbf;
+	gprs_rlcmac_bts *bts = tbf->bts->bts_data();
 
 #if POLLING_ASSIGNMENT_UL == 1
 	if (tbf->poll_state != GPRS_RLCMAC_POLL_NONE) {
@@ -966,7 +967,7 @@
 			"assignment...\n", tbf->tfi);
 			return NULL;
 	}
-	if (bts->bts->sba()->find(tbf->trx_no, tbf->control_ts, (fn + 13) % 2715648)) {
+	if (tbf->bts->sba()->find(tbf->trx_no, tbf->control_ts, (fn + 13) % 2715648)) {
 		LOGP(DRLCMACUL, LOGL_DEBUG, "Polling is already scheduled for "
 			"single block allocation...\n");
 			return NULL;
@@ -975,7 +976,7 @@
 
 	/* on down TBF we get the uplink TBF to be assigned. */
 	if (tbf->direction == GPRS_RLCMAC_DL_TBF)
-		new_tbf = bts->bts->tbf_by_tlli(tbf->tlli, GPRS_RLCMAC_UL_TBF);
+		new_tbf = tbf->bts->tbf_by_tlli(tbf->tlli, GPRS_RLCMAC_UL_TBF);
 	else
 		new_tbf = tbf;
 		
@@ -1113,7 +1114,6 @@
  * The messages are fragmented and forwarded as data blocks.
  */
 struct msgb *gprs_rlcmac_send_data_block_acknowledged(
-	struct gprs_rlcmac_bts *bts,
 	struct gprs_rlcmac_tbf *tbf, uint32_t fn, uint8_t ts)
 {
 	struct rlc_dl_header *rh;
@@ -1129,6 +1129,7 @@
 	uint8_t len;
 	uint16_t space, chunk;
 	int first_fin_ack = 0;
+	gprs_rlcmac_bts *bts = tbf->bts->bts_data();
 
 	LOGP(DRLCMACDL, LOGL_DEBUG, "DL DATA TBF=%d downlink (V(A)==%d .. "
 		"V(S)==%d)\n", tbf->tfi, tbf->dir.dl.v_a, tbf->dir.dl.v_s);
@@ -1205,6 +1206,7 @@
 	/* now we still have untransmitted LLC data, so we fill mac block */
 	index = tbf->dir.dl.v_s & mod_sns_half;
 	data = tbf->rlc_block[index];
+#warning "Selection of the CS doesn't belong here"
 	if (tbf->cs == 0) {
 		tbf->cs = bts->initial_cs_dl;
 		if (tbf->cs < 1 || tbf->cs > 4)
@@ -1383,7 +1385,7 @@
 			LOGP(DRLCMAC, LOGL_DEBUG, "Polling cannot be "
 				"sheduled in this TS %d, waiting for "
 				"TS %d\n", ts, tbf->control_ts);
-		else if (bts->bts->sba()->find(tbf->trx_no, ts, (fn + 13) % 2715648))
+		else if (tbf->bts->sba()->find(tbf->trx_no, ts, (fn + 13) % 2715648))
 			LOGP(DRLCMAC, LOGL_DEBUG, "Polling cannot be "
 				"sheduled, because single block alllocation "
 				"already exists\n");
@@ -1428,7 +1430,7 @@
 	return dl_msg;
 }
 
-int gprs_rlcmac_downlink_ack(struct gprs_rlcmac_bts *bts,
+int gprs_rlcmac_downlink_ack(
 	struct gprs_rlcmac_tbf *tbf, uint8_t final,
 	uint8_t ssn, uint8_t *rbb)
 {
@@ -1528,7 +1530,7 @@
 	}
 
 	LOGP(DRLCMACDL, LOGL_DEBUG, "- Final ACK received.\n");
-	debug_diagram(bts->bts, tbf->diag, "got Final ACK");
+	debug_diagram(tbf->bts, tbf->diag, "got Final ACK");
 	/* range V(A)..V(S)-1 */
 	for (bsn = tbf->dir.dl.v_a; bsn != tbf->dir.dl.v_s;
 	     bsn = (bsn + 1) & mod_sns) {
@@ -1547,8 +1549,9 @@
 			"release.\n");
 		/* start T3193 */
 		debug_diagram(bts->bts, tbf->diag, "start T3193");
-		tbf_timer_start(tbf, 3193, bts->t3193_msec / 1000,
-			(bts->t3193_msec % 1000) * 1000);
+		tbf_timer_start(tbf, 3193,
+			tbf->bts->bts_data()->t3193_msec / 1000,
+			(tbf->bts->bts_data()->t3193_msec % 1000) * 1000);
 		tbf_new_state(tbf, GPRS_RLCMAC_WAIT_RELEASE);
 
 		return 0;
@@ -1566,18 +1569,18 @@
 	tbf->state_flags &= GPRS_RLCMAC_FLAG_TO_MASK; /* keep TO flags */
 	tbf->state_flags &= ~(1 << GPRS_RLCMAC_FLAG_CCCH);
 	tbf_update(tbf);
-	gprs_rlcmac_trigger_downlink_assignment(bts, tbf, tbf, NULL);
+	gprs_rlcmac_trigger_downlink_assignment(tbf, tbf, NULL);
 
 	return 0;
 }
 
 
 struct msgb *gprs_rlcmac_send_packet_downlink_assignment(
-	struct gprs_rlcmac_bts *bts,
 	struct gprs_rlcmac_tbf *tbf, uint32_t fn)
 {
 	struct msgb *msg;
 	struct gprs_rlcmac_tbf *new_tbf;
+	gprs_rlcmac_bts *bts = tbf->bts->bts_data();
 	int poll_ass_dl = POLLING_ASSIGNMENT_DL;
 
 	if (poll_ass_dl && tbf->direction == GPRS_RLCMAC_DL_TBF
@@ -1595,7 +1598,7 @@
 				"assignment...\n", tbf->tfi);
 				return NULL;
 		}
-		if (bts->bts->sba()->find(tbf->trx_no, tbf->control_ts, (fn + 13) % 2715648)) {
+		if (tbf->bts->sba()->find(tbf->trx_no, tbf->control_ts, (fn + 13) % 2715648)) {
 			LOGP(DRLCMACUL, LOGL_DEBUG, "Polling is already "
 				"scheduled for single block allocation...\n");
 			return NULL;
@@ -1612,7 +1615,7 @@
 				"finished.\n");
 			return NULL;
 		}
-		new_tbf = bts->bts->tbf_by_tlli(tbf->tlli, GPRS_RLCMAC_DL_TBF);
+		new_tbf = tbf->bts->tbf_by_tlli(tbf->tlli, GPRS_RLCMAC_DL_TBF);
 	} else
 		new_tbf = tbf;
 	if (!new_tbf) {
@@ -1663,10 +1666,11 @@
 	return msg;
 }
 
-static void gprs_rlcmac_downlink_assignment(struct gprs_rlcmac_bts *bts,
+static void gprs_rlcmac_downlink_assignment(
 	gprs_rlcmac_tbf *tbf, uint8_t poll,
 	const char *imsi)
 {
+	gprs_rlcmac_bts *bts = tbf->bts->bts_data();
 	int plen;
 
 	debug_diagram(bts->bts, tbf->diag, "IMM.ASS (PCH)");
@@ -1684,7 +1688,7 @@
 }
 
 /* depending on the current TBF, we assign on PACCH or AGCH */
-void gprs_rlcmac_trigger_downlink_assignment(struct gprs_rlcmac_bts *bts,
+void gprs_rlcmac_trigger_downlink_assignment(
 	struct gprs_rlcmac_tbf *tbf,
 	struct gprs_rlcmac_tbf *old_tbf, const char *imsi)
 {
@@ -1728,7 +1732,7 @@
 		tbf->state_flags |= (1 << GPRS_RLCMAC_FLAG_CCCH);
 		strncpy(tbf->dir.dl.imsi, imsi, sizeof(tbf->dir.dl.imsi));
 		/* send immediate assignment */
-		gprs_rlcmac_downlink_assignment(bts, tbf, 0, imsi);
+		gprs_rlcmac_downlink_assignment(tbf, 0, imsi);
 		tbf->dir.dl.wait_confirm = 1;
 	}
 }
diff --git a/src/gprs_rlcmac_sched.cpp b/src/gprs_rlcmac_sched.cpp
index dc8e23d..e2e3804 100644
--- a/src/gprs_rlcmac_sched.cpp
+++ b/src/gprs_rlcmac_sched.cpp
@@ -119,17 +119,17 @@
 	/* schedule PACKET UPLINK ASSIGNMENT (1st priority) */
 	if (ul_ass_tbf) {
 		tbf = ul_ass_tbf;
-		msg = gprs_rlcmac_send_packet_uplink_assignment(bts, tbf, fn);
+		msg = gprs_rlcmac_send_packet_uplink_assignment(tbf, fn);
 	}
 	/* schedule PACKET DOWNLINK ASSIGNMENT (2nd priotiry) */
 	if (!msg && dl_ass_tbf) {
 		tbf = dl_ass_tbf;
-		msg = gprs_rlcmac_send_packet_downlink_assignment(bts, tbf, fn);
+		msg = gprs_rlcmac_send_packet_downlink_assignment(tbf, fn);
 	}
 	/* schedule PACKET UPLINK ACK (3rd priority) */
 	if (!msg && ul_ack_tbf) {
 		tbf = ul_ack_tbf;
-		msg = gprs_rlcmac_send_uplink_ack(bts, tbf, fn);
+		msg = gprs_rlcmac_send_uplink_ack(tbf, fn);
 	}
 	/* any message */
 	if (msg) {
@@ -182,8 +182,7 @@
 		/* next TBF to handle ressource is the next one */
 		pdch->next_dl_tfi = (tfi + 1) & 31;
 		/* generate DL data block */
-		msg = gprs_rlcmac_send_data_block_acknowledged(bts, tbf, fn,
-			ts);
+		msg = gprs_rlcmac_send_data_block_acknowledged(tbf, fn, ts);
 		break;
 	}
 
diff --git a/src/tbf.cpp b/src/tbf.cpp
index 8800cca..683b33a 100644
--- a/src/tbf.cpp
+++ b/src/tbf.cpp
@@ -78,7 +78,7 @@
 		tbf->state_flags &= ~(1 << GPRS_RLCMAC_FLAG_CCCH);
 		tbf_update_ms_class(tbf, ms_class);
 		tbf_update(tbf);
-		gprs_rlcmac_trigger_downlink_assignment(bts, tbf, tbf, NULL);
+		gprs_rlcmac_trigger_downlink_assignment(tbf, tbf, NULL);
 	} else {
 		/* the TBF exists, so we must write it in the queue
 		 * we prepend lifetime in front of PDU */
@@ -184,7 +184,7 @@
 	 * we don't use old_downlink, so the possible uplink is used
 	 * to trigger downlink assignment. if there is no uplink,
 	 * AGCH is used. */
-	gprs_rlcmac_trigger_downlink_assignment(bts, tbf, old_tbf, imsi);
+	gprs_rlcmac_trigger_downlink_assignment(tbf, old_tbf, imsi);
 
 	/* store IMSI for debugging purpose. TODO: it is more than debugging */
 	tbf_assign_imsi(tbf, imsi);
