diff --git a/src/lib-sieve/ext-encoded-character.c b/src/lib-sieve/ext-encoded-character.c
index c8b8803e8232ba93ac54217cb8963bc49ce5a040..cc5553be7e180bd75363acb126c239cbbfa044e3 100644
--- a/src/lib-sieve/ext-encoded-character.c
+++ b/src/lib-sieve/ext-encoded-character.c
@@ -41,10 +41,8 @@ bool arg_encoded_string_validate
 		struct sieve_command *context);
 
 const struct sieve_argument_def encoded_string_argument = {
-	"@encoded-string",
-	NULL,
-	arg_encoded_string_validate,
-	NULL, NULL, NULL
+	.identifier = "@encoded-string",
+	.validate = arg_encoded_string_validate
 };
 
 /* Parsing */
diff --git a/src/lib-sieve/plugins/body/tst-body.c b/src/lib-sieve/plugins/body/tst-body.c
index e5c2f1b51282e557fc2989affdf5e991b68ff2d1..677acad675db4d0fe351ebf9a392a024965f02ab 100644
--- a/src/lib-sieve/plugins/body/tst-body.c
+++ b/src/lib-sieve/plugins/body/tst-body.c
@@ -87,27 +87,21 @@ static bool tag_body_transform_generate
 /* Argument objects */
 
 static const struct sieve_argument_def body_raw_tag = {
-	"raw",
-	NULL,
-	tag_body_transform_validate,
-	NULL, NULL,
-	tag_body_transform_generate
+	.identifier = "raw",
+	.validate = tag_body_transform_validate,
+	.generate = tag_body_transform_generate
 };
 
 static const struct sieve_argument_def body_content_tag = {
-	"content",
-	NULL,
-	tag_body_transform_validate,
-	NULL, NULL,
-	tag_body_transform_generate
+	.identifier = "content",
+	.validate = tag_body_transform_validate,
+	.generate = tag_body_transform_generate
 };
 
 static const struct sieve_argument_def body_text_tag = {
-	"text",
-	NULL,
-	tag_body_transform_validate,
-	NULL, NULL,
-	tag_body_transform_generate
+	.identifier = "text",
+	.validate = tag_body_transform_validate,
+	.generate = tag_body_transform_generate
 };
 
 /* Argument implementation */
diff --git a/src/lib-sieve/plugins/copy/ext-copy.c b/src/lib-sieve/plugins/copy/ext-copy.c
index 0c1ad898a7fe41ff3b3b40707b48e6feddf2ba99..35f18ce6959ea0d126f54605980ea78ebd5aef2d 100644
--- a/src/lib-sieve/plugins/copy/ext-copy.c
+++ b/src/lib-sieve/plugins/copy/ext-copy.c
@@ -92,11 +92,9 @@ static bool tag_copy_generate
     struct sieve_command *cmd);
 
 static const struct sieve_argument_def copy_tag = {
-	"copy",
-	NULL,
-	tag_copy_validate,
-	NULL, NULL,
-	tag_copy_generate
+	.identifier = "copy",
+	.validate = tag_copy_validate,
+	.generate = tag_copy_generate
 };
 
 /*
diff --git a/src/lib-sieve/plugins/date/tst-date.c b/src/lib-sieve/plugins/date/tst-date.c
index e7626158e99335052d80384d0b65809a908dc09b..a1e2941a8151acad2bf9afd7557e680e484beee1 100644
--- a/src/lib-sieve/plugins/date/tst-date.c
+++ b/src/lib-sieve/plugins/date/tst-date.c
@@ -94,19 +94,15 @@ static bool tag_zone_generate
 /* Argument objects */
 
 static const struct sieve_argument_def date_zone_tag = {
- 	"zone",
-	NULL,
-	tag_zone_validate,
-	NULL, NULL,
-	tag_zone_generate
+ 	.identifier = "zone",
+	.validate = tag_zone_validate,
+	.generate = tag_zone_generate
 };
 
 static const struct sieve_argument_def date_originalzone_tag = {
-	"originalzone",
-	NULL,
-	tag_zone_validate,
-	NULL, NULL,
-	tag_zone_generate
+	.identifier = "originalzone",
+	.validate = tag_zone_validate,
+	.generate = tag_zone_generate
 };
 
 /*
diff --git a/src/lib-sieve/plugins/duplicate/tst-duplicate.c b/src/lib-sieve/plugins/duplicate/tst-duplicate.c
index 68e01bed383f06cdfb8c4ca46276af4017605470..84d0527d36a7726de1f1ef7862473082061486d9 100644
--- a/src/lib-sieve/plugins/duplicate/tst-duplicate.c
+++ b/src/lib-sieve/plugins/duplicate/tst-duplicate.c
@@ -52,43 +52,32 @@ static bool tst_duplicate_validate_string_tag
 		struct sieve_command *cmd);
 
 static const struct sieve_argument_def duplicate_seconds_tag = {
-	"seconds",
-	NULL,
-	tst_duplicate_validate_number_tag,
-	NULL, NULL, NULL,
+	.identifier = "seconds",
+	.validate = tst_duplicate_validate_number_tag
 };
 
 static const struct sieve_argument_def duplicate_header_tag = {
-	"header",
-	NULL,
-	tst_duplicate_validate_string_tag,
-	NULL, NULL, NULL
+	.identifier = "header",
+	.validate = tst_duplicate_validate_string_tag
 };
 
 static const struct sieve_argument_def duplicate_uniqueid_tag = {
-	"uniqueid",
-	NULL,
-	tst_duplicate_validate_string_tag,
-	NULL, NULL, NULL
+	.identifier = "uniqueid",
+	.validate = tst_duplicate_validate_string_tag
 };
 
 static const struct sieve_argument_def duplicate_value_tag = {
-	"value", /* vnd.dovecot.duplicate (deprecated) */
-	NULL,
-	tst_duplicate_validate_string_tag,
-	NULL, NULL, NULL
+	.identifier = "value", /* vnd.dovecot.duplicate (deprecated) */
+	.validate = tst_duplicate_validate_string_tag
 };
 
 static const struct sieve_argument_def duplicate_handle_tag = {
-	"handle",
-	NULL,
-	tst_duplicate_validate_string_tag,
-	NULL, NULL, NULL
+	.identifier = "handle",
+	.validate = tst_duplicate_validate_string_tag
 };
 
 static const struct sieve_argument_def duplicate_last_tag = {
-	"last",
-	NULL, NULL,	NULL, NULL, NULL
+	.identifier = "last"
 };
 
 /* Codes for optional arguments */
diff --git a/src/lib-sieve/plugins/editheader/cmd-addheader.c b/src/lib-sieve/plugins/editheader/cmd-addheader.c
index 82d8d65bcc57848e4ca24ad9367eea8ffe28287e..f4c78f8fc46f96929329c03904d935a92e3af401 100644
--- a/src/lib-sieve/plugins/editheader/cmd-addheader.c
+++ b/src/lib-sieve/plugins/editheader/cmd-addheader.c
@@ -55,8 +55,7 @@ const struct sieve_command_def addheader_command = {
 /* Argument objects */
 
 static const struct sieve_argument_def addheader_last_tag = {
-	"last",
-	NULL, NULL, NULL, NULL, NULL
+	.identifier = "last"
 };
 
 /* Codes for optional arguments */
diff --git a/src/lib-sieve/plugins/editheader/cmd-deleteheader.c b/src/lib-sieve/plugins/editheader/cmd-deleteheader.c
index d815db1e81600e74d391aec0dbb2eb2f886d4ac2..c38e6f22b00a307037e51bfe317dd4bf8f55f6b2 100644
--- a/src/lib-sieve/plugins/editheader/cmd-deleteheader.c
+++ b/src/lib-sieve/plugins/editheader/cmd-deleteheader.c
@@ -69,17 +69,13 @@ static bool cmd_deleteheader_validate_last_tag
 /* Argument objects */
 
 static const struct sieve_argument_def deleteheader_index_tag = {
-	"index",
-	NULL,
-	cmd_deleteheader_validate_index_tag,
-	NULL, NULL, NULL
+	.identifier = "index",
+	.validate = cmd_deleteheader_validate_index_tag
 };
 
 static const struct sieve_argument_def deleteheader_last_tag = {
-	"last",
-	NULL,
-	cmd_deleteheader_validate_last_tag,
-	NULL, NULL, NULL
+	.identifier = "last",
+	.validate = cmd_deleteheader_validate_last_tag
 };
 
 /* Codes for optional arguments */
diff --git a/src/lib-sieve/plugins/enotify/cmd-notify.c b/src/lib-sieve/plugins/enotify/cmd-notify.c
index d499c7201e82b267c4bc8f9c68fd5ecea07e2462..423d71dc0b8f22c8e54090892f576b2aba768195 100644
--- a/src/lib-sieve/plugins/enotify/cmd-notify.c
+++ b/src/lib-sieve/plugins/enotify/cmd-notify.c
@@ -79,31 +79,23 @@ static bool cmd_notify_validate_importance_tag
 /* Argument objects */
 
 static const struct sieve_argument_def notify_from_tag = {
-	"from",
-	NULL,
-	cmd_notify_validate_string_tag,
-	NULL, NULL, NULL
+	.identifier = "from",
+	.validate = cmd_notify_validate_string_tag
 };
 
 static const struct sieve_argument_def notify_options_tag = {
-	"options",
-	NULL,
-	cmd_notify_validate_stringlist_tag,
-	NULL, NULL, NULL
+	.identifier = "options",
+	.validate = cmd_notify_validate_stringlist_tag
 };
 
 static const struct sieve_argument_def notify_message_tag = {
-	"message",
-	NULL,
-	cmd_notify_validate_string_tag,
-	NULL, NULL, NULL
+	.identifier = "message",
+	.validate = cmd_notify_validate_string_tag
 };
 
 static const struct sieve_argument_def notify_importance_tag = {
-	"importance",
-	NULL,
-	cmd_notify_validate_importance_tag,
-	NULL, NULL, NULL
+	.identifier = "importance",
+	.validate = cmd_notify_validate_importance_tag
 };
 
 /*
diff --git a/src/lib-sieve/plugins/imap4flags/tag-flags.c b/src/lib-sieve/plugins/imap4flags/tag-flags.c
index eb2cf231130b797676985dcc9b9c12e339c3f0d7..1e7ebf875d6feb08f3219db196185fdfaa0e3119 100644
--- a/src/lib-sieve/plugins/imap4flags/tag-flags.c
+++ b/src/lib-sieve/plugins/imap4flags/tag-flags.c
@@ -36,18 +36,15 @@ static bool tag_flags_generate
 		struct sieve_command *cmd);
 
 const struct sieve_argument_def tag_flags = {
-	"flags",
-	NULL,
-	tag_flags_validate,
-	NULL, NULL,
-	tag_flags_generate
+	.identifier = "flags",
+	.validate = tag_flags_validate,
+	.generate = tag_flags_generate
 };
 
 const struct sieve_argument_def tag_flags_implicit = {
-	"flags-implicit",
-	NULL,	NULL, NULL,
-	tag_flags_validate_persistent,
-	tag_flags_generate
+	.identifier = "flags-implicit",
+	.validate_persistent = tag_flags_validate_persistent,
+	.generate = tag_flags_generate
 };
 
 /*
diff --git a/src/lib-sieve/plugins/include/cmd-include.c b/src/lib-sieve/plugins/include/cmd-include.c
index 1785ae26ed82e7aaf7a01e84133cf221ff03a7fd..ac666830ebe0c56e4cbcb86ef1976a4f2d5a4571 100644
--- a/src/lib-sieve/plugins/include/cmd-include.c
+++ b/src/lib-sieve/plugins/include/cmd-include.c
@@ -91,17 +91,13 @@ static bool cmd_include_validate_location_tag
 		struct sieve_command *cmd);
 
 static const struct sieve_argument_def include_personal_tag = {
-	"personal",
-	NULL,
-	cmd_include_validate_location_tag,
-	NULL, NULL, NULL
+	.identifier = "personal",
+	.validate = cmd_include_validate_location_tag	
 };
 
 static const struct sieve_argument_def include_global_tag = {
-	"global",
-	NULL,
-	cmd_include_validate_location_tag,
-	NULL, NULL, NULL
+	.identifier = "global",
+	.validate = cmd_include_validate_location_tag
 };
 
 static bool cmd_include_validate_boolean_tag
@@ -109,20 +105,15 @@ static bool cmd_include_validate_boolean_tag
 		struct sieve_command *cmd);
 
 static const struct sieve_argument_def include_once_tag = {
-	"once",
-	NULL,
-	cmd_include_validate_boolean_tag,
-	NULL, NULL, NULL
+	.identifier = "once",
+	.validate = cmd_include_validate_boolean_tag
 };
 
 static const struct sieve_argument_def include_optional_tag = {
-	"optional",
-	NULL,
-	cmd_include_validate_boolean_tag,
-	NULL, NULL, NULL
+	.identifier = "optional",
+	.validate = cmd_include_validate_boolean_tag
 };
 
-
 /*
  * Tag validation
  */
diff --git a/src/lib-sieve/plugins/index/tag-index.c b/src/lib-sieve/plugins/index/tag-index.c
index 03cf011a7b6b30e913f53c7d8aa659c6dab35b8c..cfce44f4a4ebf677298083105d38d480ba4803bd 100644
--- a/src/lib-sieve/plugins/index/tag-index.c
+++ b/src/lib-sieve/plugins/index/tag-index.c
@@ -30,11 +30,9 @@ static bool tag_index_generate
     struct sieve_command *context);
 
 const struct sieve_argument_def index_tag = {
-	"index",
-	NULL,
-	tag_index_validate,
-	NULL, NULL,
-	tag_index_generate
+	.identifier = "index",
+	.validate = tag_index_validate,
+	.generate = tag_index_generate
 };
 
 static bool tag_last_validate
@@ -42,13 +40,10 @@ static bool tag_last_validate
 		struct sieve_command *cmd);
 
 const struct sieve_argument_def last_tag = {
-	"last",
-	NULL,
-	tag_last_validate,
-	NULL, NULL, NULL
+	.identifier = "last",
+	.validate = tag_last_validate,
 };
 
-
 /*
  * Header override
  */
diff --git a/src/lib-sieve/plugins/mailbox/tag-mailbox-create.c b/src/lib-sieve/plugins/mailbox/tag-mailbox-create.c
index 97adb198738ae13e141393ce64256c1ad835c787..e6cc0118cde44c3b385fcbf0437cd9ad867d516c 100644
--- a/src/lib-sieve/plugins/mailbox/tag-mailbox-create.c
+++ b/src/lib-sieve/plugins/mailbox/tag-mailbox-create.c
@@ -27,11 +27,9 @@ static bool tag_mailbox_create_generate
     struct sieve_command *context);
 
 const struct sieve_argument_def mailbox_create_tag = {
-	"create",
-	NULL,
-	tag_mailbox_create_validate,
-	NULL, NULL,
-	tag_mailbox_create_generate
+	.identifier = "create",
+	.validate = tag_mailbox_create_validate,
+	.generate = tag_mailbox_create_generate
 };
 
 /*
diff --git a/src/lib-sieve/plugins/mime/cmd-break.c b/src/lib-sieve/plugins/mime/cmd-break.c
index 47285e67a750781dbdbe5b2865c907825743c06b..b087c523cc06dae54241a3ce5565973044156d9a 100644
--- a/src/lib-sieve/plugins/mime/cmd-break.c
+++ b/src/lib-sieve/plugins/mime/cmd-break.c
@@ -58,10 +58,8 @@ static bool cmd_break_validate_name_tag
 /* Argument objects */
 
 static const struct sieve_argument_def break_name_tag = {
-	"name",
-	NULL,
-	cmd_break_validate_name_tag,
-	NULL, NULL, NULL
+	.identifier = "name",
+	.validate = cmd_break_validate_name_tag
 };
 
 /*
diff --git a/src/lib-sieve/plugins/mime/cmd-foreverypart.c b/src/lib-sieve/plugins/mime/cmd-foreverypart.c
index b6bad222eaa5b8b4610c7da7999d58119cd17c6e..9fcff9f31630c6da4905dbf789c6d061cd82093f 100644
--- a/src/lib-sieve/plugins/mime/cmd-foreverypart.c
+++ b/src/lib-sieve/plugins/mime/cmd-foreverypart.c
@@ -60,10 +60,8 @@ static bool cmd_foreverypart_validate_name_tag
 /* Argument objects */
 
 static const struct sieve_argument_def foreverypart_name_tag = {
-	"name",
-	NULL,
-	cmd_foreverypart_validate_name_tag,
-	NULL, NULL, NULL
+	.identifier = "name",
+	.validate = cmd_foreverypart_validate_name_tag,
 };
 
 /*
diff --git a/src/lib-sieve/plugins/mime/tag-mime.c b/src/lib-sieve/plugins/mime/tag-mime.c
index e8f89717c0034212f6d4fcecb0d192becbbcc97e..f485d0eb0e3e10948b2bbf27ba635fa85ece9b46 100644
--- a/src/lib-sieve/plugins/mime/tag-mime.c
+++ b/src/lib-sieve/plugins/mime/tag-mime.c
@@ -31,11 +31,9 @@ static bool tag_mime_generate
     struct sieve_command *context);
 
 const struct sieve_argument_def mime_tag = {
-	"mime",
-	NULL,
-	tag_mime_validate,
-	NULL, NULL,
-	tag_mime_generate
+	.identifier = "mime",
+	.validate = tag_mime_validate,
+	.generate = tag_mime_generate
 };
 
 static bool tag_mime_option_validate
@@ -43,38 +41,28 @@ static bool tag_mime_option_validate
 		struct sieve_command *cmd);
 
 const struct sieve_argument_def mime_anychild_tag = {
-	"anychild",
-	NULL,
-	tag_mime_option_validate,
-	NULL, NULL, NULL
+	.identifier = "anychild",
+	.validate = tag_mime_option_validate
 };
 
 const struct sieve_argument_def mime_type_tag = {
-	"type",
-	NULL,
-	tag_mime_option_validate,
-	NULL, NULL, NULL
+	.identifier = "type",
+	.validate = tag_mime_option_validate
 };
 
 const struct sieve_argument_def mime_subtype_tag = {
-	"subtype",
-	NULL,
-	tag_mime_option_validate,
-	NULL, NULL, NULL
+	.identifier = "subtype",
+	.validate = tag_mime_option_validate
 };
 
 const struct sieve_argument_def mime_contenttype_tag = {
-	"contenttype",
-	NULL,
-	tag_mime_option_validate,
-	NULL, NULL, NULL
+	.identifier = "contenttype",
+	.validate = tag_mime_option_validate
 };
 
 const struct sieve_argument_def mime_param_tag = {
-	"param",
-	NULL,
-	tag_mime_option_validate,
-	NULL, NULL, NULL
+	.identifier = "param",
+	.validate = tag_mime_option_validate
 };
 
 /*
diff --git a/src/lib-sieve/plugins/notify/cmd-denotify.c b/src/lib-sieve/plugins/notify/cmd-denotify.c
index 1c04ae300c967630bd79808ebdf709f4fe7b69e6..7fec014ed47e3dcc1883c054ec4320a93bd3dcc5 100644
--- a/src/lib-sieve/plugins/notify/cmd-denotify.c
+++ b/src/lib-sieve/plugins/notify/cmd-denotify.c
@@ -66,10 +66,9 @@ static bool tag_match_type_validate
 /* Argument object */
 
 const struct sieve_argument_def denotify_match_tag = {
-	"MATCH-TYPE-STRING",
-	tag_match_type_is_instance_of,
-	tag_match_type_validate,
-	NULL, NULL, NULL,
+	.identifier = "MATCH-TYPE-STRING",
+	.is_instance_of = tag_match_type_is_instance_of,
+	.validate = tag_match_type_validate
 };
 
 /* Codes for optional operands */
diff --git a/src/lib-sieve/plugins/notify/cmd-notify.c b/src/lib-sieve/plugins/notify/cmd-notify.c
index 5af51daed325ca1b9e43307d3f736db2fb6c6159..6c27185a77a77b75174cccdaba26f5f66b65eda9 100644
--- a/src/lib-sieve/plugins/notify/cmd-notify.c
+++ b/src/lib-sieve/plugins/notify/cmd-notify.c
@@ -79,31 +79,23 @@ static bool cmd_notify_validate_stringlist_tag
 /* Argument objects */
 
 static const struct sieve_argument_def notify_method_tag = {
-	"method",
-	NULL,
-	cmd_notify_validate_string_tag,
-	NULL, NULL, NULL
+	.identifier = "method",
+	.validate = cmd_notify_validate_string_tag
 };
 
 static const struct sieve_argument_def notify_options_tag = {
-	"options",
-	NULL,
-	cmd_notify_validate_stringlist_tag,
-	NULL, NULL, NULL
+	.identifier = "options",
+	.validate = cmd_notify_validate_stringlist_tag
 };
 
 static const struct sieve_argument_def notify_id_tag = {
-	"id",
-	NULL,
-	cmd_notify_validate_string_tag,
-	NULL, NULL, NULL
+	.identifier = "id",
+	.validate = cmd_notify_validate_string_tag
 };
 
 static const struct sieve_argument_def notify_message_tag = {
-	"message",
-	NULL,
-	cmd_notify_validate_string_tag,
-	NULL, NULL, NULL
+	.identifier = "message",
+	.validate = cmd_notify_validate_string_tag
 };
 
 /*
diff --git a/src/lib-sieve/plugins/notify/ext-notify-common.c b/src/lib-sieve/plugins/notify/ext-notify-common.c
index 5aa5e8c2b25492ba118ab8ff9bb026a6847b4357..36034014a720f78cb11a784e368bc4d262e50344 100644
--- a/src/lib-sieve/plugins/notify/ext-notify-common.c
+++ b/src/lib-sieve/plugins/notify/ext-notify-common.c
@@ -34,24 +34,18 @@ static bool tag_importance_validate
 		struct sieve_command *cmd);
 
 static const struct sieve_argument_def importance_low_tag = {
-	"low",
-	NULL,
-	tag_importance_validate,
-	NULL, NULL, NULL
+	.identifier = "low",
+	.validate = tag_importance_validate,
 };
 
 static const struct sieve_argument_def importance_normal_tag = {
-	"normal",
-	NULL,
-	tag_importance_validate,
-	NULL, NULL, NULL
+	.identifier = "normal",
+	.validate = tag_importance_validate,
 };
 
 static const struct sieve_argument_def importance_high_tag = {
-	"high",
-	NULL,
-	tag_importance_validate,
-	NULL, NULL, NULL
+	.identifier = "high",
+	.validate = tag_importance_validate,
 };
 
 static bool tag_importance_validate
diff --git a/src/lib-sieve/plugins/spamvirustest/tst-spamvirustest.c b/src/lib-sieve/plugins/spamvirustest/tst-spamvirustest.c
index 6a801a55437da46f6e29ac38a82c04c3788aa487..74d921164a63436dc64a90e38866dad40bbd7689 100644
--- a/src/lib-sieve/plugins/spamvirustest/tst-spamvirustest.c
+++ b/src/lib-sieve/plugins/spamvirustest/tst-spamvirustest.c
@@ -76,10 +76,8 @@ static bool tst_spamtest_validate_percent_tag
 		struct sieve_command *tst);
 
 static const struct sieve_argument_def spamtest_percent_tag = {
- 	"percent",
-	NULL,
-	tst_spamtest_validate_percent_tag,
-	NULL, NULL, NULL
+ 	.identifier = "percent",
+	.validate = tst_spamtest_validate_percent_tag
 };
 
 /*
diff --git a/src/lib-sieve/plugins/vacation/cmd-vacation.c b/src/lib-sieve/plugins/vacation/cmd-vacation.c
index 261863e6d8e9182d7c945de1df1ffb508fcebc10..a72e30fff0356f5b49d0560554b19ad1520c87b3 100644
--- a/src/lib-sieve/plugins/vacation/cmd-vacation.c
+++ b/src/lib-sieve/plugins/vacation/cmd-vacation.c
@@ -98,52 +98,38 @@ static bool cmd_vacation_validate_mime_tag
 /* Argument objects */
 
 static const struct sieve_argument_def vacation_days_tag = {
-	"days",
-	NULL,
-	cmd_vacation_validate_number_tag,
-	NULL, NULL, NULL,
+	.identifier = "days",
+	.validate = cmd_vacation_validate_number_tag
 };
 
 static const struct sieve_argument_def vacation_seconds_tag = {
-	"seconds",
-	NULL,
-	cmd_vacation_validate_number_tag,
-	NULL, NULL, NULL,
+	.identifier = "seconds",
+	.validate = cmd_vacation_validate_number_tag
 };
 
 static const struct sieve_argument_def vacation_subject_tag = {
-	"subject",
-	NULL,
-	cmd_vacation_validate_string_tag,
-	NULL, NULL, NULL
+	.identifier = "subject",
+	.validate = cmd_vacation_validate_string_tag
 };
 
 static const struct sieve_argument_def vacation_from_tag = {
-	"from",
-	NULL,
-	cmd_vacation_validate_string_tag,
-	NULL, NULL, NULL
+	.identifier = "from",
+	.validate = cmd_vacation_validate_string_tag
 };
 
 static const struct sieve_argument_def vacation_addresses_tag = {
-	"addresses",
-	NULL,
-	cmd_vacation_validate_stringlist_tag,
-	NULL, NULL, NULL
+	.identifier = "addresses",
+	.validate = cmd_vacation_validate_stringlist_tag
 };
 
 static const struct sieve_argument_def vacation_mime_tag = {
-	"mime",
-	NULL,
-	cmd_vacation_validate_mime_tag,
-	NULL, NULL, NULL
+	.identifier = "mime",
+	.validate = cmd_vacation_validate_mime_tag
 };
 
 static const struct sieve_argument_def vacation_handle_tag = {
-	"handle",
-	NULL,
-	cmd_vacation_validate_string_tag,
-	NULL, NULL, NULL
+	.identifier = "handle",
+	.validate = cmd_vacation_validate_string_tag
 };
 
 /* Codes for optional arguments */
diff --git a/src/lib-sieve/plugins/variables/cmd-set.c b/src/lib-sieve/plugins/variables/cmd-set.c
index d291cbdae4db67694cdc05d7b9677007c7253c83..125aed961778ddd05eb9c31da7393acdd3b7ba40 100644
--- a/src/lib-sieve/plugins/variables/cmd-set.c
+++ b/src/lib-sieve/plugins/variables/cmd-set.c
@@ -96,10 +96,9 @@ static bool tag_modifier_validate
 /* Modifier tag object */
 
 const struct sieve_argument_def modifier_tag = {
-	"MODIFIER",
-	tag_modifier_is_instance_of,
-	tag_modifier_validate,
-	NULL, NULL, NULL
+	.identifier = "MODIFIER",
+	.is_instance_of = tag_modifier_is_instance_of,
+	.validate = tag_modifier_validate
 };
 
 /* Modifier tag implementation */
diff --git a/src/lib-sieve/plugins/variables/ext-variables-arguments.c b/src/lib-sieve/plugins/variables/ext-variables-arguments.c
index 97985bae56df4e790517062ab7ba105e629b7c6e..7bd4c183be8b0d755a2e9ba0f04483a155586c8a 100644
--- a/src/lib-sieve/plugins/variables/ext-variables-arguments.c
+++ b/src/lib-sieve/plugins/variables/ext-variables-arguments.c
@@ -30,9 +30,8 @@ static bool arg_variable_generate
 		struct sieve_command *context);
 
 const struct sieve_argument_def variable_argument = {
-	"@variable",
-	NULL, NULL, NULL, NULL,
-	arg_variable_generate
+	.identifier = "@variable",
+	.generate = arg_variable_generate
 };
 
 static bool ext_variables_variable_argument_activate
@@ -95,9 +94,8 @@ static bool arg_match_value_generate
 	struct sieve_command *context ATTR_UNUSED);
 
 const struct sieve_argument_def match_value_argument = {
-	"@match_value",
-	NULL, NULL, NULL, NULL,
-	arg_match_value_generate
+	.identifier = "@match_value",
+	.generate = arg_match_value_generate
 };
 
 static bool ext_variables_match_value_argument_activate
@@ -165,11 +163,9 @@ static bool arg_variable_string_validate
 		struct sieve_command *cmd);
 
 const struct sieve_argument_def variable_string_argument = {
-	"@variable-string",
-	NULL,
-	arg_variable_string_validate,
-	NULL, NULL,
-	sieve_arg_catenated_string_generate,
+	.identifier = "@variable-string",
+	.validate = arg_variable_string_validate,
+	.generate = sieve_arg_catenated_string_generate,
 };
 
 static bool arg_variable_string_validate
diff --git a/src/lib-sieve/plugins/variables/ext-variables-namespaces.c b/src/lib-sieve/plugins/variables/ext-variables-namespaces.c
index 7e30d07165995560d63544528d18d71f6a7e152c..96d1d383f448df136bea4fa99ceae88ec55e198d 100644
--- a/src/lib-sieve/plugins/variables/ext-variables-namespaces.c
+++ b/src/lib-sieve/plugins/variables/ext-variables-namespaces.c
@@ -75,9 +75,8 @@ static bool arg_namespace_generate
 	struct sieve_command *context ATTR_UNUSED);
 
 const struct sieve_argument_def namespace_argument = {
-	"@namespace",
-	NULL, NULL, NULL, NULL,
-	arg_namespace_generate
+	.identifier = "@namespace",
+	.generate = arg_namespace_generate
 };
 
 bool ext_variables_namespace_argument_activate
diff --git a/src/lib-sieve/sieve-address-parts.c b/src/lib-sieve/sieve-address-parts.c
index e69039c338dc0dab3b80e532594f140e0f5d5c66..d6ed1394a3c2ba0b05abccfdb932541ff3998f55 100644
--- a/src/lib-sieve/sieve-address-parts.c
+++ b/src/lib-sieve/sieve-address-parts.c
@@ -148,11 +148,10 @@ static bool tag_address_part_generate
 /* Argument object */
 
 const struct sieve_argument_def address_part_tag = {
-	"ADDRESS-PART",
-	tag_address_part_is_instance_of,
-	tag_address_part_validate,
-	NULL, NULL,
-	tag_address_part_generate
+	.identifier = "ADDRESS-PART",
+	.is_instance_of = tag_address_part_is_instance_of,
+	.validate = tag_address_part_validate,
+	.generate = tag_address_part_generate
 };
 
 /* Argument implementation */
diff --git a/src/lib-sieve/sieve-commands.c b/src/lib-sieve/sieve-commands.c
index daf0ae6bca013d379c84467a9ed2c40748425164..12ed310b322c24c47544c2104006d9db0ec162a7 100644
--- a/src/lib-sieve/sieve-commands.c
+++ b/src/lib-sieve/sieve-commands.c
@@ -38,23 +38,19 @@ static bool arg_string_list_generate
 /* Argument objects */
 
 const struct sieve_argument_def number_argument = {
-	"@number",
-	NULL, NULL, NULL, NULL,
-	arg_number_generate
+	.identifier = "@number",
+	.generate = arg_number_generate
 };
 
 const struct sieve_argument_def string_argument = {
-	"@string",
-	NULL, NULL, NULL, NULL,
-	arg_string_generate
+	.identifier = "@string",
+	.generate = arg_string_generate
 };
 
 const struct sieve_argument_def string_list_argument = {
-	"@string-list",
-	NULL,
-	arg_string_list_validate,
-	NULL, NULL,
-	arg_string_list_generate
+	.identifier = "@string-list",
+	.validate = arg_string_list_validate,
+	.generate = arg_string_list_generate
 };
 
 /* Argument implementations */
diff --git a/src/lib-sieve/sieve-comparators.c b/src/lib-sieve/sieve-comparators.c
index bc9ad645c795207d59ca68f036a9fc25a93ef1e0..3245502c50be31faf3f9a8566598b2b032925a9b 100644
--- a/src/lib-sieve/sieve-comparators.c
+++ b/src/lib-sieve/sieve-comparators.c
@@ -118,11 +118,9 @@ static bool tag_comparator_generate
 /* Argument object */
 
 const struct sieve_argument_def comparator_tag = {
-	"comparator",
-	NULL,
-	tag_comparator_validate,
-	NULL, NULL,
-	tag_comparator_generate
+	.identifier = "comparator",
+	.validate = tag_comparator_validate,
+	.generate = tag_comparator_generate
 };
 
 /* Argument implementation */
diff --git a/src/lib-sieve/sieve-match-types.c b/src/lib-sieve/sieve-match-types.c
index 9eb251f4fcc435735bba46922b6184cced455f4f..d3311663c96f9f6f532d7e50e65ab9a911d17a82 100644
--- a/src/lib-sieve/sieve-match-types.c
+++ b/src/lib-sieve/sieve-match-types.c
@@ -358,11 +358,10 @@ static bool tag_match_type_generate
 /* Argument object */
 
 const struct sieve_argument_def match_type_tag = {
-	"MATCH-TYPE",
-	tag_match_type_is_instance_of,
-	tag_match_type_validate,
-	NULL,	NULL,
-	tag_match_type_generate
+	.identifier = "MATCH-TYPE",
+	.is_instance_of = tag_match_type_is_instance_of,
+	.validate = tag_match_type_validate,
+	.generate = tag_match_type_generate
 };
 
 /* Argument implementation */
diff --git a/src/lib-sieve/sieve-validator.c b/src/lib-sieve/sieve-validator.c
index 580a671fbb88677f3f831dba4fcfd32538ad6d52..c70cd0dcbb5d4957e11d380b1dfe94daf7cd091f 100644
--- a/src/lib-sieve/sieve-validator.c
+++ b/src/lib-sieve/sieve-validator.c
@@ -375,10 +375,8 @@ static bool _unknown_tag_validate
 }
 
 static const struct sieve_argument_def _unknown_tag = {
-	"",
-	NULL,
-	_unknown_tag_validate,
-	NULL, NULL, NULL
+	.identifier = "",
+	.validate = _unknown_tag_validate,
 };
 
 static inline bool _tag_registration_is_unknown
diff --git a/src/lib-sieve/tst-size.c b/src/lib-sieve/tst-size.c
index 9be068b73d365d7e719a6f1b2f52dba0d6cf3d1a..bacb1f2f6df021d34b8691f34ee0f812928dc5ce 100644
--- a/src/lib-sieve/tst-size.c
+++ b/src/lib-sieve/tst-size.c
@@ -128,17 +128,13 @@ static bool tst_size_validate_under_tag
  */
 
 static const struct sieve_argument_def size_over_tag = {
-	"over",
-	NULL,
-	tst_size_validate_over_tag,
-	NULL, NULL, NULL
+	.identifier = "over",
+	.validate = tst_size_validate_over_tag
 };
 
 static const struct sieve_argument_def size_under_tag = {
-	"under",
-	NULL,
-	tst_size_validate_under_tag,
-	NULL, NULL,  NULL
+	.identifier = "under",
+	.validate = tst_size_validate_under_tag,
 };
 
 static bool tst_size_registered
diff --git a/src/plugins/sieve-extprograms/cmd-execute.c b/src/plugins/sieve-extprograms/cmd-execute.c
index add30e98ff10a0bb7a9bf0b26c412b7ff85e7df8..0b03c2901046edbca3f2b496e5f311cc622d291f 100644
--- a/src/plugins/sieve-extprograms/cmd-execute.c
+++ b/src/plugins/sieve-extprograms/cmd-execute.c
@@ -72,26 +72,20 @@ static bool cmd_execute_validate_output_tag
 		struct sieve_command *cmd);
 
 static const struct sieve_argument_def execute_input_tag = { 
-	"input", 
-	NULL, 
-	cmd_execute_validate_input_tag,
-	NULL, NULL,
-	cmd_execute_generate_input_tag
+	.identifier = "input", 
+	.validate = cmd_execute_validate_input_tag,
+	.generate = cmd_execute_generate_input_tag
 };
 
 static const struct sieve_argument_def execute_pipe_tag = { 
-	"pipe", 
-	NULL, 
-	cmd_execute_validate_input_tag,
-	NULL, NULL,
-	cmd_execute_generate_input_tag
+	.identifier = "pipe",
+	.validate = cmd_execute_validate_input_tag,
+	.generate = cmd_execute_generate_input_tag
 };
 
 static const struct sieve_argument_def execute_output_tag = { 
-	"output", 
-	NULL, 
-	cmd_execute_validate_output_tag,
-	NULL, NULL, NULL 
+	.identifier = "output", 
+	.validate = cmd_execute_validate_output_tag,
 };
 
 
diff --git a/src/plugins/sieve-extprograms/cmd-pipe.c b/src/plugins/sieve-extprograms/cmd-pipe.c
index a3d178bd21f2e8e844e4eb7aebf9d3d0dbde27ba..ce82480bc87b31899f81da9e9eb60251d233726b 100644
--- a/src/plugins/sieve-extprograms/cmd-pipe.c
+++ b/src/plugins/sieve-extprograms/cmd-pipe.c
@@ -53,8 +53,7 @@ const struct sieve_command_def cmd_pipe = {
  */
 
 static const struct sieve_argument_def pipe_try_tag = { 
-	"try", 
-	NULL, NULL, NULL, NULL, NULL 
+	.identifier = "try"
 };
 
 /* 
diff --git a/src/testsuite/cmd-test-config.c b/src/testsuite/cmd-test-config.c
index f81c07449dee57baaaae8d4c8d056c54b14b03a8..c9b49235c8bb2d83ca6849fd7c1914d748eb2449 100644
--- a/src/testsuite/cmd-test-config.c
+++ b/src/testsuite/cmd-test-config.c
@@ -95,10 +95,8 @@ static bool cmd_test_config_reload_validate_tag
 /* Argument objects */
 
 static const struct sieve_argument_def test_config_reload_extension_tag = {
-	"extension",
-	NULL,
-	cmd_test_config_reload_validate_tag,
-	NULL, NULL, NULL,
+	.identifier = "extension",
+	.validate = cmd_test_config_reload_validate_tag,
 };
 
 /* Codes for optional arguments */
diff --git a/src/testsuite/cmd-test-imap-metadata.c b/src/testsuite/cmd-test-imap-metadata.c
index 810a906b0bf1b645f2667df2159d06136edca192..9356959175956190b2aecab651a9f648537da863 100644
--- a/src/testsuite/cmd-test-imap-metadata.c
+++ b/src/testsuite/cmd-test-imap-metadata.c
@@ -53,10 +53,8 @@ static bool cmd_test_imap_metadata_validate_mailbox_tag
 		struct sieve_command *cmd);
 
 static const struct sieve_argument_def test_imap_metadata_mailbox_tag = {
-	"mailbox",
-	NULL,
-	cmd_test_imap_metadata_validate_mailbox_tag,
-	NULL, NULL, NULL
+	.identifier = "mailbox",
+	.validate = cmd_test_imap_metadata_validate_mailbox_tag
 };
 
 /*
diff --git a/src/testsuite/cmd-test-message.c b/src/testsuite/cmd-test-message.c
index c24334301ba821294a59f80cb17e5b9518aae319..c6aaf99b96cbee799eb11a5896f139a955e976be 100644
--- a/src/testsuite/cmd-test-message.c
+++ b/src/testsuite/cmd-test-message.c
@@ -153,17 +153,13 @@ static bool cmd_test_message_validate_folder_tag
 		struct sieve_command *cmd);
 
 static const struct sieve_argument_def test_message_smtp_tag = {
-	"smtp",
-	NULL,
-	cmd_test_message_validate_smtp_tag,
-	NULL, NULL, NULL
+	.identifier = "smtp",
+	.validate = cmd_test_message_validate_smtp_tag
 };
 
 static const struct sieve_argument_def test_message_folder_tag = {
-	"folder",
-	NULL,
-	cmd_test_message_validate_folder_tag,
-	NULL, NULL, NULL
+	.identifier = "folder",
+	.validate = cmd_test_message_validate_folder_tag
 };
 
 static bool cmd_test_message_registered
diff --git a/src/testsuite/testsuite-arguments.c b/src/testsuite/testsuite-arguments.c
index dace9db49308bd082ace88c6b46d48f2d847a21c..683a04764418f72ff9c56106ff282f5ac8ab5d8c 100644
--- a/src/testsuite/testsuite-arguments.c
+++ b/src/testsuite/testsuite-arguments.c
@@ -29,11 +29,9 @@ static bool arg_testsuite_string_validate
 		struct sieve_command *context);
 
 const struct sieve_argument_def testsuite_string_argument = {
-	"@testsuite-string",
-	NULL,
-	arg_testsuite_string_validate,
-	NULL, NULL,
-	sieve_arg_catenated_string_generate,
+	.identifier = "@testsuite-string",
+	.validate = arg_testsuite_string_validate,
+	.generate = sieve_arg_catenated_string_generate,
 };
 
 static bool arg_testsuite_string_validate
diff --git a/src/testsuite/testsuite-objects.c b/src/testsuite/testsuite-objects.c
index 5100e7047789b9b55d6783bc1438b00f01ba39e5..7254873c1286e21411ff4f6a5aeaec6fbfeecfad 100644
--- a/src/testsuite/testsuite-objects.c
+++ b/src/testsuite/testsuite-objects.c
@@ -201,9 +201,8 @@ static bool arg_testsuite_object_generate
 		struct sieve_command *cmd);
 
 const struct sieve_argument_def testsuite_object_argument = {
-	"testsuite-object",
-	NULL, NULL, NULL, NULL,
-	arg_testsuite_object_generate
+	.identifier = "testsuite-object",
+	.generate = arg_testsuite_object_generate
 };
 
 struct testsuite_object_argctx {
diff --git a/src/testsuite/testsuite-substitutions.c b/src/testsuite/testsuite-substitutions.c
index 62d9696b57d47c906cb00b2be79f4aa7ed615a8f..1619a7e9cee9d5639b4f44ed84e7a83edd00ef6d 100644
--- a/src/testsuite/testsuite-substitutions.c
+++ b/src/testsuite/testsuite-substitutions.c
@@ -86,9 +86,8 @@ struct _testsuite_substitution_context {
 };
 
 const struct sieve_argument_def testsuite_substitution_argument = {
-	"@testsuite-substitution",
-	NULL, NULL, NULL, NULL,
-	arg_testsuite_substitution_generate
+	.identifier = "@testsuite-substitution",
+	.generate = arg_testsuite_substitution_generate
 };
 
 struct sieve_ast_argument *testsuite_substitution_argument_create
diff --git a/src/testsuite/tst-test-error.c b/src/testsuite/tst-test-error.c
index 31abf3dbc710b86553f51c738ef501907676ba8f..f2cc225a9c50c94b0e1d9fd2726285f5b80e4fe8 100644
--- a/src/testsuite/tst-test-error.c
+++ b/src/testsuite/tst-test-error.c
@@ -75,10 +75,8 @@ static bool tst_test_error_validate_index_tag
 		struct sieve_command *cmd);
 
 static const struct sieve_argument_def test_error_index_tag = {
-	"index",
-	NULL,
-	tst_test_error_validate_index_tag,
-	NULL, NULL, NULL
+	.identifier = "index",
+	.validate = tst_test_error_validate_index_tag
 };
 
 enum tst_test_error_optional {
diff --git a/src/testsuite/tst-test-result-action.c b/src/testsuite/tst-test-result-action.c
index 5273d1f0dd4b418df2d64eb2d432be79092c581e..158bbaeb821992ff4aa402aa59c97cf0b53fc550 100644
--- a/src/testsuite/tst-test-result-action.c
+++ b/src/testsuite/tst-test-result-action.c
@@ -76,10 +76,8 @@ static bool tst_test_result_action_validate_index_tag
 		struct sieve_command *cmd);
 
 static const struct sieve_argument_def test_result_action_index_tag = {
-    "index",
-    NULL,
-    tst_test_result_action_validate_index_tag,
-    NULL, NULL, NULL
+	.identifier = "index",
+	.validate = tst_test_result_action_validate_index_tag
 };
 
 enum tst_test_result_action_optional {
diff --git a/src/testsuite/tst-test-script-run.c b/src/testsuite/tst-test-script-run.c
index 49d485332a2606fa830f6b7a7c6b325e491b0b1b..cc02842d6935338517bb346134cdd50531c09f3b 100644
--- a/src/testsuite/tst-test-script-run.c
+++ b/src/testsuite/tst-test-script-run.c
@@ -70,8 +70,7 @@ enum cmd_vacation_optional {
 /* Tags */
 
 static const struct sieve_argument_def append_result_tag = {
-	"append_result",
-	NULL, NULL, NULL, NULL, NULL
+	.identifier = "append_result"
 };
 
 static bool tst_test_script_run_registered