diff --git a/src/flash/nand/tcl.c b/src/flash/nand/tcl.c
index ca8b9dad4..9e0ca41ac 100644
--- a/src/flash/nand/tcl.c
+++ b/src/flash/nand/tcl.c
@@ -479,8 +479,8 @@ static int nand_init(struct command_context *cmd_ctx)
 {
 	if (!nand_devices)
 		return ERROR_OK;
-	struct command *parent = command_find_in_context(cmd_ctx, "nand");
-	return register_commands(cmd_ctx, parent, nand_exec_command_handlers);
+
+	return register_commands(cmd_ctx, "nand", nand_exec_command_handlers);
 }
 
 COMMAND_HANDLER(handle_nand_init_command)
diff --git a/src/flash/nor/esirisc_flash.c b/src/flash/nor/esirisc_flash.c
index 88f00bcca..24e811704 100644
--- a/src/flash/nor/esirisc_flash.c
+++ b/src/flash/nor/esirisc_flash.c
@@ -109,7 +109,6 @@ static const struct command_registration esirisc_flash_command_handlers[];
 FLASH_BANK_COMMAND_HANDLER(esirisc_flash_bank_command)
 {
 	struct esirisc_flash_bank *esirisc_info;
-	struct command *esirisc_cmd;
 
 	if (CMD_ARGC < 9)
 		return ERROR_COMMAND_SYNTAX_ERROR;
@@ -123,8 +122,7 @@ FLASH_BANK_COMMAND_HANDLER(esirisc_flash_bank_command)
 	bank->driver_priv = esirisc_info;
 
 	/* register commands using existing esirisc context */
-	esirisc_cmd = command_find_in_context(CMD_CTX, "esirisc");
-	register_commands(CMD_CTX, esirisc_cmd, esirisc_flash_command_handlers);
+	register_commands(CMD_CTX, "esirisc", esirisc_flash_command_handlers);
 
 	return ERROR_OK;
 }
diff --git a/src/flash/nor/tcl.c b/src/flash/nor/tcl.c
index 66b9a4cb6..3f737aca3 100644
--- a/src/flash/nor/tcl.c
+++ b/src/flash/nor/tcl.c
@@ -1248,8 +1248,7 @@ static int flash_init_drivers(struct command_context *cmd_ctx)
 	if (!flash_bank_list())
 		return ERROR_OK;
 
-	struct command *parent = command_find_in_context(cmd_ctx, "flash");
-	return register_commands(cmd_ctx, parent, flash_exec_command_handlers);
+	return register_commands(cmd_ctx, "flash", flash_exec_command_handlers);
 }
 
 COMMAND_HANDLER(handle_flash_bank_command)
diff --git a/src/helper/command.c b/src/helper/command.c
index 89e217382..114d07328 100644
--- a/src/helper/command.c
+++ b/src/helper/command.c
@@ -244,12 +244,6 @@ static struct command *command_find(struct command *head, const char *name)
 	return NULL;
 }
 
-struct command *command_find_in_context(struct command_context *cmd_ctx,
-	const char *name)
-{
-	return command_find(cmd_ctx->commands, name);
-}
-
 /**
  * Add the command into the linked list, sorted by name.
  * @param head Address to head of command list pointer, which may be
@@ -391,7 +385,7 @@ static struct command *register_command(struct command_context *context,
 	return c;
 }
 
-int __register_commands(struct command_context *cmd_ctx, struct command *parent,
+static int ___register_commands(struct command_context *cmd_ctx, struct command *parent,
 	const struct command_registration *cmds, void *data,
 	struct target *override_target)
 {
@@ -412,7 +406,7 @@ int __register_commands(struct command_context *cmd_ctx, struct command *parent,
 		}
 		if (NULL != cr->chain) {
 			struct command *p = c ? : parent;
-			retval = __register_commands(cmd_ctx, p, cr->chain, data, override_target);
+			retval = ___register_commands(cmd_ctx, p, cr->chain, data, override_target);
 			if (ERROR_OK != retval)
 				break;
 		}
@@ -424,6 +418,18 @@ int __register_commands(struct command_context *cmd_ctx, struct command *parent,
 	return retval;
 }
 
+int __register_commands(struct command_context *cmd_ctx, const char *cmd_prefix,
+	const struct command_registration *cmds, void *data,
+	struct target *override_target)
+{
+	struct command *parent = NULL;
+
+	if (cmd_prefix)
+		parent = command_find(cmd_ctx->commands, cmd_prefix);
+
+	return ___register_commands(cmd_ctx, parent, cmds, data, override_target);
+}
+
 int unregister_all_commands(struct command_context *context,
 	struct command *parent)
 {
diff --git a/src/helper/command.h b/src/helper/command.h
index 871c064d3..9a04e9fa1 100644
--- a/src/helper/command.h
+++ b/src/helper/command.h
@@ -240,7 +240,7 @@ struct command_registration {
 /** Use this as the last entry in an array of command_registration records. */
 #define COMMAND_REGISTRATION_DONE { .name = NULL, .chain = NULL }
 
-int __register_commands(struct command_context *cmd_ctx, struct command *parent,
+int __register_commands(struct command_context *cmd_ctx, const char *cmd_prefix,
 		const struct command_registration *cmds, void *data,
 		struct target *override_target);
 
@@ -252,17 +252,17 @@ int __register_commands(struct command_context *cmd_ctx, struct command *parent,
  * Otherwise, the chained commands are added as children of the command.
  *
  * @param cmd_ctx The command_context in which to register the command.
- * @param parent Register this command as a child of this, or NULL to
+ * @param cmd_prefix Register this command as a child of this, or NULL to
  * register a top-level command.
  * @param cmds Pointer to an array of command_registration records that
  * contains the desired command parameters.  The last record must have
  * NULL for all fields.
  * @returns ERROR_OK on success; ERROR_FAIL if any registration fails.
  */
-static inline int register_commands(struct command_context *cmd_ctx, struct command *parent,
+static inline int register_commands(struct command_context *cmd_ctx, const char *cmd_prefix,
 		const struct command_registration *cmds)
 {
-	return __register_commands(cmd_ctx, parent, cmds, NULL, NULL);
+	return __register_commands(cmd_ctx, cmd_prefix, cmds, NULL, NULL);
 }
 
 /**
@@ -270,7 +270,7 @@ static inline int register_commands(struct command_context *cmd_ctx, struct comm
  * that command should override the current target
  *
  * @param cmd_ctx The command_context in which to register the command.
- * @param parent Register this command as a child of this, or NULL to
+ * @param cmd_prefix Register this command as a child of this, or NULL to
  * register a top-level command.
  * @param cmds Pointer to an array of command_registration records that
  * contains the desired command parameters.  The last record must have
@@ -279,10 +279,10 @@ static inline int register_commands(struct command_context *cmd_ctx, struct comm
  * @returns ERROR_OK on success; ERROR_FAIL if any registration fails.
  */
 static inline int register_commands_override_target(struct command_context *cmd_ctx,
-		struct command *parent, const struct command_registration *cmds,
+		const char *cmd_prefix, const struct command_registration *cmds,
 		struct target *target)
 {
-	return __register_commands(cmd_ctx, parent, cmds, NULL, target);
+	return __register_commands(cmd_ctx, cmd_prefix, cmds, NULL, target);
 }
 
 /**
@@ -292,7 +292,7 @@ static inline int register_commands_override_target(struct command_context *cmd_
  * is unregistered.
  *
  * @param cmd_ctx The command_context in which to register the command.
- * @param parent Register this command as a child of this, or NULL to
+ * @param cmd_prefix Register this command as a child of this, or NULL to
  * register a top-level command.
  * @param cmds Pointer to an array of command_registration records that
  * contains the desired command parameters.  The last record must have
@@ -301,10 +301,10 @@ static inline int register_commands_override_target(struct command_context *cmd_
  * @returns ERROR_OK on success; ERROR_FAIL if any registration fails.
  */
 static inline int register_commands_with_data(struct command_context *cmd_ctx,
-		struct command *parent, const struct command_registration *cmds,
+		const char *cmd_prefix, const struct command_registration *cmds,
 		void *data)
 {
-	return __register_commands(cmd_ctx, parent, cmds, data, NULL);
+	return __register_commands(cmd_ctx, cmd_prefix, cmds, data, NULL);
 }
 
 /**
@@ -316,9 +316,6 @@ static inline int register_commands_with_data(struct command_context *cmd_ctx,
 int unregister_all_commands(struct command_context *cmd_ctx,
 		struct command *parent);
 
-struct command *command_find_in_context(struct command_context *cmd_ctx,
-		const char *name);
-
 void command_set_output_handler(struct command_context *context,
 		command_output_handler_t output_handler, void *priv);
 
diff --git a/src/pld/pld.c b/src/pld/pld.c
index ef7993c5d..9e8c07d80 100644
--- a/src/pld/pld.c
+++ b/src/pld/pld.c
@@ -187,8 +187,7 @@ static int pld_init(struct command_context *cmd_ctx)
 	if (!pld_devices)
 		return ERROR_OK;
 
-	struct command *parent = command_find_in_context(cmd_ctx, "pld");
-	return register_commands(cmd_ctx, parent, pld_exec_command_handlers);
+	return register_commands(cmd_ctx, "pld", pld_exec_command_handlers);
 }
 
 COMMAND_HANDLER(handle_pld_init_command)
diff --git a/src/target/etm.c b/src/target/etm.c
index 19f3691bd..6dc2bd48c 100644
--- a/src/target/etm.c
+++ b/src/target/etm.c
@@ -2107,6 +2107,5 @@ static const struct command_registration etm_exec_command_handlers[] = {
 
 static int etm_register_user_commands(struct command_context *cmd_ctx)
 {
-	struct command *etm_cmd = command_find_in_context(cmd_ctx, "etm");
-	return register_commands(cmd_ctx, etm_cmd, etm_exec_command_handlers);
+	return register_commands(cmd_ctx, "etm", etm_exec_command_handlers);
 }