diff --git a/src/gb/gprs_ns2_message.c b/src/gb/gprs_ns2_message.c
index 41605f4..9559229 100644
--- a/src/gb/gprs_ns2_message.c
+++ b/src/gb/gprs_ns2_message.c
@@ -43,8 +43,7 @@
 	do {										\
 		if (!nsvc->nse->bss_sns_fi)						\
 			break;								\
-		LOGP(DLNS, LOGL_DEBUG, "NSEI=%u Rx invalid packet %s with SNS\n",	\
-				       nsvc->nse->nsei, reason);			\
+		LOGNSVC(nsvc, LOGL_DEBUG, "invalid packet %s with SNS\n", reason);	\
 	} while (0)
 
 enum ns_ctr {
@@ -223,8 +222,7 @@
 	if (!msg)
 		return -ENOMEM;
 
-	LOGP(DLNS, LOGL_INFO, "NSEI=%u Tx NS BLOCK (NSVCI=%u, cause=%s)\n",
-		nsvc->nse->nsei, nsvc->nsvci, gprs_ns2_cause_str(cause));
+	LOGNSVC(nsvc, LOGL_INFO, "Tx NS BLOCK (cause=%s)\n", gprs_ns2_cause_str(cause));
 
 	rate_ctr_inc(&nsvc->ctrg->ctr[NS_CTR_BLOCKED]);
 
@@ -256,7 +254,7 @@
 	if (!msg)
 		return -ENOMEM;
 
-	LOGP(DLNS, LOGL_INFO, "NSEI=%u Tx NS BLOCK ACK (NSVCI=%u)\n", nsvc->nse->nsei, nsvc->nsvci);
+	LOGNSVC(nsvc, LOGL_INFO, "Tx NS BLOCK ACK\n");
 
 	msg->l2h = msgb_put(msg, sizeof(*nsh));
 	nsh = (struct gprs_ns_hdr *) msg->l2h;
@@ -287,8 +285,7 @@
 	if (!msg)
 		return -ENOMEM;
 
-	LOGP(DLNS, LOGL_INFO, "NSEI=%u Tx NS RESET (NSVCI=%u, cause=%s)\n",
-		nsvc->nse->nsei, nsvc->nsvci, gprs_ns2_cause_str(cause));
+	LOGNSVC(nsvc, LOGL_INFO, "Tx NS RESET (cause=%s)\n", gprs_ns2_cause_str(cause));
 
 	msg->l2h = msgb_put(msg, sizeof(*nsh));
 	nsh = (struct gprs_ns_hdr *) msg->l2h;
@@ -328,8 +325,7 @@
 
 	nsh->pdu_type = NS_PDUT_RESET_ACK;
 
-	LOGP(DLNS, LOGL_INFO, "NSEI=%u Tx NS RESET ACK (NSVCI=%u)\n",
-		nsvc->nse->nsei, nsvc->nsvci);
+	LOGNSVC(nsvc, LOGL_INFO, "Tx NS RESET ACK\n");
 
 	msgb_tvlv_put(msg, NS_IE_VCI, 2, (uint8_t *)&nsvci);
 	msgb_tvlv_put(msg, NS_IE_NSEI, 2, (uint8_t *)&nsei);
@@ -347,8 +343,7 @@
 
 	ERR_IF_NSVC_USES_SNS(nsvc, "transmit NS UNBLOCK");
 
-	LOGP(DLNS, LOGL_INFO, "NSEI=%u Tx NS UNBLOCK (NSVCI=%u)\n",
-		nsvc->nse->nsei, nsvc->nsvci);
+	LOGNSVC(nsvc, LOGL_INFO, "Tx NS UNBLOCK\n");
 
 	return ns2_tx_simple(nsvc, NS_PDUT_UNBLOCK);
 }
@@ -364,8 +359,7 @@
 
 	ERR_IF_NSVC_USES_SNS(nsvc, "transmit NS UNBLOCK ACK");
 
-	LOGP(DLNS, LOGL_INFO, "NSEI=%u Tx NS UNBLOCK (NSVCI=%u)\n",
-		nsvc->nse->nsei, nsvc->nsvci);
+	LOGNSVC(nsvc, LOGL_INFO, "Tx NS UNBLOCK_ACK\n");
 
 	return ns2_tx_simple(nsvc, NS_PDUT_UNBLOCK_ACK);
 }
@@ -377,8 +371,7 @@
 {
 	log_set_context(LOG_CTX_GB_NSE, nsvc->nse);
 	log_set_context(LOG_CTX_GB_NSVC, nsvc);
-	LOGP(DLNS, LOGL_DEBUG, "NSEI=%u Tx NS ALIVE (NSVCI=%u)\n",
-		nsvc->nse->nsei, nsvc->nsvci);
+	LOGNSVC(nsvc, LOGL_DEBUG, "Tx NS ALIVE\n");
 
 	return ns2_tx_simple(nsvc, NS_PDUT_ALIVE);
 }
@@ -390,8 +383,7 @@
 {
 	log_set_context(LOG_CTX_GB_NSE, nsvc->nse);
 	log_set_context(LOG_CTX_GB_NSVC, nsvc);
-	LOGP(DLNS, LOGL_DEBUG, "NSEI=%u Tx NS ALIVE_ACK (NSVCI=%u)\n",
-		nsvc->nse->nsei, nsvc->nsvci);
+	LOGNSVC(nsvc, LOGL_DEBUG, "Tx NS ALIVE_ACK\n");
 
 	return ns2_tx_simple(nsvc, NS_PDUT_ALIVE_ACK);
 }
@@ -414,7 +406,7 @@
 	msg->l2h = msgb_push(msg, sizeof(*nsh) + 3);
 	nsh = (struct gprs_ns_hdr *) msg->l2h;
 	if (!nsh) {
-		LOGP(DLNS, LOGL_ERROR, "Not enough headroom for NS header\n");
+		LOGNSVC(nsvc, LOGL_ERROR, "Not enough headroom for NS header\n");
 		msgb_free(msg);
 		return -EIO;
 	}
@@ -448,8 +440,7 @@
 	if (!msg)
 		return -ENOMEM;
 
-	LOGP(DLNS, LOGL_NOTICE, "NSEI=%u Tx NS STATUS (NSVCI=%u, cause=%s)\n",
-		nsvc->nse->nsei, nsvc->nsvci, gprs_ns2_cause_str(cause));
+	LOGNSVC(nsvc, LOGL_NOTICE, "Tx NS STATUS (cause=%s)\n", gprs_ns2_cause_str(cause));
 
 	msg->l2h = msgb_put(msg, sizeof(*nsh));
 	nsh = (struct gprs_ns_hdr *) msg->l2h;
@@ -512,8 +503,7 @@
 		return -ENOMEM;
 
 	if (!nsvc->nse->bss_sns_fi) {
-		LOGP(DLNS, LOGL_ERROR, "NSEI=%u Cannot transmit SNS on NSVC without SNS active\n",
-		     nsvc->nse->nsei);
+		LOGNSVC(nsvc, LOGL_ERROR, "Cannot transmit SNS on NSVC without SNS active\n");
 		msgb_free(msg);
 		return -EIO;
 	}
@@ -571,8 +561,7 @@
 		return -ENOMEM;
 
 	if (!nsvc->nse->bss_sns_fi) {
-		LOGP(DLNS, LOGL_ERROR, "NSEI=%u Cannot transmit SNS on NSVC without SNS active\n",
-		     nsvc->nse->nsei);
+		LOGNSVC(nsvc, LOGL_ERROR, "Cannot transmit SNS on NSVC without SNS active\n");
 		msgb_free(msg);
 		return -EIO;
 	}
@@ -620,8 +609,7 @@
 		return -ENOMEM;
 
 	if (!nsvc->nse->bss_sns_fi) {
-		LOGP(DLNS, LOGL_ERROR, "NSEI=%u Cannot transmit SNS on NSVC without SNS active\n",
-		     nsvc->nse->nsei);
+		LOGNSVC(nsvc, LOGL_ERROR, "Cannot transmit SNS on NSVC without SNS active\n");
 		msgb_free(msg);
 		return -EIO;
 	}
@@ -666,8 +654,7 @@
 		return -ENOMEM;
 
 	if (!nsvc->nse->bss_sns_fi) {
-		LOGP(DLNS, LOGL_ERROR, "NSEI=%u Cannot transmit SNS on NSVC without SNS active\n",
-		     nsvc->nse->nsei);
+		LOGNSVC(nsvc, LOGL_ERROR, "Cannot transmit SNS on NSVC without SNS active\n");
 		msgb_free(msg);
 		return -EIO;
 	}
@@ -706,8 +693,7 @@
 		return -ENOMEM;
 
 	if (!nsvc->nse->bss_sns_fi) {
-		LOGP(DLNS, LOGL_ERROR, "NSEI=%u Cannot transmit SNS on NSVC without SNS active\n",
-		     nsvc->nse->nsei);
+		LOGNSVC(nsvc, LOGL_ERROR, "Cannot transmit SNS on NSVC without SNS active\n");
 		msgb_free(msg);
 		return -EIO;
 	}
