diff --git a/src/lib-sieve/plugins/environment/sieve-ext-environment.h b/src/lib-sieve/plugins/environment/sieve-ext-environment.h
index 765780a303a679273d5f853a4b30333562a44c21..e4a6ca6460bf443d9ff901eb505daf6d6c292420 100644
--- a/src/lib-sieve/plugins/environment/sieve-ext-environment.h
+++ b/src/lib-sieve/plugins/environment/sieve-ext-environment.h
@@ -19,15 +19,12 @@ sieve_ext_environment_get_extension(struct sieve_instance *svinst,
 					ext_r);
 }
 
-static inline const struct sieve_extension *
-sieve_ext_environment_require_extension(struct sieve_instance *svinst)
+static inline int
+sieve_ext_environment_require_extension(struct sieve_instance *svinst,
+					const struct sieve_extension **ext_r)
 {
-	const struct sieve_extension *ext;
-
-	if (sieve_extension_require(svinst, &environment_extension, TRUE,
-				    &ext) < 0)
-		return NULL;
-	return ext;
+	return sieve_extension_require(svinst, &environment_extension, TRUE,
+				       ext_r);
 }
 
 bool sieve_ext_environment_is_active(const struct sieve_extension *env_ext,
diff --git a/src/lib-sieve/plugins/vnd.dovecot/environment/ext-vnd-environment.c b/src/lib-sieve/plugins/vnd.dovecot/environment/ext-vnd-environment.c
index e974a4f03618c8957db401d10d8293c8416a032d..76794c19631d998d1aaa16fe5102a12eea28a19d 100644
--- a/src/lib-sieve/plugins/vnd.dovecot/environment/ext-vnd-environment.c
+++ b/src/lib-sieve/plugins/vnd.dovecot/environment/ext-vnd-environment.c
@@ -59,6 +59,7 @@ const struct sieve_extension_def vnd_environment_extension = {
 static bool
 ext_vnd_environment_load(const struct sieve_extension *ext, void **context)
 {
+	const struct sieve_extension *ext_env;
 	struct ext_vnd_environment_context *extctx;
 
 	if (*context != NULL) {
@@ -66,8 +67,11 @@ ext_vnd_environment_load(const struct sieve_extension *ext, void **context)
 		*context = NULL;
 	}
 
+	if (sieve_ext_environment_require_extension(ext->svinst, &ext_env) < 0)
+		return FALSE;
+
 	extctx = i_new(struct ext_vnd_environment_context, 1);
-	extctx->env_ext = sieve_ext_environment_require_extension(ext->svinst);
+	extctx->env_ext = ext_env;
 	extctx->var_ext = sieve_ext_variables_get_extension(ext->svinst);
 
 	*context = extctx;
diff --git a/src/plugins/imapsieve/ext-imapsieve.c b/src/plugins/imapsieve/ext-imapsieve.c
index 077e7b77498566ca3bc774b011b11945a344db05..92a3fb7f91597dc326559a0b728a8c099df1c004 100644
--- a/src/plugins/imapsieve/ext-imapsieve.c
+++ b/src/plugins/imapsieve/ext-imapsieve.c
@@ -74,6 +74,7 @@ const struct sieve_extension_def vnd_imapsieve_extension = {
 static bool
 ext_imapsieve_load(const struct sieve_extension *ext, void **context)
 {
+	const struct sieve_extension *ext_environment;
 	struct ext_imapsieve_context *extctx;
 
 	if (context != NULL) {
@@ -81,9 +82,13 @@ ext_imapsieve_load(const struct sieve_extension *ext, void **context)
 		*context = NULL;
 	}
 
+	if (sieve_ext_environment_require_extension(ext->svinst,
+						    &ext_environment) < 0)
+		return FALSE;
+
 	extctx = i_new(struct ext_imapsieve_context, 1);
-	extctx->ext_environment =
-		sieve_ext_environment_require_extension(ext->svinst);
+	extctx->ext_environment = ext_environment;
+
 	*context = extctx;
 	return TRUE;
 }