diff --git a/src/lib-sieve/plugins/vacation/ext-vacation.c b/src/lib-sieve/plugins/vacation/ext-vacation.c
index 7238bf0bcc9d27b26745dbd390fa6f9516678c26..492e61007cbde4b41c9ef94d8979dfe7faa6d335 100644
--- a/src/lib-sieve/plugins/vacation/ext-vacation.c
+++ b/src/lib-sieve/plugins/vacation/ext-vacation.c
@@ -223,18 +223,47 @@ static bool cmd_vacation_validate_handle_tag
 
 /* Command registration */
 
-static const struct sieve_argument vacation_days_tag = 
-	{ "days", NULL, cmd_vacation_validate_days_tag, NULL };
-static const struct sieve_argument vacation_subject_tag =
-	{ "subject", NULL, cmd_vacation_validate_subject_tag, NULL };
-static const struct sieve_argument vacation_from_tag = 
-	{ "from", NULL, cmd_vacation_validate_from_tag, NULL };
-static const struct sieve_argument vacation_addresses_tag = 
-	{ "addresses", NULL, cmd_vacation_validate_addresses_tag, NULL };
-static const struct sieve_argument vacation_mime_tag = 
-	{ "mime", NULL, cmd_vacation_validate_mime_tag, NULL };
-static const struct sieve_argument vacation_handle_tag = 
-	{ "handle", NULL, cmd_vacation_validate_handle_tag, NULL };
+static const struct sieve_argument vacation_days_tag = { 
+	"days", 
+	NULL, 
+	cmd_vacation_validate_days_tag, 
+	NULL, NULL 
+};
+
+static const struct sieve_argument vacation_subject_tag = { 
+	"subject", 
+	NULL, 
+	cmd_vacation_validate_subject_tag, 
+	NULL, NULL 
+};
+
+static const struct sieve_argument vacation_from_tag = { 
+	"from", 
+	NULL, 
+	cmd_vacation_validate_from_tag, 
+	NULL, NULL 
+};
+
+static const struct sieve_argument vacation_addresses_tag = { 
+	"addresses", 
+	NULL, 
+	cmd_vacation_validate_addresses_tag, 
+	NULL, NULL 
+};
+
+static const struct sieve_argument vacation_mime_tag = { 
+	"mime",
+	NULL, 
+	cmd_vacation_validate_mime_tag, 
+	NULL, NULL 
+};
+
+static const struct sieve_argument vacation_handle_tag = { 
+	"handle", 
+	NULL, 
+	cmd_vacation_validate_handle_tag, 
+	NULL, NULL 
+};
 
 enum cmd_vacation_optional {
 	OPT_DAYS,
diff --git a/src/lib-sieve/sieve-address-parts.c b/src/lib-sieve/sieve-address-parts.c
index 5e36260bbc3e772f811dbf8f86b667ffba6d0d8e..77e5e39dad766416744f3ee8ada57b81a5b7d30d 100644
--- a/src/lib-sieve/sieve-address-parts.c
+++ b/src/lib-sieve/sieve-address-parts.c
@@ -412,7 +412,8 @@ bool sieve_address_match_stringlist
 const struct sieve_argument address_part_tag = { 
 	NULL,
 	tag_address_part_is_instance_of, 
-	tag_address_part_validate, 
+	tag_address_part_validate,
+	NULL, 
 	tag_address_part_generate 
 };
  
diff --git a/src/lib-sieve/sieve-commands.c b/src/lib-sieve/sieve-commands.c
index de201d1edce4b53014b77ca0590b03f0568cf8a6..9f063177eb32861af73c842d5904d8723398f11d 100644
--- a/src/lib-sieve/sieve-commands.c
+++ b/src/lib-sieve/sieve-commands.c
@@ -22,11 +22,11 @@ static bool arg_string_list_generate
 	struct sieve_command_context *context);
 
 const struct sieve_argument number_argument =
-	{ "@number", NULL, NULL, arg_number_generate };
+	{ "@number", NULL, NULL, NULL, arg_number_generate };
 const struct sieve_argument string_argument =
-	{ "@string", NULL, NULL, arg_string_generate };
+	{ "@string", NULL, NULL, NULL, arg_string_generate };
 const struct sieve_argument string_list_argument =
-	{ "@string-list", NULL, NULL, arg_string_list_generate };	
+	{ "@string-list", NULL, NULL, NULL, arg_string_list_generate };	
 
 static bool arg_number_generate
 (struct sieve_generator *generator, struct sieve_ast_argument *arg, 
diff --git a/src/lib-sieve/sieve-commands.h b/src/lib-sieve/sieve-commands.h
index 3675bb52f482aaf109aa6856ab8a299547c096ab..30c7c6ae4fbdeb8e84c887e90484d6b3b854adce 100644
--- a/src/lib-sieve/sieve-commands.h
+++ b/src/lib-sieve/sieve-commands.h
@@ -15,7 +15,11 @@ struct sieve_argument {
 	
 	bool (*is_instance_of)(struct sieve_validator *validator, const char *tag);
 	
-	bool (*validate)(struct sieve_validator *validator, struct sieve_ast_argument **arg, 
+	bool (*validate)
+	(struct sieve_validator *validator, struct sieve_ast_argument **arg, 
+		struct sieve_command_context *context);
+	bool (*validate_context)
+	(struct sieve_validator *validator, struct sieve_ast_argument *arg, 
 		struct sieve_command_context *context);
 		
 	bool (*generate)(struct sieve_generator *generator, struct sieve_ast_argument *arg, 
diff --git a/src/lib-sieve/sieve-comparators.c b/src/lib-sieve/sieve-comparators.c
index e1f2f6253c45bf719a2993f641e6827a224ca58e..2dfdf6e102887f3aab0e21cf4eda6033e86c0fba 100644
--- a/src/lib-sieve/sieve-comparators.c
+++ b/src/lib-sieve/sieve-comparators.c
@@ -228,8 +228,13 @@ static bool tag_comparator_generate
 	(struct sieve_generator *generator, struct sieve_ast_argument *arg, 
 	struct sieve_command_context *cmd);
 
-const struct sieve_argument comparator_tag = 
-	{ "comparator", NULL, tag_comparator_validate, tag_comparator_generate };
+const struct sieve_argument comparator_tag = { 
+	"comparator", 
+	NULL, 
+	tag_comparator_validate, 
+	NULL,
+	tag_comparator_generate 
+};
 
 static bool tag_comparator_validate
 	(struct sieve_validator *validator, struct sieve_ast_argument **arg, 
diff --git a/src/lib-sieve/sieve-match-types.c b/src/lib-sieve/sieve-match-types.c
index 11efc5874aa9891b14499cc497899d9cb682e9d9..7b81d7253383c55554d79a1a7ea4dd68b9e8b0bc 100644
--- a/src/lib-sieve/sieve-match-types.c
+++ b/src/lib-sieve/sieve-match-types.c
@@ -459,6 +459,7 @@ const struct sieve_argument match_type_tag = {
 	NULL,
 	tag_match_type_is_instance_of, 
 	tag_match_type_validate, 
+	NULL,
 	tag_match_type_generate 
 };
  
diff --git a/src/lib-sieve/sieve-validator.c b/src/lib-sieve/sieve-validator.c
index afd08f38e78703493763b6b3b70622fcb8fd85b1..c884a1bddb2039b14a405744605c9037b819a8b0 100644
--- a/src/lib-sieve/sieve-validator.c
+++ b/src/lib-sieve/sieve-validator.c
@@ -203,7 +203,7 @@ static bool _unknown_tag_validate
 }
 
 static const struct sieve_argument _unknown_tag = 
-	{ "", NULL, _unknown_tag_validate, NULL };
+	{ "", NULL, _unknown_tag_validate, NULL, NULL };
 
 static void _sieve_validator_register_tag
 	(struct sieve_validator *validator, struct sieve_command_registration *cmd_reg, 
diff --git a/src/lib-sieve/tst-size.c b/src/lib-sieve/tst-size.c
index 171c6717574808b9202f499c793f716142170050..3e85a39588795a494b00f190f722f59ff5292a4c 100644
--- a/src/lib-sieve/tst-size.c
+++ b/src/lib-sieve/tst-size.c
@@ -101,9 +101,9 @@ static bool tst_size_validate_under_tag
 /* Test registration */
 
 static const struct sieve_argument size_over_tag = 
-	{ "over", NULL, tst_size_validate_over_tag, NULL };
+	{ "over", NULL, tst_size_validate_over_tag, NULL, NULL };
 static const struct sieve_argument size_under_tag = 
-	{ "under", NULL, tst_size_validate_under_tag, NULL };
+	{ "under", NULL, tst_size_validate_under_tag, NULL, NULL };
 
 static bool tst_size_registered
 	(struct sieve_validator *validator, struct sieve_command_registration *cmd_reg)