diff --git a/CommonLibs/Makefile.am b/CommonLibs/Makefile.am
index fa0b285..843bc38 100644
--- a/CommonLibs/Makefile.am
+++ b/CommonLibs/Makefile.am
@@ -23,6 +23,7 @@
 
 AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES)
 AM_CXXFLAGS = -Wall -O3 -g -lpthread
+AM_CFLAGS = $(LIBOSMOCORE_CFLAGS) $(LIBOSMOCTRL_CFLAGS) $(LIBOSMOVTY_CFLAGS)
 
 EXTRA_DIST = \
 	example.config \
@@ -36,7 +37,9 @@
 	Sockets.cpp \
 	Threads.cpp \
 	Timeval.cpp \
-	Logger.cpp
+	Logger.cpp \
+	trx_vty.c \
+	debug.c
 
 noinst_HEADERS = \
 	BitVector.h \
@@ -47,4 +50,6 @@
 	Threads.h \
 	Timeval.h \
 	Vector.h \
-	Logger.h
+	Logger.h \
+	trx_vty.h \
+	debug.h
diff --git a/CommonLibs/debug.c b/CommonLibs/debug.c
new file mode 100644
index 0000000..e4db2f3
--- /dev/null
+++ b/CommonLibs/debug.c
@@ -0,0 +1,18 @@
+#include <osmocom/core/logging.h>
+#include <osmocom/core/utils.h>
+#include "debug.h"
+
+/* default categories */
+static const struct log_info_cat default_categories[] = {
+	[DMAIN] = {
+		.name = "DMAIN",
+		.description = "Main generic category",
+		.color = NULL,
+		.enabled = 1, .loglevel = LOGL_NOTICE,
+	},
+};
+
+const struct log_info log_info = {
+	.cat = default_categories,
+	.num_cat = ARRAY_SIZE(default_categories),
+};
diff --git a/CommonLibs/debug.h b/CommonLibs/debug.h
new file mode 100644
index 0000000..7038f4c
--- /dev/null
+++ b/CommonLibs/debug.h
@@ -0,0 +1,8 @@
+#pragma once
+
+extern const struct log_info log_info;
+
+/* Debug Areas of the code */
+enum {
+	DMAIN,
+};
diff --git a/CommonLibs/trx_vty.c b/CommonLibs/trx_vty.c
new file mode 100644
index 0000000..b16cd24
--- /dev/null
+++ b/CommonLibs/trx_vty.c
@@ -0,0 +1,162 @@
+/*
+ * Copyright (C) 2012-2017 sysmocom - s.f.m.c. GmbH
+ * 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, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <string.h>
+#include <stdint.h>
+#include <inttypes.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+
+#include <osmocom/core/talloc.h>
+#include <osmocom/core/utils.h>
+#include <osmocom/core/rate_ctr.h>
+
+#include <osmocom/vty/command.h>
+#include <osmocom/vty/vty.h>
+#include <osmocom/vty/misc.h>
+
+#include "trx_vty.h"
+#include "../config.h"
+
+static struct trx_ctx* g_trx_ctx;
+
+struct trx_ctx *trx_from_vty(struct vty *v)
+{
+        /* It can't hurt to force callers to continue to pass the vty instance
+         * to this function, in case we'd like to retrieve the global
+         * trx instance from the vty at some point in the future. But
+         * until then, just return the global pointer, which should have been
+         * initialized by trx_vty_init().
+         */
+        OSMO_ASSERT(g_trx_ctx);
+        return g_trx_ctx;
+}
+
+enum trx_vty_node {
+	TRX_NODE = _LAST_OSMOVTY_NODE + 1,
+};
+
+static struct cmd_node trx_node = {
+	TRX_NODE,
+	"%s(config-trx)# ",
+	1,
+};
+
+DEFUN(cfg_trx, cfg_trx_cmd,
+	"trx",
+	"Configure the TRX\n")
+{
+	struct trx_ctx *trx = trx_from_vty(vty);
+
+	if (!trx)
+		return CMD_WARNING;
+
+	vty->node = TRX_NODE;
+
+	return CMD_SUCCESS;
+}
+
+DEFUN(cfg_bind_ip, cfg_bind_ip_cmd,
+	"bind-ip A.B.C.D",
+	"Set the IP address for the local bind\n"
+	"IPv4 Address\n")
+{
+	struct trx_ctx *trx = trx_from_vty(vty);
+
+	osmo_talloc_replace_string(trx, &trx->cfg.bind_addr, argv[0]);
+
+	return CMD_SUCCESS;
+}
+
+static int config_write_trx(struct vty *vty)
+{
+	struct trx_ctx *trx = trx_from_vty(vty);
+
+	vty_out(vty, "trx%s", VTY_NEWLINE);
+	if (trx->cfg.bind_addr)
+		vty_out(vty, " bind-ip %s%s", trx->cfg.bind_addr, VTY_NEWLINE);
+
+	return CMD_SUCCESS;
+}
+
+DEFUN(show_trx, show_trx_cmd,
+	"show trx",
+	SHOW_STR "Display information on the TRX\n")
+{
+	struct trx_ctx *trx = trx_from_vty(vty);
+
+	vty_out(vty, "TRX: Bound to %s%s", trx->cfg.bind_addr, VTY_NEWLINE);
+
+	return CMD_SUCCESS;
+}
+
+static int trx_vty_is_config_node(struct vty *vty, int node)
+{
+	switch (node) {
+	case TRX_NODE:
+		return 1;
+	default:
+		return 0;
+	}
+}
+
+static int trx_vty_go_parent(struct vty *vty)
+{
+	switch (vty->node) {
+	case TRX_NODE:
+		vty->node = CONFIG_NODE;
+		vty->index = NULL;
+		vty->index_sub = NULL;
+		break;
+	default:
+		OSMO_ASSERT(0);
+	}
+
+	return vty->node;
+}
+
+static const char trx_copyright[] =
+	"Copyright (C) 2007-2014 Free Software Foundation, Inc.\r\n"
+	"Copyright (C) 2013 Thomas Tsou <tom@tsou.cc>\r\n"
+	"Copyright (C) 2015 Ettus Research LLC\r\n"
+	"Copyright (C) 2017-2018 by sysmocom s.f.m.c. GmbH <info@sysmocom.de>\r\n"
+	"License AGPLv3+: GNU AGPL version 3 or later <http://gnu.org/licenses/agpl-3.0.html>\r\n"
+	"This is free software: you are free to change and redistribute it.\r\n"
+	"There is NO WARRANTY, to the extent permitted by law.\r\n";
+
+struct vty_app_info g_vty_info = {
+	.name		= "OsmoTRX",
+	.version	= PACKAGE_VERSION,
+	.copyright	= trx_copyright,
+	.go_parent_cb	= trx_vty_go_parent,
+	.is_config_node	= trx_vty_is_config_node,
+};
+
+int trx_vty_init(struct trx_ctx* trx)
+{
+	g_trx_ctx = trx;
+	install_element_ve(&show_trx_cmd);
+
+	install_element(CONFIG_NODE, &cfg_trx_cmd);
+
+	install_node(&trx_node, config_write_trx);
+	install_element(TRX_NODE, &cfg_bind_ip_cmd);
+
+	return 0;
+}
diff --git a/CommonLibs/trx_vty.h b/CommonLibs/trx_vty.h
new file mode 100644
index 0000000..74af31b
--- /dev/null
+++ b/CommonLibs/trx_vty.h
@@ -0,0 +1,13 @@
+#pragma once
+
+#include <osmocom/vty/command.h>
+
+extern struct vty_app_info g_vty_info;
+
+struct trx_ctx {
+	struct {
+		char *bind_addr;
+	} cfg;
+};
+
+int trx_vty_init(struct trx_ctx* trx);
