diff --git a/src/lib-sieve/sieve-interpreter.c b/src/lib-sieve/sieve-interpreter.c
index 7b17795eb46bb1071d3e971dd3f54943d47e95a7..e1bf254718203cfe0aa82373dc368d6131f5e076 100644
--- a/src/lib-sieve/sieve-interpreter.c
+++ b/src/lib-sieve/sieve-interpreter.c
@@ -134,16 +134,15 @@ void sieve_interpreter_free(struct sieve_interpreter **interp)
 	const struct sieve_interpreter_extension_reg *eregs;
 	unsigned int ext_count, i;
 
-	sieve_binary_unref(&(*interp)->runenv.sbin);
-
-	sieve_error_handler_unref(&(*interp)->ehandler);
-
 	/* Signal registered extensions that the interpreter is being destroyed */
 	eregs = array_get(&(*interp)->extensions, &ext_count);
 	for ( i = 0; i < ext_count; i++ ) {
 		if ( eregs[i].intext != NULL && eregs[i].intext->free != NULL )
 			eregs[i].intext->free(eregs[i].ext, *interp, eregs[i].context);
 	}
+
+	sieve_binary_unref(&(*interp)->runenv.sbin);
+	sieve_error_handler_unref(&(*interp)->ehandler);
 		 
 	pool_unref(&((*interp)->pool));	
 	*interp = NULL;