diff --git a/print-aodv.c b/print-aodv.c
index ef27eee..6cd0c9e 100644
--- a/print-aodv.c
+++ b/print-aodv.c
@@ -30,16 +30,17 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
-#define NETDISSECT_REWORKED
+/* \summary: Ad hoc On-Demand Distance Vector (AODV) Routing printer */
+
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
 
-#include <tcpdump-stdinc.h>
+#include <netdissect-stdinc.h>
 
-#include "interface.h"
+#include "netdissect.h"
 #include "addrtoname.h"
-#include "extract.h"			/* must come after interface.h */
+#include "extract.h"
 
 
 struct aodv_rreq {
@@ -53,7 +54,6 @@
 	uint32_t	rreq_oa;	/* originator IPv4 address */
 	uint32_t	rreq_os;	/* originator sequence number */
 };
-#ifdef INET6
 struct aodv_rreq6 {
 	uint8_t		rreq_type;	/* AODV message type (1) */
 	uint8_t		rreq_flags;	/* various flags */
@@ -76,7 +76,6 @@
 	struct in6_addr	rreq_da;	/* destination IPv6 address */
 	struct in6_addr	rreq_oa;	/* originator IPv6 address */
 };
-#endif
 
 #define	RREQ_JOIN	0x80		/* join (reserved for multicast */
 #define	RREQ_REPAIR	0x40		/* repair (reserved for multicast */
@@ -95,7 +94,6 @@
 	uint32_t	rrep_oa;	/* originator IPv4 address */
 	uint32_t	rrep_life;	/* lifetime of this route */
 };
-#ifdef INET6
 struct aodv_rrep6 {
 	uint8_t		rrep_type;	/* AODV message type (2) */
 	uint8_t		rrep_flags;	/* various flags */
@@ -116,7 +114,6 @@
 	struct in6_addr	rrep_oa;	/* originator IPv6 address */
 	uint32_t	rrep_life;	/* lifetime of this route */
 };
-#endif
 
 #define	RREP_REPAIR		0x80	/* repair (reserved for multicast */
 #define	RREP_ACK		0x40	/* acknowledgement required */
@@ -127,7 +124,6 @@
 	uint32_t	u_da;	/* IPv4 address */
 	uint32_t	u_ds;	/* sequence number */
 };
-#ifdef INET6
 struct rerr_unreach6 {
 	struct in6_addr	u_da;	/* IPv6 address */
 	uint32_t	u_ds;	/* sequence number */
@@ -136,7 +132,6 @@
 	struct in6_addr	u_da;	/* IPv6 address */
 	uint32_t	u_ds;	/* sequence number */
 };
-#endif
 
 struct aodv_rerr {
 	uint8_t		rerr_type;	/* AODV message type (3 or 18) */
@@ -275,7 +270,7 @@
 	ND_PRINT((ndo, " rerr %s [items %u] [%u]:",
 	    ap->rerr_flags & RERR_NODELETE ? "[D]" : "",
 	    ap->rerr_dc, length));
-	dp = (struct rerr_unreach *)(dat + sizeof(*ap));
+	dp = (const struct rerr_unreach *)(dat + sizeof(*ap));
 	i = length - sizeof(*ap);
 	for (dc = ap->rerr_dc; dc != 0; dc--) {
 		ND_TCHECK(*dp);
@@ -293,13 +288,8 @@
 }
 
 static void
-#ifdef INET6
 aodv_v6_rreq(netdissect_options *ndo, const u_char *dat, u_int length)
-#else
-aodv_v6_rreq(netdissect_options *ndo, const u_char *dat _U_, u_int length)
-#endif
 {
-#ifdef INET6
 	u_int i;
 	const struct aodv_rreq6 *ap = (const struct aodv_rreq6 *)dat;
 
@@ -326,19 +316,11 @@
 
 trunc:
 	ND_PRINT((ndo, " [|rreq"));
-#else
-	ND_PRINT((ndo, " v6 rreq %u", length));
-#endif
 }
 
 static void
-#ifdef INET6
 aodv_v6_rrep(netdissect_options *ndo, const u_char *dat, u_int length)
-#else
-aodv_v6_rrep(netdissect_options *ndo, const u_char *dat _U_, u_int length)
-#endif
 {
-#ifdef INET6
 	u_int i;
 	const struct aodv_rrep6 *ap = (const struct aodv_rrep6 *)dat;
 
@@ -362,19 +344,11 @@
 
 trunc:
 	ND_PRINT((ndo, " [|rreq"));
-#else
-	ND_PRINT((ndo, " rrep %u", length));
-#endif
 }
 
 static void
-#ifdef INET6
 aodv_v6_rerr(netdissect_options *ndo, const u_char *dat, u_int length)
-#else
-aodv_v6_rerr(netdissect_options *ndo, const u_char *dat _U_, u_int length)
-#endif
 {
-#ifdef INET6
 	u_int i, dc;
 	const struct aodv_rerr *ap = (const struct aodv_rerr *)dat;
 	const struct rerr_unreach6 *dp6;
@@ -385,7 +359,7 @@
 	ND_PRINT((ndo, " rerr %s [items %u] [%u]:",
 	    ap->rerr_flags & RERR_NODELETE ? "[D]" : "",
 	    ap->rerr_dc, length));
-	dp6 = (struct rerr_unreach6 *)(void *)(ap + 1);
+	dp6 = (const struct rerr_unreach6 *)(const void *)(ap + 1);
 	i = length - sizeof(*ap);
 	for (dc = ap->rerr_dc; dc != 0; dc--) {
 		ND_TCHECK(*dp6);
@@ -400,19 +374,11 @@
 
 trunc:
 	ND_PRINT((ndo, "[|rerr]"));
-#else
-	ND_PRINT((ndo, " rerr %u", length));
-#endif
 }
 
 static void
-#ifdef INET6
 aodv_v6_draft_01_rreq(netdissect_options *ndo, const u_char *dat, u_int length)
-#else
-aodv_v6_draft_01_rreq(netdissect_options *ndo, const u_char *dat _U_, u_int length)
-#endif
 {
-#ifdef INET6
 	u_int i;
 	const struct aodv_rreq6_draft_01 *ap = (const struct aodv_rreq6_draft_01 *)dat;
 
@@ -439,19 +405,11 @@
 
 trunc:
 	ND_PRINT((ndo, " [|rreq"));
-#else
-	ND_PRINT((ndo, " rreq %u", length));
-#endif
 }
 
 static void
-#ifdef INET6
 aodv_v6_draft_01_rrep(netdissect_options *ndo, const u_char *dat, u_int length)
-#else
-aodv_v6_draft_01_rrep(netdissect_options *ndo, const u_char *dat _U_, u_int length)
-#endif
 {
-#ifdef INET6
 	u_int i;
 	const struct aodv_rrep6_draft_01 *ap = (const struct aodv_rrep6_draft_01 *)dat;
 
@@ -475,19 +433,11 @@
 
 trunc:
 	ND_PRINT((ndo, " [|rreq"));
-#else
-	ND_PRINT((ndo, " rrep %u", length));
-#endif
 }
 
 static void
-#ifdef INET6
 aodv_v6_draft_01_rerr(netdissect_options *ndo, const u_char *dat, u_int length)
-#else
-aodv_v6_draft_01_rerr(netdissect_options *ndo, const u_char *dat _U_, u_int length)
-#endif
 {
-#ifdef INET6
 	u_int i, dc;
 	const struct aodv_rerr *ap = (const struct aodv_rerr *)dat;
 	const struct rerr_unreach6_draft_01 *dp6;
@@ -498,7 +448,7 @@
 	ND_PRINT((ndo, " rerr %s [items %u] [%u]:",
 	    ap->rerr_flags & RERR_NODELETE ? "[D]" : "",
 	    ap->rerr_dc, length));
-	dp6 = (struct rerr_unreach6_draft_01 *)(void *)(ap + 1);
+	dp6 = (const struct rerr_unreach6_draft_01 *)(const void *)(ap + 1);
 	i = length - sizeof(*ap);
 	for (dc = ap->rerr_dc; dc != 0; dc--) {
 		ND_TCHECK(*dp6);
@@ -513,9 +463,6 @@
 
 trunc:
 	ND_PRINT((ndo, "[|rerr]"));
-#else
-	ND_PRINT((ndo, " rerr %u", length));
-#endif
 }
 
 void
