diff --git a/src/plugins/lda-sieve/lda-sieve-plugin.c b/src/plugins/lda-sieve/lda-sieve-plugin.c
index 52cecfd1f4807a30c9800782cc64835ee81be6e1..151b94a2fbb7c8e7d5445e148b1a4477d670a293 100644
--- a/src/plugins/lda-sieve/lda-sieve-plugin.c
+++ b/src/plugins/lda-sieve/lda-sieve-plugin.c
@@ -216,12 +216,12 @@ lda_sieve_get_personal_storage(struct sieve_instance *svinst,
 		case SIEVE_ERROR_NOT_FOUND:
 			break;
 		case SIEVE_ERROR_TEMP_FAILURE:
-			sieve_sys_error(svinst,
+			e_error(sieve_get_event(svinst),
 				"Failed to access user's personal storage "
 				"(temporary failure)");
 			return -1;
 		default:
-			sieve_sys_error(svinst,
+			e_error(sieve_get_event(svinst),
 				"Failed to access user's personal storage");
 			break;
 		}
@@ -253,7 +253,7 @@ lda_sieve_multiscript_get_scripts(struct sieve_instance *svinst,
 				finished = TRUE;
 				break;
 			case SIEVE_ERROR_TEMP_FAILURE:
-				sieve_sys_error(svinst,
+				e_error(sieve_get_event(svinst),
 					"Failed to access %s script from `%s' "
 					"(temporary failure)",
 					label, location);
@@ -282,7 +282,7 @@ lda_sieve_binary_save(struct lda_sieve_run_context *srctx,
 	    error == SIEVE_ERROR_NO_PERMISSION &&
 	    script != srctx->user_script) {
 		/* Cannot save binary for global script */
-		sieve_sys_error(srctx->svinst,
+		e_error(sieve_get_event(srctx->svinst),
 			"The LDA Sieve plugin does not have permission "
 			"to save global Sieve script binaries; "
 			"global Sieve scripts like `%s' need to be "
@@ -300,17 +300,16 @@ sieve_binary *lda_sieve_open(struct lda_sieve_run_context *srctx,
 	struct sieve_instance *svinst = srctx->svinst;
 	struct sieve_error_handler *ehandler;
 	struct sieve_binary *sbin;
-	bool debug = srctx->mdctx->rcpt_user->mail_debug;
 	const char *compile_name = "compile";
 
 	if (recompile) {
 		/* Warn */
-		sieve_sys_warning(svinst,
-			"Encountered corrupt binary: re-compiling script %s",
-			sieve_script_location(script));
+		e_warning(sieve_get_event(svinst),
+			  "Encountered corrupt binary: re-compiling script %s",
+			  sieve_script_location(script));
 		compile_name = "re-compile";
-	} else if (debug) {
-		sieve_sys_debug(svinst,
+	} else {
+		e_debug(sieve_get_event(svinst),
 			"Loading script %s", sieve_script_location(script));
 	}
 
@@ -331,16 +330,14 @@ sieve_binary *lda_sieve_open(struct lda_sieve_run_context *srctx,
 		switch (*error_r) {
 		/* Script not found */
 		case SIEVE_ERROR_NOT_FOUND:
-			if (debug) {
-				sieve_sys_debug(svinst,
-					"Script `%s' is missing for %s",
-					sieve_script_location(script),
-					compile_name);
-			}
+			e_debug(sieve_get_event(svinst),
+				"Script `%s' is missing for %s",
+				sieve_script_location(script),
+				compile_name);
 			break;
 		/* Temporary failure */
 		case SIEVE_ERROR_TEMP_FAILURE:
-			sieve_sys_error(svinst,
+			e_error(sieve_get_event(svinst),
 				"Failed to open script `%s' for %s "
 				"(temporary failure)",
 				sieve_script_location(script), compile_name);
@@ -348,22 +345,22 @@ sieve_binary *lda_sieve_open(struct lda_sieve_run_context *srctx,
 		/* Compile failed */
 		case SIEVE_ERROR_NOT_VALID:
 			if (script == srctx->user_script &&
-			    srctx->userlog != NULL) {
-				sieve_sys_info(svinst,
-					"Failed to %s script `%s' "
-					"(view user logfile `%s' for more information)",
-					compile_name,
-					sieve_script_location(script),
-					srctx->userlog);
+			    srctx->userlog != NULL ) {
+				e_info(sieve_get_event(svinst),
+				       "Failed to %s script `%s' "
+				       "(view user logfile `%s' for more information)",
+				       compile_name,
+				       sieve_script_location(script),
+				       srctx->userlog);
 				break;
 			}
-			sieve_sys_error(svinst,
+			e_error(sieve_get_event(svinst),
 				"Failed to %s script `%s'",
 				compile_name, sieve_script_location(script));
 			break;
 		/* Something else */
 		default:
-			sieve_sys_error(svinst,
+			e_error(sieve_get_event(svinst),
 				"Failed to open script `%s' for %s",
 				sieve_script_location(script), compile_name);
 			break;
@@ -385,11 +382,11 @@ lda_sieve_handle_exec_status(struct lda_sieve_run_context *srctx,
 	struct mail_deliver_context *mdctx = srctx->mdctx;
 	struct sieve_exec_status *estatus = srctx->scriptenv->exec_status;
 	const char *userlog_notice = "";
-	sieve_sys_error_func_t error_func, user_error_func; 
+	enum log_type log_level, user_log_level;
 	enum mail_error mail_error = MAIL_ERROR_NONE;
 	int ret;
 
-	error_func = user_error_func = sieve_sys_error;
+	log_level = user_log_level = LOG_TYPE_ERROR;
 
 	if (estatus != NULL && estatus->last_storage != NULL &&
 	    estatus->store_failed) {
@@ -397,8 +394,8 @@ lda_sieve_handle_exec_status(struct lda_sieve_run_context *srctx,
 
 		/* Don't bother administrator too much with benign errors */
 		if (mail_error == MAIL_ERROR_NOQUOTA) {
-			error_func = sieve_sys_info;
-			user_error_func = sieve_sys_info;
+			log_level = LOG_TYPE_INFO;
+			user_log_level = LOG_TYPE_INFO;
 		}
 	}
 
@@ -406,21 +403,21 @@ lda_sieve_handle_exec_status(struct lda_sieve_run_context *srctx,
 		userlog_notice = t_strdup_printf(
 			" (user logfile %s may reveal additional details)",
 			srctx->userlog);
-		user_error_func = sieve_sys_info;
+		user_log_level = LOG_TYPE_INFO;
 	}
 
 	switch (status) {
 	case SIEVE_EXEC_FAILURE:
-		user_error_func(svinst,
-			"Execution of script %s failed, "
-			"but implicit keep was successful%s",
-			sieve_script_location(script), userlog_notice);
+		e_log(sieve_get_event(svinst), user_log_level,
+		      "Execution of script %s failed, "
+		      "but implicit keep was successful%s",
+		      sieve_script_location(script), userlog_notice);
 		ret = 1;
 		break;
 	case SIEVE_EXEC_TEMP_FAILURE:
-		error_func(svinst,
-			"Execution of script %s was aborted due to temporary failure%s",
-			sieve_script_location(script), userlog_notice);
+		e_log(sieve_get_event(svinst), log_level,
+		      "Execution of script %s was aborted due to temporary failure%s",
+		      sieve_script_location(script), userlog_notice);
 		if (mail_error != MAIL_ERROR_TEMP &&
 		    mdctx->tempfail_error == NULL) {
 			mdctx->tempfail_error =
@@ -429,16 +426,16 @@ lda_sieve_handle_exec_status(struct lda_sieve_run_context *srctx,
 		ret = -1;
 		break;
 	case SIEVE_EXEC_BIN_CORRUPT:
-		sieve_sys_error(svinst,
+		e_error(sieve_get_event(svinst),
 			"!!BUG!!: Binary compiled from %s is still corrupt; "
 			"bailing out and reverting to default delivery",
 			sieve_script_location(script));
 		ret = -1;
 		break;
 	case SIEVE_EXEC_KEEP_FAILED:
-		error_func(svinst,
-			"Execution of script %s failed with unsuccessful implicit keep%s",
-			sieve_script_location(script), userlog_notice);
+		e_log(sieve_get_event(svinst), log_level,
+		      "Execution of script %s failed with unsuccessful implicit keep%s",
+		      sieve_script_location(script), userlog_notice);
 		ret = -1;
 		break;
 	default:
@@ -462,7 +459,6 @@ lda_sieve_execute_script(struct lda_sieve_run_context *srctx,
 	struct sieve_binary *sbin = NULL;
 	enum sieve_compile_flags cpflags = 0;
 	enum sieve_execute_flags exflags = 0;
-	bool debug = srctx->mdctx->rcpt_user->mail_debug;
 	bool user_script, more;
 
 	*error_r = SIEVE_ERROR_NONE;
@@ -479,17 +475,15 @@ lda_sieve_execute_script(struct lda_sieve_run_context *srctx,
 
 	/* Open */
 
-	if (debug) {
-		if (!discard_script) {
-			sieve_sys_debug(svinst,
-				"Opening script %d of %d from `%s'",
-				index, srctx->script_count,
-				sieve_script_location(script));
-		} else {
-			sieve_sys_debug(svinst,
-				"Opening discard script from `%s'",
-				sieve_script_location(script));
-		}
+	if (!discard_script) {
+		e_debug(sieve_get_event(svinst),
+			"Opening script %d of %d from `%s'",
+			index, srctx->script_count,
+			sieve_script_location(script));
+	} else {
+		e_debug(sieve_get_event(svinst),
+			"Opening discard script from `%s'",
+			sieve_script_location(script));
 	}
 
 	sbin = lda_sieve_open(srctx, script, cpflags, FALSE, error_r);
@@ -498,11 +492,9 @@ lda_sieve_execute_script(struct lda_sieve_run_context *srctx,
 
 	/* Execute */
 
-	if (debug) {
-		sieve_sys_debug(svinst,
-			"Executing script from `%s'",
-			sieve_get_source(sbin));
-	}
+	e_debug(sieve_get_event(svinst),
+		"Executing script from `%s'",
+		sieve_get_source(sbin));
 
 	action_ehandler = lda_sieve_log_ehandler_create(exec_ehandler, mdctx);
 	if (!discard_script) {
@@ -640,8 +632,8 @@ static int lda_sieve_execute_scripts(struct lda_sieve_run_context *srctx)
 
 	/* Don't log additional messages about compile failure */
 	if (error != SIEVE_ERROR_NONE && ret == SIEVE_EXEC_FAILURE) {
-		sieve_sys_info(svinst,
-			"Aborted script execution sequence with successful implicit keep");
+		e_info(sieve_get_event(svinst),
+		       "Aborted script execution sequence with successful implicit keep");
 		return 1;
 	}
 
@@ -658,7 +650,6 @@ static int lda_sieve_find_scripts(struct lda_sieve_run_context *srctx)
 	enum sieve_error error;
 	ARRAY_TYPE(sieve_script) script_sequence;
 	struct sieve_script *const *scripts;
-	bool debug = mdctx->rcpt_user->mail_debug;
 	unsigned int after_index, count, i;
 	int ret = 1;
 
@@ -675,19 +666,19 @@ static int lda_sieve_find_scripts(struct lda_sieve_run_context *srctx)
 		if (srctx->main_script == NULL) {
 			switch (error) {
 			case SIEVE_ERROR_NOT_FOUND:
-				sieve_sys_debug(svinst,
+				e_debug(sieve_get_event(svinst),
 					"User has no active script in storage `%s'",
 					sieve_storage_location(main_storage));
 				break;
 			case SIEVE_ERROR_TEMP_FAILURE:
-				sieve_sys_error(svinst,
+				e_error(sieve_get_event(svinst),
 					"Failed to access active Sieve script in user storage `%s' "
 					"(temporary failure)",
 					sieve_storage_location(main_storage));
 				ret = -1;
 				break;
 			default:
-				sieve_sys_error(svinst,
+				e_error(sieve_get_event(svinst),
 					"Failed to access active Sieve script in user storage `%s'",
 					sieve_storage_location(main_storage));
 				break;
@@ -698,8 +689,8 @@ static int lda_sieve_find_scripts(struct lda_sieve_run_context *srctx)
 		sieve_storage_unref(&main_storage);
 	}
 
-	if (debug && ret >= 0 && srctx->main_script == NULL) {
-		sieve_sys_debug(svinst,
+	if (ret >= 0 && srctx->main_script == NULL) {
+		e_debug(sieve_get_event(svinst),
 			"User has no personal script");
 	}
 
@@ -721,8 +712,8 @@ static int lda_sieve_find_scripts(struct lda_sieve_run_context *srctx)
 			if (ret < 0 && error == SIEVE_ERROR_TEMP_FAILURE) {
 				ret = -1;
 				break;
-			} else if (ret == 0 && debug) {
-				sieve_sys_debug(svinst,
+			} else if (ret == 0) {
+				e_debug(sieve_get_event(svinst),
 					"Location for %s not found: %s",
 					setting_name, sieve_before);
 			}
@@ -732,10 +723,10 @@ static int lda_sieve_find_scripts(struct lda_sieve_run_context *srctx)
 				mdctx->rcpt_user, setting_name);
 		}
 
-		if (ret >= 0 && debug) {
+		if (ret >= 0) {
 			scripts = array_get(&script_sequence, &count);
-			for (i = 0; i < count; i++) {
-				sieve_sys_debug(svinst,
+			for (i = 0; i < count; i ++) {
+				e_debug(sieve_get_event(svinst),
 					"Executed before user's personal Sieve script(%d): %s",
 					i+1, sieve_script_location(scripts[i]));
 			}
@@ -746,8 +737,8 @@ static int lda_sieve_find_scripts(struct lda_sieve_run_context *srctx)
 	if (srctx->main_script != NULL) {
 		array_append(&script_sequence, &srctx->main_script, 1);
 
-		if (ret >= 0 && debug) {
-			sieve_sys_debug(svinst,
+		if (ret >= 0) {
+			e_debug(sieve_get_event(svinst),
 				"Using the following location for user's Sieve script: %s",
 				sieve_script_location(srctx->main_script));
 		}
@@ -767,8 +758,8 @@ static int lda_sieve_find_scripts(struct lda_sieve_run_context *srctx)
 			if (ret < 0 && error == SIEVE_ERROR_TEMP_FAILURE) {
 				ret = -1;
 				break;
-			} else if (ret == 0 && debug) {
-				sieve_sys_debug(svinst,
+			} else if (ret == 0) {
+				e_debug(sieve_get_event(svinst),
 					"Location for %s not found: %s",
 					setting_name, sieve_after);
 			}
@@ -778,10 +769,10 @@ static int lda_sieve_find_scripts(struct lda_sieve_run_context *srctx)
 				mdctx->rcpt_user, setting_name);
 		}
 
-		if (ret >= 0 && debug) {
+		if (ret >= 0) {
 			scripts = array_get(&script_sequence, &count);
-			for (i = after_index; i < count; i ++) {
-				sieve_sys_debug(svinst,
+			for ( i = after_index; i < count; i ++ ) {
+				e_debug(sieve_get_event(svinst),
 					"executed after user's Sieve script(%d): %s",
 					i+1, sieve_script_location(scripts[i]));
 			}
@@ -797,11 +788,9 @@ static int lda_sieve_find_scripts(struct lda_sieve_run_context *srctx)
 		if (srctx->discard_script == NULL) {
 			switch (error) {
 			case SIEVE_ERROR_NOT_FOUND:
-				if (debug) {
-					sieve_sys_debug(svinst,
-						"Location for sieve_discard not found: %s",
-						sieve_discard);
-				}
+				e_debug(sieve_get_event(svinst),
+					"Location for sieve_discard not found: %s",
+					sieve_discard);
 				break;
 			case SIEVE_ERROR_TEMP_FAILURE:
 				ret = -1;
@@ -843,17 +832,15 @@ lda_sieve_execute(struct lda_sieve_run_context *srctx,
 	struct sieve_exec_status estatus;
 	struct sieve_trace_config trace_config;
 	struct sieve_trace_log *trace_log;
-	bool debug = mdctx->rcpt_user->mail_debug;
 	const char *error;
 	int ret;
 
 	/* Check whether there are any scripts to execute at all */
 
 	if (srctx->script_count == 0) {
-		if (debug) {
-			sieve_sys_debug(svinst,
-				"No scripts to execute: reverting to default delivery.");
-		}
+		e_debug(sieve_get_event(svinst),
+			"No scripts to execute: "
+			"reverting to default delivery.");
 
 		/* No error, but no delivery by this plugin either. A return
 		   value of <= 0 for a deliver plugin is is considered a
@@ -903,7 +890,7 @@ lda_sieve_execute(struct lda_sieve_run_context *srctx,
 	/* Compose script execution environment */
 
 	if (sieve_script_env_init(&scriptenv, mdctx->rcpt_user, &error) < 0) {
-		sieve_sys_error(svinst,
+		e_error(sieve_get_event(svinst),
 			"Failed to initialize script execution: %s", error);
 		if (trace_log != NULL)
 			sieve_trace_log_free(&trace_log);