diff --git a/src/lua_hook.h b/src/lua_hook.h
index 223b83c61f7d9c35a451a3ea217344a341fe7126..1af1697a7b9f937b449fe98777f572dcb342048b 100644
--- a/src/lua_hook.h
+++ b/src/lua_hook.h
@@ -90,9 +90,13 @@ grepped and found in the lists above.
 #define        HOOK(name)       hook_ ## name
 #define STRING_HOOK(name) stringhook_ ## name
 
-enum {   MOBJ_HOOK_LIST   (MOBJ_HOOK)    MOBJ_HOOK(MAX) };
-enum {        HOOK_LIST        (HOOK)         HOOK(MAX) };
-enum { STRING_HOOK_LIST (STRING_HOOK)  STRING_HOOK(MAX) };
+#define ENUM(X) enum { X ## _LIST (X)  X(MAX) }
+
+ENUM   (MOBJ_HOOK);
+ENUM        (HOOK);
+ENUM (STRING_HOOK);
+
+#undef ENUM
 
 /* dead simple, LUA_HOOK(GameQuit) */
 #define LUA_HOOK(type) LUA_HookVoid(HOOK(type))
diff --git a/src/lua_hooklib.c b/src/lua_hooklib.c
index ce1b16f75fedae119be5784bd3e2b1c462a1044b..5815f17b327a22472b63af26f10cd055f380dfa8 100644
--- a/src/lua_hooklib.c
+++ b/src/lua_hooklib.c
@@ -31,12 +31,14 @@
                                   ABSTRACTION
    ========================================================================= */
 
-static const char * const mobjHookNames[] = { MOBJ_HOOK_LIST (TOSTR)  NULL };
-static const char * const     hookNames[] = {      HOOK_LIST (TOSTR)  NULL };
+#define LIST(id, M) \
+	static const char * const id [] = { M (TOSTR)  NULL }
 
-static const char * const stringHookNames[] = {
-	STRING_HOOK_LIST (TOSTR)  NULL
-};
+LIST   (mobjHookNames,   MOBJ_HOOK_LIST);
+LIST       (hookNames,        HOOK_LIST);
+LIST (stringHookNames, STRING_HOOK_LIST);
+
+#undef LIST
 
 typedef struct {
 	int numHooks;