diff --git a/src/lib-sieve/plugins/vacation/ext-vacation.c b/src/lib-sieve/plugins/vacation/ext-vacation.c
index 2c1655ed66ec7e3b806e50138773bf48e6073e7d..b8b7e9d4fceacec4829e6f190114741e0aa211e5 100644
--- a/src/lib-sieve/plugins/vacation/ext-vacation.c
+++ b/src/lib-sieve/plugins/vacation/ext-vacation.c
@@ -757,8 +757,7 @@ static bool act_vacation_commit
 	if ( *hdsp == NULL ) {
 		/* No, bail out */
 		sieve_result_log(aenv, 
-			"discarding vacation response for implicitly delivered message", 
-			msgdata->return_path);	
+			"discarding vacation response for implicitly delivered message");	
 		return TRUE;				 
 	}	
 		
diff --git a/src/lib-sieve/sieve-code-dumper.h b/src/lib-sieve/sieve-code-dumper.h
index 71e79237b1e60e2ed322b7b50b6ffe5c8d30d9da..ae7dee47a691a51d56754ca3f70f82cc2169a314 100644
--- a/src/lib-sieve/sieve-code-dumper.h
+++ b/src/lib-sieve/sieve-code-dumper.h
@@ -19,7 +19,8 @@ inline pool_t sieve_code_dumper_pool(struct sieve_code_dumper *dumper);
 /*  */	
 	
 void sieve_code_dumpf
-(const struct sieve_dumptime_env *denv, const char *fmt, ...);
+	(const struct sieve_dumptime_env *denv, const char *fmt, ...)
+		ATTR_FORMAT(2, 3);
 
 inline void sieve_code_mark(const struct sieve_dumptime_env *denv);
 inline void sieve_code_mark_specific
diff --git a/src/lib-sieve/sieve-error.h b/src/lib-sieve/sieve-error.h
index 5085d7f41fb99b67ccac494ac4824b4a60ac53c7..dc2c9add33d920802796012b124683c51da541d3 100644
--- a/src/lib-sieve/sieve-error.h
+++ b/src/lib-sieve/sieve-error.h
@@ -1,6 +1,9 @@
 #ifndef __SIEVE_ERROR_H
 #define __SIEVE_ERROR_H
 
+#include "lib.h"
+#include "compat.h"
+
 #include <stdarg.h>
 
 struct sieve_error_handler;
@@ -17,7 +20,17 @@ void sieve_vinfo
 
 inline static void sieve_error
 (struct sieve_error_handler *ehandler, const char *location, 
-	const char *fmt, ...) 
+	const char *fmt, ...) ATTR_FORMAT(3, 4);
+inline static void sieve_warning
+(struct sieve_error_handler *ehandler, const char *location, 
+	const char *fmt, ...) ATTR_FORMAT(3, 4);
+inline static void sieve_info
+(struct sieve_error_handler *ehandler, const char *location, 
+	const char *fmt, ...) ATTR_FORMAT(3, 4);
+
+inline static void sieve_error
+(struct sieve_error_handler *ehandler, const char *location, 
+	const char *fmt, ...)
 {
 	va_list args;
 	va_start(args, fmt);
@@ -29,7 +42,7 @@ inline static void sieve_error
 
 inline static void sieve_warning
 (struct sieve_error_handler *ehandler, const char *location, 
-	const char *fmt, ...) 
+	const char *fmt, ...)
 {
 	va_list args;
 	va_start(args, fmt);
@@ -41,7 +54,7 @@ inline static void sieve_warning
 
 inline static void sieve_info
 (struct sieve_error_handler *ehandler, const char *location, 
-	const char *fmt, ...) 
+	const char *fmt, ...)
 {
 	va_list args;
 	va_start(args, fmt);
diff --git a/src/lib-sieve/sieve-interpreter.h b/src/lib-sieve/sieve-interpreter.h
index 6bbc045d3ebe86e363917b5bb9a0f095e4a77966..5fb77fe38fb357e553c7c2e63f3836e2c0d1e9b7 100644
--- a/src/lib-sieve/sieve-interpreter.h
+++ b/src/lib-sieve/sieve-interpreter.h
@@ -43,11 +43,14 @@ inline bool sieve_interpreter_get_test_result
 /* Error handling */
 
 void sieve_runtime_error
-	(const struct sieve_runtime_env *runenv, const char *fmt, ...);
+	(const struct sieve_runtime_env *runenv, const char *fmt, ...)
+		ATTR_FORMAT(2, 3);
 void sieve_runtime_warning
-	(const struct sieve_runtime_env *runenv, const char *fmt, ...);
+	(const struct sieve_runtime_env *runenv, const char *fmt, ...)
+		ATTR_FORMAT(2, 3);
 void sieve_runtime_log
-	(const struct sieve_runtime_env *runenv, const char *fmt, ...);
+	(const struct sieve_runtime_env *runenv, const char *fmt, ...)
+		ATTR_FORMAT(2, 3);
 
 /* Extension support */
 
diff --git a/src/lib-sieve/sieve-lexer.c b/src/lib-sieve/sieve-lexer.c
index 33db7b996a96d6473035a012c2e9f176fc2b3e32..9f15d64b87a2a724d59df01fa7ec7433a3f99e87 100644
--- a/src/lib-sieve/sieve-lexer.c
+++ b/src/lib-sieve/sieve-lexer.c
@@ -6,6 +6,7 @@
 #include <unistd.h>
 
 #include "lib.h"
+#include "compat.h"
 #include "str.h"
 #include "istream.h"
 
@@ -37,7 +38,13 @@ struct sieve_lexer {
 };
 
 inline static void sieve_lexer_error
-(struct sieve_lexer *lexer, const char *fmt, ...) 
+	(struct sieve_lexer *lexer, const char *fmt, ...) ATTR_FORMAT(2, 3);
+inline static void sieve_lexer_warning
+	(struct sieve_lexer *lexer, const char *fmt, ...) ATTR_FORMAT(2, 3);
+
+
+inline static void sieve_lexer_error
+(struct sieve_lexer *lexer, const char *fmt, ...)
 {
 	va_list args;
 	va_start(args, fmt);
@@ -50,7 +57,7 @@ inline static void sieve_lexer_error
 }
 
 inline static void sieve_lexer_warning
-(struct sieve_lexer *lexer, const char *fmt, ...) 
+(struct sieve_lexer *lexer, const char *fmt, ...)
 {
 	va_list args;
 	va_start(args, fmt);
diff --git a/src/lib-sieve/sieve-parser.c b/src/lib-sieve/sieve-parser.c
index e8dabd02904f28f7c4e1f0e1ed5c247f99dafc04..9eb436731747447d8170251c6836b801229c3467 100644
--- a/src/lib-sieve/sieve-parser.c
+++ b/src/lib-sieve/sieve-parser.c
@@ -28,7 +28,12 @@ struct sieve_parser {
 #define SIEVE_READ_BLOCK_SIZE (1024*8)
 
 inline static void sieve_parser_error
-	(struct sieve_parser *parser, const char *fmt, ...) 
+	(struct sieve_parser *parser, const char *fmt, ...) ATTR_FORMAT(2, 3);
+inline static void sieve_parser_warning
+	(struct sieve_parser *parser, const char *fmt, ...) ATTR_FORMAT(2, 3);
+
+inline static void sieve_parser_error
+	(struct sieve_parser *parser, const char *fmt, ...)
 { 
 	va_list args;
 	va_start(args, fmt);
@@ -46,7 +51,7 @@ inline static void sieve_parser_error
 }
 
 inline static void sieve_parser_warning
-	(struct sieve_parser *parser, const char *fmt, ...) 
+	(struct sieve_parser *parser, const char *fmt, ...)
 {
 	va_list args;
 	va_start(args, fmt);
diff --git a/src/lib-sieve/sieve-result.h b/src/lib-sieve/sieve-result.h
index ab38bb53d851aa019c138285d98769b0a746275f..f0889ccbea5048d3cefd9d5d6e0814da563efb16 100644
--- a/src/lib-sieve/sieve-result.h
+++ b/src/lib-sieve/sieve-result.h
@@ -13,11 +13,15 @@ void sieve_result_ref(struct sieve_result *result);
 void sieve_result_unref(struct sieve_result **result); 
 inline pool_t sieve_result_pool(struct sieve_result *result);
 
+/* Error handling */
+
 void sieve_result_log
-	(const struct sieve_action_exec_env *aenv, const char *fmt, ...);
+	(const struct sieve_action_exec_env *aenv, const char *fmt, ...)
+		ATTR_FORMAT(2, 3);
 void sieve_result_error
-	(const struct sieve_action_exec_env *aenv, const char *fmt, ...);
-	
+	(const struct sieve_action_exec_env *aenv, const char *fmt, ...)
+		ATTR_FORMAT(2, 3);
+
 int sieve_result_add_action
 (const struct sieve_runtime_env *renv,
 	const struct sieve_action *action, struct sieve_side_effects_list *seffects,
diff --git a/src/lib-sieve/sieve-validator.h b/src/lib-sieve/sieve-validator.h
index 3a6e1db12e51277a9edec32bae156e788f9304af..78f789f55e97eecef17f7e22ef621c5889fab6bd 100644
--- a/src/lib-sieve/sieve-validator.h
+++ b/src/lib-sieve/sieve-validator.h
@@ -16,9 +16,11 @@ inline pool_t sieve_validator_pool(struct sieve_validator *validator);
 bool sieve_validator_run(struct sieve_validator *validator);
 
 void sieve_validator_warning
-	(struct sieve_validator *validator, struct sieve_ast_node *node, const char *fmt, ...);
+	(struct sieve_validator *validator, struct sieve_ast_node *node, 
+		const char *fmt, ...) ATTR_FORMAT(3, 4);
 void sieve_validator_error
-	(struct sieve_validator *validator, struct sieve_ast_node *node, const char *fmt, ...);
+	(struct sieve_validator *validator, struct sieve_ast_node *node, 
+		const char *fmt, ...) ATTR_FORMAT(3, 4);
 
 /* Command Programmers Interface */