diff --git a/openbsc/src/Makefile.am b/openbsc/src/Makefile.am
index 2cdbb9d..db7603b 100644
--- a/openbsc/src/Makefile.am
+++ b/openbsc/src/Makefile.am
@@ -2,7 +2,7 @@
 AM_CFLAGS=-Wall $(LIBOSMOCORE_CFLAGS) $(LIBOSMOGSM_CFLAGS) $(LIBOSMOGSM_CFLAGS) $(LIBOSMOVTY_CFLAGS) $(COVERAGE_CFLAGS)
 AM_LDFLAGS = $(LIBOSMOCORE_LIBS) $(LIBOSMOGSM_LIBS) $(COVERAGE_LDFLAGS)
 
-SUBDIRS = libcommon libmgcp libbsc libmsc libtrau libctrl osmo-nitb osmo-bsc_mgcp utils ipaccess gprs
+SUBDIRS = libcommon libmgcp libbsc libmsc libtrau osmo-nitb osmo-bsc_mgcp utils ipaccess gprs
 
 # Conditional modules
 if BUILD_NAT
diff --git a/openbsc/src/gprs/Makefile.am b/openbsc/src/gprs/Makefile.am
index 2e26b8a..bad38c8 100644
--- a/openbsc/src/gprs/Makefile.am
+++ b/openbsc/src/gprs/Makefile.am
@@ -1,9 +1,9 @@
 AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/include -I$(top_builddir)
 AM_CFLAGS=-Wall -fno-strict-aliasing $(LIBOSMOCORE_CFLAGS) \
-	$(LIBOSMOGSM_CFLAGS) $(LIBOSMOVTY_CFLAGS) \
+	$(LIBOSMOGSM_CFLAGS) $(LIBOSMOVTY_CFLAGS) $(LIBOSMOCTRL_CFLAGS) \
 	$(LIBOSMOABIS_CFLAGS) $(LIBOSMOGB_CFLAGS) $(COVERAGE_CFLAGS)
 OSMO_LIBS = $(LIBOSMOCORE_LIBS) $(LIBOSMOGSM_LIBS) $(LIBOSMOVTY_LIBS) \
-	    $(LIBOSMOGB_LIBS)
+	    $(LIBOSMOCTRL_LIBS) $(LIBOSMOGB_LIBS)
 
 noinst_HEADERS = gprs_sndcp.h
 
@@ -23,6 +23,5 @@
 			gprs_llc.c gprs_llc_parse.c gprs_llc_vty.c crc24.c \
 			sgsn_ctrl.c
 osmo_sgsn_LDADD = 	\
-			$(top_builddir)/src/libctrl/libctrl.a \
 			$(top_builddir)/src/libcommon/libcommon.a \
 			-lgtp $(OSMO_LIBS) $(LIBOSMOABIS_LIBS)
diff --git a/openbsc/src/gprs/sgsn_ctrl.c b/openbsc/src/gprs/sgsn_ctrl.c
index 789c91e..aa58163 100644
--- a/openbsc/src/gprs/sgsn_ctrl.c
+++ b/openbsc/src/gprs/sgsn_ctrl.c
@@ -19,8 +19,9 @@
  *
  */
 
-#include <openbsc/control_if.h>
-#include <openbsc/control_cmd.h>
+#include <osmocom/ctrl/control_if.h>
+#include <osmocom/ctrl/control_cmd.h>
+#include <openbsc/gsm_data.h>
 #include <openbsc/gprs_sgsn.h>
 #include <openbsc/sgsn.h>
 #include <openbsc/debug.h>
diff --git a/openbsc/src/gprs/sgsn_main.c b/openbsc/src/gprs/sgsn_main.c
index f5a66e6..c8078ba 100644
--- a/openbsc/src/gprs/sgsn_main.c
+++ b/openbsc/src/gprs/sgsn_main.c
@@ -50,7 +50,7 @@
 #include <openbsc/sgsn.h>
 #include <openbsc/gprs_llc.h>
 #include <openbsc/gprs_gmm.h>
-#include <openbsc/control_if.h>
+#include <osmocom/ctrl/control_if.h>
 
 #include <gtp.h>
 
diff --git a/openbsc/src/libbsc/bsc_ctrl_commands.c b/openbsc/src/libbsc/bsc_ctrl_commands.c
index 4c587dc..3cd0ee3 100644
--- a/openbsc/src/libbsc/bsc_ctrl_commands.c
+++ b/openbsc/src/libbsc/bsc_ctrl_commands.c
@@ -18,8 +18,9 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  *
  */
+#include <errno.h>
 
-#include <openbsc/control_cmd.h>
+#include <osmocom/ctrl/control_cmd.h>
 #include <openbsc/ipaccess.h>
 #include <openbsc/gsm_data.h>
 #include <openbsc/abis_nm.h>
diff --git a/openbsc/src/libbsc/bsc_ctrl_lookup.c b/openbsc/src/libbsc/bsc_ctrl_lookup.c
index 3a3df9c..0323459 100644
--- a/openbsc/src/libbsc/bsc_ctrl_lookup.c
+++ b/openbsc/src/libbsc/bsc_ctrl_lookup.c
@@ -21,8 +21,12 @@
  *
  */
 
-#include <openbsc/control_if.h>
+#include <errno.h>
+
+#include <osmocom/vty/command.h>
+#include <osmocom/ctrl/control_if.h>
 #include <openbsc/debug.h>
+#include <openbsc/gsm_data.h>
 
 extern vector ctrl_node_vec;
 
diff --git a/openbsc/src/libctrl/Makefile.am b/openbsc/src/libctrl/Makefile.am
deleted file mode 100644
index 4f039c8..0000000
--- a/openbsc/src/libctrl/Makefile.am
+++ /dev/null
@@ -1,7 +0,0 @@
-AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/include -I$(top_builddir)
-AM_CFLAGS=-Wall $(LIBOSMOCORE_CFLAGS) $(LIBOSMOVTY_CFLAGS) $(LIBOSMOABIS_CFLAGS) $(COVERAGE_CFLAGS)
-AM_LDFLAGS = $(LIBOSMOCORE_LIBS) $(LIBOSMOABIS_LIBS) $(COVERAGE_LDFLAGS)
-
-noinst_LIBRARIES = libctrl.a
-
-libctrl_a_SOURCES =	control_if.c control_cmd.c
diff --git a/openbsc/src/libctrl/control_cmd.c b/openbsc/src/libctrl/control_cmd.c
deleted file mode 100644
index 44cfa48..0000000
--- a/openbsc/src/libctrl/control_cmd.c
+++ /dev/null
@@ -1,491 +0,0 @@
-/* SNMP-like status interface
- *
- * (C) 2010-2011 by Daniel Willmann <daniel@totalueberwachung.de>
- * (C) 2010-2011 by On-Waves
- *
- * All Rights Reserved
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- */
-
-#include <ctype.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <unistd.h>
-
-#include <openbsc/control_cmd.h>
-#include <openbsc/debug.h>
-#include <openbsc/vty.h>
-
-#include <osmocom/core/msgb.h>
-#include <osmocom/core/talloc.h>
-
-#include <osmocom/vty/command.h>
-#include <osmocom/vty/vector.h>
-
-extern vector ctrl_node_vec;
-
-static struct ctrl_cmd_map ccm[] = {
-	{"GET", CTRL_TYPE_GET},
-	{"SET", CTRL_TYPE_SET},
-	{"GET_REPLY", CTRL_TYPE_GET_REPLY},
-	{"SET_REPLY", CTRL_TYPE_SET_REPLY},
-	{"TRAP", CTRL_TYPE_TRAP},
-	{"ERROR", CTRL_TYPE_ERROR},
-	{NULL}
-};
-
-int ctrl_cmd_str2type(char *s)
-{
-	int i;
-	for (i=0; ccm[i].cmd != NULL; i++) {
-		if (strcasecmp(s, ccm[i].cmd) == 0)
-			return ccm[i].type;
-	}
-	return CTRL_TYPE_UNKNOWN;
-}
-
-char *ctrl_cmd_type2str(int type)
-{
-	int i;
-	for (i=0; ccm[i].cmd != NULL; i++) {
-		if (ccm[i].type == type)
-			return ccm[i].cmd;
-	}
-	return NULL;
-}
-
-/* Functions from libosmocom */
-extern vector cmd_make_descvec(const char *string, const char *descstr);
-
-/* Get the ctrl_cmd_element that matches this command */
-static struct ctrl_cmd_element *ctrl_cmd_get_element_match(vector vline, vector node)
-{
-	int index, j;
-	const char *desc;
-	struct ctrl_cmd_element *cmd_el;
-	struct ctrl_cmd_struct *cmd_desc;
-	char *str;
-
-	for (index = 0; index < vector_active(node); index++) {
-		if ((cmd_el = vector_slot(node, index))) {
-			cmd_desc = &cmd_el->strcmd;
-			if (cmd_desc->nr_commands > vector_active(vline))
-				continue;
-			for (j =0; j < vector_active(vline); j++) {
-				str = vector_slot(vline, j);
-				desc = cmd_desc->command[j];
-				if (desc[0] == '*')
-					return cmd_el; /* Partial match */
-				if (strcmp(desc, str) != 0)
-					break;
-			}
-			/* We went through all the elements and all matched */
-			if (j == cmd_desc->nr_commands)
-				return cmd_el;
-		}
-	}
-
-	return NULL;
-}
-
-int ctrl_cmd_exec(vector vline, struct ctrl_cmd *command, vector node, void *data)
-{
-	int ret = CTRL_CMD_ERROR;
-	struct ctrl_cmd_element *cmd_el;
-
-	if ((command->type != CTRL_TYPE_GET) && (command->type != CTRL_TYPE_SET)) {
-		command->reply = "Trying to execute something not GET or SET";
-		goto out;
-	}
-	if ((command->type == CTRL_TYPE_SET) && (!command->value)) {
-		command->reply = "SET without a value";
-		goto out;
-	}
-
-	if (!vline)
-		goto out;
-
-	cmd_el = ctrl_cmd_get_element_match(vline, node);
-
-	if (!cmd_el) {
-		command->reply = "Command not found";
-		goto out;
-	}
-
-	if (command->type == CTRL_TYPE_SET) {
-		if (!cmd_el->set) {
-			command->reply = "SET not implemented";
-			goto out;
-		}
-		if (cmd_el->verify) {
-			if ((ret = cmd_el->verify(command, command->value, data))) {
-				ret = CTRL_CMD_ERROR;
-				/* If verify() set an appropriate error message, don't change it. */
-				if (!command->reply)
-					command->reply = "Value failed verification.";
-				goto out;
-			}
-		}
-		ret =  cmd_el->set(command, data);
-		goto out;
-	} else if (command->type == CTRL_TYPE_GET) {
-		if (!cmd_el->get) {
-			command->reply = "GET not implemented";
-			goto out;
-		}
-		ret = cmd_el->get(command, data);
-		goto out;
-	}
-out:
-	if (ret == CTRL_CMD_REPLY) {
-		if (command->type == CTRL_TYPE_SET) {
-			command->type = CTRL_TYPE_SET_REPLY;
-		} else if (command->type == CTRL_TYPE_GET) {
-			command->type = CTRL_TYPE_GET_REPLY;
-		}
-	} else if (ret == CTRL_CMD_ERROR) {
-		command->type = CTRL_TYPE_ERROR;
-	}
-	return ret;
-}
-
-static void add_word(struct ctrl_cmd_struct *cmd,
-		     const char *start, const char *end)
-{
-	if (!cmd->command) {
-		cmd->command = talloc_zero_array(tall_vty_vec_ctx,
-						 char*, 1);
-		cmd->nr_commands = 0;
-	} else {
-		cmd->command = talloc_realloc(tall_vty_vec_ctx,
-					      cmd->command, char*,
-					      cmd->nr_commands + 1);
-	}
-
-	cmd->command[cmd->nr_commands++] = talloc_strndup(cmd->command,
-							  start, end - start);
-}
-
-static void create_cmd_struct(struct ctrl_cmd_struct *cmd, const char *name)
-{
-	const char *cur, *word;
-
-	for (cur = name, word = NULL; cur[0] != '\0'; ++cur) {
-		/* warn about optionals */
-		if (cur[0] == '(' || cur[0] == ')' || cur[0] == '|') {
-			LOGP(DCTRL, LOGL_ERROR,
-			     "Optionals are not supported in '%s'\n", name);
-			goto failure;
-		}
-
-		if (isspace(cur[0])) {
-			if (word) {
-				add_word(cmd, word, cur);
-				word = NULL;
-			}
-			continue;
-		}
-
-		if (!word)
-			word = cur;
-	}
-
-	if (word)
-		add_word(cmd, word, cur);
-
-	return;
-failure:
-	cmd->nr_commands = 0;
-	talloc_free(cmd->command);
-}
-
-int ctrl_cmd_install(enum ctrl_node_type node, struct ctrl_cmd_element *cmd)
-{
-	vector cmds_vec;
-
-	cmds_vec = vector_lookup_ensure(ctrl_node_vec, node);
-
-	if (!cmds_vec) {
-		cmds_vec = vector_init(5);
-		if (!cmds_vec) {
-			LOGP(DCTRL, LOGL_ERROR, "vector_init failed.\n");
-			return -ENOMEM;
-		}
-		vector_set_index(ctrl_node_vec, node, cmds_vec);
-	}
-
-	vector_set(cmds_vec, cmd);
-
-	create_cmd_struct(&cmd->strcmd, cmd->name);
-	return 0;
-}
-
-struct ctrl_cmd *ctrl_cmd_create(void *ctx, enum ctrl_type type)
-{
-	struct ctrl_cmd *cmd;
-
-	cmd = talloc_zero(ctx, struct ctrl_cmd);
-	if (!cmd)
-		return NULL;
-
-	cmd->type = type;
-	return cmd;
-}
-
-struct ctrl_cmd *ctrl_cmd_cpy(void *ctx, struct ctrl_cmd *cmd)
-{
-	struct ctrl_cmd *cmd2;
-
-	cmd2 = talloc_zero(ctx, struct ctrl_cmd);
-	if (!cmd2)
-		return NULL;
-
-	cmd2->type = cmd->type;
-	if (cmd->id) {
-		cmd2->id = talloc_strdup(cmd2, cmd->id);
-		if (!cmd2->id)
-			goto err;
-	}
-	if (cmd->variable) {
-		cmd2->variable = talloc_strdup(cmd2, cmd->variable);
-		if (!cmd2->variable)
-			goto err;
-	}
-	if (cmd->value) {
-		cmd2->value = talloc_strdup(cmd2, cmd->value);
-		if (!cmd2->value)
-			goto err;
-	}
-	if (cmd->reply) {
-		cmd2->reply = talloc_strdup(cmd2, cmd->reply);
-		if (!cmd2->reply)
-			goto err;
-	}
-
-	return cmd2;
-err:
-	talloc_free(cmd2);
-	return NULL;
-}
-
-struct ctrl_cmd *ctrl_cmd_parse(void *ctx, struct msgb *msg)
-{
-	char *str, *tmp, *saveptr = NULL;
-	char *var, *val;
-	struct ctrl_cmd *cmd;
-
-	cmd = talloc_zero(ctx, struct ctrl_cmd);
-	if (!cmd) {
-		LOGP(DCTRL, LOGL_ERROR, "Failed to allocate.\n");
-		return NULL;
-	}
-
-	/* Make sure input is NULL terminated */
-	msgb_put_u8(msg, 0);
-	str = (char *) msg->l2h;
-
-	tmp = strtok_r(str, " ",  &saveptr);
-	if (!tmp) {
-		cmd->type = CTRL_TYPE_ERROR;
-		cmd->id = "err";
-		cmd->reply = "Request malformed";
-		goto err;
-	}
-
-	cmd->type = ctrl_cmd_str2type(tmp);
-	if (cmd->type == CTRL_TYPE_UNKNOWN) {
-		cmd->type = CTRL_TYPE_ERROR;
-		cmd->id = "err";
-		cmd->reply = "Request type unknown";
-		goto err;
-	}
-
-	tmp = strtok_r(NULL, " ",  &saveptr);
-
-	if (!tmp) {
-		cmd->type = CTRL_TYPE_ERROR;
-		cmd->id = "err";
-		cmd->reply = "Missing ID";
-		goto err;
-	}
-	cmd->id = talloc_strdup(cmd, tmp);
-	if (!cmd->id)
-		goto oom;
-
-	switch (cmd->type) {
-		case CTRL_TYPE_GET:
-			var = strtok_r(NULL, " ", &saveptr);
-			if (!var) {
-				cmd->type = CTRL_TYPE_ERROR;
-				cmd->reply = "GET incomplete";
-				LOGP(DCTRL, LOGL_NOTICE, "GET Command incomplete\n");
-				goto err;
-			}
-			cmd->variable = talloc_strdup(cmd, var);
-			LOGP(DCTRL, LOGL_DEBUG, "Command: GET %s\n", cmd->variable);
-			break;
-		case CTRL_TYPE_SET:
-			var = strtok_r(NULL, " ", &saveptr);
-			val = strtok_r(NULL, "\n", &saveptr);
-			if (!var || !val) {
-				cmd->type = CTRL_TYPE_ERROR;
-				cmd->reply = "SET incomplete";
-				LOGP(DCTRL, LOGL_NOTICE, "SET Command incomplete\n");
-				goto err;
-			}
-			cmd->variable = talloc_strdup(cmd, var);
-			cmd->value = talloc_strdup(cmd, val);
-			if (!cmd->variable || !cmd->value)
-				goto oom;
-			LOGP(DCTRL, LOGL_DEBUG, "Command: SET %s = %s\n", cmd->variable, cmd->value);
-			break;
-		case CTRL_TYPE_GET_REPLY:
-		case CTRL_TYPE_SET_REPLY:
-		case CTRL_TYPE_TRAP:
-			var = strtok_r(NULL, " ", &saveptr);
-			val = strtok_r(NULL, " ", &saveptr);
-			if (!var || !val) {
-				cmd->type = CTRL_TYPE_ERROR;
-				cmd->reply = "Trap/Reply incomplete";
-				LOGP(DCTRL, LOGL_NOTICE, "Trap/Reply incomplete\n");
-				goto err;
-			}
-			cmd->variable = talloc_strdup(cmd, var);
-			cmd->reply = talloc_strdup(cmd, val);
-			if (!cmd->variable || !cmd->reply)
-				goto oom;
-			LOGP(DCTRL, LOGL_DEBUG, "Command: TRAP/REPLY %s: %s\n", cmd->variable, cmd->reply);
-			break;
-		case CTRL_TYPE_ERROR:
-			var = strtok_r(NULL, "\0", &saveptr);
-			if (!var) {
-				cmd->reply = "";
-				goto err;
-			}
-			cmd->reply = talloc_strdup(cmd, var);
-			if (!cmd->reply)
-				goto oom;
-			LOGP(DCTRL, LOGL_DEBUG, "Command: ERROR %s\n", cmd->reply);
-			break;
-		case CTRL_TYPE_UNKNOWN:
-		default:
-			cmd->type = CTRL_TYPE_ERROR;
-			cmd->reply = "Unknown type";
-			goto err;
-	}
-
-	return cmd;
-oom:
-	cmd->type = CTRL_TYPE_ERROR;
-	cmd->id = "err";
-	cmd->reply = "OOM";
-err:
-	talloc_free(cmd);
-	return NULL;
-}
-
-struct msgb *ctrl_cmd_make(struct ctrl_cmd *cmd)
-{
-	struct msgb *msg;
-	char *type, *tmp;
-
-	if (!cmd->id)
-		return NULL;
-
-	msg = msgb_alloc_headroom(4096, 128, "ctrl command make");
-	if (!msg)
-		return NULL;
-
-	type = ctrl_cmd_type2str(cmd->type);
-
-	switch (cmd->type) {
-	case CTRL_TYPE_GET:
-		if (!cmd->variable)
-			goto err;
-
-		tmp = talloc_asprintf(cmd, "%s %s %s", type, cmd->id, cmd->variable);
-		if (!tmp) {
-			LOGP(DCTRL, LOGL_ERROR, "Failed to allocate cmd.\n");
-			goto err;
-		}
-
-		msg->l2h = msgb_put(msg, strlen(tmp));
-		memcpy(msg->l2h, tmp, strlen(tmp));
-		talloc_free(tmp);
-		break;
-	case CTRL_TYPE_SET:
-		if (!cmd->variable || !cmd->value)
-			goto err;
-
-		tmp = talloc_asprintf(cmd, "%s %s %s %s", type, cmd->id, cmd->variable,
-				cmd->value);
-		if (!tmp) {
-			LOGP(DCTRL, LOGL_ERROR, "Failed to allocate cmd.\n");
-			goto err;
-		}
-
-		msg->l2h = msgb_put(msg, strlen(tmp));
-		memcpy(msg->l2h, tmp, strlen(tmp));
-		talloc_free(tmp);
-		break;
-	case CTRL_TYPE_GET_REPLY:
-	case CTRL_TYPE_SET_REPLY:
-	case CTRL_TYPE_TRAP:
-		if (!cmd->variable || !cmd->reply)
-			goto err;
-
-		tmp = talloc_asprintf(cmd, "%s %s %s %s", type, cmd->id, cmd->variable,
-				cmd->reply);
-		if (!tmp) {
-			LOGP(DCTRL, LOGL_ERROR, "Failed to allocate cmd.\n");
-			goto err;
-		}
-
-		msg->l2h = msgb_put(msg, strlen(tmp));
-		memcpy(msg->l2h, tmp, strlen(tmp));
-		talloc_free(tmp);
-		break;
-	case CTRL_TYPE_ERROR:
-		if (!cmd->reply)
-			goto err;
-
-		tmp = talloc_asprintf(cmd, "%s %s %s", type, cmd->id,
-				cmd->reply);
-		if (!tmp) {
-			LOGP(DCTRL, LOGL_ERROR, "Failed to allocate cmd.\n");
-			goto err;
-		}
-
-		msg->l2h = msgb_put(msg, strlen(tmp));
-		memcpy(msg->l2h, tmp, strlen(tmp));
-		talloc_free(tmp);
-		break;
-	default:
-		LOGP(DCTRL, LOGL_NOTICE, "Unknown command type %i\n", cmd->type);
-		goto err;
-		break;
-	}
-
-	return msg;
-
-err:
-	msgb_free(msg);
-	return NULL;
-}
diff --git a/openbsc/src/libctrl/control_if.c b/openbsc/src/libctrl/control_if.c
deleted file mode 100644
index 253309a..0000000
--- a/openbsc/src/libctrl/control_if.c
+++ /dev/null
@@ -1,574 +0,0 @@
-/* SNMP-like status interface
- *
- * (C) 2010-2011 by Daniel Willmann <daniel@totalueberwachung.de>
- * (C) 2010-2011 by On-Waves
- *
- * All Rights Reserved
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- */
-
-#include <errno.h>
-#include <inttypes.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <unistd.h>
-
-#include <arpa/inet.h>
-
-#include <netinet/tcp.h>
-
-#include <sys/fcntl.h>
-#include <sys/ioctl.h>
-#include <sys/socket.h>
-#include <sys/types.h>
-
-#include <openbsc/control_cmd.h>
-#include <openbsc/control_if.h>
-#include <openbsc/debug.h>
-#include <openbsc/gsm_data.h>
-#include <openbsc/ipaccess.h>
-#include <openbsc/socket.h>
-#include <osmocom/abis/subchan_demux.h>
-
-#include <openbsc/abis_rsl.h>
-#include <openbsc/abis_nm.h>
-
-#include <osmocom/core/msgb.h>
-#include <osmocom/core/rate_ctr.h>
-#include <osmocom/core/select.h>
-#include <osmocom/core/statistics.h>
-#include <osmocom/core/talloc.h>
-
-#include <osmocom/gsm/tlv.h>
-#include <osmocom/gsm/ipa.h>
-
-#include <osmocom/vty/command.h>
-#include <osmocom/vty/vector.h>
-
-#include <osmocom/abis/e1_input.h>
-#include <osmocom/abis/ipa.h>
-
-vector ctrl_node_vec;
-
-/* Send command to all  */
-int ctrl_cmd_send_to_all(struct ctrl_handle *ctrl, struct ctrl_cmd *cmd)
-{
-	struct ctrl_connection *ccon;
-	int ret = 0;
-
-	llist_for_each_entry(ccon, &ctrl->ccon_list, list_entry) {
-		if (ccon == cmd->ccon)
-			continue;
-		if (ctrl_cmd_send(&ccon->write_queue, cmd))
-			ret++;
-	}
-	return ret;
-}
-
-int ctrl_cmd_send(struct osmo_wqueue *queue, struct ctrl_cmd *cmd)
-{
-	int ret;
-	struct msgb *msg;
-
-	msg = ctrl_cmd_make(cmd);
-	if (!msg) {
-		LOGP(DCTRL, LOGL_ERROR, "Could not generate msg\n");
-		return -1;
-	}
-
-	ipa_prepend_header_ext(msg, IPAC_PROTO_EXT_CTRL);
-	ipa_prepend_header(msg, IPAC_PROTO_OSMO);
-
-	ret = osmo_wqueue_enqueue(queue, msg);
-	if (ret != 0) {
-		LOGP(DCTRL, LOGL_ERROR, "Failed to enqueue the command.\n");
-		msgb_free(msg);
-	}
-	return ret;
-}
-
-struct ctrl_cmd *ctrl_cmd_trap(struct ctrl_cmd *cmd)
-{
-	struct ctrl_cmd *trap;
-
-	trap = ctrl_cmd_cpy(tall_bsc_ctx, cmd);
-	if (!trap)
-		return NULL;
-
-	trap->ccon = cmd->ccon;
-	trap->type = CTRL_TYPE_TRAP;
-	return trap;
-}
-
-static void control_close_conn(struct ctrl_connection *ccon)
-{
-	osmo_wqueue_clear(&ccon->write_queue);
-	close(ccon->write_queue.bfd.fd);
-	osmo_fd_unregister(&ccon->write_queue.bfd);
-	llist_del(&ccon->list_entry);
-	if (ccon->closed_cb)
-		ccon->closed_cb(ccon);
-	msgb_free(ccon->pending_msg);
-	talloc_free(ccon);
-}
-
-static int handle_control_read(struct osmo_fd * bfd)
-{
-	int ret = -1;
-	struct osmo_wqueue *queue;
-	struct ctrl_connection *ccon;
-	struct ipaccess_head *iph;
-	struct ipaccess_head_ext *iph_ext;
-	struct msgb *msg = NULL;
-	struct ctrl_cmd *cmd;
-	struct ctrl_handle *ctrl = bfd->data;
-
-	queue = container_of(bfd, struct osmo_wqueue, bfd);
-	ccon = container_of(queue, struct ctrl_connection, write_queue);
-
-	ret = ipa_msg_recv_buffered(bfd->fd, &msg, &ccon->pending_msg);
-	if (ret <= 0) {
-		if (ret == -EAGAIN)
-			return 0;
-		if (ret == 0)
-			LOGP(DCTRL, LOGL_INFO, "The control connection was closed\n");
-		else
-			LOGP(DCTRL, LOGL_ERROR, "Failed to parse ip access message: %d\n", ret);
-
-		goto err;
-	}
-
-	if (msg->len < sizeof(*iph) + sizeof(*iph_ext)) {
-		LOGP(DCTRL, LOGL_ERROR, "The message is too short.\n");
-		goto err;
-	}
-
-	iph = (struct ipaccess_head *) msg->data;
-	if (iph->proto != IPAC_PROTO_OSMO) {
-		LOGP(DCTRL, LOGL_ERROR, "Protocol mismatch. We got 0x%x\n", iph->proto);
-		goto err;
-	}
-
-	iph_ext = (struct ipaccess_head_ext *) iph->data;
-	if (iph_ext->proto != IPAC_PROTO_EXT_CTRL) {
-		LOGP(DCTRL, LOGL_ERROR, "Extended protocol mismatch. We got 0x%x\n", iph_ext->proto);
-		goto err;
-	}
-
-	msg->l2h = iph_ext->data;
-
-	cmd = ctrl_cmd_parse(ccon, msg);
-
-	if (cmd) {
-		cmd->ccon = ccon;
-		if (ctrl->handler(cmd, ctrl->gsmnet) != CTRL_CMD_HANDLED) {
-			ctrl_cmd_send(queue, cmd);
-			talloc_free(cmd);
-		}
-	} else {
-		cmd = talloc_zero(ccon, struct ctrl_cmd);
-		if (!cmd)
-			goto err;
-		LOGP(DCTRL, LOGL_ERROR, "Command parser error.\n");
-		cmd->type = CTRL_TYPE_ERROR;
-		cmd->id = "err";
-		cmd->reply = "Command parser error.";
-		ctrl_cmd_send(queue, cmd);
-		talloc_free(cmd);
-	}
-
-	msgb_free(msg);
-	return 0;
-
-err:
-	control_close_conn(ccon);
-	msgb_free(msg);
-	return ret;
-}
-
-static int control_write_cb(struct osmo_fd *bfd, struct msgb *msg)
-{
-	int rc;
-
-	rc = write(bfd->fd, msg->data, msg->len);
-	if (rc != msg->len)
-		LOGP(DCTRL, LOGL_ERROR, "Failed to write message to the control connection.\n");
-
-	return rc;
-}
-
-static struct ctrl_connection *ctrl_connection_alloc(void *ctx)
-{
-	struct ctrl_connection *ccon = talloc_zero(ctx, struct ctrl_connection);
-	if (!ccon)
-		return NULL;
-
-	osmo_wqueue_init(&ccon->write_queue, 100);
-	/* Error handling here? */
-
-	INIT_LLIST_HEAD(&ccon->cmds);
-	return ccon;
-}
-
-static int listen_fd_cb(struct osmo_fd *listen_bfd, unsigned int what)
-{
-	int ret, fd, on;
-	struct ctrl_handle *ctrl;
-	struct ctrl_connection *ccon;
-	struct sockaddr_in sa;
-	socklen_t sa_len = sizeof(sa);
-
-
-	if (!(what & BSC_FD_READ))
-		return 0;
-
-	fd = accept(listen_bfd->fd, (struct sockaddr *) &sa, &sa_len);
-	if (fd < 0) {
-		perror("accept");
-		return fd;
-	}
-	LOGP(DCTRL, LOGL_INFO, "accept()ed new control connection from %s\n",
-		inet_ntoa(sa.sin_addr));
-
-	on = 1;
-	ret = setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &on, sizeof(on));
-	if (ret != 0) {
-		LOGP(DNAT, LOGL_ERROR, "Failed to set TCP_NODELAY: %s\n", strerror(errno));
-		close(fd);
-		return ret;
-	}
-	ccon = ctrl_connection_alloc(listen_bfd->data);
-	if (!ccon) {
-		LOGP(DCTRL, LOGL_ERROR, "Failed to allocate.\n");
-		close(fd);
-		return -1;
-	}
-
-	ctrl = listen_bfd->data;
-	ccon->write_queue.bfd.data = ctrl;
-	ccon->write_queue.bfd.fd = fd;
-	ccon->write_queue.bfd.when = BSC_FD_READ;
-	ccon->write_queue.read_cb = handle_control_read;
-	ccon->write_queue.write_cb = control_write_cb;
-
-	ret = osmo_fd_register(&ccon->write_queue.bfd);
-	if (ret < 0) {
-		LOGP(DCTRL, LOGL_ERROR, "Could not register FD.\n");
-		close(ccon->write_queue.bfd.fd);
-		talloc_free(ccon);
-	}
-
-	llist_add(&ccon->list_entry, &ctrl->ccon_list);
-
-	return ret;
-}
-
-static uint64_t get_rate_ctr_value(const struct rate_ctr *ctr, int intv)
-{
-	if (intv >= RATE_CTR_INTV_NUM)
-		return 0;
-
-	/* Absolute value */
-	if (intv == -1) {
-		return  ctr->current;
-	} else {
-		return ctr->intv[intv].rate;
-	}
-}
-
-static char *get_all_rate_ctr_in_group(const struct rate_ctr_group *ctrg, int intv)
-{
-	int i;
-	char *counters = talloc_strdup(tall_bsc_ctx, "");
-	if (!counters)
-		return NULL;
-
-	for (i=0;i<ctrg->desc->num_ctr;i++) {
-		counters = talloc_asprintf_append(counters, "\n%s.%u.%s %"PRIu64,
-			ctrg->desc->group_name_prefix, ctrg->idx,
-			ctrg->desc->ctr_desc[i].name,
-			get_rate_ctr_value(&ctrg->ctr[i], intv));
-		if (!counters)
-			return NULL;
-	}
-	return counters;
-}
-
-static int get_rate_ctr_group(const char *ctr_group, int intv, struct ctrl_cmd *cmd)
-{
-	int i;
-	char *counters;
-	struct rate_ctr_group *ctrg;
-
-	cmd->reply = talloc_asprintf(cmd, "All counters in group %s", ctr_group);
-	if (!cmd->reply)
-		goto oom;
-
-	for (i=0;;i++) {
-		ctrg = rate_ctr_get_group_by_name_idx(ctr_group, i);
-		if (!ctrg)
-			break;
-
-		counters = get_all_rate_ctr_in_group(ctrg, intv);
-		if (!counters)
-			goto oom;
-
-		cmd->reply = talloc_asprintf_append(cmd->reply, "%s", counters);
-		talloc_free(counters);
-		if (!cmd->reply)
-			goto oom;
-	}
-
-	/* We found no counter group by that name */
-	if (i == 0) {
-		cmd->reply = talloc_asprintf(cmd, "No counter group with name %s.", ctr_group);
-		return CTRL_CMD_ERROR;
-	}
-
-	return CTRL_CMD_REPLY;
-oom:
-	cmd->reply = "OOM.";
-	return CTRL_CMD_ERROR;
-}
-
-static int get_rate_ctr_group_idx(const struct rate_ctr_group *ctrg, int intv, struct ctrl_cmd *cmd)
-{
-	char *counters;
-
-	counters = get_all_rate_ctr_in_group(ctrg, intv);
-	if (!counters)
-		goto oom;
-
-	cmd->reply = talloc_asprintf(cmd, "All counters in %s.%u%s",
-			ctrg->desc->group_name_prefix, ctrg->idx, counters);
-	talloc_free(counters);
-	if (!cmd->reply)
-		goto oom;
-
-	return CTRL_CMD_REPLY;
-oom:
-	cmd->reply = "OOM.";
-	return CTRL_CMD_ERROR;
-}
-
-/* rate_ctr */
-CTRL_CMD_DEFINE(rate_ctr, "rate_ctr *");
-static int get_rate_ctr(struct ctrl_cmd *cmd, void *data)
-{
-	int intv;
-	unsigned int idx;
-	char *ctr_group, *ctr_idx, *ctr_name, *tmp, *dup, *saveptr, *interval;
-	struct rate_ctr_group *ctrg;
-	const struct rate_ctr *ctr;
-
-	dup = talloc_strdup(cmd, cmd->variable);
-	if (!dup)
-		goto oom;
-
-	/* Skip over possible prefixes (net.) */
-	tmp = strstr(dup, "rate_ctr");
-	if (!tmp) {
-		talloc_free(dup);
-		cmd->reply = "rate_ctr not a token in rate_ctr command!";
-		goto err;
-	}
-
-	strtok_r(tmp, ".", &saveptr);
-	interval = strtok_r(NULL, ".", &saveptr);
-	if (!interval) {
-		talloc_free(dup);
-		cmd->reply = "Missing interval.";
-		goto err;
-	}
-
-	if (!strcmp(interval, "abs")) {
-		intv = -1;
-	} else if (!strcmp(interval, "per_sec")) {
-		intv = RATE_CTR_INTV_SEC;
-	} else if (!strcmp(interval, "per_min")) {
-		intv = RATE_CTR_INTV_MIN;
-	} else if (!strcmp(interval, "per_hour")) {
-		intv = RATE_CTR_INTV_HOUR;
-	} else if (!strcmp(interval, "per_day")) {
-		intv = RATE_CTR_INTV_DAY;
-	} else {
-		talloc_free(dup);
-		cmd->reply = "Wrong interval.";
-		goto err;
-	}
-
-	ctr_group = strtok_r(NULL, ".", &saveptr);
-	tmp = strtok_r(NULL, ".", &saveptr);
-	if (!ctr_group || !tmp) {
-		talloc_free(dup);
-		cmd->reply = "Counter group must be of form a.b";
-		goto err;
-	}
-	ctr_group[strlen(ctr_group)] = '.';
-
-	ctr_idx = strtok_r(NULL, ".", &saveptr);
-	if (!ctr_idx) {
-		talloc_free(dup);
-		return get_rate_ctr_group(ctr_group, intv, cmd);
-	}
-	idx = atoi(ctr_idx);
-
-	ctrg = rate_ctr_get_group_by_name_idx(ctr_group, idx);
-	if (!ctrg) {
-		talloc_free(dup);
-		cmd->reply = "Counter group not found.";
-		goto err;
-	}
-
-	ctr_name = strtok_r(NULL, "\0", &saveptr);
-	if (!ctr_name) {
-		talloc_free(dup);
-		return get_rate_ctr_group_idx(ctrg, intv, cmd);
-	}
-
-	ctr = rate_ctr_get_by_name(ctrg, ctr_name);
-	if (!ctr) {
-		cmd->reply = "Counter name not found.";
-		talloc_free(dup);
-		goto err;
-	}
-
-	talloc_free(dup);
-
-	cmd->reply = talloc_asprintf(cmd, "%"PRIu64, get_rate_ctr_value(ctr, intv));
-	if (!cmd->reply)
-		goto oom;
-
-	return CTRL_CMD_REPLY;
-oom:
-	cmd->reply = "OOM";
-err:
-	return CTRL_CMD_ERROR;
-}
-
-static int set_rate_ctr(struct ctrl_cmd *cmd, void *data)
-{
-	cmd->reply = "Can't set rate counter.";
-
-	return CTRL_CMD_ERROR;
-}
-
-static int verify_rate_ctr(struct ctrl_cmd *cmd, const char *value, void *data)
-{
-	return 0;
-}
-
-/* counter */
-CTRL_CMD_DEFINE(counter, "counter *");
-static int get_counter(struct ctrl_cmd *cmd, void *data)
-{
-	char *ctr_name, *tmp, *dup, *saveptr;
-	struct osmo_counter *counter;
-
-	cmd->reply = "OOM";
-	dup = talloc_strdup(cmd, cmd->variable);
-	if (!dup)
-		goto err;
-
-
-	tmp = strstr(dup, "counter");
-	if (!tmp) {
-		talloc_free(dup);
-		goto err;
-	}
-
-	strtok_r(tmp, ".", &saveptr);
-	ctr_name = strtok_r(NULL, "\0", &saveptr);
-
-	if (!ctr_name)
-		goto err;
-
-	counter = osmo_counter_get_by_name(ctr_name);
-	if (!counter) {
-		cmd->reply = "Counter name not found.";
-		talloc_free(dup);
-		goto err;
-	}
-
-	talloc_free(dup);
-
-	cmd->reply = talloc_asprintf(cmd, "%lu", counter->value);
-	if (!cmd->reply) {
-		cmd->reply = "OOM";
-		goto err;
-	}
-
-	return CTRL_CMD_REPLY;
-err:
-	return CTRL_CMD_ERROR;
-}
-
-static int set_counter(struct ctrl_cmd *cmd, void *data)
-{
-
-	cmd->reply = "Can't set counter.";
-
-	return CTRL_CMD_ERROR;
-}
-
-static int verify_counter(struct ctrl_cmd *cmd, const char *value, void *data)
-{
-	return 0;
-}
-
-struct ctrl_handle *controlif_setup(struct gsm_network *gsmnet, uint16_t port,
-					ctrl_cmd_handler handler)
-{
-	int ret;
-	struct ctrl_handle *ctrl;
-
-	ctrl = talloc_zero(tall_bsc_ctx, struct ctrl_handle);
-	if (!ctrl)
-		return NULL;
-
-	INIT_LLIST_HEAD(&ctrl->ccon_list);
-
-	ctrl->gsmnet = gsmnet;
-	ctrl->handler = handler;
-
-	ctrl_node_vec = vector_init(5);
-	if (!ctrl_node_vec)
-		goto err;
-
-	/* Listen for control connections */
-	ret = make_sock(&ctrl->listen_fd, IPPROTO_TCP, INADDR_LOOPBACK, port,
-			0, listen_fd_cb, ctrl);
-	if (ret < 0)
-		goto err_vec;
-
-	ret = ctrl_cmd_install(CTRL_NODE_ROOT, &cmd_rate_ctr);
-	if (ret)
-		goto err_vec;
-	ret = ctrl_cmd_install(CTRL_NODE_ROOT, &cmd_counter);
-	if (ret)
-		goto err_vec;
-
-	return ctrl;
-err_vec:
-	vector_free(ctrl_node_vec);
-	ctrl_node_vec = NULL;
-err:
-	talloc_free(ctrl);
-	return NULL;
-}
diff --git a/openbsc/src/libmsc/ctrl_commands.c b/openbsc/src/libmsc/ctrl_commands.c
index 58558fd..df85c8e 100644
--- a/openbsc/src/libmsc/ctrl_commands.c
+++ b/openbsc/src/libmsc/ctrl_commands.c
@@ -18,7 +18,7 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  *
  */
-#include <openbsc/control_cmd.h>
+#include <osmocom/ctrl/control_cmd.h>
 #include <openbsc/gsm_data.h>
 #include <openbsc/gsm_subscriber.h>
 #include <openbsc/db.h>
diff --git a/openbsc/src/osmo-bsc/Makefile.am b/openbsc/src/osmo-bsc/Makefile.am
index 63972c8..6248fcd 100644
--- a/openbsc/src/osmo-bsc/Makefile.am
+++ b/openbsc/src/osmo-bsc/Makefile.am
@@ -1,5 +1,5 @@
 AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/include -I$(top_builddir)
-AM_CFLAGS=-Wall $(LIBOSMOCORE_CFLAGS) $(LIBOSMOGSM_CFLAGS) $(LIBOSMOVTY_CFLAGS) $(LIBOSMOSCCP_CFLAGS) $(COVERAGE_CFLAGS) $(LIBOSMOABIS_CFLAGS)
+AM_CFLAGS=-Wall $(LIBOSMOCORE_CFLAGS) $(LIBOSMOGSM_CFLAGS) $(LIBOSMOVTY_CFLAGS) $(LIBOSMOCTRL_CFLAGS) $(LIBOSMOSCCP_CFLAGS) $(COVERAGE_CFLAGS) $(LIBOSMOABIS_CFLAGS)
 AM_LDFLAGS = $(COVERAGE_LDFLAGS)
 
 bin_PROGRAMS = osmo-bsc
@@ -14,7 +14,7 @@
 		 $(top_builddir)/src/libbsc/libbsc.a \
 		 $(top_builddir)/src/libtrau/libtrau.a \
 		 $(top_builddir)/src/libcommon/libcommon.a \
-		 $(top_builddir)/src/libctrl/libctrl.a \
 		 $(top_builddir)/src/libcommon/libcommon.a \
 		 $(LIBOSMOSCCP_LIBS) $(LIBOSMOCORE_LIBS) \
-		 $(LIBOSMOGSM_LIBS) $(LIBOSMOVTY_LIBS) $(COVERAGE_LDFLAGS) $(LIBOSMOABIS_LIBS)
+		 $(LIBOSMOGSM_LIBS) $(LIBOSMOVTY_LIBS) $(LIBOSMOCTRL_LIBS) \
+		 $(COVERAGE_LDFLAGS) $(LIBOSMOABIS_LIBS)
diff --git a/openbsc/src/osmo-bsc/osmo_bsc_ctrl.c b/openbsc/src/osmo-bsc/osmo_bsc_ctrl.c
index 6b6b8a1..23f0595 100644
--- a/openbsc/src/osmo-bsc/osmo_bsc_ctrl.c
+++ b/openbsc/src/osmo-bsc/osmo_bsc_ctrl.c
@@ -18,7 +18,7 @@
  *
  */
 
-#include <openbsc/control_cmd.h>
+#include <osmocom/ctrl/control_cmd.h>
 #include <openbsc/debug.h>
 #include <openbsc/gsm_data.h>
 #include <openbsc/osmo_bsc.h>
diff --git a/openbsc/src/osmo-bsc/osmo_bsc_main.c b/openbsc/src/osmo-bsc/osmo_bsc_main.c
index 0d6bf2e..d39759b 100644
--- a/openbsc/src/osmo-bsc/osmo_bsc_main.c
+++ b/openbsc/src/osmo-bsc/osmo_bsc_main.c
@@ -27,9 +27,10 @@
 #include <openbsc/signal.h>
 #include <openbsc/vty.h>
 #include <openbsc/ipaccess.h>
+#include <openbsc/ctrl.h>
 
-#include <openbsc/control_cmd.h>
-#include <openbsc/control_if.h>
+#include <osmocom/ctrl/control_cmd.h>
+#include <osmocom/ctrl/control_if.h>
 
 #include <osmocom/core/application.h>
 #include <osmocom/core/linuxlist.h>
diff --git a/openbsc/src/osmo-bsc/osmo_bsc_msc.c b/openbsc/src/osmo-bsc/osmo_bsc_msc.c
index 3de5c44..95bd3a4 100644
--- a/openbsc/src/osmo-bsc/osmo_bsc_msc.c
+++ b/openbsc/src/osmo-bsc/osmo_bsc_msc.c
@@ -21,8 +21,8 @@
  */
 
 #include <openbsc/bsc_nat.h>
-#include <openbsc/control_cmd.h>
-#include <openbsc/control_if.h>
+#include <osmocom/ctrl/control_cmd.h>
+#include <osmocom/ctrl/control_if.h>
 #include <openbsc/debug.h>
 #include <openbsc/gsm_data.h>
 #include <openbsc/ipaccess.h>
diff --git a/openbsc/src/osmo-bsc_nat/Makefile.am b/openbsc/src/osmo-bsc_nat/Makefile.am
index c9ea3e9..a9e81fc 100644
--- a/openbsc/src/osmo-bsc_nat/Makefile.am
+++ b/openbsc/src/osmo-bsc_nat/Makefile.am
@@ -1,5 +1,5 @@
 AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/include -I$(top_builddir)
-AM_CFLAGS=-Wall $(LIBOSMOCORE_CFLAGS) $(LIBOSMOGSM_CFLAGS) $(LIBOSMOVTY_CFLAGS) $(LIBOSMOSCCP_CFLAGS) $(LIBOSMOABIS_CFLAGS) $(LIBOSMONETIF_CFLAGS) $(COVERAGE_CFLAGS)
+AM_CFLAGS=-Wall $(LIBOSMOCORE_CFLAGS) $(LIBOSMOGSM_CFLAGS) $(LIBOSMOVTY_CFLAGS) $(LIBOSMOCTRL_CFLAGS) $(LIBOSMOSCCP_CFLAGS) $(LIBOSMOABIS_CFLAGS) $(LIBOSMONETIF_CFLAGS) $(COVERAGE_CFLAGS)
 AM_LDFLAGS = $(COVERAGE_LDFLAGS)
 
 bin_PROGRAMS = osmo-bsc_nat
@@ -12,7 +12,6 @@
 		$(top_builddir)/src/libmgcp/libmgcp.a \
 		$(top_builddir)/src/libbsc/libbsc.a \
 		$(top_builddir)/src/libtrau/libtrau.a \
-		$(top_builddir)/src/libctrl/libctrl.a \
 		-lrt $(LIBOSMOSCCP_LIBS) $(LIBOSMOCORE_LIBS) \
-		$(LIBOSMOGSM_LIBS) $(LIBOSMOVTY_LIBS) $(LIBOSMOABIS_LIBS) \
-		$(LIBOSMONETIF_LIBS)
+		$(LIBOSMOGSM_LIBS) $(LIBOSMOVTY_LIBS) $(LIBOSMOCTRL_LIBS) \
+		$(LIBOSMOABIS_LIBS) $(LIBOSMONETIF_LIBS)
diff --git a/openbsc/src/osmo-bsc_nat/bsc_mgcp_utils.c b/openbsc/src/osmo-bsc_nat/bsc_mgcp_utils.c
index 4a0aaff..15c4767 100644
--- a/openbsc/src/osmo-bsc_nat/bsc_mgcp_utils.c
+++ b/openbsc/src/osmo-bsc_nat/bsc_mgcp_utils.c
@@ -50,7 +50,7 @@
 #include <openbsc/ipaccess.h>
 #include <openbsc/mgcp.h>
 #include <openbsc/mgcp_internal.h>
-#include <openbsc/control_cmd.h>
+#include <osmocom/ctrl/control_cmd.h>
 
 #include <osmocom/sccp/sccp.h>
 
diff --git a/openbsc/src/osmo-bsc_nat/bsc_nat.c b/openbsc/src/osmo-bsc_nat/bsc_nat.c
index 4b0165c..e66eb08 100644
--- a/openbsc/src/osmo-bsc_nat/bsc_nat.c
+++ b/openbsc/src/osmo-bsc_nat/bsc_nat.c
@@ -44,8 +44,8 @@
 #include <openbsc/socket.h>
 #include <openbsc/vty.h>
 
-#include <openbsc/control_cmd.h>
-#include <openbsc/control_if.h>
+#include <osmocom/ctrl/control_cmd.h>
+#include <osmocom/ctrl/control_if.h>
 
 #include <osmocom/core/application.h>
 #include <osmocom/core/talloc.h>
diff --git a/openbsc/src/osmo-bsc_nat/bsc_nat_ctrl.c b/openbsc/src/osmo-bsc_nat/bsc_nat_ctrl.c
index b9a1ead..14985e7 100644
--- a/openbsc/src/osmo-bsc_nat/bsc_nat_ctrl.c
+++ b/openbsc/src/osmo-bsc_nat/bsc_nat_ctrl.c
@@ -21,12 +21,15 @@
 
 #include <osmocom/core/talloc.h>
 
-#include <openbsc/control_cmd.h>
-#include <openbsc/control_if.h>
+#include <osmocom/ctrl/control_cmd.h>
+#include <osmocom/ctrl/control_if.h>
 
+#include <openbsc/ctrl.h>
 #include <openbsc/bsc_nat.h>
 
 #include <unistd.h>
+#include <string.h>
+#include <errno.h>
 
 
 #define NAT_MAX_CTRL_ID 65535
diff --git a/openbsc/src/osmo-nitb/Makefile.am b/openbsc/src/osmo-nitb/Makefile.am
index fe285cb..57a9284 100644
--- a/openbsc/src/osmo-nitb/Makefile.am
+++ b/openbsc/src/osmo-nitb/Makefile.am
@@ -1,7 +1,7 @@
 AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/include -I$(top_builddir)
 AM_CFLAGS=-Wall	$(COVERAGE_CFLAGS)			\
   	$(LIBOSMOCORE_CFLAGS) $(LIBOSMOGSM_CFLAGS) $(LIBOSMOVTY_CFLAGS) \
-	$(LIBOSMOABIS_CFLAGS) $(LIBSMPP34_CFLAGS)
+	$(LIBOSMOCTRL_CFLAGS) $(LIBOSMOABIS_CFLAGS) $(LIBSMPP34_CFLAGS)
 
 AM_LDFLAGS = $(COVERAGE_LDFLAGS)
 
@@ -13,8 +13,7 @@
 		$(top_builddir)/src/libmsc/libmsc.a \
 		$(top_builddir)/src/libbsc/libbsc.a \
 		$(top_builddir)/src/libtrau/libtrau.a \
-		$(top_builddir)/src/libctrl/libctrl.a \
 		$(top_builddir)/src/libcommon/libcommon.a \
 		-ldbi $(LIBCRYPT)				   \
 		$(LIBOSMOGSM_LIBS) $(LIBOSMOVTY_LIBS) $(LIBOSMOCORE_LIBS)  \
-		$(LIBOSMOABIS_LIBS) $(LIBSMPP34_LIBS)
+		$(LIBOSMOCTRL_LIBS) $(LIBOSMOABIS_LIBS) $(LIBSMPP34_LIBS)
diff --git a/openbsc/src/osmo-nitb/bsc_hack.c b/openbsc/src/osmo-nitb/bsc_hack.c
index 3307bc6..372e527 100644
--- a/openbsc/src/osmo-nitb/bsc_hack.c
+++ b/openbsc/src/osmo-nitb/bsc_hack.c
@@ -46,7 +46,8 @@
 #include <openbsc/token_auth.h>
 #include <openbsc/handover_decision.h>
 #include <openbsc/rrlp.h>
-#include <openbsc/control_if.h>
+#include <osmocom/ctrl/control_if.h>
+#include <openbsc/ctrl.h>
 #include <openbsc/osmo_bsc_rf.h>
 
 #include "../../bscconfig.h"
