diff --git a/src/helper/command.c b/src/helper/command.c
index dd109657069aa349b5f1e874d5577c90aa9e38e7..8d710c9986e465beb6b80214e1515994aeed377e 100644
--- a/src/helper/command.c
+++ b/src/helper/command.c
@@ -238,23 +238,21 @@ static struct command **command_list_for_parent(
 }
 
 static struct command *command_new(struct command_context *cmd_ctx,
-		struct command *parent, const char *name,
-		command_handler_t handler, enum command_mode mode,
-		const char *help, const char *usage)
+		struct command *parent, const struct command_registration *cr)
 {
-	assert(name);
+	assert(cr->name);
 
 	struct command *c = malloc(sizeof(struct command));
 	memset(c, 0, sizeof(struct command));
 
-	c->name = strdup(name);
-	if (help)
-		c->help = strdup(help);
-	if (usage)
-		c->usage = strdup(usage);
+	c->name = strdup(cr->name);
+	if (cr->help)
+		c->help = strdup(cr->help);
+	if (cr->usage)
+		c->usage = strdup(cr->usage);
 	c->parent = parent;
-	c->handler = handler;
-	c->mode = mode;
+	c->handler = cr->handler;
+	c->mode = cr->mode;
 
 	command_add_child(command_list_for_parent(cmd_ctx, parent), c);
 
@@ -328,7 +326,7 @@ struct command* register_command(struct command_context *context,
 		return c;
 	}
 
-	c = command_new(context, parent, name, cr->handler, cr->mode, cr->help, cr->usage);
+	c = command_new(context, parent, cr);
 	/* if allocation failed or it is a placeholder (no handler), we're done */
 	if (NULL == c || NULL == c->handler)
 		return c;