diff --git a/src/managesieve/managesieve-client.c b/src/managesieve/managesieve-client.c
index f110c573ed6d65ebbdb62b4d8373b369255bd7fe..c4c8e970dced0738d2e80b522051f5061e4b9c12 100644
--- a/src/managesieve/managesieve-client.c
+++ b/src/managesieve/managesieve-client.c
@@ -444,6 +444,7 @@ bool client_read_args(struct client_command_context *cmd, unsigned int count,
 		      const struct managesieve_arg **args_r)
 {
 	const struct managesieve_arg *dummy_args_r = NULL;
+	string_t *str;
 	int ret;
 
 	if (args_r == NULL)
@@ -467,6 +468,10 @@ bool client_read_args(struct client_command_context *cmd, unsigned int count,
 			}
 		}
 
+		str = t_str_new(256);
+		managesieve_write_args(str, *args_r);
+		cmd->args = p_strdup(cmd->pool, str_c(str));
+
 		/* all parameters read successfully */
 		return TRUE;
 	} else if (ret == -2) {
diff --git a/src/managesieve/managesieve-client.h b/src/managesieve/managesieve-client.h
index b640a54a2fa488dbbff4eaa48844f0e6f0991bde..9c40448ccd451390221777e203cc7a795fc73bf4 100644
--- a/src/managesieve/managesieve-client.h
+++ b/src/managesieve/managesieve-client.h
@@ -12,7 +12,12 @@ struct client_command_context {
 	struct client *client;
 
 	pool_t pool;
+	/* Name of this command */
 	const char *name;
+	/* Parameters for this command. These are generated from parsed
+	   ManageSieve arguments, so they may not be exactly the same as how
+	   client sent them. */
+	const char *args;
 
 	command_func_t *func;
 	void *context;