diff --git a/src/main/java/org/sablecc/sablecc/node/Node.java b/src/main/java/org/sablecc/sablecc/node/Node.java
index 816c105ac6f3fceb47930e0fdf8186167b3c7cb0..f37caa17aa10369ec626ddc9a28edc095347f5e2 100644
--- a/src/main/java/org/sablecc/sablecc/node/Node.java
+++ b/src/main/java/org/sablecc/sablecc/node/Node.java
@@ -2,17 +2,19 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
+import java.util.LinkedList;
+import java.util.List;
+
 import de.hhu.stups.sablecc.patch.PositionedNode;
 
 public abstract class Node extends PositionedNode implements Switchable, Cloneable
 {
     private Node parent;
 
-    public Node()
+    protected Node()
     {}
 
-    public Node(Node node)
+    protected Node(Node node)
     {
         super(node);
         // Copy constructor intentionally does not keep parent!
@@ -41,7 +43,7 @@ public abstract class Node extends PositionedNode implements Switchable, Cloneab
         this.parent.replaceChild(this, node);
     }
 
-    protected String toString(Node node)
+    protected static String toString(Node node)
     {
         if(node != null)
         {
@@ -51,9 +53,9 @@ public abstract class Node extends PositionedNode implements Switchable, Cloneab
         return "";
     }
 
-    protected String toString(List<?> list)
+    protected static String toString(List<?> list)
     {
-        StringBuffer s = new StringBuffer();
+        StringBuilder s = new StringBuilder();
 
         for(Object o : list)
         {
@@ -64,7 +66,7 @@ public abstract class Node extends PositionedNode implements Switchable, Cloneab
     }
 
     @SuppressWarnings("unchecked")
-    protected <T extends Node> T cloneNode(T node)
+    protected static <T extends Node> T cloneNode(T node)
     {
         if(node != null)
         {
@@ -75,7 +77,7 @@ public abstract class Node extends PositionedNode implements Switchable, Cloneab
     }
 
     @SuppressWarnings("unchecked")
-    protected <T extends Node> List<T> cloneList(List<T> list)
+    protected static <T extends Node> List<T> cloneList(List<T> list)
     {
         List<T> clone = new LinkedList<T>();
 
diff --git a/src/main/java/org/sablecc/sablecc/node/Token.java b/src/main/java/org/sablecc/sablecc/node/Token.java
index 54631a1e1e8a664268881b61f64ee33e28f87ad7..bc0376a9cfbf59aabfc228576aa2befa4d6f9914 100644
--- a/src/main/java/org/sablecc/sablecc/node/Token.java
+++ b/src/main/java/org/sablecc/sablecc/node/Token.java
@@ -12,24 +12,24 @@ public abstract class Token extends Node implements IToken
     private int line;
     private int pos;
 
-    public Token(String text, int line, int pos)
+    protected Token(String text, int line, int pos)
     {
         this.text = text;
         this.line = line;
         this.pos = pos;
     }
 
-    public Token(String text)
+    protected Token(String text)
     {
         this(text, 0, 0);
     }
 
-    public Token()
+    protected Token()
     {
         this((String)null);
     }
 
-    public Token(Token token)
+    protected Token(Token token)
     {
         super(token);
         this.text = token.text;
@@ -37,6 +37,9 @@ public abstract class Token extends Node implements IToken
         this.pos = token.pos;
     }
 
+    @Override
+    public abstract Token clone();
+
     @Override
     public String getText()
     {
diff --git a/src/main/resources/org/sablecc/sablecc/utils.txt b/src/main/resources/org/sablecc/sablecc/utils.txt
index 9c698dc3d793b18590b2454355485aa8279bb159..13ce65183810bdd68b5171378238c8e11090b6e0 100644
--- a/src/main/resources/org/sablecc/sablecc/utils.txt
+++ b/src/main/resources/org/sablecc/sablecc/utils.txt
@@ -201,24 +201,24 @@ public abstract class Token extends Node implements IToken
     private int line;
     private int pos;
 
-    public Token(String text, int line, int pos)
+    protected Token(String text, int line, int pos)
     {
         this.text = text;
         this.line = line;
         this.pos = pos;
     }
 
-    public Token(String text)
+    protected Token(String text)
     {
         this(text, 0, 0);
     }
 
-    public Token()
+    protected Token()
     {
         this((String)null);
     }
 
-    public Token(Token token)
+    protected Token(Token token)
     {
         super(token);
         this.text = token.text;
@@ -226,6 +226,9 @@ public abstract class Token extends Node implements IToken
         this.pos = token.pos;
     }
 
+    @Override
+    public abstract Token clone();
+
     @Override
     public String getText()
     {
@@ -323,17 +326,19 @@ Macro:Node
 
 package $0$;
 
-import java.util.*;
+import java.util.LinkedList;
+import java.util.List;
+
 import de.hhu.stups.sablecc.patch.PositionedNode;
 
 public abstract class Node extends PositionedNode implements Switchable, Cloneable
 {
     private Node parent;
 
-    public Node()
+    protected Node()
     {}
 
-    public Node(Node node)
+    protected Node(Node node)
     {
         super(node);
         // Copy constructor intentionally does not keep parent!
@@ -362,7 +367,7 @@ public abstract class Node extends PositionedNode implements Switchable, Cloneab
         this.parent.replaceChild(this, node);
     }
 
-    protected String toString(Node node)
+    protected static String toString(Node node)
     {
         if(node != null)
         {
@@ -372,9 +377,9 @@ public abstract class Node extends PositionedNode implements Switchable, Cloneab
         return "";
     }
 
-    protected String toString(List<?> list)
+    protected static String toString(List<?> list)
     {
-        StringBuffer s = new StringBuffer();
+        StringBuilder s = new StringBuilder();
 
         for(Object o : list)
         {
@@ -385,7 +390,7 @@ public abstract class Node extends PositionedNode implements Switchable, Cloneab
     }
 
     @SuppressWarnings("unchecked")
-    protected <T extends Node> T cloneNode(T node)
+    protected static <T extends Node> T cloneNode(T node)
     {
         if(node != null)
         {
@@ -396,7 +401,7 @@ public abstract class Node extends PositionedNode implements Switchable, Cloneab
     }
 
     @SuppressWarnings("unchecked")
-    protected <T extends Node> List<T> cloneList(List<T> list)
+    protected static <T extends Node> List<T> cloneList(List<T> list)
     {
         List<T> clone = new LinkedList<T>();