diff --git a/openbsc/src/chan_alloc.c b/openbsc/src/chan_alloc.c
index 4809496..d6e4ff1 100644
--- a/openbsc/src/chan_alloc.c
+++ b/openbsc/src/chan_alloc.c
@@ -396,7 +396,7 @@
 	return NULL;
 }
 
-struct gsm_lchan *lchan_for_subscr(struct gsm_subscriber *subscr)
+struct gsm_subscriber_connection *connection_for_subscr(struct gsm_subscriber *subscr)
 {
 	struct gsm_bts *bts;
 	struct gsm_network *net = subscr->net;
@@ -405,7 +405,7 @@
 	llist_for_each_entry(bts, &net->bts_list, list) {
 		lchan = lchan_find(bts, subscr);
 		if (lchan)
-			return lchan;
+			return &lchan->conn;
 	}
 
 	return NULL;
diff --git a/openbsc/src/gsm_04_08.c b/openbsc/src/gsm_04_08.c
index b9249f2..0de10cc 100644
--- a/openbsc/src/gsm_04_08.c
+++ b/openbsc/src/gsm_04_08.c
@@ -2798,7 +2798,7 @@
 {
 	int i, rc = 0;
 	struct gsm_trans *trans = NULL, *transt;
-	struct gsm_lchan *lchan = NULL;
+	struct gsm_subscriber_connection *conn = NULL;
 	struct gsm_bts *bts = NULL;
 	struct gsm_mncc *data = arg, rel;
 
@@ -2903,10 +2903,10 @@
 			return -ENOMEM;
 		}
 		/* Find lchan */
-		lchan = lchan_for_subscr(subscr);
+		conn = connection_for_subscr(subscr);
 
 		/* If subscriber has no lchan */
-		if (!lchan) {
+		if (!conn) {
 			/* find transaction with this subscriber already paging */
 			llist_for_each_entry(transt, &net->trans_list, entry) {
 				/* Transaction of our lchan? */
@@ -2932,16 +2932,16 @@
 			return 0;
 		}
 		/* Assign lchan */
-		trans->conn = &lchan->conn;
+		trans->conn = conn;
 		use_subscr_con(trans->conn);
 		subscr_put(subscr);
 	}
 
 	if (trans->conn)
-		lchan = trans->conn->lchan;
+		conn = trans->conn;
 
 	/* if paging did not respond yet */
-	if (!lchan) {
+	if (!conn) {
 		DEBUGP(DCC, "(bts - trx - ts - ti -- sub %s) "
 			"Received '%s' from MNCC in paging state\n",
 			(trans->subscr)?(trans->subscr->extension):"-",
@@ -2959,7 +2959,7 @@
 
 	DEBUGP(DCC, "(bts %d trx %d ts %d ti %02x sub %s) "
 		"Received '%s' from MNCC in state %d (%s)\n",
-		lchan->ts->trx->bts->nr, lchan->ts->trx->nr, lchan->ts->nr,
+		conn->bts->nr, conn->lchan->ts->trx->nr, conn->lchan->ts->nr,
 		trans->transaction_id,
 		(trans->conn->subscr)?(trans->conn->subscr->extension):"-",
 		get_mncc_name(msg_type), trans->cc.state,
diff --git a/openbsc/src/gsm_04_11.c b/openbsc/src/gsm_04_11.c
index 4488f8d..9d65333 100644
--- a/openbsc/src/gsm_04_11.c
+++ b/openbsc/src/gsm_04_11.c
@@ -1143,14 +1143,14 @@
 int gsm411_send_sms_subscr(struct gsm_subscriber *subscr,
 			   struct gsm_sms *sms)
 {
-	struct gsm_lchan *lchan;
+	struct gsm_subscriber_connection *conn;
 
 	/* check if we already have an open lchan to the subscriber.
 	 * if yes, send the SMS this way */
-	lchan = lchan_for_subscr(subscr);
-	if (lchan) {
-		use_subscr_con(&lchan->conn);
-		return gsm411_send_sms_lchan(&lchan->conn, sms);
+	conn = connection_for_subscr(subscr);
+	if (conn) {
+		use_subscr_con(conn);
+		return gsm411_send_sms_lchan(conn, sms);
 	}
 
 	/* if not, we have to start paging */
@@ -1162,7 +1162,7 @@
 			 void *handler_data, void *signal_data)
 {
 	struct gsm_subscriber *subscr;
-	struct gsm_lchan *lchan;
+	struct gsm_subscriber_connection *conn;
 	struct gsm_sms *sms;
 
 	switch (signal) {
@@ -1170,14 +1170,14 @@
 		/* A subscriber has attached. Check if there are
 		 * any pending SMS for him to be delivered */
 		subscr = signal_data;
-		lchan = lchan_for_subscr(subscr);
-		if (!lchan)
+		conn = connection_for_subscr(subscr);
+		if (!conn)
 			break;
 		sms = db_sms_get_unsent_for_subscr(subscr);
 		if (!sms)
 			break;
-		use_subscr_con(&lchan->conn);
-		gsm411_send_sms_lchan(&lchan->conn, sms);
+		use_subscr_con(conn);
+		gsm411_send_sms_lchan(conn, sms);
 		break;
 	default:
 		break;
diff --git a/openbsc/src/rrlp.c b/openbsc/src/rrlp.c
index 3504451..c3b1dbc 100644
--- a/openbsc/src/rrlp.c
+++ b/openbsc/src/rrlp.c
@@ -68,16 +68,16 @@
 			 void *handler_data, void *signal_data)
 {
 	struct gsm_subscriber *subscr;
-	struct gsm_lchan *lchan;
+	struct gsm_subscriber_connection *conn;
 
 	switch (signal) {
 	case S_SUBSCR_ATTACHED:
 		/* A subscriber has attached. */
 		subscr = signal_data;
-		lchan = lchan_for_subscr(subscr);
-		if (!lchan)
+		conn = connection_for_subscr(subscr);
+		if (!conn)
 			break;
-		send_rrlp_req(lchan);
+		send_rrlp_req(&conn->lchan);
 		break;
 	}
 	return 0;
diff --git a/openbsc/src/silent_call.c b/openbsc/src/silent_call.c
index 8bd5341..00acc1d 100644
--- a/openbsc/src/silent_call.c
+++ b/openbsc/src/silent_call.c
@@ -128,15 +128,13 @@
 /* end a silent call with a given subscriber */
 int gsm_silent_call_stop(struct gsm_subscriber *subscr)
 {
-	struct gsm_lchan *lchan;
 	struct gsm_subscriber_connection *conn;
 
-	lchan = lchan_for_subscr(subscr);
-	if (!lchan)
+	conn = connection_for_subscr(subscr);
+	if (!conn)
 		return -EINVAL;
 
 	/* did we actually establish a silent call for this guy? */
-	conn = &lchan->conn;
 	if (!conn->silent_call)
 		return -EINVAL;
 
diff --git a/openbsc/src/token_auth.c b/openbsc/src/token_auth.c
index 2608c66..dc8cce2 100644
--- a/openbsc/src/token_auth.c
+++ b/openbsc/src/token_auth.c
@@ -99,12 +99,12 @@
 		subscr->authorized = 0;
 		db_sync_subscriber(subscr);
 		if (rc) {
-			struct gsm_lchan *lchan = lchan_for_subscr(subscr);
-			if (lchan) {
+			struct gsm_subscriber_connection *conn = connection_for_subscr(subscr);
+			if (conn) {
 				u_int8_t auth_rand[16];
 				/* kick the subscriber off the network */
-				gsm48_tx_mm_auth_req(&lchan->conn, auth_rand, 0);
-				gsm48_tx_mm_auth_rej(&lchan->conn);
+				gsm48_tx_mm_auth_req(conn, auth_rand, 0);
+				gsm48_tx_mm_auth_rej(conn);
 				/* FIXME: close the channel early ?*/
 				//gsm48_send_rr_Release(lchan);
 			}
@@ -118,7 +118,7 @@
 			void *handler_data, void *signal_data)
 {
 	struct gsm_sms *sms = signal_data;
-	struct gsm_lchan *lchan;
+	struct gsm_subscriber_connection *conn;
 	u_int8_t auth_rand[16];
 
 
@@ -136,11 +136,11 @@
 		return 0;
 
 
-	lchan = lchan_for_subscr(sms->receiver);
-	if (lchan) {
+	conn = connection_for_subscr(sms->receiver);
+	if (conn) {
 		/* kick the subscriber off the network */
-		gsm48_tx_mm_auth_req(&lchan->conn, auth_rand, 0);
-		gsm48_tx_mm_auth_rej(&lchan->conn);
+		gsm48_tx_mm_auth_req(conn, auth_rand, 0);
+		gsm48_tx_mm_auth_rej(conn);
 		/* FIXME: close the channel early ?*/
 		//gsm48_send_rr_Release(lchan);
 	}
