diff --git a/lib/decoding/osmocom/coding/gsm0503_mapping.c b/lib/decoding/osmocom/coding/gsm0503_mapping.c
new file mode 100644
index 0000000..45275bf
--- /dev/null
+++ b/lib/decoding/osmocom/coding/gsm0503_mapping.c
@@ -0,0 +1,291 @@
+/*
+ * (C) 2013 by Andreas Eversberg <jolly@eversberg.eu>
+ * (C) 2016 by Tom Tsou <tom.tsou@ettus.com>
+ *
+ * All Rights Reserved
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include <stdint.h>
+#include <string.h>
+
+#include <osmocom/core/bits.h>
+#include "gsm0503_mapping.h"
+
+void gsm0503_xcch_burst_unmap(sbit_t *iB, const sbit_t *eB,
+	sbit_t *hl, sbit_t *hn)
+{
+	memcpy(iB,      eB,      57);
+	memcpy(iB + 57, eB + 59, 57);
+
+	if (hl)
+		*hl = eB[57];
+
+	if (hn)
+		*hn = eB[58];
+}
+
+void gsm0503_xcch_burst_map(ubit_t *iB, ubit_t *eB, const ubit_t *hl,
+	const ubit_t *hn)
+{
+	memcpy(eB,      iB,      57);
+	memcpy(eB + 59, iB + 57, 57);
+
+	if (hl)
+		eB[57] = *hl;
+	if (hn)
+		eB[58] = *hn;
+}
+
+void gsm0503_tch_burst_unmap(sbit_t *iB, sbit_t *eB, sbit_t *h, int odd)
+{
+	int i;
+
+	/* brainfuck: only copy even or odd bits */
+	if (iB) {
+		for (i = odd; i < 57; i += 2)
+			iB[i] = eB[i];
+		for (i = 58 - odd; i < 114; i += 2)
+			iB[i] = eB[i + 2];
+	}
+
+	if (h) {
+		if (!odd)
+			*h = eB[58];
+		else
+			*h = eB[57];
+	}
+}
+
+void gsm0503_tch_burst_map(ubit_t *iB, ubit_t *eB, const ubit_t *h, int odd)
+{
+	int i;
+
+	/* brainfuck: only copy even or odd bits */
+	if (eB) {
+		for (i = odd; i < 57; i += 2)
+			eB[i] = iB[i];
+		for (i = 58 - odd; i < 114; i += 2)
+			eB[i + 2] = iB[i];
+	}
+
+	if (h) {
+		if (!odd)
+			eB[58] = *h;
+		else
+			eB[57] = *h;
+	}
+}
+
+void gsm0503_mcs5_dl_burst_map(const ubit_t *di, ubit_t *eB,
+	const ubit_t *hi, const ubit_t *up, int B)
+{
+	int j;
+	int q[8] = { 0, 0, 0, 0, 0, 0, 0, 0, };
+
+	for (j = 0; j < 156; j++)
+		eB[j] = di[312 * B + j];
+	for (j = 156; j < 168; j++)
+		eB[j] = hi[25 * B + j - 156];
+	for (j = 168; j < 174; j++)
+		eB[j] = up[9 * B + j - 168];
+	for (j = 174; j < 176; j++)
+		eB[j] = q[2 * B + j - 174];
+	for (j = 176; j < 179; j++)
+		eB[j] = up[9 * B + j - 170];
+	for (j = 179; j < 192; j++)
+		eB[j] = hi[25 * B + j - 167];
+	for (j = 192; j < 348; j++)
+		eB[j] = di[312 * B + j - 36];
+}
+
+void gsm0503_mcs5_dl_burst_unmap(sbit_t *di, const sbit_t *eB,
+	sbit_t *hi, sbit_t *up, int B)
+{
+	int j;
+
+	for (j = 0; j < 156; j++)
+		di[312 * B + j] = eB[j];
+	for (j = 156; j < 168; j++)
+		hi[25 * B + j - 156] = eB[j];
+	for (j = 168; j < 174; j++)
+		up[9 * B + j - 168] = eB[j];
+
+	for (j = 176; j < 179; j++)
+		up[9 * B + j - 170] = eB[j];
+	for (j = 179; j < 192; j++)
+		hi[25 * B + j - 167] = eB[j];
+	for (j = 192; j < 348; j++)
+		di[312 * B + j - 36] = eB[j];
+}
+
+void gsm0503_mcs5_ul_burst_map(const ubit_t *di, ubit_t *eB,
+	const ubit_t *hi, int B)
+{
+	int j;
+
+	for (j = 0; j < 156; j++)
+		eB[j] = di[312 * B + j];
+	for (j = 156; j < 174; j++)
+		eB[j] = hi[34 * B + j - 156];
+	for (j = 174; j < 176; j++)
+		eB[j] = 0;
+	for (j = 176; j < 192; j++)
+		eB[j] = hi[34 * B + j - 158];
+	for (j = 192; j < 348; j++)
+		eB[j] = di[312 * B + j - 36];
+}
+
+void gsm0503_mcs5_ul_burst_unmap(sbit_t *di, const sbit_t *eB,
+	sbit_t *hi, int B)
+{
+	int j;
+
+	for (j = 0; j < 156; j++)
+		di[312 * B + j] = eB[j];
+	for (j = 156; j < 174; j++)
+		hi[34 * B + j - 156] = eB[j];
+	for (j = 176; j < 192; j++)
+		hi[34 * B + j - 158] = eB[j];
+	for (j = 192; j < 348; j++)
+		di[312 * B + j - 36] = eB[j];
+}
+
+void gsm0503_mcs7_dl_burst_map(const ubit_t *di, ubit_t *eB,
+	const ubit_t *hi, const ubit_t *up, int B)
+{
+	int j;
+	int q[8] = { 1, 1, 1, 0, 0, 1, 1, 1, };
+
+	for (j = 0; j < 153; j++)
+		eB[j] = di[306 * B + j];
+	for (j = 153; j < 168; j++)
+		eB[j] = hi[31 * B + j - 153];
+	for (j = 168; j < 174; j++)
+		eB[j] = up[9 * B + j - 168];
+	for (j = 174; j < 176; j++)
+		eB[j] = q[2 * B + j - 174];
+	for (j = 176; j < 179; j++)
+		eB[j] = up[9 * B + j - 170];
+	for (j = 179; j < 195; j++)
+		eB[j] = hi[31 * B + j - 164];
+	for (j = 195; j < 348; j++)
+		eB[j] = di[306 * B + j - 42];
+}
+
+void gsm0503_mcs7_dl_burst_unmap(sbit_t *di, const sbit_t *eB,
+	sbit_t *hi, sbit_t *up, int B)
+{
+	int j;
+
+	for (j = 0; j < 153; j++)
+		di[306 * B + j] = eB[j];
+	for (j = 153; j < 168; j++)
+		hi[31 * B + j - 153] = eB[j];
+	for (j = 168; j < 174; j++)
+		up[9 * B + j - 168] = eB[j];
+
+	for (j = 176; j < 179; j++)
+		up[9 * B + j - 170] = eB[j];
+	for (j = 179; j < 195; j++)
+		hi[31 * B + j - 164] = eB[j];
+	for (j = 195; j < 348; j++)
+		di[306 * B + j - 42] = eB[j];
+}
+
+void gsm0503_mcs7_ul_burst_map(const ubit_t *di, ubit_t *eB,
+	const ubit_t *hi, int B)
+{
+	int j;
+	int q[8] = { 1, 1, 1, 0, 0, 1, 1, 1, };
+
+	for (j = 0; j < 153; j++)
+		eB[j] = di[306 * B + j];
+	for (j = 153; j < 174; j++)
+		eB[j] = hi[40 * B + j - 153];
+	for (j = 174; j < 176; j++)
+		eB[j] = q[2 * B + j - 174];
+	for (j = 176; j < 195; j++)
+		eB[j] = hi[40 * B + j - 155];
+	for (j = 195; j < 348; j++)
+		eB[j] = di[306 * B + j - 42];
+}
+
+void gsm0503_mcs7_ul_burst_unmap(sbit_t *di, const sbit_t *eB,
+	sbit_t *hi, int B)
+{
+	int j;
+
+	for (j = 0; j < 153; j++)
+		di[306 * B + j] = eB[j];
+	for (j = 153; j < 174; j++)
+		hi[40 * B + j - 153] = eB[j];
+
+	for (j = 176; j < 195; j++)
+		hi[40 * B + j - 155] = eB[j];
+	for (j = 195; j < 348; j++)
+		di[306 * B + j - 42] = eB[j];
+}
+
+void gsm0503_mcs5_burst_swap(sbit_t *eB)
+{
+	sbit_t t[14];
+
+	t[0]  = eB[155];
+	t[1]  = eB[158];
+	t[2]  = eB[161];
+	t[3]  = eB[164];
+	t[4]  = eB[167];
+	t[5]  = eB[170];
+	t[6]  = eB[173];
+	t[7]  = eB[195];
+	t[8]  = eB[196];
+	t[9]  = eB[198];
+	t[10] = eB[199];
+	t[11] = eB[201];
+	t[12] = eB[202];
+	t[13] = eB[204];
+
+	eB[155] = eB[142];
+	eB[158] = eB[144];
+	eB[161] = eB[145];
+	eB[164] = eB[147];
+	eB[167] = eB[148];
+	eB[170] = eB[150];
+	eB[173] = eB[151];
+	eB[195] = eB[176];
+	eB[196] = eB[179];
+	eB[198] = eB[182];
+	eB[199] = eB[185];
+	eB[201] = eB[188];
+	eB[202] = eB[191];
+	eB[204] = eB[194];
+
+	eB[142] = t[0];
+	eB[144] = t[1];
+	eB[145] = t[2];
+	eB[147] = t[3];
+	eB[148] = t[4];
+	eB[150] = t[5];
+	eB[151] = t[6];
+	eB[176] = t[7];
+	eB[179] = t[8];
+	eB[182] = t[9];
+	eB[185] = t[10];
+	eB[188] = t[11];
+	eB[191] = t[12];
+	eB[194] = t[13];
+}
