diff --git a/src/rlc.cpp b/src/rlc.cpp
index f3a25b2..0df1655 100644
--- a/src/rlc.cpp
+++ b/src/rlc.cpp
@@ -46,24 +46,24 @@
 		mark_invalid(i);
 }
 
-int gprs_rlc_v_b::resend_needed(const gprs_rlc_dl_window &w)
+int gprs_rlc_dl_window::resend_needed()
 {
-	for (uint16_t bsn = w.v_a(); bsn != w.v_s(); bsn = (bsn + 1) & w.mod_sns()) {
-		if (is_nacked(bsn) || is_resend(bsn))
+	for (uint16_t bsn = v_a(); bsn != v_s(); bsn = (bsn + 1) & mod_sns()) {
+		if (m_v_b.is_nacked(bsn) || m_v_b.is_resend(bsn))
 			return bsn;
 	}
 
 	return -1;
 }
 
-int gprs_rlc_v_b::mark_for_resend(const gprs_rlc_dl_window &w)
+int gprs_rlc_dl_window::mark_for_resend()
 {
 	int resend = 0;
 
-	for (uint16_t bsn = w.v_a(); bsn != w.v_s(); bsn = (bsn + 1) & w.mod_sns()) {
-		if (is_unacked(bsn)) {
+	for (uint16_t bsn = v_a(); bsn != v_s(); bsn = (bsn + 1) & mod_sns()) {
+		if (m_v_b.is_unacked(bsn)) {
 			/* mark to be re-send */
-			mark_resend(bsn);
+			m_v_b.mark_resend(bsn);
 			resend += 1;
 		}
 	}
@@ -71,13 +71,13 @@
 	return resend;
 }
 
-int gprs_rlc_v_b::count_unacked(const gprs_rlc_dl_window &w)
+int gprs_rlc_dl_window::count_unacked()
 {
 	uint16_t unacked = 0;
 	uint16_t bsn;
 
-	for (bsn = w.v_a(); bsn != w.v_s(); bsn = (bsn + 1) & w.mod_sns()) {
-		if (!is_acked(bsn))
+	for (bsn = v_a(); bsn != v_s(); bsn = (bsn + 1) & mod_sns()) {
+		if (!m_v_b.is_acked(bsn))
 			unacked += 1;
 	}
 
@@ -89,40 +89,39 @@
 	return (ssn - 1 - bitnum) & mod_sns;
 }
 
-void gprs_rlc_v_b::update(BTS *bts, char *show_rbb, uint8_t ssn,
-			const gprs_rlc_dl_window &w,
+void gprs_rlc_dl_window::update(BTS *bts, char *show_rbb, uint8_t ssn,
 			uint16_t *lost, uint16_t *received)
 {
 	/* SSN - 1 is in range V(A)..V(S)-1 */
-	for (int bitpos = 0; bitpos < w.ws(); bitpos++) {
-		uint16_t bsn = bitnum_to_bsn(bitpos, ssn, w.mod_sns());
+	for (int bitpos = 0; bitpos < ws(); bitpos++) {
+		uint16_t bsn = bitnum_to_bsn(bitpos, ssn, mod_sns());
 
-		if (bsn == ((w.v_a() - 1) & w.mod_sns()))
+		if (bsn == ((v_a() - 1) & mod_sns()))
 			break;
 
-		if (show_rbb[w.ws() - 1 - bitpos] == 'R') {
+		if (show_rbb[ws() - 1 - bitpos] == 'R') {
 			LOGP(DRLCMACDL, LOGL_DEBUG, "- got ack for BSN=%d\n", bsn);
-			if (!is_acked(bsn))
+			if (!m_v_b.is_acked(bsn))
 				*received += 1;
-			mark_acked(bsn);
+			m_v_b.mark_acked(bsn);
 		} else {
 			LOGP(DRLCMACDL, LOGL_DEBUG, "- got NACK for BSN=%d\n", bsn);
-			mark_nacked(bsn);
+			m_v_b.mark_nacked(bsn);
 			bts->rlc_nacked();
 			*lost += 1;
 		}
 	}
 }
 
-int gprs_rlc_v_b::move_window(const gprs_rlc_dl_window &w)
+int gprs_rlc_dl_window::move_window()
 {
 	int i;
 	uint16_t bsn;
 	int moved = 0;
 
-	for (i = 0, bsn = w.v_a(); bsn != w.v_s(); i++, bsn = (bsn + 1) & w.mod_sns()) {
-		if (is_acked(bsn)) {
-			mark_invalid(bsn);
+	for (i = 0, bsn = v_a(); bsn != v_s(); i++, bsn = (bsn + 1) & mod_sns()) {
+		if (m_v_b.is_acked(bsn)) {
+			m_v_b.mark_invalid(bsn);
 			moved += 1;
 		} else
 			break;
@@ -131,14 +130,14 @@
 	return moved;
 }
 
-void gprs_rlc_v_b::state(char *show_v_b, const gprs_rlc_dl_window &w)
+void gprs_rlc_dl_window::state(char *show_v_b)
 {
 	int i;
 	uint16_t bsn;
 
-	for (i = 0, bsn = w.v_a(); bsn != w.v_s(); i++, bsn = (bsn + 1) & w.mod_sns()) {
+	for (i = 0, bsn = v_a(); bsn != v_s(); i++, bsn = (bsn + 1) & mod_sns()) {
 		uint16_t index = bsn & mod_sns_half();
-		show_v_b[i] = m_v_b[index];
+		show_v_b[i] = m_v_b.get_state(index);
 		if (show_v_b[i] == 0)
 			show_v_b[i] = ' ';
 	}
