diff --git a/TODO-RELEASE b/TODO-RELEASE
index d198b97..917c995 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	API/ABI change	parse and represent connection identifiers as hex strings
\ No newline at end of file
diff --git a/include/osmocom/mgcp/mgcp_common.h b/include/osmocom/mgcp/mgcp_common.h
index 0eb1388..29dc458 100644
--- a/include/osmocom/mgcp/mgcp_common.h
+++ b/include/osmocom/mgcp/mgcp_common.h
@@ -68,4 +68,8 @@
 	return 0;
 }
 
+/* String length of Connection Identifiers
+ * (see also RFC3435 2.1.3.2 Names of Connections) */
+#define MGCP_CONN_ID_LENGTH 32+1
+
 #endif
diff --git a/include/osmocom/mgcp/mgcp_conn.h b/include/osmocom/mgcp/mgcp_conn.h
index e0ae021..982a311 100644
--- a/include/osmocom/mgcp/mgcp_conn.h
+++ b/include/osmocom/mgcp/mgcp_conn.h
@@ -28,12 +28,12 @@
 #include <inttypes.h>
 
 struct mgcp_conn *mgcp_conn_alloc(void *ctx, struct mgcp_endpoint *endp,
-				  uint32_t id, enum mgcp_conn_type type,
+				  const char *id, enum mgcp_conn_type type,
 				  char *name);
-struct mgcp_conn *mgcp_conn_get(struct mgcp_endpoint *endp, uint32_t id);
+struct mgcp_conn *mgcp_conn_get(struct mgcp_endpoint *endp, const char *id);
 struct mgcp_conn_rtp *mgcp_conn_get_rtp(struct mgcp_endpoint *endp,
-					uint32_t id);
-void mgcp_conn_free(struct mgcp_endpoint *endp, uint32_t id);
+					const char *id);
+void mgcp_conn_free(struct mgcp_endpoint *endp, const char *id);
 void mgcp_conn_free_oldest(struct mgcp_endpoint *endp);
 void mgcp_conn_free_all(struct mgcp_endpoint *endp);
 char *mgcp_conn_dump(struct mgcp_conn *conn);
diff --git a/include/osmocom/mgcp/mgcp_internal.h b/include/osmocom/mgcp/mgcp_internal.h
index b9c1731..c3f9ba1 100644
--- a/include/osmocom/mgcp/mgcp_internal.h
+++ b/include/osmocom/mgcp/mgcp_internal.h
@@ -30,8 +30,10 @@
 
 #define CI_UNUSED 0
 
-#define CONN_ID_BTS 0
-#define CONN_ID_NET 1
+/* FIXME: This this is only needed to compile the currently
+ * broken OSMUX support. Remove when fixed */
+#define CONN_ID_BTS "0"
+#define CONN_ID_NET "1"
 
 enum mgcp_trunk_type {
 	MGCP_TRUNK_VIRTUAL,
@@ -203,7 +205,7 @@
 	enum mgcp_connection_mode mode_orig;
 
 	/*!< connection id to identify the conntion */
-	uint32_t id;
+	char id[MGCP_CONN_ID_LENGTH];
 
 	/*!< human readable name (vty, logging) */
 	char name[256];
diff --git a/include/osmocom/mgcp/mgcp_msg.h b/include/osmocom/mgcp/mgcp_msg.h
index b7d52bb..7732865 100644
--- a/include/osmocom/mgcp/mgcp_msg.h
+++ b/include/osmocom/mgcp/mgcp_msg.h
@@ -43,7 +43,7 @@
 
 int mgcp_verify_call_id(struct mgcp_endpoint *endp, const char *callid);
 
-int mgcp_verify_ci(struct mgcp_endpoint *endp, const char *ci);
+int mgcp_verify_ci(struct mgcp_endpoint *endp, const char *conn_id);
 
 char *mgcp_strline(char *str, char **saveptr);
 
@@ -54,5 +54,3 @@
 #define for_each_non_empty_line(line, save)\
 	for (line = strtok_r(NULL, "\r\n", &save); line;\
 	     line = strtok_r(NULL, "\r\n", &save))
-
-int mgcp_parse_ci(uint32_t *conn_id, const char *ci);
diff --git a/include/osmocom/mgcp_client/mgcp_client.h b/include/osmocom/mgcp_client/mgcp_client.h
index 8a2c404..b649abd 100644
--- a/include/osmocom/mgcp_client/mgcp_client.h
+++ b/include/osmocom/mgcp_client/mgcp_client.h
@@ -29,6 +29,7 @@
        int response_code;
        mgcp_trans_id_t trans_id;
        const char *comment;
+	char conn_id[MGCP_CONN_ID_LENGTH];
 };
 
 struct mgcp_response {
@@ -62,7 +63,7 @@
 	uint32_t presence;
 	char endpoint[MGCP_ENDPOINT_MAXLEN];
 	unsigned int call_id;
-	uint32_t conn_id;
+	char *conn_id;
 	uint16_t audio_port;
 	char *audio_ip;
 	enum mgcp_connection_mode conn_mode;
diff --git a/src/libosmo-mgcp-client/mgcp_client.c b/src/libosmo-mgcp-client/mgcp_client.c
index a35ad6f..a89da99 100644
--- a/src/libosmo-mgcp-client/mgcp_client.c
+++ b/src/libosmo-mgcp-client/mgcp_client.c
@@ -716,7 +716,7 @@
 
 	/* Add connection id */
 	if (mgcp_msg->presence & MGCP_MSG_PRESENCE_CONN_ID)
-		rc += msgb_printf(msg, "I: %u\r\n", mgcp_msg->conn_id);
+		rc += msgb_printf(msg, "I: %s\r\n", mgcp_msg->conn_id);
 
 	/* Add local connection options */
 	if (mgcp_msg->presence & MGCP_MSG_PRESENCE_CONN_ID
diff --git a/src/libosmo-mgcp/mgcp_conn.c b/src/libosmo-mgcp/mgcp_conn.c
index e07b766..31713cb 100644
--- a/src/libosmo-mgcp/mgcp_conn.c
+++ b/src/libosmo-mgcp/mgcp_conn.c
@@ -78,7 +78,7 @@
  *  \param[in] type connection type (e.g. MGCP_CONN_TYPE_RTP)
  *  \returns pointer to allocated connection, NULL on error */
 struct mgcp_conn *mgcp_conn_alloc(void *ctx, struct mgcp_endpoint *endp,
-				  uint32_t id, enum mgcp_conn_type type,
+				  const char *id, enum mgcp_conn_type type,
 				  char *name)
 {
 	struct mgcp_conn *conn;
@@ -86,6 +86,14 @@
 	OSMO_ASSERT(endp->conns.next != NULL && endp->conns.prev != NULL);
 	OSMO_ASSERT(strlen(name) < sizeof(conn->name));
 
+	/* Id is a mandatory parameter */
+	if (!id)
+		return NULL;
+
+	/* Prevent over long id strings */
+	if (strlen(id) >= MGCP_CONN_ID_LENGTH)
+		return NULL;
+
 	/* Do not allow more then two connections */
 	if (llist_count(&endp->conns) >= endp->type->max_conns)
 		return NULL;
@@ -102,9 +110,9 @@
 	conn->type = type;
 	conn->mode = MGCP_CONN_NONE;
 	conn->mode_orig = MGCP_CONN_NONE;
-	conn->id = id;
 	conn->u.rtp.conn = conn;
 	strcpy(conn->name, name);
+	osmo_strlcpy(conn->id, id, sizeof(conn->id));
 
 	switch (type) {
 	case MGCP_CONN_TYPE_RTP:
@@ -126,15 +134,17 @@
  *  \param[in] endp associated endpoint
  *  \param[in] id identification number of the connection
  *  \returns pointer to allocated connection, NULL if not found */
-struct mgcp_conn *mgcp_conn_get(struct mgcp_endpoint *endp, uint32_t id)
+struct mgcp_conn *mgcp_conn_get(struct mgcp_endpoint *endp, const char *id)
 {
 	OSMO_ASSERT(endp);
+	OSMO_ASSERT(id);
+	OSMO_ASSERT(strlen(id) < MGCP_CONN_ID_LENGTH);
 	OSMO_ASSERT(endp->conns.next != NULL && endp->conns.prev != NULL);
 
 	struct mgcp_conn *conn;
 
 	llist_for_each_entry(conn, &endp->conns, entry) {
-		if (conn->id == id)
+		if (strncmp(conn->id, id, sizeof(conn->id)) == 0)
 			return conn;
 	}
 
@@ -145,9 +155,12 @@
  *  \param[in] endp associated endpoint
  *  \param[in] id identification number of the connection
  *  \returns pointer to allocated connection, NULL if not found */
-struct mgcp_conn_rtp *mgcp_conn_get_rtp(struct mgcp_endpoint *endp, uint32_t id)
+struct mgcp_conn_rtp *mgcp_conn_get_rtp(struct mgcp_endpoint *endp,
+					const char *id)
 {
 	OSMO_ASSERT(endp);
+	OSMO_ASSERT(id);
+	OSMO_ASSERT(strlen(id) < MGCP_CONN_ID_LENGTH);
 	OSMO_ASSERT(endp->conns.next != NULL && endp->conns.prev != NULL);
 
 	struct mgcp_conn *conn;
@@ -165,9 +178,11 @@
 /*! free a connection by its ID.
  *  \param[in] endp associated endpoint
  *  \param[in] id identification number of the connection */
-void mgcp_conn_free(struct mgcp_endpoint *endp, uint32_t id)
+void mgcp_conn_free(struct mgcp_endpoint *endp, const char *id)
 {
 	OSMO_ASSERT(endp);
+	OSMO_ASSERT(id);
+	OSMO_ASSERT(strlen(id) < MGCP_CONN_ID_LENGTH);
 	OSMO_ASSERT(endp->conns.next != NULL && endp->conns.prev != NULL);
 
 	struct mgcp_conn *conn;
@@ -235,7 +250,7 @@
  *  \returns human readble string */
 char *mgcp_conn_dump(struct mgcp_conn *conn)
 {
-	static char str[sizeof(conn->name)+256];
+	static char str[sizeof(conn->name)+sizeof(conn->id)+256];
 
 	if (!conn) {
 		snprintf(str, sizeof(str), "(null connection)");
@@ -245,7 +260,7 @@
 	switch (conn->type) {
 	case MGCP_CONN_TYPE_RTP:
 		/* Dump RTP connection */
-		snprintf(str, sizeof(str), "(%s/rtp, id:%u, ip:%s, "
+		snprintf(str, sizeof(str), "(%s/rtp, id:0x%s, ip:%s, "
 			 "rtp:%u rtcp:%u)",
 			 conn->name,
 			 conn->id,
diff --git a/src/libosmo-mgcp/mgcp_msg.c b/src/libosmo-mgcp/mgcp_msg.c
index 763a5a1..9803921 100644
--- a/src/libosmo-mgcp/mgcp_msg.c
+++ b/src/libosmo-mgcp/mgcp_msg.c
@@ -330,21 +330,39 @@
   * \param[in] endp pointer to endpoint
   * \param{in] connection id to verify
   * \returns 1 when connection id seems plausible, 0 on error */
-int mgcp_verify_ci(struct mgcp_endpoint *endp, const char *ci)
+int mgcp_verify_ci(struct mgcp_endpoint *endp, const char *conn_id)
 {
-	uint32_t id;
-
-	if (!endp)
+	/* Check for null identifiers */
+	if (!conn_id) {
+		LOGP(DLMGCP, LOGL_ERROR,
+		     "endpoint:%x invalid ConnectionIdentifier (missing)\n",
+		     ENDPOINT_NUMBER(endp));
 		return -1;
+	}
 
-	id = strtoul(ci, NULL, 10);
+	/* Check for empty connection identifiers */
+	if (strlen(conn_id) == 0) {
+		LOGP(DLMGCP, LOGL_ERROR,
+		     "endpoint:%x invalid ConnectionIdentifier (empty)\n",
+		     ENDPOINT_NUMBER(endp));
+		return -1;
+	}
 
-	if (mgcp_conn_get(endp, id))
+	/* Check for over long connection identifiers */
+	if (strlen(conn_id) > MGCP_CONN_ID_LENGTH) {
+		LOGP(DLMGCP, LOGL_ERROR,
+		     "endpoint:%x invalid ConnectionIdentifier (too long) 0x%s\n",
+		     ENDPOINT_NUMBER(endp), conn_id);
+		return -1;
+	}
+
+	/* Check if connection exists */
+	if (mgcp_conn_get(endp, conn_id))
 		return 0;
 
 	LOGP(DLMGCP, LOGL_ERROR,
-	     "endpoint:%x No connection found under ConnectionIdentifier %u\n",
-	     ENDPOINT_NUMBER(endp), id);
+	     "endpoint:%x no connection found under ConnectionIdentifier 0x%s\n",
+	     ENDPOINT_NUMBER(endp), conn_id);
 
 	return -1;
 }
@@ -386,20 +404,3 @@
 
 	return result;
 }
-
-/*! Parse CI from a given string.
-  * \param[out] caller provided memory to store the result
-  * \param{in] string containing the connection id
-  * \returns 0 on success, -1 on error */
-int mgcp_parse_ci(uint32_t *conn_id, const char *ci)
-{
-
-	OSMO_ASSERT(conn_id);
-
-	if (!ci)
-		return -1;
-
-	*conn_id = strtoul(ci, NULL, 10);
-
-	return 0;
-}
diff --git a/src/libosmo-mgcp/mgcp_network.c b/src/libosmo-mgcp/mgcp_network.c
index d51b829..a02b0d1 100644
--- a/src/libosmo-mgcp/mgcp_network.c
+++ b/src/libosmo-mgcp/mgcp_network.c
@@ -73,11 +73,11 @@
 		rc = osmo_sock_local_ip(addr, inet_ntoa(conn->end.addr));
 		if (rc < 0)
 			LOGP(DRTP, LOGL_ERROR,
-			     "endpoint:%x CI:%i local interface auto detection failed, using configured addresses...\n",
+			     "endpoint:%x CI:%s local interface auto detection failed, using configured addresses...\n",
 			     ENDPOINT_NUMBER(endp), conn->conn->id);
 		else {
 			LOGP(DRTP, LOGL_DEBUG,
-			     "endpoint:%x CI:%i selected local rtp bind ip %s by probing using remote ip %s\n",
+			     "endpoint:%x CI:%s selected local rtp bind ip %s by probing using remote ip %s\n",
 			     ENDPOINT_NUMBER(endp), conn->conn->id, addr,
 			     inet_ntoa(conn->end.addr));
 			return;
@@ -90,7 +90,7 @@
 		 * if so, use that IP-Address */
 		strncpy(addr, endp->cfg->net_ports.bind_addr, INET_ADDRSTRLEN);
 		LOGP(DRTP, LOGL_DEBUG,
-		     "endpoint:%x CI:%i using configured rtp bind ip as local bind ip %s\n",
+		     "endpoint:%x CI:%s using configured rtp bind ip as local bind ip %s\n",
 		     ENDPOINT_NUMBER(endp), conn->conn->id, addr);
 	} else {
 		/* No specific bind IP is configured for the RTP traffic, so
@@ -98,7 +98,7 @@
 		 * as bind IP */
 		strncpy(addr, endp->cfg->source_addr, INET_ADDRSTRLEN);
 		LOGP(DRTP, LOGL_DEBUG,
-		     "endpoint:%x CI:%i using mgcp bind ip as local rtp bind ip: %s\n",
+		     "endpoint:%x CI:%s using mgcp bind ip as local rtp bind ip: %s\n",
 		     ENDPOINT_NUMBER(endp), conn->conn->id, addr);
 	}
 }
@@ -1217,7 +1217,7 @@
 	struct mgcp_rtp_end *end;
 	char local_ip_addr[INET_ADDRSTRLEN];
 
-	snprintf(name, sizeof(name), "%s-%u", conn->conn->name, conn->conn->id);
+	snprintf(name, sizeof(name), "%s-%s", conn->conn->name, conn->conn->id);
 	end = &conn->end;
 
 	if (end->rtp.fd != -1 || end->rtcp.fd != -1) {
diff --git a/src/libosmo-mgcp/mgcp_osmux.c b/src/libosmo-mgcp/mgcp_osmux.c
index 09b2636..5030812 100644
--- a/src/libosmo-mgcp/mgcp_osmux.c
+++ b/src/libosmo-mgcp/mgcp_osmux.c
@@ -573,7 +573,7 @@
 	if (conn->osmux.state != OSMUX_STATE_ENABLED)
 		return;
 
-	LOGP(DLMGCP, LOGL_INFO, "Releasing connection %u using Osmux CID %u\n",
+	LOGP(DLMGCP, LOGL_INFO, "Releasing connection %s using Osmux CID %u\n",
 	     conn->conn->id, conn->osmux.cid);
 	osmux_xfrm_input_close_circuit(conn->osmux.in, conn->osmux.cid);
 	conn->osmux.state = OSMUX_STATE_DISABLED;
diff --git a/src/libosmo-mgcp/mgcp_protocol.c b/src/libosmo-mgcp/mgcp_protocol.c
index f542745..672a8d4 100644
--- a/src/libosmo-mgcp/mgcp_protocol.c
+++ b/src/libosmo-mgcp/mgcp_protocol.c
@@ -221,7 +221,7 @@
 		osmux_extension[0] = '\0';
 	}
 
-	rc = msgb_printf(sdp, "I: %u%s\n\n", conn->conn->id, osmux_extension);
+	rc = msgb_printf(sdp, "I: %s%s\n\n", conn->conn->id, osmux_extension);
 	if (rc < 0)
 		goto error;
 
@@ -443,12 +443,11 @@
 
 	const char *local_options = NULL;
 	const char *callid = NULL;
-	const char *ci = NULL;
 	const char *mode = NULL;
 	char *line;
 	int have_sdp = 0, osmux_cid = -1;
 	struct mgcp_conn_rtp *conn = NULL;
-	uint32_t conn_id;
+        const char *conn_id = NULL;
 	char conn_name[512];
 
 	LOGP(DLMGCP, LOGL_NOTICE, "CRCX: creating new connection ...\n");
@@ -469,7 +468,7 @@
 			callid = (const char *)line + 3;
 			break;
 		case 'I':
-			ci = (const char *)line + 3;
+			conn_id = (const char *)line + 3;
 			break;
 		case 'M':
 			mode = (const char *)line + 3;
@@ -511,7 +510,7 @@
 		return create_err_response(endp, 400, "CRCX", p->trans);
 	}
 
-	if (!ci) {
+	if (!conn_id) {
 		LOGP(DLMGCP, LOGL_ERROR,
 		     "CRCX: endpoint:%x insufficient parameters, missing connection id\n",
 		     ENDPOINT_NUMBER(endp));
@@ -561,13 +560,6 @@
 	set_local_cx_options(endp->tcfg->endpoints, &endp->local_options,
 			     local_options);
 
-	if (mgcp_parse_ci(&conn_id, ci)) {
-		LOGP(DLMGCP, LOGL_ERROR,
-		     "CRCX: endpoint:%x insufficient parameters, missing ci (connectionIdentifier)\n",
-		     ENDPOINT_NUMBER(endp));
-		return create_err_response(endp, 400, "CRCX", p->trans);
-	}
-
 	/* Only accept another connection when the connection ID is different. */
 	if (mgcp_conn_get_rtp(endp, conn_id)) {
 		LOGP(DLMGCP, LOGL_ERROR,
@@ -583,7 +575,7 @@
 		}
 	}
 
-	snprintf(conn_name, sizeof(conn_name), "%s-%u", callid, conn_id);
+	snprintf(conn_name, sizeof(conn_name), "%s-%s", callid, conn_id);
 	mgcp_conn_alloc(NULL, endp, conn_id, MGCP_CONN_TYPE_RTP,
 			conn_name);
 	conn = mgcp_conn_get_rtp(endp, conn_id);
@@ -664,7 +656,7 @@
 	}
 
 	LOGP(DLMGCP, LOGL_DEBUG,
-	     "CRCX: endpoint:%x Creating connection: CI: %u port: %u\n",
+	     "CRCX: endpoint:%x Creating connection: CI: %s port: %u\n",
 	     ENDPOINT_NUMBER(endp), conn->conn->id, conn->end.local_port);
 	if (p->cfg->change_cb)
 		p->cfg->change_cb(tcfg, ENDPOINT_NUMBER(endp), MGCP_ENDP_CRCX);
@@ -695,11 +687,10 @@
 	int silent = 0;
 	int have_sdp = 0;
 	char *line;
-	const char *ci = NULL;
 	const char *local_options = NULL;
 	const char *mode = NULL;
 	struct mgcp_conn_rtp *conn = NULL;
-	uint32_t conn_id;
+        const char *conn_id = NULL;
 
 	LOGP(DLMGCP, LOGL_NOTICE, "MDCX: modifying existing connection ...\n");
 
@@ -723,8 +714,8 @@
 				goto error3;
 			break;
 		case 'I':
-			ci = (const char *)line + 3;
-			if (mgcp_verify_ci(endp, ci) != 0)
+			conn_id = (const char *)line + 3;
+			if (mgcp_verify_ci(endp, conn_id) != 0)
 				goto error3;
 			break;
 		case 'L':
@@ -749,7 +740,7 @@
 	}
 
 mgcp_header_done:
-	if (mgcp_parse_ci(&conn_id, ci)) {
+	if (!conn_id) {
 		LOGP(DLMGCP, LOGL_ERROR,
 		     "MDCX: endpoint:%x insufficient parameters, missing ci (connectionIdentifier)\n",
 		     ENDPOINT_NUMBER(endp));
@@ -849,9 +840,8 @@
 	int silent = 0;
 	char *line;
 	char stats[1048];
-	const char *ci = NULL;
+	const char *conn_id = NULL;
 	struct mgcp_conn_rtp *conn = NULL;
-	uint32_t conn_id;
 
 	if (p->found != 0)
 		return create_err_response(NULL, error_code, "DLCX", p->trans);
@@ -877,8 +867,8 @@
 				goto error3;
 			break;
 		case 'I':
-			ci = (const char *)line + 3;
-			if (mgcp_verify_ci(endp, ci) != 0)
+			conn_id = (const char *)line + 3;
+			if (mgcp_verify_ci(endp, conn_id) != 0)
 				goto error3;
 			break;
 		case 'Z':
@@ -919,7 +909,7 @@
 	/* When no connection id is supplied, we will interpret this as a
 	 * wildcarded DLCX and drop all connections at once. (See also
 	 * RFC3435 Section F.7) */
-	if (!ci) {
+	if (!conn_id) {
 		LOGP(DLMGCP, LOGL_NOTICE,
 		     "DLCX: endpoint:%x missing ci (connectionIdentifier), will remove all connections at once\n",
 		     ENDPOINT_NUMBER(endp));
@@ -932,14 +922,6 @@
 		return create_ok_response(endp, 200, "DLCX", p->trans);
 	}
 
-	/* Parse the connection id */
-	if (mgcp_parse_ci(&conn_id, ci)) {
-		LOGP(DLMGCP, LOGL_ERROR,
-		     "DLCX: endpoint:%x insufficient parameters, invalid ci (connectionIdentifier)\n",
-		     ENDPOINT_NUMBER(endp));
-		return create_err_response(endp, 400, "DLCX", p->trans);
-	}
-
 	/* Find the connection */
 	conn = mgcp_conn_get_rtp(endp, conn_id);
 	if (!conn)
diff --git a/src/libosmo-mgcp/mgcp_sdp.c b/src/libosmo-mgcp/mgcp_sdp.c
index f45d6e7..666b8c2 100644
--- a/src/libosmo-mgcp/mgcp_sdp.c
+++ b/src/libosmo-mgcp/mgcp_sdp.c
@@ -365,7 +365,7 @@
 
 	rc = msgb_printf(sdp,
 			 "v=0\r\n"
-			 "o=- %u 23 IN IP4 %s\r\n"
+			 "o=- %s 23 IN IP4 %s\r\n"
 			 "s=-\r\n"
 			 "c=IN IP4 %s\r\n"
 			 "t=0 0\r\n", conn->conn->id, addr, addr);
diff --git a/src/libosmo-mgcp/mgcp_vty.c b/src/libosmo-mgcp/mgcp_vty.c
index 80396e0..e938391 100644
--- a/src/libosmo-mgcp/mgcp_vty.c
+++ b/src/libosmo-mgcp/mgcp_vty.c
@@ -970,7 +970,7 @@
 	struct mgcp_trunk_config *trunk;
 	struct mgcp_endpoint *endp;
 	struct mgcp_conn_rtp *conn;
-	uint32_t conn_id;
+        const char *conn_id = NULL;
 
 	trunk = find_trunk(g_cfg, atoi(argv[0]));
 	if (!trunk) {
@@ -994,11 +994,11 @@
 
 	endp = &trunk->endpoints[endp_no];
 
-	conn_id = strtoul(argv[2], NULL, 10);
+	conn_id = argv[2];
 	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);
+		vty_out(vty, "Conn ID %s is invalid.%s",
+			conn_id, VTY_NEWLINE);
 		return CMD_WARNING;
 	}
 
diff --git a/tests/mgcp/mgcp_test.c b/tests/mgcp/mgcp_test.c
index f35dc93..7d976da 100644
--- a/tests/mgcp/mgcp_test.c
+++ b/tests/mgcp/mgcp_test.c
@@ -604,7 +604,7 @@
 		if (last_endpoint != -1) {
 			endp = &cfg->trunk.endpoints[last_endpoint];
 
-			conn = mgcp_conn_get_rtp(endp, 1);
+			conn = mgcp_conn_get_rtp(endp, "1");
 			if (conn) {
 				OSMO_ASSERT(conn);
 
@@ -1032,9 +1032,9 @@
 	endp.tcfg = &trunk;
 
 	INIT_LLIST_HEAD(&endp.conns);
-	mgcp_conn_alloc(NULL, &endp, 4711, MGCP_CONN_TYPE_RTP,
+	mgcp_conn_alloc(NULL, &endp, "4711", MGCP_CONN_TYPE_RTP,
 			"test-connection");
-	conn = mgcp_conn_get_rtp(&endp, 4711);
+	conn = mgcp_conn_get_rtp(&endp, "4711");
 	OSMO_ASSERT(conn);
 
 	rtp = &conn->end;
@@ -1110,7 +1110,7 @@
 
 	OSMO_ASSERT(last_endpoint == 1);
 	endp = &cfg->trunk.endpoints[last_endpoint];
-	conn = mgcp_conn_get_rtp(endp, 4711);
+	conn = mgcp_conn_get_rtp(endp, "4711");
 	OSMO_ASSERT(conn);
 	OSMO_ASSERT(conn->end.codec.payload_type == 18);
 	OSMO_ASSERT(conn->end.alt_codec.payload_type == 97);
@@ -1124,7 +1124,7 @@
 
 	OSMO_ASSERT(last_endpoint == 2);
 	endp = &cfg->trunk.endpoints[last_endpoint];
-	conn = mgcp_conn_get_rtp(endp, 90210);
+	conn = mgcp_conn_get_rtp(endp, "90210");
 	OSMO_ASSERT(conn);
 	OSMO_ASSERT(conn->end.codec.payload_type == 18);
 	OSMO_ASSERT(conn->end.alt_codec.payload_type == 97);
@@ -1138,7 +1138,7 @@
 
 	OSMO_ASSERT(last_endpoint == 3);
 	endp = &cfg->trunk.endpoints[last_endpoint];
-	conn = mgcp_conn_get_rtp(endp, 815);
+	conn = mgcp_conn_get_rtp(endp, "0815");
 	OSMO_ASSERT(conn);
 	OSMO_ASSERT(conn->end.codec.payload_type == -1);
 	OSMO_ASSERT(conn->end.alt_codec.payload_type == -1);
@@ -1152,7 +1152,7 @@
 
 	OSMO_ASSERT(last_endpoint == 4);
 	endp = &cfg->trunk.endpoints[last_endpoint];
-	conn = mgcp_conn_get_rtp(endp, 32168);
+	conn = mgcp_conn_get_rtp(endp, "32168");
 	OSMO_ASSERT(conn);
 	OSMO_ASSERT(conn->end.codec.payload_type == 18);
 	OSMO_ASSERT(conn->end.alt_codec.payload_type == -1);
@@ -1169,7 +1169,7 @@
 
 	OSMO_ASSERT(last_endpoint == 5);
 	endp = &cfg->trunk.endpoints[last_endpoint];
-	conn = mgcp_conn_get_rtp(endp, 3);
+	conn = mgcp_conn_get_rtp(endp, "3");
 	OSMO_ASSERT(conn);
 	OSMO_ASSERT(conn->end.codec.payload_type == 3);
 	OSMO_ASSERT(conn->end.alt_codec.payload_type == -1);
@@ -1181,7 +1181,7 @@
 	msgb_free(resp);
 	OSMO_ASSERT(last_endpoint == 5);
 	endp = &cfg->trunk.endpoints[last_endpoint];
-	conn = mgcp_conn_get_rtp(endp, 3);
+	conn = mgcp_conn_get_rtp(endp, "3");
 	OSMO_ASSERT(conn);
 	OSMO_ASSERT(conn->end.codec.payload_type == 3);
 	OSMO_ASSERT(conn->end.alt_codec.payload_type == -1);
@@ -1198,7 +1198,7 @@
 	talloc_free(endp->last_response);
 	talloc_free(endp->last_trans);
 	endp->last_response = endp->last_trans = NULL;
-	conn = mgcp_conn_get_rtp(endp, 3);
+	conn = mgcp_conn_get_rtp(endp, "3");
 	OSMO_ASSERT(!conn);
 
 	last_endpoint = -1;
@@ -1210,7 +1210,7 @@
 
 	OSMO_ASSERT(last_endpoint == 5);
 	endp = &cfg->trunk.endpoints[last_endpoint];
-	conn = mgcp_conn_get_rtp(endp, 3);
+	conn = mgcp_conn_get_rtp(endp, "3");
 	OSMO_ASSERT(conn);
 	OSMO_ASSERT(conn->end.codec.payload_type == 255);
 	OSMO_ASSERT(conn->end.alt_codec.payload_type == 0);
@@ -1232,9 +1232,9 @@
 
 	endp = &cfg->trunk.endpoints[1];
 
-	mgcp_conn_alloc(NULL, endp, 4711, MGCP_CONN_TYPE_RTP,
+	mgcp_conn_alloc(NULL, endp, "4711", MGCP_CONN_TYPE_RTP,
 			"test-connection");
-	conn = mgcp_conn_get_rtp(endp, 4711);
+	conn = mgcp_conn_get_rtp(endp, "4711");
 	OSMO_ASSERT(conn);
 
 	OSMO_ASSERT(conn->state.stats_initialized == 0);
diff --git a/tests/mgcp_client/mgcp_client_test.c b/tests/mgcp_client/mgcp_client_test.c
index 513f345..5fd59e9 100644
--- a/tests/mgcp_client/mgcp_client_test.c
+++ b/tests/mgcp_client/mgcp_client_test.c
@@ -162,7 +162,7 @@
 		.endpoint = "23@mgw",
 		.audio_port = 1234,
 		.call_id = 47,
-		.conn_id = 11,
+		.conn_id = "11",
 		.conn_mode = MGCP_CONN_RECV_SEND
 	};
 
