diff --git a/src/backends/lalr.c b/src/backends/lalr.c
index db9b88ae28caf5d39bf134df454add37577d86c8..74d37bd2b3d524e1b440d77cdd92591bfae4970b 100644
--- a/src/backends/lalr.c
+++ b/src/backends/lalr.c
@@ -35,16 +35,6 @@ static size_t follow_transition(const HLRTable *table, size_t x, HCFChoice *A)
   return action->nextstate;
 }
 
-static inline HLRTransition *transition(HArena *arena,
-                                        size_t x, const HCFChoice *A, size_t y)
-{
-  HLRTransition *t = h_arena_malloc(arena, sizeof(HLRTransition));
-  t->from = x;
-  t->symbol = A;
-  t->to = y;
-  return t;
-}
-
 // no-op on terminal symbols
 static void transform_productions(const HLRTable *table, HLREnhGrammar *eg,
                                   size_t x, HCFChoice *xAy)
@@ -69,8 +59,8 @@ static void transform_productions(const HLRTable *table, HLREnhGrammar *eg,
     HCFChoice **iBj = items;
     for(; *B; B++, iBj++) {
       size_t j = follow_transition(table, i, *B);
-      HLRTransition *i_B_j = transition(arena, i, *B, j);
-      *iBj = h_hashtable_get(eg->tmap, i_B_j);
+      HLRTransition i_B_j = {i, *B, j};
+      *iBj = h_hashtable_get(eg->tmap, &i_B_j);
       assert(*iBj != NULL);
       i = j;
     }