diff --git a/examples/dns.c b/examples/dns.c
index 3125b397814f868dae7343a5e78ff486342cf002..fb33171a2fa510c550f96fb51d0eebc9b85e996e 100644
--- a/examples/dns.c
+++ b/examples/dns.c
@@ -67,21 +67,21 @@ void set_rdata(struct dns_rr rr, HCountedArray *rdata) {
   // Pack the parsed rdata into rr.
   switch(rr.type) {
   case 1:  rr.a     = h_cast_uint(p->ast);             break;
-  case 2:  rr.ns    = *(dns_domain_t   *)p->ast->user; break;
-  case 3:  rr.md    = *(dns_domain_t   *)p->ast->user; break;
-  case 4:  rr.md    = *(dns_domain_t   *)p->ast->user; break;
-  case 5:  rr.cname = *(dns_domain_t   *)p->ast->user; break;
-  case 6:  rr.soa   = *(dns_rr_soa_t   *)p->ast->user; break;
-  case 7:  rr.mb    = *(dns_domain_t   *)p->ast->user; break;
-  case 8:  rr.mg    = *(dns_domain_t   *)p->ast->user; break;
-  case 9:  rr.mr    = *(dns_domain_t   *)p->ast->user; break;
-  case 10: rr.null  = *(dns_rr_null_t  *)p->ast->user; break;
-  case 11: rr.wks   = *(dns_rr_wks_t   *)p->ast->user; break;
-  case 12: rr.ptr   = *(dns_domain_t   *)p->ast->user; break;
-  case 13: rr.hinfo = *(dns_rr_hinfo_t *)p->ast->user; break;
-  case 14: rr.minfo = *(dns_rr_minfo_t *)p->ast->user; break;
-  case 15: rr.mx    = *(dns_rr_mx_t    *)p->ast->user; break;
-  case 16: rr.txt   = *(dns_rr_txt_t   *)p->ast->user; break;
+  case 2:  rr.ns    = *H_CAST(dns_domain_t,   p->ast); break;
+  case 3:  rr.md    = *H_CAST(dns_domain_t,   p->ast); break;
+  case 4:  rr.md    = *H_CAST(dns_domain_t,   p->ast); break;
+  case 5:  rr.cname = *H_CAST(dns_domain_t,   p->ast); break;
+  case 6:  rr.soa   = *H_CAST(dns_rr_soa_t,   p->ast); break;
+  case 7:  rr.mb    = *H_CAST(dns_domain_t,   p->ast); break;
+  case 8:  rr.mg    = *H_CAST(dns_domain_t,   p->ast); break;
+  case 9:  rr.mr    = *H_CAST(dns_domain_t,   p->ast); break;
+  case 10: rr.null  = *H_CAST(dns_rr_null_t,  p->ast); break;
+  case 11: rr.wks   = *H_CAST(dns_rr_wks_t,   p->ast); break;
+  case 12: rr.ptr   = *H_CAST(dns_domain_t,   p->ast); break;
+  case 13: rr.hinfo = *H_CAST(dns_rr_hinfo_t, p->ast); break;
+  case 14: rr.minfo = *H_CAST(dns_rr_minfo_t, p->ast); break;
+  case 15: rr.mx    = *H_CAST(dns_rr_mx_t,    p->ast); break;
+  case 16: rr.txt   = *H_CAST(dns_rr_txt_t,   p->ast); break;
   default:                                             break;
   }
 }