diff --git a/src/lib-sieve/sieve-settings.c b/src/lib-sieve/sieve-settings.c
index d26e392d77719618480a1931ef7fc5751cdc3411..4dc8efb5014456ebc2179cdc66bb5375f5c2b486 100644
--- a/src/lib-sieve/sieve-settings.c
+++ b/src/lib-sieve/sieve-settings.c
@@ -102,3 +102,30 @@ bool sieve_setting_get_size_value
 	
 	return TRUE;
 }
+
+bool sieve_setting_get_bool_value
+(struct sieve_instance *svinst, const char *setting,
+	bool *value_r)
+{
+	const char *str_value;
+	char *endp;
+
+	str_value = sieve_setting_get(svinst, setting);
+
+	if ( str_value == NULL || *str_value == '\0' )
+		return FALSE;
+
+ 	if ( strcasecmp(str_value, "yes" ) == 0) {
+        *value_r = TRUE;
+		return TRUE;
+	}
+
+ 	if ( strcasecmp(str_value, "no" ) == 0) {
+        *value_r = FALSE;
+		return TRUE;
+	}
+
+	sieve_sys_warning("invalid boolean value for setting '%s': '%s'",
+		setting, str_value);
+	return FALSE;
+}
diff --git a/src/lib-sieve/sieve-settings.h b/src/lib-sieve/sieve-settings.h
index 1adb356929899b5094274d99721eb6c0097fdfdb..93507b7aa1d9189f74d5e1ee34bdaad70f556649 100644
--- a/src/lib-sieve/sieve-settings.h
+++ b/src/lib-sieve/sieve-settings.h
@@ -22,16 +22,17 @@ static inline const char *sieve_setting_get
 }
 
 bool sieve_setting_get_uint_value
-(struct sieve_instance *svinst, const char *setting,
-	unsigned long long int *value_r);
-
+	(struct sieve_instance *svinst, const char *setting,
+		unsigned long long int *value_r);
 bool sieve_setting_get_int_value
-(struct sieve_instance *svinst, const char *setting,
-	long long int *value_r);
-
+	(struct sieve_instance *svinst, const char *setting,
+		long long int *value_r);
 bool sieve_setting_get_size_value
-(struct sieve_instance *svinst, const char *setting,
-	size_t *value_r);
+	(struct sieve_instance *svinst, const char *setting,
+		size_t *value_r);
+bool sieve_setting_get_bool_value
+	(struct sieve_instance *svinst, const char *setting,
+		bool *value_r);
 
 /*
  * Home directory