diff --git a/src/cfgrammar.c b/src/cfgrammar.c
index 911c0eb554d1c1b2ae8f707e10e7897ee324d64d..9abfd10e97c7dfaaaf765fefb3b4092441a2e0a7 100644
--- a/src/cfgrammar.c
+++ b/src/cfgrammar.c
@@ -271,11 +271,13 @@ void h_stringmap_update(HCFStringMap *m, const HCFStringMap *n)
  */
 void h_stringmap_replace(HCFStringMap *m, void *old, void *new)
 {
-  if(!old || m->epsilon_branch == old)
-    m->epsilon_branch = new;
-
-  if(!old || m->end_branch == old)
-    m->end_branch = new;
+  if(!old) {
+    if(m->epsilon_branch) m->epsilon_branch = new;
+    if(m->end_branch)     m->end_branch = new;
+  } else {
+    if(m->epsilon_branch == old) m->epsilon_branch = new;
+    if(m->end_branch == old)     m->end_branch = new;
+  }
 
   // iterate over m->char_branches
   const HHashTable *ht = m->char_branches;