diff --git a/lib/resolve.c b/lib/resolve.c
index 014f1ceadd17c30392cde2796c4e78ab6512062e..6902cbeb91e2c0eeac86b2e3cad2181fd9bd11d6 100644
--- a/lib/resolve.c
+++ b/lib/resolve.c
@@ -1288,9 +1288,14 @@ int kr_resolve_produce(struct kr_request *request, struct sockaddr **dst, int *t
 	struct kr_query *qry = array_tail(rplan->pending);
 	if (qry->deferred != NULL) {
 		/* @todo: Refactoring validator, check trust chain before resuming. */
-		int state = (qry->flags & QUERY_FORWARD) ?
-			    forward_trust_chain_check(request, qry, true) :
-			    trust_chain_check(request, qry);
+		int state = 0;
+		if (((qry->flags & QUERY_FORWARD) == 0) ||
+		    ((qry->stype == KNOT_RRTYPE_DS) && (qry->flags & QUERY_CNAME))) {
+			state = trust_chain_check(request, qry);
+		} else {
+			state = forward_trust_chain_check(request, qry, true);
+		}
+
 		switch(state) {
 		case KR_STATE_FAIL: return KR_STATE_FAIL;
 		case KR_STATE_DONE: return KR_STATE_PRODUCE;
diff --git a/lib/utils.c b/lib/utils.c
index 854ec396af68dbd4946c903c5637472cde7e9e08..71f1c848849ab34b7d24719f95c1459c453b7ec0 100644
--- a/lib/utils.c
+++ b/lib/utils.c
@@ -759,13 +759,22 @@ void kr_dname_print(const knot_dname_t *name, const char *prefix, const char *po
 {
 	char str[KNOT_DNAME_MAXLEN] = {0};
 	knot_dname_to_str(str, name, KNOT_DNAME_MAXLEN);
-	kr_log_verbose ("%s%s%s", prefix, str, postfix);
+	kr_log_verbose("%s%s%s", prefix, str, postfix);
 }
 
 void kr_rrtype_print(const uint16_t rrtype, const char *prefix, const char *postfix)
 {
 	char str[32] = {0};
 	knot_rrtype_to_string(rrtype, str, 32);
-	kr_log_verbose ("%s%s%s", prefix, str, postfix);
+	kr_log_verbose("%s%s%s", prefix, str, postfix);
+}
+
+void kr_qry_print(const struct kr_query *qry, const char *prefix, const char *postfix)
+{
+	char str[6] = {0};
+	knot_rrclass_to_string(qry->sclass, str, sizeof(str));
+	kr_dname_print(qry->sname, prefix, " ");
+	kr_log_verbose("%s",str);
+	kr_rrtype_print(qry->stype, " ", postfix);
 }
 
diff --git a/lib/utils.h b/lib/utils.h
index 156e8982b9efe703400285f4fc2a01a6e219949d..25ab00e27ffb43c6e383639aa83d97fc938fa4f6 100644
--- a/lib/utils.h
+++ b/lib/utils.h
@@ -30,6 +30,8 @@
 #include "lib/generic/array.h"
 #include "lib/defines.h"
 
+struct kr_query;
+
 /*
  * Logging and debugging.
  */
@@ -255,6 +257,7 @@ int kr_ranked_rrarray_set_wire(ranked_rr_array_t *array, bool to_wire,
 			       uint32_t qry_uid, bool check_dups);
 
 void kr_rrset_print(const knot_rrset_t *rr, const char *prefix);
+void kr_qry_print(const struct kr_query *qry, const char *prefix, const char *postfix);
 void kr_pkt_print(knot_pkt_t *pkt);
 void kr_dname_print(const knot_dname_t *name, const char *prefix, const char *postfix);
 void kr_rrtype_print(const uint16_t rrtype, const char *prefix, const char *postfix);