diff --git a/src/lib-sieve/sieve-script.c b/src/lib-sieve/sieve-script.c
index e627125f2f0fd38fb3fd78289c22aea1cc1a2c6a..c1e5d41f42ce880c076dbff215d1dbceb6d49e2a 100644
--- a/src/lib-sieve/sieve-script.c
+++ b/src/lib-sieve/sieve-script.c
@@ -240,6 +240,7 @@ struct sieve_script *sieve_script_create
 
 	script = script_class->v.alloc();
 	sieve_script_init(script, svinst, script_class, data, name, ehandler);
+	script->location = p_strdup(script->pool, location);
 	return script;
 }
 
@@ -268,6 +269,7 @@ int sieve_script_open
 		return -1;
 	}
 
+	script->location = NULL;
 	if ( script->v.open(script, location, options, &error) < 0 ) {
 		if ( error_r == NULL ) {
 			if ( error == SIEVE_ERROR_NOT_FOUND )
diff --git a/src/plugins/lda-sieve/lda-sieve-plugin.c b/src/plugins/lda-sieve/lda-sieve-plugin.c
index 47925b08b89b241acc4e4801257be79ddcde78bd..99f7553815c6ea901461907fb0110b13c207fab8 100644
--- a/src/plugins/lda-sieve/lda-sieve-plugin.c
+++ b/src/plugins/lda-sieve/lda-sieve-plugin.c
@@ -217,7 +217,7 @@ static int lda_sieve_multiscript_get_scripts
 
 	files = array_get(&script_files, &count);
 	for ( i = 0; i < count; i++ ) {
-		struct sieve_script *script = sieve_script_create
+		struct sieve_script *script = sieve_script_create_open
 			(svinst, files[i], NULL, ehandler, &error);
 
 		if ( script == NULL ) {
@@ -529,14 +529,21 @@ static int lda_sieve_multiscript_execute
 
 		/* Open */
 
+		if ( debug ) {
+			sieve_sys_debug
+				(svinst, "opening script %d of %d from %s", i+1, count,
+					sieve_script_location(script));
+		}
+
 		if ( (sbin=lda_sieve_open(srctx, script, cpflags, &error)) == NULL )
 			break;
 
 		/* Execute */
 
-		if ( debug )
+		if ( debug ) {
 			sieve_sys_debug
 				(svinst, "executing script from %s", sieve_get_source(sbin));
+		}
 
 		more = sieve_multiscript_run(mscript, sbin, ehandler, rtflags, final);