diff --git a/src/backends/lalr.c b/src/backends/lalr.c
index 15236f5e9e4992cf3fad76ff4b82a56311be6289..7a07c3d439ea267b3703b2002d8faac0281cb7db 100644
--- a/src/backends/lalr.c
+++ b/src/backends/lalr.c
@@ -250,6 +250,8 @@ HLRDFA *h_lalr_dfa(HCFGrammar *g)
           h_hashtable_put(states, neighbor, (void *)(uintptr_t)neighbor_idx);
           h_slist_push(work, neighbor);
           h_slist_push(work, (void *)(uintptr_t)neighbor_idx);
+        } else {
+          neighbor_idx = (uintptr_t)h_hashtable_get(states, neighbor);
         }
 
         // add transition "state --symbol--> neighbor"