diff --git a/library/RTP_Emulation.ttcn b/library/RTP_Emulation.ttcn
index 2a358a9..fcb158b 100644
--- a/library/RTP_Emulation.ttcn
+++ b/library/RTP_Emulation.ttcn
@@ -242,6 +242,42 @@
 	return true;
 }
 
+/* Check the statistics for general signs of errors. This is a basic general
+ * check that will fit most situations and  is intended to be executed by
+ * the testcases as as needed. */
+function f_rtpem_stats_err_check(RtpemStats s) {
+	log("stats: ", s);
+
+	/* Check if there was some activity at either on the RX or on the
+	 * TX side, but complete silence would indicate some problem */
+	if (s.num_pkts_tx < 1 and s.num_pkts_rx < 1) {
+		setverdict(fail, "no RTP packet activity detected (packets)");
+		mtc.stop;
+	}
+	if (s.bytes_payload_tx < 1 and s.bytes_payload_rx < 1) {
+		setverdict(fail, "no RTP packet activity detected (bytes)");
+		mtc.stop;
+	}
+
+	/* Check error counters */
+	if (s.num_pkts_rx_err_seq != 0) {
+		setverdict(fail, "RTP packet sequence number errors occurred");
+		mtc.stop;
+	}
+	if (s.num_pkts_rx_err_ts != 0) {
+		setverdict(fail, "RTP packet timestamp errors occurred");
+		mtc.stop;
+	}
+	if (s.num_pkts_rx_err_pt != 0) {
+		setverdict(fail, "RTP packet payload type errors occurred");
+		mtc.stop;
+	}
+	if (s.num_pkts_rx_err_disabled != 0) {
+		setverdict(fail, "RTP packets received while RX was disabled");
+		mtc.stop;
+	}
+}
+
 template PDU_RTP ts_RTP(BIT32_BO_LAST ssrc, INT7b pt, LIN2_BO_LAST seq, uint32_t ts,
 			octetstring payload, BIT1 marker := '0'B) := {
 	version := 2,
diff --git a/mgw/MGCP_Test.ttcn b/mgw/MGCP_Test.ttcn
index 264ac28..a6d3460 100644
--- a/mgw/MGCP_Test.ttcn
+++ b/mgw/MGCP_Test.ttcn
@@ -961,21 +961,8 @@
 		if (stats.bytes_payload_tx < 190) {
 			setverdict(fail);
 		}
-		if (stats.num_pkts_rx != 0) {
-			setverdict(fail);
-		}
-		if (stats.num_pkts_rx_err_seq != 0) {
-			setverdict(fail);
-		}
-		if (stats.num_pkts_rx_err_ts != 0) {
-			setverdict(fail);
-		}
-		if (stats.num_pkts_rx_err_pt != 0) {
-			setverdict(fail);
-		}
-		if (stats.num_pkts_rx_err_disabled != 0) {
-			setverdict(fail);
-		}
+
+		f_rtpem_stats_err_check(stats);
 
 		setverdict(pass);
 	}
@@ -1005,18 +992,8 @@
 		if (stats.bytes_payload_tx != stats.bytes_payload_rx) {
 			setverdict(fail);
 		}
-		if (stats.num_pkts_rx_err_seq != 0) {
-			setverdict(fail);
-		}
-		if (stats.num_pkts_rx_err_ts != 0) {
-			setverdict(fail);
-		}
-		if (stats.num_pkts_rx_err_pt != 0) {
-			setverdict(fail);
-		}
-		if (stats.num_pkts_rx_err_disabled != 0) {
-			setverdict(fail);
-		}
+
+		f_rtpem_stats_err_check(stats);
 
 		setverdict(pass);
 	}
@@ -1068,10 +1045,8 @@
 			mtc.stop;
 		}
 
-		if (stats[0].num_pkts_rx_err_pt > 0 or stats[1].num_pkts_rx_err_pt > 0) {
-			setverdict(fail, "RTP packets with wrong payload type received");
-			mtc.stop;
-		}
+		f_rtpem_stats_err_check(stats[0]);
+		f_rtpem_stats_err_check(stats[1]);
 
 		setverdict(pass);
 	}
@@ -1174,20 +1149,15 @@
 			setverdict(fail, "number of packets not within normal parameters");
 			mtc.stop;
 		}
-		if (stats[0].num_pkts_rx_err_pt > 0) {
-			setverdict(fail, "RTP packets with wrong payload type received");
-			mtc.stop;
-		}
 
 		temp := stats[1].num_pkts_tx - num_pkts_tx[1] - stats[0].num_pkts_rx;
 		if (temp > 3 or temp < -3) {
 			setverdict(fail, "number of packets not within normal parameters");
 			mtc.stop;
 		}
-		if (stats[0].num_pkts_rx_err_pt > 0) {
-			setverdict(fail, "RTP packets with wrong payload type received");
-			mtc.stop;
-		}
+
+		f_rtpem_stats_err_check(stats[0]);
+		f_rtpem_stats_err_check(stats[1]);
 
 		/* Tear down */
 		f_flow_delete(RTPEM[0]);
@@ -1240,10 +1210,8 @@
 			mtc.stop;
 		}
 
-		if (stats[0].num_pkts_rx_err_pt > 0 or stats[1].num_pkts_rx_err_pt > 0) {
-			setverdict(fail, "RTP packets with wrong payload type received");
-			mtc.stop;
-		}
+		f_rtpem_stats_err_check(stats[0]);
+		f_rtpem_stats_err_check(stats[0]);
 
 		setverdict(pass);
 	}
@@ -1308,10 +1276,9 @@
 			mtc.stop;
 		}
 
-		if (stats[0].num_pkts_rx_err_pt > 0 or stats[1].num_pkts_rx_err_pt > 0) {
-			setverdict(fail, "RTP packets with wrong payload type received");
-			mtc.stop;
-		}
+		f_rtpem_stats_err_check(stats[0]);
+		f_rtpem_stats_err_check(stats[1]);
+		f_rtpem_stats_err_check(stats[2]);
 
 		setverdict(pass);
 	}
