diff --git a/src/main/resources/de/hhu/stups/codegenerator/JavaTemplate.stg b/src/main/resources/de/hhu/stups/codegenerator/JavaTemplate.stg
index 2083b9dd0a129cbaecbc90392dbde5b0cb197f2d..0dca74d825cac05f99e6860ba1a20d7b0a80fdd3 100644
--- a/src/main/resources/de/hhu/stups/codegenerator/JavaTemplate.stg
+++ b/src/main/resources/de/hhu/stups/codegenerator/JavaTemplate.stg
@@ -591,8 +591,26 @@ public enum <name> implements BObject {
 freetype_declaration(name) ::= <<
 public static abstract class <name> extends BFreetype {
 
-    protected <name>() {
+    private <name>() {
+    }
+
+    public final BBoolean equal(<name> o) {
+        return new BBoolean(this.equals(o));
+    }
+
+    public final BBoolean unequal(<name> o) {
+        return this.equal(o).not();
     }
+
+    @Override
+    public abstract boolean equals(Object o);
+
+    @Override
+    public abstract int hashCode();
+
+    @Override
+    public abstract String toString();
+
 }
 >>
 
@@ -604,14 +622,6 @@ public static final class <name> extends <freetype> {
     private <name>() {
     }
 
-    public BBoolean equal(<freetype> o) {
-        return new BBoolean(this.equals(o));
-    }
-
-    public BBoolean unequal(<freetype> o) {
-        return this.equal(o).not();
-    }
-
     @Override
     public boolean equals(Object o) {
         return o instanceof <name>;
@@ -619,7 +629,7 @@ public static final class <name> extends <freetype> {
 
     @Override
     public int hashCode() {
-        return this.getClass().hashCode();
+        return <name>.class.hashCode();
     }
 
     @Override
@@ -630,7 +640,7 @@ public static final class <name> extends <freetype> {
 >>
 
 freetype_constructor_declaration(name,freetype,subtype) ::= <<
-public final class <name> extends <freetype> {
+public static final class <name> extends <freetype> {
 
     private final <subtype> value;
 
@@ -642,14 +652,6 @@ public final class <name> extends <freetype> {
         return this.value;
     }
 
-    public BBoolean equal(<freetype> o) {
-        return new BBoolean(this.equals(o));
-    }
-
-    public BBoolean unequal(<freetype> o) {
-        return this.equal(o).not();
-    }
-
     @Override
     public boolean equals(Object o) {
         if (this == o) {
@@ -663,7 +665,7 @@ public final class <name> extends <freetype> {
 
     @Override
     public int hashCode() {
-        return Objects.hash(this.getClass(), this.value);
+        return Objects.hash(<name>.class, this.value);
     }
 
     @Override