diff --git a/openbsc/src/libmsc/smpp_smsc.c b/openbsc/src/libmsc/smpp_smsc.c
index 6bfd0c9..8957c8e 100644
--- a/openbsc/src/libmsc/smpp_smsc.c
+++ b/openbsc/src/libmsc/smpp_smsc.c
@@ -109,8 +109,8 @@
 
 	rc = smpp34_pack(type, msg->tail, msgb_tailroom(msg), &rlen, ptr);
 	if (rc != 0) {
-		LOGP(DSMPP, LOGL_ERROR, "Error during smpp34_pack(): %s\n",
-		     smpp34_strerror);
+		LOGP(DSMPP, LOGL_ERROR, "[%s] Error during smpp34_pack(): %s\n",
+		     esme->system_id, smpp34_strerror);
 		msgb_free(msg);
 		return -EINVAL;
 	}
@@ -123,12 +123,16 @@
 static int smpp_tx_gen_nack(struct osmo_esme *esme, uint32_t seq, uint32_t status)
 {
 	struct generic_nack_t nack;
+	char buf[SMALL_BUFF];
 
 	nack.command_length = 0;
 	nack.command_id = GENERIC_NACK;
 	nack.sequence_number = seq;
 	nack.command_status = status;
 
+	LOGP(DSMPP, LOGL_ERROR, "[%s] Tx GENERIC NACK: %s\n",
+	     esme->system_id, str_command_status(status, buf));
+
 	return PACK_AND_SEND(esme, &nack);
 }
 
@@ -155,11 +159,14 @@
 
 	SMPP34_UNPACK(rc, GENERIC_NACK, &nack, msgb_data(msg),
 			 msgb_length(msg));
-	if (rc < 0)
+	if (rc < 0) {
+		LOGP(DSMPP, LOGL_ERROR, "[%s] Error in smpp34_unpack():%s\n",
+			esme->system_id, smpp34_strerror);
 		return rc;
+	}
 
-	LOGP(DSMPP, LOGL_ERROR, "%s: GENERIC NACK: %s\n", esme->system_id,
-	     str_command_status(nack.command_status, buf));
+	LOGP(DSMPP, LOGL_ERROR, "[%s] Rx GENERIC NACK: %s\n",
+	     esme->system_id, str_command_status(nack.command_status, buf));
 
 	return 0;
 }
@@ -173,12 +180,15 @@
 
 	SMPP34_UNPACK(rc, BIND_RECEIVER, &bind, msgb_data(msg),
 			   msgb_length(msg));
-	if (rc < 0)
+	if (rc < 0) {
+		LOGP(DSMPP, LOGL_ERROR, "[%s] Error in smpp34_unpack():%s\n",
+			esme->system_id, smpp34_strerror);
 		return rc;
+	}
 
 	INIT_RESP(BIND_TRANSMITTER_RESP, &bind_r, &bind);
 
-	LOGP(DSMPP, LOGL_INFO, "%s: BIND Rx from (Version %02x)\n",
+	LOGP(DSMPP, LOGL_INFO, "[%s] Rx BIND Rx from (Version %02x)\n",
 		bind.system_id, bind.interface_version);
 
 	if (bind.interface_version != SMPP_VERSION) {
@@ -212,13 +222,14 @@
 	SMPP34_UNPACK(rc, BIND_TRANSMITTER, &bind, msgb_data(msg),
 			   msgb_length(msg));
 	if (rc < 0) {
-		printf("error during unpack: %s\n", smpp34_strerror);
+		LOGP(DSMPP, LOGL_ERROR, "[%s] Error in smpp34_unpack():%s\n",
+			esme->system_id, smpp34_strerror);
 		return rc;
 	}
 
 	INIT_RESP(BIND_TRANSMITTER_RESP, &bind_r, &bind);
 
-	LOGP(DSMPP, LOGL_INFO, "%s: BIND Tx (Version %02x)\n",
+	LOGP(DSMPP, LOGL_INFO, "[%s] Rx BIND Tx (Version %02x)\n",
 		bind.system_id, bind.interface_version);
 
 	if (bind.interface_version != SMPP_VERSION) {
@@ -258,12 +269,15 @@
 
 	SMPP34_UNPACK(rc, BIND_TRANSCEIVER, &bind, msgb_data(msg),
 			   msgb_length(msg));
-	if (rc < 0)
+	if (rc < 0) {
+		LOGP(DSMPP, LOGL_ERROR, "[%s] Error in smpp34_unpack():%s\n",
+			esme->system_id, smpp34_strerror);
 		return rc;
+	}
 
 	INIT_RESP(BIND_TRANSMITTER_RESP, &bind_r, &bind);
 
-	LOGP(DSMPP, LOGL_INFO, "%s: BIND Trx (Version %02x)\n",
+	LOGP(DSMPP, LOGL_INFO, "[%s] Rx BIND Trx (Version %02x)\n",
 		bind.system_id, bind.interface_version);
 
 	if (bind.interface_version != SMPP_VERSION) {
@@ -294,12 +308,15 @@
 
 	SMPP34_UNPACK(rc, UNBIND, &unbind, msgb_data(msg),
 			   msgb_length(msg));
-	if (rc < 0)
+	if (rc < 0) {
+		LOGP(DSMPP, LOGL_ERROR, "[%s] Error in smpp34_unpack():%s\n",
+			esme->system_id, smpp34_strerror);
 		return rc;
+	}
 
 	INIT_RESP(UNBIND_RESP, &unbind_r, &unbind);
 
-	LOGP(DSMPP, LOGL_INFO, "%s: UNBIND\n", esme->system_id);
+	LOGP(DSMPP, LOGL_INFO, "[%s] Rx UNBIND\n", esme->system_id);
 
 	if (esme->bind_flags == 0) {
 		unbind_r.command_status = ESME_RINVBNDSTS;
@@ -320,13 +337,18 @@
 
 	SMPP34_UNPACK(rc, ENQUIRE_LINK, &enq, msgb_data(msg),
 			   msgb_length(msg));
-	if (rc < 0)
+	if (rc < 0) {
+		LOGP(DSMPP, LOGL_ERROR, "[%s] Error in smpp34_unpack():%s\n",
+			esme->system_id, smpp34_strerror);
 		return rc;
+	}
 
-	LOGP(DSMPP, LOGL_DEBUG, "%s: Enquire Link\n", esme->system_id);
+	LOGP(DSMPP, LOGL_DEBUG, "[%s] Rx Enquire Link\n", esme->system_id);
 
 	INIT_RESP(ENQUIRE_LINK_RESP, &enq_r, &enq);
 
+	LOGP(DSMPP, LOGL_DEBUG, "[%s] Tx Enquire Link Response\n", esme->system_id);
+
 	return PACK_AND_SEND(esme, &enq_r);
 }
 
@@ -367,7 +389,7 @@
 	alert.sequence_number	= esme->own_seq_nr++;
 	alert.source_addr_ton 	= ton;
 	alert.source_addr_npi	= npi;
-	snprintf(alert.source_addr, sizeof(alert.source_addr), "%s", addr);
+	snprintf((char *)alert.source_addr, sizeof(alert.source_addr), "%s", addr);
 
 	tlv.tag = TLVID_ms_availability_status;
 	tlv.length = sizeof(uint8_t);
@@ -392,8 +414,11 @@
 	memset(&submit, 0, sizeof(submit));
 	SMPP34_UNPACK(rc, SUBMIT_SM, &submit, msgb_data(msg),
 			   msgb_length(msg));
-	if (rc < 0)
+	if (rc < 0) {
+		LOGP(DSMPP, LOGL_ERROR, "[%s] Error in smpp34_unpack():%s\n",
+			esme->system_id, smpp34_strerror);
 		return rc;
+	}
 
 	INIT_RESP(SUBMIT_SM_RESP, &submit_r, &submit);
 
@@ -402,8 +427,9 @@
 		return PACK_AND_SEND(esme, &submit_r);
 	}
 
-	LOGP(DSMPP, LOGL_INFO, "%s: SUBMIT-SM(%s)\n", esme->system_id,
-	     submit.service_type);
+	LOGP(DSMPP, LOGL_INFO, "[%s] Rx SUBMIT-SM (%s/%u/%u)\n",
+		esme->system_id, submit.destination_addr,
+		submit.dest_addr_ton, submit.dest_addr_npi);
 
 	INIT_RESP(SUBMIT_SM_RESP, &submit_r, &submit);
 
@@ -420,7 +446,7 @@
 	uint32_t cmd_id = smpp_msgb_cmdid(msg);
 	int rc = 0;
 
-	LOGP(DSMPP, LOGL_DEBUG, "%s: smpp_pdu_rx(%s)\n", esme->system_id,
+	LOGP(DSMPP, LOGL_DEBUG, "[%s] smpp_pdu_rx(%s)\n", esme->system_id,
 	     osmo_hexdump(msgb_data(msg), msgb_length(msg)));
 
 	switch (cmd_id) {
@@ -453,11 +479,11 @@
 	case QUERY_SM:
 	case REPLACE_SM:
 	case SUBMIT_MULTI:
-		LOGP(DSMPP, LOGL_NOTICE, "%s: Unimplemented PDU Commmand "
+		LOGP(DSMPP, LOGL_NOTICE, "[%s] Unimplemented PDU Commmand "
 		     "0x%08x\n", esme->system_id, cmd_id);
 		break;
 	default:
-		LOGP(DSMPP, LOGL_ERROR, "%s: Unknown PDU Command 0x%08x\n",
+		LOGP(DSMPP, LOGL_ERROR, "[%s] Unknown PDU Command 0x%08x\n",
 		     esme->system_id, cmd_id);
 		rc = smpp_tx_gen_nack(esme, smpp_msgb_seq(msg), ESME_RINVCMDID);
 		break;
@@ -482,7 +508,8 @@
 		rdlen = sizeof(uint32_t) - esme->read_idx;
 		rc = read(ofd->fd, lenptr + esme->read_idx, rdlen);
 		if (rc < 0) {
-			LOGP(DSMPP, LOGL_ERROR, "read returned %d\n", rc);
+			LOGP(DSMPP, LOGL_ERROR, "[%s] read returned %d\n",
+			     esme->system_id, rc);
 		} else if (rc == 0) {
 			goto dead_socket;
 		} else
@@ -504,7 +531,8 @@
 		rdlen = esme->read_len - esme->read_idx;
 		rc = read(ofd->fd, msg->tail, OSMO_MIN(rdlen, msgb_tailroom(msg)));
 		if (rc < 0) {
-			LOGP(DSMPP, LOGL_ERROR, "read returned %d\n", rc);
+			LOGP(DSMPP, LOGL_ERROR, "[%s] read returned %d\n",
+				esme->system_id, rc);
 		} else if (rc == 0) {
 			goto dead_socket;
 		} else {
@@ -546,7 +574,7 @@
 		esme->wqueue.bfd.fd = -1;
 		smpp_esme_put(esme);
 	} else if (rc < msgb_length(msg)) {
-		LOGP(DSMPP, LOGL_ERROR, "%s: Short write\n", esme->system_id);
+		LOGP(DSMPP, LOGL_ERROR, "[%s] Short write\n", esme->system_id);
 		return;
 	}
 }
