diff --git a/openbsc/src/libctrl/control_if.c b/openbsc/src/libctrl/control_if.c
index 19f1013..98748d5 100644
--- a/openbsc/src/libctrl/control_if.c
+++ b/openbsc/src/libctrl/control_if.c
@@ -143,8 +143,10 @@
 
 	vline = cmd_make_strvec(request);
 	talloc_free(request);
-	if (!vline)
+	if (!vline) {
+		cmd->reply = "cmd_make_strvec failed.";
 		goto err;
+	}
 
 	for (i=0;i<vector_active(vline);i++) {
 		token = vector_slot(vline, i);
@@ -154,47 +156,47 @@
 		if (!strcmp(token, "net")) {
 			net = gsmnet;
 			if (!net)
-				break;
+				goto err_missing;
 			cmd->node = net;
 			node = CTRL_NODE_NET;
 		} else if (!strcmp(token, "bts")) {
 			if (!net)
-				break;
+				goto err_missing;
 			i++;
 			if (i >= vector_active(vline))
-				break;
+				goto err_index;
 			token = vector_slot(vline, i);
 			num = atoi(token);
 			bts = gsm_bts_num(net, num);
 			if (!bts)
-				break;
+				goto err_missing;
 			cmd->node = bts;
 			node = CTRL_NODE_BTS;
 		} else if (!strcmp(token, "trx")) {
 			if (!bts)
-				break;
+				goto err_missing;
 			i++;
 			if (i >= vector_active(vline))
-				break;
+				goto err_index;
 			token = vector_slot(vline, i);
 			num = atoi(token);
 			trx = gsm_bts_trx_num(bts, num);
 			if (!trx)
-				break;
+				goto err_missing;
 			cmd->node = trx;
 			node = CTRL_NODE_TRX;
 		} else if (!strcmp(token, "ts")) {
 			if (!trx)
-				break;
+				goto err_missing;
 			i++;
 			if (i >= vector_active(vline))
-				break;
+				goto err_index;
 			token = vector_slot(vline, i);
 			num = atoi(token);
 			if ((num >= 0) && (num < TRX_NR_TS))
 				ts = &trx->ts[num];
 			if (!ts)
-				break;
+				goto err_missing;
 			cmd->node = ts;
 			node = CTRL_NODE_TS;
 		} else {
@@ -208,7 +210,7 @@
 			cmds_vec = vector_lookup(ctrl_node_vec, node);
 
 			if (!cmds_vec) {
-				cmd->reply = "Command not found";
+				cmd->reply = "Command not found.";
 				vector_free(cmdvec);
 				break;
 			}
@@ -218,6 +220,9 @@
 			vector_free(cmdvec);
 			break;
 		}
+
+		if (i+1 == vector_active(vline))
+			cmd->reply = "Command not present.";
 	}
 
 	cmd_free_strvec(vline);
@@ -226,6 +231,17 @@
 	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;
 }
 
 static void control_close_conn(struct ctrl_connection *ccon)
