diff --git a/src/lib-sieve/sieve-address.c b/src/lib-sieve/sieve-address.c
index 2a9df59b36945b875891656a31120035bf0df25d..7220029219b92a7c145477cf861b586515a9eb40 100644
--- a/src/lib-sieve/sieve-address.c
+++ b/src/lib-sieve/sieve-address.c
@@ -86,7 +86,9 @@ static int sieve_header_address_list_next_item
 {
 	struct sieve_header_address_list *addrlist =
 		(struct sieve_header_address_list *) _addrlist;
+	const struct sieve_runtime_env *runenv = _addrlist->strlist.runenv;
 	string_t *value_item = NULL;
+	bool trace = _addrlist->strlist.trace;
 
 	if ( addr_r != NULL )
 		smtp_address_init(addr_r, NULL, NULL);
@@ -98,11 +100,22 @@ static int sieve_header_address_list_next_item
 		if ((ret=sieve_header_address_list_next_address(addrlist, addr_r)) < 0 &&
 		    value_item != NULL) {
 			/* completely invalid address list is returned as-is */
+			if (trace) {
+				sieve_runtime_trace(runenv, 0,
+					"invalid address value `%s'",
+					str_sanitize(str_c(value_item), 80));
+			}
 			if ( unparsed_r != NULL ) *unparsed_r = value_item;
 			return 1;
 		}
-		if (ret > 0)
+		if (ret > 0) {
+			if (trace) {
+				sieve_runtime_trace(runenv, 0,
+					"address value `%s'",
+					str_sanitize(smtp_address_encode(addr_r), 80));
+			}
 			return 1;
+		}
 
 		/* Read next header value from source list */
 		if ( (ret=sieve_stringlist_next_item(addrlist->field_values,
@@ -110,13 +123,17 @@ static int sieve_header_address_list_next_item
 			return ret;
 		if (str_len(value_item) == 0) {
 			/* empty header value is returned as-is */
+			if (trace) {
+				sieve_runtime_trace(runenv, 0,
+					"empty address value");
+			}
 			addrlist->cur_address = NULL;
 			if ( unparsed_r != NULL ) *unparsed_r = value_item;
 			return 1;
 		}
 
-		if (_addrlist->strlist.trace) {
-			sieve_runtime_trace(_addrlist->strlist.runenv, 0,
+		if (trace) {
+			sieve_runtime_trace(runenv, 0,
 				"parsing address header value `%s'",
 				str_sanitize(str_c(value_item), 80));
 		}