diff --git a/src/main/java/org/sablecc/sablecc/node/AAlt.java b/src/main/java/org/sablecc/sablecc/node/AAlt.java
index 6cdd013859f7ad23badec3246844cb57e1a14ae9..156c428f5b743c98f2784fa9522337958bf984f5 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAlt.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAlt.java
@@ -77,8 +77,12 @@ public final class AAlt extends PAlt
 
     public void setElems(List<PElem> list)
     {
+        for(PElem e : this._elems_)
+        {
+            e.parent(null);
+        }
         this._elems_.clear();
-        this._elems_.addAll(list);
+
         for(PElem e : list)
         {
             if(e.parent() != null)
@@ -87,6 +91,7 @@ public final class AAlt extends PAlt
             }
 
             e.parent(this);
+            this._elems_.add(e);
         }
     }
 
diff --git a/src/main/java/org/sablecc/sablecc/node/AAltTransform.java b/src/main/java/org/sablecc/sablecc/node/AAltTransform.java
index 5e92bd16cfd435326cd7a5123275f76c2acb35b1..81ad162be6e23326bd5455d1cee5fc50c408f3e3 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAltTransform.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAltTransform.java
@@ -77,8 +77,12 @@ public final class AAltTransform extends PAltTransform
 
     public void setTerms(List<PTerm> list)
     {
+        for(PTerm e : this._terms_)
+        {
+            e.parent(null);
+        }
         this._terms_.clear();
-        this._terms_.addAll(list);
+
         for(PTerm e : list)
         {
             if(e.parent() != null)
@@ -87,6 +91,7 @@ public final class AAltTransform extends PAltTransform
             }
 
             e.parent(this);
+            this._terms_.add(e);
         }
     }
 
diff --git a/src/main/java/org/sablecc/sablecc/node/AAst.java b/src/main/java/org/sablecc/sablecc/node/AAst.java
index f324a73daf48f7c1c234784cf4b3c2a378d8eda7..bf3fc1f932da27bf8e70c2cabd298afeadc05c80 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAst.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAst.java
@@ -42,8 +42,12 @@ public final class AAst extends PAst
 
     public void setProds(List<PAstProd> list)
     {
+        for(PAstProd e : this._prods_)
+        {
+            e.parent(null);
+        }
         this._prods_.clear();
-        this._prods_.addAll(list);
+
         for(PAstProd e : list)
         {
             if(e.parent() != null)
@@ -52,6 +56,7 @@ public final class AAst extends PAst
             }
 
             e.parent(this);
+            this._prods_.add(e);
         }
     }
 
diff --git a/src/main/java/org/sablecc/sablecc/node/AAstAlt.java b/src/main/java/org/sablecc/sablecc/node/AAstAlt.java
index 3f75eb8ba433012a9d58dd100b7a0135b2de52e0..21fa526c3edc3325e95ccc7bd81fc8c57e6d6f58 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAstAlt.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAstAlt.java
@@ -72,8 +72,12 @@ public final class AAstAlt extends PAstAlt
 
     public void setElems(List<PElem> list)
     {
+        for(PElem e : this._elems_)
+        {
+            e.parent(null);
+        }
         this._elems_.clear();
-        this._elems_.addAll(list);
+
         for(PElem e : list)
         {
             if(e.parent() != null)
@@ -82,6 +86,7 @@ public final class AAstAlt extends PAstAlt
             }
 
             e.parent(this);
+            this._elems_.add(e);
         }
     }
 
diff --git a/src/main/java/org/sablecc/sablecc/node/AAstProd.java b/src/main/java/org/sablecc/sablecc/node/AAstProd.java
index 902d942e23c5656a418e3cd92ed4888a607e5eb2..470f33dd0cbb135f91113fcb58e481eec40904e9 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAstProd.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAstProd.java
@@ -72,8 +72,12 @@ public final class AAstProd extends PAstProd
 
     public void setAlts(List<PAstAlt> list)
     {
+        for(PAstAlt e : this._alts_)
+        {
+            e.parent(null);
+        }
         this._alts_.clear();
-        this._alts_.addAll(list);
+
         for(PAstAlt e : list)
         {
             if(e.parent() != null)
@@ -82,6 +86,7 @@ public final class AAstProd extends PAstProd
             }
 
             e.parent(this);
+            this._alts_.add(e);
         }
     }
 
diff --git a/src/main/java/org/sablecc/sablecc/node/AConcat.java b/src/main/java/org/sablecc/sablecc/node/AConcat.java
index 328986fb34432eba0d54d06c50839b1b1243253f..194b8a8f9c887b21d8f44e88d09be862e7676b03 100644
--- a/src/main/java/org/sablecc/sablecc/node/AConcat.java
+++ b/src/main/java/org/sablecc/sablecc/node/AConcat.java
@@ -42,8 +42,12 @@ public final class AConcat extends PConcat
 
     public void setUnExps(List<PUnExp> list)
     {
+        for(PUnExp e : this._unExps_)
+        {
+            e.parent(null);
+        }
         this._unExps_.clear();
-        this._unExps_.addAll(list);
+
         for(PUnExp e : list)
         {
             if(e.parent() != null)
@@ -52,6 +56,7 @@ public final class AConcat extends PConcat
             }
 
             e.parent(this);
+            this._unExps_.add(e);
         }
     }
 
diff --git a/src/main/java/org/sablecc/sablecc/node/AGrammar.java b/src/main/java/org/sablecc/sablecc/node/AGrammar.java
index 8da0a7c6c7e21f930f28099621c5509f1fb8777f..57d4ef78c9e64420cc02fc302bfa9c2b7146eb36 100644
--- a/src/main/java/org/sablecc/sablecc/node/AGrammar.java
+++ b/src/main/java/org/sablecc/sablecc/node/AGrammar.java
@@ -72,8 +72,12 @@ public final class AGrammar extends PGrammar
 
     public void setPackage(List<TPkgId> list)
     {
+        for(TPkgId e : this._package_)
+        {
+            e.parent(null);
+        }
         this._package_.clear();
-        this._package_.addAll(list);
+
         for(TPkgId e : list)
         {
             if(e.parent() != null)
@@ -82,6 +86,7 @@ public final class AGrammar extends PGrammar
             }
 
             e.parent(this);
+            this._package_.add(e);
         }
     }
 
diff --git a/src/main/java/org/sablecc/sablecc/node/AHelpers.java b/src/main/java/org/sablecc/sablecc/node/AHelpers.java
index a6ad653cc3b227fea7e297fa3207af4be2930798..d9df2298c554c7ea18972673d3f912970ac62617 100644
--- a/src/main/java/org/sablecc/sablecc/node/AHelpers.java
+++ b/src/main/java/org/sablecc/sablecc/node/AHelpers.java
@@ -42,8 +42,12 @@ public final class AHelpers extends PHelpers
 
     public void setHelperDefs(List<PHelperDef> list)
     {
+        for(PHelperDef e : this._helperDefs_)
+        {
+            e.parent(null);
+        }
         this._helperDefs_.clear();
-        this._helperDefs_.addAll(list);
+
         for(PHelperDef e : list)
         {
             if(e.parent() != null)
@@ -52,6 +56,7 @@ public final class AHelpers extends PHelpers
             }
 
             e.parent(this);
+            this._helperDefs_.add(e);
         }
     }
 
diff --git a/src/main/java/org/sablecc/sablecc/node/AIgnTokens.java b/src/main/java/org/sablecc/sablecc/node/AIgnTokens.java
index 308ed8b38910efea9b7681f6667bbb257e90f3d7..f608e6ea9178b21cfdad05d32b0d27d2632b8899 100644
--- a/src/main/java/org/sablecc/sablecc/node/AIgnTokens.java
+++ b/src/main/java/org/sablecc/sablecc/node/AIgnTokens.java
@@ -42,8 +42,12 @@ public final class AIgnTokens extends PIgnTokens
 
     public void setListId(List<TId> list)
     {
+        for(TId e : this._listId_)
+        {
+            e.parent(null);
+        }
         this._listId_.clear();
-        this._listId_.addAll(list);
+
         for(TId e : list)
         {
             if(e.parent() != null)
@@ -52,6 +56,7 @@ public final class AIgnTokens extends PIgnTokens
             }
 
             e.parent(this);
+            this._listId_.add(e);
         }
     }
 
diff --git a/src/main/java/org/sablecc/sablecc/node/AListTerm.java b/src/main/java/org/sablecc/sablecc/node/AListTerm.java
index fa01dabe3a5edd7192c20bd5cf849f780f78b50a..b2a57d93f959cbd244f4448bfae40d126e28bfc7 100644
--- a/src/main/java/org/sablecc/sablecc/node/AListTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/AListTerm.java
@@ -72,8 +72,12 @@ public final class AListTerm extends PTerm
 
     public void setListTerms(List<PListTerm> list)
     {
+        for(PListTerm e : this._listTerms_)
+        {
+            e.parent(null);
+        }
         this._listTerms_.clear();
-        this._listTerms_.addAll(list);
+
         for(PListTerm e : list)
         {
             if(e.parent() != null)
@@ -82,6 +86,7 @@ public final class AListTerm extends PTerm
             }
 
             e.parent(this);
+            this._listTerms_.add(e);
         }
     }
 
diff --git a/src/main/java/org/sablecc/sablecc/node/ANewListTerm.java b/src/main/java/org/sablecc/sablecc/node/ANewListTerm.java
index 274ed5ac35906af985f2a2614d4fd454187fe45d..0a378f8f7c763e8e7824325778013e47af701c0b 100644
--- a/src/main/java/org/sablecc/sablecc/node/ANewListTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ANewListTerm.java
@@ -102,8 +102,12 @@ public final class ANewListTerm extends PListTerm
 
     public void setParams(List<PTerm> list)
     {
+        for(PTerm e : this._params_)
+        {
+            e.parent(null);
+        }
         this._params_.clear();
-        this._params_.addAll(list);
+
         for(PTerm e : list)
         {
             if(e.parent() != null)
@@ -112,6 +116,7 @@ public final class ANewListTerm extends PListTerm
             }
 
             e.parent(this);
+            this._params_.add(e);
         }
     }
 
diff --git a/src/main/java/org/sablecc/sablecc/node/ANewTerm.java b/src/main/java/org/sablecc/sablecc/node/ANewTerm.java
index 9ed4904fff8bdea8c0eaf5d57ce96bab23424b87..f71060f6c2a0a2f0b26daf7a3f0420bb7be1f9ba 100644
--- a/src/main/java/org/sablecc/sablecc/node/ANewTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ANewTerm.java
@@ -102,8 +102,12 @@ public final class ANewTerm extends PTerm
 
     public void setParams(List<PTerm> list)
     {
+        for(PTerm e : this._params_)
+        {
+            e.parent(null);
+        }
         this._params_.clear();
-        this._params_.addAll(list);
+
         for(PTerm e : list)
         {
             if(e.parent() != null)
@@ -112,6 +116,7 @@ public final class ANewTerm extends PTerm
             }
 
             e.parent(this);
+            this._params_.add(e);
         }
     }
 
diff --git a/src/main/java/org/sablecc/sablecc/node/AProd.java b/src/main/java/org/sablecc/sablecc/node/AProd.java
index b5db8fb99260b33069775ed4859e3e26f4929866..8dac3579b4cc03bb7557fa935ea65226f47d8129 100644
--- a/src/main/java/org/sablecc/sablecc/node/AProd.java
+++ b/src/main/java/org/sablecc/sablecc/node/AProd.java
@@ -107,8 +107,12 @@ public final class AProd extends PProd
 
     public void setProdTransform(List<PElem> list)
     {
+        for(PElem e : this._prodTransform_)
+        {
+            e.parent(null);
+        }
         this._prodTransform_.clear();
-        this._prodTransform_.addAll(list);
+
         for(PElem e : list)
         {
             if(e.parent() != null)
@@ -117,6 +121,7 @@ public final class AProd extends PProd
             }
 
             e.parent(this);
+            this._prodTransform_.add(e);
         }
     }
 
@@ -127,8 +132,12 @@ public final class AProd extends PProd
 
     public void setAlts(List<PAlt> list)
     {
+        for(PAlt e : this._alts_)
+        {
+            e.parent(null);
+        }
         this._alts_.clear();
-        this._alts_.addAll(list);
+
         for(PAlt e : list)
         {
             if(e.parent() != null)
@@ -137,6 +146,7 @@ public final class AProd extends PProd
             }
 
             e.parent(this);
+            this._alts_.add(e);
         }
     }
 
diff --git a/src/main/java/org/sablecc/sablecc/node/AProductions.java b/src/main/java/org/sablecc/sablecc/node/AProductions.java
index c65832b295b2eceecec579d760d0e1ebd4d2b84a..1704b89ec9d5c99712f4942eea78ad53468952dc 100644
--- a/src/main/java/org/sablecc/sablecc/node/AProductions.java
+++ b/src/main/java/org/sablecc/sablecc/node/AProductions.java
@@ -42,8 +42,12 @@ public final class AProductions extends PProductions
 
     public void setProds(List<PProd> list)
     {
+        for(PProd e : this._prods_)
+        {
+            e.parent(null);
+        }
         this._prods_.clear();
-        this._prods_.addAll(list);
+
         for(PProd e : list)
         {
             if(e.parent() != null)
@@ -52,6 +56,7 @@ public final class AProductions extends PProductions
             }
 
             e.parent(this);
+            this._prods_.add(e);
         }
     }
 
diff --git a/src/main/java/org/sablecc/sablecc/node/ARegExp.java b/src/main/java/org/sablecc/sablecc/node/ARegExp.java
index f4d92262d8f737baa34b069e7f3113824f60dfd9..3950ef3782742b0f993ddb4d372df8c51ad23cad 100644
--- a/src/main/java/org/sablecc/sablecc/node/ARegExp.java
+++ b/src/main/java/org/sablecc/sablecc/node/ARegExp.java
@@ -42,8 +42,12 @@ public final class ARegExp extends PRegExp
 
     public void setConcats(List<PConcat> list)
     {
+        for(PConcat e : this._concats_)
+        {
+            e.parent(null);
+        }
         this._concats_.clear();
-        this._concats_.addAll(list);
+
         for(PConcat e : list)
         {
             if(e.parent() != null)
@@ -52,6 +56,7 @@ public final class ARegExp extends PRegExp
             }
 
             e.parent(this);
+            this._concats_.add(e);
         }
     }
 
diff --git a/src/main/java/org/sablecc/sablecc/node/AStateList.java b/src/main/java/org/sablecc/sablecc/node/AStateList.java
index 821711af3d9954a0e4ee010e2b35260ebbecd685..1fe6417cbd0386a5a38b2089f5db8a196b536a5e 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStateList.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStateList.java
@@ -102,8 +102,12 @@ public final class AStateList extends PStateList
 
     public void setStateLists(List<PStateListTail> list)
     {
+        for(PStateListTail e : this._stateLists_)
+        {
+            e.parent(null);
+        }
         this._stateLists_.clear();
-        this._stateLists_.addAll(list);
+
         for(PStateListTail e : list)
         {
             if(e.parent() != null)
@@ -112,6 +116,7 @@ public final class AStateList extends PStateList
             }
 
             e.parent(this);
+            this._stateLists_.add(e);
         }
     }
 
diff --git a/src/main/java/org/sablecc/sablecc/node/AStates.java b/src/main/java/org/sablecc/sablecc/node/AStates.java
index 27ccc36e8433d86a91191a750bb5b86a4dbf3d0e..13745120b969613643b51d92d9f0c1ea7cdc5d7c 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStates.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStates.java
@@ -42,8 +42,12 @@ public final class AStates extends PStates
 
     public void setListId(List<TId> list)
     {
+        for(TId e : this._listId_)
+        {
+            e.parent(null);
+        }
         this._listId_.clear();
-        this._listId_.addAll(list);
+
         for(TId e : list)
         {
             if(e.parent() != null)
@@ -52,6 +56,7 @@ public final class AStates extends PStates
             }
 
             e.parent(this);
+            this._listId_.add(e);
         }
     }
 
diff --git a/src/main/java/org/sablecc/sablecc/node/ATokens.java b/src/main/java/org/sablecc/sablecc/node/ATokens.java
index 107b774c64cf055342ab4901aef39fd8d1209ac8..1755173b0bfd902dca4812c004586b034b27bddf 100644
--- a/src/main/java/org/sablecc/sablecc/node/ATokens.java
+++ b/src/main/java/org/sablecc/sablecc/node/ATokens.java
@@ -42,8 +42,12 @@ public final class ATokens extends PTokens
 
     public void setTokenDefs(List<PTokenDef> list)
     {
+        for(PTokenDef e : this._tokenDefs_)
+        {
+            e.parent(null);
+        }
         this._tokenDefs_.clear();
-        this._tokenDefs_.addAll(list);
+
         for(PTokenDef e : list)
         {
             if(e.parent() != null)
@@ -52,6 +56,7 @@ public final class ATokens extends PTokens
             }
 
             e.parent(this);
+            this._tokenDefs_.add(e);
         }
     }
 
diff --git a/src/main/resources/org/sablecc/sablecc/alternatives.txt b/src/main/resources/org/sablecc/sablecc/alternatives.txt
index 123ba617ee40bf3f02ba1db8775e1e957cb57065..faee29bbb5602733878bb3d6bebdf6f85a19b39e 100644
--- a/src/main/resources/org/sablecc/sablecc/alternatives.txt
+++ b/src/main/resources/org/sablecc/sablecc/alternatives.txt
@@ -147,8 +147,12 @@ Macro:GetSetList
 
     public void set$0$(List<$2$> list)
     {
+        for($2$ e : this._$1$_)
+        {
+            e.parent(null);
+        }
         this._$1$_.clear();
-        this._$1$_.addAll(list);
+
         for($2$ e : list)
         {
             if(e.parent() != null)
@@ -157,6 +161,7 @@ Macro:GetSetList
             }
 
             e.parent(this);
+            this._$1$_.add(e);
         }
     }