diff -Nur openbsc.7_polling/include/openbsc/gsm_data.h openbsc.8_paging/include/openbsc/gsm_data.h
--- openbsc.7_polling/include/openbsc/gsm_data.h	2009-05-21 07:53:00.000000000 +0200
+++ openbsc.8_paging/include/openbsc/gsm_data.h	2009-05-21 09:35:56.000000000 +0200
@@ -27,7 +27,8 @@
 };
 
 struct msgb;
-typedef int gsm_cbfn(unsigned int hooknum,
+typedef int gsm_cbfn(struct gsm_bts *bts,
+		     unsigned int hooknum,
 		     unsigned int event,
 		     struct msgb *msg,
 		     void *data, void *param);
diff -Nur openbsc.7_polling/src/abis_nm.c openbsc.8_paging/src/abis_nm.c
--- openbsc.7_polling/src/abis_nm.c	2009-05-21 07:20:44.000000000 +0200
+++ openbsc.8_paging/src/abis_nm.c	2009-05-21 09:38:00.000000000 +0200
@@ -1205,7 +1205,7 @@
 		case NM_MT_LOAD_INIT_ACK:
 			/* fill window with segments */
 			if (sw->cbfn)
-				sw->cbfn(GSM_HOOK_NM_SWLOAD,
+				sw->cbfn(sw->bts, GSM_HOOK_NM_SWLOAD,
 					 NM_MT_LOAD_INIT_ACK, mb,
 					 sw->cb_data, NULL);
 			rc = sw_fill_window(sw);
@@ -1216,7 +1216,7 @@
 				DEBUGP(DNM, "FORCED: Ignoring Software Load "
 					"Init NACK\n");
 				if (sw->cbfn)
-					sw->cbfn(GSM_HOOK_NM_SWLOAD,
+					sw->cbfn(sw->bts, GSM_HOOK_NM_SWLOAD,
 						 NM_MT_LOAD_INIT_ACK, mb,
 						 sw->cb_data, NULL);
 				rc = sw_fill_window(sw);
@@ -1225,7 +1225,7 @@
 				DEBUGP(DNM, "Software Load Init NACK\n");
 				/* FIXME: cause */
 				if (sw->cbfn)
-					sw->cbfn(GSM_HOOK_NM_SWLOAD,
+					sw->cbfn(sw->bts, GSM_HOOK_NM_SWLOAD,
 						 NM_MT_LOAD_INIT_NACK, mb,
 						 sw->cb_data, NULL);
 				sw->state = SW_STATE_ERROR;
@@ -1237,7 +1237,7 @@
 		switch (foh->msg_type) {
 		case NM_MT_LOAD_SEG_ACK:
 			if (sw->cbfn)
-				sw->cbfn(GSM_HOOK_NM_SWLOAD,
+				sw->cbfn(sw->bts, GSM_HOOK_NM_SWLOAD,
 					 NM_MT_LOAD_SEG_ACK, mb,
 					 sw->cb_data, NULL);
 			sw->seg_in_window = 0;
@@ -1261,7 +1261,7 @@
 				sw->bts->nr);
 			sw->state = SW_STATE_NONE;
 			if (sw->cbfn)
-				sw->cbfn(GSM_HOOK_NM_SWLOAD,
+				sw->cbfn(sw->bts, GSM_HOOK_NM_SWLOAD,
 					 NM_MT_LOAD_END_ACK, mb,
 					 sw->cb_data, NULL);
 			break;
@@ -1271,7 +1271,7 @@
 					"End NACK\n");
 				sw->state = SW_STATE_NONE;
 				if (sw->cbfn)
-					sw->cbfn(GSM_HOOK_NM_SWLOAD,
+					sw->cbfn(sw->bts, GSM_HOOK_NM_SWLOAD,
 						 NM_MT_LOAD_END_ACK, mb,
 						 sw->cb_data, NULL);
 			} else {
@@ -1279,7 +1279,7 @@
 				/* FIXME: cause */
 				sw->state = SW_STATE_ERROR;
 				if (sw->cbfn)
-					sw->cbfn(GSM_HOOK_NM_SWLOAD,
+					sw->cbfn(sw->bts, GSM_HOOK_NM_SWLOAD,
 						 NM_MT_LOAD_END_NACK, mb,
 						 sw->cb_data, NULL);
 			}
@@ -1293,7 +1293,7 @@
 			sw->state = SW_STATE_NONE;
 			rc = 0;
 			if (sw->cbfn)
-				sw->cbfn(GSM_HOOK_NM_SWLOAD,
+				sw->cbfn(sw->bts, GSM_HOOK_NM_SWLOAD,
 					 NM_MT_ACTIVATE_SW_ACK, mb,
 					 sw->cb_data, NULL);
 			break;
@@ -1302,7 +1302,7 @@
 			/* FIXME: cause */
 			sw->state = SW_STATE_ERROR;
 			if (sw->cbfn)
-				sw->cbfn(GSM_HOOK_NM_SWLOAD,
+				sw->cbfn(sw->bts, GSM_HOOK_NM_SWLOAD,
 					 NM_MT_ACTIVATE_SW_NACK, mb,
 					 sw->cb_data, NULL);
 			break;
@@ -2018,7 +2018,7 @@
 }
 
 /* bs11 swload specific callback, passed to abis_nm core swload */
-static int bs11_swload_cbfn(unsigned int hook, unsigned int event,
+static int bs11_swload_cbfn(struct gsm_bts *bts, unsigned int hook, unsigned int event,
 			    struct msgb *msg, void *data, void *param)
 {
 	struct abis_nm_bs11_sw *bs11_sw = data;
@@ -2052,7 +2052,7 @@
 	default:
 		/* fallthrough to the user callback */
 		if (bs11_sw->user_cb)
-			rc = bs11_sw->user_cb(hook, event, msg, NULL, NULL);
+			rc = bs11_sw->user_cb(bts, hook, event, msg, NULL, NULL);
 		break;
 	}
 
diff -Nur openbsc.7_polling/src/paging.c openbsc.8_paging/src/paging.c
--- openbsc.7_polling/src/paging.c	2009-05-21 07:54:47.000000000 +0200
+++ openbsc.8_paging/src/paging.c	2009-05-21 09:35:56.000000000 +0200
@@ -205,7 +205,7 @@
 
 	dispatch_signal(SS_PAGING, S_PAGING_COMPLETED, &sig_data);
 	if (req->cbfn)
-		req->cbfn(GSM_HOOK_RR_PAGING, GSM_PAGING_EXPIRED, NULL, NULL,
+		req->cbfn(req->bts, GSM_HOOK_RR_PAGING, GSM_PAGING_EXPIRED, NULL, NULL,
 			  req->cbfn_param);
 	paging_remove_request(&req->bts->paging, req);
 }
@@ -248,7 +248,7 @@
 				 entry) {
 		if (req->subscr == subscr) {
 			if (req->cbfn)
-				req->cbfn(GSM_HOOK_RR_PAGING, GSM_PAGING_SUCCEEDED,
+				req->cbfn(bts, GSM_HOOK_RR_PAGING, GSM_PAGING_SUCCEEDED,
 					  NULL, lchan, req->cbfn_param);
 			paging_remove_request(&bts->paging, req);
 			break;
diff -Nur openbsc.8_paging/src/bs11_config.c openbsc.9_tlv/src/bs11_config.c
--- openbsc.8_paging/src/bs11_config.c	2009-05-21 09:20:32.000000000 +0200
+++ openbsc.9_tlv/src/bs11_config.c	2009-05-21 09:49:04.000000000 +0200
@@ -157,8 +157,8 @@
 static int percent_old;
 
 /* callback function passed to the ABIS OML code */
-static int swload_cbfn(unsigned int hook, unsigned int event, struct msgb *msg,
-		       void *data, void *param)
+static int swload_cbfn(struct gsm_bts *bts, unsigned int hook, unsigned int event,
+		struct msgb *msg, void *data, void *param)
 {
 	if (hook != GSM_HOOK_NM_SWLOAD)
 		return 0;
diff -Nur openbsc.8_paging/src/gsm_04_08.c openbsc.9_tlv/src/gsm_04_08.c
--- openbsc.8_paging/src/gsm_04_08.c	2009-05-21 07:51:25.000000000 +0200
+++ openbsc.9_tlv/src/gsm_04_08.c	2009-05-21 09:47:20.000000000 +0200
@@ -1061,8 +1061,8 @@
 }
 
 /* call-back from paging the B-end of the connection */
-static int setup_trig_pag_evt(unsigned int hooknum, unsigned int event,
-			      struct msgb *msg, void *_lchan, void *param)
+static int setup_trig_pag_evt(struct gsm_bts *bts, unsigned int hooknum,
+		unsigned int event, struct msgb *msg, void *_lchan, void *param)
 {
 	struct gsm_lchan *lchan = _lchan;
 	struct gsm_call *remote_call = param;
