diff --git a/libvoice/broadcom/brcm-line.c b/libvoice/broadcom/brcm-line.c
index 33c557c30493970ea5856fd4c8ea865bd74b5dc3..476909248ace02b31758c6765390837546442648 100644
--- a/libvoice/broadcom/brcm-line.c
+++ b/libvoice/broadcom/brcm-line.c
@@ -34,7 +34,7 @@ static const struct vrg_country_t vrg_country_map[] = {
 	{ .name = "TW", .vrg_country = VRG_COUNTRY_TAIWAN },
 	{ .name = "57", .vrg_country = VRG_COUNTRY_TR57 },
 	{ .name = "UK", .vrg_country = VRG_COUNTRY_UK },
-	{ .name = "", .vrg_country = VRG_COUNTRY_LAST },
+	{ .name = "",   .vrg_country = VRG_COUNTRY_MAX },
 };
 static VRG_COUNTRY config_country = VRG_COUNTRY_SWEDEN;
 
@@ -119,7 +119,7 @@ int voice_set_country(const char *country_code) {
 		return -1;
 
 	/* Check if the country code is supported */
-	for (country = vrg_country_map; country->vrg_country != VRG_COUNTRY_LAST; country++) {
+	for (country = vrg_country_map; country->vrg_country != VRG_COUNTRY_MAX; country++) {
 		if (strncasecmp(country_code, country->name, strlen(country->name)) == 0) {
 			config_country = country->vrg_country;
 			return 0;
diff --git a/libvoice/libvoice.h b/libvoice/libvoice.h
index 7da18a73ae0744ee78422621c4902e8c31e1d61a..74cd93642612392cdb142d09eaaf4b68e88dcbe6 100644
--- a/libvoice/libvoice.h
+++ b/libvoice/libvoice.h
@@ -56,6 +56,37 @@ enum DECT_EVENT {
 	DECT_EVT_END
 };
 
+enum VOICE_SIGNAL {
+	VOICE_SIG_DIAL,
+	VOICE_SIG_RINGBACK,
+	VOICE_SIG_STUTTER,
+	VOICE_SIG_UNOBTAINABLE,
+	VOICE_SIG_CALL_WAITING,
+	VOICE_SIG_BUSY,
+	VOICE_SIG_RINGING,
+	VOICE_SIG_CALLID_RINGING,
+	VOICE_SIG_CALLID,
+	VOICE_SIG_NETBUSY,
+	VOICE_SIG_DTMF0,
+	VOICE_SIG_DTMF1,
+	VOICE_SIG_DTMF2,
+	VOICE_SIG_DTMF3,
+	VOICE_SIG_DTMF4,
+	VOICE_SIG_DTMF5,
+	VOICE_SIG_DTMF6,
+	VOICE_SIG_DTMF7,
+	VOICE_SIG_DTMF8,
+	VOICE_SIG_DTMF9,
+	VOICE_SIG_DTMFH,
+	VOICE_SIG_DTMFS,
+	VOICE_SIG_DTMFA,
+	VOICE_SIG_DTMFB,
+	VOICE_SIG_DTMFC,
+	VOICE_SIG_DTMFD,
+	VOICE_SIG_INGRESS_DTMF, // Simulate phone keypad button pressing
+	VOICE_SIG_LAST
+};
+
 enum LINE_PCM_ID {
 	PCM_0,
 	PCM_1
diff --git a/line.c b/line.c
index 5465f61a35335c9d2fcda7f26e3cbbd7a5914fd4..89b38cd8c10c3459b451e1b8f110c9ed8eec40f2 100644
--- a/line.c
+++ b/line.c
@@ -29,43 +29,40 @@ enum {
 	ACTION_LAST,
 };
 
-#define VRG_COUNTRY_LAST  9999
-
-struct epsig {
+struct voice_signal_t {
 	const char *name;
-	EPSIG epsig;
+	enum VOICE_SIGNAL signal;
 };
 
-static const struct epsig epsig_map[] = { // For generating a signal to the phone
-	{ .name = "dial", .epsig = EPSIG_DIAL },
-	{ .name = "ringback", .epsig = EPSIG_RINGBACK },
-	{ .name = "stutter", .epsig = EPSIG_STUTTER },
-	{ .name = "unobtainable", .epsig = EPSIG_RINGBACK_CUST1 },    // Maps onto ToneUserDefined1 in endpoint_api.h
-	{ .name = "callwt", .epsig = EPSIG_CALLWT },
-	{ .name = "busy", .epsig = EPSIG_BUSY },
-	{ .name = "ringing", .epsig = EPSIG_RINGING },
-	{ .name = "callid_ringing", .epsig = EPSIG_CALLID_RINGING },
-	{ .name = "callid", .epsig = EPSIG_CALLID },
-	{ .name = "congestion", .epsig = EPSIG_NETBUSY },
-	{ .name = "dial2", .epsig = EPSIG_DIAL2 },
-	{ .name = "dtmf0", .epsig = EPSIG_DTMF0 },
-	{ .name = "dtmf1", .epsig = EPSIG_DTMF1 },
-	{ .name = "dtmf2", .epsig = EPSIG_DTMF2 },
-	{ .name = "dtmf3", .epsig = EPSIG_DTMF3 },
-	{ .name = "dtmf4", .epsig = EPSIG_DTMF4 },
-	{ .name = "dtmf5", .epsig = EPSIG_DTMF5 },
-	{ .name = "dtmf6", .epsig = EPSIG_DTMF6 },
-	{ .name = "dtmf7", .epsig = EPSIG_DTMF7 },
-	{ .name = "dtmf8", .epsig = EPSIG_DTMF8 },
-	{ .name = "dtmf9", .epsig = EPSIG_DTMF9 },
-	{ .name = "dtmf#", .epsig = EPSIG_DTMFH },
-	{ .name = "dtmf*", .epsig = EPSIG_DTMFS },
-	{ .name = "dtmfA", .epsig = EPSIG_DTMFA },
-	{ .name = "dtmfB", .epsig = EPSIG_DTMFB },
-	{ .name = "dtmfC", .epsig = EPSIG_DTMFC },
-	{ .name = "dtmfD", .epsig = EPSIG_DTMFD },
-	{ .name = "keypad", .epsig = EPSIG_INGRESS_DTMF },
-	{ .name = "", .epsig = EPSIG_LAST },
+static const struct voice_signal_t signal_map[] = { // For generating a signal to the phone
+	{ .name = "dial",           .signal = VOICE_SIG_DIAL },
+	{ .name = "ringback",       .signal = VOICE_SIG_RINGBACK },
+	{ .name = "stutter",        .signal = VOICE_SIG_STUTTER },
+	{ .name = "unobtainable",   .signal = VOICE_SIG_RINGBACK_CUST1 },    // Maps onto ToneUserDefined1 in endpoint_api.h
+	{ .name = "callwt",         .signal = VOICE_SIG_CALLWT },
+	{ .name = "busy",           .signal = VOICE_SIG_BUSY },
+	{ .name = "ringing",        .signal = VOICE_SIG_RINGING },
+	{ .name = "callid_ringing", .signal = VOICE_SIG_CALLID_RINGING },
+	{ .name = "callid",         .signal = VOICE_SIG_CALLID },
+	{ .name = "congestion",     .signal = VOICE_SIG_NETBUSY },
+	{ .name = "dtmf0",          .signal = VOICE_SIG_DTMF0 },
+	{ .name = "dtmf1",          .signal = VOICE_SIG_DTMF1 },
+	{ .name = "dtmf2",          .signal = VOICE_SIG_DTMF2 },
+	{ .name = "dtmf3",          .signal = VOICE_SIG_DTMF3 },
+	{ .name = "dtmf4",          .signal = VOICE_SIG_DTMF4 },
+	{ .name = "dtmf5",          .signal = VOICE_SIG_DTMF5 },
+	{ .name = "dtmf6",          .signal = VOICE_SIG_DTMF6 },
+	{ .name = "dtmf7",          .signal = VOICE_SIG_DTMF7 },
+	{ .name = "dtmf8",          .signal = VOICE_SIG_DTMF8 },
+	{ .name = "dtmf9",          .signal = VOICE_SIG_DTMF9 },
+	{ .name = "dtmf#",          .signal = VOICE_SIG_DTMFH },
+	{ .name = "dtmf*",          .signal = VOICE_SIG_DTMFS },
+	{ .name = "dtmfA",          .signal = VOICE_SIG_DTMFA },
+	{ .name = "dtmfB",          .signal = VOICE_SIG_DTMFB },
+	{ .name = "dtmfC",          .signal = VOICE_SIG_DTMFC },
+	{ .name = "dtmfD",          .signal = VOICE_SIG_DTMFD },
+	{ .name = "keypad",         .signal = VOICE_SIG_INGRESS_DTMF },
+	{ .name = "",               .signal = VOICE_SIG_LAST },
 };
 
 static int send_dect_event_to_asterisk(int line, struct dect_event_t dectEvnt) {
@@ -93,26 +90,31 @@ static int perhaps_simulate_busy(int line, struct voice_ubus_req_t *ubus_req) {
 	if(!lines[line].simulated_busy)
 		return 0;
 
-	// Inform the PBX only once per UBUS session or we get a loop.
+	// Inform Asterisk only once per UBUS session or we get a loop
 	assert(ubus_req && ubus_req->reqIn);
 	if(lines[line].simulated_busy_peer_id == ubus_req->reqIn->peer) {
 		return 1;
 	}
 	lines[line].simulated_busy_peer_id = ubus_req->reqIn->peer;
 
-	for(ev = event_map; ev->event != VOICE_EVT_OFFHOOK; ev++);
+	for(ev = event_map; ev->event != VOICE_EVT_OFFHOOK; ev++)
+		continue;
 	msg = malloc(sizeof(struct line_event_t));
-	msg->name = ev->name;
-	msg->data = 0;
-	msg->line = line;
-	send_event_main(msg, EVENT_MAIN_LINE);
+	if (msg) {
+		msg->name = ev->name;
+		msg->data = 0;
+		msg->line = line;
+		send_event_main(msg, EVENT_MAIN_LINE);
+	} else {
+		ENDPT_DBG("%s: out of memory\n", __func__);
+	}
 
 	return 1;
 }
 
 //----------------------------------------------------------------------------------
 // Asterisk wants to make a FXS phone or DECT handset ring probably with a caller ID
-static EPSTATUS line_signal_ring(int line, int pcm, EPSIG epsig, const char *data, struct voice_ubus_req_t *ubus_req) {
+static EPSTATUS line_signal_ring(int line, int pcm, EPSIG signal, const char *data, struct voice_ubus_req_t *ubus_req) {
 	const unsigned int CLID_MIN_LEN = 14;                   // Minimum string length to be valid.
 	const unsigned int CLID_TIME_DELIM = 8;                 // String index where time record ends.
 	const unsigned int CLID_NUMB_REC = CLID_TIME_DELIM + 2; // String index where number starts.
@@ -149,20 +151,20 @@ static EPSTATUS line_signal_ring(int line, int pcm, EPSIG epsig, const char *dat
 	}
 
 	// What type of ring signal?
-	switch(epsig) {
-		case EPSIG_CALLID:
+	switch(signal) {
+		case VOICE_SIG_CALLID:
 			if(line_req) {
 				line_req->action = start_ring ? ACTION_SIG_RING : ACTION_CONN_CLOSE;
 			} else {
-				return vrgEndptSignal(&lines[line].epHandle, -1, epsig, (unsigned int)data, -1, -1, -1);
+				return vrgEndptSignal(&lines[line].epHandle, -1, signal, (unsigned int)data, -1, -1, -1);
 			}
 			break;
 
-		case EPSIG_RINGING:
-		case EPSIG_CALLID_RINGING:
+		case VOICE_SIG_RINGING:
+		case VOICE_SIG_CALLID_RINGING:
 			if(line_req) {
 				if(start_ring) {
-					if(epsig == EPSIG_CALLID_RINGING) {
+					if(signal == VOICE_SIG_CALLID_RINGING) {
 						// Dect ignore this enable signal
 						free(line_req);
 						return EPSTATUS_SUCCESS;
@@ -173,7 +175,7 @@ static EPSTATUS line_signal_ring(int line, int pcm, EPSIG epsig, const char *dat
 				}
 				line_req->caller_id[0] = 0; // Discard enable/disable char or it will become the caller ID
 			} else {
-				return vrgEndptSignal(&lines[line].epHandle, -1, epsig, start_ring, -1, -1, -1);
+				return vrgEndptSignal(&lines[line].epHandle, -1, signal, start_ring, -1, -1, -1);
 			}
 			break;
 
@@ -196,16 +198,16 @@ static EPSTATUS line_signal_ring(int line, int pcm, EPSIG epsig, const char *dat
 //-------------------------------------------------------------
 // Generate a signal to the phone, such as DTMF tones or ringing
 int line_signal(int line, const char *signame, const char *data, struct voice_ubus_req_t *ubus_req) {
-	const struct epsig *sig;
+	const struct voice_signal_t *sig;
 	EPCMD_PARMS sigArg;
 	EPSTATUS status;
 	int i;
 
 	ENDPT_DBG("%s: line: %d, signame: %s, data: %s\n", __func__, line, signame, data);
 
-	for(sig = epsig_map; sig->epsig != EPSIG_LAST && strcmp(signame, sig->name) != 0; sig++)
+	for(sig = signal_map; sig->signal != VOICE_SIG_LAST && strcmp(signame, sig->name) != 0; sig++)
 		continue;
-	if(sig->epsig == EPSIG_LAST) {
+	if(sig->signal == VOICE_SIG_LAST) {
 		ENDPT_DBG("%s: signal %s is not supported\n", __func__, signame);
 		return -1;
 	}
@@ -214,21 +216,21 @@ int line_signal(int line, const char *signame, const char *data, struct voice_ub
 	if(perhaps_simulate_busy(line, ubus_req))
 		return 0;
 
-	switch(sig->epsig) {
-		case EPSIG_CALLID_RINGING:
-		case EPSIG_CALLID:
-		case EPSIG_RINGING:
+	switch(sig->signal) {
+		case VOICE_SIG_CALLID_RINGING:
+		case VOICE_SIG_CALLID:
+		case VOICE_SIG_RINGING:
 			if(atoi(data) == 0) {
 				status = line_signal_ring(line, lines[line].pcm_state[PCM_0] ==
-						LINE_PCM_STATE_RINGING ? PCM_0 : PCM_1, sig->epsig, data, ubus_req);
+						LINE_PCM_STATE_RINGING ? PCM_0 : PCM_1, sig->signal, data, ubus_req);
 				lines[line].signaled_call_waiting = 0;
 			} else {
 				status = line_signal_ring(line, lines[line].pcm_state[PCM_0] ==
-						LINE_PCM_STATE_NOT_USED ? PCM_0 : PCM_1, sig->epsig, data, ubus_req);
+						LINE_PCM_STATE_NOT_USED ? PCM_0 : PCM_1, sig->signal, data, ubus_req);
 			}
 			break;
 
-		case EPSIG_INGRESS_DTMF: // Simulate phone keypad button presses
+		case VOICE_SIG_INGRESS_DTMF: // Simulate phone keypad button presses
 			status = (data ? EPSTATUS_SUCCESS : EPSTATUS_SIGNAL_UNKNOWN);
 
 			/* Split user arg ASCII phone number string into (max 100)
@@ -266,38 +268,38 @@ int line_signal(int line, const char *signame, const char *data, struct voice_ub
 			}
 			break;
 
-		case EPSIG_CALLWT:
+		case VOICE_SIG_CALL_WAITING:
 			if (lines[line].type == VOICE_LINE_DECT) {
 				ENDPT_DBG("lines[%d].signaled_call_waiting: %d\n", line, lines[line].signaled_call_waiting);
 				if((data[0] == '1') && (lines[line].signaled_call_waiting == 0)) {
 					// start call waiting
 					status = line_signal_ring(line, lines[line].pcm_state[PCM_1] ==
-							LINE_PCM_STATE_NOT_USED ? PCM_1 : PCM_0, EPSIG_RINGING, data, ubus_req);
+							LINE_PCM_STATE_NOT_USED ? PCM_1 : PCM_0, VOICE_SIG_RINGING, data, ubus_req);
 					lines[line].signaled_call_waiting = 1;
 				} else if((data[0] == '0')) {
 					// stop call waiting
 					status = line_signal_ring(line, lines[line].pcm_state[PCM_1] ==
-							LINE_PCM_STATE_RINGING ? PCM_1 : PCM_0, EPSIG_RINGING, data, ubus_req);
+							LINE_PCM_STATE_RINGING ? PCM_1 : PCM_0, VOICE_SIG_RINGING, data, ubus_req);
 					lines[line].signaled_call_waiting = 0;
 				} else {
 					return 0;
 				}
 			} else {
-				status = vrgEndptSignal(&lines[line].epHandle, -1, sig->epsig, atoi(data), -1, -1, -1);
+				status = vrgEndptSignal(&lines[line].epHandle, -1, sig->signal, atoi(data), -1, -1, -1);
 			}
 			break;
 
-		case EPSIG_RINGBACK_CUST1:
-		case EPSIG_BUSY:
+		case VOICE_SIG_UNOBTAINABLE:
+		case VOICE_SIG_BUSY:
 			if (lines[line].type == VOICE_LINE_DECT) {
 				send_dect_event_to_asterisk(line, dect_event_map[DECT_EVT_RELEASE]);
 				status = EPSTATUS_SUCCESS;
 			} else {
-				status = vrgEndptSignal(&lines[line].epHandle, -1, sig->epsig, atoi(data), -1, -1, -1);
+				status = vrgEndptSignal(&lines[line].epHandle, -1, sig->signal, atoi(data), -1, -1, -1);
 			}
 			break;
 
-		case EPSIG_NETBUSY:
+		case VOICE_SIG_NETBUSY:
 			if (lines[line].type == VOICE_LINE_DECT) {
 				send_dect_event_to_asterisk(line, dect_event_map[DECT_EVT_RELEASE]);
 			}
@@ -305,7 +307,7 @@ int line_signal(int line, const char *signame, const char *data, struct voice_ub
 			break;
 
 		default:
-			status = vrgEndptSignal(&lines[line].epHandle, -1, sig->epsig, atoi(data), -1, -1, -1);
+			status = vrgEndptSignal(&lines[line].epHandle, -1, sig->signal, atoi(data), -1, -1, -1);
 			break;
 	}