diff --git a/src/libosmo-mgcp/mgcp_vty.c b/src/libosmo-mgcp/mgcp_vty.c
index a48e205..aaa0429 100644
--- a/src/libosmo-mgcp/mgcp_vty.c
+++ b/src/libosmo-mgcp/mgcp_vty.c
@@ -21,12 +21,11 @@
  *
  */
 
-
 #include <osmocom/core/talloc.h>
-
-#include <osmocom/legacy_mgcp/mgcp.h>
-#include <osmocom/legacy_mgcp/mgcp_internal.h>
-#include <osmocom/legacy_mgcp/vty.h>
+#include <osmocom/mgcp/mgcp.h>
+#include <osmocom/mgcp/mgcp_internal.h>
+#include <osmocom/mgcp/vty.h>
+#include <osmocom/mgcp/mgcp_conn.h>
 
 #include <string.h>
 
@@ -48,9 +47,6 @@
 	return trunk;
 }
 
-/*
- * vty code for mgcp below
- */
 struct cmd_node mgcp_node = {
 	MGCP_NODE,
 	"%s(config-mgcp)# ",
@@ -68,26 +64,15 @@
 	vty_out(vty, "mgcp%s", VTY_NEWLINE);
 	if (g_cfg->local_ip)
 		vty_out(vty, "  local ip %s%s", g_cfg->local_ip, VTY_NEWLINE);
-	if (g_cfg->bts_ip && strlen(g_cfg->bts_ip) != 0)
-		vty_out(vty, "  bts ip %s%s", g_cfg->bts_ip, VTY_NEWLINE);
 	vty_out(vty, "  bind ip %s%s", g_cfg->source_addr, VTY_NEWLINE);
 	vty_out(vty, "  bind port %u%s", g_cfg->source_port, VTY_NEWLINE);
+	vty_out(vty, "  rtp net-range %u %u%s",
+		g_cfg->net_ports.range_start, g_cfg->net_ports.range_end,
+		VTY_NEWLINE);
 
-	if (g_cfg->bts_ports.mode == PORT_ALLOC_STATIC)
-		vty_out(vty, "  rtp bts-base %u%s", g_cfg->bts_ports.base_port, VTY_NEWLINE);
-	else
-		vty_out(vty, "  rtp bts-range %u %u%s",
-			g_cfg->bts_ports.range_start, g_cfg->bts_ports.range_end, VTY_NEWLINE);
-	if (g_cfg->bts_ports.bind_addr)
-		vty_out(vty, "  rtp bts-bind-ip %s%s", g_cfg->bts_ports.bind_addr, VTY_NEWLINE);
-
-	if (g_cfg->net_ports.mode == PORT_ALLOC_STATIC)
-		vty_out(vty, "  rtp net-base %u%s", g_cfg->net_ports.base_port, VTY_NEWLINE);
-	else
-		vty_out(vty, "  rtp net-range %u %u%s",
-			g_cfg->net_ports.range_start, g_cfg->net_ports.range_end, VTY_NEWLINE);
 	if (g_cfg->net_ports.bind_addr)
-		vty_out(vty, "  rtp net-bind-ip %s%s", g_cfg->net_ports.bind_addr, VTY_NEWLINE);
+		vty_out(vty, "  rtp net-bind-ip %s%s",
+			g_cfg->net_ports.bind_addr, VTY_NEWLINE);
 
 	vty_out(vty, "  rtp ip-dscp %d%s", g_cfg->endp_dscp, VTY_NEWLINE);
 	if (g_cfg->trunk.keepalive_interval == MGCP_KEEPALIVE_ONCE)
@@ -102,11 +87,14 @@
 		vty_out(vty, "  rtcp-omit%s", VTY_NEWLINE);
 	else
 		vty_out(vty, "  no rtcp-omit%s", VTY_NEWLINE);
-	if (g_cfg->trunk.force_constant_ssrc || g_cfg->trunk.force_aligned_timing) {
+	if (g_cfg->trunk.force_constant_ssrc
+	    || g_cfg->trunk.force_aligned_timing) {
 		vty_out(vty, "  %srtp-patch ssrc%s",
-			g_cfg->trunk.force_constant_ssrc ? "" : "no ", VTY_NEWLINE);
+			g_cfg->trunk.force_constant_ssrc ? "" : "no ",
+			VTY_NEWLINE);
 		vty_out(vty, "  %srtp-patch timestamp%s",
-			g_cfg->trunk.force_aligned_timing ? "" : "no ", VTY_NEWLINE);
+			g_cfg->trunk.force_aligned_timing ? "" : "no ",
+			VTY_NEWLINE);
 	} else
 		vty_out(vty, "  no rtp-patch%s", VTY_NEWLINE);
 	if (g_cfg->trunk.audio_payload != -1)
@@ -122,23 +110,17 @@
 		g_cfg->trunk.audio_send_ptime ? "" : "no ", VTY_NEWLINE);
 	vty_out(vty, "  %ssdp audio-payload send-name%s",
 		g_cfg->trunk.audio_send_name ? "" : "no ", VTY_NEWLINE);
-	vty_out(vty, "  loop %u%s", !!g_cfg->trunk.audio_loop, VTY_NEWLINE);
-	vty_out(vty, "  number endpoints %u%s", g_cfg->trunk.number_endpoints - 1, VTY_NEWLINE);
+	vty_out(vty, "  loop %u%s", ! !g_cfg->trunk.audio_loop, VTY_NEWLINE);
+	vty_out(vty, "  number endpoints %u%s",
+		g_cfg->trunk.number_endpoints - 1, VTY_NEWLINE);
 	vty_out(vty, "  %sallow-transcoding%s",
 		g_cfg->trunk.no_audio_transcoding ? "no " : "", VTY_NEWLINE);
 	if (g_cfg->call_agent_addr)
-		vty_out(vty, "  call-agent ip %s%s", g_cfg->call_agent_addr, VTY_NEWLINE);
-	if (g_cfg->transcoder_ip)
-		vty_out(vty, "  transcoder-mgw %s%s", g_cfg->transcoder_ip, VTY_NEWLINE);
-
-	if (g_cfg->transcoder_ports.mode == PORT_ALLOC_STATIC)
-		vty_out(vty, "  rtp transcoder-base %u%s", g_cfg->transcoder_ports.base_port, VTY_NEWLINE);
-	else
-		vty_out(vty, "  rtp transcoder-range %u %u%s",
-			g_cfg->transcoder_ports.range_start, g_cfg->transcoder_ports.range_end, VTY_NEWLINE);
-	if (g_cfg->bts_force_ptime > 0)
-		vty_out(vty, "  rtp force-ptime %d%s", g_cfg->bts_force_ptime, VTY_NEWLINE);
-	vty_out(vty, "  transcoder-remote-base %u%s", g_cfg->transcoder_remote_base, VTY_NEWLINE);
+		vty_out(vty, "  call-agent ip %s%s", g_cfg->call_agent_addr,
+			VTY_NEWLINE);
+	if (g_cfg->force_ptime > 0)
+		vty_out(vty, "  rtp force-ptime %d%s", g_cfg->force_ptime,
+			VTY_NEWLINE);
 
 	switch (g_cfg->osmux) {
 	case OSMUX_USAGE_ON:
@@ -167,13 +149,12 @@
 	return CMD_SUCCESS;
 }
 
-static void dump_rtp_end(const char *end_name, struct vty *vty,
-			struct mgcp_rtp_state *state, struct mgcp_rtp_end *end)
+static void dump_rtp_end(struct vty *vty, struct mgcp_rtp_state *state,
+			 struct mgcp_rtp_end *end)
 {
 	struct mgcp_rtp_codec *codec = &end->codec;
 
 	vty_out(vty,
-		"  %s%s"
 		"   Timestamp Errs: %d->%d%s"
 		"   Dropped Packets: %d%s"
 		"   Payload Type: %d Rate: %u Channels: %d %s"
@@ -181,20 +162,22 @@
 		"   FPP: %d Packet Duration: %u%s"
 		"   FMTP-Extra: %s Audio-Name: %s Sub-Type: %s%s"
 		"   Output-Enabled: %d Force-PTIME: %d%s",
-		end_name, VTY_NEWLINE,
 		state->in_stream.err_ts_counter,
 		state->out_stream.err_ts_counter, VTY_NEWLINE,
 		end->dropped_packets, VTY_NEWLINE,
 		codec->payload_type, codec->rate, codec->channels, VTY_NEWLINE,
-		codec->frame_duration_num, codec->frame_duration_den, VTY_NEWLINE,
-		end->frames_per_packet, end->packet_duration_ms, VTY_NEWLINE,
-		end->fmtp_extra, codec->audio_name, codec->subtype_name, VTY_NEWLINE,
-		end->output_enabled, end->force_output_ptime, VTY_NEWLINE);
+		codec->frame_duration_num, codec->frame_duration_den,
+		VTY_NEWLINE, end->frames_per_packet, end->packet_duration_ms,
+		VTY_NEWLINE, end->fmtp_extra, codec->audio_name,
+		codec->subtype_name, VTY_NEWLINE, end->output_enabled,
+		end->force_output_ptime, VTY_NEWLINE);
 }
 
-static void dump_trunk(struct vty *vty, struct mgcp_trunk_config *cfg, int verbose)
+static void dump_trunk(struct vty *vty, struct mgcp_trunk_config *cfg,
+		       int verbose)
 {
 	int i;
+	struct mgcp_conn *conn;
 
 	vty_out(vty, "%s trunk nr %d with %d endpoints:%s",
 		cfg->trunk_type == MGCP_TRUNK_VIRTUAL ? "Virtual" : "E1",
@@ -207,20 +190,22 @@
 
 	for (i = 1; i < cfg->number_endpoints; ++i) {
 		struct mgcp_endpoint *endp = &cfg->endpoints[i];
-		vty_out(vty,
-			" Endpoint 0x%.2x: CI: %d net: %u/%u bts: %u/%u on %s "
-			"traffic received bts: %u  remote: %u transcoder: %u/%u%s",
-			i, endp->ci,
-			ntohs(endp->net_end.rtp_port), ntohs(endp->net_end.rtcp_port),
-			ntohs(endp->bts_end.rtp_port), ntohs(endp->bts_end.rtcp_port),
-			inet_ntoa(endp->bts_end.addr),
-			endp->bts_end.packets, endp->net_end.packets,
-			endp->trans_net.packets, endp->trans_bts.packets,
-			VTY_NEWLINE);
 
-		if (verbose && endp->allocated) {
-			dump_rtp_end("Net->BTS", vty, &endp->bts_state, &endp->bts_end);
-			dump_rtp_end("BTS->Net", vty, &endp->net_state, &endp->net_end);
+		vty_out(vty, "Endpoint 0x%.2x:%s", i, VTY_NEWLINE);
+
+		llist_for_each_entry(conn, &endp->conns, entry) {
+			vty_out(vty, "   CONN: %s%s",
+				mgcp_conn_dump(conn), VTY_NEWLINE);
+
+			if (verbose) {
+				/* FIXME: Also add verbosity for other
+				 * connection types (E1) as soon as
+				 * the implementation is available */
+				if (conn->type == MGCP_CONN_TYPE_RTP) {
+					dump_rtp_end(vty, &conn->u.rtp.state,
+						     &conn->u.rtp.end);
+				}
+			}
 		}
 	}
 }
@@ -237,18 +222,16 @@
 	dump_trunk(vty, &g_cfg->trunk, show_stats);
 
 	llist_for_each_entry(trunk, &g_cfg->trunks, entry)
-		dump_trunk(vty, trunk, show_stats);
+	    dump_trunk(vty, trunk, show_stats);
 
 	if (g_cfg->osmux)
-		vty_out(vty, "Osmux used CID: %d%s", osmux_used_cid(), VTY_NEWLINE);
+		vty_out(vty, "Osmux used CID: %d%s", osmux_used_cid(),
+			VTY_NEWLINE);
 
 	return CMD_SUCCESS;
 }
 
-DEFUN(cfg_mgcp,
-      cfg_mgcp_cmd,
-      "mgcp",
-      "Configure the MGCP")
+DEFUN(cfg_mgcp, cfg_mgcp_cmd, "mgcp", "Configure the MGCP")
 {
 	vty->node = MGCP_NODE;
 	return CMD_SUCCESS;
@@ -258,32 +241,16 @@
       cfg_mgcp_local_ip_cmd,
       "local ip A.B.C.D",
       "Local options for the SDP record\n"
-      IP_STR
-      "IPv4 Address to use in SDP record\n")
+      IP_STR "IPv4 Address to use in SDP record\n")
 {
 	osmo_talloc_replace_string(g_cfg, &g_cfg->local_ip, argv[0]);
 	return CMD_SUCCESS;
 }
 
-DEFUN(cfg_mgcp_bts_ip,
-      cfg_mgcp_bts_ip_cmd,
-      "bts ip A.B.C.D",
-      "BTS Audio source/destination options\n"
-      IP_STR
-      "IPv4 Address of the BTS\n")
-{
-	osmo_talloc_replace_string(g_cfg, &g_cfg->bts_ip, argv[0]);
-	inet_aton(g_cfg->bts_ip, &g_cfg->bts_in);
-	return CMD_SUCCESS;
-}
-
 #define BIND_STR "Listen/Bind related socket option\n"
 DEFUN(cfg_mgcp_bind_ip,
       cfg_mgcp_bind_ip_cmd,
-      "bind ip A.B.C.D",
-      BIND_STR
-      IP_STR
-      "IPv4 Address to bind to\n")
+      "bind ip A.B.C.D", BIND_STR IP_STR "IPv4 Address to bind to\n")
 {
 	osmo_talloc_replace_string(g_cfg, &g_cfg->source_addr, argv[0]);
 	return CMD_SUCCESS;
@@ -292,9 +259,7 @@
 DEFUN(cfg_mgcp_bind_port,
       cfg_mgcp_bind_port_cmd,
       "bind port <0-65534>",
-      BIND_STR
-      "Port information\n"
-      "UDP port to listen for MGCP messages\n")
+      BIND_STR "Port information\n" "UDP port to listen for MGCP messages\n")
 {
 	unsigned int port = atoi(argv[0]);
 	g_cfg->source_port = port;
@@ -305,55 +270,24 @@
       cfg_mgcp_bind_early_cmd,
       "bind early (0|1)",
       BIND_STR
-      "Bind local ports on start up\n"
-      "Bind on demand\n" "Bind on startup\n")
+      "Bind local ports on start up\n" "Bind on demand\n" "Bind on startup\n")
 {
 	vty_out(vty, "bind early is deprecated, remove it from the config.\n");
 	return CMD_WARNING;
 }
 
-static void parse_base(struct mgcp_port_range *range, const char **argv)
-{
-	unsigned int port = atoi(argv[0]);
-	range->mode = PORT_ALLOC_STATIC;
-	range->base_port = port;
-}
-
 static void parse_range(struct mgcp_port_range *range, const char **argv)
 {
-	range->mode = PORT_ALLOC_DYNAMIC;
 	range->range_start = atoi(argv[0]);
 	range->range_end = atoi(argv[1]);
-	range->last_port = g_cfg->bts_ports.range_start;
+	range->last_port = g_cfg->net_ports.range_start;
 }
 
-
 #define RTP_STR "RTP configuration\n"
-#define BTS_START_STR "First UDP port allocated for the BTS side\n"
-#define NET_START_STR "First UDP port allocated for the NET side\n"
 #define UDP_PORT_STR "UDP Port number\n"
-DEFUN(cfg_mgcp_rtp_bts_base_port,
-      cfg_mgcp_rtp_bts_base_port_cmd,
-      "rtp bts-base <0-65534>",
-      RTP_STR
-      BTS_START_STR
-      UDP_PORT_STR)
-{
-	parse_base(&g_cfg->bts_ports, argv);
-	return CMD_SUCCESS;
-}
-
+#define NET_START_STR "First UDP port allocated\n"
 #define RANGE_START_STR "Start of the range of ports\n"
 #define RANGE_END_STR "End of the range of ports\n"
-DEFUN(cfg_mgcp_rtp_bts_range,
-      cfg_mgcp_rtp_bts_range_cmd,
-      "rtp bts-range <0-65534> <0-65534>",
-      RTP_STR "Range of ports to use for the BTS side\n"
-      RANGE_START_STR RANGE_END_STR)
-{
-	parse_range(&g_cfg->bts_ports, argv);
-	return CMD_SUCCESS;
-}
 
 DEFUN(cfg_mgcp_rtp_net_range,
       cfg_mgcp_rtp_net_range_cmd,
@@ -365,58 +299,6 @@
 	return CMD_SUCCESS;
 }
 
-DEFUN(cfg_mgcp_rtp_net_base_port,
-      cfg_mgcp_rtp_net_base_port_cmd,
-      "rtp net-base <0-65534>",
-      RTP_STR NET_START_STR UDP_PORT_STR)
-{
-	parse_base(&g_cfg->net_ports, argv);
-	return CMD_SUCCESS;
-}
-
-ALIAS_DEPRECATED(cfg_mgcp_rtp_bts_base_port, cfg_mgcp_rtp_base_port_cmd,
-      "rtp base <0-65534>",
-      RTP_STR BTS_START_STR UDP_PORT_STR)
-
-DEFUN(cfg_mgcp_rtp_transcoder_range,
-      cfg_mgcp_rtp_transcoder_range_cmd,
-      "rtp transcoder-range <0-65534> <0-65534>",
-      RTP_STR "Range of ports to use for the Transcoder\n"
-      RANGE_START_STR RANGE_END_STR)
-{
-	parse_range(&g_cfg->transcoder_ports, argv);
-	return CMD_SUCCESS;
-}
-
-DEFUN(cfg_mgcp_rtp_transcoder_base,
-      cfg_mgcp_rtp_transcoder_base_cmd,
-      "rtp transcoder-base <0-65534>",
-      RTP_STR "First UDP port allocated for the Transcoder side\n"
-      UDP_PORT_STR)
-{
-	parse_base(&g_cfg->transcoder_ports, argv);
-	return CMD_SUCCESS;
-}
-
-DEFUN(cfg_mgcp_rtp_bts_bind_ip,
-      cfg_mgcp_rtp_bts_bind_ip_cmd,
-      "rtp bts-bind-ip A.B.C.D",
-      RTP_STR "Bind endpoints facing the BTS\n" "Address to bind to\n")
-{
-	osmo_talloc_replace_string(g_cfg, &g_cfg->bts_ports.bind_addr, argv[0]);
-	return CMD_SUCCESS;
-}
-
-DEFUN(cfg_mgcp_rtp_no_bts_bind_ip,
-      cfg_mgcp_rtp_no_bts_bind_ip_cmd,
-      "no rtp bts-bind-ip",
-      NO_STR RTP_STR "Bind endpoints facing the BTS\n" "Address to bind to\n")
-{
-	talloc_free(g_cfg->bts_ports.bind_addr);
-	g_cfg->bts_ports.bind_addr = NULL;
-	return CMD_SUCCESS;
-}
-
 DEFUN(cfg_mgcp_rtp_net_bind_ip,
       cfg_mgcp_rtp_net_bind_ip_cmd,
       "rtp net-bind-ip A.B.C.D",
@@ -429,7 +311,8 @@
 DEFUN(cfg_mgcp_rtp_no_net_bind_ip,
       cfg_mgcp_rtp_no_net_bind_ip_cmd,
       "no rtp net-bind-ip",
-      NO_STR RTP_STR "Bind endpoints facing the Network\n" "Address to bind to\n")
+      NO_STR RTP_STR "Bind endpoints facing the Network\n"
+      "Address to bind to\n")
 {
 	talloc_free(g_cfg->net_ports.bind_addr);
 	g_cfg->net_ports.bind_addr = NULL;
@@ -448,28 +331,25 @@
 }
 
 ALIAS_DEPRECATED(cfg_mgcp_rtp_ip_dscp, cfg_mgcp_rtp_ip_tos_cmd,
-      "rtp ip-tos <0-255>",
-      RTP_STR
-      "Apply IP_TOS to the audio stream\n" "The DSCP value\n")
-
-#define FORCE_PTIME_STR "Force a fixed ptime for packets sent to the BTS"
-DEFUN(cfg_mgcp_rtp_force_ptime,
+		 "rtp ip-tos <0-255>",
+		 RTP_STR
+		 "Apply IP_TOS to the audio stream\n" "The DSCP value\n")
+#define FORCE_PTIME_STR "Force a fixed ptime for packets sent"
+    DEFUN(cfg_mgcp_rtp_force_ptime,
       cfg_mgcp_rtp_force_ptime_cmd,
       "rtp force-ptime (10|20|40)",
       RTP_STR FORCE_PTIME_STR
-      "The required ptime (packet duration) in ms\n"
-      "10 ms\n20 ms\n40 ms\n")
+      "The required ptime (packet duration) in ms\n" "10 ms\n20 ms\n40 ms\n")
 {
-	g_cfg->bts_force_ptime = atoi(argv[0]);
+	g_cfg->force_ptime = atoi(argv[0]);
 	return CMD_SUCCESS;
 }
 
 DEFUN(cfg_mgcp_no_rtp_force_ptime,
       cfg_mgcp_no_rtp_force_ptime_cmd,
-      "no rtp force-ptime",
-      NO_STR RTP_STR FORCE_PTIME_STR)
+      "no rtp force-ptime", NO_STR RTP_STR FORCE_PTIME_STR)
 {
-	g_cfg->bts_force_ptime = 0;
+	g_cfg->force_ptime = 0;
 	return CMD_SUCCESS;
 }
 
@@ -490,8 +370,7 @@
 
 DEFUN(cfg_mgcp_allow_transcoding,
       cfg_mgcp_allow_transcoding_cmd,
-      "allow-transcoding",
-      "Allow transcoding\n")
+      "allow-transcoding", "Allow transcoding\n")
 {
 	g_cfg->trunk.no_audio_transcoding = 0;
 	return CMD_SUCCESS;
@@ -499,8 +378,7 @@
 
 DEFUN(cfg_mgcp_no_allow_transcoding,
       cfg_mgcp_no_allow_transcoding_cmd,
-      "no allow-transcoding",
-      NO_STR "Allow transcoding\n")
+      "no allow-transcoding", NO_STR "Allow transcoding\n")
 {
 	g_cfg->trunk.no_audio_transcoding = 1;
 	return CMD_SUCCESS;
@@ -511,20 +389,19 @@
 DEFUN(cfg_mgcp_sdp_payload_number,
       cfg_mgcp_sdp_payload_number_cmd,
       "sdp audio-payload number <0-255>",
-      SDP_STR AUDIO_STR
-      "Number\n" "Payload number\n")
+      SDP_STR AUDIO_STR "Number\n" "Payload number\n")
 {
 	unsigned int payload = atoi(argv[0]);
 	g_cfg->trunk.audio_payload = payload;
 	return CMD_SUCCESS;
 }
 
-ALIAS_DEPRECATED(cfg_mgcp_sdp_payload_number, cfg_mgcp_sdp_payload_number_cmd_old,
-      "sdp audio payload number <0-255>",
-      SDP_STR AUDIO_STR AUDIO_STR "Number\n" "Payload number\n")
-      
+ALIAS_DEPRECATED(cfg_mgcp_sdp_payload_number,
+		 cfg_mgcp_sdp_payload_number_cmd_old,
+		 "sdp audio payload number <0-255>",
+		 SDP_STR AUDIO_STR AUDIO_STR "Number\n" "Payload number\n")
 
-DEFUN(cfg_mgcp_sdp_payload_name,
+    DEFUN(cfg_mgcp_sdp_payload_name,
       cfg_mgcp_sdp_payload_name_cmd,
       "sdp audio-payload name NAME",
       SDP_STR AUDIO_STR "Name\n" "Payload name\n")
@@ -534,14 +411,13 @@
 }
 
 ALIAS_DEPRECATED(cfg_mgcp_sdp_payload_name, cfg_mgcp_sdp_payload_name_cmd_old,
-      "sdp audio payload name NAME",
-      SDP_STR AUDIO_STR AUDIO_STR "Name\n" "Payload name\n")
+		 "sdp audio payload name NAME",
+		 SDP_STR AUDIO_STR AUDIO_STR "Name\n" "Payload name\n")
 
-DEFUN(cfg_mgcp_sdp_payload_send_ptime,
+    DEFUN(cfg_mgcp_sdp_payload_send_ptime,
       cfg_mgcp_sdp_payload_send_ptime_cmd,
       "sdp audio-payload send-ptime",
-      SDP_STR AUDIO_STR
-      "Send SDP ptime (packet duration) attribute\n")
+      SDP_STR AUDIO_STR "Send SDP ptime (packet duration) attribute\n")
 {
 	g_cfg->trunk.audio_send_ptime = 1;
 	return CMD_SUCCESS;
@@ -550,8 +426,7 @@
 DEFUN(cfg_mgcp_no_sdp_payload_send_ptime,
       cfg_mgcp_no_sdp_payload_send_ptime_cmd,
       "no sdp audio-payload send-ptime",
-      NO_STR SDP_STR AUDIO_STR
-      "Send SDP ptime (packet duration) attribute\n")
+      NO_STR SDP_STR AUDIO_STR "Send SDP ptime (packet duration) attribute\n")
 {
 	g_cfg->trunk.audio_send_ptime = 0;
 	return CMD_SUCCESS;
@@ -560,8 +435,7 @@
 DEFUN(cfg_mgcp_sdp_payload_send_name,
       cfg_mgcp_sdp_payload_send_name_cmd,
       "sdp audio-payload send-name",
-      SDP_STR AUDIO_STR
-      "Send SDP rtpmap with the audio name\n")
+      SDP_STR AUDIO_STR "Send SDP rtpmap with the audio name\n")
 {
 	g_cfg->trunk.audio_send_name = 1;
 	return CMD_SUCCESS;
@@ -570,8 +444,7 @@
 DEFUN(cfg_mgcp_no_sdp_payload_send_name,
       cfg_mgcp_no_sdp_payload_send_name_cmd,
       "no sdp audio-payload send-name",
-      NO_STR SDP_STR AUDIO_STR
-      "Send SDP rtpmap with the audio name\n")
+      NO_STR SDP_STR AUDIO_STR "Send SDP rtpmap with the audio name\n")
 {
 	g_cfg->trunk.audio_send_name = 0;
 	return CMD_SUCCESS;
@@ -580,8 +453,7 @@
 DEFUN(cfg_mgcp_loop,
       cfg_mgcp_loop_cmd,
       "loop (0|1)",
-      "Loop audio for all endpoints on main trunk\n"
-      "Don't Loop\n" "Loop\n")
+      "Loop audio for all endpoints on main trunk\n" "Don't Loop\n" "Loop\n")
 {
 	if (g_cfg->osmux) {
 		vty_out(vty, "Cannot use `loop' with `osmux'.%s", VTY_NEWLINE);
@@ -601,6 +473,16 @@
 	return CMD_SUCCESS;
 }
 
+DEFUN(cfg_mgcp_rtp_accept_all,
+      cfg_mgcp_rtp_accept_all_cmd,
+      "rtp-accept-all (0|1)",
+      "Accept all RTP packets, even when the originating IP/Port does not match\n"
+      "enable filter\n" "disable filter\n")
+{
+	g_cfg->trunk.rtp_accept_all = atoi(argv[0]);
+	return CMD_SUCCESS;
+}
+
 DEFUN(cfg_mgcp_number_endp,
       cfg_mgcp_number_endp_cmd,
       "number endpoints <0-65534>",
@@ -611,19 +493,14 @@
 	return CMD_SUCCESS;
 }
 
-DEFUN(cfg_mgcp_omit_rtcp,
-      cfg_mgcp_omit_rtcp_cmd,
-      "rtcp-omit",
-      RTCP_OMIT_STR)
+DEFUN(cfg_mgcp_omit_rtcp, cfg_mgcp_omit_rtcp_cmd, "rtcp-omit", RTCP_OMIT_STR)
 {
 	g_cfg->trunk.omit_rtcp = 1;
 	return CMD_SUCCESS;
 }
 
 DEFUN(cfg_mgcp_no_omit_rtcp,
-      cfg_mgcp_no_omit_rtcp_cmd,
-      "no rtcp-omit",
-      NO_STR RTCP_OMIT_STR)
+      cfg_mgcp_no_omit_rtcp_cmd, "no rtcp-omit", NO_STR RTCP_OMIT_STR)
 {
 	g_cfg->trunk.omit_rtcp = 0;
 	return CMD_SUCCESS;
@@ -631,10 +508,7 @@
 
 DEFUN(cfg_mgcp_patch_rtp_ssrc,
       cfg_mgcp_patch_rtp_ssrc_cmd,
-      "rtp-patch ssrc",
-      RTP_PATCH_STR
-      "Force a fixed SSRC\n"
-      )
+      "rtp-patch ssrc", RTP_PATCH_STR "Force a fixed SSRC\n")
 {
 	g_cfg->trunk.force_constant_ssrc = 1;
 	return CMD_SUCCESS;
@@ -642,10 +516,7 @@
 
 DEFUN(cfg_mgcp_no_patch_rtp_ssrc,
       cfg_mgcp_no_patch_rtp_ssrc_cmd,
-      "no rtp-patch ssrc",
-      NO_STR RTP_PATCH_STR
-      "Force a fixed SSRC\n"
-      )
+      "no rtp-patch ssrc", NO_STR RTP_PATCH_STR "Force a fixed SSRC\n")
 {
 	g_cfg->trunk.force_constant_ssrc = 0;
 	return CMD_SUCCESS;
@@ -653,10 +524,7 @@
 
 DEFUN(cfg_mgcp_patch_rtp_ts,
       cfg_mgcp_patch_rtp_ts_cmd,
-      "rtp-patch timestamp",
-      RTP_PATCH_STR
-      "Adjust RTP timestamp\n"
-      )
+      "rtp-patch timestamp", RTP_PATCH_STR "Adjust RTP timestamp\n")
 {
 	g_cfg->trunk.force_aligned_timing = 1;
 	return CMD_SUCCESS;
@@ -664,19 +532,14 @@
 
 DEFUN(cfg_mgcp_no_patch_rtp_ts,
       cfg_mgcp_no_patch_rtp_ts_cmd,
-      "no rtp-patch timestamp",
-      NO_STR RTP_PATCH_STR
-      "Adjust RTP timestamp\n"
-      )
+      "no rtp-patch timestamp", NO_STR RTP_PATCH_STR "Adjust RTP timestamp\n")
 {
 	g_cfg->trunk.force_aligned_timing = 0;
 	return CMD_SUCCESS;
 }
 
 DEFUN(cfg_mgcp_no_patch_rtp,
-      cfg_mgcp_no_patch_rtp_cmd,
-      "no rtp-patch",
-      NO_STR RTP_PATCH_STR)
+      cfg_mgcp_no_patch_rtp_cmd, "no rtp-patch", NO_STR RTP_PATCH_STR)
 {
 	g_cfg->trunk.force_constant_ssrc = 0;
 	g_cfg->trunk.force_aligned_timing = 0;
@@ -686,9 +549,7 @@
 DEFUN(cfg_mgcp_rtp_keepalive,
       cfg_mgcp_rtp_keepalive_cmd,
       "rtp keep-alive <1-120>",
-      RTP_STR RTP_KEEPALIVE_STR
-      "Keep alive interval in secs\n"
-      )
+      RTP_STR RTP_KEEPALIVE_STR "Keep alive interval in secs\n")
 {
 	mgcp_trunk_set_keepalive(&g_cfg->trunk, atoi(argv[0]));
 	return CMD_SUCCESS;
@@ -697,9 +558,7 @@
 DEFUN(cfg_mgcp_rtp_keepalive_once,
       cfg_mgcp_rtp_keepalive_once_cmd,
       "rtp keep-alive once",
-      RTP_STR RTP_KEEPALIVE_STR
-      "Send dummy packet only once after CRCX/MDCX\n"
-      )
+      RTP_STR RTP_KEEPALIVE_STR "Send dummy packet only once after CRCX/MDCX\n")
 {
 	mgcp_trunk_set_keepalive(&g_cfg->trunk, MGCP_KEEPALIVE_ONCE);
 	return CMD_SUCCESS;
@@ -707,71 +566,29 @@
 
 DEFUN(cfg_mgcp_no_rtp_keepalive,
       cfg_mgcp_no_rtp_keepalive_cmd,
-      "no rtp keep-alive",
-      NO_STR RTP_STR RTP_KEEPALIVE_STR
-      )
+      "no rtp keep-alive", NO_STR RTP_STR RTP_KEEPALIVE_STR)
 {
 	mgcp_trunk_set_keepalive(&g_cfg->trunk, 0);
 	return CMD_SUCCESS;
 }
 
-
-
 #define CALL_AGENT_STR "Callagent information\n"
 DEFUN(cfg_mgcp_agent_addr,
       cfg_mgcp_agent_addr_cmd,
       "call-agent ip A.B.C.D",
-      CALL_AGENT_STR IP_STR
-      "IPv4 Address of the callagent\n")
+      CALL_AGENT_STR IP_STR "IPv4 Address of the callagent\n")
 {
 	osmo_talloc_replace_string(g_cfg, &g_cfg->call_agent_addr, argv[0]);
 	return CMD_SUCCESS;
 }
 
 ALIAS_DEPRECATED(cfg_mgcp_agent_addr, cfg_mgcp_agent_addr_cmd_old,
-      "call agent ip A.B.C.D",
-      CALL_AGENT_STR CALL_AGENT_STR IP_STR
-      "IPv4 Address of the callagent\n")
-      
+		 "call agent ip A.B.C.D",
+		 CALL_AGENT_STR CALL_AGENT_STR IP_STR
+		 "IPv4 Address of the callagent\n")
 
-DEFUN(cfg_mgcp_transcoder,
-      cfg_mgcp_transcoder_cmd,
-      "transcoder-mgw A.B.C.D",
-      "Use a MGW to detranscoder RTP\n"
-      "The IP address of the MGW")
-{
-	osmo_talloc_replace_string(g_cfg, &g_cfg->transcoder_ip, argv[0]);
-	inet_aton(g_cfg->transcoder_ip, &g_cfg->transcoder_in);
-
-	return CMD_SUCCESS;
-}
-
-DEFUN(cfg_mgcp_no_transcoder,
-      cfg_mgcp_no_transcoder_cmd,
-      "no transcoder-mgw",
-      NO_STR "Disable the transcoding\n")
-{
-	if (g_cfg->transcoder_ip) {
-		LOGP(DLMGCP, LOGL_NOTICE, "Disabling transcoding on future calls.\n");
-		talloc_free(g_cfg->transcoder_ip);
-		g_cfg->transcoder_ip = NULL;
-	}
-
-	return CMD_SUCCESS;
-}
-
-DEFUN(cfg_mgcp_transcoder_remote_base,
-      cfg_mgcp_transcoder_remote_base_cmd,
-      "transcoder-remote-base <0-65534>",
-      "Set the base port for the transcoder\n" "The RTP base port on the transcoder")
-{
-	g_cfg->transcoder_remote_base = atoi(argv[0]);
-	return CMD_SUCCESS;
-}
-
-DEFUN(cfg_mgcp_trunk, cfg_mgcp_trunk_cmd,
-      "trunk <1-64>",
-      "Configure a SS7 trunk\n" "Trunk Nr\n")
+    DEFUN(cfg_mgcp_trunk, cfg_mgcp_trunk_cmd,
+      "trunk <1-64>", "Configure a SS7 trunk\n" "Trunk Nr\n")
 {
 	struct mgcp_trunk_config *trunk;
 	int index = atoi(argv[0]);
@@ -813,19 +630,22 @@
 				trunk->keepalive_interval, VTY_NEWLINE);
 		else
 			vty_out(vty, "  no rtp keep-alive%s", VTY_NEWLINE);
-		vty_out(vty, "  loop %d%s",
-			trunk->audio_loop, VTY_NEWLINE);
+		vty_out(vty, "  loop %d%s", trunk->audio_loop, VTY_NEWLINE);
 		vty_out(vty, "  force-realloc %d%s",
 			trunk->force_realloc, VTY_NEWLINE);
+		vty_out(vty, "  rtp-accept-all %d%s",
+			trunk->rtp_accept_all, VTY_NEWLINE);
 		if (trunk->omit_rtcp)
 			vty_out(vty, "  rtcp-omit%s", VTY_NEWLINE);
 		else
 			vty_out(vty, "  no rtcp-omit%s", VTY_NEWLINE);
 		if (trunk->force_constant_ssrc || trunk->force_aligned_timing) {
 			vty_out(vty, "  %srtp-patch ssrc%s",
-				trunk->force_constant_ssrc ? "" : "no ", VTY_NEWLINE);
+				trunk->force_constant_ssrc ? "" : "no ",
+				VTY_NEWLINE);
 			vty_out(vty, "  %srtp-patch timestamp%s",
-				trunk->force_aligned_timing ? "" : "no ", VTY_NEWLINE);
+				trunk->force_aligned_timing ? "" : "no ",
+				VTY_NEWLINE);
 		} else
 			vty_out(vty, "  no rtp-patch%s", VTY_NEWLINE);
 		if (trunk->audio_fmtp_extra)
@@ -867,13 +687,13 @@
 }
 
 ALIAS_DEPRECATED(cfg_trunk_payload_number, cfg_trunk_payload_number_cmd_old,
-      "sdp audio payload number <0-255>",
-      SDP_STR AUDIO_STR AUDIO_STR "Number\n" "Payload Number\n")
+		 "sdp audio payload number <0-255>",
+		 SDP_STR AUDIO_STR AUDIO_STR "Number\n" "Payload Number\n")
 
-DEFUN(cfg_trunk_payload_name,
+    DEFUN(cfg_trunk_payload_name,
       cfg_trunk_payload_name_cmd,
       "sdp audio-payload name NAME",
-       SDP_STR AUDIO_STR "Payload\n" "Payload Name\n")
+      SDP_STR AUDIO_STR "Payload\n" "Payload Name\n")
 {
 	struct mgcp_trunk_config *trunk = vty->index;
 
@@ -882,15 +702,13 @@
 }
 
 ALIAS_DEPRECATED(cfg_trunk_payload_name, cfg_trunk_payload_name_cmd_old,
-      "sdp audio payload name NAME",
-       SDP_STR AUDIO_STR AUDIO_STR "Payload\n" "Payload Name\n")
+		 "sdp audio payload name NAME",
+		 SDP_STR AUDIO_STR AUDIO_STR "Payload\n" "Payload Name\n")
 
-
-DEFUN(cfg_trunk_loop,
+    DEFUN(cfg_trunk_loop,
       cfg_trunk_loop_cmd,
       "loop (0|1)",
-      "Loop audio for all endpoints on this trunk\n"
-      "Don't Loop\n" "Loop\n")
+      "Loop audio for all endpoints on this trunk\n" "Don't Loop\n" "Loop\n")
 {
 	struct mgcp_trunk_config *trunk = vty->index;
 
@@ -905,8 +723,7 @@
 DEFUN(cfg_trunk_sdp_payload_send_ptime,
       cfg_trunk_sdp_payload_send_ptime_cmd,
       "sdp audio-payload send-ptime",
-      SDP_STR AUDIO_STR
-      "Send SDP ptime (packet duration) attribute\n")
+      SDP_STR AUDIO_STR "Send SDP ptime (packet duration) attribute\n")
 {
 	struct mgcp_trunk_config *trunk = vty->index;
 	trunk->audio_send_ptime = 1;
@@ -916,8 +733,7 @@
 DEFUN(cfg_trunk_no_sdp_payload_send_ptime,
       cfg_trunk_no_sdp_payload_send_ptime_cmd,
       "no sdp audio-payload send-ptime",
-      NO_STR SDP_STR AUDIO_STR
-      "Send SDP ptime (packet duration) attribute\n")
+      NO_STR SDP_STR AUDIO_STR "Send SDP ptime (packet duration) attribute\n")
 {
 	struct mgcp_trunk_config *trunk = vty->index;
 	trunk->audio_send_ptime = 0;
@@ -927,8 +743,7 @@
 DEFUN(cfg_trunk_sdp_payload_send_name,
       cfg_trunk_sdp_payload_send_name_cmd,
       "sdp audio-payload send-name",
-      SDP_STR AUDIO_STR
-      "Send SDP rtpmap with the audio name\n")
+      SDP_STR AUDIO_STR "Send SDP rtpmap with the audio name\n")
 {
 	struct mgcp_trunk_config *trunk = vty->index;
 	trunk->audio_send_name = 1;
@@ -938,18 +753,14 @@
 DEFUN(cfg_trunk_no_sdp_payload_send_name,
       cfg_trunk_no_sdp_payload_send_name_cmd,
       "no sdp audio-payload send-name",
-      NO_STR SDP_STR AUDIO_STR
-      "Send SDP rtpmap with the audio name\n")
+      NO_STR SDP_STR AUDIO_STR "Send SDP rtpmap with the audio name\n")
 {
 	struct mgcp_trunk_config *trunk = vty->index;
 	trunk->audio_send_name = 0;
 	return CMD_SUCCESS;
 }
 
-DEFUN(cfg_trunk_omit_rtcp,
-      cfg_trunk_omit_rtcp_cmd,
-      "rtcp-omit",
-      RTCP_OMIT_STR)
+DEFUN(cfg_trunk_omit_rtcp, cfg_trunk_omit_rtcp_cmd, "rtcp-omit", RTCP_OMIT_STR)
 {
 	struct mgcp_trunk_config *trunk = vty->index;
 	trunk->omit_rtcp = 1;
@@ -957,9 +768,7 @@
 }
 
 DEFUN(cfg_trunk_no_omit_rtcp,
-      cfg_trunk_no_omit_rtcp_cmd,
-      "no rtcp-omit",
-      NO_STR RTCP_OMIT_STR)
+      cfg_trunk_no_omit_rtcp_cmd, "no rtcp-omit", NO_STR RTCP_OMIT_STR)
 {
 	struct mgcp_trunk_config *trunk = vty->index;
 	trunk->omit_rtcp = 0;
@@ -968,10 +777,7 @@
 
 DEFUN(cfg_trunk_patch_rtp_ssrc,
       cfg_trunk_patch_rtp_ssrc_cmd,
-      "rtp-patch ssrc",
-      RTP_PATCH_STR
-      "Force a fixed SSRC\n"
-      )
+      "rtp-patch ssrc", RTP_PATCH_STR "Force a fixed SSRC\n")
 {
 	struct mgcp_trunk_config *trunk = vty->index;
 	trunk->force_constant_ssrc = 1;
@@ -980,10 +786,7 @@
 
 DEFUN(cfg_trunk_no_patch_rtp_ssrc,
       cfg_trunk_no_patch_rtp_ssrc_cmd,
-      "no rtp-patch ssrc",
-      NO_STR RTP_PATCH_STR
-      "Force a fixed SSRC\n"
-      )
+      "no rtp-patch ssrc", NO_STR RTP_PATCH_STR "Force a fixed SSRC\n")
 {
 	struct mgcp_trunk_config *trunk = vty->index;
 	trunk->force_constant_ssrc = 0;
@@ -992,10 +795,7 @@
 
 DEFUN(cfg_trunk_patch_rtp_ts,
       cfg_trunk_patch_rtp_ts_cmd,
-      "rtp-patch timestamp",
-      RTP_PATCH_STR
-      "Adjust RTP timestamp\n"
-      )
+      "rtp-patch timestamp", RTP_PATCH_STR "Adjust RTP timestamp\n")
 {
 	struct mgcp_trunk_config *trunk = vty->index;
 	trunk->force_aligned_timing = 1;
@@ -1004,10 +804,7 @@
 
 DEFUN(cfg_trunk_no_patch_rtp_ts,
       cfg_trunk_no_patch_rtp_ts_cmd,
-      "no rtp-patch timestamp",
-      NO_STR RTP_PATCH_STR
-      "Adjust RTP timestamp\n"
-      )
+      "no rtp-patch timestamp", NO_STR RTP_PATCH_STR "Adjust RTP timestamp\n")
 {
 	struct mgcp_trunk_config *trunk = vty->index;
 	trunk->force_aligned_timing = 0;
@@ -1015,9 +812,7 @@
 }
 
 DEFUN(cfg_trunk_no_patch_rtp,
-      cfg_trunk_no_patch_rtp_cmd,
-      "no rtp-patch",
-      NO_STR RTP_PATCH_STR)
+      cfg_trunk_no_patch_rtp_cmd, "no rtp-patch", NO_STR RTP_PATCH_STR)
 {
 	struct mgcp_trunk_config *trunk = vty->index;
 	trunk->force_constant_ssrc = 0;
@@ -1028,9 +823,7 @@
 DEFUN(cfg_trunk_rtp_keepalive,
       cfg_trunk_rtp_keepalive_cmd,
       "rtp keep-alive <1-120>",
-      RTP_STR RTP_KEEPALIVE_STR
-      "Keep-alive interval in secs\n"
-      )
+      RTP_STR RTP_KEEPALIVE_STR "Keep-alive interval in secs\n")
 {
 	struct mgcp_trunk_config *trunk = vty->index;
 	mgcp_trunk_set_keepalive(trunk, atoi(argv[0]));
@@ -1040,9 +833,7 @@
 DEFUN(cfg_trunk_rtp_keepalive_once,
       cfg_trunk_rtp_keepalive_once_cmd,
       "rtp keep-alive once",
-      RTP_STR RTP_KEEPALIVE_STR
-      "Send dummy packet only once after CRCX/MDCX\n"
-      )
+      RTP_STR RTP_KEEPALIVE_STR "Send dummy packet only once after CRCX/MDCX\n")
 {
 	struct mgcp_trunk_config *trunk = vty->index;
 	mgcp_trunk_set_keepalive(trunk, MGCP_KEEPALIVE_ONCE);
@@ -1051,9 +842,7 @@
 
 DEFUN(cfg_trunk_no_rtp_keepalive,
       cfg_trunk_no_rtp_keepalive_cmd,
-      "no rtp keep-alive",
-      NO_STR RTP_STR RTP_KEEPALIVE_STR
-      )
+      "no rtp keep-alive", NO_STR RTP_STR RTP_KEEPALIVE_STR)
 {
 	struct mgcp_trunk_config *trunk = vty->index;
 	mgcp_trunk_set_keepalive(trunk, 0);
@@ -1062,8 +851,7 @@
 
 DEFUN(cfg_trunk_allow_transcoding,
       cfg_trunk_allow_transcoding_cmd,
-      "allow-transcoding",
-      "Allow transcoding\n")
+      "allow-transcoding", "Allow transcoding\n")
 {
 	struct mgcp_trunk_config *trunk = vty->index;
 	trunk->no_audio_transcoding = 0;
@@ -1072,22 +860,23 @@
 
 DEFUN(cfg_trunk_no_allow_transcoding,
       cfg_trunk_no_allow_transcoding_cmd,
-      "no allow-transcoding",
-      NO_STR "Allow transcoding\n")
+      "no allow-transcoding", NO_STR "Allow transcoding\n")
 {
 	struct mgcp_trunk_config *trunk = vty->index;
 	trunk->no_audio_transcoding = 1;
 	return CMD_SUCCESS;
 }
 
-DEFUN(loop_endp,
-      loop_endp_cmd,
+DEFUN(loop_conn,
+      loop_conn_cmd,
       "loop-endpoint <0-64> NAME (0|1)",
       "Loop a given endpoint\n" "Trunk number\n"
-      "The name in hex of the endpoint\n" "Disable the loop\n" "Enable the loop\n")
+      "The name in hex of the endpoint\n" "Disable the loop\n"
+      "Enable the loop\n")
 {
 	struct mgcp_trunk_config *trunk;
 	struct mgcp_endpoint *endp;
+	struct mgcp_conn *conn;
 
 	trunk = find_trunk(g_cfg, atoi(argv[0]));
 	if (!trunk) {
@@ -1105,41 +894,48 @@
 	int endp_no = strtoul(argv[1], NULL, 16);
 	if (endp_no < 1 || endp_no >= trunk->number_endpoints) {
 		vty_out(vty, "Loopback number %s/%d is invalid.%s",
-		argv[1], endp_no, VTY_NEWLINE);
+			argv[1], endp_no, VTY_NEWLINE);
 		return CMD_WARNING;
 	}
 
-
 	endp = &trunk->endpoints[endp_no];
 	int loop = atoi(argv[2]);
+	llist_for_each_entry(conn, &endp->conns, entry) {
+		if (conn->type == MGCP_CONN_TYPE_RTP)
+			/* Handle it like a MDCX, switch on SSRC patching if enabled */
+			mgcp_rtp_end_config(endp, 1, &conn->u.rtp.end);
+		else {
+			/* FIXME: Introduce support for other connection (E1)
+			 * types when implementation is available */
+			vty_out(vty, "%%Can't enable SSRC patching,"
+				"connection %s is not an RTP connection.%s",
+				mgcp_conn_dump(conn), VTY_NEWLINE);
+		}
 
-	if (loop)
-		endp->conn_mode = MGCP_CONN_LOOPBACK;
-	else
-		endp->conn_mode = endp->orig_mode;
-
-	/* Handle it like a MDCX, switch on SSRC patching if enabled */
-	mgcp_rtp_end_config(endp, 1, &endp->bts_end);
-	mgcp_rtp_end_config(endp, 1, &endp->net_end);
+		if (loop)
+			conn->mode = MGCP_CONN_LOOPBACK;
+		else
+			conn->mode = conn->mode_orig;
+	}
 
 	return CMD_SUCCESS;
 }
 
-DEFUN(tap_call,
-      tap_call_cmd,
-      "tap-call <0-64> ENDPOINT (bts-in|bts-out|net-in|net-out) A.B.C.D <0-65534>",
+DEFUN(tap_rtp,
+      tap_rtp_cmd,
+      "tap-rtp <0-64> ENDPOINT CONN (in|out) A.B.C.D <0-65534>",
       "Forward data on endpoint to a different system\n" "Trunk number\n"
       "The endpoint in hex\n"
-      "Forward the data coming from the bts\n"
-      "Forward the data coming from the bts leaving to the network\n"
-      "Forward the data coming from the net\n"
-      "Forward the data coming from the net leaving to the bts\n"
+      "The connection id in hex\n"
+      "Forward incoming data\n"
+      "Forward leaving data\n"
       "destination IP of the data\n" "destination port\n")
 {
 	struct mgcp_rtp_tap *tap;
 	struct mgcp_trunk_config *trunk;
 	struct mgcp_endpoint *endp;
-	int port = 0;
+	struct mgcp_conn_rtp *conn;
+	uint32_t conn_id;
 
 	trunk = find_trunk(g_cfg, atoi(argv[0]));
 	if (!trunk) {
@@ -1157,37 +953,39 @@
 	int endp_no = strtoul(argv[1], NULL, 16);
 	if (endp_no < 1 || endp_no >= trunk->number_endpoints) {
 		vty_out(vty, "Endpoint number %s/%d is invalid.%s",
-		argv[1], endp_no, VTY_NEWLINE);
+			argv[1], endp_no, VTY_NEWLINE);
 		return CMD_WARNING;
 	}
 
 	endp = &trunk->endpoints[endp_no];
 
-	if (strcmp(argv[2], "bts-in") == 0) {
-		port = MGCP_TAP_BTS_IN;
-	} else if (strcmp(argv[2], "bts-out") == 0) {
-		port = MGCP_TAP_BTS_OUT;
-	} else if (strcmp(argv[2], "net-in") == 0) {
-		port = MGCP_TAP_NET_IN;
-	} else if (strcmp(argv[2], "net-out") == 0) {
-		port = MGCP_TAP_NET_OUT;
-	} else {
+	conn_id = strtoul(argv[2], NULL, 10);
+	conn = mgcp_conn_get_rtp(endp, conn_id);
+	if (!conn) {
+		vty_out(vty, "Conn ID %s/%d is invalid.%s",
+			argv[2], conn_id, VTY_NEWLINE);
+		return CMD_WARNING;
+	}
+
+	if (strcmp(argv[3], "in") == 0)
+		tap = &conn->tap_in;
+	else if (strcmp(argv[3], "out") == 0)
+		tap = &conn->tap_out;
+	else {
 		vty_out(vty, "Unknown mode... tricked vty?%s", VTY_NEWLINE);
 		return CMD_WARNING;
 	}
 
-	tap = &endp->taps[port];
 	memset(&tap->forward, 0, sizeof(tap->forward));
-	inet_aton(argv[3], &tap->forward.sin_addr);
-	tap->forward.sin_port = htons(atoi(argv[4]));
+	inet_aton(argv[4], &tap->forward.sin_addr);
+	tap->forward.sin_port = htons(atoi(argv[5]));
 	tap->enabled = 1;
 	return CMD_SUCCESS;
 }
 
 DEFUN(free_endp, free_endp_cmd,
       "free-endpoint <0-64> NUMBER",
-      "Free the given endpoint\n" "Trunk number\n"
-      "Endpoint number in hex.\n")
+      "Free the given endpoint\n" "Trunk number\n" "Endpoint number in hex.\n")
 {
 	struct mgcp_trunk_config *trunk;
 	struct mgcp_endpoint *endp;
@@ -1208,7 +1006,7 @@
 	int endp_no = strtoul(argv[1], NULL, 16);
 	if (endp_no < 1 || endp_no >= trunk->number_endpoints) {
 		vty_out(vty, "Endpoint number %s/%d is invalid.%s",
-		argv[1], endp_no, VTY_NEWLINE);
+			argv[1], endp_no, VTY_NEWLINE);
 		return CMD_WARNING;
 	}
 
@@ -1219,8 +1017,7 @@
 
 DEFUN(reset_endp, reset_endp_cmd,
       "reset-endpoint <0-64> NUMBER",
-      "Reset the given endpoint\n" "Trunk number\n"
-      "Endpoint number in hex.\n")
+      "Reset the given endpoint\n" "Trunk number\n" "Endpoint number in hex.\n")
 {
 	struct mgcp_trunk_config *trunk;
 	struct mgcp_endpoint *endp;
@@ -1242,7 +1039,7 @@
 	endp_no = strtoul(argv[1], NULL, 16);
 	if (endp_no < 1 || endp_no >= trunk->number_endpoints) {
 		vty_out(vty, "Endpoint number %s/%d is invalid.%s",
-		argv[1], endp_no, VTY_NEWLINE);
+			argv[1], endp_no, VTY_NEWLINE);
 		return CMD_WARNING;
 	}
 
@@ -1256,8 +1053,7 @@
 }
 
 DEFUN(reset_all_endp, reset_all_endp_cmd,
-      "reset-all-endpoints",
-      "Reset all endpoints\n")
+      "reset-all-endpoints", "Reset all endpoints\n")
 {
 	int rc;
 
@@ -1274,21 +1070,25 @@
 DEFUN(cfg_mgcp_osmux,
       cfg_mgcp_osmux_cmd,
       "osmux (on|off|only)",
-       OSMUX_STR "Enable OSMUX\n" "Disable OSMUX\n" "Only use OSMUX\n")
+      OSMUX_STR "Enable OSMUX\n" "Disable OSMUX\n" "Only use OSMUX\n")
 {
 	if (strcmp(argv[0], "off") == 0) {
 		g_cfg->osmux = OSMUX_USAGE_OFF;
 		return CMD_SUCCESS;
 	}
 
+	/* Since OSMUX support is not finished, we do not
+	 * allow to turn it on yet. */
+	vty_out(vty, "OSMUX currently unavailable in this software version.%s", VTY_NEWLINE);
+	return CMD_WARNING;
+
 	if (strcmp(argv[0], "on") == 0)
 		g_cfg->osmux = OSMUX_USAGE_ON;
 	else if (strcmp(argv[0], "only") == 0)
 		g_cfg->osmux = OSMUX_USAGE_ONLY;
 
 	if (g_cfg->trunk.audio_loop) {
-		vty_out(vty, "Cannot use `loop' with `osmux'.%s",
-			VTY_NEWLINE);
+		vty_out(vty, "Cannot use `loop' with `osmux'.%s", VTY_NEWLINE);
 		return CMD_WARNING;
 	}
 
@@ -1297,8 +1097,7 @@
 
 DEFUN(cfg_mgcp_osmux_ip,
       cfg_mgcp_osmux_ip_cmd,
-      "osmux bind-ip A.B.C.D",
-      OSMUX_STR IP_STR "IPv4 Address to bind to\n")
+      "osmux bind-ip A.B.C.D", OSMUX_STR IP_STR "IPv4 Address to bind to\n")
 {
 	osmo_talloc_replace_string(g_cfg, &g_cfg->osmux_addr, argv[0]);
 	return CMD_SUCCESS;
@@ -1324,8 +1123,7 @@
 
 DEFUN(cfg_mgcp_osmux_port,
       cfg_mgcp_osmux_port_cmd,
-      "osmux port <1-65535>",
-      OSMUX_STR "port\n" "UDP port\n")
+      "osmux port <1-65535>", OSMUX_STR "port\n" "UDP port\n")
 {
 	g_cfg->osmux_port = atoi(argv[0]);
 	return CMD_SUCCESS;
@@ -1334,7 +1132,8 @@
 DEFUN(cfg_mgcp_osmux_dummy,
       cfg_mgcp_osmux_dummy_cmd,
       "osmux dummy (on|off)",
-      OSMUX_STR "Dummy padding\n" "Enable dummy padding\n" "Disable dummy padding\n")
+      OSMUX_STR "Dummy padding\n" "Enable dummy padding\n"
+      "Disable dummy padding\n")
 {
 	if (strcmp(argv[0], "on") == 0)
 		g_cfg->osmux_dummy = 1;
@@ -1347,8 +1146,8 @@
 int mgcp_vty_init(void)
 {
 	install_element_ve(&show_mgcp_cmd);
-	install_element(ENABLE_NODE, &loop_endp_cmd);
-	install_element(ENABLE_NODE, &tap_call_cmd);
+	install_element(ENABLE_NODE, &loop_conn_cmd);
+	install_element(ENABLE_NODE, &tap_rtp_cmd);
 	install_element(ENABLE_NODE, &free_endp_cmd);
 	install_element(ENABLE_NODE, &reset_endp_cmd);
 	install_element(ENABLE_NODE, &reset_all_endp_cmd);
@@ -1358,21 +1157,12 @@
 
 	vty_install_default(MGCP_NODE);
 	install_element(MGCP_NODE, &cfg_mgcp_local_ip_cmd);
-	install_element(MGCP_NODE, &cfg_mgcp_bts_ip_cmd);
 	install_element(MGCP_NODE, &cfg_mgcp_bind_ip_cmd);
 	install_element(MGCP_NODE, &cfg_mgcp_bind_port_cmd);
 	install_element(MGCP_NODE, &cfg_mgcp_bind_early_cmd);
-	install_element(MGCP_NODE, &cfg_mgcp_rtp_base_port_cmd);
-	install_element(MGCP_NODE, &cfg_mgcp_rtp_bts_base_port_cmd);
-	install_element(MGCP_NODE, &cfg_mgcp_rtp_net_base_port_cmd);
-	install_element(MGCP_NODE, &cfg_mgcp_rtp_bts_range_cmd);
-	install_element(MGCP_NODE, &cfg_mgcp_rtp_bts_bind_ip_cmd);
-	install_element(MGCP_NODE, &cfg_mgcp_rtp_no_bts_bind_ip_cmd);
 	install_element(MGCP_NODE, &cfg_mgcp_rtp_net_range_cmd);
 	install_element(MGCP_NODE, &cfg_mgcp_rtp_net_bind_ip_cmd);
 	install_element(MGCP_NODE, &cfg_mgcp_rtp_no_net_bind_ip_cmd);
-	install_element(MGCP_NODE, &cfg_mgcp_rtp_transcoder_range_cmd);
-	install_element(MGCP_NODE, &cfg_mgcp_rtp_transcoder_base_cmd);
 	install_element(MGCP_NODE, &cfg_mgcp_rtp_ip_dscp_cmd);
 	install_element(MGCP_NODE, &cfg_mgcp_rtp_ip_tos_cmd);
 	install_element(MGCP_NODE, &cfg_mgcp_rtp_force_ptime_cmd);
@@ -1382,15 +1172,13 @@
 	install_element(MGCP_NODE, &cfg_mgcp_no_rtp_keepalive_cmd);
 	install_element(MGCP_NODE, &cfg_mgcp_agent_addr_cmd);
 	install_element(MGCP_NODE, &cfg_mgcp_agent_addr_cmd_old);
-	install_element(MGCP_NODE, &cfg_mgcp_transcoder_cmd);
-	install_element(MGCP_NODE, &cfg_mgcp_no_transcoder_cmd);
-	install_element(MGCP_NODE, &cfg_mgcp_transcoder_remote_base_cmd);
 	install_element(MGCP_NODE, &cfg_mgcp_sdp_payload_number_cmd);
 	install_element(MGCP_NODE, &cfg_mgcp_sdp_payload_name_cmd);
 	install_element(MGCP_NODE, &cfg_mgcp_sdp_payload_number_cmd_old);
 	install_element(MGCP_NODE, &cfg_mgcp_sdp_payload_name_cmd_old);
 	install_element(MGCP_NODE, &cfg_mgcp_loop_cmd);
 	install_element(MGCP_NODE, &cfg_mgcp_force_realloc_cmd);
+	install_element(MGCP_NODE, &cfg_mgcp_rtp_accept_all_cmd);
 	install_element(MGCP_NODE, &cfg_mgcp_number_endp_cmd);
 	install_element(MGCP_NODE, &cfg_mgcp_omit_rtcp_cmd);
 	install_element(MGCP_NODE, &cfg_mgcp_no_omit_rtcp_cmd);
@@ -1413,7 +1201,6 @@
 	install_element(MGCP_NODE, &cfg_mgcp_allow_transcoding_cmd);
 	install_element(MGCP_NODE, &cfg_mgcp_no_allow_transcoding_cmd);
 
-
 	install_element(MGCP_NODE, &cfg_mgcp_trunk_cmd);
 	install_node(&trunk_node, config_write_trunk);
 	vty_install_default(TRUNK_NODE);
@@ -1445,9 +1232,6 @@
 
 static int allocate_trunk(struct mgcp_trunk_config *trunk)
 {
-	int i;
-	struct mgcp_config *cfg = trunk->cfg;
-
 	if (mgcp_endpoints_allocate(trunk) != 0) {
 		LOGP(DLMGCP, LOGL_ERROR,
 		     "Failed to allocate %d endpoints on trunk %d.\n",
@@ -1455,54 +1239,6 @@
 		return -1;
 	}
 
-	/* early bind */
-	for (i = 1; i < trunk->number_endpoints; ++i) {
-		struct mgcp_endpoint *endp = &trunk->endpoints[i];
-
-		if (cfg->bts_ports.mode == PORT_ALLOC_STATIC) {
-			cfg->last_bts_port += 2;
-			if (mgcp_bind_bts_rtp_port(endp, cfg->last_bts_port) != 0) {
-				LOGP(DLMGCP, LOGL_FATAL,
-				     "Failed to bind: %d\n", cfg->last_bts_port);
-				return -1;
-			}
-			endp->bts_end.local_alloc = PORT_ALLOC_STATIC;
-		}
-
-		if (cfg->net_ports.mode == PORT_ALLOC_STATIC) {
-			cfg->last_net_port += 2;
-			if (mgcp_bind_net_rtp_port(endp, cfg->last_net_port) != 0) {
-				LOGP(DLMGCP, LOGL_FATAL,
-				     "Failed to bind: %d\n", cfg->last_net_port);
-				return -1;
-			}
-			endp->net_end.local_alloc = PORT_ALLOC_STATIC;
-		}
-
-		if (trunk->trunk_type == MGCP_TRUNK_VIRTUAL &&
-		    cfg->transcoder_ip && cfg->transcoder_ports.mode == PORT_ALLOC_STATIC) {
-			int rtp_port;
-
-			/* network side */
-			rtp_port = rtp_calculate_port(ENDPOINT_NUMBER(endp),
-						      cfg->transcoder_ports.base_port);
-			if (mgcp_bind_trans_net_rtp_port(endp, rtp_port) != 0) {
-				LOGP(DLMGCP, LOGL_FATAL, "Failed to bind: %d\n", rtp_port);
-				return -1;
-			}
-			endp->trans_net.local_alloc = PORT_ALLOC_STATIC;
-
-			/* bts side */
-			rtp_port = rtp_calculate_port(endp_back_channel(ENDPOINT_NUMBER(endp)),
-						      cfg->transcoder_ports.base_port);
-			if (mgcp_bind_trans_bts_rtp_port(endp, rtp_port) != 0) {
-				LOGP(DLMGCP, LOGL_FATAL, "Failed to bind: %d\n", rtp_port);
-				return -1;
-			}
-			endp->trans_bts.local_alloc = PORT_ALLOC_STATIC;
-		}
-	}
-
 	return 0;
 }
 
@@ -1519,32 +1255,27 @@
 	g_cfg = cfg;
 	rc = vty_read_config_file(config_file, NULL);
 	if (rc < 0) {
-		fprintf(stderr, "Failed to parse the config file: '%s'\n", config_file);
+		fprintf(stderr, "Failed to parse the config file: '%s'\n",
+			config_file);
 		return rc;
 	}
 
-
-	if (!g_cfg->bts_ip)
-		fprintf(stderr, "No BTS ip address specified. This will allow everyone to connect.\n");
-
 	if (!g_cfg->source_addr) {
 		fprintf(stderr, "You need to specify a bind address.\n");
 		return -1;
 	}
 
-	/* initialize the last ports */
-	g_cfg->last_bts_port = rtp_calculate_port(0, g_cfg->bts_ports.base_port);
-	g_cfg->last_net_port = rtp_calculate_port(0, g_cfg->net_ports.base_port);
-
 	if (allocate_trunk(&g_cfg->trunk) != 0) {
-		LOGP(DLMGCP, LOGL_ERROR, "Failed to initialize the virtual trunk.\n");
+		LOGP(DLMGCP, LOGL_ERROR,
+		     "Failed to initialize the virtual trunk.\n");
 		return -1;
 	}
 
 	llist_for_each_entry(trunk, &g_cfg->trunks, entry) {
 		if (allocate_trunk(trunk) != 0) {
 			LOGP(DLMGCP, LOGL_ERROR,
-			     "Failed to initialize E1 trunk %d.\n", trunk->trunk_nr);
+			     "Failed to initialize E1 trunk %d.\n",
+			     trunk->trunk_nr);
 			return -1;
 		}
 	}
@@ -1552,4 +1283,3 @@
 
 	return 0;
 }
-
