diff --git a/src/lib-sieve/sieve-storage.c b/src/lib-sieve/sieve-storage.c
index 43b59b8b37f14afd122af9a16119e144b24c8caa..76dbb9f1020f6bfca46d90db04f773b994b6b98f 100644
--- a/src/lib-sieve/sieve-storage.c
+++ b/src/lib-sieve/sieve-storage.c
@@ -123,11 +123,13 @@ bool sieve_storage_class_exists(struct sieve_instance *svinst,
 
 static struct event *
 sieve_storage_create_event(struct sieve_instance *svinst,
+			   struct event *event_parent,
 			   const struct sieve_storage *storage_class)
 {
 	struct event *event;
 
-	event = event_create(svinst->event);
+	event = event_create(event_parent == NULL ?
+			     svinst->event : event_parent);
 	event_add_category(event, &event_category_sieve_storage);
 	event_add_str(event, "driver", storage_class->driver_name);
 	event_set_append_log_prefix(
@@ -296,8 +298,8 @@ int sieve_storage_alloc(struct sieve_instance *svinst, struct event *event,
 		storage->event = event;
 		event_ref(storage->event);
 	} else {
-		storage->event =
-			sieve_storage_create_event(svinst, storage_class);
+		storage->event = sieve_storage_create_event(
+			svinst, svinst->event, storage_class);
 	}
 
 	*storage_r = storage;
@@ -326,7 +328,8 @@ sieve_storage_init(struct sieve_instance *svinst,
 
 	i_assert(storage_class->v.init != NULL);
 
-	event = sieve_storage_create_event(svinst, storage_class);
+	event = sieve_storage_create_event(svinst, svinst->event,
+					   storage_class);
 
 	if ((flags & SIEVE_STORAGE_FLAG_SYNCHRONIZING) != 0 &&
 	    !storage_class->allows_synchronization) {