diff --git a/tests/channel/Makefile.am b/tests/channel/Makefile.am
index ca470ac..c7164b4 100644
--- a/tests/channel/Makefile.am
+++ b/tests/channel/Makefile.am
@@ -26,6 +26,7 @@
 channel_test_LDADD = \
 	$(top_builddir)/src/libmsc/libmsc.a \
 	$(top_builddir)/src/libbsc/libbsc.a \
+	$(top_builddir)/src/libvlr/libvlr.a \
 	$(top_builddir)/src/libcommon-cs/libcommon-cs.a \
 	$(top_builddir)/src/libcommon/libcommon.a \
 	$(LIBOSMOCORE_LIBS) \
diff --git a/tests/channel/channel_test.c b/tests/channel/channel_test.c
index 88293d0..f686969 100644
--- a/tests/channel/channel_test.c
+++ b/tests/channel/channel_test.c
@@ -29,68 +29,7 @@
 #include <openbsc/abis_rsl.h>
 #include <openbsc/debug.h>
 #include <openbsc/gsm_subscriber.h>
-
-static int s_end = 0;
-static struct gsm_subscriber_connection s_conn;
-static void *s_data;
-static gsm_cbfn *s_cbfn = NULL;
-
-/* our handler */
-static int subscr_cb(unsigned int hook, unsigned int event, struct msgb *msg, void *data, void *param)
-{
-	assert(hook == 101);
-	assert(event == 200);
-	assert(msg == (void*)0x1323L);
-	assert(data == &s_conn);
-	assert(param == (void*)0x2342L);
-	printf("Reached, didn't crash, test passed\n");
-	s_end = true;
-	return 0;
-}
-
-/* mock object for testing, directly invoke the cb... maybe later through the timer */
-int paging_request(struct gsm_bts *bts, struct bsc_subscr *bsub, int type, gsm_cbfn *cbfn, void *data)
-{
-	s_data = data;
-	s_cbfn = cbfn;
-
-	/* claim we have patched */
-	return 1;
-}
-
-
-void test_request_chan(void)
-{
-	struct gsm_network *network;
-	struct gsm_bts *bts;
-
-	printf("Testing the gsm_subscriber chan logic\n");
-
-	/* Create a dummy network */
-	network = bsc_network_init(tall_bsc_ctx, 1, 1, NULL);
-	if (!network)
-		exit(1);
-	bts = gsm_bts_alloc(network);
-	bts->location_area_code = 23;
-	s_conn.network = network;
-
-	/* Create a dummy subscriber */
-	struct gsm_subscriber *subscr = subscr_alloc();
-	subscr->lac = 23;
-	subscr->group = network->subscr_group;
-
-	OSMO_ASSERT(subscr->group);
-	OSMO_ASSERT(subscr->group->net == network);
-
-	/* Ask for a channel... */
-	struct subscr_request *sr;
-	sr = subscr_request_channel(subscr, RSL_CHANNEED_TCH_F, subscr_cb, (void*)0x2342L);
-	OSMO_ASSERT(sr);
-	OSMO_ASSERT(s_cbfn);
-	s_cbfn(101, 200, (void*)0x1323L, &s_conn, s_data);
-
-	OSMO_ASSERT(s_end);
-}
+#include <openbsc/vlr.h>
 
 void test_dyn_ts_subslots(void)
 {
@@ -126,7 +65,6 @@
 {
 	osmo_init_logging(&log_info);
 
-	test_request_chan();
 	test_dyn_ts_subslots();
 
 	return EXIT_SUCCESS;
@@ -140,5 +78,13 @@
 void paging_request_stop() {}
 void vty_out() {}
 
-struct tlv_definition nm_att_tlvdef;
+void ipa_client_conn_clear_queue() {}
+void ipa_client_conn_close() {}
+void ipa_client_conn_create() {}
+void ipa_client_conn_destroy() {}
+void ipa_client_conn_open() {}
+void ipa_client_conn_send() {}
+void ipa_msg_push_header() {}
+void ipaccess_bts_handle_ccm() {}
 
+struct tlv_definition nm_att_tlvdef;
diff --git a/tests/channel/channel_test.ok b/tests/channel/channel_test.ok
index 33c8193..e4d625a 100644
--- a/tests/channel/channel_test.ok
+++ b/tests/channel/channel_test.ok
@@ -1,3 +1 @@
-Testing the gsm_subscriber chan logic
-Reached, didn't crash, test passed
 Testing subslot numbers for pchan types
