diff --git a/lib/modules/Tools.pmod/AutoDoc.pmod/PikeParser.pike b/lib/modules/Tools.pmod/AutoDoc.pmod/PikeParser.pike
index e477220a25210aaad374d249f74ba033b3b78821..fa47a8e2eb49112f32d88573b0e8d13f430a5010 100644
--- a/lib/modules/Tools.pmod/AutoDoc.pmod/PikeParser.pike
+++ b/lib/modules/Tools.pmod/AutoDoc.pmod/PikeParser.pike
@@ -660,10 +660,28 @@ array(string) parseModifiers() {
   string s = peekToken();
   array(string) mods = ({ });
   while (modifiers[s]) {
-    mods += ({ s });
+    // Canonicalize some aliases.
+    s = ([ "nomask":"final",
+	   "static":"protected",
+	   "inline":"local",
+    ])[s] || s;
+    if (!has_value(mods, s)) {
+      mods += ({ s });
+    }
     readToken();
     s = peekToken();
   }
+  if (sizeof(mods) > 1) {
+    // Clean up implied modifiers.
+    if (has_value(mods, "private")) {
+      // private implies protected.
+      mods -= ({ "protected", });
+    }
+    if (has_value(mods, "final")) {
+      // final implies local.
+      mods -= ({ "local" });
+    }
+  }
   return mods;
 }