diff --git a/print-aoe.c b/print-aoe.c
index f8bc1fc..97e93df 100644
--- a/print-aoe.c
+++ b/print-aoe.c
@@ -1,8 +1,4 @@
 /*
- * This module implements decoding of the ATA over Ethernet (AoE) protocol
- * according to the following specification:
- * http://support.coraid.com/documents/AoEr11.txt
- *
  * Copyright (c) 2014 The TCPDUMP project
  * All rights reserved.
  *
@@ -29,20 +25,22 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
-#define NETDISSECT_REWORKED
+/* \summary: ATA over Ethernet (AoE) protocol printer */
+
+/* specification: http://brantleycoilecompany.com/AoEr11.pdf */
+
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
 
-#include <tcpdump-stdinc.h>
+#include <netdissect-stdinc.h>
 
-#include "interface.h"
+#include "netdissect.h"
 #include "extract.h"
 #include "addrtoname.h"
 #include "ether.h"
 
 static const char tstr[] = " [|aoe]";
-static const char cstr[] = " (corrupt)";
 
 #define AOE_V1 1
 #define ATA_SECTOR_SIZE 512
@@ -148,7 +146,7 @@
 	const u_char *ep = cp + len;
 
 	if (len < AOEV1_ISSUE_ARG_LEN)
-		goto corrupt;
+		goto invalid;
 	/* AFlags */
 	ND_TCHECK2(*cp, 1);
 	ND_PRINT((ndo, "\n\tAFlags: [%s]", bittok2str(aoev1_aflag_str, "none", *cp)));
@@ -197,8 +195,8 @@
 		ND_PRINT((ndo, "\n\tData: %u bytes", len - AOEV1_ISSUE_ARG_LEN));
 	return;
 
-corrupt:
-	ND_PRINT((ndo, "%s", cstr));
+invalid:
+	ND_PRINT((ndo, "%s", istr));
 	ND_TCHECK2(*cp, ep - cp);
 	return;
 trunc:
@@ -213,7 +211,7 @@
 	uint16_t cslen;
 
 	if (len < AOEV1_QUERY_ARG_LEN)
-		goto corrupt;
+		goto invalid;
 	/* Buffer Count */
 	ND_TCHECK2(*cp, 2);
 	ND_PRINT((ndo, "\n\tBuffer Count: %u", EXTRACT_16BITS(cp)));
@@ -236,7 +234,7 @@
 	cslen = EXTRACT_16BITS(cp);
 	cp += 2;
 	if (cslen > AOEV1_MAX_CONFSTR_LEN || AOEV1_QUERY_ARG_LEN + cslen > len)
-		goto corrupt;
+		goto invalid;
 	/* Config String */
 	ND_TCHECK2(*cp, cslen);
 	if (cslen) {
@@ -246,8 +244,8 @@
 	}
 	return;
 
-corrupt:
-	ND_PRINT((ndo, "%s", cstr));
+invalid:
+	ND_PRINT((ndo, "%s", istr));
 	ND_TCHECK2(*cp, ep - cp);
 	return;
 trunc:
@@ -262,7 +260,7 @@
 	uint8_t dircount, i;
 
 	if (len < AOEV1_MAC_ARG_LEN)
-		goto corrupt;
+		goto invalid;
 	/* Reserved */
 	ND_TCHECK2(*cp, 1);
 	cp += 1;
@@ -280,7 +278,7 @@
 	cp += 1;
 	ND_PRINT((ndo, ", Dir Count: %u", dircount));
 	if (AOEV1_MAC_ARG_LEN + dircount * 8 > len)
-		goto corrupt;
+		goto invalid;
 	/* directives */
 	for (i = 0; i < dircount; i++) {
 		/* Reserved */
@@ -297,8 +295,8 @@
 	}
 	return;
 
-corrupt:
-	ND_PRINT((ndo, "%s", cstr));
+invalid:
+	ND_PRINT((ndo, "%s", istr));
 	ND_TCHECK2(*cp, ep - cp);
 	return;
 trunc:
@@ -313,7 +311,7 @@
 	uint8_t nmacs, i;
 
 	if (len < AOEV1_RESERVE_ARG_LEN || (len - AOEV1_RESERVE_ARG_LEN) % ETHER_ADDR_LEN)
-		goto corrupt;
+		goto invalid;
 	/* RCmd */
 	ND_TCHECK2(*cp, 1);
 	ND_PRINT((ndo, "\n\tRCmd: %s", tok2str(aoev1_rcmd_str, "Unknown (0x%02x)", *cp)));
@@ -324,7 +322,7 @@
 	cp += 1;
 	ND_PRINT((ndo, ", NMacs: %u", nmacs));
 	if (AOEV1_RESERVE_ARG_LEN + nmacs * ETHER_ADDR_LEN != len)
-		goto corrupt;
+		goto invalid;
 	/* addresses */
 	for (i = 0; i < nmacs; i++) {
 		ND_PRINT((ndo, "\n\tEthernet Address %u: %s", i, etheraddr_string(ndo, cp)));
@@ -332,8 +330,8 @@
 	}
 	return;
 
-corrupt:
-	ND_PRINT((ndo, "%s", cstr));
+invalid:
+	ND_PRINT((ndo, "%s", istr));
 	ND_TCHECK2(*cp, ep - cp);
 	return;
 trunc:
@@ -350,7 +348,7 @@
 	void (*cmd_decoder)(netdissect_options *, const u_char *, const u_int);
 
 	if (len < AOEV1_COMMON_HDR_LEN)
-		goto corrupt;
+		goto invalid;
 	/* Flags */
 	flags = *cp & 0x0F;
 	ND_PRINT((ndo, ", Flags: [%s]", bittok2str(aoev1_flag_str, "none", flags)));
@@ -390,8 +388,8 @@
 		cmd_decoder(ndo, cp, len - AOEV1_COMMON_HDR_LEN);
 	return;
 
-corrupt:
-	ND_PRINT((ndo, "%s", cstr));
+invalid:
+	ND_PRINT((ndo, "%s", istr));
 	ND_TCHECK2(*cp, ep - cp);
 	return;
 trunc:
@@ -408,7 +406,7 @@
 	ND_PRINT((ndo, "AoE length %u", len));
 
 	if (len < 1)
-		goto corrupt;
+		goto invalid;
 	/* Ver/Flags */
 	ND_TCHECK2(*cp, 1);
 	ver = (*cp & 0xF0) >> 4;
@@ -422,8 +420,8 @@
 	}
 	return;
 
-corrupt:
-	ND_PRINT((ndo, "%s", cstr));
+invalid:
+	ND_PRINT((ndo, "%s", istr));
 	ND_TCHECK2(*cp, ep - cp);
 	return;
 trunc:
