diff --git a/src/lib-sieve/sieve-error-private.h b/src/lib-sieve/sieve-error-private.h
index fa0793b0ae51e19d3118d01686c2afd094672d93..da055cb65847024129b133d4b7de44693eaced4d 100644
--- a/src/lib-sieve/sieve-error-private.h
+++ b/src/lib-sieve/sieve-error-private.h
@@ -40,6 +40,10 @@ struct sieve_error_handler {
 void sieve_error_handler_init
 	(struct sieve_error_handler *ehandler, pool_t pool, unsigned int max_errors);
 
+void sieve_error_handler_init_from_parent
+	(struct sieve_error_handler *ehandler, pool_t pool, 
+		struct sieve_error_handler *parent);
+
 /*
  * Direct handler calls
  */
diff --git a/src/lib-sieve/sieve-error.c b/src/lib-sieve/sieve-error.c
index 2c5512cfda9a71138b3c5b5f2cb299879f132e64..c6be9094c359ac3f2d1ccc207e8dcff3e4b06baf 100644
--- a/src/lib-sieve/sieve-error.c
+++ b/src/lib-sieve/sieve-error.c
@@ -245,7 +245,7 @@ void sieve_error_handler_copy_masterlog
  */
 
 void sieve_error_handler_init
-	(struct sieve_error_handler *ehandler, pool_t pool, unsigned int max_errors)
+(struct sieve_error_handler *ehandler, pool_t pool, unsigned int max_errors)
 {
 	ehandler->pool = pool;
 	ehandler->refcount = 1;
@@ -255,6 +255,18 @@ void sieve_error_handler_init
 	ehandler->warnings = 0;
 }
 
+void sieve_error_handler_init_from_parent
+(struct sieve_error_handler *ehandler, pool_t pool, struct sieve_error_handler *parent)
+{
+	i_assert( parent != NULL );
+
+	sieve_error_handler_init(ehandler, pool, parent->max_errors);
+
+	ehandler->handler.log_master = parent->log_master;
+	ehandler->handler.log_info = parent->log_info;
+	ehandler->handler.log_debug = parent->log_debug;
+}
+
 void sieve_error_handler_ref(struct sieve_error_handler *ehandler)
 {
 	if ( ehandler == NULL || ehandler->pool == NULL ) return;
@@ -881,9 +893,7 @@ struct sieve_error_handler *sieve_prefix_ehandler_create
 	ehandler->location = p_strdup(pool, location);
 	ehandler->prefix = p_strdup(pool, prefix);
 
-	sieve_error_handler_init(&ehandler->handler, pool, parent->max_errors);
-    ehandler->handler.log_info = parent->log_info;
-    ehandler->handler.log_debug = parent->log_debug;
+	sieve_error_handler_init_from_parent(&ehandler->handler, pool, parent);
 
 	ehandler->handler.verror = sieve_prefix_verror;
 	ehandler->handler.vwarning = sieve_prefix_vwarning;
@@ -1002,9 +1012,7 @@ struct sieve_error_handler *sieve_varexpand_ehandler_create
 	ehandler->format = format;
 	p_array_init(&ehandler->table, pool, 10);
 
-	sieve_error_handler_init(&ehandler->handler, pool, parent->max_errors);
-	ehandler->handler.log_info = parent->log_info;
-	ehandler->handler.log_debug = parent->log_debug;
+	sieve_error_handler_init_from_parent(&ehandler->handler, pool, parent);
 
 	entry = array_append_space(&ehandler->table);
 	entry->key = '$';