diff --git a/src/lib-sieve/sieve-script.c b/src/lib-sieve/sieve-script.c
index 445f848e13266c43cd1175eb8c0c3390cefeaa40..dbbe303f7131d8a673420d733f8ad8cbe5e1b42c 100644
--- a/src/lib-sieve/sieve-script.c
+++ b/src/lib-sieve/sieve-script.c
@@ -959,7 +959,7 @@ int sieve_script_sequence_create(struct sieve_instance *svinst,
 	*sseq_r = NULL;
 	sieve_error_args_init(&error_code_r, NULL);
 
-	if (sieve_storage_sequence_create(svinst, location,
+	if (sieve_storage_sequence_create(svinst, svinst->event, location,
 					  &storage_seq, error_code_r) < 0)
 		return -1;
 
diff --git a/src/lib-sieve/sieve-storage-private.h b/src/lib-sieve/sieve-storage-private.h
index 7dd007355c4faa440dfa1e6c5e4736170653f2a6..b84ba348123c59701701ace2b7079feca6168c89 100644
--- a/src/lib-sieve/sieve-storage-private.h
+++ b/src/lib-sieve/sieve-storage-private.h
@@ -168,6 +168,7 @@ struct sieve_storage_save_context {
 
 struct sieve_storage_sequence {
 	struct sieve_instance *svinst;
+	struct event *event_parent;
 	char *location;
 
 	bool done:1;
diff --git a/src/lib-sieve/sieve-storage.c b/src/lib-sieve/sieve-storage.c
index 05fe830efa4288643f739f5ba3b88e4196c11bb8..598d145760fece93f9a3a637757380d0ae294090 100644
--- a/src/lib-sieve/sieve-storage.c
+++ b/src/lib-sieve/sieve-storage.c
@@ -1650,6 +1650,7 @@ sieve_storage_get_last_error(struct sieve_storage *storage,
  */
 
 int sieve_storage_sequence_create(struct sieve_instance *svinst,
+				  struct event *event_parent,
 				  const char *location,
 				  struct sieve_storage_sequence **sseq_r,
 				  enum sieve_error *error_code_r)
@@ -1663,6 +1664,9 @@ int sieve_storage_sequence_create(struct sieve_instance *svinst,
 	sseq->svinst = svinst;
 	sseq->location = i_strdup(location);
 
+	sseq->event_parent = event_parent;
+	event_ref(event_parent);
+
 	*sseq_r = sseq;
 	return 0;
 }
@@ -1680,7 +1684,7 @@ int sieve_storage_sequence_next(struct sieve_storage_sequence *sseq,
 		return 0;
 	sseq->done = TRUE;
 
-	if (sieve_storage_create(svinst, svinst->event, sseq->location, 0,
+	if (sieve_storage_create(svinst, sseq->event_parent, sseq->location, 0,
 				 storage_r, error_code_r) < 0)
 		return -1;
 	return 1;
@@ -1694,6 +1698,7 @@ void sieve_storage_sequence_free(struct sieve_storage_sequence **_sseq)
 		return;
 	*_sseq = NULL;
 
+	event_unref(&sseq->event_parent);
 	i_free(sseq->location);
 	i_free(sseq);
 }
diff --git a/src/lib-sieve/sieve-storage.h b/src/lib-sieve/sieve-storage.h
index 0a38ea5d57c9de57f94d4d72d5274b18bae20c25..0fe2a3c1bb05d1cf6ed44c76dc47389d5086e8d3 100644
--- a/src/lib-sieve/sieve-storage.h
+++ b/src/lib-sieve/sieve-storage.h
@@ -188,6 +188,7 @@ void sieve_storage_set_modified(struct sieve_storage *storage,
 struct sieve_storage_sequence;
 
 int sieve_storage_sequence_create(struct sieve_instance *svinst,
+				  struct event *event_parent,
 				  const char *location,
 				  struct sieve_storage_sequence **sseq_r,
 				  enum sieve_error *error_code_r);