diff --git a/openbsc/src/libmsc/gsm_04_08.c b/openbsc/src/libmsc/gsm_04_08.c
index 3cfc455..6360393 100644
--- a/openbsc/src/libmsc/gsm_04_08.c
+++ b/openbsc/src/libmsc/gsm_04_08.c
@@ -2876,6 +2876,7 @@
 	case MNCC_FRAME_RECV:
 		return tch_recv_mncc(net, data->callref, 1);
 	case GSM_TCHF_FRAME:
+	case GSM_TCHF_FRAME_EFR:
 		/* Find callref */
 		trans = trans_find_by_callref(net, data->callref);
 		if (!trans) {
diff --git a/openbsc/src/libtrau/trau_mux.c b/openbsc/src/libtrau/trau_mux.c
index 9272ac0..c9d77cf 100644
--- a/openbsc/src/libtrau/trau_mux.c
+++ b/openbsc/src/libtrau/trau_mux.c
@@ -30,6 +30,7 @@
 #include <openbsc/debug.h>
 #include <osmocom/core/talloc.h>
 #include <openbsc/trau_upqueue.h>
+#include <osmocom/core/crcgen.h>
 
 /* this corresponds to the bit-lengths of the individual codec
  * parameters as indicated in Table 1.1 of TS 06.10 */
@@ -46,6 +47,53 @@
 	3, 3, 3, 3
 };
 
+
+/*
+ * EFR TRAU parity
+ *
+ * g(x) = x^3 + x^1 + 1
+ */
+static const struct osmo_crc8gen_code gsm0860_efr_crc3 = {
+	.bits = 3,
+	.poly = 0x3,
+	.init = 0x0,
+	.remainder = 0x7,
+};
+
+/* EFR parity bits */
+static inline void efr_parity_bits_1(ubit_t *check_bits, const ubit_t *d_bits)
+{
+	memcpy(check_bits + 0 , d_bits + 0, 22);
+	memcpy(check_bits + 22 , d_bits + 24, 3);
+	check_bits[25] = d_bits[28];
+}
+
+static inline void efr_parity_bits_2(ubit_t *check_bits, const ubit_t *d_bits)
+{
+	memcpy(check_bits + 0 , d_bits + 42, 10);
+	memcpy(check_bits + 10 , d_bits + 90, 2);
+}
+
+static inline void efr_parity_bits_3(ubit_t *check_bits, const ubit_t *d_bits)
+{
+	memcpy(check_bits + 0 , d_bits + 98, 5);
+	check_bits[5] = d_bits[104];
+	memcpy(check_bits + 6 , d_bits + 143, 2);
+}
+
+static inline void efr_parity_bits_4(ubit_t *check_bits, const ubit_t *d_bits)
+{
+	memcpy(check_bits + 0 , d_bits + 151, 10);
+	memcpy(check_bits + 10 , d_bits + 199, 2);
+}
+
+static inline void efr_parity_bits_5(ubit_t *check_bits, const ubit_t *d_bits)
+{
+	memcpy(check_bits + 0 , d_bits + 207, 5);
+	check_bits[5] = d_bits[213];
+	memcpy(check_bits + 6 , d_bits + 252, 2);
+}
+
 struct map_entry {
 	struct llist_head list;
 	struct gsm_e1_subslot src, dst;
@@ -158,7 +206,117 @@
 	return NULL;
 }
 
-static const uint8_t c_bits_check[] = { 0, 0, 0, 1, 0 };
+static const uint8_t c_bits_check_fr[] = { 0, 0, 0, 1, 0 };
+static const uint8_t c_bits_check_efr[] = { 1, 1, 0, 1, 0 };
+
+struct msgb *trau_decode_fr(uint32_t callref,
+	const struct decoded_trau_frame *tf)
+{
+	struct msgb *msg;
+	struct gsm_data_frame *frame;
+	unsigned char *data;
+	int i, j, k, l, o;
+
+	msg = msgb_alloc(sizeof(struct gsm_data_frame) + 33,
+				 "GSM-DATA");
+	if (!msg)
+		return NULL;
+
+	frame = (struct gsm_data_frame *)msg->data;
+	memset(frame, 0, sizeof(struct gsm_data_frame));
+	data = frame->data;
+	data[0] = 0xd << 4;
+	/* reassemble d-bits */
+	i = 0; /* counts bits */
+	j = 4; /* counts output bits */
+	k = gsm_fr_map[0]-1; /* current number bit in element */
+	l = 0; /* counts element bits */
+	o = 0; /* offset input bits */
+	while (i < 260) {
+		data[j/8] |= (tf->d_bits[k+o] << (7-(j%8)));
+		if (--k < 0) {
+			o += gsm_fr_map[l];
+			k = gsm_fr_map[++l]-1;
+		}
+		i++;
+		j++;
+	}
+	frame->msg_type = GSM_TCHF_FRAME;
+	frame->callref = callref;
+	msgb_put(msg, sizeof(struct gsm_data_frame) + 33);
+
+	return msg;
+}
+
+struct msgb *trau_decode_efr(uint32_t callref,
+	const struct decoded_trau_frame *tf)
+{
+	struct msgb *msg;
+	struct gsm_data_frame *frame;
+	unsigned char *data;
+	int i, j, rc;
+	ubit_t check_bits[26];
+
+	msg = msgb_alloc(sizeof(struct gsm_data_frame) + 31,
+				 "GSM-DATA");
+	if (!msg)
+		return NULL;
+
+	frame = (struct gsm_data_frame *)msg->data;
+	memset(frame, 0, sizeof(struct gsm_data_frame));
+	frame->msg_type = GSM_TCHF_FRAME_EFR;
+	frame->callref = callref;
+	msgb_put(msg, sizeof(struct gsm_data_frame) + 31);
+
+	if (tf->c_bits[11]) /* BFI */
+		goto bad_frame;
+
+	data = frame->data;
+	data[0] = 0xc << 4;
+	/* reassemble d-bits */
+	for (i = 1, j = 4; i < 39; i++, j++)
+		data[j/8] |= (tf->d_bits[i] << (7-(j%8)));
+	efr_parity_bits_1(check_bits, tf->d_bits);
+	rc = osmo_crc8gen_check_bits(&gsm0860_efr_crc3, check_bits, 26,
+			tf->d_bits + 39);
+	if (rc)
+		goto bad_frame;
+	for (i = 42, j = 42; i < 95; i++, j++)
+		data[j/8] |= (tf->d_bits[i] << (7-(j%8)));
+	efr_parity_bits_2(check_bits, tf->d_bits);
+	rc = osmo_crc8gen_check_bits(&gsm0860_efr_crc3, check_bits, 12,
+			tf->d_bits + 95);
+	if (rc)
+		goto bad_frame;
+	for (i = 98, j = 95; i < 148; i++, j++)
+		data[j/8] |= (tf->d_bits[i] << (7-(j%8)));
+	efr_parity_bits_3(check_bits, tf->d_bits);
+	rc = osmo_crc8gen_check_bits(&gsm0860_efr_crc3, check_bits, 8,
+			tf->d_bits + 148);
+	if (rc)
+		goto bad_frame;
+	for (i = 151, j = 145; i < 204; i++, j++)
+		data[j/8] |= (tf->d_bits[i] << (7-(j%8)));
+	efr_parity_bits_4(check_bits, tf->d_bits);
+	rc = osmo_crc8gen_check_bits(&gsm0860_efr_crc3, check_bits, 12,
+			tf->d_bits + 204);
+	if (rc)
+		goto bad_frame;
+	for (i = 207, j = 198; i < 257; i++, j++)
+		data[j/8] |= (tf->d_bits[i] << (7-(j%8)));
+	efr_parity_bits_5(check_bits, tf->d_bits);
+	rc = osmo_crc8gen_check_bits(&gsm0860_efr_crc3, check_bits, 8,
+			tf->d_bits + 257);
+	if (rc)
+		goto bad_frame;
+
+	return msg;
+
+bad_frame:
+	frame->msg_type = GSM_TCHF_BAD_FRAME;
+
+	return msg;
+}
 
 /* we get called by subchan_demux */
 int trau_mux_input(struct gsm_e1_subslot *src_e1_ss,
@@ -177,45 +335,25 @@
 		return rc;
 
 	if (!dst_e1_ss) {
-		struct msgb *msg;
-		struct gsm_data_frame *frame;
-		unsigned char *data;
-		int i, j, k, l, o;
+		struct msgb *msg = NULL;
 		/* frame shall be sent to upqueue */
 		if (!(ue = lookup_trau_upqueue(src_e1_ss)))
 			return -EINVAL;
 		if (!ue->callref)
 			return -EINVAL;
-		if (memcmp(tf.c_bits, c_bits_check, sizeof(c_bits_check)))
+		if (!memcmp(tf.c_bits, c_bits_check_fr, 5))
+			msg = trau_decode_fr(ue->callref, &tf);
+		else if (!memcmp(tf.c_bits, c_bits_check_efr, 5))
+			msg = trau_decode_efr(ue->callref, &tf);
+		else {
 			DEBUGPC(DLMUX, "illegal trau (C1-C5) %s\n",
-				osmo_hexdump(tf.c_bits, sizeof(c_bits_check)));
-		msg = msgb_alloc(sizeof(struct gsm_data_frame) + 33,
-				 "GSM-DATA");
+				osmo_hexdump(tf.c_bits, 5));
+			DEBUGPC(DLMUX, "test trau (C1-C5) %s\n",
+				osmo_hexdump(c_bits_check_efr, 5));
+			return -EINVAL;
+		}
 		if (!msg)
 			return -ENOMEM;
-
-		frame = (struct gsm_data_frame *)msg->data;
-		memset(frame, 0, sizeof(struct gsm_data_frame));
-		data = frame->data;
-		data[0] = 0xd << 4;
-		/* reassemble d-bits */
-		i = 0; /* counts bits */
-		j = 4; /* counts output bits */
-		k = gsm_fr_map[0]-1; /* current number bit in element */
-		l = 0; /* counts element bits */
-		o = 0; /* offset input bits */
-		while (i < 260) {
-			data[j/8] |= (tf.d_bits[k+o] << (7-(j%8)));
-			if (--k < 0) {
-				o += gsm_fr_map[l];
-				k = gsm_fr_map[++l]-1;
-			}
-			i++;
-			j++;
-		}
-		frame->msg_type = GSM_TCHF_FRAME;
-		frame->callref = ue->callref;
-		msgb_put(msg, sizeof(struct gsm_data_frame) + 33);
 		trau_tx_to_mncc(ue->net, msg);
 
 		return 0;
@@ -275,13 +413,86 @@
 	return 0;
 }
 
+void trau_encode_fr(struct decoded_trau_frame *tf,
+	const unsigned char *data)
+{
+	int i, j, k, l, o;
+
+	/* set c-bits and t-bits */
+	tf->c_bits[0] = 1;
+	tf->c_bits[1] = 1;
+	tf->c_bits[2] = 1;
+	tf->c_bits[3] = 0;
+	tf->c_bits[4] = 0;
+	memset(&tf->c_bits[5], 0, 6);
+	memset(&tf->c_bits[11], 1, 10);
+	memset(&tf->t_bits[0], 1, 4);
+	/* reassemble d-bits */
+	i = 0; /* counts bits */
+	j = 4; /* counts input bits */
+	k = gsm_fr_map[0]-1; /* current number bit in element */
+	l = 0; /* counts element bits */
+	o = 0; /* offset output bits */
+	while (i < 260) {
+		tf->d_bits[k+o] = (data[j/8] >> (7-(j%8))) & 1;
+		if (--k < 0) {
+			o += gsm_fr_map[l];
+			k = gsm_fr_map[++l]-1;
+		}
+		i++;
+		j++;
+	}
+}
+
+void trau_encode_efr(struct decoded_trau_frame *tf,
+	const unsigned char *data)
+{
+	int i, j;
+	ubit_t check_bits[26];
+
+	/* set c-bits and t-bits */
+	tf->c_bits[0] = 1;
+	tf->c_bits[1] = 1;
+	tf->c_bits[2] = 0;
+	tf->c_bits[3] = 1;
+	tf->c_bits[4] = 0;
+	memset(&tf->c_bits[5], 0, 6);
+	memset(&tf->c_bits[11], 1, 10);
+	memset(&tf->t_bits[0], 1, 4);
+	/* reassemble d-bits */
+	tf->d_bits[0] = 1;
+	for (i = 1, j = 4; i < 39; i++, j++)
+		tf->d_bits[i] = (data[j/8] >> (7-(j%8))) & 1;
+	efr_parity_bits_1(check_bits, tf->d_bits);
+	osmo_crc8gen_set_bits(&gsm0860_efr_crc3, check_bits, 26,
+			tf->d_bits + 39);
+	for (i = 42, j = 42; i < 95; i++, j++)
+		tf->d_bits[i] = (data[j/8] >> (7-(j%8))) & 1;
+	efr_parity_bits_2(check_bits, tf->d_bits);
+	osmo_crc8gen_set_bits(&gsm0860_efr_crc3, check_bits, 12,
+			tf->d_bits + 95);
+	for (i = 98, j = 95; i < 148; i++, j++)
+		tf->d_bits[i] = (data[j/8] >> (7-(j%8))) & 1;
+	efr_parity_bits_3(check_bits, tf->d_bits);
+	osmo_crc8gen_set_bits(&gsm0860_efr_crc3, check_bits, 8,
+			tf->d_bits + 148);
+	for (i = 151, j = 145; i < 204; i++, j++)
+		tf->d_bits[i] = (data[j/8] >> (7-(j%8))) & 1;
+	efr_parity_bits_4(check_bits, tf->d_bits);
+	osmo_crc8gen_set_bits(&gsm0860_efr_crc3, check_bits, 12,
+			tf->d_bits + 204);
+	for (i = 207, j = 198; i < 257; i++, j++)
+		tf->d_bits[i] = (data[j/8] >> (7-(j%8))) & 1;
+	efr_parity_bits_5(check_bits, tf->d_bits);
+	osmo_crc8gen_set_bits(&gsm0860_efr_crc3, check_bits, 8,
+			tf->d_bits + 257);
+}
+
 int trau_send_frame(struct gsm_lchan *lchan, struct gsm_data_frame *frame)
 {
 	uint8_t trau_bits_out[TRAU_FRAME_BITS];
 	struct gsm_e1_subslot *dst_e1_ss = &lchan->ts->e1_link;
 	struct subch_mux *mx;
-	int i, j, k, l, o;
-	unsigned char *data = frame->data;
 	struct decoded_trau_frame tf;
 
 	mx = e1inp_get_mux(dst_e1_ss->e1_nr, dst_e1_ss->e1_ts);
@@ -290,30 +501,10 @@
 
 	switch (frame->msg_type) {
 	case GSM_TCHF_FRAME:
-		/* set c-bits and t-bits */
-		tf.c_bits[0] = 1;
-		tf.c_bits[1] = 1;
-		tf.c_bits[2] = 1;
-		tf.c_bits[3] = 0;
-		tf.c_bits[4] = 0;
-		memset(&tf.c_bits[5], 0, 6);
-		memset(&tf.c_bits[11], 1, 10);
-		memset(&tf.t_bits[0], 1, 4);
-		/* reassemble d-bits */
-		i = 0; /* counts bits */
-		j = 4; /* counts input bits */
-		k = gsm_fr_map[0]-1; /* current number bit in element */
-		l = 0; /* counts element bits */
-		o = 0; /* offset output bits */
-		while (i < 260) {
-			tf.d_bits[k+o] = (data[j/8] >> (7-(j%8))) & 1;
-			if (--k < 0) {
-				o += gsm_fr_map[l];
-				k = gsm_fr_map[++l]-1;
-			}
-			i++;
-			j++;
-		}
+		trau_encode_fr(&tf, frame->data);
+		break;
+	case GSM_TCHF_FRAME_EFR:
+		trau_encode_efr(&tf, frame->data);
 		break;
 	default:
 		DEBUGPC(DLMUX, "unsupported message type %d\n",
