diff --git a/sablecc-runtime/src/main/java/de/hhu/stups/sablecc/patch/PositionedNode.java b/sablecc-runtime/src/main/java/de/hhu/stups/sablecc/patch/PositionedNode.java
index dea3bfe839585b1d5d98d425f11f6895041752da..ecd166a31137caa55efe5b44169d03c95126f039 100644
--- a/sablecc-runtime/src/main/java/de/hhu/stups/sablecc/patch/PositionedNode.java
+++ b/sablecc-runtime/src/main/java/de/hhu/stups/sablecc/patch/PositionedNode.java
@@ -19,8 +19,17 @@ public class PositionedNode {
     this(null, null);
   }
 
-  public PositionedNode(final PositionedNode node) {
-    this(node.startPos, node.endPos);
+  /**
+   * Copies the {@link SourcePosition}s from the given node to this node.
+   * This is an internal helper method for use in {@link Object#clone()} implementations.
+   * 
+   * @param node the node from which to copy the source positions
+   */
+  protected final void initSourcePositionsFrom(PositionedNode node) {
+    // Intentionally do not use the accessors (getStartPos, getEndPos) here
+    // so that cloning a Token does not trigger lazy creation of SourcePosition objects.
+    this.startPos = node.startPos;
+    this.endPos = node.endPos;
   }
 
   public SourcePosition getStartPos() {
diff --git a/src/main/java/org/sablecc/sablecc/node/AAlt.java b/src/main/java/org/sablecc/sablecc/node/AAlt.java
index 868516db660840f4961534721cdb6c667a06f292..85c748f4757b8bb019f1d1d2c3b2907eef751504 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAlt.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAlt.java
@@ -31,18 +31,15 @@ public final class AAlt extends PAlt
 
     }
 
-    public AAlt(AAlt node)
-    {
-        super(node);
-        setAltName(cloneNode(node._altName_));
-        setElems(cloneList(node._elems_));
-        setAltTransform(cloneNode(node._altTransform_));
-    }
-
     @Override
     public AAlt clone()
     {
-        return new AAlt(this);
+        AAlt cloned = new AAlt();
+        cloned.setAltName(cloneNode(this._altName_));
+        cloned.setElems(cloneList(this._elems_));
+        cloned.setAltTransform(cloneNode(this._altTransform_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AAltTransform.java b/src/main/java/org/sablecc/sablecc/node/AAltTransform.java
index 7a3711c2763428503b8dfce8a405def437f3d12a..d6e9126e496e6d334c4731bfa72a521958f1b4e5 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAltTransform.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAltTransform.java
@@ -31,18 +31,15 @@ public final class AAltTransform extends PAltTransform
 
     }
 
-    public AAltTransform(AAltTransform node)
-    {
-        super(node);
-        setLBrace(cloneNode(node._lBrace_));
-        setTerms(cloneList(node._terms_));
-        setRBrace(cloneNode(node._rBrace_));
-    }
-
     @Override
     public AAltTransform clone()
     {
-        return new AAltTransform(this);
+        AAltTransform cloned = new AAltTransform();
+        cloned.setLBrace(cloneNode(this._lBrace_));
+        cloned.setTerms(cloneList(this._terms_));
+        cloned.setRBrace(cloneNode(this._rBrace_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AAst.java b/src/main/java/org/sablecc/sablecc/node/AAst.java
index a0c94e04769204e21d4711f807a0ee2dec0a3232..b373a774e504f553b589e5d1252694bb55f102a3 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAst.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAst.java
@@ -23,16 +23,13 @@ public final class AAst extends PAst
 
     }
 
-    public AAst(AAst node)
-    {
-        super(node);
-        setProds(cloneList(node._prods_));
-    }
-
     @Override
     public AAst clone()
     {
-        return new AAst(this);
+        AAst cloned = new AAst();
+        cloned.setProds(cloneList(this._prods_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AAstAlt.java b/src/main/java/org/sablecc/sablecc/node/AAstAlt.java
index e08e5cf0de0682419983a2b1d1202cf7e6e621f4..1e7afed33ebc774d24b64ac79890c4a4b989b361 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAstAlt.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAstAlt.java
@@ -27,17 +27,14 @@ public final class AAstAlt extends PAstAlt
 
     }
 
-    public AAstAlt(AAstAlt node)
-    {
-        super(node);
-        setAltName(cloneNode(node._altName_));
-        setElems(cloneList(node._elems_));
-    }
-
     @Override
     public AAstAlt clone()
     {
-        return new AAstAlt(this);
+        AAstAlt cloned = new AAstAlt();
+        cloned.setAltName(cloneNode(this._altName_));
+        cloned.setElems(cloneList(this._elems_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AAstProd.java b/src/main/java/org/sablecc/sablecc/node/AAstProd.java
index aaa856ecbdbe2f9eddd099795e7fe325e8ab6bb5..5c15b3dc7c8e0bf9c030e07b69a5637c5143def0 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAstProd.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAstProd.java
@@ -27,17 +27,14 @@ public final class AAstProd extends PAstProd
 
     }
 
-    public AAstProd(AAstProd node)
-    {
-        super(node);
-        setId(cloneNode(node._id_));
-        setAlts(cloneList(node._alts_));
-    }
-
     @Override
     public AAstProd clone()
     {
-        return new AAstProd(this);
+        AAstProd cloned = new AAstProd();
+        cloned.setId(cloneNode(this._id_));
+        cloned.setAlts(cloneList(this._alts_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/ACharBasic.java b/src/main/java/org/sablecc/sablecc/node/ACharBasic.java
index 925d9381efda3224f099ffe40c66b535d3286644..30775a7f065a9c0123633b4976f3673c28f5a16a 100644
--- a/src/main/java/org/sablecc/sablecc/node/ACharBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/ACharBasic.java
@@ -19,16 +19,13 @@ public final class ACharBasic extends PBasic
 
     }
 
-    public ACharBasic(ACharBasic node)
-    {
-        super(node);
-        setChar(cloneNode(node._char_));
-    }
-
     @Override
     public ACharBasic clone()
     {
-        return new ACharBasic(this);
+        ACharBasic cloned = new ACharBasic();
+        cloned.setChar(cloneNode(this._char_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/ACharChar.java b/src/main/java/org/sablecc/sablecc/node/ACharChar.java
index 188050b861aa28e9180c78888efb583dd8620c6a..e8c8e61021fb918428bb83d2272cce6171cb65aa 100644
--- a/src/main/java/org/sablecc/sablecc/node/ACharChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/ACharChar.java
@@ -19,16 +19,13 @@ public final class ACharChar extends PChar
 
     }
 
-    public ACharChar(ACharChar node)
-    {
-        super(node);
-        setChar(cloneNode(node._char_));
-    }
-
     @Override
     public ACharChar clone()
     {
-        return new ACharChar(this);
+        ACharChar cloned = new ACharChar();
+        cloned.setChar(cloneNode(this._char_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AConcat.java b/src/main/java/org/sablecc/sablecc/node/AConcat.java
index 1ade31e73081c3137f1b76b7c769fe4231b486df..c83c0f7fa13db2ed89154dfc65527c59dc3c06d8 100644
--- a/src/main/java/org/sablecc/sablecc/node/AConcat.java
+++ b/src/main/java/org/sablecc/sablecc/node/AConcat.java
@@ -23,16 +23,13 @@ public final class AConcat extends PConcat
 
     }
 
-    public AConcat(AConcat node)
-    {
-        super(node);
-        setUnExps(cloneList(node._unExps_));
-    }
-
     @Override
     public AConcat clone()
     {
-        return new AConcat(this);
+        AConcat cloned = new AConcat();
+        cloned.setUnExps(cloneList(this._unExps_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/ADecChar.java b/src/main/java/org/sablecc/sablecc/node/ADecChar.java
index e2743bd85b4f1ceefe1ee8fc7bca2c2d9b0e7c20..41091bfc36e955f59e5e17889dac37b22bb367a5 100644
--- a/src/main/java/org/sablecc/sablecc/node/ADecChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/ADecChar.java
@@ -19,16 +19,13 @@ public final class ADecChar extends PChar
 
     }
 
-    public ADecChar(ADecChar node)
-    {
-        super(node);
-        setDecChar(cloneNode(node._decChar_));
-    }
-
     @Override
     public ADecChar clone()
     {
-        return new ADecChar(this);
+        ADecChar cloned = new ADecChar();
+        cloned.setDecChar(cloneNode(this._decChar_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AElem.java b/src/main/java/org/sablecc/sablecc/node/AElem.java
index ef1d47c784b0c8cc31c97a9436b07f4451cf766e..5f9963f2a17f13c679528d12fbdcab5f08006736 100644
--- a/src/main/java/org/sablecc/sablecc/node/AElem.java
+++ b/src/main/java/org/sablecc/sablecc/node/AElem.java
@@ -31,19 +31,16 @@ public final class AElem extends PElem
 
     }
 
-    public AElem(AElem node)
-    {
-        super(node);
-        setElemName(cloneNode(node._elemName_));
-        setSpecifier(cloneNode(node._specifier_));
-        setId(cloneNode(node._id_));
-        setUnOp(cloneNode(node._unOp_));
-    }
-
     @Override
     public AElem clone()
     {
-        return new AElem(this);
+        AElem cloned = new AElem();
+        cloned.setElemName(cloneNode(this._elemName_));
+        cloned.setSpecifier(cloneNode(this._specifier_));
+        cloned.setId(cloneNode(this._id_));
+        cloned.setUnOp(cloneNode(this._unOp_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AGrammar.java b/src/main/java/org/sablecc/sablecc/node/AGrammar.java
index 6a2cd2adaf77c3f47e0aec2b6c1c2518d4d8ca60..07f40c987c091878d667bfff08d87a36b3fae56e 100644
--- a/src/main/java/org/sablecc/sablecc/node/AGrammar.java
+++ b/src/main/java/org/sablecc/sablecc/node/AGrammar.java
@@ -47,22 +47,19 @@ public final class AGrammar extends PGrammar
 
     }
 
-    public AGrammar(AGrammar node)
-    {
-        super(node);
-        setPackage(cloneList(node._package_));
-        setHelpers(cloneNode(node._helpers_));
-        setStates(cloneNode(node._states_));
-        setTokens(cloneNode(node._tokens_));
-        setIgnTokens(cloneNode(node._ignTokens_));
-        setProductions(cloneNode(node._productions_));
-        setAst(cloneNode(node._ast_));
-    }
-
     @Override
     public AGrammar clone()
     {
-        return new AGrammar(this);
+        AGrammar cloned = new AGrammar();
+        cloned.setPackage(cloneList(this._package_));
+        cloned.setHelpers(cloneNode(this._helpers_));
+        cloned.setStates(cloneNode(this._states_));
+        cloned.setTokens(cloneNode(this._tokens_));
+        cloned.setIgnTokens(cloneNode(this._ignTokens_));
+        cloned.setProductions(cloneNode(this._productions_));
+        cloned.setAst(cloneNode(this._ast_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AHelperDef.java b/src/main/java/org/sablecc/sablecc/node/AHelperDef.java
index f19e5c7c146583b3dcd1c9cfe59e7e40f515f1b0..0cea09619ba2523287b7c6d0a331117515d9512d 100644
--- a/src/main/java/org/sablecc/sablecc/node/AHelperDef.java
+++ b/src/main/java/org/sablecc/sablecc/node/AHelperDef.java
@@ -23,17 +23,14 @@ public final class AHelperDef extends PHelperDef
 
     }
 
-    public AHelperDef(AHelperDef node)
-    {
-        super(node);
-        setId(cloneNode(node._id_));
-        setRegExp(cloneNode(node._regExp_));
-    }
-
     @Override
     public AHelperDef clone()
     {
-        return new AHelperDef(this);
+        AHelperDef cloned = new AHelperDef();
+        cloned.setId(cloneNode(this._id_));
+        cloned.setRegExp(cloneNode(this._regExp_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AHelpers.java b/src/main/java/org/sablecc/sablecc/node/AHelpers.java
index 772d6b8b20974d2082367109c1e41c6cb6b053e8..1cae38c307162b358e0d0a4ddbeb49041eccb636 100644
--- a/src/main/java/org/sablecc/sablecc/node/AHelpers.java
+++ b/src/main/java/org/sablecc/sablecc/node/AHelpers.java
@@ -23,16 +23,13 @@ public final class AHelpers extends PHelpers
 
     }
 
-    public AHelpers(AHelpers node)
-    {
-        super(node);
-        setHelperDefs(cloneList(node._helperDefs_));
-    }
-
     @Override
     public AHelpers clone()
     {
-        return new AHelpers(this);
+        AHelpers cloned = new AHelpers();
+        cloned.setHelperDefs(cloneList(this._helperDefs_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AHexChar.java b/src/main/java/org/sablecc/sablecc/node/AHexChar.java
index bde57e7bac6547a1b218db75d8d0cd8034554bed..9bba9d50dfeaca9c4e6bafcb920998fba27d9e76 100644
--- a/src/main/java/org/sablecc/sablecc/node/AHexChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/AHexChar.java
@@ -19,16 +19,13 @@ public final class AHexChar extends PChar
 
     }
 
-    public AHexChar(AHexChar node)
-    {
-        super(node);
-        setHexChar(cloneNode(node._hexChar_));
-    }
-
     @Override
     public AHexChar clone()
     {
-        return new AHexChar(this);
+        AHexChar cloned = new AHexChar();
+        cloned.setHexChar(cloneNode(this._hexChar_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AIdBasic.java b/src/main/java/org/sablecc/sablecc/node/AIdBasic.java
index 565e3200c6c0635c84a4f9db311fcede0765385a..7c394248f4fe07b2d0ebdb5fa8e6ba31f1f99db5 100644
--- a/src/main/java/org/sablecc/sablecc/node/AIdBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/AIdBasic.java
@@ -19,16 +19,13 @@ public final class AIdBasic extends PBasic
 
     }
 
-    public AIdBasic(AIdBasic node)
-    {
-        super(node);
-        setId(cloneNode(node._id_));
-    }
-
     @Override
     public AIdBasic clone()
     {
-        return new AIdBasic(this);
+        AIdBasic cloned = new AIdBasic();
+        cloned.setId(cloneNode(this._id_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AIgnTokens.java b/src/main/java/org/sablecc/sablecc/node/AIgnTokens.java
index 5290ee25abbc2384b93ae9462882821d7e17cd95..cd72f335b7b17e4a8536646dda1be03d9e65dee6 100644
--- a/src/main/java/org/sablecc/sablecc/node/AIgnTokens.java
+++ b/src/main/java/org/sablecc/sablecc/node/AIgnTokens.java
@@ -23,16 +23,13 @@ public final class AIgnTokens extends PIgnTokens
 
     }
 
-    public AIgnTokens(AIgnTokens node)
-    {
-        super(node);
-        setListId(cloneList(node._listId_));
-    }
-
     @Override
     public AIgnTokens clone()
     {
-        return new AIgnTokens(this);
+        AIgnTokens cloned = new AIgnTokens();
+        cloned.setListId(cloneList(this._listId_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AIntervalSet.java b/src/main/java/org/sablecc/sablecc/node/AIntervalSet.java
index 9bff5aa293c556c43530f33f6cfcc8ce5a5f2706..2095404f049ae3485705cc1472e81fd95b586da4 100644
--- a/src/main/java/org/sablecc/sablecc/node/AIntervalSet.java
+++ b/src/main/java/org/sablecc/sablecc/node/AIntervalSet.java
@@ -23,17 +23,14 @@ public final class AIntervalSet extends PSet
 
     }
 
-    public AIntervalSet(AIntervalSet node)
-    {
-        super(node);
-        setLeft(cloneNode(node._left_));
-        setRight(cloneNode(node._right_));
-    }
-
     @Override
     public AIntervalSet clone()
     {
-        return new AIntervalSet(this);
+        AIntervalSet cloned = new AIntervalSet();
+        cloned.setLeft(cloneNode(this._left_));
+        cloned.setRight(cloneNode(this._right_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AListTerm.java b/src/main/java/org/sablecc/sablecc/node/AListTerm.java
index bfa2c59eb2bfbbe787c45463af461eb5cfa610e3..737a840ca1537602ed856b4f1733d44a21152a24 100644
--- a/src/main/java/org/sablecc/sablecc/node/AListTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/AListTerm.java
@@ -27,17 +27,14 @@ public final class AListTerm extends PTerm
 
     }
 
-    public AListTerm(AListTerm node)
-    {
-        super(node);
-        setLBkt(cloneNode(node._lBkt_));
-        setListTerms(cloneList(node._listTerms_));
-    }
-
     @Override
     public AListTerm clone()
     {
-        return new AListTerm(this);
+        AListTerm cloned = new AListTerm();
+        cloned.setLBkt(cloneNode(this._lBkt_));
+        cloned.setListTerms(cloneList(this._listTerms_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AMinusBinOp.java b/src/main/java/org/sablecc/sablecc/node/AMinusBinOp.java
index fd1e1e56a1d82345c9369931217712c53fa28e7a..38822d8b677d2b2371b4fa87b990374ddf25e97d 100644
--- a/src/main/java/org/sablecc/sablecc/node/AMinusBinOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/AMinusBinOp.java
@@ -11,15 +11,12 @@ public final class AMinusBinOp extends PBinOp
     {
     }
 
-    public AMinusBinOp(AMinusBinOp node)
-    {
-        super(node);
-    }
-
     @Override
     public AMinusBinOp clone()
     {
-        return new AMinusBinOp(this);
+        AMinusBinOp cloned = new AMinusBinOp();
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/ANewListTerm.java b/src/main/java/org/sablecc/sablecc/node/ANewListTerm.java
index b2c151bba0d1456c1839bf556146b852fb8f9db0..c630b91eb443be133da5e9ca6499622d3461aaaa 100644
--- a/src/main/java/org/sablecc/sablecc/node/ANewListTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ANewListTerm.java
@@ -31,18 +31,15 @@ public final class ANewListTerm extends PListTerm
 
     }
 
-    public ANewListTerm(ANewListTerm node)
-    {
-        super(node);
-        setProdName(cloneNode(node._prodName_));
-        setLPar(cloneNode(node._lPar_));
-        setParams(cloneList(node._params_));
-    }
-
     @Override
     public ANewListTerm clone()
     {
-        return new ANewListTerm(this);
+        ANewListTerm cloned = new ANewListTerm();
+        cloned.setProdName(cloneNode(this._prodName_));
+        cloned.setLPar(cloneNode(this._lPar_));
+        cloned.setParams(cloneList(this._params_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/ANewTerm.java b/src/main/java/org/sablecc/sablecc/node/ANewTerm.java
index 4fb329bde1657a4b8a9dcc365ea68561c8049c1c..0c63475d9f9927768aafa2234baed8adc54a5eb8 100644
--- a/src/main/java/org/sablecc/sablecc/node/ANewTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ANewTerm.java
@@ -31,18 +31,15 @@ public final class ANewTerm extends PTerm
 
     }
 
-    public ANewTerm(ANewTerm node)
-    {
-        super(node);
-        setProdName(cloneNode(node._prodName_));
-        setLPar(cloneNode(node._lPar_));
-        setParams(cloneList(node._params_));
-    }
-
     @Override
     public ANewTerm clone()
     {
-        return new ANewTerm(this);
+        ANewTerm cloned = new ANewTerm();
+        cloned.setProdName(cloneNode(this._prodName_));
+        cloned.setLPar(cloneNode(this._lPar_));
+        cloned.setParams(cloneList(this._params_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/ANullTerm.java b/src/main/java/org/sablecc/sablecc/node/ANullTerm.java
index e5846fc1a9468177ecffc92d822f42b4f79f8ac0..a8fc22ebe6fe6a922603c06e57c09ff8f573b539 100644
--- a/src/main/java/org/sablecc/sablecc/node/ANullTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ANullTerm.java
@@ -11,15 +11,12 @@ public final class ANullTerm extends PTerm
     {
     }
 
-    public ANullTerm(ANullTerm node)
-    {
-        super(node);
-    }
-
     @Override
     public ANullTerm clone()
     {
-        return new ANullTerm(this);
+        ANullTerm cloned = new ANullTerm();
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AOperationSet.java b/src/main/java/org/sablecc/sablecc/node/AOperationSet.java
index fc8b1c38ab58ee68996bd669753c5c3d52f1b00e..5ea786bc32f4d7cf639c013d3e56be9c9dcb6164 100644
--- a/src/main/java/org/sablecc/sablecc/node/AOperationSet.java
+++ b/src/main/java/org/sablecc/sablecc/node/AOperationSet.java
@@ -27,18 +27,15 @@ public final class AOperationSet extends PSet
 
     }
 
-    public AOperationSet(AOperationSet node)
-    {
-        super(node);
-        setLeft(cloneNode(node._left_));
-        setBinOp(cloneNode(node._binOp_));
-        setRight(cloneNode(node._right_));
-    }
-
     @Override
     public AOperationSet clone()
     {
-        return new AOperationSet(this);
+        AOperationSet cloned = new AOperationSet();
+        cloned.setLeft(cloneNode(this._left_));
+        cloned.setBinOp(cloneNode(this._binOp_));
+        cloned.setRight(cloneNode(this._right_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/APlusBinOp.java b/src/main/java/org/sablecc/sablecc/node/APlusBinOp.java
index e7ac89e687070163a6398d5ccb52d2c318cf2a97..cfcb1896c580475f0e395fbc0987c2632924bdce 100644
--- a/src/main/java/org/sablecc/sablecc/node/APlusBinOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/APlusBinOp.java
@@ -11,15 +11,12 @@ public final class APlusBinOp extends PBinOp
     {
     }
 
-    public APlusBinOp(APlusBinOp node)
-    {
-        super(node);
-    }
-
     @Override
     public APlusBinOp clone()
     {
-        return new APlusBinOp(this);
+        APlusBinOp cloned = new APlusBinOp();
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/APlusUnOp.java b/src/main/java/org/sablecc/sablecc/node/APlusUnOp.java
index 06e6fa7f89f0f0f5e0e463cbcf8d43c62a1d3e28..c766c024844e316a051c8e3e7291c1c32ce138e7 100644
--- a/src/main/java/org/sablecc/sablecc/node/APlusUnOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/APlusUnOp.java
@@ -19,16 +19,13 @@ public final class APlusUnOp extends PUnOp
 
     }
 
-    public APlusUnOp(APlusUnOp node)
-    {
-        super(node);
-        setPlus(cloneNode(node._plus_));
-    }
-
     @Override
     public APlusUnOp clone()
     {
-        return new APlusUnOp(this);
+        APlusUnOp cloned = new APlusUnOp();
+        cloned.setPlus(cloneNode(this._plus_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AProd.java b/src/main/java/org/sablecc/sablecc/node/AProd.java
index cd2f5039ba8ba6f5122d25bc152b4af7ab7a4d44..ca5a37d268273779e72a09ddb165bb028dd6db63 100644
--- a/src/main/java/org/sablecc/sablecc/node/AProd.java
+++ b/src/main/java/org/sablecc/sablecc/node/AProd.java
@@ -35,19 +35,16 @@ public final class AProd extends PProd
 
     }
 
-    public AProd(AProd node)
-    {
-        super(node);
-        setId(cloneNode(node._id_));
-        setArrow(cloneNode(node._arrow_));
-        setProdTransform(cloneList(node._prodTransform_));
-        setAlts(cloneList(node._alts_));
-    }
-
     @Override
     public AProd clone()
     {
-        return new AProd(this);
+        AProd cloned = new AProd();
+        cloned.setId(cloneNode(this._id_));
+        cloned.setArrow(cloneNode(this._arrow_));
+        cloned.setProdTransform(cloneList(this._prodTransform_));
+        cloned.setAlts(cloneList(this._alts_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AProdName.java b/src/main/java/org/sablecc/sablecc/node/AProdName.java
index a11a3803e86b1b8d6894da74c0163dd092f452f3..8e4681837fdb1cc953d5f77b3c14538212fde9bd 100644
--- a/src/main/java/org/sablecc/sablecc/node/AProdName.java
+++ b/src/main/java/org/sablecc/sablecc/node/AProdName.java
@@ -23,17 +23,14 @@ public final class AProdName extends PProdName
 
     }
 
-    public AProdName(AProdName node)
-    {
-        super(node);
-        setId(cloneNode(node._id_));
-        setProdNameTail(cloneNode(node._prodNameTail_));
-    }
-
     @Override
     public AProdName clone()
     {
-        return new AProdName(this);
+        AProdName cloned = new AProdName();
+        cloned.setId(cloneNode(this._id_));
+        cloned.setProdNameTail(cloneNode(this._prodNameTail_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AProductionSpecifier.java b/src/main/java/org/sablecc/sablecc/node/AProductionSpecifier.java
index cd822a61eb245bbb9cfa679aba3ef760477fd790..74304a394f4a62023eecf90b515c7546933017b7 100644
--- a/src/main/java/org/sablecc/sablecc/node/AProductionSpecifier.java
+++ b/src/main/java/org/sablecc/sablecc/node/AProductionSpecifier.java
@@ -11,15 +11,12 @@ public final class AProductionSpecifier extends PSpecifier
     {
     }
 
-    public AProductionSpecifier(AProductionSpecifier node)
-    {
-        super(node);
-    }
-
     @Override
     public AProductionSpecifier clone()
     {
-        return new AProductionSpecifier(this);
+        AProductionSpecifier cloned = new AProductionSpecifier();
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AProductions.java b/src/main/java/org/sablecc/sablecc/node/AProductions.java
index 4e73e965ea600e0f15e424066ea88f1eb4df0f90..569464abf6dfc6b3b44aa9802c64dc948a9bd2fe 100644
--- a/src/main/java/org/sablecc/sablecc/node/AProductions.java
+++ b/src/main/java/org/sablecc/sablecc/node/AProductions.java
@@ -23,16 +23,13 @@ public final class AProductions extends PProductions
 
     }
 
-    public AProductions(AProductions node)
-    {
-        super(node);
-        setProds(cloneList(node._prods_));
-    }
-
     @Override
     public AProductions clone()
     {
-        return new AProductions(this);
+        AProductions cloned = new AProductions();
+        cloned.setProds(cloneList(this._prods_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AQMarkUnOp.java b/src/main/java/org/sablecc/sablecc/node/AQMarkUnOp.java
index c78c19fc5b0468841366b32a02353e0b760ae2d5..ec754fc330de4e8722aa938e3fa568797d7d52e6 100644
--- a/src/main/java/org/sablecc/sablecc/node/AQMarkUnOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/AQMarkUnOp.java
@@ -19,16 +19,13 @@ public final class AQMarkUnOp extends PUnOp
 
     }
 
-    public AQMarkUnOp(AQMarkUnOp node)
-    {
-        super(node);
-        setQMark(cloneNode(node._qMark_));
-    }
-
     @Override
     public AQMarkUnOp clone()
     {
-        return new AQMarkUnOp(this);
+        AQMarkUnOp cloned = new AQMarkUnOp();
+        cloned.setQMark(cloneNode(this._qMark_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/ARegExp.java b/src/main/java/org/sablecc/sablecc/node/ARegExp.java
index 7b604e5ddbe31e34039e8310248785e8029b45f7..6ebe5769d7747c89a3fff36fc5067b588dcb73fb 100644
--- a/src/main/java/org/sablecc/sablecc/node/ARegExp.java
+++ b/src/main/java/org/sablecc/sablecc/node/ARegExp.java
@@ -23,16 +23,13 @@ public final class ARegExp extends PRegExp
 
     }
 
-    public ARegExp(ARegExp node)
-    {
-        super(node);
-        setConcats(cloneList(node._concats_));
-    }
-
     @Override
     public ARegExp clone()
     {
-        return new ARegExp(this);
+        ARegExp cloned = new ARegExp();
+        cloned.setConcats(cloneList(this._concats_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/ARegExpBasic.java b/src/main/java/org/sablecc/sablecc/node/ARegExpBasic.java
index 4978f8948f4f2ae400ede54cfcc72541ed16599f..3f615ba4621568df38f651475dae0afafd6ec6e1 100644
--- a/src/main/java/org/sablecc/sablecc/node/ARegExpBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/ARegExpBasic.java
@@ -19,16 +19,13 @@ public final class ARegExpBasic extends PBasic
 
     }
 
-    public ARegExpBasic(ARegExpBasic node)
-    {
-        super(node);
-        setRegExp(cloneNode(node._regExp_));
-    }
-
     @Override
     public ARegExpBasic clone()
     {
-        return new ARegExpBasic(this);
+        ARegExpBasic cloned = new ARegExpBasic();
+        cloned.setRegExp(cloneNode(this._regExp_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/ASetBasic.java b/src/main/java/org/sablecc/sablecc/node/ASetBasic.java
index 53a957cb18e2da018bf57bafe8c31a794bd3d1fe..b45847e9e15e5c887bd53584146fcb56cc476396 100644
--- a/src/main/java/org/sablecc/sablecc/node/ASetBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/ASetBasic.java
@@ -19,16 +19,13 @@ public final class ASetBasic extends PBasic
 
     }
 
-    public ASetBasic(ASetBasic node)
-    {
-        super(node);
-        setSet(cloneNode(node._set_));
-    }
-
     @Override
     public ASetBasic clone()
     {
-        return new ASetBasic(this);
+        ASetBasic cloned = new ASetBasic();
+        cloned.setSet(cloneNode(this._set_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/ASimpleListTerm.java b/src/main/java/org/sablecc/sablecc/node/ASimpleListTerm.java
index de072dddfccca3cf48bde6b7263bcc14b740dfc7..b2e1b6426a3793a9e1f0dddb7a7406b3f2219e5e 100644
--- a/src/main/java/org/sablecc/sablecc/node/ASimpleListTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ASimpleListTerm.java
@@ -27,18 +27,15 @@ public final class ASimpleListTerm extends PListTerm
 
     }
 
-    public ASimpleListTerm(ASimpleListTerm node)
-    {
-        super(node);
-        setSpecifier(cloneNode(node._specifier_));
-        setId(cloneNode(node._id_));
-        setSimpleTermTail(cloneNode(node._simpleTermTail_));
-    }
-
     @Override
     public ASimpleListTerm clone()
     {
-        return new ASimpleListTerm(this);
+        ASimpleListTerm cloned = new ASimpleListTerm();
+        cloned.setSpecifier(cloneNode(this._specifier_));
+        cloned.setId(cloneNode(this._id_));
+        cloned.setSimpleTermTail(cloneNode(this._simpleTermTail_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/ASimpleTerm.java b/src/main/java/org/sablecc/sablecc/node/ASimpleTerm.java
index 801c48c2137f889c56e203d6c8dc86caa6734f45..54cfa95c6cb4f81f78cb1daefec90df46e76ef10 100644
--- a/src/main/java/org/sablecc/sablecc/node/ASimpleTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ASimpleTerm.java
@@ -27,18 +27,15 @@ public final class ASimpleTerm extends PTerm
 
     }
 
-    public ASimpleTerm(ASimpleTerm node)
-    {
-        super(node);
-        setSpecifier(cloneNode(node._specifier_));
-        setId(cloneNode(node._id_));
-        setSimpleTermTail(cloneNode(node._simpleTermTail_));
-    }
-
     @Override
     public ASimpleTerm clone()
     {
-        return new ASimpleTerm(this);
+        ASimpleTerm cloned = new ASimpleTerm();
+        cloned.setSpecifier(cloneNode(this._specifier_));
+        cloned.setId(cloneNode(this._id_));
+        cloned.setSimpleTermTail(cloneNode(this._simpleTermTail_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AStarUnOp.java b/src/main/java/org/sablecc/sablecc/node/AStarUnOp.java
index 626ff012036ea7c35177c470a56d78b0536f5a18..429335d44413e4c4a87ecb3d47947a3c2dc2f33b 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStarUnOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStarUnOp.java
@@ -19,16 +19,13 @@ public final class AStarUnOp extends PUnOp
 
     }
 
-    public AStarUnOp(AStarUnOp node)
-    {
-        super(node);
-        setStar(cloneNode(node._star_));
-    }
-
     @Override
     public AStarUnOp clone()
     {
-        return new AStarUnOp(this);
+        AStarUnOp cloned = new AStarUnOp();
+        cloned.setStar(cloneNode(this._star_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AStateList.java b/src/main/java/org/sablecc/sablecc/node/AStateList.java
index 706d3c7ddeaed996c9c69bd7a0351661519fb6f4..8ac649a07461ed89a81777c55dc4c3f8a32b5d93 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStateList.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStateList.java
@@ -31,18 +31,15 @@ public final class AStateList extends PStateList
 
     }
 
-    public AStateList(AStateList node)
-    {
-        super(node);
-        setId(cloneNode(node._id_));
-        setTransition(cloneNode(node._transition_));
-        setStateLists(cloneList(node._stateLists_));
-    }
-
     @Override
     public AStateList clone()
     {
-        return new AStateList(this);
+        AStateList cloned = new AStateList();
+        cloned.setId(cloneNode(this._id_));
+        cloned.setTransition(cloneNode(this._transition_));
+        cloned.setStateLists(cloneList(this._stateLists_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AStateListTail.java b/src/main/java/org/sablecc/sablecc/node/AStateListTail.java
index 6f5222864c45d681ec832a2430f8519a444e86b8..d769f961dbdc6ef47e05da3fc4a5c6806e2c8697 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStateListTail.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStateListTail.java
@@ -23,17 +23,14 @@ public final class AStateListTail extends PStateListTail
 
     }
 
-    public AStateListTail(AStateListTail node)
-    {
-        super(node);
-        setId(cloneNode(node._id_));
-        setTransition(cloneNode(node._transition_));
-    }
-
     @Override
     public AStateListTail clone()
     {
-        return new AStateListTail(this);
+        AStateListTail cloned = new AStateListTail();
+        cloned.setId(cloneNode(this._id_));
+        cloned.setTransition(cloneNode(this._transition_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AStates.java b/src/main/java/org/sablecc/sablecc/node/AStates.java
index a5bd2e06f6ce99e7f00f662fc8e062c53cfab678..634dbf6e397af84e77f585052cdcd4cb3e4fc8e2 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStates.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStates.java
@@ -23,16 +23,13 @@ public final class AStates extends PStates
 
     }
 
-    public AStates(AStates node)
-    {
-        super(node);
-        setListId(cloneList(node._listId_));
-    }
-
     @Override
     public AStates clone()
     {
-        return new AStates(this);
+        AStates cloned = new AStates();
+        cloned.setListId(cloneList(this._listId_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AStringBasic.java b/src/main/java/org/sablecc/sablecc/node/AStringBasic.java
index ff1dd0a0d49bd4a47c9417cb9c8e706e8e9b8bb3..5ea18ba0f098812720737786888a10ff4d0e370d 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStringBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStringBasic.java
@@ -19,16 +19,13 @@ public final class AStringBasic extends PBasic
 
     }
 
-    public AStringBasic(AStringBasic node)
-    {
-        super(node);
-        setString(cloneNode(node._string_));
-    }
-
     @Override
     public AStringBasic clone()
     {
-        return new AStringBasic(this);
+        AStringBasic cloned = new AStringBasic();
+        cloned.setString(cloneNode(this._string_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/ATokenDef.java b/src/main/java/org/sablecc/sablecc/node/ATokenDef.java
index b7af9703df8e7beb6eb767b1ffe14b14d41b0681..85868b13476ca8a5538e62c85d9dbce74b68540b 100644
--- a/src/main/java/org/sablecc/sablecc/node/ATokenDef.java
+++ b/src/main/java/org/sablecc/sablecc/node/ATokenDef.java
@@ -35,20 +35,17 @@ public final class ATokenDef extends PTokenDef
 
     }
 
-    public ATokenDef(ATokenDef node)
-    {
-        super(node);
-        setStateList(cloneNode(node._stateList_));
-        setId(cloneNode(node._id_));
-        setRegExp(cloneNode(node._regExp_));
-        setSlash(cloneNode(node._slash_));
-        setLookAhead(cloneNode(node._lookAhead_));
-    }
-
     @Override
     public ATokenDef clone()
     {
-        return new ATokenDef(this);
+        ATokenDef cloned = new ATokenDef();
+        cloned.setStateList(cloneNode(this._stateList_));
+        cloned.setId(cloneNode(this._id_));
+        cloned.setRegExp(cloneNode(this._regExp_));
+        cloned.setSlash(cloneNode(this._slash_));
+        cloned.setLookAhead(cloneNode(this._lookAhead_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/ATokenSpecifier.java b/src/main/java/org/sablecc/sablecc/node/ATokenSpecifier.java
index b4223d8a7e03f741fb066afc2d5f9c209fb60c6d..13242e877e8967dbd85b5bf90deaa1be5f90c316 100644
--- a/src/main/java/org/sablecc/sablecc/node/ATokenSpecifier.java
+++ b/src/main/java/org/sablecc/sablecc/node/ATokenSpecifier.java
@@ -11,15 +11,12 @@ public final class ATokenSpecifier extends PSpecifier
     {
     }
 
-    public ATokenSpecifier(ATokenSpecifier node)
-    {
-        super(node);
-    }
-
     @Override
     public ATokenSpecifier clone()
     {
-        return new ATokenSpecifier(this);
+        ATokenSpecifier cloned = new ATokenSpecifier();
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/ATokens.java b/src/main/java/org/sablecc/sablecc/node/ATokens.java
index d07b76d12cf03bb4245035872f64cf858325afc8..29e09905844a0b8b31211f37956b3d588936e5d9 100644
--- a/src/main/java/org/sablecc/sablecc/node/ATokens.java
+++ b/src/main/java/org/sablecc/sablecc/node/ATokens.java
@@ -23,16 +23,13 @@ public final class ATokens extends PTokens
 
     }
 
-    public ATokens(ATokens node)
-    {
-        super(node);
-        setTokenDefs(cloneList(node._tokenDefs_));
-    }
-
     @Override
     public ATokens clone()
     {
-        return new ATokens(this);
+        ATokens cloned = new ATokens();
+        cloned.setTokenDefs(cloneList(this._tokenDefs_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/ATransition.java b/src/main/java/org/sablecc/sablecc/node/ATransition.java
index 0e5499fb16083f7fb555f486833e752fc9bf4d8e..e13d1cbd44c30a837ddbdb3c1918aed5d7e2b6bf 100644
--- a/src/main/java/org/sablecc/sablecc/node/ATransition.java
+++ b/src/main/java/org/sablecc/sablecc/node/ATransition.java
@@ -19,16 +19,13 @@ public final class ATransition extends PTransition
 
     }
 
-    public ATransition(ATransition node)
-    {
-        super(node);
-        setId(cloneNode(node._id_));
-    }
-
     @Override
     public ATransition clone()
     {
-        return new ATransition(this);
+        ATransition cloned = new ATransition();
+        cloned.setId(cloneNode(this._id_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AUnExp.java b/src/main/java/org/sablecc/sablecc/node/AUnExp.java
index 6d7d40d738e775435094d94a6065bcae51b2aa65..2fcf0268ddbf597fd41f470dc30d90a20a171461 100644
--- a/src/main/java/org/sablecc/sablecc/node/AUnExp.java
+++ b/src/main/java/org/sablecc/sablecc/node/AUnExp.java
@@ -23,17 +23,14 @@ public final class AUnExp extends PUnExp
 
     }
 
-    public AUnExp(AUnExp node)
-    {
-        super(node);
-        setBasic(cloneNode(node._basic_));
-        setUnOp(cloneNode(node._unOp_));
-    }
-
     @Override
     public AUnExp clone()
     {
-        return new AUnExp(this);
+        AUnExp cloned = new AUnExp();
+        cloned.setBasic(cloneNode(this._basic_));
+        cloned.setUnOp(cloneNode(this._unOp_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/EOF.java b/src/main/java/org/sablecc/sablecc/node/EOF.java
index 8d7e017e119d18af04ebeca9e6e6f910dcd7a282..7def3d3b7921c4ee689fd634a4cd043c3c2cb3e4 100644
--- a/src/main/java/org/sablecc/sablecc/node/EOF.java
+++ b/src/main/java/org/sablecc/sablecc/node/EOF.java
@@ -16,15 +16,12 @@ public final class EOF extends Token
         super("", line, pos);
     }
 
-    public EOF(EOF token)
-    {
-        super(token);
-    }
-
     @Override
     public EOF clone()
     {
-        return new EOF(this);
+        EOF cloned = new EOF(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/Node.java b/src/main/java/org/sablecc/sablecc/node/Node.java
index f37caa17aa10369ec626ddc9a28edc095347f5e2..625a97e1b9c16d16cfa072d767d4fd651a4fa26f 100644
--- a/src/main/java/org/sablecc/sablecc/node/Node.java
+++ b/src/main/java/org/sablecc/sablecc/node/Node.java
@@ -14,14 +14,8 @@ public abstract class Node extends PositionedNode implements Switchable, Cloneab
     protected Node()
     {}
 
-    protected Node(Node node)
-    {
-        super(node);
-        // Copy constructor intentionally does not keep parent!
-        // The new copied node is not a child of the original parent anymore.
-        this.parent = null;
-    }
-
+    // clone intentionally does not keep parent!
+    // The new copied node is not a child of the original parent anymore.
     @Override
     public abstract Node clone();
 
diff --git a/src/main/java/org/sablecc/sablecc/node/PAlt.java b/src/main/java/org/sablecc/sablecc/node/PAlt.java
index 805ab230e329fd4693a7994ac3b49cd7e3f32695..335c44afacb91a9f85d25c1c6a22d126759d4c13 100644
--- a/src/main/java/org/sablecc/sablecc/node/PAlt.java
+++ b/src/main/java/org/sablecc/sablecc/node/PAlt.java
@@ -7,11 +7,6 @@ public abstract class PAlt extends Node
     public PAlt()
     {}
 
-    public PAlt(PAlt node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PAlt clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PAltTransform.java b/src/main/java/org/sablecc/sablecc/node/PAltTransform.java
index f0eafa2ea20ba7bc6895e3f410c8c79566b18ac5..91fdd2ff024d0132d8856ddcc8d8eab87c355d52 100644
--- a/src/main/java/org/sablecc/sablecc/node/PAltTransform.java
+++ b/src/main/java/org/sablecc/sablecc/node/PAltTransform.java
@@ -7,11 +7,6 @@ public abstract class PAltTransform extends Node
     public PAltTransform()
     {}
 
-    public PAltTransform(PAltTransform node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PAltTransform clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PAst.java b/src/main/java/org/sablecc/sablecc/node/PAst.java
index 04d7430515d9fa82ccfb32cb04b3783329803d63..7d930110c5e879d86048bb7fe2bad88bdfae3b8e 100644
--- a/src/main/java/org/sablecc/sablecc/node/PAst.java
+++ b/src/main/java/org/sablecc/sablecc/node/PAst.java
@@ -7,11 +7,6 @@ public abstract class PAst extends Node
     public PAst()
     {}
 
-    public PAst(PAst node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PAst clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PAstAlt.java b/src/main/java/org/sablecc/sablecc/node/PAstAlt.java
index 7fa3763890d2b5441d693633db0c2d3526a8b452..68d31598c945084493bedad7568b43040faa6465 100644
--- a/src/main/java/org/sablecc/sablecc/node/PAstAlt.java
+++ b/src/main/java/org/sablecc/sablecc/node/PAstAlt.java
@@ -7,11 +7,6 @@ public abstract class PAstAlt extends Node
     public PAstAlt()
     {}
 
-    public PAstAlt(PAstAlt node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PAstAlt clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PAstProd.java b/src/main/java/org/sablecc/sablecc/node/PAstProd.java
index de12a50aa730b3d35c761e96a8a20b47a192de19..d472b417416ba6d542bd06612a773acd60b887ee 100644
--- a/src/main/java/org/sablecc/sablecc/node/PAstProd.java
+++ b/src/main/java/org/sablecc/sablecc/node/PAstProd.java
@@ -7,11 +7,6 @@ public abstract class PAstProd extends Node
     public PAstProd()
     {}
 
-    public PAstProd(PAstProd node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PAstProd clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PBasic.java b/src/main/java/org/sablecc/sablecc/node/PBasic.java
index 2a3b4b9c02c9a6371c9a782958d8f2bd31fabd80..d2dce6ef952642bf8c18275125bb61e3adf840b0 100644
--- a/src/main/java/org/sablecc/sablecc/node/PBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/PBasic.java
@@ -7,11 +7,6 @@ public abstract class PBasic extends Node
     public PBasic()
     {}
 
-    public PBasic(PBasic node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PBasic clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PBinOp.java b/src/main/java/org/sablecc/sablecc/node/PBinOp.java
index 1d35acb71ff9a10a68dfa8bf74677218ba20bd86..4e0f60584b94ca30b0ee54265420e4ed6cfaf23b 100644
--- a/src/main/java/org/sablecc/sablecc/node/PBinOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/PBinOp.java
@@ -7,11 +7,6 @@ public abstract class PBinOp extends Node
     public PBinOp()
     {}
 
-    public PBinOp(PBinOp node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PBinOp clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PChar.java b/src/main/java/org/sablecc/sablecc/node/PChar.java
index 1e1975cc9edebdde7462b3d85320c5e4b857a8f1..429049b23b87c0d313325b9e1abccaceebe830a3 100644
--- a/src/main/java/org/sablecc/sablecc/node/PChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/PChar.java
@@ -7,11 +7,6 @@ public abstract class PChar extends Node
     public PChar()
     {}
 
-    public PChar(PChar node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PChar clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PConcat.java b/src/main/java/org/sablecc/sablecc/node/PConcat.java
index 7c9ef83e1a5faa05761ed20a792560264a01ea72..20dce0e6b3a8dedc385ffd865acae6e38d4727b2 100644
--- a/src/main/java/org/sablecc/sablecc/node/PConcat.java
+++ b/src/main/java/org/sablecc/sablecc/node/PConcat.java
@@ -7,11 +7,6 @@ public abstract class PConcat extends Node
     public PConcat()
     {}
 
-    public PConcat(PConcat node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PConcat clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PElem.java b/src/main/java/org/sablecc/sablecc/node/PElem.java
index 748f1bc5ec9b069d99b54db2d2a361af026991c5..b7ec72420bce7a324a1ccd07feea281c51d43835 100644
--- a/src/main/java/org/sablecc/sablecc/node/PElem.java
+++ b/src/main/java/org/sablecc/sablecc/node/PElem.java
@@ -7,11 +7,6 @@ public abstract class PElem extends Node
     public PElem()
     {}
 
-    public PElem(PElem node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PElem clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PGrammar.java b/src/main/java/org/sablecc/sablecc/node/PGrammar.java
index 8501e4c0b95d2135664b18fb021ad9742313759e..aadfe6a6dd10c48823d15294ee04d10a1f64236e 100644
--- a/src/main/java/org/sablecc/sablecc/node/PGrammar.java
+++ b/src/main/java/org/sablecc/sablecc/node/PGrammar.java
@@ -7,11 +7,6 @@ public abstract class PGrammar extends Node
     public PGrammar()
     {}
 
-    public PGrammar(PGrammar node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PGrammar clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PHelperDef.java b/src/main/java/org/sablecc/sablecc/node/PHelperDef.java
index b9e501dc3ebc011a5faf44dd0934345c69fa6740..7a2a876ea1f7d6e3b547065e03d194d826b43449 100644
--- a/src/main/java/org/sablecc/sablecc/node/PHelperDef.java
+++ b/src/main/java/org/sablecc/sablecc/node/PHelperDef.java
@@ -7,11 +7,6 @@ public abstract class PHelperDef extends Node
     public PHelperDef()
     {}
 
-    public PHelperDef(PHelperDef node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PHelperDef clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PHelpers.java b/src/main/java/org/sablecc/sablecc/node/PHelpers.java
index a1ddbf2b92fa1914726da310f944720600c43a22..bbff36bc1c3559d2ae9bb3f756c8ebfba3e45a16 100644
--- a/src/main/java/org/sablecc/sablecc/node/PHelpers.java
+++ b/src/main/java/org/sablecc/sablecc/node/PHelpers.java
@@ -7,11 +7,6 @@ public abstract class PHelpers extends Node
     public PHelpers()
     {}
 
-    public PHelpers(PHelpers node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PHelpers clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PIgnTokens.java b/src/main/java/org/sablecc/sablecc/node/PIgnTokens.java
index fb53108b47c422f028ac881a09990a31f790c53c..68cee2aa92ed7da9618a6f471ff3297e2e6ec16e 100644
--- a/src/main/java/org/sablecc/sablecc/node/PIgnTokens.java
+++ b/src/main/java/org/sablecc/sablecc/node/PIgnTokens.java
@@ -7,11 +7,6 @@ public abstract class PIgnTokens extends Node
     public PIgnTokens()
     {}
 
-    public PIgnTokens(PIgnTokens node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PIgnTokens clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PListTerm.java b/src/main/java/org/sablecc/sablecc/node/PListTerm.java
index d8e7a48fc7537f0a1ca95dfc1a9eec33df44497b..5003121a98afea2aa37585c621f803d69638b38d 100644
--- a/src/main/java/org/sablecc/sablecc/node/PListTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/PListTerm.java
@@ -7,11 +7,6 @@ public abstract class PListTerm extends Node
     public PListTerm()
     {}
 
-    public PListTerm(PListTerm node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PListTerm clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PProd.java b/src/main/java/org/sablecc/sablecc/node/PProd.java
index 2d9db40db2087d7b65bc2e48ba491854392625a8..74e3accd24b645260b2dfba3e96042aa058b59f6 100644
--- a/src/main/java/org/sablecc/sablecc/node/PProd.java
+++ b/src/main/java/org/sablecc/sablecc/node/PProd.java
@@ -7,11 +7,6 @@ public abstract class PProd extends Node
     public PProd()
     {}
 
-    public PProd(PProd node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PProd clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PProdName.java b/src/main/java/org/sablecc/sablecc/node/PProdName.java
index 380e8da86d939305a4353354040908258a3175e7..04b99c52c94d6566e06c02784525d71cefbfe329 100644
--- a/src/main/java/org/sablecc/sablecc/node/PProdName.java
+++ b/src/main/java/org/sablecc/sablecc/node/PProdName.java
@@ -7,11 +7,6 @@ public abstract class PProdName extends Node
     public PProdName()
     {}
 
-    public PProdName(PProdName node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PProdName clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PProductions.java b/src/main/java/org/sablecc/sablecc/node/PProductions.java
index 98da82638503ce58f7d0a5dcab776c74d0f75a45..d908b9b0352032c364b530ee25c5e77f870d8005 100644
--- a/src/main/java/org/sablecc/sablecc/node/PProductions.java
+++ b/src/main/java/org/sablecc/sablecc/node/PProductions.java
@@ -7,11 +7,6 @@ public abstract class PProductions extends Node
     public PProductions()
     {}
 
-    public PProductions(PProductions node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PProductions clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PRegExp.java b/src/main/java/org/sablecc/sablecc/node/PRegExp.java
index 3ebc5a202aafbe5c3b3c9eeb7876811385bff89e..93ddece2d97a84b2d1f1cd8f6b19d7810b739821 100644
--- a/src/main/java/org/sablecc/sablecc/node/PRegExp.java
+++ b/src/main/java/org/sablecc/sablecc/node/PRegExp.java
@@ -7,11 +7,6 @@ public abstract class PRegExp extends Node
     public PRegExp()
     {}
 
-    public PRegExp(PRegExp node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PRegExp clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PSet.java b/src/main/java/org/sablecc/sablecc/node/PSet.java
index e9d659382aa480c0e48ba2bc7cecb37981d8a5f4..a4ca9c14a66e5b4469c6b88d42786a7729b21696 100644
--- a/src/main/java/org/sablecc/sablecc/node/PSet.java
+++ b/src/main/java/org/sablecc/sablecc/node/PSet.java
@@ -7,11 +7,6 @@ public abstract class PSet extends Node
     public PSet()
     {}
 
-    public PSet(PSet node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PSet clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PSpecifier.java b/src/main/java/org/sablecc/sablecc/node/PSpecifier.java
index 39fc6267212ab15aa372725b0867cca14da46a45..ded4e7da3bfcffa9d05dddad0134a000c9dc3de8 100644
--- a/src/main/java/org/sablecc/sablecc/node/PSpecifier.java
+++ b/src/main/java/org/sablecc/sablecc/node/PSpecifier.java
@@ -7,11 +7,6 @@ public abstract class PSpecifier extends Node
     public PSpecifier()
     {}
 
-    public PSpecifier(PSpecifier node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PSpecifier clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PStateList.java b/src/main/java/org/sablecc/sablecc/node/PStateList.java
index b8509d11053b69d32c20260b72b11cb4af5e9d2d..42a20d56da71d12c7dd7f5bf65d3445eff0879a8 100644
--- a/src/main/java/org/sablecc/sablecc/node/PStateList.java
+++ b/src/main/java/org/sablecc/sablecc/node/PStateList.java
@@ -7,11 +7,6 @@ public abstract class PStateList extends Node
     public PStateList()
     {}
 
-    public PStateList(PStateList node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PStateList clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PStateListTail.java b/src/main/java/org/sablecc/sablecc/node/PStateListTail.java
index 3968b1082c1f172e094d050aea9c395ceea9be7a..efe93dfa741c6349f4093a46554a7756511a76d6 100644
--- a/src/main/java/org/sablecc/sablecc/node/PStateListTail.java
+++ b/src/main/java/org/sablecc/sablecc/node/PStateListTail.java
@@ -7,11 +7,6 @@ public abstract class PStateListTail extends Node
     public PStateListTail()
     {}
 
-    public PStateListTail(PStateListTail node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PStateListTail clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PStates.java b/src/main/java/org/sablecc/sablecc/node/PStates.java
index c0f22d478a1f94a32d4197f128defd220ab886fe..d0e1df0d189d06a5504d9b8785c58538efe5ad92 100644
--- a/src/main/java/org/sablecc/sablecc/node/PStates.java
+++ b/src/main/java/org/sablecc/sablecc/node/PStates.java
@@ -7,11 +7,6 @@ public abstract class PStates extends Node
     public PStates()
     {}
 
-    public PStates(PStates node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PStates clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PTerm.java b/src/main/java/org/sablecc/sablecc/node/PTerm.java
index e3e93730dcc61b39ac3fa36b010370dca07f8e4f..cef531ebece54066edc765544cd10a68eaca2e88 100644
--- a/src/main/java/org/sablecc/sablecc/node/PTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/PTerm.java
@@ -7,11 +7,6 @@ public abstract class PTerm extends Node
     public PTerm()
     {}
 
-    public PTerm(PTerm node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PTerm clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PTokenDef.java b/src/main/java/org/sablecc/sablecc/node/PTokenDef.java
index 783f7429f527e3eedcf317914e7b161f270ee6a2..b5d33a2875891d85c22f0b33af8617b359bb9a70 100644
--- a/src/main/java/org/sablecc/sablecc/node/PTokenDef.java
+++ b/src/main/java/org/sablecc/sablecc/node/PTokenDef.java
@@ -7,11 +7,6 @@ public abstract class PTokenDef extends Node
     public PTokenDef()
     {}
 
-    public PTokenDef(PTokenDef node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PTokenDef clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PTokens.java b/src/main/java/org/sablecc/sablecc/node/PTokens.java
index d0b4af8c15e5b50afc3796e6d741b82361346bb3..bf5b1007e15bed318aeead1f49dcb7fab01d2b81 100644
--- a/src/main/java/org/sablecc/sablecc/node/PTokens.java
+++ b/src/main/java/org/sablecc/sablecc/node/PTokens.java
@@ -7,11 +7,6 @@ public abstract class PTokens extends Node
     public PTokens()
     {}
 
-    public PTokens(PTokens node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PTokens clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PTransition.java b/src/main/java/org/sablecc/sablecc/node/PTransition.java
index d8b166d4d497dbacadd8f8227dfb0788a3d1b68d..a03a228450fd9c0832ccbebfae46daeec446d082 100644
--- a/src/main/java/org/sablecc/sablecc/node/PTransition.java
+++ b/src/main/java/org/sablecc/sablecc/node/PTransition.java
@@ -7,11 +7,6 @@ public abstract class PTransition extends Node
     public PTransition()
     {}
 
-    public PTransition(PTransition node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PTransition clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PUnExp.java b/src/main/java/org/sablecc/sablecc/node/PUnExp.java
index 28f0cbadbcaa0433cdd6501c21abaeab6d660806..202c34923d65959d29d2c498596e4f0732169d4d 100644
--- a/src/main/java/org/sablecc/sablecc/node/PUnExp.java
+++ b/src/main/java/org/sablecc/sablecc/node/PUnExp.java
@@ -7,11 +7,6 @@ public abstract class PUnExp extends Node
     public PUnExp()
     {}
 
-    public PUnExp(PUnExp node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PUnExp clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PUnOp.java b/src/main/java/org/sablecc/sablecc/node/PUnOp.java
index fc09a3313178fcab10351741575164f30ca6bfe3..8df12aa95d50dd318c033a493cc1caa55486a54d 100644
--- a/src/main/java/org/sablecc/sablecc/node/PUnOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/PUnOp.java
@@ -7,11 +7,6 @@ public abstract class PUnOp extends Node
     public PUnOp()
     {}
 
-    public PUnOp(PUnOp node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PUnOp clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/Start.java b/src/main/java/org/sablecc/sablecc/node/Start.java
index 751cb6f4ecd20d226a1d28f993d4b4846325ee64..a94f2e8a8b6e7a45b88077c3923a9411856f5ed8 100644
--- a/src/main/java/org/sablecc/sablecc/node/Start.java
+++ b/src/main/java/org/sablecc/sablecc/node/Start.java
@@ -20,17 +20,14 @@ public final class Start extends Node
         setEOF(_eof_);
     }
 
-    public Start(Start node)
-    {
-        super(node);
-        setPGrammar(cloneNode(node._pGrammar_));
-        setEOF(cloneNode(node._eof_));
-    }
-
     @Override
     public Start clone()
     {
-        return new Start(this);
+        Start cloned = new Start();
+        cloned.setPGrammar(cloneNode(this._pGrammar_));
+        cloned.setEOF(cloneNode(this._eof_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TAbstract.java b/src/main/java/org/sablecc/sablecc/node/TAbstract.java
index ba9a91097dae626ad254bf4d4e5d9b7f11885fa6..9eb16f496b73be1c2112d0ecde65cce6c5ee6708 100644
--- a/src/main/java/org/sablecc/sablecc/node/TAbstract.java
+++ b/src/main/java/org/sablecc/sablecc/node/TAbstract.java
@@ -16,15 +16,12 @@ public final class TAbstract extends Token
         super("Abstract", line, pos);
     }
 
-    public TAbstract(TAbstract token)
-    {
-        super(token);
-    }
-
     @Override
     public TAbstract clone()
     {
-        return new TAbstract(this);
+        TAbstract cloned = new TAbstract(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TArrow.java b/src/main/java/org/sablecc/sablecc/node/TArrow.java
index 9a2221108eff3e2ff7d6c4408d976f51f442fdb5..e57d2dd6b135339e5c1414ba5cf9b1a81ad535ec 100644
--- a/src/main/java/org/sablecc/sablecc/node/TArrow.java
+++ b/src/main/java/org/sablecc/sablecc/node/TArrow.java
@@ -16,15 +16,12 @@ public final class TArrow extends Token
         super("->", line, pos);
     }
 
-    public TArrow(TArrow token)
-    {
-        super(token);
-    }
-
     @Override
     public TArrow clone()
     {
-        return new TArrow(this);
+        TArrow cloned = new TArrow(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TBar.java b/src/main/java/org/sablecc/sablecc/node/TBar.java
index 36d967f0f6ad392ed88026d04571a2e369b8b088..a8a646b8010f150f66a951a296cdecfccc669060 100644
--- a/src/main/java/org/sablecc/sablecc/node/TBar.java
+++ b/src/main/java/org/sablecc/sablecc/node/TBar.java
@@ -16,15 +16,12 @@ public final class TBar extends Token
         super("|", line, pos);
     }
 
-    public TBar(TBar token)
-    {
-        super(token);
-    }
-
     @Override
     public TBar clone()
     {
-        return new TBar(this);
+        TBar cloned = new TBar(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TBlank.java b/src/main/java/org/sablecc/sablecc/node/TBlank.java
index de51cb91f026c3706c08738e36dad023cca4f31c..c5d52b6e2605dd4fbf2e17cc551bbf048b3a7c89 100644
--- a/src/main/java/org/sablecc/sablecc/node/TBlank.java
+++ b/src/main/java/org/sablecc/sablecc/node/TBlank.java
@@ -16,15 +16,12 @@ public final class TBlank extends Token
         super(text, line, pos);
     }
 
-    public TBlank(TBlank token)
-    {
-        super(token);
-    }
-
     @Override
     public TBlank clone()
     {
-        return new TBlank(this);
+        TBlank cloned = new TBlank(this.getText(), this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TChar.java b/src/main/java/org/sablecc/sablecc/node/TChar.java
index aecb775ca04dbf1cb0fa709c0c80c37adbdd289e..1a7cef393bf415bf4fd60aaad4ec69eee7b5e81f 100644
--- a/src/main/java/org/sablecc/sablecc/node/TChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/TChar.java
@@ -16,15 +16,12 @@ public final class TChar extends Token
         super(text, line, pos);
     }
 
-    public TChar(TChar token)
-    {
-        super(token);
-    }
-
     @Override
     public TChar clone()
     {
-        return new TChar(this);
+        TChar cloned = new TChar(this.getText(), this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TColon.java b/src/main/java/org/sablecc/sablecc/node/TColon.java
index 76e6ae69214ea2345d1683deb945ac071769d75f..34eb313cc71856ddeb66e141b1123924f9e01008 100644
--- a/src/main/java/org/sablecc/sablecc/node/TColon.java
+++ b/src/main/java/org/sablecc/sablecc/node/TColon.java
@@ -16,15 +16,12 @@ public final class TColon extends Token
         super(":", line, pos);
     }
 
-    public TColon(TColon token)
-    {
-        super(token);
-    }
-
     @Override
     public TColon clone()
     {
-        return new TColon(this);
+        TColon cloned = new TColon(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TComma.java b/src/main/java/org/sablecc/sablecc/node/TComma.java
index 485b422a4c9a088306c527ebaab3286e13c1a010..2f21c7deaf81ac39132a6b0b76b9776bb4995a9e 100644
--- a/src/main/java/org/sablecc/sablecc/node/TComma.java
+++ b/src/main/java/org/sablecc/sablecc/node/TComma.java
@@ -16,15 +16,12 @@ public final class TComma extends Token
         super(",", line, pos);
     }
 
-    public TComma(TComma token)
-    {
-        super(token);
-    }
-
     @Override
     public TComma clone()
     {
-        return new TComma(this);
+        TComma cloned = new TComma(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TComment.java b/src/main/java/org/sablecc/sablecc/node/TComment.java
index 9f9f1a52e64a25d5f27e6d676d6c53908a02f3eb..106474b5d9682aec5334d8464f74f1b822a7326e 100644
--- a/src/main/java/org/sablecc/sablecc/node/TComment.java
+++ b/src/main/java/org/sablecc/sablecc/node/TComment.java
@@ -16,15 +16,12 @@ public final class TComment extends Token
         super(text, line, pos);
     }
 
-    public TComment(TComment token)
-    {
-        super(token);
-    }
-
     @Override
     public TComment clone()
     {
-        return new TComment(this);
+        TComment cloned = new TComment(this.getText(), this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TDDot.java b/src/main/java/org/sablecc/sablecc/node/TDDot.java
index 0c2dd1f54cec3ca9429da62499093792f12fcec5..a3651ae666355bd895b42ec5aae0aa35d6f9907e 100644
--- a/src/main/java/org/sablecc/sablecc/node/TDDot.java
+++ b/src/main/java/org/sablecc/sablecc/node/TDDot.java
@@ -16,15 +16,12 @@ public final class TDDot extends Token
         super("..", line, pos);
     }
 
-    public TDDot(TDDot token)
-    {
-        super(token);
-    }
-
     @Override
     public TDDot clone()
     {
-        return new TDDot(this);
+        TDDot cloned = new TDDot(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TDecChar.java b/src/main/java/org/sablecc/sablecc/node/TDecChar.java
index 22104e3f91115ac6cb8f78933abdab1619c149dd..5e7204f20585ff8018dad961cccb4102a63c1094 100644
--- a/src/main/java/org/sablecc/sablecc/node/TDecChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/TDecChar.java
@@ -16,15 +16,12 @@ public final class TDecChar extends Token
         super(text, line, pos);
     }
 
-    public TDecChar(TDecChar token)
-    {
-        super(token);
-    }
-
     @Override
     public TDecChar clone()
     {
-        return new TDecChar(this);
+        TDecChar cloned = new TDecChar(this.getText(), this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TDot.java b/src/main/java/org/sablecc/sablecc/node/TDot.java
index 394e43fad398c48a2557843d1629672b62febd73..fae4247bc794ea0a10ed0e728e0b3363ada8a34b 100644
--- a/src/main/java/org/sablecc/sablecc/node/TDot.java
+++ b/src/main/java/org/sablecc/sablecc/node/TDot.java
@@ -16,15 +16,12 @@ public final class TDot extends Token
         super(".", line, pos);
     }
 
-    public TDot(TDot token)
-    {
-        super(token);
-    }
-
     @Override
     public TDot clone()
     {
-        return new TDot(this);
+        TDot cloned = new TDot(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TEqual.java b/src/main/java/org/sablecc/sablecc/node/TEqual.java
index c5b4c7c7ebfacb1cfb3fe71b159263b20eb0ad58..ae88febdc0b362698448d20da1cab3c8a126fcad 100644
--- a/src/main/java/org/sablecc/sablecc/node/TEqual.java
+++ b/src/main/java/org/sablecc/sablecc/node/TEqual.java
@@ -16,15 +16,12 @@ public final class TEqual extends Token
         super("=", line, pos);
     }
 
-    public TEqual(TEqual token)
-    {
-        super(token);
-    }
-
     @Override
     public TEqual clone()
     {
-        return new TEqual(this);
+        TEqual cloned = new TEqual(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/THelpers.java b/src/main/java/org/sablecc/sablecc/node/THelpers.java
index 27b296643b6d1d6a265ce6c282a7eaf899f833e5..9f75a089a0a0d873551a9444d7096eb8692aae06 100644
--- a/src/main/java/org/sablecc/sablecc/node/THelpers.java
+++ b/src/main/java/org/sablecc/sablecc/node/THelpers.java
@@ -16,15 +16,12 @@ public final class THelpers extends Token
         super("Helpers", line, pos);
     }
 
-    public THelpers(THelpers token)
-    {
-        super(token);
-    }
-
     @Override
     public THelpers clone()
     {
-        return new THelpers(this);
+        THelpers cloned = new THelpers(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/THexChar.java b/src/main/java/org/sablecc/sablecc/node/THexChar.java
index 2b09dc0d88ab19560397df0b41dbfab78b8c5ccc..3f1273f41fd65646feb9e9602d7380e73c6b8e9b 100644
--- a/src/main/java/org/sablecc/sablecc/node/THexChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/THexChar.java
@@ -16,15 +16,12 @@ public final class THexChar extends Token
         super(text, line, pos);
     }
 
-    public THexChar(THexChar token)
-    {
-        super(token);
-    }
-
     @Override
     public THexChar clone()
     {
-        return new THexChar(this);
+        THexChar cloned = new THexChar(this.getText(), this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TId.java b/src/main/java/org/sablecc/sablecc/node/TId.java
index 4323e68cb24f7454b0efae7c78019c850a5a2ea7..1919e4978152707e08d2cb93ba45578a5b7211e0 100644
--- a/src/main/java/org/sablecc/sablecc/node/TId.java
+++ b/src/main/java/org/sablecc/sablecc/node/TId.java
@@ -16,15 +16,12 @@ public final class TId extends Token
         super(text, line, pos);
     }
 
-    public TId(TId token)
-    {
-        super(token);
-    }
-
     @Override
     public TId clone()
     {
-        return new TId(this);
+        TId cloned = new TId(this.getText(), this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TIgnored.java b/src/main/java/org/sablecc/sablecc/node/TIgnored.java
index 3512dee9b0c0362c7c73071d6776b4aa7d20b318..17d14137992fa72c501c48dd8524abc4d523a051 100644
--- a/src/main/java/org/sablecc/sablecc/node/TIgnored.java
+++ b/src/main/java/org/sablecc/sablecc/node/TIgnored.java
@@ -16,15 +16,12 @@ public final class TIgnored extends Token
         super("Ignored", line, pos);
     }
 
-    public TIgnored(TIgnored token)
-    {
-        super(token);
-    }
-
     @Override
     public TIgnored clone()
     {
-        return new TIgnored(this);
+        TIgnored cloned = new TIgnored(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TLBkt.java b/src/main/java/org/sablecc/sablecc/node/TLBkt.java
index 8e5a83766b396eb6532f5fc8d0f6f8a0c97fb9b2..831576ba0ce398a9809a4fc9b2e6da40ebe26fde 100644
--- a/src/main/java/org/sablecc/sablecc/node/TLBkt.java
+++ b/src/main/java/org/sablecc/sablecc/node/TLBkt.java
@@ -16,15 +16,12 @@ public final class TLBkt extends Token
         super("[", line, pos);
     }
 
-    public TLBkt(TLBkt token)
-    {
-        super(token);
-    }
-
     @Override
     public TLBkt clone()
     {
-        return new TLBkt(this);
+        TLBkt cloned = new TLBkt(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TLBrace.java b/src/main/java/org/sablecc/sablecc/node/TLBrace.java
index a3dcb1575de2416c633b7d8db73928ab2aa42c47..0647fe873bc8d00def4dc94468e17a3806b50040 100644
--- a/src/main/java/org/sablecc/sablecc/node/TLBrace.java
+++ b/src/main/java/org/sablecc/sablecc/node/TLBrace.java
@@ -16,15 +16,12 @@ public final class TLBrace extends Token
         super("{", line, pos);
     }
 
-    public TLBrace(TLBrace token)
-    {
-        super(token);
-    }
-
     @Override
     public TLBrace clone()
     {
-        return new TLBrace(this);
+        TLBrace cloned = new TLBrace(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TLPar.java b/src/main/java/org/sablecc/sablecc/node/TLPar.java
index 8ba1e87a8b3fa02e5c843ad25c5ce11c91ab1b14..3f4c1abf01f459059c288c4962c3ec67d0ff7916 100644
--- a/src/main/java/org/sablecc/sablecc/node/TLPar.java
+++ b/src/main/java/org/sablecc/sablecc/node/TLPar.java
@@ -16,15 +16,12 @@ public final class TLPar extends Token
         super("(", line, pos);
     }
 
-    public TLPar(TLPar token)
-    {
-        super(token);
-    }
-
     @Override
     public TLPar clone()
     {
-        return new TLPar(this);
+        TLPar cloned = new TLPar(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TMinus.java b/src/main/java/org/sablecc/sablecc/node/TMinus.java
index 044d65cb72357e26aff5acb55e533c398e16b61e..65589eee518ba65d7446b79b33468a99dd7016b3 100644
--- a/src/main/java/org/sablecc/sablecc/node/TMinus.java
+++ b/src/main/java/org/sablecc/sablecc/node/TMinus.java
@@ -16,15 +16,12 @@ public final class TMinus extends Token
         super("-", line, pos);
     }
 
-    public TMinus(TMinus token)
-    {
-        super(token);
-    }
-
     @Override
     public TMinus clone()
     {
-        return new TMinus(this);
+        TMinus cloned = new TMinus(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TNew.java b/src/main/java/org/sablecc/sablecc/node/TNew.java
index fcbcd3051c396bbedb10d79dcaeeba73e9f77c2b..38dff6e096eb919b51843e5d523613451766713e 100644
--- a/src/main/java/org/sablecc/sablecc/node/TNew.java
+++ b/src/main/java/org/sablecc/sablecc/node/TNew.java
@@ -16,15 +16,12 @@ public final class TNew extends Token
         super("New", line, pos);
     }
 
-    public TNew(TNew token)
-    {
-        super(token);
-    }
-
     @Override
     public TNew clone()
     {
-        return new TNew(this);
+        TNew cloned = new TNew(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TNull.java b/src/main/java/org/sablecc/sablecc/node/TNull.java
index 47800bb7583b204c45f4d5bca5239993d1678724..16042a48ef03f5f128d775b37913810296d71019 100644
--- a/src/main/java/org/sablecc/sablecc/node/TNull.java
+++ b/src/main/java/org/sablecc/sablecc/node/TNull.java
@@ -16,15 +16,12 @@ public final class TNull extends Token
         super("Null", line, pos);
     }
 
-    public TNull(TNull token)
-    {
-        super(token);
-    }
-
     @Override
     public TNull clone()
     {
-        return new TNull(this);
+        TNull cloned = new TNull(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TPackage.java b/src/main/java/org/sablecc/sablecc/node/TPackage.java
index b2854d6dd99d1a3fc4ca87afcb3917aa14a52a5e..4b9ebe82436d33e36acd9f14334719d26a3ffb72 100644
--- a/src/main/java/org/sablecc/sablecc/node/TPackage.java
+++ b/src/main/java/org/sablecc/sablecc/node/TPackage.java
@@ -16,15 +16,12 @@ public final class TPackage extends Token
         super("Package", line, pos);
     }
 
-    public TPackage(TPackage token)
-    {
-        super(token);
-    }
-
     @Override
     public TPackage clone()
     {
-        return new TPackage(this);
+        TPackage cloned = new TPackage(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TPkgId.java b/src/main/java/org/sablecc/sablecc/node/TPkgId.java
index 63fd17a18c15cba74a84fd15acf5fb0993984f36..f156efe8ea8f4b4e1e491d1ddd8be87b929f45c9 100644
--- a/src/main/java/org/sablecc/sablecc/node/TPkgId.java
+++ b/src/main/java/org/sablecc/sablecc/node/TPkgId.java
@@ -16,15 +16,12 @@ public final class TPkgId extends Token
         super(text, line, pos);
     }
 
-    public TPkgId(TPkgId token)
-    {
-        super(token);
-    }
-
     @Override
     public TPkgId clone()
     {
-        return new TPkgId(this);
+        TPkgId cloned = new TPkgId(this.getText(), this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TPlus.java b/src/main/java/org/sablecc/sablecc/node/TPlus.java
index 5098ea0560ef1e54035439e42cf132fcb4afcc76..e12da0e1da7d34660aec1dcd49f4d6771cd1d829 100644
--- a/src/main/java/org/sablecc/sablecc/node/TPlus.java
+++ b/src/main/java/org/sablecc/sablecc/node/TPlus.java
@@ -16,15 +16,12 @@ public final class TPlus extends Token
         super("+", line, pos);
     }
 
-    public TPlus(TPlus token)
-    {
-        super(token);
-    }
-
     @Override
     public TPlus clone()
     {
-        return new TPlus(this);
+        TPlus cloned = new TPlus(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TProductionSpecifier.java b/src/main/java/org/sablecc/sablecc/node/TProductionSpecifier.java
index 35a585fa6be8e2e87fc5f860682ba4b287f3b1ef..e8a1615654d92c748326fb225597e24a30df5495 100644
--- a/src/main/java/org/sablecc/sablecc/node/TProductionSpecifier.java
+++ b/src/main/java/org/sablecc/sablecc/node/TProductionSpecifier.java
@@ -16,15 +16,12 @@ public final class TProductionSpecifier extends Token
         super("P", line, pos);
     }
 
-    public TProductionSpecifier(TProductionSpecifier token)
-    {
-        super(token);
-    }
-
     @Override
     public TProductionSpecifier clone()
     {
-        return new TProductionSpecifier(this);
+        TProductionSpecifier cloned = new TProductionSpecifier(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TProductions.java b/src/main/java/org/sablecc/sablecc/node/TProductions.java
index 7f402c305d92a37de0e92f4eabe7fb87c7626215..246be7f46335b9fed24ff75d307df647f4dce0fc 100644
--- a/src/main/java/org/sablecc/sablecc/node/TProductions.java
+++ b/src/main/java/org/sablecc/sablecc/node/TProductions.java
@@ -16,15 +16,12 @@ public final class TProductions extends Token
         super("Productions", line, pos);
     }
 
-    public TProductions(TProductions token)
-    {
-        super(token);
-    }
-
     @Override
     public TProductions clone()
     {
-        return new TProductions(this);
+        TProductions cloned = new TProductions(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TQMark.java b/src/main/java/org/sablecc/sablecc/node/TQMark.java
index aebf492424c824f49c0e2c0d80dc133174d7d1e1..76b9f4de3cf8817d82a8149fde75f5c3a275d0ec 100644
--- a/src/main/java/org/sablecc/sablecc/node/TQMark.java
+++ b/src/main/java/org/sablecc/sablecc/node/TQMark.java
@@ -16,15 +16,12 @@ public final class TQMark extends Token
         super("?", line, pos);
     }
 
-    public TQMark(TQMark token)
-    {
-        super(token);
-    }
-
     @Override
     public TQMark clone()
     {
-        return new TQMark(this);
+        TQMark cloned = new TQMark(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TRBkt.java b/src/main/java/org/sablecc/sablecc/node/TRBkt.java
index 30552da69e821b2614bd4c7e1ca175c4aeac9f2e..83aafaa438825a05ea64f493fb7df2a50eb9993e 100644
--- a/src/main/java/org/sablecc/sablecc/node/TRBkt.java
+++ b/src/main/java/org/sablecc/sablecc/node/TRBkt.java
@@ -16,15 +16,12 @@ public final class TRBkt extends Token
         super("]", line, pos);
     }
 
-    public TRBkt(TRBkt token)
-    {
-        super(token);
-    }
-
     @Override
     public TRBkt clone()
     {
-        return new TRBkt(this);
+        TRBkt cloned = new TRBkt(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TRBrace.java b/src/main/java/org/sablecc/sablecc/node/TRBrace.java
index 04be2a1ce6914e3e527354e4998b865d82334a22..79868e287da33dd98c3d54fdc937a4ac2d564c4b 100644
--- a/src/main/java/org/sablecc/sablecc/node/TRBrace.java
+++ b/src/main/java/org/sablecc/sablecc/node/TRBrace.java
@@ -16,15 +16,12 @@ public final class TRBrace extends Token
         super("}", line, pos);
     }
 
-    public TRBrace(TRBrace token)
-    {
-        super(token);
-    }
-
     @Override
     public TRBrace clone()
     {
-        return new TRBrace(this);
+        TRBrace cloned = new TRBrace(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TRPar.java b/src/main/java/org/sablecc/sablecc/node/TRPar.java
index c797774a6b97505a112fcae761b2c370b85d0253..84445c248be9b23111d50f5208148c955aff3323 100644
--- a/src/main/java/org/sablecc/sablecc/node/TRPar.java
+++ b/src/main/java/org/sablecc/sablecc/node/TRPar.java
@@ -16,15 +16,12 @@ public final class TRPar extends Token
         super(")", line, pos);
     }
 
-    public TRPar(TRPar token)
-    {
-        super(token);
-    }
-
     @Override
     public TRPar clone()
     {
-        return new TRPar(this);
+        TRPar cloned = new TRPar(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TSemicolon.java b/src/main/java/org/sablecc/sablecc/node/TSemicolon.java
index 144ab07845bd29b7997b497c862c3b5eaecfa03f..92ebc8406dc51db50101dd54ae0246661dca3162 100644
--- a/src/main/java/org/sablecc/sablecc/node/TSemicolon.java
+++ b/src/main/java/org/sablecc/sablecc/node/TSemicolon.java
@@ -16,15 +16,12 @@ public final class TSemicolon extends Token
         super(";", line, pos);
     }
 
-    public TSemicolon(TSemicolon token)
-    {
-        super(token);
-    }
-
     @Override
     public TSemicolon clone()
     {
-        return new TSemicolon(this);
+        TSemicolon cloned = new TSemicolon(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TSlash.java b/src/main/java/org/sablecc/sablecc/node/TSlash.java
index 6b2fd73cabe1766d0ed39edc1709bf805171707e..91eccb84701cb02d1da835514a12b5c0fc7ffc8c 100644
--- a/src/main/java/org/sablecc/sablecc/node/TSlash.java
+++ b/src/main/java/org/sablecc/sablecc/node/TSlash.java
@@ -16,15 +16,12 @@ public final class TSlash extends Token
         super("/", line, pos);
     }
 
-    public TSlash(TSlash token)
-    {
-        super(token);
-    }
-
     @Override
     public TSlash clone()
     {
-        return new TSlash(this);
+        TSlash cloned = new TSlash(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TStar.java b/src/main/java/org/sablecc/sablecc/node/TStar.java
index c6835917372b09655346de4ac99dcb25049a9e9a..951f1b255771c30df51e2cab3833670375f27a60 100644
--- a/src/main/java/org/sablecc/sablecc/node/TStar.java
+++ b/src/main/java/org/sablecc/sablecc/node/TStar.java
@@ -16,15 +16,12 @@ public final class TStar extends Token
         super("*", line, pos);
     }
 
-    public TStar(TStar token)
-    {
-        super(token);
-    }
-
     @Override
     public TStar clone()
     {
-        return new TStar(this);
+        TStar cloned = new TStar(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TStates.java b/src/main/java/org/sablecc/sablecc/node/TStates.java
index 45a75a7d67ae34613f9fef0e7097ae668e90b4b2..44c82ac9378589fdd3a3add9b976814742068e9c 100644
--- a/src/main/java/org/sablecc/sablecc/node/TStates.java
+++ b/src/main/java/org/sablecc/sablecc/node/TStates.java
@@ -16,15 +16,12 @@ public final class TStates extends Token
         super("States", line, pos);
     }
 
-    public TStates(TStates token)
-    {
-        super(token);
-    }
-
     @Override
     public TStates clone()
     {
-        return new TStates(this);
+        TStates cloned = new TStates(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TString.java b/src/main/java/org/sablecc/sablecc/node/TString.java
index 452162ec67d17fcc5919c4dcf653914157854a8f..c48a3a0fae5f8f460827a6901220925ada1244c0 100644
--- a/src/main/java/org/sablecc/sablecc/node/TString.java
+++ b/src/main/java/org/sablecc/sablecc/node/TString.java
@@ -16,15 +16,12 @@ public final class TString extends Token
         super(text, line, pos);
     }
 
-    public TString(TString token)
-    {
-        super(token);
-    }
-
     @Override
     public TString clone()
     {
-        return new TString(this);
+        TString cloned = new TString(this.getText(), this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TSyntax.java b/src/main/java/org/sablecc/sablecc/node/TSyntax.java
index 4e7340f7cc74d3296083ecbf6b18d32ed6c93df2..daa350432ef75c511972a90908ffebed322ed91c 100644
--- a/src/main/java/org/sablecc/sablecc/node/TSyntax.java
+++ b/src/main/java/org/sablecc/sablecc/node/TSyntax.java
@@ -16,15 +16,12 @@ public final class TSyntax extends Token
         super("Syntax", line, pos);
     }
 
-    public TSyntax(TSyntax token)
-    {
-        super(token);
-    }
-
     @Override
     public TSyntax clone()
     {
-        return new TSyntax(this);
+        TSyntax cloned = new TSyntax(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TTokenSpecifier.java b/src/main/java/org/sablecc/sablecc/node/TTokenSpecifier.java
index b37b101e402c4fa9ab8c59732cbdebfbf3d63945..c58dcb73a6f8a9b5378e11818cc10575d6e14d12 100644
--- a/src/main/java/org/sablecc/sablecc/node/TTokenSpecifier.java
+++ b/src/main/java/org/sablecc/sablecc/node/TTokenSpecifier.java
@@ -16,15 +16,12 @@ public final class TTokenSpecifier extends Token
         super("T", line, pos);
     }
 
-    public TTokenSpecifier(TTokenSpecifier token)
-    {
-        super(token);
-    }
-
     @Override
     public TTokenSpecifier clone()
     {
-        return new TTokenSpecifier(this);
+        TTokenSpecifier cloned = new TTokenSpecifier(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TTokens.java b/src/main/java/org/sablecc/sablecc/node/TTokens.java
index fac6c7a7fa5c7d2d5aa8fe141bfe7efc54438817..3234e79c24c62116f5cc51fb10750aaf2b392db1 100644
--- a/src/main/java/org/sablecc/sablecc/node/TTokens.java
+++ b/src/main/java/org/sablecc/sablecc/node/TTokens.java
@@ -16,15 +16,12 @@ public final class TTokens extends Token
         super("Tokens", line, pos);
     }
 
-    public TTokens(TTokens token)
-    {
-        super(token);
-    }
-
     @Override
     public TTokens clone()
     {
-        return new TTokens(this);
+        TTokens cloned = new TTokens(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TTree.java b/src/main/java/org/sablecc/sablecc/node/TTree.java
index 91100d31f153e753b65ce43dc2265debaae123a4..e101e4436b7d520e7d3fdfdec613ebf38404d1a0 100644
--- a/src/main/java/org/sablecc/sablecc/node/TTree.java
+++ b/src/main/java/org/sablecc/sablecc/node/TTree.java
@@ -16,15 +16,12 @@ public final class TTree extends Token
         super("Tree", line, pos);
     }
 
-    public TTree(TTree token)
-    {
-        super(token);
-    }
-
     @Override
     public TTree clone()
     {
-        return new TTree(this);
+        TTree cloned = new TTree(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/Token.java b/src/main/java/org/sablecc/sablecc/node/Token.java
index 628077f9e1f2c706c0bbed22a466a799d2ed5686..57c3cfd55b40363029079cf661b73b7a4a59694b 100644
--- a/src/main/java/org/sablecc/sablecc/node/Token.java
+++ b/src/main/java/org/sablecc/sablecc/node/Token.java
@@ -25,15 +25,7 @@ public abstract class Token extends Node implements IToken
 
     protected Token()
     {
-        this((String)null);
-    }
-
-    protected Token(Token token)
-    {
-        super(token);
-        this.text = token.text;
-        this.line = token.line;
-        this.pos = token.pos;
+        this(null);
     }
 
     @Override
diff --git a/src/main/resources/org/sablecc/sablecc/alternatives.txt b/src/main/resources/org/sablecc/sablecc/alternatives.txt
index 3dd2fc3dd641175b3d656a986e8061e7c53bc785..bb0c56f326b075e9b9af24c33eb88fcc42349e39 100644
--- a/src/main/resources/org/sablecc/sablecc/alternatives.txt
+++ b/src/main/resources/org/sablecc/sablecc/alternatives.txt
@@ -79,29 +79,26 @@ $
 
 Macro:CloneHeader
 
-    public $0$($0$ node)
+    @Override
+    public $0$ clone()
     {
-        super(node);
+        $0$ cloned = new $0$();
 
 $
 
 Macro:CloneBodyNode
-        set$0$(cloneNode(node._$1$_));
+        cloned.set$0$(cloneNode(this._$1$_));
 
 $
 
 Macro:CloneBodyList
-        set$0$(cloneList(node._$1$_));
+        cloned.set$0$(cloneList(this._$1$_));
 
 $
 
 Macro:CloneTail
-    }
-
-    @Override
-    public $0$ clone()
-    {
-        return new $0$(this);
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
 $
diff --git a/src/main/resources/org/sablecc/sablecc/productions.txt b/src/main/resources/org/sablecc/sablecc/productions.txt
index 2957990e5c297ab2e0b5dbcb18131f2eaf47b8eb..fc8415741dd9d8621ca9325ff06130c9d4493c6e 100644
--- a/src/main/resources/org/sablecc/sablecc/productions.txt
+++ b/src/main/resources/org/sablecc/sablecc/productions.txt
@@ -15,11 +15,6 @@ public abstract class $1$ extends Node
     public $1$()
     {}
 
-    public $1$($1$ node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract $1$ clone();
 }
diff --git a/src/main/resources/org/sablecc/sablecc/tokens.txt b/src/main/resources/org/sablecc/sablecc/tokens.txt
index ce4cfbc9f63af4e19bf0140f6e7030a1b4421c31..4cf4f70ca935e22abc2ab7a15415e3ed1ff14fd4 100644
--- a/src/main/resources/org/sablecc/sablecc/tokens.txt
+++ b/src/main/resources/org/sablecc/sablecc/tokens.txt
@@ -24,15 +24,12 @@ public final class $1$ extends Token
         super(text, line, pos);
     }
 
-    public $1$($1$ token)
-    {
-        super(token);
-    }
-
     @Override
     public $1$ clone()
     {
-        return new $1$(this);
+        $1$ cloned = new $1$(this.getText(), this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
@@ -63,15 +60,12 @@ public final class $1$ extends Token
         super("$2$", line, pos);
     }
 
-    public $1$($1$ token)
-    {
-        super(token);
-    }
-
     @Override
     public $1$ clone()
     {
-        return new $1$(this);
+        $1$ cloned = new $1$(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/resources/org/sablecc/sablecc/utils.txt b/src/main/resources/org/sablecc/sablecc/utils.txt
index b66f88376cef6ea262174bdc08c20777d2427173..81ccc43e083c69fecfe5ff74866aa50a12c7bc60 100644
--- a/src/main/resources/org/sablecc/sablecc/utils.txt
+++ b/src/main/resources/org/sablecc/sablecc/utils.txt
@@ -28,17 +28,14 @@ public final class Start extends Node
         setEOF(_eof_);
     }
 
-    public Start(Start node)
-    {
-        super(node);
-        set$1$(cloneNode(node._$2$_));
-        setEOF(cloneNode(node._eof_));
-    }
-
     @Override
     public Start clone()
     {
-        return new Start(this);
+        Start cloned = new Start();
+        cloned.set$1$(cloneNode(this._$2$_));
+        cloned.setEOF(cloneNode(this._eof_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
@@ -163,15 +160,12 @@ public final class EOF extends Token
         super("", line, pos);
     }
 
-    public EOF(EOF token)
-    {
-        super(token);
-    }
-
     @Override
     public EOF clone()
     {
-        return new EOF(this);
+        EOF cloned = new EOF(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
@@ -211,15 +205,7 @@ public abstract class Token extends Node implements IToken
 
     protected Token()
     {
-        this((String)null);
-    }
-
-    protected Token(Token token)
-    {
-        super(token);
-        this.text = token.text;
-        this.line = token.line;
-        this.pos = token.pos;
+        this(null);
     }
 
     @Override
@@ -334,14 +320,8 @@ public abstract class Node extends PositionedNode implements Switchable, Cloneab
     protected Node()
     {}
 
-    protected Node(Node node)
-    {
-        super(node);
-        // Copy constructor intentionally does not keep parent!
-        // The new copied node is not a child of the original parent anymore.
-        this.parent = null;
-    }
-
+    // clone intentionally does not keep parent!
+    // The new copied node is not a child of the original parent anymore.
     @Override
     public abstract Node clone();