diff --git a/src/lib-sieve/sieve-script.c b/src/lib-sieve/sieve-script.c
index d412b3dfa5e9bd9e8fb8c95f5de9625e62c9db5d..f78fb4328da98dc0cb1c26e8b8cd5f86446fc44e 100644
--- a/src/lib-sieve/sieve-script.c
+++ b/src/lib-sieve/sieve-script.c
@@ -338,6 +338,7 @@ int sieve_script_binary_read_metadata
 {
 	struct sieve_binary *sbin = sieve_binary_block_get_binary(sblock);
 	string_t *storage_class, *location;
+	const char *script_location;
 	unsigned int version;
 
 	if ( sieve_binary_block_get_size(sblock) - *offset == 0 )
@@ -351,8 +352,13 @@ int sieve_script_binary_read_metadata
 			sieve_binary_path(sbin), sieve_script_location(script));
 		return -1;
 	}
-	if ( strcmp(str_c(storage_class), script->driver_name) != 0 )
+	if ( strcmp(str_c(storage_class), script->driver_name) != 0 ) {
+		sieve_script_sys_debug(script,
+			"Binary reports unexpected driver name "
+			"(`%s' rather than `%s')",
+			str_c(storage_class), script->driver_name);
 		return 0;
+	}
 
 	/* version */
 	if ( !sieve_binary_read_unsigned(sblock, offset, &version) ) {
@@ -379,10 +385,14 @@ int sieve_script_binary_read_metadata
 			sieve_binary_path(sbin), sieve_script_location(script));
 		return -1;
 	}
-	if ( script->location == NULL )
-		return 0;
-	if ( strcmp(str_c(location), script->location) != 0 )
+	script_location = ( script->location == NULL ? "" : script->location);
+	if ( strcmp(str_c(location), script_location) != 0 ) {
+		sieve_script_sys_debug(script,
+			"Binary reports different script location "
+			"(`%s' rather than `%s')",
+			str_c(location), script_location);
 		return 0;
+	}
 	
 	if ( script->v.binary_read_metadata == NULL )
 		return 1;