diff --git a/inc/lektor/reg.h b/inc/lektor/reg.h
index e0428f910835f98c7a6c7f245d36a30c26936df2..8d4e1e204d76077f01b1e1e8a2f737110e11c492 100644
--- a/inc/lektor/reg.h
+++ b/inc/lektor/reg.h
@@ -14,7 +14,7 @@ struct module_reg {
     const char *name;
     union {
         reg_func func;
-        struct module_reg *obj;
+        struct module_reg **obj; /* First item of the array */
     };
 };
 
@@ -29,7 +29,7 @@ struct lkt_module {
 #define REG_BEGIN(reg)      struct module_reg reg[] = {
 #define REG_ADD(f)          { .name = #f,   .func = f    },
 #define REG_ADD_NAMED(n, f) { .name = n,    .func = f    },
-#define REG_REGISTER(n, s)  { .name = n,    .obj  = s    },
+#define REG_REGISTER(n, s)  { .name = n,    .obj  = &s   },
 #define REG_END()           { .name = NULL, .func = NULL } };
 #define REG_DEFINE(reg)     struct module_reg reg* = NULL;
 
diff --git a/src/reg.c b/src/reg.c
index 91b44a10b8f7b4f1ea2a385175f98869c7addba5..8d421eeaa2532dbb4c05f9d96481af425b0ab0da 100644
--- a/src/reg.c
+++ b/src/reg.c
@@ -24,9 +24,9 @@ void *
 __reg_get(struct module_reg *reg, const char *name)
 {
     int i;
-    for (i = 0; reg[i].name && reg[i].obj; ++i) {
-        if (STR_MATCH(reg[i].name, name))
-            return reg[i].obj;
+    for (i = 0; (reg + i)->name && (reg + i)->obj; ++i) {
+        if (STR_MATCH((reg + i)->name, name))
+            return (reg + i)->obj;
     }
     return NULL;
 }
@@ -35,9 +35,9 @@ reg_func
 __reg_func(struct module_reg *reg, const char *name)
 {
     int i;
-    for (i = 0; reg[i].name && reg[i].func; ++i) {
-        if (STR_MATCH(reg[i].name, name))
-            return reg[i].func;
+    for (i = 0; (reg + i)->name && (reg + i)->func; ++i) {
+        if (STR_MATCH((reg + i)->name, name))
+            return (reg + i)->func;
     }
     return NULL;
 }