diff --git a/src/lib-sieve/sieve-interpreter.c b/src/lib-sieve/sieve-interpreter.c
index 94a0d089938539c21e247a88393f202c7cce5c93..2669e21bf50d15a7b8d134964bf1b9226a2828e4 100644
--- a/src/lib-sieve/sieve-interpreter.c
+++ b/src/lib-sieve/sieve-interpreter.c
@@ -815,6 +815,21 @@ sieve_interpreter_do_program_jump(struct sieve_interpreter *interp,
 	return SIEVE_EXEC_OK;
 }
 
+int sieve_interpreter_program_jump_to(struct sieve_interpreter *interp,
+				      sieve_size_t jmp_target,
+				      bool break_loops)
+{
+	int ret;
+
+	ret = sieve_interpreter_check_program_jump(interp, jmp_target,
+						   break_loops);
+	if (ret <= 0)
+		return ret;
+
+	return sieve_interpreter_do_program_jump(
+		interp, jmp_target, break_loops);
+}
+
 int sieve_interpreter_program_jump(struct sieve_interpreter *interp,
 				   bool jump, bool break_loops)
 {
diff --git a/src/lib-sieve/sieve-interpreter.h b/src/lib-sieve/sieve-interpreter.h
index 89b98e523c9d7437bee96ed90e6f659ca4b5c252..ec380293c58934bb330f34fae3a22bc6fca07efa 100644
--- a/src/lib-sieve/sieve-interpreter.h
+++ b/src/lib-sieve/sieve-interpreter.h
@@ -92,6 +92,9 @@ void sieve_interpreter_interrupt(struct sieve_interpreter *interp);
 sieve_size_t
 sieve_interpreter_program_counter(struct sieve_interpreter *interp);
 
+int sieve_interpreter_program_jump_to(struct sieve_interpreter *interp,
+				      sieve_size_t jmp_target,
+				      bool break_loops);
 int sieve_interpreter_program_jump(struct sieve_interpreter *interp, bool jump,
 				   bool break_loops);