diff --git a/print-domain.c b/print-domain.c
index 8805007..d0b6996 100644
--- a/print-domain.c
+++ b/print-domain.c
@@ -19,20 +19,22 @@
  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  */
 
-#define NETDISSECT_REWORKED
+/* \summary: Domain Name System (DNS) printer */
+
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
 
-#include <tcpdump-stdinc.h>
+#include <netdissect-stdinc.h>
 
 #include "nameser.h"
 
 #include <string.h>
 
-#include "interface.h"
+#include "netdissect.h"
 #include "addrtoname.h"
-#include "extract.h"                    /* must come after interface.h */
+#include "addrtostr.h"
+#include "extract.h"
 
 static const char *ns_ops[] = {
 	"", " inv_q", " stat", " op3", " notify", " update", " op6", " op7",
@@ -395,7 +397,7 @@
 	} else if (ndo->ndo_vflag > 2) {
 		/* print ttl */
 		ND_PRINT((ndo, " ["));
-		relts_print(ndo, EXTRACT_32BITS(cp));
+		unsigned_relts_print(ndo, EXTRACT_32BITS(cp));
 		ND_PRINT((ndo, "]"));
 		cp += 4;
 	} else {
@@ -481,17 +483,14 @@
 			EXTRACT_16BITS(cp), EXTRACT_16BITS(cp + 2)));
 		break;
 
-#ifdef INET6
 	case T_AAAA:
 	    {
-		struct in6_addr addr;
 		char ntop_buf[INET6_ADDRSTRLEN];
 
 		if (!ND_TTEST2(*cp, sizeof(struct in6_addr)))
 			return(NULL);
-		memcpy(&addr, cp, sizeof(struct in6_addr));
 		ND_PRINT((ndo, " %s",
-		    inet_ntop(AF_INET6, &addr, ntop_buf, sizeof(ntop_buf))));
+		    addrtostr6(cp, ntop_buf, sizeof(ntop_buf))));
 
 		break;
 	    }
@@ -515,7 +514,7 @@
 			memset(&a, 0, sizeof(a));
 			memcpy(&a.s6_addr[pbyte], cp + 1, sizeof(a) - pbyte);
 			ND_PRINT((ndo, " %u %s", pbit,
-			    inet_ntop(AF_INET6, &a, ntop_buf, sizeof(ntop_buf))));
+			    addrtostr6(&a, ntop_buf, sizeof(ntop_buf))));
 		}
 		if (pbit > 0) {
 			ND_PRINT((ndo, " "));
@@ -524,12 +523,11 @@
 		}
 		break;
 	    }
-#endif /*INET6*/
 
 	case T_OPT:
 		ND_PRINT((ndo, " UDPsize=%u", class));
 		if (opt_flags & 0x8000)
-			ND_PRINT((ndo, " OK"));
+			ND_PRINT((ndo, " DO"));
 		break;
 
 	case T_UNSPECA:		/* One long string */
@@ -666,7 +664,7 @@
 		    DNS_CD(np) ? "%" : ""));
 
 		/* any weirdness? */
-		b2 = EXTRACT_16BITS(((u_short *)np)+1);
+		b2 = EXTRACT_16BITS(((const u_short *)np)+1);
 		if (b2 & 0x6cf)
 			ND_PRINT((ndo, " [b2&3=0x%x]", b2));
 
