diff --git a/src/libknot/packet/pkt.c b/src/libknot/packet/pkt.c
index 00f975b4ee442611cdeb94d9d5965a9f9b0529b6..d870260b64a3b6987ee1c60c195ba6a9239da695 100644
--- a/src/libknot/packet/pkt.c
+++ b/src/libknot/packet/pkt.c
@@ -475,7 +475,7 @@ int knot_pkt_put_question(knot_pkt_t *pkt, const knot_dname_t *qname, uint16_t q
 	assert(pkt->size == KNOT_WIRE_HEADER_SIZE);
 	assert(pkt->rrset_count == 0);
 
-	/* Copy name wireformat. */
+	/* Copy name into wire format buffer. */
 	wire_ctx_t wire = wire_ctx_init(pkt->wire, pkt->max_size);
 	wire_ctx_set_offset(&wire, KNOT_WIRE_HEADER_SIZE);
 
@@ -486,6 +486,16 @@ int knot_pkt_put_question(knot_pkt_t *pkt, const knot_dname_t *qname, uint16_t q
 	}
 	wire_ctx_skip(&wire, qname_len);
 
+	/* Allocate lower_qname field. */
+	pkt->lower_qname = mm_alloc(&pkt->mm, qname_len);
+	if (pkt->lower_qname == NULL) {
+		return KNOT_ENOMEM;
+	}
+
+	/* Copy QNAME and canonicalize to lowercase. */
+	memcpy(pkt->lower_qname, qname, qname_len);
+	knot_dname_to_lower(pkt->lower_qname);
+
 	/* Copy QTYPE & QCLASS */
 	wire_ctx_write_u16(&wire, qtype);
 	wire_ctx_write_u16(&wire, qclass);