diff --git a/tests/codec/codec_ecu_fr_test.c b/tests/codec/codec_ecu_fr_test.c
new file mode 100644
index 0000000..0fdc489
--- /dev/null
+++ b/tests/codec/codec_ecu_fr_test.c
@@ -0,0 +1,146 @@
+#include <stdio.h>
+#include <stdint.h>
+#include <string.h>
+
+#include <osmocom/core/bitvec.h>
+#include <osmocom/core/utils.h>
+
+#include <osmocom/codec/codec.h>
+#include <osmocom/codec/ecu.h>
+
+/* Set with sample full-rate voice frames and some intentional dropouts */
+static const char *fr_frames_hex[] = {
+	"d9aa93ae63de00471a91b95b8660471392b4a2daa037628f391c624039258dc723",
+	"d8eb83699a66c036ec89b7246e6034dc8d48948620589b7256e3a6603b2371b8da",
+	"d967abaa1cbe4035238da6ace4c036d46ec69ba600391c4eb8a2b040591c6a3924",
+	"d8e8a42662c240472469b91bd2e0452291b6dba600495b8e38dcb020491a71c91b",
+	"da2aac1ddbb00036e46e26dcec6039138db923822047137248e3560048e38dc8e3",
+	"d929ab2a9b5240395b6dc72ba020469c8d551c5440349c9148e36a4036a372471b",
+	"d9eb93215bb8a0271c69c724682036db71c71a94a0372491b72bee4044eb71b923",
+	"d9ab9aa19abc40391b6e5ae2ee40471b91c6dbe820492291b8e4b84036e47238db",
+	"d96b9be9db782044e371b55cb200389491c69b8ea034e271c8d3808038ec6db8e3",
+	"d9aa9365e3f060375c6db6ebc4c02764b1c51b78a0571c91a723de6049248dc8dd",
+	"BAD",
+	"d9ea9c219ce60046e38d3724e0c034e56e36eb7e0038d471b8dcb260491b8dbb23",
+	"d9e89be9d9e0a0391b6dd6a4624029247138e3a2a04713922524de0036db69d91c",
+	"d9699422a2b6a048dd90c91c6a802b6259395c8880575b4a58e4ac20269d7248d4",
+	"d967ac5b1baae0371c71b8ab9c804a9e8e58a55a8038626ec8dcb640395c7244dc",
+	"d9e8a3e262e68027638db52b88a038634e471a7ec049136e3b1bc8402923adcad2",
+	"d8eab36e1bbe0046e34d491b608035137658d3524044e48e375cdac0472b9238d4",
+	"d9689ba5e3d260491b516adb5e4027256e27227ee0351c8e549a5c60492471971b",
+	"BAD",
+	"BAD",
+	"d8e6a2e1d3d2605b1376c8d35280392451391cbc80392a71b6db8aa049238dc8ab",
+	"d9a87ba1a3982048eb8a471cac00472b4e391bbc40292489b71cc200495b8d3ae3",
+	"d9278b2a1ba4c0475b8dc722d6e0491b5228da70204ae36dc71d94a056a29236e3",
+	"d9ec9be2129520392335598c50c04b5bad3d4ba680789b69df5a5aa0469cd1b4da",
+	"d8ea932623e660669b8e4a9dd8a03aa32a76e466e028d396cc9bbe4047256dc8e5",
+	"d96a94215aa0403aab713f22e8e024e68db91ab6a027abd1a55b6e804aec9146e4",
+	"d867ac21e270a0350d6ac91a724037247246d2a6c0396c89d6dc562049244e48d5",
+	"d8a9b460d3b48026a4ad471b7c20452491b69bbc803ae48db722ee00292491a8db",
+	"d928a3e1d3b24036e37244abf02047634d371b74c047637148a29ac03b234e38e3",
+	"d9ab9b21d2e0c0471c693aec54e044dbae46dc7c20391badb724ee8038e469bb15",
+	"d9a99361a276403b1a6ad6dcd40026e489c8e3bc40371c4dc564e2c036e28eb963",
+	"BAD",
+	"BAD",
+	"BAD",
+	"BAD",
+	"BAD",
+	"BAD",
+	"d92c8b6d5aee4034ebb22724862047145634a5c0a038e371b8e4a880485c89dd25",
+	"d8e78b29e3c6c038dba9d91beca04723ad491cda80471471b6ec7ae03b1396b91b",
+	"d8a78b25e37a0022dd8a46dc68a0351bad391bde2046e56dd8dc96c038e396d89b",
+	"d8a88c255ab6e038e38e48dbde8038ad8dc8db8ec0376372b564b44038e49234dc",
+	"d9708ce6a39ce049646646a2c1a0272496b29a66c037db562863ace0795b55b2e3",
+	"d8ee9bea5ae4003ae371b713eae05adc91995a5ea064dcc9571e786026ed51c52c",
+	"d9299421d2944036ed69b8e572a048e36d551cd480571d4ec95be680356c69c763",
+	"d92aab696190c046e26e392cae0026a376a8dc662048d291b75b54c04ad3ae3b1b",
+	"d8e7a469627a6038e289cb1baca0569b8db6dddec026dc8e38e5dc803722722d23",
+	"d8a88c299b64c03a548a58e37420272c6dd76b92c0471c9236dbc0e0551c71c713",
+	"BAD",
+	"d7299c19a3be8024e58ea7a49f20a522963ad976e0a76ecd92b38500cb62aa4c94",
+	"d7eb6c6262eee02b2c42e79a60a0aa55aed68a7f00ad358e10fad960e55a39396d",
+	"d970858dd2ab61d91355ebc15ca1a6a7ca48a05cc0dae66f2523c2a1bad3825daa",
+	"d8f0844a23ad20da50d6de025e81c37392b9039cc0c764c1bd1e94c1b699736a98",
+	"d9708ce6a39ce049646646a2c1a0272496b29a66c037db562863ace0795b55b2e3",
+	"d9299421d2944036ed69b8e572a048e36d551cd480571d4ec95be680356c69c763",
+	"d9299421d2944036ed69b8e572a048e36d551cd480571d4ec95be680356c69c763",
+	"d9299421d2944036ed69b8e572a048e36d551cd480571d4ec95be680356c69c763",
+	"d2577a1cda50004924924924500049249249245000492492492450004923924924",
+	NULL
+};
+
+/* Example of a good frame */
+static const char *sample_frame_hex = \
+	"d9ec9be212901f802335598c501f805bad3d4ba01f809b69df5a501f809cd1b4da";
+
+/**
+ * Start with a good voice frame and then simulate 20 consecutive bad frames,
+ * watching how the error concealment decreases the XMAXC parameters.
+ */
+void test_fr_concealment(void)
+{
+	struct osmo_ecu_fr_state state;
+	uint8_t frame[GSM_FR_BYTES];
+	int i, rc;
+
+	/* Parse frame from string to hex */
+	osmo_hexparse(sample_frame_hex, frame, GSM_FR_BYTES);
+
+	printf("Start with: %s\n", sample_frame_hex);
+
+	/* Reset the ECU with the proposed known good frame */
+	osmo_ecu_fr_reset(&state, frame);
+
+	/* Now pretend that we do not receive any good frames anymore */
+	for (i = 0; i < 20; i++) {
+		rc = osmo_ecu_fr_conceal(&state, frame);
+		OSMO_ASSERT(rc == 0);
+
+		printf("conceal: %02i, result: %s\n",
+			i, osmo_hexdump_nospc(frame, GSM_FR_BYTES));
+	}
+}
+
+/* Simulate a real life situation: voice frames with a few dropouts */
+void test_fr_concealment_realistic()
+{
+	struct osmo_ecu_fr_state state;
+	uint8_t frame[GSM_FR_BYTES];
+	unsigned int frame_len;
+	int rc, i = 0;
+
+	while (fr_frames_hex[i] != NULL) {
+		/* Debug print */
+		printf("Frame No. %03i:\n", i);
+
+		/* Good or bad frame? */
+		frame_len = strlen(fr_frames_hex[i]) / 2;
+		if (frame_len == GSM_FR_BYTES) {
+			printf(" * input:  %s\n", fr_frames_hex[i]);
+			osmo_hexparse(fr_frames_hex[i], frame, GSM_FR_BYTES);
+			osmo_ecu_fr_reset(&state, frame);
+		} else {
+			printf(" * input:  (bad)\n");
+			memset(frame, 0x00, GSM_FR_BYTES);
+			rc = osmo_ecu_fr_conceal(&state, frame);
+			OSMO_ASSERT(rc == 0);
+		}
+
+		/* Print result */
+		printf(" * output: %s\n",
+			osmo_hexdump_nospc(frame, GSM_FR_BYTES));
+
+		/* Go to the next frame */
+		i++;
+	}
+}
+
+int main(int argc, char **argv)
+{
+	/* Perform actual tests */
+	test_fr_concealment();
+	test_fr_concealment_realistic();
+
+	return 0;
+}
