diff --git a/openbsc/include/openbsc/bsc_api.h b/openbsc/include/openbsc/bsc_api.h
index a21fb74..a70d765 100644
--- a/openbsc/include/openbsc/bsc_api.h
+++ b/openbsc/include/openbsc/bsc_api.h
@@ -40,7 +40,7 @@
 	 * not implemented AMR5.9 will be used.
 	 */
 	void (*mr_config)(struct gsm_subscriber_connection *conn,
-			  struct gsm48_multi_rate_conf *conf);
+			  uint8_t *mr_ms_lv, uint8_t *mr_bts_lv);
 };
 
 int bsc_api_init(struct gsm_network *network, struct bsc_api *api);
diff --git a/openbsc/include/openbsc/gsm_04_08.h b/openbsc/include/openbsc/gsm_04_08.h
index 3df5fc4..02b2e3b 100644
--- a/openbsc/include/openbsc/gsm_04_08.h
+++ b/openbsc/include/openbsc/gsm_04_08.h
@@ -13,6 +13,7 @@
 struct gsm_network;
 struct gsm_trans;
 struct gsm_subscriber_connection;
+struct amr_multirate_conf;
 
 #define GSM48_ALLOC_SIZE	2048
 #define GSM48_ALLOC_HEADROOM	256
@@ -89,4 +90,6 @@
 void release_security_operation(struct gsm_subscriber_connection *conn);
 void allocate_security_operation(struct gsm_subscriber_connection *conn);
 
+int gsm48_multirate_config(uint8_t *lv, struct amr_multirate_conf *mr, int ms);
+
 #endif
diff --git a/openbsc/include/openbsc/gsm_data_shared.h b/openbsc/include/openbsc/gsm_data_shared.h
index 86bf557..5ff6c20 100644
--- a/openbsc/include/openbsc/gsm_data_shared.h
+++ b/openbsc/include/openbsc/gsm_data_shared.h
@@ -150,8 +150,10 @@
 
 struct amr_mode {
 	uint8_t mode;
-	uint8_t threshold;
-	uint8_t hysteresis;
+	uint8_t threshold_ms;
+	uint8_t hysteresis_ms;
+	uint8_t threshold_bts;
+	uint8_t hysteresis_bts;
 };
 struct amr_multirate_conf {
 	uint8_t gsm48_ie[2];
@@ -207,7 +209,8 @@
 	} encr;
 
 	/* AMR bits */
-	struct gsm48_multi_rate_conf mr_conf;
+	uint8_t mr_ms_lv[7];
+	uint8_t mr_bts_lv[7];
 
 	/* Established data link layer services */
 	uint8_t sapis[8];
@@ -732,6 +735,11 @@
 
 	/* BTS dependencies bit field */
 	uint32_t depends_on[256/(8*4)];
+
+	/* full and half rate multirate config */
+	struct amr_multirate_conf mr_full;
+	struct amr_multirate_conf mr_half;
+
 #endif /* ROLE_BSC */
 	void *role;
 };
diff --git a/openbsc/src/libbsc/abis_rsl.c b/openbsc/src/libbsc/abis_rsl.c
index 41289dd..526b977 100644
--- a/openbsc/src/libbsc/abis_rsl.c
+++ b/openbsc/src/libbsc/abis_rsl.c
@@ -520,8 +520,8 @@
 	msgb_tv_put(msg, RSL_IE_TIMING_ADVANCE, ta);
 
 	if (lchan->tch_mode == GSM48_CMODE_SPEECH_AMR)
-		msgb_tlv_put(msg, RSL_IE_MR_CONFIG, sizeof(lchan->mr_conf),
-			     (uint8_t *) &lchan->mr_conf);
+		msgb_tlv_put(msg, RSL_IE_MR_CONFIG, lchan->mr_bts_lv[0],
+			     lchan->mr_bts_lv + 1);
 
 	msg->dst = lchan->ts->trx->rsl_link;
 
@@ -557,10 +557,11 @@
 			msgb_tlv_put(msg, RSL_IE_ENCR_INFO, rc, encr_info);
 	}
 
-	if (lchan->tch_mode == GSM48_CMODE_SPEECH_AMR) {
-		msgb_tlv_put(msg, RSL_IE_MR_CONFIG, sizeof(lchan->mr_conf),
-			     (uint8_t *) &lchan->mr_conf);
-	}
+	if (lchan->tch_mode == GSM48_CMODE_SPEECH_AMR)
+{
+		msgb_tlv_put(msg, RSL_IE_MR_CONFIG, lchan->mr_bts_lv[0],
+			     lchan->mr_bts_lv + 1);
+}
 
 	msg->dst = lchan->ts->trx->rsl_link;
 
diff --git a/openbsc/src/libbsc/bsc_api.c b/openbsc/src/libbsc/bsc_api.c
index 76ceb2d..78e7c87 100644
--- a/openbsc/src/libbsc/bsc_api.c
+++ b/openbsc/src/libbsc/bsc_api.c
@@ -155,17 +155,31 @@
  * Handle the multirate config
  */
 static void handle_mr_config(struct gsm_subscriber_connection *conn,
-			     struct gsm_lchan *lchan)
+			     struct gsm_lchan *lchan, int full_rate)
 {
 	struct bsc_api *api;
 	api = conn->bts->network->bsc_api;
+	struct amr_multirate_conf *mr;
+	struct gsm48_multi_rate_conf *mr_conf;
 
 	if (api->mr_config)
-		return api->mr_config(conn, &lchan->mr_conf);
+		return api->mr_config(conn, lchan->mr_ms_lv, lchan->mr_bts_lv);
 
-	lchan->mr_conf.ver = 1;
-	lchan->mr_conf.icmi = 1;
-	lchan->mr_conf.m5_90 = 1;
+	if (full_rate)
+		mr = &lchan->ts->trx->bts->mr_full;
+	else
+		mr = &lchan->ts->trx->bts->mr_half;
+
+	mr_conf = (struct gsm48_multi_rate_conf *) mr->gsm48_ie;
+	mr_conf->ver = 1;
+
+	/* default, if no AMR codec defined */
+	if (!mr->gsm48_ie[1]) {
+		mr_conf->icmi = 1;
+		mr_conf->m5_90 = 1;
+	}
+	gsm48_multirate_config(lchan->mr_ms_lv, mr, 1);
+	gsm48_multirate_config(lchan->mr_bts_lv, mr, 0);
 }
 
 /*
@@ -209,7 +223,7 @@
 
 	/* handle AMR correctly */
 	if (chan_mode == GSM48_CMODE_SPEECH_AMR)
-		handle_mr_config(conn, new_lchan);
+		handle_mr_config(conn, new_lchan, full_rate);
 
 	if (rsl_chan_activate_lchan(new_lchan, 0x1, 0) < 0) {
 		LOGP(DHO, LOGL_ERROR, "could not activate channel\n");
@@ -382,7 +396,7 @@
 		LOGP(DMSC, LOGL_NOTICE,
 			"Sending ChanModify for speech %d %d\n", chan_mode, full_rate);
 		if (chan_mode == GSM48_CMODE_SPEECH_AMR)
-			handle_mr_config(conn, conn->lchan);
+			handle_mr_config(conn, conn->lchan, full_rate);
 
 		gsm48_lchan_modify(conn->lchan, chan_mode);
 	}
diff --git a/openbsc/src/libbsc/bsc_vty.c b/openbsc/src/libbsc/bsc_vty.c
index e3eb7cc..9b0f020 100644
--- a/openbsc/src/libbsc/bsc_vty.c
+++ b/openbsc/src/libbsc/bsc_vty.c
@@ -479,6 +479,66 @@
 		config_write_trx_single(vty, trx);
 }
 
+static void config_write_bts_amr(struct vty *vty, struct gsm_bts *bts,
+	struct amr_multirate_conf *mr, int full)
+{
+	struct gsm48_multi_rate_conf *mr_conf;
+	const char *prefix = (full) ? "amr tch-f" : "amr tch-h";
+	int i, num;
+
+	if (!(mr->gsm48_ie[1]))
+		return;
+
+	mr_conf = (struct gsm48_multi_rate_conf *) mr->gsm48_ie;
+
+	num = 0;
+	vty_out(vty, "  %s modes", prefix);
+	for (i = 0; i < ((full) ? 8 : 6); i++) {
+		if ((mr->gsm48_ie[1] & (1 << i))) {
+			vty_out(vty, " %d", i);
+			num++;
+		}
+	}
+	vty_out(vty, "%s", VTY_NEWLINE);
+	if (num > 4)
+		num = 4;
+	if (num > 1) {
+		vty_out(vty, "  %s threshold ms", prefix);
+		for (i = 0; i < num - 1; i++) {
+			vty_out(vty, " %d", mr->mode[i].threshold_ms);
+		}
+		vty_out(vty, "%s", VTY_NEWLINE);
+		vty_out(vty, "  %s hysteresis ms", prefix);
+		for (i = 0; i < num - 1; i++) {
+			vty_out(vty, " %d", mr->mode[i].hysteresis_ms);
+		}
+		vty_out(vty, "%s", VTY_NEWLINE);
+		vty_out(vty, "  %s threshold bts", prefix);
+		for (i = 0; i < num - 1; i++) {
+			vty_out(vty, " %d", mr->mode[i].threshold_bts);
+		}
+		vty_out(vty, "%s", VTY_NEWLINE);
+		vty_out(vty, "  %s hysteresis bts", prefix);
+		for (i = 0; i < num - 1; i++) {
+			vty_out(vty, " %d", mr->mode[i].hysteresis_bts);
+		}
+		vty_out(vty, "%s", VTY_NEWLINE);
+	}
+	vty_out(vty, "  %s start-mode ", prefix);
+	if (mr_conf->icmi) {
+		num = 0;
+		for (i = 0; i < ((full) ? 8 : 6) && num < 4; i++) {
+			if ((mr->gsm48_ie[1] & (1 << i)))
+				num++;
+			if (mr_conf->smod == num - 1) {
+				vty_out(vty, "%d%s", num, VTY_NEWLINE);
+				break;
+			}
+		}
+	} else
+		vty_out(vty, "auto%s", VTY_NEWLINE);
+}
+
 static void config_write_bts_single(struct vty *vty, struct gsm_bts *bts)
 {
 	int i;
@@ -646,6 +706,9 @@
 		vty_out(vty, " amr");
 	vty_out(vty, "%s", VTY_NEWLINE);
 
+	config_write_bts_amr(vty, bts, &bts->mr_full, 1);
+	config_write_bts_amr(vty, bts, &bts->mr_half, 0);
+
 	config_write_bts_gprs(vty, bts);
 
 	if (bts->excl_from_rf_lock)
@@ -2865,6 +2928,288 @@
 	return CMD_SUCCESS;
 }
 
+#define AMR_TEXT "Adaptive Multi Rate settings\n"
+#define AMR_MODE_TEXT "Codec modes to use with AMR codec\n"
+#define AMR_START_TEXT "Initial codec to use with AMR\n" \
+	"Automatically\nFirst codec\nSecond codec\nThird codec\nFourth codec\n"
+#define AMR_TH_TEXT "AMR threshold between codecs\nMS side\nBTS side\n"
+#define AMR_HY_TEXT "AMR hysteresis between codecs\nMS side\nBTS side\n"
+
+static void get_amr_from_arg(struct vty *vty, int argc, const char *argv[], int full)
+{
+	struct gsm_bts *bts = vty->index;
+	struct amr_multirate_conf *mr = (full) ? &bts->mr_full: &bts->mr_half;
+	struct gsm48_multi_rate_conf *mr_conf =
+				(struct gsm48_multi_rate_conf *) mr->gsm48_ie;
+	int i;
+
+	mr->gsm48_ie[1] = 0;
+	for (i = 0; i < argc; i++)
+		mr->gsm48_ie[1] |= 1 << atoi(argv[i]);
+	mr_conf->icmi = 0;
+}
+
+static void get_amr_th_from_arg(struct vty *vty, int argc, const char *argv[], int full)
+{
+	struct gsm_bts *bts = vty->index;
+	struct amr_multirate_conf *mr = (full) ? &bts->mr_full: &bts->mr_half;
+	int i;
+
+	if (argv[0][0]=='m') {
+		for (i = 0; i < argc - 1; i++)
+			mr->mode[i].threshold_ms = atoi(argv[i + 1]);
+	} else {
+		for (i = 0; i < argc - 1; i++)
+			mr->mode[i].threshold_bts = atoi(argv[i + 1]);
+	}
+}
+
+static void get_amr_hy_from_arg(struct vty *vty, int argc, const char *argv[], int full)
+{
+	struct gsm_bts *bts = vty->index;
+	struct amr_multirate_conf *mr = (full) ? &bts->mr_full: &bts->mr_half;
+	int i;
+
+	if (argv[0][0]=='m') {
+		for (i = 0; i < argc - 1; i++)
+			mr->mode[i].hysteresis_ms = atoi(argv[i + 1]);
+	} else {
+		for (i = 0; i < argc - 1; i++)
+			mr->mode[i].hysteresis_bts = atoi(argv[i + 1]);
+	}
+}
+
+static void get_amr_start_from_arg(struct vty *vty, const char *argv[], int full)
+{
+	struct gsm_bts *bts = vty->index;
+	struct amr_multirate_conf *mr = (full) ? &bts->mr_full: &bts->mr_half;
+	struct gsm48_multi_rate_conf *mr_conf =
+				(struct gsm48_multi_rate_conf *) mr->gsm48_ie;
+	int num = 0, i;
+
+	for (i = 0; i < ((full) ? 8 : 6); i++) {
+		if ((mr->gsm48_ie[1] & (1 << i))) {
+			num++;
+		}
+	}
+
+	if (argv[0][0] == 'a' || num == 0)
+		mr_conf->icmi = 0;
+	else {
+		mr_conf->icmi = 1;
+		if (num < atoi(argv[0]))
+			mr_conf->smod = num - 1;
+		else
+			mr_conf->smod = atoi(argv[0]) - 1;
+	}
+}
+
+#define AMR_TCHF_PAR_STR " (0|1|2|3|4|5|6|7)"
+#define AMR_TCHF_HELP_STR "4,75k\n5,15k\n5,90k\n6,70k\n7,40k\n7,95k\n" \
+	"10,2k\n12,2k\n"
+
+#define AMR_TCHH_PAR_STR " (0|1|2|3|4|5)"
+#define AMR_TCHH_HELP_STR "4,75k\n5,15k\n5,90k\n6,70k\n7,40k\n7,95k\n"
+
+#define	AMR_TH_HELP_STR "Threshold between codec 1 and 2\n"
+#define	AMR_HY_HELP_STR "Hysteresis between codec 1 and 2\n"
+
+DEFUN(cfg_bts_amr_fr_modes1, cfg_bts_amr_fr_modes1_cmd,
+	"amr tch-f modes" AMR_TCHF_PAR_STR,
+	AMR_TEXT "Full Rate\n" AMR_MODE_TEXT
+	AMR_TCHF_HELP_STR)
+{
+	get_amr_from_arg(vty, 1, argv, 1);
+	return CMD_SUCCESS;
+}
+
+DEFUN(cfg_bts_amr_fr_modes2, cfg_bts_amr_fr_modes2_cmd,
+	"amr tch-f modes" AMR_TCHF_PAR_STR AMR_TCHF_PAR_STR,
+	AMR_TEXT "Full Rate\n" AMR_MODE_TEXT
+	AMR_TCHF_HELP_STR AMR_TCHF_HELP_STR)
+{
+	get_amr_from_arg(vty, 2, argv, 1);
+	return CMD_SUCCESS;
+}
+
+DEFUN(cfg_bts_amr_fr_modes3, cfg_bts_amr_fr_modes3_cmd,
+	"amr tch-f modes" AMR_TCHF_PAR_STR AMR_TCHF_PAR_STR AMR_TCHF_PAR_STR,
+	AMR_TEXT "Full Rate\n" AMR_MODE_TEXT
+	AMR_TCHF_HELP_STR AMR_TCHF_HELP_STR AMR_TCHF_HELP_STR)
+{
+	get_amr_from_arg(vty, 3, argv, 1);
+	return CMD_SUCCESS;
+}
+
+DEFUN(cfg_bts_amr_fr_modes4, cfg_bts_amr_fr_modes4_cmd,
+	"amr tch-f modes" AMR_TCHF_PAR_STR AMR_TCHF_PAR_STR AMR_TCHF_PAR_STR AMR_TCHF_PAR_STR,
+	AMR_TEXT "Full Rate\n" AMR_MODE_TEXT
+	AMR_TCHF_HELP_STR AMR_TCHF_HELP_STR AMR_TCHF_HELP_STR AMR_TCHF_HELP_STR)
+{
+	get_amr_from_arg(vty, 4, argv, 1);
+	return CMD_SUCCESS;
+}
+
+DEFUN(cfg_bts_amr_fr_start_mode, cfg_bts_amr_fr_start_mode_cmd,
+	"amr tch-f start-mode (auto|1|2|3|4)",
+	AMR_TEXT "Full Rate\n" AMR_START_TEXT)
+{
+	get_amr_start_from_arg(vty, argv, 1);
+	return CMD_SUCCESS;
+}
+
+DEFUN(cfg_bts_amr_fr_thres1, cfg_bts_amr_fr_thres1_cmd,
+	"amr tch-f threshold (ms|bts) <0-63>",
+	AMR_TEXT "Full Rate\n" AMR_TH_TEXT
+	AMR_TH_HELP_STR)
+{
+	get_amr_th_from_arg(vty, 2, argv, 1);
+	return CMD_SUCCESS;
+}
+
+DEFUN(cfg_bts_amr_fr_thres2, cfg_bts_amr_fr_thres2_cmd,
+	"amr tch-f threshold (ms|bts) <0-63> <0-63>",
+	AMR_TEXT "Full Rate\n" AMR_TH_TEXT
+	AMR_TH_HELP_STR AMR_TH_HELP_STR)
+{
+	get_amr_th_from_arg(vty, 3, argv, 1);
+	return CMD_SUCCESS;
+}
+
+DEFUN(cfg_bts_amr_fr_thres3, cfg_bts_amr_fr_thres3_cmd,
+	"amr tch-f threshold (ms|bts) <0-63> <0-63> <0-63>",
+	AMR_TEXT "Full Rate\n" AMR_TH_TEXT
+	AMR_TH_HELP_STR AMR_TH_HELP_STR AMR_TH_HELP_STR)
+{
+	get_amr_th_from_arg(vty, 4, argv, 1);
+	return CMD_SUCCESS;
+}
+
+DEFUN(cfg_bts_amr_fr_hyst1, cfg_bts_amr_fr_hyst1_cmd,
+	"amr tch-f hysteresis (ms|bts) <0-15>",
+	AMR_TEXT "Full Rate\n" AMR_HY_TEXT
+	AMR_HY_HELP_STR)
+{
+	get_amr_hy_from_arg(vty, 2, argv, 1);
+	return CMD_SUCCESS;
+}
+
+DEFUN(cfg_bts_amr_fr_hyst2, cfg_bts_amr_fr_hyst2_cmd,
+	"amr tch-f hysteresis (ms|bts) <0-15> <0-15>",
+	AMR_TEXT "Full Rate\n" AMR_HY_TEXT
+	AMR_HY_HELP_STR AMR_HY_HELP_STR)
+{
+	get_amr_hy_from_arg(vty, 3, argv, 1);
+	return CMD_SUCCESS;
+}
+
+DEFUN(cfg_bts_amr_fr_hyst3, cfg_bts_amr_fr_hyst3_cmd,
+	"amr tch-f hysteresis (ms|bts) <0-15> <0-15> <0-15>",
+	AMR_TEXT "Full Rate\n" AMR_HY_TEXT
+	AMR_HY_HELP_STR AMR_HY_HELP_STR AMR_HY_HELP_STR)
+{
+	get_amr_hy_from_arg(vty, 4, argv, 1);
+	return CMD_SUCCESS;
+}
+
+DEFUN(cfg_bts_amr_hr_modes1, cfg_bts_amr_hr_modes1_cmd,
+	"amr tch-h modes" AMR_TCHH_PAR_STR,
+	AMR_TEXT "Half Rate\n" AMR_MODE_TEXT
+	AMR_TCHH_HELP_STR)
+{
+	get_amr_from_arg(vty, 1, argv, 0);
+	return CMD_SUCCESS;
+}
+
+DEFUN(cfg_bts_amr_hr_modes2, cfg_bts_amr_hr_modes2_cmd,
+	"amr tch-h modes" AMR_TCHH_PAR_STR AMR_TCHH_PAR_STR,
+	AMR_TEXT "Half Rate\n" AMR_MODE_TEXT
+	AMR_TCHH_HELP_STR AMR_TCHH_HELP_STR)
+{
+	get_amr_from_arg(vty, 2, argv, 0);
+	return CMD_SUCCESS;
+}
+
+DEFUN(cfg_bts_amr_hr_modes3, cfg_bts_amr_hr_modes3_cmd,
+	"amr tch-h modes" AMR_TCHH_PAR_STR AMR_TCHH_PAR_STR AMR_TCHH_PAR_STR,
+	AMR_TEXT "Half Rate\n" AMR_MODE_TEXT
+	AMR_TCHH_HELP_STR AMR_TCHH_HELP_STR AMR_TCHH_HELP_STR)
+{
+	get_amr_from_arg(vty, 3, argv, 0);
+	return CMD_SUCCESS;
+}
+
+DEFUN(cfg_bts_amr_hr_modes4, cfg_bts_amr_hr_modes4_cmd,
+	"amr tch-h modes" AMR_TCHH_PAR_STR AMR_TCHH_PAR_STR AMR_TCHH_PAR_STR AMR_TCHH_PAR_STR,
+	AMR_TEXT "Half Rate\n" AMR_MODE_TEXT
+	AMR_TCHH_HELP_STR AMR_TCHH_HELP_STR AMR_TCHH_HELP_STR AMR_TCHH_HELP_STR)
+{
+	get_amr_from_arg(vty, 4, argv, 0);
+	return CMD_SUCCESS;
+}
+
+DEFUN(cfg_bts_amr_hr_start_mode, cfg_bts_amr_hr_start_mode_cmd,
+	"amr tch-h start-mode (auto|1|2|3|4)",
+	AMR_TEXT "Half Rate\n" AMR_START_TEXT)
+{
+	get_amr_start_from_arg(vty, argv, 0);
+	return CMD_SUCCESS;
+}
+
+DEFUN(cfg_bts_amr_hr_thres1, cfg_bts_amr_hr_thres1_cmd,
+	"amr tch-h threshold (ms|bts) <0-63>",
+	AMR_TEXT "Half Rate\n" AMR_TH_TEXT
+	AMR_TH_HELP_STR)
+{
+	get_amr_th_from_arg(vty, 2, argv, 0);
+	return CMD_SUCCESS;
+}
+
+DEFUN(cfg_bts_amr_hr_thres2, cfg_bts_amr_hr_thres2_cmd,
+	"amr tch-h threshold (ms|bts) <0-63> <0-63>",
+	AMR_TEXT "Half Rate\n" AMR_TH_TEXT
+	AMR_TH_HELP_STR AMR_TH_HELP_STR)
+{
+	get_amr_th_from_arg(vty, 3, argv, 0);
+	return CMD_SUCCESS;
+}
+
+DEFUN(cfg_bts_amr_hr_thres3, cfg_bts_amr_hr_thres3_cmd,
+	"amr tch-h threshold (ms|bts) <0-63> <0-63> <0-63>",
+	AMR_TEXT "Half Rate\n" AMR_TH_TEXT
+	AMR_TH_HELP_STR AMR_TH_HELP_STR AMR_TH_HELP_STR)
+{
+	get_amr_th_from_arg(vty, 4, argv, 0);
+	return CMD_SUCCESS;
+}
+
+DEFUN(cfg_bts_amr_hr_hyst1, cfg_bts_amr_hr_hyst1_cmd,
+	"amr tch-h hysteresis (ms|bts) <0-15>",
+	AMR_TEXT "Half Rate\n" AMR_HY_TEXT
+	AMR_HY_HELP_STR)
+{
+	get_amr_hy_from_arg(vty, 2, argv, 0);
+	return CMD_SUCCESS;
+}
+
+DEFUN(cfg_bts_amr_hr_hyst2, cfg_bts_amr_hr_hyst2_cmd,
+	"amr tch-h hysteresis (ms|bts) <0-15> <0-15>",
+	AMR_TEXT "Half Rate\n" AMR_HY_TEXT
+	AMR_HY_HELP_STR AMR_HY_HELP_STR)
+{
+	get_amr_hy_from_arg(vty, 3, argv, 0);
+	return CMD_SUCCESS;
+}
+
+DEFUN(cfg_bts_amr_hr_hyst3, cfg_bts_amr_hr_hyst3_cmd,
+	"amr tch-h hysteresis (ms|bts) <0-15> <0-15> <0-15>",
+	AMR_TEXT "Half Rate\n" AMR_HY_TEXT
+	AMR_HY_HELP_STR AMR_HY_HELP_STR AMR_HY_HELP_STR)
+{
+	get_amr_hy_from_arg(vty, 4, argv, 0);
+	return CMD_SUCCESS;
+}
+
 #define TRX_TEXT "Radio Transceiver\n"
 
 /* per TRX configuration */
@@ -3511,6 +3856,28 @@
 	install_element(BTS_NODE, &cfg_bts_codec4_cmd);
 	install_element(BTS_NODE, &cfg_bts_depends_on_cmd);
 	install_element(BTS_NODE, &cfg_bts_no_depends_on_cmd);
+	install_element(BTS_NODE, &cfg_bts_amr_fr_modes1_cmd);
+	install_element(BTS_NODE, &cfg_bts_amr_fr_modes2_cmd);
+	install_element(BTS_NODE, &cfg_bts_amr_fr_modes3_cmd);
+	install_element(BTS_NODE, &cfg_bts_amr_fr_modes4_cmd);
+	install_element(BTS_NODE, &cfg_bts_amr_fr_thres1_cmd);
+	install_element(BTS_NODE, &cfg_bts_amr_fr_thres2_cmd);
+	install_element(BTS_NODE, &cfg_bts_amr_fr_thres3_cmd);
+	install_element(BTS_NODE, &cfg_bts_amr_fr_hyst1_cmd);
+	install_element(BTS_NODE, &cfg_bts_amr_fr_hyst2_cmd);
+	install_element(BTS_NODE, &cfg_bts_amr_fr_hyst3_cmd);
+	install_element(BTS_NODE, &cfg_bts_amr_fr_start_mode_cmd);
+	install_element(BTS_NODE, &cfg_bts_amr_hr_modes1_cmd);
+	install_element(BTS_NODE, &cfg_bts_amr_hr_modes2_cmd);
+	install_element(BTS_NODE, &cfg_bts_amr_hr_modes3_cmd);
+	install_element(BTS_NODE, &cfg_bts_amr_hr_modes4_cmd);
+	install_element(BTS_NODE, &cfg_bts_amr_hr_thres1_cmd);
+	install_element(BTS_NODE, &cfg_bts_amr_hr_thres2_cmd);
+	install_element(BTS_NODE, &cfg_bts_amr_hr_thres3_cmd);
+	install_element(BTS_NODE, &cfg_bts_amr_hr_hyst1_cmd);
+	install_element(BTS_NODE, &cfg_bts_amr_hr_hyst2_cmd);
+	install_element(BTS_NODE, &cfg_bts_amr_hr_hyst3_cmd);
+	install_element(BTS_NODE, &cfg_bts_amr_hr_start_mode_cmd);
 
 	install_element(BTS_NODE, &cfg_trx_cmd);
 	install_node(&trx_node, dummy_config_write);
diff --git a/openbsc/src/libbsc/chan_alloc.c b/openbsc/src/libbsc/chan_alloc.c
index d8f9087..de9da81 100644
--- a/openbsc/src/libbsc/chan_alloc.c
+++ b/openbsc/src/libbsc/chan_alloc.c
@@ -197,8 +197,8 @@
 		memset(lchan->sapis, 0, ARRAY_SIZE(lchan->sapis));
 
 		/* clear multi rate config */
-		memset(&lchan->mr_conf, 0, sizeof(lchan->mr_conf));
-
+		memset(&lchan->mr_ms_lv, 0, sizeof(lchan->mr_ms_lv));
+		memset(&lchan->mr_bts_lv, 0, sizeof(lchan->mr_bts_lv));
 		lchan->broken_reason = "";
 	} else {
 		struct challoc_signal_data sig;
diff --git a/openbsc/src/libbsc/gsm_04_08_utils.c b/openbsc/src/libbsc/gsm_04_08_utils.c
index fe6f2ab..ef82555 100644
--- a/openbsc/src/libbsc/gsm_04_08_utils.c
+++ b/openbsc/src/libbsc/gsm_04_08_utils.c
@@ -357,6 +357,60 @@
 	}
 }
 
+int gsm48_multirate_config(uint8_t *lv, struct amr_multirate_conf *mr, int ms)
+{
+	int num = 0, i;
+
+	for (i = 0; i < 8; i++) {
+		if (((mr->gsm48_ie[1] >> i) & 1))
+			num++;
+	}
+	if (num > 4) {
+		LOGP(DRR, LOGL_ERROR, "BUG: Using multirate codec with too "
+				"many modes in config.\n");
+		num = 4;
+	}
+	if (num < 1) {
+		LOGP(DRR, LOGL_ERROR, "BUG: Using multirate codec with no "
+				"mode in config.\n");
+		num = 1;
+	}
+
+	lv[0] = (num == 1) ? 2 : (num + 2);
+	memcpy(lv + 1, mr->gsm48_ie, 2);
+	if (num == 1)
+		return 0;
+	if (ms) {
+		lv[3] = mr->mode[0].threshold_ms & 0x3f;
+		lv[4] = mr->mode[0].hysteresis_ms << 4;
+		if (num == 2)
+			return 0;
+		lv[4] |= (mr->mode[1].threshold_ms & 0x3f) >> 2;
+		lv[5] = mr->mode[1].threshold_ms << 6;
+		lv[5] |= (mr->mode[1].hysteresis_ms & 0x0f) << 2;
+		if (num == 3)
+			return 0;
+		lv[5] |= (mr->mode[2].threshold_ms & 0x3f) >> 4;
+		lv[6] = mr->mode[2].threshold_ms << 4;
+		lv[6] |= mr->mode[2].hysteresis_ms & 0x0f;
+	} else {
+		lv[3] = mr->mode[0].threshold_bts & 0x3f;
+		lv[4] = mr->mode[0].hysteresis_bts << 4;
+		if (num == 2)
+			return 0;
+		lv[4] |= (mr->mode[1].threshold_bts & 0x3f) >> 2;
+		lv[5] = mr->mode[1].threshold_bts << 6;
+		lv[5] |= (mr->mode[1].hysteresis_bts & 0x0f) << 2;
+		if (num == 3)
+			return 0;
+		lv[5] |= (mr->mode[2].threshold_bts & 0x3f) >> 4;
+		lv[6] = mr->mode[2].threshold_bts << 4;
+		lv[6] |= mr->mode[2].hysteresis_bts & 0x0f;
+	}
+
+	return 0;
+}
+
 #define GSM48_HOCMD_CCHDESC_LEN	16
 
 /* Chapter 9.1.15: Handover Command */
@@ -435,17 +489,9 @@
 	}
 
 	/* in case of multi rate we need to attach a config */
-	if (lchan->tch_mode == GSM48_CMODE_SPEECH_AMR) {
-		if (lchan->mr_conf.ver == 0) {
-			LOGP(DRR, LOGL_ERROR, "BUG: Using multirate codec "
-				"without multirate config.\n");
-		} else {
-			uint8_t *data = msgb_put(msg, 4);
-			data[0] = GSM48_IE_MUL_RATE_CFG;
-			data[1] = 0x2;
-			memcpy(&data[2], &lchan->mr_conf, 2);
-		}
-	}
+	if (lchan->tch_mode == GSM48_CMODE_SPEECH_AMR)
+		msgb_tlv_put(msg, GSM48_IE_MUL_RATE_CFG, lchan->mr_ms_lv[0],
+			lchan->mr_ms_lv + 1);
 
 	return gsm48_sendmsg(msg);
 }
@@ -471,17 +517,9 @@
 	cmm->mode = mode;
 
 	/* in case of multi rate we need to attach a config */
-	if (lchan->tch_mode == GSM48_CMODE_SPEECH_AMR) {
-		if (lchan->mr_conf.ver == 0) {
-			LOGP(DRR, LOGL_ERROR, "BUG: Using multirate codec "
-				"without multirate config.\n");
-		} else {
-			uint8_t *data = msgb_put(msg, 4);
-			data[0] = GSM48_IE_MUL_RATE_CFG;
-			data[1] = 0x2;
-			memcpy(&data[2], &lchan->mr_conf, 2);
-		}
-	}
+	if (lchan->tch_mode == GSM48_CMODE_SPEECH_AMR)
+		msgb_tlv_put(msg, GSM48_IE_MUL_RATE_CFG, lchan->mr_ms_lv[0],
+			lchan->mr_ms_lv + 1);
 
 	return gsm48_sendmsg(msg);
 }
diff --git a/openbsc/src/libbsc/handover_logic.c b/openbsc/src/libbsc/handover_logic.c
index ff6e993..2b8c386 100644
--- a/openbsc/src/libbsc/handover_logic.c
+++ b/openbsc/src/libbsc/handover_logic.c
@@ -133,7 +133,8 @@
 	new_lchan->bs_power = old_lchan->bs_power;
 	new_lchan->rsl_cmode = old_lchan->rsl_cmode;
 	new_lchan->tch_mode = old_lchan->tch_mode;
-	new_lchan->mr_conf = old_lchan->mr_conf;
+	memcpy(&new_lchan->mr_ms_lv, &old_lchan->mr_ms_lv, ARRAY_SIZE(new_lchan->mr_ms_lv));
+	memcpy(&new_lchan->mr_bts_lv, &old_lchan->mr_bts_lv, ARRAY_SIZE(new_lchan->mr_bts_lv));
 
 	new_lchan->conn = old_lchan->conn;
 	new_lchan->conn->ho_lchan = new_lchan;
