diff --git a/src/lib-sieve/sieve-code.c b/src/lib-sieve/sieve-code.c
index 5aaf4d07d28ebe6a8cac5942b23e073a5c348908..164bb20fcea6f8a48571c223a994932041ebd401 100644
--- a/src/lib-sieve/sieve-code.c
+++ b/src/lib-sieve/sieve-code.c
@@ -470,6 +470,19 @@ bool sieve_opr_string_dump
 	return sieve_opr_string_dump_data(denv, operand, address);
 }
 
+bool sieve_opr_string_dump_ex
+(const struct sieve_dumptime_env *denv, sieve_size_t *address, bool *literal)
+{
+	const struct sieve_operand *operand;
+	
+	sieve_code_mark(denv);
+	operand = sieve_operand_read(denv->sbin, address);
+
+	*literal = ( operand == &string_operand );	
+
+	return sieve_opr_string_dump_data(denv, operand, address);
+} 
+
 bool sieve_opr_string_read_data
 (const struct sieve_runtime_env *renv, const struct sieve_operand *operand,
 	sieve_size_t *address, string_t **str)
@@ -495,6 +508,17 @@ bool sieve_opr_string_read
 	return sieve_opr_string_read_data(renv, operand, address, str);
 }
 
+bool sieve_opr_string_read_ex
+(const struct sieve_runtime_env *renv, sieve_size_t *address, string_t **str,
+	bool *literal)
+{
+	const struct sieve_operand *operand = sieve_operand_read(renv->sbin, address);
+
+	*literal = ( operand == &string_operand );
+
+	return sieve_opr_string_read_data(renv, operand, address, str);
+}
+
 static void _dump_string
 (const struct sieve_dumptime_env *denv, string_t *str) 
 {
diff --git a/src/lib-sieve/sieve-code.h b/src/lib-sieve/sieve-code.h
index bf021dba40b8835e5b02e3cd2270dc8ba3d3d652..8f59a49feaa7ab659cbfbc9b9437c03e932f393a 100644
--- a/src/lib-sieve/sieve-code.h
+++ b/src/lib-sieve/sieve-code.h
@@ -163,11 +163,16 @@ bool sieve_opr_string_dump_data
 		sieve_size_t *address); 
 bool sieve_opr_string_dump
 	(const struct sieve_dumptime_env *denv, sieve_size_t *address); 
+bool sieve_opr_string_dump_ex
+	(const struct sieve_dumptime_env *denv, sieve_size_t *address, bool *literal); 
 bool sieve_opr_string_read_data
 	(const struct sieve_runtime_env *renv, const struct sieve_operand *operand,
 		sieve_size_t *address, string_t **str);
 bool sieve_opr_string_read
 	(const struct sieve_runtime_env *renv, sieve_size_t *address, string_t **str);
+bool sieve_opr_string_read_ex
+	(const struct sieve_runtime_env *renv, sieve_size_t *address, string_t **str,
+		bool *literal);
 
 static inline bool sieve_operand_is_string
 (const struct sieve_operand *operand)