diff --git a/src/lib-sieve/plugins/include/cmd-include.c b/src/lib-sieve/plugins/include/cmd-include.c
index 395ac98fb213ed2d325928192f9bbefbfeb62dd1..2eead0b2778913065adee73ccce9747e15b93c28 100644
--- a/src/lib-sieve/plugins/include/cmd-include.c
+++ b/src/lib-sieve/plugins/include/cmd-include.c
@@ -6,7 +6,6 @@
 
 #include "sieve-common.h"
 #include "sieve-script.h"
-#include "sieve-storage.h"
 #include "sieve-ast.h"
 #include "sieve-code.h"
 #include "sieve-extensions.h"
@@ -224,7 +223,6 @@ cmd_include_validate(struct sieve_validator *valdtr,
 	struct sieve_ast_argument *arg = cmd->first_positional;
 	struct cmd_include_context_data *ctx_data =
 		(struct cmd_include_context_data *)cmd->data;
-	struct sieve_storage *storage;
 	struct sieve_script *script;
 	const char *script_name;
 	enum sieve_error error_code = SIEVE_ERROR_NONE;
@@ -259,21 +257,19 @@ cmd_include_validate(struct sieve_validator *valdtr,
 		return FALSE;
 	}
 
-	storage = ext_include_get_script_storage(this_ext, ctx_data->location,
-						 script_name, &error_code);
-	if (storage == NULL) {
+	if (ext_include_get_script(this_ext, ctx_data->location,
+				   script_name, &script, &error_code) < 0) {
 		// FIXME: handle ':optional' in this case
 		if (error_code == SIEVE_ERROR_NOT_FOUND) {
 			sieve_argument_validate_error(
 				valdtr, arg, "include: "
-				"%s location for included script '%s' is unavailable "
-				"(contact system administrator for more information)",
+				"included %s script '%s' not found ",
 				ext_include_script_location_name(ctx_data->location),
 				str_sanitize(script_name, 80));
 		} else {
 			sieve_argument_validate_error(
 				valdtr, arg, "include: "
-				"failed to access %s location for included script '%s' "
+				"failed to access included %s script '%s' "
 				"(contact system administrator for more information)",
 				ext_include_script_location_name(ctx_data->location),
 				str_sanitize(script_name, 80));
@@ -281,11 +277,7 @@ cmd_include_validate(struct sieve_validator *valdtr,
 		return FALSE;
 	}
 
-	/* Create script object */
-	if (sieve_storage_get_script(storage, script_name,
-				     &script, &error_code) < 0)
-		return FALSE;
-
+	/* Open script */
 	ret = sieve_script_open(script, &error_code);
 	if (ret < 0) {
 		if (error_code != SIEVE_ERROR_NOT_FOUND) {
diff --git a/src/lib-sieve/plugins/include/ext-include-binary.c b/src/lib-sieve/plugins/include/ext-include-binary.c
index 8f9547def5ecdd0b57e384c0c123614cc1286fc4..2fe64086e2fa6bbe4667720ee213cd8f1dde6b3d 100644
--- a/src/lib-sieve/plugins/include/ext-include-binary.c
+++ b/src/lib-sieve/plugins/include/ext-include-binary.c
@@ -7,7 +7,6 @@
 #include "sieve-common.h"
 #include "sieve-error.h"
 #include "sieve-script.h"
-#include "sieve-storage.h"
 #include "sieve-binary.h"
 #include "sieve-generator.h"
 #include "sieve-interpreter.h"
@@ -330,7 +329,6 @@ ext_include_binary_open(const struct sieve_extension *ext,
 		struct sieve_binary_block *inc_block = NULL;
 		unsigned int location, flags;
 		string_t *script_name;
-		struct sieve_storage *storage;
 		struct sieve_script *script;
 		enum sieve_error error_code;
 		int ret;
@@ -369,21 +367,14 @@ ext_include_binary_open(const struct sieve_extension *ext,
 		}
 
 		/* Can we find the script dependency ? */
-		storage = ext_include_get_script_storage(ext, location,
-							 str_c(script_name),
-							 &error_code);
-		if (storage == NULL) {
+		if (ext_include_get_script(ext, location, str_c(script_name),
+					   &script, &error_code) < 0) {
 			/* No, recompile */
 			// FIXME: handle ':optional' in this case
 			return FALSE;
 		}
 
 		/* Can we open the script dependency ? */
-		if (sieve_storage_get_script(storage, str_c(script_name),
-					     &script, &error_code) < 0) {
-			/* No, recompile */
-			return FALSE;
-		}
 		if (sieve_script_open(script, &error_code) < 0) {
 			if (error_code != SIEVE_ERROR_NOT_FOUND) {
 				/* No, recompile */
diff --git a/src/lib-sieve/plugins/include/ext-include-common.c b/src/lib-sieve/plugins/include/ext-include-common.c
index 911a1a72c245be11886bff47e827e2a359120347..bd191bc6e3160f32f56e7bc468f68e389ae0322d 100644
--- a/src/lib-sieve/plugins/include/ext-include-common.c
+++ b/src/lib-sieve/plugins/include/ext-include-common.c
@@ -129,14 +129,15 @@ void ext_include_unload(const struct sieve_extension *ext)
  * Script access
  */
 
-struct sieve_storage *
-ext_include_get_script_storage(const struct sieve_extension *ext,
-			       enum ext_include_script_location location,
-			       const char *script_name,
-			       enum sieve_error *error_code_r)
+int ext_include_get_script(const struct sieve_extension *ext,
+			   enum ext_include_script_location location,
+			   const char *script_name,
+			   struct sieve_script **script_r,
+			   enum sieve_error *error_code_r)
 {
 	struct sieve_instance *svinst = ext->svinst;
 	struct ext_include_context *extctx = ext->context;
+	struct sieve_storage *storage = NULL;
 
 	switch (location) {
 	case EXT_INCLUDE_LOCATION_PERSONAL:
@@ -144,8 +145,9 @@ ext_include_get_script_storage(const struct sieve_extension *ext,
 		    sieve_storage_create_personal(svinst, NULL, 0,
 						  &extctx->personal_storage,
 						  error_code_r) < 0)
-			return NULL;
-		return extctx->personal_storage;
+			break;
+		storage = extctx->personal_storage;
+		break;
 	case EXT_INCLUDE_LOCATION_GLOBAL:
 		if (extctx->global_location == NULL) {
 			e_info(svinst->event, "include: "
@@ -154,22 +156,25 @@ ext_include_get_script_storage(const struct sieve_extension *ext,
 				str_sanitize(script_name, 80));
 			if (error_code_r != NULL)
 				*error_code_r = SIEVE_ERROR_NOT_FOUND;
-			return NULL;
+			break;
 		}
 		if (extctx->global_storage == NULL) {
 			if (sieve_storage_create(svinst,
 						 extctx->global_location,
 						 0, &extctx->global_storage,
 						 error_code_r) < 0)
-				return NULL;
+				break;
 		}
-		return extctx->global_storage;
-	default:
+		storage = extctx->global_storage;
 		break;
+	default:
+		i_unreached();
 	}
 
-	i_unreached();
-	return NULL;
+	if (storage == NULL)
+		return -1;
+	return sieve_storage_get_script(storage, script_name,
+					script_r, error_code_r);
 }
 
 /*
diff --git a/src/lib-sieve/plugins/include/ext-include-common.h b/src/lib-sieve/plugins/include/ext-include-common.h
index 9b9ca7c63507d142a6f2e204eb831cdf85baec52..4357ce19296cb69649885fa3500de51e909da9cf 100644
--- a/src/lib-sieve/plugins/include/ext-include-common.h
+++ b/src/lib-sieve/plugins/include/ext-include-common.h
@@ -82,11 +82,12 @@ extern const struct sieve_operation_def global_operation;
  * Script access
  */
 
-struct sieve_storage *
-ext_include_get_script_storage(const struct sieve_extension *ext,
-			       enum ext_include_script_location location,
-			       const char *script_name,
-			       enum sieve_error *error_code_r);
+int ext_include_get_script(const struct sieve_extension *ext,
+			   enum ext_include_script_location location,
+			   const char *script_name,
+			   struct sieve_script **script_r,
+			   enum sieve_error *error_code_r);
+
 /*
  * Context
  */