diff --git a/TODO b/TODO
index 88606a22c13d4f05ecbf60dd5074973f17829c6f..a759664f1e92f73567d7705c42618e22df47478f 100644
--- a/TODO
+++ b/TODO
@@ -1,6 +1,7 @@
 Next (in order of descending priority/precedence):
 * Review sieve-address parsing implementation for past-end checks
 * Improve handling of old/corrupt binaries.
+* Move to 1.2 and start using mailbox_keyword_is_valid() and new const str. 
 
 * Test with dovecot --enable-debug for initial mempool allocation size
 * Full standards compliance review for the engine and all fully implemented 
@@ -15,8 +16,6 @@ Next (in order of descending priority/precedence):
 * Full security review. Enforce limits on number of created objects, script 
   size, execution time, etc...
 * Make simple test suite for the base functionality
-* Distinguish between 1.2 and 1.1 and start using mailbox_keyword_is_valid()
-  and new const str. 
 
 * ## MAKE A FIRST RELEASE ##
 
diff --git a/src/lib-sieve/sieve-error.c b/src/lib-sieve/sieve-error.c
index 88f002670bea642e43a633b36db08c165b8f0314..26161e64555ffd17af49c23892337a29fd6f3396 100644
--- a/src/lib-sieve/sieve-error.c
+++ b/src/lib-sieve/sieve-error.c
@@ -37,9 +37,9 @@ void sieve_verror
 	
 	if ( ehandler->log_master ) {
 		if ( location == NULL || *location == '\0' )
-			sieve_sys_verror(fmt, args);
+			sieve_sys_error("%s", t_strdup_vprintf(fmt, args));
 		else
-			sieve_sys_error("%s: %s", t_strdup_vprintf(fmt, args));
+			sieve_sys_error("%s: %s", location, t_strdup_vprintf(fmt, args));
 	}
 
 	if ( sieve_errors_more_allowed(ehandler) ) {
@@ -56,9 +56,9 @@ void sieve_vwarning
 
 	if ( ehandler->log_master ) {
 		if ( location == NULL || *location == '\0' )
-			sieve_sys_vwarning(fmt, args);
+			sieve_sys_warning("%s", t_strdup_vprintf(fmt, args));
 		else
-			sieve_sys_warning("sieve: %s: %s", location, t_strdup_vprintf(fmt, args));
+			sieve_sys_warning("%s: %s", location, t_strdup_vprintf(fmt, args));
 	}
 		
 	ehandler->vwarning(ehandler, location, fmt, args);
@@ -73,7 +73,7 @@ void sieve_vinfo
 
 	if ( ehandler->log_master ) {
 		if ( location == NULL || *location == '\0' )
-			sieve_sys_vinfo(fmt, args);
+			sieve_sys_info("%s", t_strdup_vprintf(fmt, args));
 		else	
 			sieve_sys_info("%s: %s", location, t_strdup_vprintf(fmt, args));
 	}
@@ -92,7 +92,7 @@ void sieve_vcritical
 	tm = localtime(&ioloop_time);
 	
 	if ( location == NULL || *location == '\0' )
-		sieve_sys_verror(fmt, args);
+		sieve_sys_error("%s", t_strdup_vprintf(fmt, args));
 	else
 		sieve_sys_error("%s: %s", location, t_strdup_vprintf(fmt, args));
 		
diff --git a/src/lib-sieve/sieve-error.h b/src/lib-sieve/sieve-error.h
index ab2743a96068fc4ac29ebf8a8c0bd612a2a1785b..a39f6cc25a2acc54542b362f576dfa498d8ee462 100644
--- a/src/lib-sieve/sieve-error.h
+++ b/src/lib-sieve/sieve-error.h
@@ -20,53 +20,12 @@ typedef void (*sieve_error_vfunc_t)
 /*
  * System errors
  *
- * FIXME: Low-level access to the Dovecot logging functions would be nice.
+ * FIXME: Low-level access to the Dovecot logging functions would be useful.
  */
 
-static inline void sieve_sys_verror(const char *fmt, va_list args)
-{
-	i_error("sieve: %s", t_strdup_vprintf(fmt, args));
-}
-
-static inline void sieve_sys_vwarning(const char *fmt, va_list args)
-{
-	i_warning("sieve: %s", t_strdup_vprintf(fmt, args));
-}
-
-static inline void sieve_sys_vinfo(const char *fmt, va_list args)
-{
-	i_info("sieve: %s", t_strdup_vprintf(fmt, args));
-}
-
-static inline void sieve_sys_error(const char *fmt, ...)
-{
-	va_list args;
-	va_start(args, fmt);
-	
-	T_BEGIN { sieve_sys_verror(fmt, args); } T_END;
-	
-	va_end(args);
-}
-
-static inline void sieve_sys_warning(const char *fmt, ...)
-{
-	va_list args;
-	va_start(args, fmt);
-	
-	T_BEGIN { sieve_sys_vwarning(fmt, args); } T_END;
-	
-	va_end(args);
-}
-
-static inline void sieve_sys_info(const char *fmt, ...)
-{
-	va_list args;
-	va_start(args, fmt);
-	
-	T_BEGIN { sieve_sys_vinfo(fmt, args); } T_END;
-	
-	va_end(args);
-}
+#define sieve_sys_error(...) i_error("sieve: " __VA_ARGS__ )
+#define sieve_sys_warning(...) i_warning("sieve: " __VA_ARGS__ )
+#define sieve_sys_info(...) i_info("sieve: " __VA_ARGS__ )
 
 /* For these functions it is the responsibility of the caller to
  * manage the datastack.