diff --git a/src/channels/chan_voicemngr.c b/src/channels/chan_voicemngr.c
index d9c86f5ba82efe50c6be8ff074031c4882765acd..890cad713975086637f79f94b1f861684f225a0b 100644
--- a/src/channels/chan_voicemngr.c
+++ b/src/channels/chan_voicemngr.c
@@ -4525,6 +4525,8 @@ enum {
 	RTP_STATS_LOSS_RATE,
 	RTP_STATS_MAX_JITTER,
 	RTP_STATS_AVERAGE_ROUND_TRIP_DELAY,
+	RTP_STATS_OVERRUNS,
+	RTP_STATS_UNDERRUNS,
 	__MAX_RTP_STATS,
 };
 
@@ -4555,6 +4557,8 @@ static const struct blobmsg_policy endpt_rtp_stats_policy[__MAX_RTP_STATS] = {
 	[RTP_STATS_LOSS_RATE] = { .name = "uLossRate", .type = BLOBMSG_TYPE_INT16 },
 	[RTP_STATS_MAX_JITTER] = { .name = "maxJitter", .type = BLOBMSG_TYPE_INT32 },
 	[RTP_STATS_AVERAGE_ROUND_TRIP_DELAY] = { .name = "averageRoundTripDelay", .type = BLOBMSG_TYPE_INT32 },
+	[RTP_STATS_OVERRUNS] = { .name = "overruns", .type = BLOBMSG_TYPE_INT16 },
+	[RTP_STATS_UNDERRUNS] = { .name = "underruns", .type = BLOBMSG_TYPE_INT16 },
 };
 
 // Reception of event
@@ -4627,6 +4631,8 @@ static void ubus_call_answer_rtp_stats(struct ubus_request *req, int type, struc
 	struct chan_voicemngr_pvt *p = NULL;
 	struct chan_voicemngr_subchannel *sub = NULL;
 	int sip_client_id = -1;
+	uint16_t overruns = 0;
+	uint16_t underruns = 0;
 
 	ast_log(LOG_DEBUG, "thread %d: got answer from voicemngr on rtp_stats ubus call.\n", ast_get_tid());
 	blobmsg_parse(endpt_rtp_stats_policy, __MAX_RTP_STATS, tb, blob_data(msg), blob_len(msg));
@@ -4701,7 +4707,20 @@ static void ubus_call_answer_rtp_stats(struct ubus_request *req, int type, struc
 		sub->rtp_stats.maxJitter = blobmsg_get_u32(tb[RTP_STATS_MAX_JITTER]);
 	if (tb[RTP_STATS_AVERAGE_ROUND_TRIP_DELAY])
 		sub->rtp_stats.averageRoundTripDelay = blobmsg_get_u32(tb[RTP_STATS_AVERAGE_ROUND_TRIP_DELAY]);
-
+	if (tb[RTP_STATS_OVERRUNS]) {
+		overruns = blobmsg_get_u16(tb[RTP_STATS_OVERRUNS]);
+		sip_client_id = chan_voicemngr_get_sip_client_id(sub);
+		if (sip_client_id >= 0 && sip_client_id < MAX_SIP_CLIENTS) {
+			line_stats[sip_client_id].total_overruns += overruns;
+		}
+	}
+	if (tb[RTP_STATS_UNDERRUNS]) {
+		underruns = blobmsg_get_u16(tb[RTP_STATS_UNDERRUNS]);
+		sip_client_id = chan_voicemngr_get_sip_client_id(sub);
+		if (sip_client_id >= 0 && sip_client_id < MAX_SIP_CLIENTS) {
+			line_stats[sip_client_id].total_underruns += underruns;
+		}
+	}
 	sub->rtp_stats.averageFarEndInterarrivalJitter = sub->jitter_count ? (sub->farEndInterrivalJitter / sub->jitter_count) : 0;
 
 	ast_log(LOG_DEBUG, "RTP stats received:\nlocalBurstDensity: %d, remoteBurstDensity: %d, "
@@ -4711,14 +4730,15 @@ static void ubus_call_answer_rtp_stats(struct ubus_request *req, int type, struc
 			"localJbNominal: %d remoteJbNominal: %d, localJbAbsMax: %d, "
 			"remoteJbAbsMax: %d, discarded: %d, lost: %d, rxpkts: %d, txpkts: %d, "
 			"jbAvg: %d, jitter: %d, uLossRate: %d, maxJitter: %d, averageRoundTripDelay: %d, "
-			"averageFarEndInterarrivalJitter: %d\n",
+			"averageFarEndInterarrivalJitter: %d, overruns: %d, underruns: %d\n",
 			sub->rtp_stats.localBurstDensity, sub->rtp_stats.remoteBurstDensity, sub->rtp_stats.localBurstDuration,
 			sub->rtp_stats.remoteBurstDuration, sub->rtp_stats.localGapDensity, sub->rtp_stats.remoteGapDensity,
 			sub->rtp_stats.localGapDuration, sub->rtp_stats.remoteGapDuration, sub->rtp_stats.localJbRate,
 			sub->rtp_stats.remoteJbRate, sub->rtp_stats.localJbMax, sub->rtp_stats.remoteJbMax, sub->rtp_stats.localJbNominal,
 			sub->rtp_stats.remoteJbNominal, sub->rtp_stats.localJbAbsMax, sub->rtp_stats.remoteJbAbsMax, sub->rtp_stats.discarded,
 			sub->rtp_stats.lost, sub->rtp_stats.rxpkts, sub->rtp_stats.txpkts, sub->rtp_stats.jbAvg, sub->rtp_stats.jitter,
-			sub->rtp_stats.uLossRate, sub->rtp_stats.maxJitter, sub->rtp_stats.averageRoundTripDelay, sub->rtp_stats.averageFarEndInterarrivalJitter);
+			sub->rtp_stats.uLossRate, sub->rtp_stats.maxJitter, sub->rtp_stats.averageRoundTripDelay,
+			sub->rtp_stats.averageFarEndInterarrivalJitter, overruns, underruns);
 }
 
 static int endpt_get_rtp_stats(int line) {
@@ -4864,6 +4884,8 @@ static int asterisk_call_status(struct ubus_context *ctx, struct ubus_object *ob
 			blobmsg_add_u32(&blob, "PacketsLost", line_stats[line].pktslost);
 			blobmsg_add_u32(&blob, "BytesReceived", line_stats[line].rxbytes);
 			blobmsg_add_u32(&blob, "BytesSent", line_stats[line].txbytes);
+			blobmsg_add_u32(&blob, "Overruns", line_stats[line].total_overruns);
+			blobmsg_add_u32(&blob, "Underruns", line_stats[line].total_underruns);
 			blobmsg_close_table(&blob, table_rtp);
 			blobmsg_close_table(&blob, table_stats);
 			res = UBUS_STATUS_OK;
diff --git a/src/channels/chan_voicemngr.h b/src/channels/chan_voicemngr.h
index 6975f5bc29f97b795dbe7b25ae8bc482e2f6021f..f876e38d39ff763f23a6ecd14e13ee062e45964d 100644
--- a/src/channels/chan_voicemngr.h
+++ b/src/channels/chan_voicemngr.h
@@ -121,6 +121,8 @@ struct line_stats_t {
 	uint32_t rxbytes;
 	uint32_t txbytes;
 	uint32_t pktslost;
+	uint32_t total_overruns;
+	uint32_t total_underruns;
 };
 
 /*