diff --git a/examples/dns.c b/examples/dns.c
index c1268127af7648a18fd85be278c648c98bab6c46..381be6a2498296d6ff7a13521b693e69e628e424 100644
--- a/examples/dns.c
+++ b/examples/dns.c
@@ -28,17 +28,18 @@ bool validate_hdzero(HParseResult *p) {
 bool validate_message(HParseResult *p) {
   if (TT_SEQUENCE != p->ast->token_type)
     return false;
+
   dns_header_t *header = H_FIELD(dns_header_t, 0);
   size_t qd = header->question_count;
   size_t an = header->answer_count;
   size_t ns = header->authority_count;
   size_t ar = header->additional_count;
-  HParsedToken *questions = p->ast->seq->elements[1];
-  if (questions->seq->used != qd)
+
+  if (H_FIELD_SEQ(1)->used != qd)
     return false;
-  HParsedToken *rrs = p->ast->seq->elements[2];
-  if (an+ns+ar != rrs->seq->used)
+  if (an+ns+ar != H_FIELD_SEQ(2)->used)
     return false;
+
   return true;
 }
 
@@ -51,7 +52,7 @@ bool validate_message(HParseResult *p) {
 void set_rdata(struct dns_rr rr, HCountedArray *rdata) {
   uint8_t *data = h_arena_malloc(rdata->arena, sizeof(uint8_t)*rdata->used);
   for (size_t i=0; i<rdata->used; ++i)
-    data[i] = rdata->elements[i]->uint;
+    data[i] = h_cast_uint(rdata->elements[i]);
 
   // Parse RDATA if possible.
   const HParseResult *p = NULL;