diff --git a/openbsc/src/libbsc/bsc_ctrl_lookup.c b/openbsc/src/libbsc/bsc_ctrl_lookup.c
index 6e68a15..f28b841 100644
--- a/openbsc/src/libbsc/bsc_ctrl_lookup.c
+++ b/openbsc/src/libbsc/bsc_ctrl_lookup.c
@@ -30,26 +30,6 @@
 
 extern vector ctrl_node_vec;
 
-int ctrl_parse_get_num(vector vline, int i, long *num)
-{
-	char *token, *tmp;
-
-	if (i >= vector_active(vline))
-		return 0;
-	token = vector_slot(vline, i);
-
-	errno = 0;
-	if (token[0] == '\0')
-		return 0;
-
-	*num = strtol(token, &tmp, 10);
-	if (tmp[0] != '\0' || errno != 0)
-		return 0;
-
-	return 1;
-}
-
-
 /*! \brief control interface lookup function for bsc/bts gsm_data
  * \param[in] data Private data passed to controlif_setup()
  * \param[in] vline Vector of the line holding the command string
@@ -57,8 +37,8 @@
  * \param[out] node_data private dta of node that was determined
  * \param i Current index into vline, up to which it is parsed
  */
-int bsc_ctrl_node_lookup(void *data, vector vline, int *node_type,
-			 void **node_data, int *i)
+static int bsc_ctrl_node_lookup(void *data, vector vline, int *node_type,
+				void **node_data, int *i)
 {
 	struct gsm_network *net = data;
 	struct gsm_bts *bts = NULL;
@@ -117,106 +97,7 @@
 	return -ERANGE;
 }
 
-int bsc_ctrl_cmd_handle(struct ctrl_cmd *cmd, void *data)
-{
-	char *request;
-	int i, j, ret, node;
-
-	vector vline, cmdvec, cmds_vec;
-
-	ret = CTRL_CMD_ERROR;
-	cmd->reply = NULL;
-	node = CTRL_NODE_ROOT;
-	cmd->node = data;
-
-	request = talloc_strdup(cmd, cmd->variable);
-	if (!request)
-		goto err;
-
-	for (i=0;i<strlen(request);i++) {
-		if (request[i] == '.')
-			request[i] = ' ';
-	}
-
-	vline = cmd_make_strvec(request);
-	talloc_free(request);
-	if (!vline) {
-		cmd->reply = "cmd_make_strvec failed.";
-		goto err;
-	}
-
-	for (i=0;i<vector_active(vline);i++) {
-		int rc;
-
-		rc = bsc_ctrl_node_lookup(data, vline, &node, &cmd->node, &i);
-		if (rc == 1) {
-			/* do nothing */
-		} else if (rc == -ENODEV)
-			goto err_missing;
-		else if (rc == -ERANGE)
-			goto err_index;
-		else {
-			/* If we're here the rest must be the command */
-			cmdvec = vector_init(vector_active(vline)-i);
-			for (j=i; j<vector_active(vline); j++) {
-				vector_set(cmdvec, vector_slot(vline, j));
-			}
-
-			/* Get the command vector of the right node */
-			cmds_vec = vector_lookup(ctrl_node_vec, node);
-
-			if (!cmds_vec) {
-				cmd->reply = "Command not found.";
-				vector_free(cmdvec);
-				break;
-			}
-
-			ret = ctrl_cmd_exec(cmdvec, cmd, cmds_vec, data);
-
-			vector_free(cmdvec);
-			break;
-		}
-
-		if (i+1 == vector_active(vline))
-			cmd->reply = "Command not present.";
-	}
-
-	cmd_free_strvec(vline);
-
-err:
-	if (!cmd->reply) {
-		if (ret == CTRL_CMD_ERROR) {
-			cmd->reply = "An error has occured.";
-			LOGP(DCTRL, LOGL_NOTICE,
-			     "%s: cmd->reply has not been set (ERROR).\n",
-			     cmd->variable);
-		} else if (ret == CTRL_CMD_REPLY) {
-			LOGP(DCTRL, LOGL_NOTICE,
-			     "%s: cmd->reply has not been set (type = %d).\n",
-			     cmd->variable, cmd->type);
-			cmd->reply = "";
-		} else {
-			cmd->reply = "Command has been handled.";
-		}
-	}
-
-	if (ret == CTRL_CMD_ERROR)
-		cmd->type = CTRL_TYPE_ERROR;
-	return ret;
-
-err_missing:
-	cmd_free_strvec(vline);
-	cmd->type = CTRL_TYPE_ERROR;
-	cmd->reply = "Error while resolving object";
-	return ret;
-err_index:
-	cmd_free_strvec(vline);
-	cmd->type = CTRL_TYPE_ERROR;
-	cmd->reply = "Error while parsing the index.";
-	return ret;
-}
-
 struct ctrl_handle *bsc_controlif_setup(struct gsm_network *net, uint16_t port)
 {
-	return controlif_setup(net, port, bsc_ctrl_cmd_handle);
+	return controlif_setup(net, port, bsc_ctrl_node_lookup);
 }
