diff --git a/TODO-RELEASE b/TODO-RELEASE
index c5a3b36..3969146 100644
--- a/TODO-RELEASE
+++ b/TODO-RELEASE
@@ -24,3 +24,4 @@
 # If any interfaces have been removed or changed since the last public release, a=0.
 #
 #library		what		description / commit summary line
+libosmo-mgcp-client	various         Drop legacy API functions and mgcp_client_conf members
diff --git a/include/osmocom/mgcp_client/mgcp_client.h b/include/osmocom/mgcp_client/mgcp_client.h
index 79f2078..c1fd1b0 100644
--- a/include/osmocom/mgcp_client/mgcp_client.h
+++ b/include/osmocom/mgcp_client/mgcp_client.h
@@ -22,9 +22,6 @@
 	int local_port;
 	const char *remote_addr;
 	int remote_port;
-	uint16_t first_endpoint;
-	uint16_t last_endpoint;
-	uint16_t bts_base;
 };
 
 typedef unsigned int mgcp_trans_id_t;
@@ -123,9 +120,6 @@
 uint16_t mgcp_client_remote_port(struct mgcp_client *mgcp);
 uint32_t mgcp_client_remote_addr_n(struct mgcp_client *mgcp);
 
-int mgcp_client_next_endpoint(struct mgcp_client *client);
-void mgcp_client_release_endpoint(uint16_t id, struct mgcp_client *client);
-
 /* Invoked when an MGCP response is received or sending failed.  When the
  * response is passed as NULL, this indicates failure during transmission. */
 typedef void (* mgcp_response_cb_t )(struct mgcp_response *response, void *priv);
@@ -137,20 +131,6 @@
 
 enum mgcp_connection_mode;
 
-struct msgb *mgcp_msg_crcx(struct mgcp_client *mgcp,
-			   uint16_t rtp_endpoint, unsigned int call_id,
-			   enum mgcp_connection_mode mode)
-OSMO_DEPRECATED("Use mgcp_msg_gen() instead");
-
-struct msgb *mgcp_msg_mdcx(struct mgcp_client *mgcp,
-			   uint16_t rtp_endpoint, const char *rtp_conn_addr,
-			   uint16_t rtp_port, enum mgcp_connection_mode mode)
-OSMO_DEPRECATED("Use mgcp_msg_gen() instead");
-
-struct msgb *mgcp_msg_dlcx(struct mgcp_client *mgcp, uint16_t rtp_endpoint,
-			   unsigned int call_id)
-OSMO_DEPRECATED("Use mgcp_msg_gen() instead");
-
 struct msgb *mgcp_msg_gen(struct mgcp_client *mgcp, struct mgcp_msg *mgcp_msg);
 mgcp_trans_id_t mgcp_msg_trans_id(struct msgb *msg);
 
diff --git a/src/libosmo-mgcp-client/mgcp_client.c b/src/libosmo-mgcp-client/mgcp_client.c
index fc9c5d3..2ceab3c 100644
--- a/src/libosmo-mgcp-client/mgcp_client.c
+++ b/src/libosmo-mgcp-client/mgcp_client.c
@@ -190,75 +190,9 @@
 		.local_port = -1,
 		.remote_addr = NULL,
 		.remote_port = -1,
-		.first_endpoint = 0,
-		.last_endpoint = 0,
-		.bts_base = 0,
 	};
 }
 
-/* Test if a given endpoint id is currently in use */
-static bool endpoint_in_use(uint16_t id, struct mgcp_client *client)
-{
-	struct mgcp_inuse_endpoint *endpoint;
-	llist_for_each_entry(endpoint, &client->inuse_endpoints, entry) {
-		if (endpoint->id == id)
-			return true;
-	}
-
-	return false;
-}
-
-/*! Pick next free endpoint ID.
- *  \param[in,out] client MGCP client descriptor.
- *  \returns 0 on success, -EINVAL on error. */
-int mgcp_client_next_endpoint(struct mgcp_client *client)
-{
-	int i;
-	uint16_t first_endpoint = client->actual.first_endpoint;
-	uint16_t last_endpoint = client->actual.last_endpoint;
-	struct mgcp_inuse_endpoint *endpoint;
-
-	/* Use the maximum permitted range if the VTY
-	 * configuration does not specify a range */
-	if (client->actual.last_endpoint == 0) {
-		first_endpoint = 1;
-		last_endpoint = 65534;
-	}
-
-	/* Test the permitted endpoint range for an endpoint
-	 * number that is not in use. When a suitable endpoint
-	 * number can be found, seize it by adding it to the
-	 * inuse list. */
-	for (i=first_endpoint;i<last_endpoint;i++)
-	{
-		if (endpoint_in_use(i,client) == false) {
-			endpoint = talloc_zero(client, struct mgcp_inuse_endpoint);
-			endpoint->id = i;
-			llist_add_tail(&endpoint->entry, &client->inuse_endpoints);
-			return endpoint->id;
-		}
-	}
-
-	/* All endpoints are busy! */
-	return -EINVAL;
-}
-
-/*! Release a seized endpoint ID to make it available again for other calls.
- *  \param[in] id Endpoint ID
- *  \param[in,out] client MGCP client descriptor. */
-/* Release a seized endpoint id to make it available again for other calls */
-void mgcp_client_release_endpoint(uint16_t id, struct mgcp_client *client)
-{
-	struct mgcp_inuse_endpoint *endpoint;
-	struct mgcp_inuse_endpoint *endpoint_tmp;
-	llist_for_each_entry_safe(endpoint, endpoint_tmp, &client->inuse_endpoints, entry) {
-		if (endpoint->id == id) {
-			llist_del(&endpoint->entry);
-			talloc_free(endpoint);
-		}
-	}
-}
-
 static void mgcp_client_handle_response(struct mgcp_client *mgcp,
 					struct mgcp_response_pending *pending,
 					struct mgcp_response *response)
@@ -769,10 +703,6 @@
 	mgcp->actual.remote_port = conf->remote_port >= 0 ? (uint16_t)conf->remote_port :
 		MGCP_CLIENT_REMOTE_PORT_DEFAULT;
 
-	mgcp->actual.first_endpoint = conf->first_endpoint > 0 ? (uint16_t)conf->first_endpoint : 0;
-	mgcp->actual.last_endpoint = conf->last_endpoint > 0 ? (uint16_t)conf->last_endpoint : 0;
-	mgcp->actual.bts_base = conf->bts_base > 0 ? (uint16_t)conf->bts_base : 4000;
-
 	return mgcp;
 }
 
@@ -977,54 +907,6 @@
 	 */
 }
 
-static struct msgb *mgcp_msg_from_buf(mgcp_trans_id_t trans_id,
-				      const char *buf, int len)
-{
-	struct msgb *msg;
-
-	if (len > (4096 - 128)) {
-		LOGP(DLMGCP, LOGL_ERROR, "Cannot send to MGCP GW:"
-		     " message too large: %d\n", len);
-		return NULL;
-	}
-
-	msg = msgb_alloc_headroom(4096, 128, "MGCP tx");
-	OSMO_ASSERT(msg);
-
-	char *dst = (char*)msgb_put(msg, len);
-	memcpy(dst, buf, len);
-	msg->l2h = msg->data;
-	msg->cb[MSGB_CB_MGCP_TRANS_ID] = trans_id;
-
-	return msg;
-}
-
-static struct msgb *mgcp_msg_from_str(mgcp_trans_id_t trans_id,
-				      const char *fmt, ...)
-{
-	static char compose[4096 - 128];
-	va_list ap;
-	int len;
-	OSMO_ASSERT(fmt);
-
-	va_start(ap, fmt);
-	len = vsnprintf(compose, sizeof(compose), fmt, ap);
-	va_end(ap);
-	if (len >= sizeof(compose)) {
-		LOGP(DLMGCP, LOGL_ERROR,
-		     "Message too large: trans_id=%u len=%d\n",
-		     trans_id, len);
-		return NULL;
-	}
-	if (len < 1) {
-		LOGP(DLMGCP, LOGL_ERROR,
-		     "Failed to compose message: trans_id=%u len=%d\n",
-		     trans_id, len);
-		return NULL;
-	}
-	return mgcp_msg_from_buf(trans_id, compose, len);
-}
-
 static mgcp_trans_id_t mgcp_client_next_trans_id(struct mgcp_client *mgcp)
 {
 	/* avoid zero trans_id to distinguish from unset trans_id */
@@ -1033,52 +915,6 @@
 	return mgcp->next_trans_id ++;
 }
 
-struct msgb *mgcp_msg_crcx(struct mgcp_client *mgcp,
-			   uint16_t rtp_endpoint, unsigned int call_id,
-			   enum mgcp_connection_mode mode)
-{
-	mgcp_trans_id_t trans_id = mgcp_client_next_trans_id(mgcp);
-	return mgcp_msg_from_str(trans_id,
-		 "CRCX %u %x@mgw MGCP 1.0\r\n"
-		 "C: %x\r\n"
-		 "L: p:20, a:AMR, nt:IN\r\n"
-		 "M: %s\r\n"
-		 ,
-		 trans_id,
-		 rtp_endpoint,
-		 call_id,
-		 mgcp_client_cmode_name(mode));
-}
-
-struct msgb *mgcp_msg_mdcx(struct mgcp_client *mgcp,
-			   uint16_t rtp_endpoint, const char *rtp_conn_addr,
-			   uint16_t rtp_port, enum mgcp_connection_mode mode)
-
-{
-	mgcp_trans_id_t trans_id = mgcp_client_next_trans_id(mgcp);
-	return mgcp_msg_from_str(trans_id,
-		 "MDCX %u %x@mgw MGCP 1.0\r\n"
-		 "M: %s\r\n"
-		 "\r\n"
-		 "c=IN IP4 %s\r\n"
-		 "m=audio %u RTP/AVP 255\r\n"
-		 ,
-		 trans_id,
-		 rtp_endpoint,
-		 mgcp_client_cmode_name(mode),
-		 rtp_conn_addr,
-		 rtp_port);
-}
-
-struct msgb *mgcp_msg_dlcx(struct mgcp_client *mgcp, uint16_t rtp_endpoint,
-			   unsigned int call_id)
-{
-	mgcp_trans_id_t trans_id = mgcp_client_next_trans_id(mgcp);
-	return mgcp_msg_from_str(trans_id,
-				 "DLCX %u %x@mgw MGCP 1.0\r\n"
-				 "C: %x\r\n", trans_id, rtp_endpoint, call_id);
-}
-
 #define MGCP_CRCX_MANDATORY (MGCP_MSG_PRESENCE_ENDPOINT | \
 			     MGCP_MSG_PRESENCE_CALL_ID | \
 			     MGCP_MSG_PRESENCE_CONN_MODE)
diff --git a/src/libosmo-mgcp-client/mgcp_client_vty.c b/src/libosmo-mgcp-client/mgcp_client_vty.c
index ecc205f..8fa0272 100644
--- a/src/libosmo-mgcp-client/mgcp_client_vty.c
+++ b/src/libosmo-mgcp-client/mgcp_client_vty.c
@@ -101,23 +101,14 @@
 		 MGW_STR "remote bind to connect to MGCP gateway with\n"
 		 "remote bind port\n")
 
-DEFUN(cfg_mgw_endpoint_range, cfg_mgw_endpoint_range_cmd,
+DEFUN_DEPRECATED(cfg_mgw_endpoint_range, cfg_mgw_endpoint_range_cmd,
       "mgw endpoint-range <1-65534> <1-65534>",
-      MGW_STR "usable range of endpoint identifiers\n"
-      "set first usable endpoint identifier\n"
-      "set last usable endpoint identifier\n")
+      MGW_STR "DEPRECATED: the endpoint range cannot be defined by the client\n"
+      "-\n" "-\n")
 {
-	uint16_t first_endpoint = atoi(argv[0]);
-	uint16_t last_endpoint = atoi(argv[1]);
-
-	if (last_endpoint < first_endpoint) {
-		vty_out(vty, "last endpoint must be greater than first endpoint!%s",
-			VTY_NEWLINE);
-		return CMD_SUCCESS;
-	}
-
-	global_mgcp_client_conf->first_endpoint = first_endpoint;
-	global_mgcp_client_conf->last_endpoint = last_endpoint;
+	vty_out(vty, "Please do not use legacy config 'mgw endpoint-range'"
+		" (the range can no longer be defined by the MGCP client)%s",
+		VTY_NEWLINE);
 	return CMD_SUCCESS;
 }
 ALIAS_DEPRECATED(cfg_mgw_endpoint_range, cfg_mgcpgw_endpoint_range_cmd,
@@ -128,14 +119,15 @@
 
 #define BTS_START_STR "First UDP port allocated for the BTS side\n"
 #define UDP_PORT_STR "UDP Port number\n"
-DEFUN(cfg_mgw_rtp_bts_base_port,
+DEFUN_DEPRECATED(cfg_mgw_rtp_bts_base_port,
       cfg_mgw_rtp_bts_base_port_cmd,
       "mgw bts-base <0-65534>",
       MGW_STR
-      BTS_START_STR
-      UDP_PORT_STR)
+      "DEPRECATED: there is no explicit BTS side in current osmo-mgw\n" "-\n")
 {
-	global_mgcp_client_conf->bts_base = atoi(argv[0]);
+	vty_out(vty, "Please do not use legacy config 'mgw bts-base'"
+		" (there is no explicit BTS side in an MGW anymore)%s",
+		VTY_NEWLINE);
 	return CMD_SUCCESS;
 }
 ALIAS_DEPRECATED(cfg_mgw_rtp_bts_base_port,
@@ -149,9 +141,6 @@
 {
 	const char *addr;
 	int port;
-	uint16_t first_endpoint;
-	uint16_t last_endpoint;
-	uint16_t bts_base;
 
 	addr = global_mgcp_client_conf->local_addr;
 	if (addr)
@@ -171,19 +160,6 @@
 		vty_out(vty, "%smgw remote-port %u%s", indent,
 			(uint16_t)port, VTY_NEWLINE);
 
-	first_endpoint = global_mgcp_client_conf->first_endpoint;
-	last_endpoint = global_mgcp_client_conf->last_endpoint;
-	if (last_endpoint != 0) {
-		vty_out(vty, "%smgw endpoint-range %u %u%s", indent,
-			first_endpoint, last_endpoint, VTY_NEWLINE);
-	}
-
-	bts_base = global_mgcp_client_conf->bts_base;
-	if (bts_base) {
-		vty_out(vty, "%smgw bts-base %u%s", indent,
-			bts_base, VTY_NEWLINE);
-	}
-
 	return CMD_SUCCESS;
 }
 
diff --git a/tests/mgcp_client/mgcp_client_test.c b/tests/mgcp_client/mgcp_client_test.c
index e6982e4..1db70cf 100644
--- a/tests/mgcp_client/mgcp_client_test.c
+++ b/tests/mgcp_client/mgcp_client_test.c
@@ -135,87 +135,6 @@
 	return trans_id;
 }
 
-void test_crcx(void)
-{
-	struct msgb *msg;
-	mgcp_trans_id_t trans_id;
-
-	printf("\n===== %s =====\n", __func__);
-
-	if (mgcp)
-		talloc_free(mgcp);
-	mgcp = mgcp_client_init(ctx, &conf);
-
-	msg = mgcp_msg_crcx(mgcp, 23, 42, MGCP_CONN_LOOPBACK);
-	trans_id = dummy_mgcp_send(msg);
-
-	reply_to(trans_id, 200, "OK",
-		"I: 1\r\n\r\n"
-		"v=0\r\n"
-		"o=- 1 23 IN IP4 10.9.1.120\r\n"
-		"s=-\r\n"
-		"c=IN IP4 10.9.1.120\r\n"
-		"t=0 0\r\n"
-		"m=audio 16002 RTP/AVP 110 96\r\n"
-		"a=rtpmap:110 AMR/8000\r\n"
-		"a=rtpmap:96 GSM-EFR/8000\r\n"
-		"a=ptime:20\r\n");
-}
-
-void test_crcx_long_conn_id(void)
-{
-	struct msgb *msg;
-	mgcp_trans_id_t trans_id;
-
-	printf("\n===== %s =====\n", __func__);
-
-	if (mgcp)
-		talloc_free(mgcp);
-	mgcp = mgcp_client_init(ctx, &conf);
-
-	msg = mgcp_msg_crcx(mgcp, 23, 42, MGCP_CONN_LOOPBACK);
-	trans_id = dummy_mgcp_send(msg);
-
-	reply_to(trans_id, 200, "OK",
-		"I: 123456789abcdef0123456789ABCDEF0\r\n\r\n"
-		"v=0\r\n"
-		"o=- 1 23 IN IP4 10.9.1.120\r\n"
-		"s=-\r\n"
-		"c=IN IP4 10.9.1.120\r\n"
-		"t=0 0\r\n"
-		"m=audio 16002 RTP/AVP 110 96\r\n"
-		"a=rtpmap:110 AMR/8000\r\n"
-		"a=rtpmap:96 GSM-EFR/8000\r\n"
-		"a=ptime:20\r\n");
-}
-
-void test_crcx_too_long_conn_id(void)
-{
-	struct msgb *msg;
-	mgcp_trans_id_t trans_id;
-
-	printf("\n===== %s =====\n", __func__);
-
-	if (mgcp)
-		talloc_free(mgcp);
-	mgcp = mgcp_client_init(ctx, &conf);
-
-	msg = mgcp_msg_crcx(mgcp, 23, 42, MGCP_CONN_LOOPBACK);
-	trans_id = dummy_mgcp_send(msg);
-
-	reply_to(trans_id, 200, "OK",
-		"I: 123456789abcdef0123456789ABCDEF01001029\r\n\r\n"
-		"v=0\r\n"
-		"o=- 1 23 IN IP4 10.9.1.120\r\n"
-		"s=-\r\n"
-		"c=IN IP4 10.9.1.120\r\n"
-		"t=0 0\r\n"
-		"m=audio 16002 RTP/AVP 110 96\r\n"
-		"a=rtpmap:110 AMR/8000\r\n"
-		"a=rtpmap:96 GSM-EFR/8000\r\n"
-		"a=ptime:20\r\n");
-}
-
 void test_mgcp_msg(void)
 {
 	struct msgb *msg;
@@ -618,14 +537,11 @@
 
 	mgcp_client_conf_init(&conf);
 
-	test_crcx();
 	test_mgcp_msg();
 	test_mgcp_client_cancel();
 	test_sdp_section_start();
 	test_map_codec_to_pt_and_map_pt_to_codec();
 	test_map_pt_to_codec();
-	test_crcx_long_conn_id();
-	test_crcx_too_long_conn_id();
 
 	printf("Done\n");
 	fprintf(stderr, "Done\n");
diff --git a/tests/mgcp_client/mgcp_client_test.err b/tests/mgcp_client/mgcp_client_test.err
index b20f93f..1d5a1a0 100644
--- a/tests/mgcp_client/mgcp_client_test.err
+++ b/tests/mgcp_client/mgcp_client_test.err
@@ -66,6 +66,4 @@
 DLMGCP ptmap contains illegal mapping: codec=0 maps to pt=100
 DLMGCP ptmap contains illegal mapping: codec=113 maps to pt=2
 DLMGCP ptmap contains illegal mapping: codec=0 maps to pt=100
-DLMGCP Failed to parse MGCP response (parameter label: I): the received conn ID is too long: 39, maximum is 32 characters
-DLMGCP Cannot parse MGCP response (head parameters)
 Done
diff --git a/tests/mgcp_client/mgcp_client_test.ok b/tests/mgcp_client/mgcp_client_test.ok
index 40e32ba..65b5298 100644
--- a/tests/mgcp_client/mgcp_client_test.ok
+++ b/tests/mgcp_client/mgcp_client_test.ok
@@ -1,46 +1,4 @@
 
-===== test_crcx =====
-composed:
------
-CRCX 1 17@mgw MGCP 1.0
-C: 2a
-L: p:20, a:AMR, nt:IN
-M: loopback
-
------
-composed response:
------
-200 1 OK
-I: 1
-
-v=0
-o=- 1 23 IN IP4 10.9.1.120
-s=-
-c=IN IP4 10.9.1.120
-t=0 0
-m=audio 16002 RTP/AVP 110 96
-a=rtpmap:110 AMR/8000
-a=rtpmap:96 GSM-EFR/8000
-a=ptime:20
-
------
-response cb received:
-  head.response_code = 200
-  head.trans_id = 1
-  head.conn_id = 1
-  head.comment = OK
-  audio_port = 16002
-  audio_ip = 10.9.1.120
-  ptime = 20
-  codecs_len = 2
-  codecs[0] = 112
-  codecs[1] = 110
-  ptmap_len = 2
-  ptmap[0].codec = 112
-  ptmap[0].pt = 110
-  ptmap[1].codec = 110
-  ptmap[1].pt = 96
-
 Generated CRCX message:
 CRCX 1 23@mgw MGCP 1.0
 C: 2f
@@ -196,72 +154,4 @@
  2 <= 2
  100 <= 100
 
-
-===== test_crcx_long_conn_id =====
-composed:
------
-CRCX 1 17@mgw MGCP 1.0
-C: 2a
-L: p:20, a:AMR, nt:IN
-M: loopback
-
------
-composed response:
------
-200 1 OK
-I: 123456789abcdef0123456789ABCDEF0
-
-v=0
-o=- 1 23 IN IP4 10.9.1.120
-s=-
-c=IN IP4 10.9.1.120
-t=0 0
-m=audio 16002 RTP/AVP 110 96
-a=rtpmap:110 AMR/8000
-a=rtpmap:96 GSM-EFR/8000
-a=ptime:20
-
------
-response cb received:
-  head.response_code = 200
-  head.trans_id = 1
-  head.conn_id = 123456789abcdef0123456789ABCDEF0
-  head.comment = OK
-  audio_port = 16002
-  audio_ip = 10.9.1.120
-  ptime = 20
-  codecs_len = 2
-  codecs[0] = 112
-  codecs[1] = 110
-  ptmap_len = 2
-  ptmap[0].codec = 112
-  ptmap[0].pt = 110
-  ptmap[1].codec = 110
-  ptmap[1].pt = 96
-
-===== test_crcx_too_long_conn_id =====
-composed:
------
-CRCX 1 17@mgw MGCP 1.0
-C: 2a
-L: p:20, a:AMR, nt:IN
-M: loopback
-
------
-composed response:
------
-200 1 OK
-I: 123456789abcdef0123456789ABCDEF01001029
-
-v=0
-o=- 1 23 IN IP4 10.9.1.120
-s=-
-c=IN IP4 10.9.1.120
-t=0 0
-m=audio 16002 RTP/AVP 110 96
-a=rtpmap:110 AMR/8000
-a=rtpmap:96 GSM-EFR/8000
-a=ptime:20
-
------
 Done
