diff --git a/tests/Makefile.am b/tests/Makefile.am
index 3f7db1f..b7ae607 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -5,8 +5,8 @@
                  smscb/smscb_test bits/bitrev_test a5/a5_test		\
                  conv/conv_test auth/milenage_test lapd/lapd_test	\
                  gsm0808/gsm0808_test gsm0408/gsm0408_test		\
-		 gb/bssgp_fc_test gb/gprs_ns_test kasumi/kasumi_test    \
-		 logging/logging_test fr/fr_test	                \
+		 gb/bssgp_fc_test gb/gprs_bssgp_test gb/gprs_ns_test	\
+		 kasumi/kasumi_test logging/logging_test fr/fr_test	\
 		 loggingrb/loggingrb_test strrb/strrb_test              \
 		 vty/vty_test comp128/comp128_test utils/utils_test
 
@@ -62,6 +62,9 @@
 gb_bssgp_fc_test_SOURCES = gb/bssgp_fc_test.c
 gb_bssgp_fc_test_LDADD = $(top_builddir)/src/libosmocore.la $(top_builddir)/src/gb/libosmogb.la
 
+gb_gprs_bssgp_test_SOURCES = gb/gprs_bssgp_test.c
+gb_gprs_bssgp_test_LDADD = $(top_builddir)/src/libosmocore.la $(top_builddir)/src/gb/libosmogb.la $(LIBRARY_DL)
+
 gb_gprs_ns_test_SOURCES = gb/gprs_ns_test.c
 gb_gprs_ns_test_LDADD = $(top_builddir)/src/libosmocore.la $(top_builddir)/src/gb/libosmogb.la $(LIBRARY_DL)
 
@@ -106,6 +109,7 @@
              lapd/lapd_test.ok gsm0408/gsm0408_test.ok			\
              gsm0808/gsm0808_test.ok gb/bssgp_fc_tests.err		\
              gb/bssgp_fc_tests.ok gb/bssgp_fc_tests.sh			\
+             gb/gprs_bssgp_test.ok					\
              gb/gprs_ns_test.ok kasumi/kasumi_test.ok			\
              msgfile/msgfile_test.ok msgfile/msgconfig.cfg		\
              logging/logging_test.ok logging/logging_test.err		\
diff --git a/tests/gb/gprs_bssgp_test.c b/tests/gb/gprs_bssgp_test.c
new file mode 100644
index 0000000..a2a4068
--- /dev/null
+++ b/tests/gb/gprs_bssgp_test.c
@@ -0,0 +1,151 @@
+/* Test routines for the BSSGP implementation in libosmogb
+ *
+ * (C) 2014 by sysmocom s.f.m.c. GmbH
+ * Author: Jacob Erlbeck <jerlbeck@sysmocom.de>
+ *
+ * Skeleton based on bssgp_fc_test.c
+ * (C) 2012 by Harald Welte <laforge@gnumonks.org>
+ */
+
+#undef _GNU_SOURCE
+#define _GNU_SOURCE
+
+#include <osmocom/core/application.h>
+#include <osmocom/core/utils.h>
+#include <osmocom/core/logging.h>
+#include <osmocom/core/talloc.h>
+#include <osmocom/core/prim.h>
+#include <osmocom/gprs/gprs_bssgp.h>
+#include <osmocom/gprs/gprs_ns.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <getopt.h>
+#include <unistd.h>
+#include <netinet/ip.h>
+#include <dlfcn.h>
+
+#define BSS_NSEI 0x0b55
+
+static struct osmo_prim_hdr last_oph = {0};
+
+/* override */
+ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
+		const struct sockaddr *dest_addr, socklen_t addrlen)
+{
+	typedef ssize_t (*sendto_t)(int, const void *, size_t, int,
+			const struct sockaddr *, socklen_t);
+	static sendto_t real_sendto = NULL;
+	uint32_t dest_host = htonl(((struct sockaddr_in *)dest_addr)->sin_addr.s_addr);
+
+	if (!real_sendto)
+		real_sendto = dlsym(RTLD_NEXT, "sendto");
+
+	fprintf(stderr, "MESSAGE to 0x%08x, msg length %d\n%s\n",
+		dest_host, len, osmo_hexdump(buf, len));
+
+	return len;
+}
+
+/* override */
+int gprs_ns_callback(enum gprs_ns_evt event, struct gprs_nsvc *nsvc,
+			 struct msgb *msg, uint16_t bvci)
+{
+	fprintf(stderr, "CALLBACK, event %d, msg length %d, bvci 0x%04x\n%s\n\n",
+			event, msgb_bssgp_len(msg), bvci,
+			osmo_hexdump(msgb_bssgph(msg), msgb_bssgp_len(msg)));
+	return 0;
+}
+
+int bssgp_prim_cb(struct osmo_prim_hdr *oph, void *ctx)
+{
+	printf("BSSGP primitive, SAP %d, prim = %d, op = %d, msg = %s\n",
+	       oph->sap, oph->primitive, oph->operation, msgb_hexdump(oph->msg));
+
+	last_oph.sap = oph->sap;
+	last_oph.primitive = oph->primitive;
+	last_oph.operation = oph->operation;
+	last_oph.msg = NULL;
+	return -1;
+}
+
+static void msgb_bssgp_send_and_free(struct msgb *msg)
+{
+	msgb_nsei(msg) = BSS_NSEI;
+
+	bssgp_rcvmsg(msg);
+
+	msgb_free(msg);
+}
+
+static void send_bssgp_supend(enum bssgp_pdu_type pdu_type, uint32_t tlli)
+{
+	struct msgb *msg = bssgp_msgb_alloc();
+	uint32_t tlli_be = htonl(tlli);
+	uint8_t rai[] = {0x0f, 0xf1, 0x80, 0x20, 0x37, 0x00};
+
+	msgb_v_put(msg, pdu_type);
+	msgb_tvlv_put(msg, BSSGP_IE_TLLI, sizeof(tlli_be), (uint8_t *)&tlli_be);
+	msgb_tvlv_put(msg, BSSGP_IE_ROUTEING_AREA, sizeof(rai), &rai[0]);
+
+	msgb_bssgp_send_and_free(msg);
+}
+
+static void send_bssgp_resume(enum bssgp_pdu_type pdu_type, uint32_t tlli)
+{
+	struct msgb *msg = bssgp_msgb_alloc();
+	uint32_t tlli_be = htonl(tlli);
+	uint8_t rai[] = {0x0f, 0xf1, 0x80, 0x20, 0x37, 0x00};
+	uint8_t suspend_ref = 1;
+
+	msgb_v_put(msg, pdu_type);
+	msgb_tvlv_put(msg, BSSGP_IE_TLLI, sizeof(tlli_be), (uint8_t *)&tlli_be);
+	msgb_tvlv_put(msg, BSSGP_IE_ROUTEING_AREA, sizeof(rai), &rai[0]);
+	msgb_tvlv_put(msg, BSSGP_IE_SUSPEND_REF_NR, 1, &suspend_ref);
+
+	msgb_bssgp_send_and_free(msg);
+}
+
+static void test_bssgp_suspend_resume(void)
+{
+	const uint32_t tlli = 0xf0123456;
+
+	printf("----- %s START\n", __func__);
+	memset(&last_oph, 0, sizeof(last_oph));
+
+	send_bssgp_supend(BSSGP_PDUT_SUSPEND, tlli);
+	/* OSMO_ASSERT(last_oph.primitive == PRIM_BSSGP_GMM_SUSPEND); */
+
+	send_bssgp_resume(BSSGP_PDUT_RESUME, tlli);
+	/* OSMO_ASSERT(last_oph.primitive == PRIM_BSSGP_GMM_RESUME); */
+
+	printf("----- %s END\n", __func__);
+}
+
+static struct log_info info = {};
+
+int main(int argc, char **argv)
+{
+	struct sockaddr_in bss_peer= {0};
+
+	osmo_init_logging(&info);
+	log_set_use_color(osmo_stderr_target, 0);
+	log_set_print_filename(osmo_stderr_target, 0);
+
+	bssgp_nsi = gprs_ns_instantiate(gprs_ns_callback, NULL);
+
+	bss_peer.sin_family = AF_INET;
+	bss_peer.sin_port = htons(32000);
+	bss_peer.sin_addr.s_addr = htonl(0x7f0000ff);
+
+	gprs_ns_nsip_connect(bssgp_nsi, &bss_peer, BSS_NSEI, BSS_NSEI+1);
+
+
+	printf("===== BSSGP test START\n");
+	test_bssgp_suspend_resume();
+	printf("===== BSSGP test END\n\n");
+
+	exit(EXIT_SUCCESS);
+}
diff --git a/tests/gb/gprs_bssgp_test.ok b/tests/gb/gprs_bssgp_test.ok
new file mode 100644
index 0000000..9c7b4c0
--- /dev/null
+++ b/tests/gb/gprs_bssgp_test.ok
@@ -0,0 +1,5 @@
+===== BSSGP test START
+----- test_bssgp_suspend_resume START
+----- test_bssgp_suspend_resume END
+===== BSSGP test END
+
diff --git a/tests/testsuite.at b/tests/testsuite.at
index 7ce2ee8..fe30363 100644
--- a/tests/testsuite.at
+++ b/tests/testsuite.at
@@ -118,6 +118,12 @@
 AT_CHECK([$abs_top_builddir/tests/vty/vty_test], [0], [expout], [ignore])
 AT_CLEANUP
 
+AT_SETUP([gprs-bssgp])
+AT_KEYWORDS([gprs-bssgp])
+cat $abs_srcdir/gb/gprs_bssgp_test.ok > expout
+AT_CHECK([$abs_top_builddir/tests/gb/gprs_bssgp_test], [0], [expout], [ignore])
+AT_CLEANUP
+
 AT_SETUP([gprs-ns])
 AT_KEYWORDS([gprs-ns])
 cat $abs_srcdir/gb/gprs_ns_test.ok > expout
