diff --git a/src/main/java/org/sablecc/sablecc/node/AAlt.java b/src/main/java/org/sablecc/sablecc/node/AAlt.java
index 7a63577aa18b9069a2f557e161ade642f671f8fa..2d7f69f7bfca5402cd6d852ec2f093a19ce53019 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAlt.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAlt.java
@@ -32,7 +32,7 @@ public final class AAlt extends PAlt
     }
 
     @Override
-    public Object clone()
+    public AAlt clone()
     {
         return new AAlt(
             cloneNode(this._altName_),
diff --git a/src/main/java/org/sablecc/sablecc/node/AAltTransform.java b/src/main/java/org/sablecc/sablecc/node/AAltTransform.java
index 8ad384ef30d0d8f430587de847c5572ffde827ae..1693edacbbd0be69d886808a33d7b7a947075e67 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAltTransform.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAltTransform.java
@@ -32,7 +32,7 @@ public final class AAltTransform extends PAltTransform
     }
 
     @Override
-    public Object clone()
+    public AAltTransform clone()
     {
         return new AAltTransform(
             cloneNode(this._lBrace_),
diff --git a/src/main/java/org/sablecc/sablecc/node/AAst.java b/src/main/java/org/sablecc/sablecc/node/AAst.java
index 4617ddb8326160e8f7173866f933c9f98b55edd4..ae6e7e338fea65d3ca0a4e300fdb4c1d6e771ca0 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAst.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAst.java
@@ -24,7 +24,7 @@ public final class AAst extends PAst
     }
 
     @Override
-    public Object clone()
+    public AAst clone()
     {
         return new AAst(
             cloneList(this._prods_));
diff --git a/src/main/java/org/sablecc/sablecc/node/AAstAlt.java b/src/main/java/org/sablecc/sablecc/node/AAstAlt.java
index b75825a8120fcd1287f1293a0108c72aaa910079..e847561751c22fd8fe0acc8e01ce358eea9bb8f7 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAstAlt.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAstAlt.java
@@ -28,7 +28,7 @@ public final class AAstAlt extends PAstAlt
     }
 
     @Override
-    public Object clone()
+    public AAstAlt clone()
     {
         return new AAstAlt(
             cloneNode(this._altName_),
diff --git a/src/main/java/org/sablecc/sablecc/node/AAstProd.java b/src/main/java/org/sablecc/sablecc/node/AAstProd.java
index 24043f0e67633ec20b629a39b5319c140e3c2afb..a261769fb665167adef68140e8f912b8037f7943 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAstProd.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAstProd.java
@@ -28,7 +28,7 @@ public final class AAstProd extends PAstProd
     }
 
     @Override
-    public Object clone()
+    public AAstProd clone()
     {
         return new AAstProd(
             cloneNode(this._id_),
diff --git a/src/main/java/org/sablecc/sablecc/node/ACharBasic.java b/src/main/java/org/sablecc/sablecc/node/ACharBasic.java
index 86b205330224f7329382555ed89986066b0a2787..c4d4d2a833e70d70517e5b098642d87124cd783d 100644
--- a/src/main/java/org/sablecc/sablecc/node/ACharBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/ACharBasic.java
@@ -23,7 +23,7 @@ public final class ACharBasic extends PBasic
     }
 
     @Override
-    public Object clone()
+    public ACharBasic clone()
     {
         return new ACharBasic(
             cloneNode(this._char_));
diff --git a/src/main/java/org/sablecc/sablecc/node/ACharChar.java b/src/main/java/org/sablecc/sablecc/node/ACharChar.java
index c303eeb87a61e1a396d381f02bfe788ceb7c6e86..37a29b80eec375183a0efc718d1ccb7974a00928 100644
--- a/src/main/java/org/sablecc/sablecc/node/ACharChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/ACharChar.java
@@ -23,7 +23,7 @@ public final class ACharChar extends PChar
     }
 
     @Override
-    public Object clone()
+    public ACharChar clone()
     {
         return new ACharChar(
             cloneNode(this._char_));
diff --git a/src/main/java/org/sablecc/sablecc/node/AConcat.java b/src/main/java/org/sablecc/sablecc/node/AConcat.java
index 46f81af8c6970206b925faec06a4f56a2fe8f714..9b5977adc3195ca853d3a6a159db8f45cdc7c13e 100644
--- a/src/main/java/org/sablecc/sablecc/node/AConcat.java
+++ b/src/main/java/org/sablecc/sablecc/node/AConcat.java
@@ -24,7 +24,7 @@ public final class AConcat extends PConcat
     }
 
     @Override
-    public Object clone()
+    public AConcat clone()
     {
         return new AConcat(
             cloneList(this._unExps_));
diff --git a/src/main/java/org/sablecc/sablecc/node/ADecChar.java b/src/main/java/org/sablecc/sablecc/node/ADecChar.java
index 1e5cf114a187e72f313ff1d634c781fa76db624b..92025a2a4e60711e7ee7386dccf7b4f8f47271b4 100644
--- a/src/main/java/org/sablecc/sablecc/node/ADecChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/ADecChar.java
@@ -23,7 +23,7 @@ public final class ADecChar extends PChar
     }
 
     @Override
-    public Object clone()
+    public ADecChar clone()
     {
         return new ADecChar(
             cloneNode(this._decChar_));
diff --git a/src/main/java/org/sablecc/sablecc/node/AElem.java b/src/main/java/org/sablecc/sablecc/node/AElem.java
index c41f85398051a18aca5d29907b949fc36c839c9d..9b1daba89a47168c07372ce8cceeb05bd2edd5f9 100644
--- a/src/main/java/org/sablecc/sablecc/node/AElem.java
+++ b/src/main/java/org/sablecc/sablecc/node/AElem.java
@@ -35,7 +35,7 @@ public final class AElem extends PElem
     }
 
     @Override
-    public Object clone()
+    public AElem clone()
     {
         return new AElem(
             cloneNode(this._elemName_),
diff --git a/src/main/java/org/sablecc/sablecc/node/AGrammar.java b/src/main/java/org/sablecc/sablecc/node/AGrammar.java
index 6ad5fd1941c41fe67f3f325944237a8e15d7e3fa..9a3c3b40ae9178415a89bf531b2c7f1908d808a2 100644
--- a/src/main/java/org/sablecc/sablecc/node/AGrammar.java
+++ b/src/main/java/org/sablecc/sablecc/node/AGrammar.java
@@ -48,7 +48,7 @@ public final class AGrammar extends PGrammar
     }
 
     @Override
-    public Object clone()
+    public AGrammar clone()
     {
         return new AGrammar(
             cloneList(this._package_),
diff --git a/src/main/java/org/sablecc/sablecc/node/AHelperDef.java b/src/main/java/org/sablecc/sablecc/node/AHelperDef.java
index 62ecf1690fdd3c1701d449f094ff1534a12a21ec..9b9a77316367539e7b75fe76bf9a0ba87a5f135b 100644
--- a/src/main/java/org/sablecc/sablecc/node/AHelperDef.java
+++ b/src/main/java/org/sablecc/sablecc/node/AHelperDef.java
@@ -27,7 +27,7 @@ public final class AHelperDef extends PHelperDef
     }
 
     @Override
-    public Object clone()
+    public AHelperDef clone()
     {
         return new AHelperDef(
             cloneNode(this._id_),
diff --git a/src/main/java/org/sablecc/sablecc/node/AHelpers.java b/src/main/java/org/sablecc/sablecc/node/AHelpers.java
index c338123836f1ae440281df0a7e97a0927c635eb1..2205d2bf25d441e48424738a95c5e4754b89fb93 100644
--- a/src/main/java/org/sablecc/sablecc/node/AHelpers.java
+++ b/src/main/java/org/sablecc/sablecc/node/AHelpers.java
@@ -24,7 +24,7 @@ public final class AHelpers extends PHelpers
     }
 
     @Override
-    public Object clone()
+    public AHelpers clone()
     {
         return new AHelpers(
             cloneList(this._helperDefs_));
diff --git a/src/main/java/org/sablecc/sablecc/node/AHexChar.java b/src/main/java/org/sablecc/sablecc/node/AHexChar.java
index 13e15428784eb49cd114eb8ac9d7460a3182cae2..d20a390e45c8214f3886d1a5b1d83c82456eb32e 100644
--- a/src/main/java/org/sablecc/sablecc/node/AHexChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/AHexChar.java
@@ -23,7 +23,7 @@ public final class AHexChar extends PChar
     }
 
     @Override
-    public Object clone()
+    public AHexChar clone()
     {
         return new AHexChar(
             cloneNode(this._hexChar_));
diff --git a/src/main/java/org/sablecc/sablecc/node/AIdBasic.java b/src/main/java/org/sablecc/sablecc/node/AIdBasic.java
index 55f3ba41ef89410189e826b2e0159e605ac237bc..8b908945a068a76cfa356f8e88336846b6fcd2b4 100644
--- a/src/main/java/org/sablecc/sablecc/node/AIdBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/AIdBasic.java
@@ -23,7 +23,7 @@ public final class AIdBasic extends PBasic
     }
 
     @Override
-    public Object clone()
+    public AIdBasic clone()
     {
         return new AIdBasic(
             cloneNode(this._id_));
diff --git a/src/main/java/org/sablecc/sablecc/node/AIgnTokens.java b/src/main/java/org/sablecc/sablecc/node/AIgnTokens.java
index cb4437ee47f1a9122ff01f9cfd6e5629fc68186a..5fad1bc061908c5d5674092511d2d3f591a44575 100644
--- a/src/main/java/org/sablecc/sablecc/node/AIgnTokens.java
+++ b/src/main/java/org/sablecc/sablecc/node/AIgnTokens.java
@@ -24,7 +24,7 @@ public final class AIgnTokens extends PIgnTokens
     }
 
     @Override
-    public Object clone()
+    public AIgnTokens clone()
     {
         return new AIgnTokens(
             cloneList(this._listId_));
diff --git a/src/main/java/org/sablecc/sablecc/node/AIntervalSet.java b/src/main/java/org/sablecc/sablecc/node/AIntervalSet.java
index 2963e9053530dd7933c3f2355bc9e1f50817a66a..4d182030e88b13765def80eecec9bd2885401077 100644
--- a/src/main/java/org/sablecc/sablecc/node/AIntervalSet.java
+++ b/src/main/java/org/sablecc/sablecc/node/AIntervalSet.java
@@ -27,7 +27,7 @@ public final class AIntervalSet extends PSet
     }
 
     @Override
-    public Object clone()
+    public AIntervalSet clone()
     {
         return new AIntervalSet(
             cloneNode(this._left_),
diff --git a/src/main/java/org/sablecc/sablecc/node/AListTerm.java b/src/main/java/org/sablecc/sablecc/node/AListTerm.java
index b08c49a12c4579fa57c3f52a30e1cf5b42db736a..d8ac882986f78ba37ba141a13ede881dbae1e916 100644
--- a/src/main/java/org/sablecc/sablecc/node/AListTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/AListTerm.java
@@ -28,7 +28,7 @@ public final class AListTerm extends PTerm
     }
 
     @Override
-    public Object clone()
+    public AListTerm clone()
     {
         return new AListTerm(
             cloneNode(this._lBkt_),
diff --git a/src/main/java/org/sablecc/sablecc/node/AMinusBinOp.java b/src/main/java/org/sablecc/sablecc/node/AMinusBinOp.java
index e0f0b7f49545884b90c50a8353aeb809ecb6a977..835b9ff909e29f4e1e6883a1d48fd724048c6aaf 100644
--- a/src/main/java/org/sablecc/sablecc/node/AMinusBinOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/AMinusBinOp.java
@@ -14,7 +14,7 @@ public final class AMinusBinOp extends PBinOp
     }
 
     @Override
-    public Object clone()
+    public AMinusBinOp clone()
     {
         return new AMinusBinOp();
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/ANewListTerm.java b/src/main/java/org/sablecc/sablecc/node/ANewListTerm.java
index 855252e222e38be6b6a3c849cb904912fef2ebd0..43dd3b20874877be17967a7f679ce644c2b255b7 100644
--- a/src/main/java/org/sablecc/sablecc/node/ANewListTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ANewListTerm.java
@@ -32,7 +32,7 @@ public final class ANewListTerm extends PListTerm
     }
 
     @Override
-    public Object clone()
+    public ANewListTerm clone()
     {
         return new ANewListTerm(
             cloneNode(this._prodName_),
diff --git a/src/main/java/org/sablecc/sablecc/node/ANewTerm.java b/src/main/java/org/sablecc/sablecc/node/ANewTerm.java
index a34c71cbdfdb4920d423a448d372fa20144060da..be1dc74571fa009e969f6d3de52f9e9d1286af16 100644
--- a/src/main/java/org/sablecc/sablecc/node/ANewTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ANewTerm.java
@@ -32,7 +32,7 @@ public final class ANewTerm extends PTerm
     }
 
     @Override
-    public Object clone()
+    public ANewTerm clone()
     {
         return new ANewTerm(
             cloneNode(this._prodName_),
diff --git a/src/main/java/org/sablecc/sablecc/node/ANullTerm.java b/src/main/java/org/sablecc/sablecc/node/ANullTerm.java
index e1b11d47a5bd0ac8e696b678a6a6a5535b5c9245..8a02cd29be264e174b860605d44fcd4d4212ea18 100644
--- a/src/main/java/org/sablecc/sablecc/node/ANullTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ANullTerm.java
@@ -14,7 +14,7 @@ public final class ANullTerm extends PTerm
     }
 
     @Override
-    public Object clone()
+    public ANullTerm clone()
     {
         return new ANullTerm();
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/AOperationSet.java b/src/main/java/org/sablecc/sablecc/node/AOperationSet.java
index a3085a8ac8eaa7da70e510e55df6e830d8b94af3..3e89f909c2796573fdf6244c4dceba82f0070eab 100644
--- a/src/main/java/org/sablecc/sablecc/node/AOperationSet.java
+++ b/src/main/java/org/sablecc/sablecc/node/AOperationSet.java
@@ -31,7 +31,7 @@ public final class AOperationSet extends PSet
     }
 
     @Override
-    public Object clone()
+    public AOperationSet clone()
     {
         return new AOperationSet(
             cloneNode(this._left_),
diff --git a/src/main/java/org/sablecc/sablecc/node/APlusBinOp.java b/src/main/java/org/sablecc/sablecc/node/APlusBinOp.java
index 4cc0608eb6ab94555566c65e782ee81044d04564..30b4a0cfcd1b18b181135618e9d12631e5836580 100644
--- a/src/main/java/org/sablecc/sablecc/node/APlusBinOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/APlusBinOp.java
@@ -14,7 +14,7 @@ public final class APlusBinOp extends PBinOp
     }
 
     @Override
-    public Object clone()
+    public APlusBinOp clone()
     {
         return new APlusBinOp();
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/APlusUnOp.java b/src/main/java/org/sablecc/sablecc/node/APlusUnOp.java
index dc08910a52c2392ba708ec313b7d611b7f771019..9ecf271b2e2a17f6e1a10de2fa178e5a05a13fcc 100644
--- a/src/main/java/org/sablecc/sablecc/node/APlusUnOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/APlusUnOp.java
@@ -23,7 +23,7 @@ public final class APlusUnOp extends PUnOp
     }
 
     @Override
-    public Object clone()
+    public APlusUnOp clone()
     {
         return new APlusUnOp(
             cloneNode(this._plus_));
diff --git a/src/main/java/org/sablecc/sablecc/node/AProd.java b/src/main/java/org/sablecc/sablecc/node/AProd.java
index 0e05aace006a9750d431503097b73967c651ae2f..829b66bb31a8a8e9d6594c679a9da10a722c76ed 100644
--- a/src/main/java/org/sablecc/sablecc/node/AProd.java
+++ b/src/main/java/org/sablecc/sablecc/node/AProd.java
@@ -36,7 +36,7 @@ public final class AProd extends PProd
     }
 
     @Override
-    public Object clone()
+    public AProd clone()
     {
         return new AProd(
             cloneNode(this._id_),
diff --git a/src/main/java/org/sablecc/sablecc/node/AProdName.java b/src/main/java/org/sablecc/sablecc/node/AProdName.java
index be2164f98a1e17d883a3542445b210899a8825bc..272d4a2f68ed2965ec28f0254eee795f03518e02 100644
--- a/src/main/java/org/sablecc/sablecc/node/AProdName.java
+++ b/src/main/java/org/sablecc/sablecc/node/AProdName.java
@@ -27,7 +27,7 @@ public final class AProdName extends PProdName
     }
 
     @Override
-    public Object clone()
+    public AProdName clone()
     {
         return new AProdName(
             cloneNode(this._id_),
diff --git a/src/main/java/org/sablecc/sablecc/node/AProductionSpecifier.java b/src/main/java/org/sablecc/sablecc/node/AProductionSpecifier.java
index e436ac505afb93a8b58ec8a739454e8ee90e6654..3e958eca00211a4363803ca5097763f90524ac27 100644
--- a/src/main/java/org/sablecc/sablecc/node/AProductionSpecifier.java
+++ b/src/main/java/org/sablecc/sablecc/node/AProductionSpecifier.java
@@ -14,7 +14,7 @@ public final class AProductionSpecifier extends PSpecifier
     }
 
     @Override
-    public Object clone()
+    public AProductionSpecifier clone()
     {
         return new AProductionSpecifier();
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/AProductions.java b/src/main/java/org/sablecc/sablecc/node/AProductions.java
index bf725cef5e7d50caec614c950e1ef5cdd4836bc1..3feac8c3ba3b38dd8bb2c91193d45a3f1217f817 100644
--- a/src/main/java/org/sablecc/sablecc/node/AProductions.java
+++ b/src/main/java/org/sablecc/sablecc/node/AProductions.java
@@ -24,7 +24,7 @@ public final class AProductions extends PProductions
     }
 
     @Override
-    public Object clone()
+    public AProductions clone()
     {
         return new AProductions(
             cloneList(this._prods_));
diff --git a/src/main/java/org/sablecc/sablecc/node/AQMarkUnOp.java b/src/main/java/org/sablecc/sablecc/node/AQMarkUnOp.java
index 0da67215278c24c6cdd55651a310d498619bc502..aa2b81fbbe90bcce2f64f699a3eed24216ceacd4 100644
--- a/src/main/java/org/sablecc/sablecc/node/AQMarkUnOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/AQMarkUnOp.java
@@ -23,7 +23,7 @@ public final class AQMarkUnOp extends PUnOp
     }
 
     @Override
-    public Object clone()
+    public AQMarkUnOp clone()
     {
         return new AQMarkUnOp(
             cloneNode(this._qMark_));
diff --git a/src/main/java/org/sablecc/sablecc/node/ARegExp.java b/src/main/java/org/sablecc/sablecc/node/ARegExp.java
index a0139a33f457362db2bd0d641e5ba7fe2b5289b7..18ca2e4b55a3b3f284753ee3e876692bcef71253 100644
--- a/src/main/java/org/sablecc/sablecc/node/ARegExp.java
+++ b/src/main/java/org/sablecc/sablecc/node/ARegExp.java
@@ -24,7 +24,7 @@ public final class ARegExp extends PRegExp
     }
 
     @Override
-    public Object clone()
+    public ARegExp clone()
     {
         return new ARegExp(
             cloneList(this._concats_));
diff --git a/src/main/java/org/sablecc/sablecc/node/ARegExpBasic.java b/src/main/java/org/sablecc/sablecc/node/ARegExpBasic.java
index 089c1072bde31054b4816af4159cc60cb24b31e4..50cec7258118a68a71db9746ebff6aa787456099 100644
--- a/src/main/java/org/sablecc/sablecc/node/ARegExpBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/ARegExpBasic.java
@@ -23,7 +23,7 @@ public final class ARegExpBasic extends PBasic
     }
 
     @Override
-    public Object clone()
+    public ARegExpBasic clone()
     {
         return new ARegExpBasic(
             cloneNode(this._regExp_));
diff --git a/src/main/java/org/sablecc/sablecc/node/ASetBasic.java b/src/main/java/org/sablecc/sablecc/node/ASetBasic.java
index f0e8fe31246baa4f055562176ca3fda501ba6716..1c747e4c1e31ff08fc4c0dc98889bb9b9d7d39ca 100644
--- a/src/main/java/org/sablecc/sablecc/node/ASetBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/ASetBasic.java
@@ -23,7 +23,7 @@ public final class ASetBasic extends PBasic
     }
 
     @Override
-    public Object clone()
+    public ASetBasic clone()
     {
         return new ASetBasic(
             cloneNode(this._set_));
diff --git a/src/main/java/org/sablecc/sablecc/node/ASimpleListTerm.java b/src/main/java/org/sablecc/sablecc/node/ASimpleListTerm.java
index e0ea0cc159a3edf7c7e77258156a76f575a90683..4187c1e444ed82e43bf353a1624076fa96b6f79c 100644
--- a/src/main/java/org/sablecc/sablecc/node/ASimpleListTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ASimpleListTerm.java
@@ -31,7 +31,7 @@ public final class ASimpleListTerm extends PListTerm
     }
 
     @Override
-    public Object clone()
+    public ASimpleListTerm clone()
     {
         return new ASimpleListTerm(
             cloneNode(this._specifier_),
diff --git a/src/main/java/org/sablecc/sablecc/node/ASimpleTerm.java b/src/main/java/org/sablecc/sablecc/node/ASimpleTerm.java
index 4300fa48181d95f5eecc3bb01c3238582b32c31d..7f7cd418d01529166277f7beab296f7be679aac6 100644
--- a/src/main/java/org/sablecc/sablecc/node/ASimpleTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ASimpleTerm.java
@@ -31,7 +31,7 @@ public final class ASimpleTerm extends PTerm
     }
 
     @Override
-    public Object clone()
+    public ASimpleTerm clone()
     {
         return new ASimpleTerm(
             cloneNode(this._specifier_),
diff --git a/src/main/java/org/sablecc/sablecc/node/AStarUnOp.java b/src/main/java/org/sablecc/sablecc/node/AStarUnOp.java
index 4245e7e76c72abda93515c0c2b5b40ac9144b2dd..3d6abe6bc1e6abc5ddfaf0b9d5be0e08f9a1d7c9 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStarUnOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStarUnOp.java
@@ -23,7 +23,7 @@ public final class AStarUnOp extends PUnOp
     }
 
     @Override
-    public Object clone()
+    public AStarUnOp clone()
     {
         return new AStarUnOp(
             cloneNode(this._star_));
diff --git a/src/main/java/org/sablecc/sablecc/node/AStateList.java b/src/main/java/org/sablecc/sablecc/node/AStateList.java
index 49ee0beb6107b7b6e64a6bdeabd02e84887273ca..0f768522016448966e3721a8d6c2be51b5127e87 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStateList.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStateList.java
@@ -32,7 +32,7 @@ public final class AStateList extends PStateList
     }
 
     @Override
-    public Object clone()
+    public AStateList clone()
     {
         return new AStateList(
             cloneNode(this._id_),
diff --git a/src/main/java/org/sablecc/sablecc/node/AStateListTail.java b/src/main/java/org/sablecc/sablecc/node/AStateListTail.java
index 8119f841cfb299b4c07375b010fa28f5be755beb..545102071a3e55aa33a9d3231c6dd4ffc2dbfe76 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStateListTail.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStateListTail.java
@@ -27,7 +27,7 @@ public final class AStateListTail extends PStateListTail
     }
 
     @Override
-    public Object clone()
+    public AStateListTail clone()
     {
         return new AStateListTail(
             cloneNode(this._id_),
diff --git a/src/main/java/org/sablecc/sablecc/node/AStates.java b/src/main/java/org/sablecc/sablecc/node/AStates.java
index 9abfa7996acb78bff53e9e10607a3c6f463035b7..271b30f0de3191fd817c386fdb2ebf850d6f499f 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStates.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStates.java
@@ -24,7 +24,7 @@ public final class AStates extends PStates
     }
 
     @Override
-    public Object clone()
+    public AStates clone()
     {
         return new AStates(
             cloneList(this._listId_));
diff --git a/src/main/java/org/sablecc/sablecc/node/AStringBasic.java b/src/main/java/org/sablecc/sablecc/node/AStringBasic.java
index ef1433161c3215d69539c9e08a97cb92058d3905..5b96778e5c089dbfb9df0703416cf4e27eb7a99e 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStringBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStringBasic.java
@@ -23,7 +23,7 @@ public final class AStringBasic extends PBasic
     }
 
     @Override
-    public Object clone()
+    public AStringBasic clone()
     {
         return new AStringBasic(
             cloneNode(this._string_));
diff --git a/src/main/java/org/sablecc/sablecc/node/ATokenDef.java b/src/main/java/org/sablecc/sablecc/node/ATokenDef.java
index bef0228dfd0a561653671d352bc219dc10cb248f..be7cb58bf6cc256b0760b37daaf9cbfbe5dbf7cc 100644
--- a/src/main/java/org/sablecc/sablecc/node/ATokenDef.java
+++ b/src/main/java/org/sablecc/sablecc/node/ATokenDef.java
@@ -39,7 +39,7 @@ public final class ATokenDef extends PTokenDef
     }
 
     @Override
-    public Object clone()
+    public ATokenDef clone()
     {
         return new ATokenDef(
             cloneNode(this._stateList_),
diff --git a/src/main/java/org/sablecc/sablecc/node/ATokenSpecifier.java b/src/main/java/org/sablecc/sablecc/node/ATokenSpecifier.java
index 8bec819e0f9bcb8c06895557050dbb5e21dcc8a0..716ff3b0db9d45c6f253f5dc3b41d15690e97ec1 100644
--- a/src/main/java/org/sablecc/sablecc/node/ATokenSpecifier.java
+++ b/src/main/java/org/sablecc/sablecc/node/ATokenSpecifier.java
@@ -14,7 +14,7 @@ public final class ATokenSpecifier extends PSpecifier
     }
 
     @Override
-    public Object clone()
+    public ATokenSpecifier clone()
     {
         return new ATokenSpecifier();
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/ATokens.java b/src/main/java/org/sablecc/sablecc/node/ATokens.java
index 495283f862440d0ac54cdff6a64c0d09c9d32044..f770883897f9375c3eaeb455a7d22bd2c04c90d0 100644
--- a/src/main/java/org/sablecc/sablecc/node/ATokens.java
+++ b/src/main/java/org/sablecc/sablecc/node/ATokens.java
@@ -24,7 +24,7 @@ public final class ATokens extends PTokens
     }
 
     @Override
-    public Object clone()
+    public ATokens clone()
     {
         return new ATokens(
             cloneList(this._tokenDefs_));
diff --git a/src/main/java/org/sablecc/sablecc/node/ATransition.java b/src/main/java/org/sablecc/sablecc/node/ATransition.java
index 0eb04cda0c9d3e30aba3f248aa1d83e9016870f4..f5ea0f3fa60c1ba9cc71647914b6e07f265c9997 100644
--- a/src/main/java/org/sablecc/sablecc/node/ATransition.java
+++ b/src/main/java/org/sablecc/sablecc/node/ATransition.java
@@ -23,7 +23,7 @@ public final class ATransition extends PTransition
     }
 
     @Override
-    public Object clone()
+    public ATransition clone()
     {
         return new ATransition(
             cloneNode(this._id_));
diff --git a/src/main/java/org/sablecc/sablecc/node/AUnExp.java b/src/main/java/org/sablecc/sablecc/node/AUnExp.java
index fb848c9fac9b7191f2668c4ca87dee0d12744280..bcd27d97189864e7feb0466e0df9dd15ac39fc22 100644
--- a/src/main/java/org/sablecc/sablecc/node/AUnExp.java
+++ b/src/main/java/org/sablecc/sablecc/node/AUnExp.java
@@ -27,7 +27,7 @@ public final class AUnExp extends PUnExp
     }
 
     @Override
-    public Object clone()
+    public AUnExp clone()
     {
         return new AUnExp(
             cloneNode(this._basic_),
diff --git a/src/main/java/org/sablecc/sablecc/node/EOF.java b/src/main/java/org/sablecc/sablecc/node/EOF.java
index 21bcc0c9c0ec8cf5294072e99d2630c47de2805e..20a719fa40d04f98f898c57a7e99554b93cf2e63 100644
--- a/src/main/java/org/sablecc/sablecc/node/EOF.java
+++ b/src/main/java/org/sablecc/sablecc/node/EOF.java
@@ -20,7 +20,7 @@ public final class EOF extends Token
     }
 
     @Override
-    public Object clone()
+    public EOF clone()
     {
         return new EOF(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/Node.java b/src/main/java/org/sablecc/sablecc/node/Node.java
index c90838644cf91c5b05c1ae94d4e23305a6af8303..b4c0c3309a2da3e60aed1dd4216feaf4c0d5afac 100644
--- a/src/main/java/org/sablecc/sablecc/node/Node.java
+++ b/src/main/java/org/sablecc/sablecc/node/Node.java
@@ -11,7 +11,7 @@ public abstract class Node extends PositionedNode implements Switchable, Cloneab
     private Node parent;
 
     @Override
-    public abstract Object clone();
+    public abstract Node clone();
 
     public Node parent()
     {
diff --git a/src/main/java/org/sablecc/sablecc/node/Start.java b/src/main/java/org/sablecc/sablecc/node/Start.java
index f0e517c56407d80808f9edb6a5c77fc44b1cf5fd..2626e783adfbba06017803e5b573bbcb078cb72e 100644
--- a/src/main/java/org/sablecc/sablecc/node/Start.java
+++ b/src/main/java/org/sablecc/sablecc/node/Start.java
@@ -23,7 +23,7 @@ public final class Start extends Node
     }
 
     @Override
-    public Object clone()
+    public Start clone()
     {
         return new Start(
             cloneNode(this._pGrammar_),
diff --git a/src/main/java/org/sablecc/sablecc/node/TAbstract.java b/src/main/java/org/sablecc/sablecc/node/TAbstract.java
index f4166bea19274c9220e5bc2fb14af63294334716..a942340e3fc037e3a0e8d8d257a47651f9cd574c 100644
--- a/src/main/java/org/sablecc/sablecc/node/TAbstract.java
+++ b/src/main/java/org/sablecc/sablecc/node/TAbstract.java
@@ -20,7 +20,7 @@ public final class TAbstract extends Token
     }
 
     @Override
-    public Object clone()
+    public TAbstract clone()
     {
         return new TAbstract(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TArrow.java b/src/main/java/org/sablecc/sablecc/node/TArrow.java
index fe0a8a63467d10e62d4376428aa012a5aff50fca..4817c02c0d3a84ba2de6f6e7b27e594d11c97c4d 100644
--- a/src/main/java/org/sablecc/sablecc/node/TArrow.java
+++ b/src/main/java/org/sablecc/sablecc/node/TArrow.java
@@ -20,7 +20,7 @@ public final class TArrow extends Token
     }
 
     @Override
-    public Object clone()
+    public TArrow clone()
     {
         return new TArrow(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TBar.java b/src/main/java/org/sablecc/sablecc/node/TBar.java
index bfeded14fc2623ae0a45e751ba532692a71d740d..ea2cccb4426039282634618fbc718cbad026e5ed 100644
--- a/src/main/java/org/sablecc/sablecc/node/TBar.java
+++ b/src/main/java/org/sablecc/sablecc/node/TBar.java
@@ -20,7 +20,7 @@ public final class TBar extends Token
     }
 
     @Override
-    public Object clone()
+    public TBar clone()
     {
         return new TBar(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TBlank.java b/src/main/java/org/sablecc/sablecc/node/TBlank.java
index bfba608e7076deba2fd36463ad0c610efe44b412..bc3665009bb6feab47a12704a8e7c104842e6ab7 100644
--- a/src/main/java/org/sablecc/sablecc/node/TBlank.java
+++ b/src/main/java/org/sablecc/sablecc/node/TBlank.java
@@ -20,7 +20,7 @@ public final class TBlank extends Token
     }
 
     @Override
-    public Object clone()
+    public TBlank clone()
     {
         return new TBlank(getText(), getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TChar.java b/src/main/java/org/sablecc/sablecc/node/TChar.java
index 7438c67b201f33101363a42105e1cb8a60a4c88c..98b21a2d37dbadf2822d47306810c888621b05ca 100644
--- a/src/main/java/org/sablecc/sablecc/node/TChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/TChar.java
@@ -20,7 +20,7 @@ public final class TChar extends Token
     }
 
     @Override
-    public Object clone()
+    public TChar clone()
     {
         return new TChar(getText(), getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TColon.java b/src/main/java/org/sablecc/sablecc/node/TColon.java
index 832682e589bf57e3b2e302e18fedb6e7e8454fdd..65692a48195015c67c0cdddeaf9b2f1a8959117b 100644
--- a/src/main/java/org/sablecc/sablecc/node/TColon.java
+++ b/src/main/java/org/sablecc/sablecc/node/TColon.java
@@ -20,7 +20,7 @@ public final class TColon extends Token
     }
 
     @Override
-    public Object clone()
+    public TColon clone()
     {
         return new TColon(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TComma.java b/src/main/java/org/sablecc/sablecc/node/TComma.java
index 98b10b7d6bd555cad38ddfc1b964f31a7e8aaf3a..8b421b5a98327a32b7167ebc3f389123e52e8f88 100644
--- a/src/main/java/org/sablecc/sablecc/node/TComma.java
+++ b/src/main/java/org/sablecc/sablecc/node/TComma.java
@@ -20,7 +20,7 @@ public final class TComma extends Token
     }
 
     @Override
-    public Object clone()
+    public TComma clone()
     {
         return new TComma(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TComment.java b/src/main/java/org/sablecc/sablecc/node/TComment.java
index 3b56ffcc222b990dc637fcd9efb4eb1fae5f36f8..28348652e8a046a60e40ae069165ccecd77de2f6 100644
--- a/src/main/java/org/sablecc/sablecc/node/TComment.java
+++ b/src/main/java/org/sablecc/sablecc/node/TComment.java
@@ -20,7 +20,7 @@ public final class TComment extends Token
     }
 
     @Override
-    public Object clone()
+    public TComment clone()
     {
         return new TComment(getText(), getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TDDot.java b/src/main/java/org/sablecc/sablecc/node/TDDot.java
index dcd4d66d2b74d61288ee38168f8be102092f344a..fd34621c749fea90a4bdc212e3c103719cd86876 100644
--- a/src/main/java/org/sablecc/sablecc/node/TDDot.java
+++ b/src/main/java/org/sablecc/sablecc/node/TDDot.java
@@ -20,7 +20,7 @@ public final class TDDot extends Token
     }
 
     @Override
-    public Object clone()
+    public TDDot clone()
     {
         return new TDDot(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TDecChar.java b/src/main/java/org/sablecc/sablecc/node/TDecChar.java
index ffc4d98ce7c0cb4c0375232eea0b015ff277b49c..9511c49e38fdb6b9a2cf55e12a350a712bf8a026 100644
--- a/src/main/java/org/sablecc/sablecc/node/TDecChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/TDecChar.java
@@ -20,7 +20,7 @@ public final class TDecChar extends Token
     }
 
     @Override
-    public Object clone()
+    public TDecChar clone()
     {
         return new TDecChar(getText(), getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TDot.java b/src/main/java/org/sablecc/sablecc/node/TDot.java
index 8c168fc481fcabe780f1c0c8d9a4b45b48476d5e..ff5683783d98e6ce6ebe0d92fda74d628b75cf40 100644
--- a/src/main/java/org/sablecc/sablecc/node/TDot.java
+++ b/src/main/java/org/sablecc/sablecc/node/TDot.java
@@ -20,7 +20,7 @@ public final class TDot extends Token
     }
 
     @Override
-    public Object clone()
+    public TDot clone()
     {
         return new TDot(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TEqual.java b/src/main/java/org/sablecc/sablecc/node/TEqual.java
index eefa278f6a246ae3e38cb2d4075818e55bf422ea..015aba3c9f38188b56ec1c94e87ab64b29d54bde 100644
--- a/src/main/java/org/sablecc/sablecc/node/TEqual.java
+++ b/src/main/java/org/sablecc/sablecc/node/TEqual.java
@@ -20,7 +20,7 @@ public final class TEqual extends Token
     }
 
     @Override
-    public Object clone()
+    public TEqual clone()
     {
         return new TEqual(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/THelpers.java b/src/main/java/org/sablecc/sablecc/node/THelpers.java
index 2c78e2c6ce7923c700214d817b9cef8e95f555c0..4c843ba6f63cbef6c0bad41887d6e3c036dfabdc 100644
--- a/src/main/java/org/sablecc/sablecc/node/THelpers.java
+++ b/src/main/java/org/sablecc/sablecc/node/THelpers.java
@@ -20,7 +20,7 @@ public final class THelpers extends Token
     }
 
     @Override
-    public Object clone()
+    public THelpers clone()
     {
         return new THelpers(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/THexChar.java b/src/main/java/org/sablecc/sablecc/node/THexChar.java
index 4f58cc4c7a8a2bec73fb5ebe746b3f802f99581a..852b578f9c7e2c1af5bb389e528de3dbadeea713 100644
--- a/src/main/java/org/sablecc/sablecc/node/THexChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/THexChar.java
@@ -20,7 +20,7 @@ public final class THexChar extends Token
     }
 
     @Override
-    public Object clone()
+    public THexChar clone()
     {
         return new THexChar(getText(), getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TId.java b/src/main/java/org/sablecc/sablecc/node/TId.java
index 4a4fdc4de0d3a271288f4e00ef988bb62c891780..fc6487560485ea98e391b04b2a752cc887592ed1 100644
--- a/src/main/java/org/sablecc/sablecc/node/TId.java
+++ b/src/main/java/org/sablecc/sablecc/node/TId.java
@@ -20,7 +20,7 @@ public final class TId extends Token
     }
 
     @Override
-    public Object clone()
+    public TId clone()
     {
         return new TId(getText(), getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TIgnored.java b/src/main/java/org/sablecc/sablecc/node/TIgnored.java
index f930778c303cc156e61f96a2c32dc9c1fc503257..55a4e7c9ad91e8d1132ef43fa2f668a125f57c8b 100644
--- a/src/main/java/org/sablecc/sablecc/node/TIgnored.java
+++ b/src/main/java/org/sablecc/sablecc/node/TIgnored.java
@@ -20,7 +20,7 @@ public final class TIgnored extends Token
     }
 
     @Override
-    public Object clone()
+    public TIgnored clone()
     {
         return new TIgnored(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TLBkt.java b/src/main/java/org/sablecc/sablecc/node/TLBkt.java
index 1c28b3f0d06a64789a903653eacf1b9306130285..60600372288ca800b778d38a884fd139b5a77457 100644
--- a/src/main/java/org/sablecc/sablecc/node/TLBkt.java
+++ b/src/main/java/org/sablecc/sablecc/node/TLBkt.java
@@ -20,7 +20,7 @@ public final class TLBkt extends Token
     }
 
     @Override
-    public Object clone()
+    public TLBkt clone()
     {
         return new TLBkt(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TLBrace.java b/src/main/java/org/sablecc/sablecc/node/TLBrace.java
index 39e376c5f87ccd870e10ce34308a8b2b65948ed6..c7c8c11ebfae55d3ec7e0abea9f437b43ded88dd 100644
--- a/src/main/java/org/sablecc/sablecc/node/TLBrace.java
+++ b/src/main/java/org/sablecc/sablecc/node/TLBrace.java
@@ -20,7 +20,7 @@ public final class TLBrace extends Token
     }
 
     @Override
-    public Object clone()
+    public TLBrace clone()
     {
         return new TLBrace(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TLPar.java b/src/main/java/org/sablecc/sablecc/node/TLPar.java
index a9d0163f934d1be16289231fee3f2234b3333f58..06b5aa99817f3ae421f958e2e896a3ee0504918a 100644
--- a/src/main/java/org/sablecc/sablecc/node/TLPar.java
+++ b/src/main/java/org/sablecc/sablecc/node/TLPar.java
@@ -20,7 +20,7 @@ public final class TLPar extends Token
     }
 
     @Override
-    public Object clone()
+    public TLPar clone()
     {
         return new TLPar(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TMinus.java b/src/main/java/org/sablecc/sablecc/node/TMinus.java
index 2b0d4a164f3b7d3a1110c1ee27764c3e44a92af7..1d5915482c242e9aa396633b815eac0d9a97b773 100644
--- a/src/main/java/org/sablecc/sablecc/node/TMinus.java
+++ b/src/main/java/org/sablecc/sablecc/node/TMinus.java
@@ -20,7 +20,7 @@ public final class TMinus extends Token
     }
 
     @Override
-    public Object clone()
+    public TMinus clone()
     {
         return new TMinus(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TNew.java b/src/main/java/org/sablecc/sablecc/node/TNew.java
index 530a3648da45c7625d7f468d1cc25e18864d9bde..39bcc556ee97270857ce3ef71b58cb3e4f965fcc 100644
--- a/src/main/java/org/sablecc/sablecc/node/TNew.java
+++ b/src/main/java/org/sablecc/sablecc/node/TNew.java
@@ -20,7 +20,7 @@ public final class TNew extends Token
     }
 
     @Override
-    public Object clone()
+    public TNew clone()
     {
         return new TNew(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TNull.java b/src/main/java/org/sablecc/sablecc/node/TNull.java
index 0d1effb0a227779a570c0cbddabf7a50cf07e091..0e718da416260e7a9fca0480a20e19634ff52b43 100644
--- a/src/main/java/org/sablecc/sablecc/node/TNull.java
+++ b/src/main/java/org/sablecc/sablecc/node/TNull.java
@@ -20,7 +20,7 @@ public final class TNull extends Token
     }
 
     @Override
-    public Object clone()
+    public TNull clone()
     {
         return new TNull(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TPackage.java b/src/main/java/org/sablecc/sablecc/node/TPackage.java
index 3ac67388f7cf9aa9e2d6ec2267c1f397a71f5442..2e6ff4f1653671e26e8f5196557450fce7b399c3 100644
--- a/src/main/java/org/sablecc/sablecc/node/TPackage.java
+++ b/src/main/java/org/sablecc/sablecc/node/TPackage.java
@@ -20,7 +20,7 @@ public final class TPackage extends Token
     }
 
     @Override
-    public Object clone()
+    public TPackage clone()
     {
         return new TPackage(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TPkgId.java b/src/main/java/org/sablecc/sablecc/node/TPkgId.java
index a1c3950873d1243d362a30de7effb26a81550a13..3913ccdc14cdc7e354bb5fdccbfd46309b98cb9b 100644
--- a/src/main/java/org/sablecc/sablecc/node/TPkgId.java
+++ b/src/main/java/org/sablecc/sablecc/node/TPkgId.java
@@ -20,7 +20,7 @@ public final class TPkgId extends Token
     }
 
     @Override
-    public Object clone()
+    public TPkgId clone()
     {
         return new TPkgId(getText(), getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TPlus.java b/src/main/java/org/sablecc/sablecc/node/TPlus.java
index 134d2fc3df31378fd66a7844abd416111e8b8d29..d3fd88d4a16918edc54ed96f1b664061a0121c87 100644
--- a/src/main/java/org/sablecc/sablecc/node/TPlus.java
+++ b/src/main/java/org/sablecc/sablecc/node/TPlus.java
@@ -20,7 +20,7 @@ public final class TPlus extends Token
     }
 
     @Override
-    public Object clone()
+    public TPlus clone()
     {
         return new TPlus(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TProductionSpecifier.java b/src/main/java/org/sablecc/sablecc/node/TProductionSpecifier.java
index 3fa2e64beb3279b7c3b29e18621e338e41b40cf4..b73250d3e6f95504fb8e725410f6301c6d4b7908 100644
--- a/src/main/java/org/sablecc/sablecc/node/TProductionSpecifier.java
+++ b/src/main/java/org/sablecc/sablecc/node/TProductionSpecifier.java
@@ -20,7 +20,7 @@ public final class TProductionSpecifier extends Token
     }
 
     @Override
-    public Object clone()
+    public TProductionSpecifier clone()
     {
         return new TProductionSpecifier(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TProductions.java b/src/main/java/org/sablecc/sablecc/node/TProductions.java
index 00ca67bbf11f285e142e730a078befc969c9d1d9..bbcf9d44e26362ae501bc5ae04e58ecc1b620b9a 100644
--- a/src/main/java/org/sablecc/sablecc/node/TProductions.java
+++ b/src/main/java/org/sablecc/sablecc/node/TProductions.java
@@ -20,7 +20,7 @@ public final class TProductions extends Token
     }
 
     @Override
-    public Object clone()
+    public TProductions clone()
     {
         return new TProductions(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TQMark.java b/src/main/java/org/sablecc/sablecc/node/TQMark.java
index 756908f0437a9320f6d0bb7a8a40ba01f07b32b7..5b77234f754f1433cb1180504039893e83943b25 100644
--- a/src/main/java/org/sablecc/sablecc/node/TQMark.java
+++ b/src/main/java/org/sablecc/sablecc/node/TQMark.java
@@ -20,7 +20,7 @@ public final class TQMark extends Token
     }
 
     @Override
-    public Object clone()
+    public TQMark clone()
     {
         return new TQMark(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TRBkt.java b/src/main/java/org/sablecc/sablecc/node/TRBkt.java
index 75d12c42417187679acce4e81f6280cea701d52a..a64429b3cc1bafe79b275fdb64d98d09bc00cfa4 100644
--- a/src/main/java/org/sablecc/sablecc/node/TRBkt.java
+++ b/src/main/java/org/sablecc/sablecc/node/TRBkt.java
@@ -20,7 +20,7 @@ public final class TRBkt extends Token
     }
 
     @Override
-    public Object clone()
+    public TRBkt clone()
     {
         return new TRBkt(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TRBrace.java b/src/main/java/org/sablecc/sablecc/node/TRBrace.java
index d4b42c71610623d83b57115e1c9cee799cf6934b..7a8a97bb0a6a8752c0a93d751135ced50299340f 100644
--- a/src/main/java/org/sablecc/sablecc/node/TRBrace.java
+++ b/src/main/java/org/sablecc/sablecc/node/TRBrace.java
@@ -20,7 +20,7 @@ public final class TRBrace extends Token
     }
 
     @Override
-    public Object clone()
+    public TRBrace clone()
     {
         return new TRBrace(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TRPar.java b/src/main/java/org/sablecc/sablecc/node/TRPar.java
index 320de81e55bf4f5252b015c75728e9f199bbbb68..b186f71fb4d8d881bbefb7a17632862a9465aa68 100644
--- a/src/main/java/org/sablecc/sablecc/node/TRPar.java
+++ b/src/main/java/org/sablecc/sablecc/node/TRPar.java
@@ -20,7 +20,7 @@ public final class TRPar extends Token
     }
 
     @Override
-    public Object clone()
+    public TRPar clone()
     {
         return new TRPar(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TSemicolon.java b/src/main/java/org/sablecc/sablecc/node/TSemicolon.java
index 6d05993aa29600bb8897d93c46980c1be654a2e6..65561a562caf4de4492e2843f4c51a8dcab6f321 100644
--- a/src/main/java/org/sablecc/sablecc/node/TSemicolon.java
+++ b/src/main/java/org/sablecc/sablecc/node/TSemicolon.java
@@ -20,7 +20,7 @@ public final class TSemicolon extends Token
     }
 
     @Override
-    public Object clone()
+    public TSemicolon clone()
     {
         return new TSemicolon(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TSlash.java b/src/main/java/org/sablecc/sablecc/node/TSlash.java
index 577eb00dc218272c84ede05e8cd94b904ce9a99d..68eae045cc58ce2150f085ea3144d85ba1f5e687 100644
--- a/src/main/java/org/sablecc/sablecc/node/TSlash.java
+++ b/src/main/java/org/sablecc/sablecc/node/TSlash.java
@@ -20,7 +20,7 @@ public final class TSlash extends Token
     }
 
     @Override
-    public Object clone()
+    public TSlash clone()
     {
         return new TSlash(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TStar.java b/src/main/java/org/sablecc/sablecc/node/TStar.java
index c2acc15146892066e5ec9b29a0100ea14b8f3f91..37ff65d699bc2c3ec583c2afa0bdedae569380b4 100644
--- a/src/main/java/org/sablecc/sablecc/node/TStar.java
+++ b/src/main/java/org/sablecc/sablecc/node/TStar.java
@@ -20,7 +20,7 @@ public final class TStar extends Token
     }
 
     @Override
-    public Object clone()
+    public TStar clone()
     {
         return new TStar(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TStates.java b/src/main/java/org/sablecc/sablecc/node/TStates.java
index e01448a1af2fde4a11dbee107d5ca264cee13e35..6f4dd26aa72d3d34cb5624c559df29311029b744 100644
--- a/src/main/java/org/sablecc/sablecc/node/TStates.java
+++ b/src/main/java/org/sablecc/sablecc/node/TStates.java
@@ -20,7 +20,7 @@ public final class TStates extends Token
     }
 
     @Override
-    public Object clone()
+    public TStates clone()
     {
         return new TStates(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TString.java b/src/main/java/org/sablecc/sablecc/node/TString.java
index 9b606f107920995343542949b7b79950ce147053..f04e798308b84f99d10ac13a0e7c54198ea615a6 100644
--- a/src/main/java/org/sablecc/sablecc/node/TString.java
+++ b/src/main/java/org/sablecc/sablecc/node/TString.java
@@ -20,7 +20,7 @@ public final class TString extends Token
     }
 
     @Override
-    public Object clone()
+    public TString clone()
     {
         return new TString(getText(), getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TSyntax.java b/src/main/java/org/sablecc/sablecc/node/TSyntax.java
index 68392c8d92c2fe0514ecbe7a95613c994b37eee1..699ec81368d537b148738386bedf255a89846a26 100644
--- a/src/main/java/org/sablecc/sablecc/node/TSyntax.java
+++ b/src/main/java/org/sablecc/sablecc/node/TSyntax.java
@@ -20,7 +20,7 @@ public final class TSyntax extends Token
     }
 
     @Override
-    public Object clone()
+    public TSyntax clone()
     {
         return new TSyntax(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TTokenSpecifier.java b/src/main/java/org/sablecc/sablecc/node/TTokenSpecifier.java
index 288515d8203c60bafa656a641d4760c3e388318d..98bc334709a97419a4e80605ae29557d2f03ed89 100644
--- a/src/main/java/org/sablecc/sablecc/node/TTokenSpecifier.java
+++ b/src/main/java/org/sablecc/sablecc/node/TTokenSpecifier.java
@@ -20,7 +20,7 @@ public final class TTokenSpecifier extends Token
     }
 
     @Override
-    public Object clone()
+    public TTokenSpecifier clone()
     {
         return new TTokenSpecifier(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TTokens.java b/src/main/java/org/sablecc/sablecc/node/TTokens.java
index 6f993c12172116c11e33b95559d5e488d181e9bf..02740484431f7c344eef52de797e5c9230b95313 100644
--- a/src/main/java/org/sablecc/sablecc/node/TTokens.java
+++ b/src/main/java/org/sablecc/sablecc/node/TTokens.java
@@ -20,7 +20,7 @@ public final class TTokens extends Token
     }
 
     @Override
-    public Object clone()
+    public TTokens clone()
     {
         return new TTokens(getLine(), getPos());
     }
diff --git a/src/main/java/org/sablecc/sablecc/node/TTree.java b/src/main/java/org/sablecc/sablecc/node/TTree.java
index a259bc28cc9c89192d7d1f00ecf6270a3f0ee8cd..4fb7688a5caebce04bb6e081b81ec786a46c738f 100644
--- a/src/main/java/org/sablecc/sablecc/node/TTree.java
+++ b/src/main/java/org/sablecc/sablecc/node/TTree.java
@@ -20,7 +20,7 @@ public final class TTree extends Token
     }
 
     @Override
-    public Object clone()
+    public TTree clone()
     {
         return new TTree(getLine(), getPos());
     }
diff --git a/src/main/resources/org/sablecc/sablecc/alternatives.txt b/src/main/resources/org/sablecc/sablecc/alternatives.txt
index 60c4395fe1ff3a1340a1f42ecf7ff077f073ba86..ef3c2d4e3ee034a003f8ff1b95f613436312a81a 100644
--- a/src/main/resources/org/sablecc/sablecc/alternatives.txt
+++ b/src/main/resources/org/sablecc/sablecc/alternatives.txt
@@ -79,7 +79,7 @@ $
 Macro:CloneHeader
 
     @Override
-    public Object clone()
+    public $0$ clone()
     {
         return new $0$(
 $
diff --git a/src/main/resources/org/sablecc/sablecc/tokens.txt b/src/main/resources/org/sablecc/sablecc/tokens.txt
index 63c37c7a1478a5a5b3abe0edf9824bd0d967ff04..f93224cd03ff3b3ee5bb851a8f2e687da82aad31 100644
--- a/src/main/resources/org/sablecc/sablecc/tokens.txt
+++ b/src/main/resources/org/sablecc/sablecc/tokens.txt
@@ -31,7 +31,7 @@ public final class $2$ extends Token
     }
 
     @Override
-    public Object clone()
+    public $2$ clone()
     {
         return new $2$(getText(), getLine(), getPos());
     }
@@ -72,7 +72,7 @@ public final class $2$ extends Token
     }
 
     @Override
-    public Object clone()
+    public $2$ clone()
     {
         return new $2$(getLine(), getPos());
     }
diff --git a/src/main/resources/org/sablecc/sablecc/utils.txt b/src/main/resources/org/sablecc/sablecc/utils.txt
index 79dfaa45f72b3a7507d44d39550edf36180ae65b..983fc3e8d2169a49a0249049de83e1c06d737345 100644
--- a/src/main/resources/org/sablecc/sablecc/utils.txt
+++ b/src/main/resources/org/sablecc/sablecc/utils.txt
@@ -31,7 +31,7 @@ public final class Start extends Node
     }
 
     @Override
-    public Object clone()
+    public Start clone()
     {
         return new Start(
             cloneNode(this._$3$_),
@@ -164,7 +164,7 @@ public final class EOF extends Token
     }
 
     @Override
-    public Object clone()
+    public EOF clone()
     {
         return new EOF(getLine(), getPos());
     }
@@ -264,7 +264,7 @@ public abstract class Node extends PositionedNode implements Switchable, Cloneab
     private Node parent;
 
     @Override
-    public abstract Object clone();
+    public abstract Node clone();
 
     public Node parent()
     {