diff --git a/src/lib-sieve/sieve-interpreter.c b/src/lib-sieve/sieve-interpreter.c
index 02aef7fc393e3c43b4dfc94b49a2a11db4fcaf41..e5de43fa7ed40e5e72f86ae0852d4a5e1173da03 100644
--- a/src/lib-sieve/sieve-interpreter.c
+++ b/src/lib-sieve/sieve-interpreter.c
@@ -103,15 +103,24 @@ struct sieve_interpreter *sieve_interpreter_create
 
 void sieve_interpreter_free(struct sieve_interpreter **interp) 
 {
+	const struct sieve_interpreter_extension_reg *extrs;
+	unsigned int ext_count, i;
+
 	sieve_binary_unref(&(*interp)->runenv.sbin);
 
 	if ( (*interp)->runenv.msgctx != NULL )
 		 sieve_message_context_unref(&(*interp)->runenv.msgctx);
 
 	sieve_error_handler_unref(&(*interp)->ehandler);
+
+	/* Signal registered extensions that the validator is being destroyed */
+	extrs = array_get(&(*interp)->extensions, &ext_count);
+	for ( i = 0; i < ext_count; i++ ) {
+		if ( extrs[i].int_ext != NULL && extrs[i].int_ext->free != NULL )
+			extrs[i].int_ext->free(*interp, extrs[i].context);
+	}
 		 
-	pool_unref(&((*interp)->pool));
-	
+	pool_unref(&((*interp)->pool));	
 	*interp = NULL;
 }
 
diff --git a/src/lib-sieve/sieve-validator.c b/src/lib-sieve/sieve-validator.c
index e131dcfe227ff6879c86e6af6b591d7106b6d07e..09b422c0b3d31b7d42626ce948a5f10c529a0125 100644
--- a/src/lib-sieve/sieve-validator.c
+++ b/src/lib-sieve/sieve-validator.c
@@ -145,11 +145,21 @@ struct sieve_validator *sieve_validator_create
 
 void sieve_validator_free(struct sieve_validator **validator) 
 {
+	const struct sieve_validator_extension_reg *extrs;
+	unsigned int ext_count, i;
+
 	hash_destroy(&(*validator)->commands);
 	sieve_ast_unref(&(*validator)->ast);
 
 	sieve_error_handler_unref(&(*validator)->ehandler);
 
+	/* Signal registered extensions that the validator is being destroyed */
+	extrs = array_get(&(*validator)->extensions, &ext_count);
+	for ( i = 0; i < ext_count; i++ ) {
+		if ( extrs[i].val_ext != NULL && extrs[i].val_ext->free != NULL )
+			extrs[i].val_ext->free(*validator, extrs[i].context);
+	}
+
 	pool_unref(&(*validator)->pool);
 
 	*validator = NULL;